Merge branch 'ds/topo-traversal-using-commit-graph'
authorJunio C Hamano <gitster@pobox.com>
Mon, 17 Jun 2019 17:15:17 +0000 (10:15 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 17 Jun 2019 17:15:17 +0000 (10:15 -0700)
Prepare use of reachability index in topological walker that works
on a range (A..B).

* ds/topo-traversal-using-commit-graph:
  revision: keep topo-walk free of unintersting commits
  revision: use generation for A..B --topo-order queries

150 files changed:
.gitignore
Documentation/CodingGuidelines
Documentation/RelNotes/2.22.0.txt
Documentation/RelNotes/2.23.0.txt [new file with mode: 0644]
Documentation/config/format.txt
Documentation/config/trace2.txt
Documentation/git-clone.txt
Documentation/git-fast-export.txt
Documentation/git-fast-import.txt
Documentation/git-format-patch.txt
Documentation/git-merge.txt
Documentation/git-pull.txt
Documentation/git-rebase.txt
Documentation/git-send-email.txt
Documentation/git-update-server-info.txt
Documentation/git.txt
Documentation/gitattributes.txt
Documentation/gitsubmodules.txt
Documentation/merge-options.txt
Documentation/rev-list-options.txt
Documentation/technical/api-trace2.txt
GIT-VERSION-GEN
Makefile
RelNotes
branch.c
branch.h
builtin/am.c
builtin/bisect--helper.c
builtin/clone.c
builtin/column.c
builtin/fast-export.c
builtin/hash-object.c
builtin/init-db.c
builtin/log.c
builtin/merge.c
builtin/mktree.c
builtin/name-rev.c
builtin/pack-objects.c
builtin/patch-id.c
builtin/range-diff.c
builtin/read-tree.c
builtin/rebase.c
builtin/receive-pack.c
builtin/remote.c
builtin/rev-list.c
builtin/rm.c
builtin/show-branch.c
builtin/submodule--helper.c
builtin/upload-pack.c
builtin/verify-commit.c
builtin/worktree.c
builtin/write-tree.c
bundle.c
contrib/completion/git-completion.bash
diff.c
diff.h
fast-import.c
fetch-pack.c
git-rebase--am.sh [deleted file]
git-rebase--common.sh [deleted file]
git-rebase--preserve-merges.sh
git-send-email.perl
grep.c
help.c
list-objects-filter-options.c
list-objects-filter-options.h
list-objects-filter.c
ls-refs.c
merge-recursive.c
object-store.h
packfile.c
parse-options-cb.c
parse-options.c
patch-ids.c
patch-ids.h
po/TEAMS
po/bg.po
po/ca.po
po/de.po
po/es.po
po/fr.po
po/git.pot
po/it.po
po/sv.po
po/vi.po
po/zh_CN.po
progress.c
read-cache.c
refs.c
refs.h
remote-curl.c
sequencer.c
server-info.c
sha1-file.c
submodule.c
submodule.h
t/README
t/t0000-basic.sh
t/t0001-init.sh
t/t0210-trace2-normal.sh
t/t0211-trace2-perf.sh
t/t0212-trace2-event.sh
t/t0212/parse_events.perl
t/t1301-shared-repo.sh
t/t2400-worktree-add.sh
t/t3400-rebase.sh
t/t3422-rebase-incompatible-options.sh
t/t3427-rebase-subtree.sh
t/t3430-rebase-merges.sh
t/t4013-diff-various.sh
t/t4013/diff.diff_-U1_initial..side [new file with mode: 0644]
t/t4013/diff.diff_-U2_initial..side [new file with mode: 0644]
t/t4013/diff.diff_-U_initial..side [new file with mode: 0644]
t/t4014-format-patch.sh
t/t4018/matlab-class-definition [new file with mode: 0644]
t/t4018/matlab-function [new file with mode: 0644]
t/t4018/matlab-octave-section-1 [new file with mode: 0644]
t/t4018/matlab-octave-section-2 [new file with mode: 0644]
t/t4018/matlab-section [new file with mode: 0644]
t/t4202-log.sh
t/t4257-am-interactive.sh [new file with mode: 0755]
t/t5200-update-server-info.sh [new file with mode: 0755]
t/t5317-pack-objects-filter-objects.sh
t/t5509-fetch-push-namespaces.sh
t/t5607-clone-bundle.sh
t/t5617-clone-submodules-remote.sh [new file with mode: 0755]
t/t6042-merge-rename-corner-cases.sh
t/t6112-rev-list-filters-objects.sh
t/t6500-gc.sh
t/t7405-submodule-merge.sh
t/t7600-merge.sh
t/t7810-grep.sh
t/t9001-send-email.sh
t/t9300-fast-import.sh
t/t9350-fast-export.sh
t/t9350/broken-iso-8859-7-commit-message.txt [new file with mode: 0644]
t/t9350/simple-iso-8859-7-commit-message.txt [new file with mode: 0644]
t/test-lib-functions.sh
t/test-lib.sh
trace2.h
trace2/tr2_cmd_name.c
trace2/tr2_sid.c
trace2/tr2_sysenv.c
trace2/tr2_sysenv.h
trace2/tr2_tls.c
transport-helper.c
upload-pack.c
userdiff.c
worktree.c
wt-status.c

index 2374f77..4470d7c 100644 (file)
 /git-range-diff
 /git-read-tree
 /git-rebase
-/git-rebase--am
-/git-rebase--common
-/git-rebase--interactive
 /git-rebase--preserve-merges
 /git-receive-pack
 /git-reflog
index 32210a4..1169ff6 100644 (file)
@@ -412,6 +412,12 @@ For C programs:
    must be declared with "extern" in header files. However, function
    declarations should not use "extern", as that is already the default.
 
+ - You can launch gdb around your program using the shorthand GIT_DEBUGGER.
+   Run `GIT_DEBUGGER=1 ./bin-wrappers/git foo` to simply use gdb as is, or
+   run `GIT_DEBUGGER="<debugger> <debugger-args>" ./bin-wrappers/git foo` to
+   use your own debugger and arguments. Example: `GIT_DEBUGGER="ddd --gdb"
+   ./bin-wrappers/git log` (See `wrap-for-bin.sh`.)
+
 For Perl programs:
 
  - Most of the C guidelines above apply.
index cdfdabe..91e6ae9 100644 (file)
@@ -4,6 +4,13 @@ Git 2.22 Release Notes
 Updates since v2.21
 -------------------
 
+Backward compatibility note
+
+ * The filter specification "--filter=sparse:path=<path>" used to
+   create a lazy/partial clone has been removed.  Using a blob that is
+   part of the project as sparse specification is still supported with
+   the "--filter=sparse:oid=<blob>" option.
+
 UI, Workflows & Features
 
  * "git checkout --no-overlay" can be used to trigger a new mode of
@@ -181,7 +188,7 @@ Performance, Internal Implementation, Development Support etc.
    been optimized out.
 
  * Mechanically and systematically drop "extern" from function
-   declarlation.
+   declaration.
 
  * The script to aggregate perf result unconditionally depended on
    libjson-perl even though it did not have to, which has been
@@ -270,7 +277,7 @@ Fixes since v2.21
  * On platforms where "git fetch" is killed with SIGPIPE (e.g. OSX),
    the upload-pack that runs on the other end that hangs up after
    detecting an error could cause "git fetch" to die with a signal,
-   which led to a flakey test.  "git fetch" now ignores SIGPIPE during
+   which led to a flaky test.  "git fetch" now ignores SIGPIPE during
    the network portion of its operation (this is not a problem as we
    check the return status from our write(2)s).
    (merge 143588949c jk/no-sigpipe-during-network-transport later to maint).
@@ -358,7 +365,7 @@ Fixes since v2.21
    (merge b5a0bd694c nd/read-tree-reset-doc later to maint).
 
  * Code clean-up around a much-less-important-than-it-used-to-be
-   update_server_info() funtion.
+   update_server_info() function.
    (merge b3223761c8 jk/server-info-rabbit-hole later to maint).
 
  * The message given when "git commit -a <paths>" errors out has been
@@ -450,7 +457,7 @@ Fixes since v2.21
  * When given a tag that points at a commit-ish, "git replace --graft"
    failed to peel the tag before writing a replace ref, which did not
    make sense because the old graft mechanism the feature wants to
-   mimick only allowed to replace one commit object with another.
+   mimic only allowed to replace one commit object with another.
    This has been fixed.
    (merge ee521ec4cb cc/replace-graft-peel-tags later to maint).
 
@@ -500,7 +507,7 @@ Fixes since v2.21
    conflicts are resolved in working tree *.h files but before the
    resolved results are added to the index.  This has been corrected.
 
- * "git chery-pick" (and "revert" that shares the same runtime engine)
+ * "git cherry-pick" (and "revert" that shares the same runtime engine)
    that deals with multiple commits got confused when the final step
    gets stopped with a conflict and the user concluded the sequence
    with "git commit".  Attempt to fix it by cleaning up the state
@@ -535,7 +542,7 @@ Fixes since v2.21
    todo-list "rebase -i -r" uses should not be shown as a hex object
    name.
 
- * A prerequiste check in the test suite to see if a working jgit is
+ * A prerequisite check in the test suite to see if a working jgit is
    available was made more robust.
    (merge abd0f28983 tz/test-lib-check-working-jgit later to maint).
 
@@ -586,3 +593,5 @@ Fixes since v2.21
    (merge 397a46db78 js/t5580-unc-alternate-test later to maint).
    (merge d4907720a2 cm/notes-comment-fix later to maint).
    (merge 9dde06de13 cb/http-push-null-in-message-fix later to maint).
+   (merge 4c785c0edc js/rebase-config-bitfix later to maint).
+   (merge 8e9fe16c87 es/doc-gitsubmodules-markup later to maint).
diff --git a/Documentation/RelNotes/2.23.0.txt b/Documentation/RelNotes/2.23.0.txt
new file mode 100644 (file)
index 0000000..ada7f52
--- /dev/null
@@ -0,0 +1,77 @@
+Git 2.23 Release Notes
+======================
+
+Updates since v2.22
+-------------------
+
+Backward compatibility note
+
+ * The "--base" option of "format-patch" computed the patch-ids for
+   prerequisite patches in an unstable way, which has been updated to
+   compute in a way that is compatible with "git patch-id --stable".
+
+
+UI, Workflows & Features
+
+ * The "git fast-export/import" pair has been taught to handle commits
+   with log messages in encoding other than UTF-8 better.
+
+ * In recent versions of Git, per-worktree refs are exposed in
+   refs/worktrees/<wtname>/ hierarchy, which means that worktree names
+   must be a valid refname component.  The code now sanitizes the names
+   given to worktrees, to make sure these refs are well-formed.
+
+ * "git merge" learned "--quit" option that cleans up the in-progress
+   merge while leaving the working tree and the index still in a mess.
+
+ * "git format-patch" learns a configuration to set the default for
+   its --notes=<ref> option.
+
+ * The code to show args with potential typo that cannot be
+   interpreted as a commit-ish has been improved.
+
+
+Performance, Internal Implementation, Development Support etc.
+
+ * Update supporting parts of "git rebase" to remove code that should
+   no longer be used.
+
+ * Developer support to emulate unsatisfied prerequisites in tests to
+   ensure that the remainer of the tests still succeeds when tests
+   with prerequisites are skipped.
+
+ * "git update-server-info" learned not to rewrite the file with the
+   same contents.
+
+ * The way of specifying the path to find dynamic libraries at runtime
+   has been simplified.  The old default to pass -R/path/to/dir has been
+   replaced with the new default to pass -Wl,-rpath,/path/to/dir,
+   which is the more recent GCC uses.  Those who need to build with an
+   old GCC can still use "CC_LD_DYNPATH=-R"
+
+
+Fixes since v2.22
+-----------------
+
+ * A relative pathname given to "git init --template=<path> <repo>"
+   ought to be relative to the directory "git init" gets invoked in,
+   but it instead was made relative to the repository, which has been
+   corrected.
+   (merge e1df7fe43f nd/init-relative-template-fix later to maint).
+
+ * "git worktree add" used to fail when another worktree connected to
+   the same repository was corrupt, which has been corrected.
+   (merge 105df73e71 nd/corrupt-worktrees later to maint).
+
+ * The ownership rule for the file descriptor to fast-import remote
+   backend was mixed up, leading to unrelated file descriptor getting
+   closed, which has been fixed.
+   (merge 3203566a71 mh/import-transport-fd-fix later to maint).
+
+ * A "merge -c" instruction during "git rebase --rebase-merges" should
+   give the user a chance to edit the log message, even when there is
+   otherwise no need to create a new merge and replace the existing
+   one (i.e. fast-forward instead), but did not.  Which has been
+   corrected.
+
+ * Other code cleanup, docfix, build fix, etc.
index dc77941..414a5a8 100644 (file)
@@ -85,3 +85,18 @@ format.outputDirectory::
 format.useAutoBase::
        A boolean value which lets you enable the `--base=auto` option of
        format-patch by default.
+
+format.notes::
+       Provides the default value for the `--notes` option to
+       format-patch. Accepts a boolean value, or a ref which specifies
+       where to get notes. If false, format-patch defaults to
+       `--no-notes`. If true, format-patch defaults to `--notes`. If
+       set to a non-boolean value, format-patch defaults to
+       `--notes=<ref>`, where `ref` is the non-boolean value. Defaults
+       to false.
++
+If one wishes to use the ref `ref/notes/true`, please use that literal
+instead.
++
+This configuration can be specified multiple times in order to allow
+multiple notes refs to be included.
index a5f409c..2edbfb0 100644 (file)
@@ -4,17 +4,17 @@ command line arguments are not respected.
 
 trace2.normalTarget::
        This variable controls the normal target destination.
-       It may be overridden by the `GIT_TR2` environment variable.
+       It may be overridden by the `GIT_TRACE2` environment variable.
        The following table shows possible values.
 
 trace2.perfTarget::
        This variable controls the performance target destination.
-       It may be overridden by the `GIT_TR2_PERF` environment variable.
+       It may be overridden by the `GIT_TRACE2_PERF` environment variable.
        The following table shows possible values.
 
 trace2.eventTarget::
        This variable controls the event target destination.
-       It may be overridden by the `GIT_TR2_EVENT` environment variable.
+       It may be overridden by the `GIT_TRACE2_EVENT` environment variable.
        The following table shows possible values.
 +
 include::../trace2-target-values.txt[]
@@ -22,22 +22,22 @@ include::../trace2-target-values.txt[]
 trace2.normalBrief::
        Boolean.  When true `time`, `filename`, and `line` fields are
        omitted from normal output.  May be overridden by the
-       `GIT_TR2_BRIEF` environment variable.  Defaults to false.
+       `GIT_TRACE2_BRIEF` environment variable.  Defaults to false.
 
 trace2.perfBrief::
        Boolean.  When true `time`, `filename`, and `line` fields are
        omitted from PERF output.  May be overridden by the
-       `GIT_TR2_PERF_BRIEF` environment variable.  Defaults to false.
+       `GIT_TRACE2_PERF_BRIEF` environment variable.  Defaults to false.
 
 trace2.eventBrief::
        Boolean.  When true `time`, `filename`, and `line` fields are
        omitted from event output.  May be overridden by the
-       `GIT_TR2_EVENT_BRIEF` environment variable.  Defaults to false.
+       `GIT_TRACE2_EVENT_BRIEF` environment variable.  Defaults to false.
 
 trace2.eventNesting::
        Integer.  Specifies desired depth of nested regions in the
        event output.  Regions deeper than this value will be
-       omitted.  May be overridden by the `GIT_TR2_EVENT_NESTING`
+       omitted.  May be overridden by the `GIT_TRACE2_EVENT_NESTING`
        environment variable.  Defaults to 2.
 
 trace2.configParams::
@@ -45,7 +45,7 @@ trace2.configParams::
        settings that should be recorded in the trace2 output.
        For example, `core.*,remote.*.url` would cause the trace2
        output to contain events listing each configured remote.
-       May be overridden by the `GIT_TR2_CONFIG_PARAMS` environment
+       May be overridden by the `GIT_TRACE2_CONFIG_PARAMS` environment
        variable.  Unset by default.
 
 trace2.destinationDebug::
@@ -53,4 +53,4 @@ trace2.destinationDebug::
        trace target destination cannot be opened for writing.
        By default, these errors are suppressed and tracing is
        silently disabled.  May be overridden by the
-       `GIT_TR2_DST_DEBUG` environment variable.
+       `GIT_TRACE2_DST_DEBUG` environment variable.
index a0f14b5..5fc97f1 100644 (file)
@@ -15,7 +15,8 @@ SYNOPSIS
          [--dissociate] [--separate-git-dir <git dir>]
          [--depth <depth>] [--[no-]single-branch] [--no-tags]
          [--recurse-submodules[=<pathspec>]] [--[no-]shallow-submodules]
-         [--jobs <n>] [--] <repository> [<directory>]
+         [--[no-]remote-submodules] [--jobs <n>] [--] <repository>
+         [<directory>]
 
 DESCRIPTION
 -----------
@@ -260,6 +261,12 @@ or `--mirror` is given)
 --[no-]shallow-submodules::
        All submodules which are cloned will be shallow with a depth of 1.
 
+--[no-]remote-submodules::
+       All submodules which are cloned will use the status of the submodule’s
+       remote-tracking branch to update the submodule, rather than the
+       superproject’s recorded SHA-1. Equivalent to passing `--remote` to
+       `git submodule update`.
+
 --separate-git-dir=<git dir>::
        Instead of placing the cloned repository where it is supposed
        to be, place the cloned repository at the specified directory,
index 64c01ba..11427ac 100644 (file)
@@ -129,6 +129,13 @@ marks the same across runs.
        for intermediary filters (e.g. for rewriting commit messages
        which refer to older commits, or for stripping blobs by id).
 
+--reencode=(yes|no|abort)::
+       Specify how to handle `encoding` header in commit objects.  When
+       asking to 'abort' (which is the default), this program will die
+       when encountering such a commit object.  With 'yes', the commit
+       message will be reencoded into UTF-8.  With 'no', the original
+       encoding will be preserved.
+
 --refspec::
        Apply the specified refspec to each ref exported. Multiple of them can
        be specified.
index d65cdb3..7baf9e4 100644 (file)
@@ -388,6 +388,7 @@ change to the project.
        original-oid?
        ('author' (SP <name>)? SP LT <email> GT SP <when> LF)?
        'committer' (SP <name>)? SP LT <email> GT SP <when> LF
+       ('encoding' SP <encoding>)?
        data
        ('from' SP <commit-ish> LF)?
        ('merge' SP <commit-ish> LF)?
@@ -455,6 +456,12 @@ that was selected by the --date-format=<fmt> command-line option.
 See ``Date Formats'' above for the set of supported formats, and
 their syntax.
 
+`encoding`
+^^^^^^^^^^
+The optional `encoding` command indicates the encoding of the commit
+message.  Most commits are UTF-8 and the encoding is omitted, but this
+allows importing commit messages into git without first reencoding them.
+
 `from`
 ^^^^^^
 The `from` command is used to specify the commit to initialize
index 1af85d4..9ce5b8a 100644 (file)
@@ -22,7 +22,8 @@ SYNOPSIS
                   [--rfc] [--subject-prefix=Subject-Prefix]
                   [(--reroll-count|-v) <n>]
                   [--to=<email>] [--cc=<email>]
-                  [--[no-]cover-letter] [--quiet] [--notes[=<ref>]]
+                  [--[no-]cover-letter] [--quiet]
+                  [--no-notes | --notes[=<ref>]]
                   [--interdiff=<previous>]
                   [--range-diff=<previous> [--creation-factor=<percent>]]
                   [--progress]
@@ -263,6 +264,7 @@ material (this may change in the future).
        for details.
 
 --notes[=<ref>]::
+--no-notes::
        Append the notes (see linkgit:git-notes[1]) for the commit
        after the three-dash line.
 +
@@ -273,6 +275,9 @@ these explanations after `format-patch` has run but before sending,
 keeping them as Git notes allows them to be maintained between versions
 of the patch series (but see the discussion of the `notes.rewrite`
 configuration options in linkgit:git-notes[1] to use this workflow).
++
+The default is `--no-notes`, unless the `format.notes` configuration is
+set.
 
 --[no-]signature=<signature>::
        Add a signature to each message produced. Per RFC 3676 the signature
index 6294dbc..c01cfa6 100644 (file)
@@ -100,6 +100,10 @@ commit or stash your changes before running 'git merge'.
 'git merge --abort' is equivalent to 'git reset --merge' when
 `MERGE_HEAD` is present.
 
+--quit::
+       Forget about the current merge in progress. Leave the index
+       and the working tree as-is.
+
 --continue::
        After a 'git merge' stops due to conflicts you can conclude the
        merge by running 'git merge --continue' (see "HOW TO RESOLVE
index 118d9d8..a5e9501 100644 (file)
@@ -112,8 +112,9 @@ When set to `merges`, rebase using `git rebase --rebase-merges` so that
 the local merge commits are included in the rebase (see
 linkgit:git-rebase[1] for details).
 +
-When set to preserve, rebase with the `--preserve-merges` option passed
-to `git rebase` so that locally created merge commits will not be flattened.
+When set to `preserve` (deprecated in favor of `merges`), rebase with the
+`--preserve-merges` option passed to `git rebase` so that locally created
+merge commits will not be flattened.
 +
 When false, merge the current branch into the upstream branch.
 +
index f5e6ae3..5e4e927 100644 (file)
@@ -675,7 +675,8 @@ $ git rebase -i HEAD~5
 
 And move the first patch to the end of the list.
 
-You might want to preserve merges, if you have a history like this:
+You might want to recreate merge commits, e.g. if you have a history
+like this:
 
 ------------------
            X
@@ -689,7 +690,7 @@ Suppose you want to rebase the side branch starting at "A" to "Q". Make
 sure that the current HEAD is "B", and call
 
 -----------------------------
-$ git rebase -i -p --onto Q O
+$ git rebase -i -r --onto Q O
 -----------------------------
 
 Reordering and editing commits usually creates untested intermediate
index 1afe9fc..a861934 100644 (file)
@@ -278,6 +278,14 @@ must be used for each option.
 Automating
 ~~~~~~~~~~
 
+--no-[to|cc|bcc]::
+       Clears any list of "To:", "Cc:", "Bcc:" addresses previously
+       set via config.
+
+--no-identity::
+       Clears the previously read value of `sendemail.identity` set
+       via config, if any.
+
 --to-cmd=<command>::
        Specify a command to execute once per patch file which
        should generate patch file specific "To:" entries.
index bd0e364..969bb2e 100644 (file)
@@ -9,7 +9,7 @@ git-update-server-info - Update auxiliary info file to help dumb servers
 SYNOPSIS
 --------
 [verse]
-'git update-server-info' [--force]
+'git update-server-info'
 
 DESCRIPTION
 -----------
@@ -19,15 +19,6 @@ $GIT_OBJECT_DIRECTORY/info directories to help clients discover
 what references and packs the server has.  This command
 generates such auxiliary files.
 
-
-OPTIONS
--------
-
--f::
---force::
-       Update the info files from scratch.
-
-
 OUTPUT
 ------
 
index 72adfcc..6ddc1e2 100644 (file)
@@ -660,26 +660,53 @@ of clones and fetches.
        When a curl trace is enabled (see `GIT_TRACE_CURL` above), do not dump
        data (that is, only dump info lines and headers).
 
-`GIT_TR2`::
+`GIT_TRACE2`::
        Enables more detailed trace messages from the "trace2" library.
-       Output from `GIT_TR2` is a simple text-based format for human
+       Output from `GIT_TRACE2` is a simple text-based format for human
        readability.
 +
-The `GIT_TR2` variables can take many values. Any value available to
-the `GIT_TRACE` variables is also available to `GIT_TR2`. The `GIT_TR2`
-variables can also specify a Unix Domain Socket. See
-link:technical/api-trace2.html[Trace2 documentation] for full details.
+If this variable is set to "1", "2" or "true" (comparison
+is case insensitive), trace messages will be printed to
+stderr.
++
+If the variable is set to an integer value greater than 2
+and lower than 10 (strictly) then Git will interpret this
+value as an open file descriptor and will try to write the
+trace messages into this file descriptor.
++
+Alternatively, if the variable is set to an absolute path
+(starting with a '/' character), Git will interpret this
+as a file path and will try to append the trace messages
+to it.  If the path already exists and is a directory, the
+trace messages will be written to files (one per process)
+in that directory, named according to the last component
+of the SID and an optional counter (to avoid filename
+collisions).
++
+In addition, if the variable is set to
+`af_unix:[<socket_type>:]<absolute-pathname>`, Git will try
+to open the path as a Unix Domain Socket.  The socket type
+can be either `stream` or `dgram`.
++
+Unsetting the variable, or setting it to empty, "0" or
+"false" (case insensitive) disables trace messages.
++
+See link:technical/api-trace2.html[Trace2 documentation]
+for full details.
+
 
-`GIT_TR2_EVENT`::
+`GIT_TRACE2_EVENT`::
        This setting writes a JSON-based format that is suited for machine
-       interpretation. See link:technical/api-trace2.html[Trace2 documentation]
-       for full details.
+       interpretation.
+       See `GIT_TRACE2` for available trace output options and
+       link:technical/api-trace2.html[Trace2 documentation] for full details.
 
-`GIT_TR2_PERF`::
-       In addition to the text-based messages available in `GIT_TR2`, this
+`GIT_TRACE2_PERF`::
+       In addition to the text-based messages available in `GIT_TRACE2`, this
        setting writes a column-based format for understanding nesting
-       regions. See link:technical/api-trace2.html[Trace2 documentation]
-       for full details.
+       regions.
+       See `GIT_TRACE2` for available trace output options and
+       link:technical/api-trace2.html[Trace2 documentation] for full details.
 
 `GIT_REDACT_COOKIES`::
        This can be set to a comma-separated list of strings. When a curl trace
index 4fb20cd..e387cc6 100644 (file)
@@ -819,7 +819,7 @@ patterns are available:
 
 - `java` suitable for source code in the Java language.
 
-- `matlab` suitable for source code in the MATLAB language.
+- `matlab` suitable for source code in the MATLAB and Octave languages.
 
 - `objc` suitable for source code in the Objective-C language.
 
index 57999e9..0a89020 100644 (file)
@@ -169,15 +169,15 @@ ACTIVE SUBMODULES
 
 A submodule is considered active,
 
-  a. if `submodule.<name>.active` is set to `true`
+  1. if `submodule.<name>.active` is set to `true`
 +
 or
 
-  b. if the submodule's path matches the pathspec in `submodule.active`
+  2. if the submodule's path matches the pathspec in `submodule.active`
 +
 or
 
-  c. if `submodule.<name>.url` is set.
+  3. if `submodule.<name>.url` is set.
 
 and these are evaluated in this order.
 
@@ -193,11 +193,11 @@ For example:
     url = https://example.org/baz
 
 In the above config only the submodule 'bar' and 'baz' are active,
-'bar' due to (a) and 'baz' due to (c). 'foo' is inactive because
-(a) takes precedence over (c)
+'bar' due to (1) and 'baz' due to (3). 'foo' is inactive because
+(1) takes precedence over (3)
 
-Note that (c) is a historical artefact and will be ignored if the
-(a) and (b) specify that the submodule is not active. In other words,
+Note that (3) is a historical artefact and will be ignored if the
+(1) and (2) specify that the submodule is not active. In other words,
 if we have a `submodule.<name>.active` set to `false` or if the
 submodule's path is excluded in the pathspec in `submodule.active`, the
 url doesn't matter whether it is present or not. This is illustrated in
index 61876db..79a00d2 100644 (file)
@@ -102,6 +102,8 @@ merge.
 +
 With --no-squash perform the merge and commit the result. This
 option can be used to override --squash.
++
+With --squash, --commit is not allowed, and will fail.
 
 -s <strategy>::
 --strategy=<strategy>::
index ddbc1de..71a1fcc 100644 (file)
@@ -725,9 +725,6 @@ specification contained in the blob (or blob-expression) '<blob-ish>'
 to omit blobs that would not be not required for a sparse checkout on
 the requested refs.
 +
-The form '--filter=sparse:path=<path>' similarly uses a sparse-checkout
-specification contained in <path>.
-+
 The form '--filter=tree:<depth>' omits all blobs and trees whose depth
 from the root tree is >= <depth> (minimum depth if an object is located
 at multiple depths in the commits traversed). <depth>=0 will not include
@@ -737,6 +734,10 @@ tree and blobs which are referenced directly by a commit reachable from
 <commit> or an explicitly-given object. <depth>=2 is like <depth>=1
 while also including trees and blobs one more level removed from an
 explicitly-given commit or tree.
++
+Note that the form '--filter=sparse:path=<path>' that wants to read
+from an arbitrary path on the filesystem has been dropped for security
+reasons.
 
 --no-filter::
        Turn off any previous `--filter=` argument.
index 9e585b8..23c3cc7 100644 (file)
@@ -23,7 +23,7 @@ formats in the future.  This might be used to define a binary format,
 for example.
 
 Trace2 is controlled using `trace2.*` config values in the system and
-global config files and `GIT_TR2*` environment variables.  Trace2 does
+global config files and `GIT_TRACE2*` environment variables.  Trace2 does
 not read from repo local or worktree config files or respect `-c`
 command line config settings.
 
@@ -42,7 +42,7 @@ config setting.
 For example
 
 ------------
-$ export GIT_TR2=~/log.normal
+$ export GIT_TRACE2=~/log.normal
 $ git version
 git version 2.20.1.155.g426c96fcdb
 ------------
@@ -71,13 +71,13 @@ $ cat ~/log.normal
 The performance format target (PERF) is a column-based format to
 replace GIT_TRACE_PERFORMANCE and is suitable for development and
 testing, possibly to complement tools like gprof.  This format is
-enabled with the `GIT_TR2_PERF` environment variable or the
+enabled with the `GIT_TRACE2_PERF` environment variable or the
 `trace2.perfTarget` system or global config setting.
 
 For example
 
 ------------
-$ export GIT_TR2_PERF=~/log.perf
+$ export GIT_TRACE2_PERF=~/log.perf
 $ git version
 git version 2.20.1.155.g426c96fcdb
 ------------
@@ -104,14 +104,14 @@ $ cat ~/log.perf
 === The Event Format Target
 
 The event format target is a JSON-based format of event data suitable
-for telemetry analysis.  This format is enabled with the `GIT_TR2_EVENT`
+for telemetry analysis.  This format is enabled with the `GIT_TRACE2_EVENT`
 environment variable or the `trace2.eventTarget` system or global config
 setting.
 
 For example
 
 ------------
-$ export GIT_TR2_EVENT=~/log.event
+$ export GIT_TRACE2_EVENT=~/log.event
 $ git version
 git version 2.20.1.155.g426c96fcdb
 ------------
@@ -273,7 +273,7 @@ significantly affects program performance or behavior, such as
        Emits a "def_param" messages for "important" configuration
        settings.
 +
-The environment variable `GIT_TR2_CONFIG_PARAMS` or the `trace2.configParams`
+The environment variable `GIT_TRACE2_CONFIG_PARAMS` or the `trace2.configParams`
 config value can be set to a
 list of patterns of important configuration settings, for example:
 `core.*,remote.*.url`.  This function will iterate over all config
@@ -465,7 +465,7 @@ Events are written as lines of the form:
 Note that this may contain embedded LF or CRLF characters that are
 not escaped, so the event may spill across multiple lines.
 
-If `GIT_TR2_BRIEF` or `trace2.normalBrief` is true, the `time`, `filename`,
+If `GIT_TRACE2_BRIEF` or `trace2.normalBrief` is true, the `time`, `filename`,
 and `line` fields are omitted.
 
 This target is intended to be more of a summary (like GIT_TRACE) and
@@ -533,7 +533,7 @@ This field is in anticipation of in-proc submodules in the future.
 15:33:33.532712 wt-status.c:2331                  | d0 | main                     | region_leave | r1  |  0.127568 |  0.001504 | status     | label:print
 ------------
 
-If `GIT_TR2_PERF_BRIEF` or `trace2.perfBrief` is true, the `time`, `file`,
+If `GIT_TRACE2_PERF_BRIEF` or `trace2.perfBrief` is true, the `time`, `file`,
 and `line` fields are omitted.
 
 ------------
@@ -598,7 +598,7 @@ The following key/value pairs are common to all events:
 `"repo":<repo-id>`::
        when present, is the integer repo-id as described previously.
 
-If `GIT_TR2_EVENT_BRIEF` or `trace2.eventBrief` is true, the `file`
+If `GIT_TRACE2_EVENT_BRIEF` or `trace2.eventBrief` is true, the `file`
 and `line` fields are omitted from all events and the `time` field is
 only present on the "start" and "atexit" events.
 
@@ -911,7 +911,7 @@ visited.
 The `category` field may be used in a future enhancement to
 do category-based filtering.
 +
-`GIT_TR2_EVENT_NESTING` or `trace2.eventNesting` can be used to
+`GIT_TRACE2_EVENT_NESTING` or `trace2.eventNesting` can be used to
 filter deeply nested regions and data events.  It defaults to "2".
 
 `"region_leave"`::
@@ -1039,8 +1039,8 @@ rev-list, and gc.  This example also shows that fetch took
 5.199 seconds and of that 4.932 was in ssh.
 +
 ----------------
-$ export GIT_TR2_BRIEF=1
-$ export GIT_TR2=~/log.normal
+$ export GIT_TRACE2_BRIEF=1
+$ export GIT_TRACE2=~/log.normal
 $ git fetch origin
 ...
 ----------------
@@ -1075,8 +1075,8 @@ its name as "gc", it also reports the hierarchy as "fetch/gc".
 indented for clarity.)
 +
 ----------------
-$ export GIT_TR2_BRIEF=1
-$ export GIT_TR2=~/log.normal
+$ export GIT_TRACE2_BRIEF=1
+$ export GIT_TRACE2=~/log.normal
 $ git fetch origin
 ...
 ----------------
@@ -1134,8 +1134,8 @@ In this example, scanning for untracked files ran from +0.012568 to
 +0.027149 (since the process started) and took 0.014581 seconds.
 +
 ----------------
-$ export GIT_TR2_PERF_BRIEF=1
-$ export GIT_TR2_PERF=~/log.perf
+$ export GIT_TRACE2_PERF_BRIEF=1
+$ export GIT_TRACE2_PERF=~/log.perf
 $ git status
 ...
 
@@ -1180,8 +1180,8 @@ static enum path_treatment read_directory_recursive(struct dir_struct *dir,
 We can further investigate the time spent scanning for untracked files.
 +
 ----------------
-$ export GIT_TR2_PERF_BRIEF=1
-$ export GIT_TR2_PERF=~/log.perf
+$ export GIT_TRACE2_PERF_BRIEF=1
+$ export GIT_TRACE2_PERF=~/log.perf
 $ git status
 ...
 $ cat ~/log.perf
@@ -1236,8 +1236,8 @@ int read_index_from(struct index_state *istate, const char *path,
 This example shows that the index contained 3552 entries.
 +
 ----------------
-$ export GIT_TR2_PERF_BRIEF=1
-$ export GIT_TR2_PERF=~/log.perf
+$ export GIT_TRACE2_PERF_BRIEF=1
+$ export GIT_TRACE2_PERF=~/log.perf
 $ git status
 ...
 $ cat ~/log.perf
@@ -1310,8 +1310,8 @@ Data events are tagged with the active thread name.  They are used
 to report the per-thread parameters.
 +
 ----------------
-$ export GIT_TR2_PERF_BRIEF=1
-$ export GIT_TR2_PERF=~/log.perf
+$ export GIT_TRACE2_PERF_BRIEF=1
+$ export GIT_TRACE2_PERF=~/log.perf
 $ git status
 ...
 $ cat ~/log.perf
index 777a79e..122f647 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 GVF=GIT-VERSION-FILE
-DEF_VER=v2.22.0-rc1
+DEF_VER=v2.22.GIT
 
 LF='
 '
index 8a7e235..f58bf14 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -265,10 +265,6 @@ all::
 #
 # Define NO_DEFLATE_BOUND if your zlib does not have deflateBound.
 #
-# Define NO_R_TO_GCC_LINKER if your gcc does not like "-R/path/lib"
-# that tells runtime paths to dynamic libraries;
-# "-Wl,-rpath=/path/lib" is used instead.
-#
 # 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)
 #
@@ -624,8 +620,6 @@ SCRIPT_SH += git-web--browse.sh
 
 SCRIPT_LIB += git-mergetool--lib
 SCRIPT_LIB += git-parse-remote
-SCRIPT_LIB += git-rebase--am
-SCRIPT_LIB += git-rebase--common
 SCRIPT_LIB += git-rebase--preserve-merges
 SCRIPT_LIB += git-sh-setup
 SCRIPT_LIB += git-sh-i18n
@@ -1160,6 +1154,7 @@ endif
 # which'll override these defaults.
 CFLAGS = -g -O2 -Wall
 LDFLAGS =
+CC_LD_DYNPATH = -Wl,-rpath,
 BASIC_CFLAGS = -I.
 BASIC_LDFLAGS =
 
@@ -1290,16 +1285,6 @@ ifeq ($(uname_S),Darwin)
        PTHREAD_LIBS =
 endif
 
-ifndef CC_LD_DYNPATH
-       ifdef NO_R_TO_GCC_LINKER
-               # Some gcc does not accept and pass -R to the linker to specify
-               # the runtime dynamic library path.
-               CC_LD_DYNPATH = -Wl,-rpath,
-       else
-               CC_LD_DYNPATH = -R
-       endif
-endif
-
 ifdef NO_LIBGEN_H
        COMPAT_CFLAGS += -DNO_LIBGEN_H
        COMPAT_OBJS += compat/basename.o
index 0b6d9fd..248d137 120000 (symlink)
--- a/RelNotes
+++ b/RelNotes
@@ -1 +1 @@
-Documentation/RelNotes/2.22.0.txt
\ No newline at end of file
+Documentation/RelNotes/2.23.0.txt
\ No newline at end of file
index a594cc2..e70838f 100644 (file)
--- a/branch.c
+++ b/branch.c
@@ -338,14 +338,19 @@ void create_branch(struct repository *r,
        free(real_ref);
 }
 
-void remove_branch_state(struct repository *r)
+void remove_merge_branch_state(struct repository *r)
 {
-       sequencer_post_commit_cleanup(r);
        unlink(git_path_merge_head(r));
        unlink(git_path_merge_rr(r));
        unlink(git_path_merge_msg(r));
        unlink(git_path_merge_mode(r));
+}
+
+void remove_branch_state(struct repository *r)
+{
+       sequencer_post_commit_cleanup(r);
        unlink(git_path_squash_msg(r));
+       remove_merge_branch_state(r);
 }
 
 void die_if_checked_out(const char *branch, int ignore_current_worktree)
index 6f38db1..064ee57 100644 (file)
--- a/branch.h
+++ b/branch.h
@@ -60,6 +60,12 @@ int validate_branchname(const char *name, struct strbuf *ref);
  */
 int validate_new_branchname(const char *name, struct strbuf *ref, int force);
 
+/*
+ * Remove information about the merge state on the current
+ * branch. (E.g., MERGE_HEAD)
+ */
+void remove_merge_branch_state(struct repository *r);
+
 /*
  * Remove information about the state of working on the current
  * branch. (E.g., MERGE_HEAD)
index 912d982..78389d0 100644 (file)
@@ -1339,9 +1339,10 @@ static void write_index_patch(const struct am_state *state)
        struct rev_info rev_info;
        FILE *fp;
 
-       if (!get_oid_tree("HEAD", &head))
-               tree = lookup_tree(the_repository, &head);
-       else
+       if (!get_oid("HEAD", &head)) {
+               struct commit *commit = lookup_commit_or_die(&head, "HEAD");
+               tree = get_commit_tree(commit);
+       } else
                tree = lookup_tree(the_repository,
                                   the_repository->hash_algo->empty_tree);
 
@@ -1643,11 +1644,8 @@ static int do_interactive(struct am_state *state)
 {
        assert(state->msg);
 
-       if (!isatty(0))
-               die(_("cannot be interactive without stdin connected to a terminal."));
-
        for (;;) {
-               const char *reply;
+               char reply[64];
 
                puts(_("Commit Body is:"));
                puts("--------------------------");
@@ -1659,11 +1657,11 @@ static int do_interactive(struct am_state *state)
                 * in your translation. The program will only accept English
                 * input at this point.
                 */
-               reply = git_prompt(_("Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "), PROMPT_ECHO);
+               printf(_("Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "));
+               if (!fgets(reply, sizeof(reply), stdin))
+                       die("unable to read from stdin; aborting");
 
-               if (!reply) {
-                       continue;
-               } else if (*reply == 'y' || *reply == 'Y') {
+               if (*reply == 'y' || *reply == 'Y') {
                        return 0;
                } else if (*reply == 'a' || *reply == 'A') {
                        state->interactive = 0;
@@ -2334,6 +2332,9 @@ int cmd_am(int argc, const char **argv, const char *prefix)
                                argv_array_push(&paths, mkpath("%s/%s", prefix, argv[i]));
                }
 
+               if (state.interactive && !paths.argc)
+                       die(_("interactive mode requires patches on the command line"));
+
                am_setup(&state, patch_format, paths.argv, keep_cr);
 
                argv_array_clear(&paths);
index e7325fe..1fbe156 100644 (file)
@@ -570,7 +570,10 @@ static int bisect_start(struct bisect_terms *terms, int no_checkout,
        write_file(git_path_bisect_start(), "%s\n", start_head.buf);
 
        if (no_checkout) {
-               get_oid(start_head.buf, &oid);
+               if (get_oid(start_head.buf, &oid) < 0) {
+                       retval = error(_("invalid ref: '%s'"), start_head.buf);
+                       goto finish;
+               }
                if (update_ref(NULL, "BISECT_HEAD", &oid, NULL, 0,
                               UPDATE_REFS_MSG_ON_ERR)) {
                        retval = -1;
index 85b0d31..bb864d2 100644 (file)
@@ -67,6 +67,7 @@ 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 struct string_list server_options = STRING_LIST_INIT_NODUP;
+static int option_remote_submodules;
 
 static int recurse_submodules_cb(const struct option *opt,
                                 const char *arg, int unset)
@@ -142,6 +143,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, "remote-submodules", &option_remote_submodules,
+                   N_("any cloned submodules will use their remote-tracking branch")),
        OPT_END()
 };
 
@@ -354,8 +357,7 @@ static void setup_reference(void)
                             add_one_reference, &required);
 }
 
-static void copy_alternates(struct strbuf *src, struct strbuf *dst,
-                           const char *src_repo)
+static void copy_alternates(struct strbuf *src, const char *src_repo)
 {
        /*
         * Read from the source objects/info/alternates file
@@ -436,7 +438,7 @@ static void copy_or_link_directory(struct strbuf *src, struct strbuf *dest,
 
                /* Files that cannot be copied bit-for-bit... */
                if (!strcmp(src->buf + src_baselen, "/info/alternates")) {
-                       copy_alternates(src, dest, src_repo);
+                       copy_alternates(src, src_repo);
                        continue;
                }
 
@@ -791,6 +793,11 @@ static int checkout(int submodule_progress)
                if (option_verbosity < 0)
                        argv_array_push(&args, "--quiet");
 
+               if (option_remote_submodules) {
+                       argv_array_push(&args, "--remote");
+                       argv_array_push(&args, "--no-fetch");
+               }
+
                err = run_command_v_opt(args.argv, RUN_GIT_CMD);
                argv_array_clear(&args);
        }
index 5228ccf..e815e14 100644 (file)
@@ -43,7 +43,7 @@ int cmd_column(int argc, const char **argv, const char *prefix)
 
        memset(&copts, 0, sizeof(copts));
        copts.padding = 1;
-       argc = parse_options(argc, argv, "", options, builtin_column_usage, 0);
+       argc = parse_options(argc, argv, prefix, options, builtin_column_usage, 0);
        if (argc)
                usage_with_options(builtin_column_usage, options);
        if (real_command || command) {
index 9e28348..c22cef3 100644 (file)
@@ -33,6 +33,7 @@ static const char *fast_export_usage[] = {
 static int progress;
 static enum { SIGNED_TAG_ABORT, VERBATIM, WARN, WARN_STRIP, STRIP } signed_tag_mode = SIGNED_TAG_ABORT;
 static enum { TAG_FILTERING_ABORT, DROP, REWRITE } tag_of_filtered_mode = TAG_FILTERING_ABORT;
+static enum { REENCODE_ABORT, REENCODE_YES, REENCODE_NO } reencode_mode = REENCODE_ABORT;
 static int fake_missing_tagger;
 static int use_done_feature;
 static int no_data;
@@ -77,6 +78,31 @@ static int parse_opt_tag_of_filtered_mode(const struct option *opt,
        return 0;
 }
 
+static int parse_opt_reencode_mode(const struct option *opt,
+                                  const char *arg, int unset)
+{
+       if (unset) {
+               reencode_mode = REENCODE_ABORT;
+               return 0;
+       }
+
+       switch (git_parse_maybe_bool(arg)) {
+       case 0:
+               reencode_mode = REENCODE_NO;
+               break;
+       case 1:
+               reencode_mode = REENCODE_YES;
+               break;
+       default:
+               if (!strcasecmp(arg, "abort"))
+                       reencode_mode = REENCODE_ABORT;
+               else
+                       return error("Unknown reencoding mode: %s", arg);
+       }
+
+       return 0;
+}
+
 static struct decoration idnums;
 static uint32_t last_idnum;
 
@@ -453,7 +479,7 @@ static const char *find_encoding(const char *begin, const char *end)
        bol = memmem(begin, end ? end - begin : strlen(begin),
                     needle, strlen(needle));
        if (!bol)
-               return git_commit_encoding;
+               return NULL;
        bol += strlen(needle);
        eol = strchrnul(bol, '\n');
        *eol = '\0';
@@ -633,18 +659,32 @@ static void handle_commit(struct commit *commit, struct rev_info *rev,
        }
 
        mark_next_object(&commit->object);
-       if (anonymize)
+       if (anonymize) {
                reencoded = anonymize_commit_message(message);
-       else if (!is_encoding_utf8(encoding))
-               reencoded = reencode_string(message, "UTF-8", encoding);
+       } else if (encoding) {
+               switch(reencode_mode) {
+               case REENCODE_YES:
+                       reencoded = reencode_string(message, "UTF-8", encoding);
+                       break;
+               case REENCODE_NO:
+                       break;
+               case REENCODE_ABORT:
+                       die("Encountered commit-specific encoding %s in commit "
+                           "%s; use --reencode=[yes|no] to handle it",
+                           encoding, oid_to_hex(&commit->object.oid));
+               }
+       }
        if (!commit->parents)
                printf("reset %s\n", refname);
        printf("commit %s\nmark :%"PRIu32"\n", refname, last_idnum);
        if (show_original_ids)
                printf("original-oid %s\n", oid_to_hex(&commit->object.oid));
-       printf("%.*s\n%.*s\ndata %u\n%s",
+       printf("%.*s\n%.*s\n",
               (int)(author_end - author), author,
-              (int)(committer_end - committer), committer,
+              (int)(committer_end - committer), committer);
+       if (!reencoded && encoding)
+               printf("encoding %s\n", encoding);
+       printf("data %u\n%s",
               (unsigned)(reencoded
                          ? strlen(reencoded) : message
                          ? strlen(message) : 0),
@@ -1088,6 +1128,9 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)
                OPT_CALLBACK(0, "tag-of-filtered-object", &tag_of_filtered_mode, N_("mode"),
                             N_("select handling of tags that tag filtered objects"),
                             parse_opt_tag_of_filtered_mode),
+               OPT_CALLBACK(0, "reencode", &reencode_mode, N_("mode"),
+                            N_("select handling of commit messages in an alternate encoding"),
+                            parse_opt_reencode_mode),
                OPT_STRING(0, "export-marks", &export_filename, N_("file"),
                             N_("Dump marks to this file")),
                OPT_STRING(0, "import-marks", &import_filename, N_("file"),
index e055c11..640ef4d 100644 (file)
@@ -108,7 +108,7 @@ int cmd_hash_object(int argc, const char **argv, const char *prefix)
        int i;
        const char *errstr = NULL;
 
-       argc = parse_options(argc, argv, NULL, hash_object_options,
+       argc = parse_options(argc, argv, prefix, hash_object_options,
                             hash_object_usage, 0);
 
        if (flags & HASH_WRITE_OBJECT)
index 6ca0028..944ec77 100644 (file)
@@ -502,6 +502,9 @@ int cmd_init_db(int argc, const char **argv, const char *prefix)
        if (real_git_dir && !is_absolute_path(real_git_dir))
                real_git_dir = real_pathdup(real_git_dir, 1);
 
+       if (template_dir && *template_dir && !is_absolute_path(template_dir))
+               template_dir = absolute_pathdup(template_dir);
+
        if (argc == 1) {
                int mkdir_tried = 0;
        retry:
index e43ee12..7c8767d 100644 (file)
@@ -779,6 +779,8 @@ enum {
 
 static int git_format_config(const char *var, const char *value, void *cb)
 {
+       struct rev_info *rev = cb;
+
        if (!strcmp(var, "format.headers")) {
                if (!value)
                        die(_("format.headers without value"));
@@ -864,6 +866,22 @@ static int git_format_config(const char *var, const char *value, void *cb)
                        from = NULL;
                return 0;
        }
+       if (!strcmp(var, "format.notes")) {
+               struct strbuf buf = STRBUF_INIT;
+               int b = git_parse_maybe_bool(value);
+               if (!b)
+                       return 0;
+               rev->show_notes = 1;
+               if (b < 0) {
+                       strbuf_addstr(&buf, value);
+                       expand_notes_ref(&buf);
+                       string_list_append(&rev->notes_opt.extra_notes_refs,
+                                       strbuf_detach(&buf, NULL));
+               } else {
+                       rev->notes_opt.use_default_notes = 1;
+               }
+               return 0;
+       }
 
        return git_log_config(var, value, cb);
 }
@@ -1435,7 +1453,7 @@ static void prepare_bases(struct base_tree_info *bases,
                struct object_id *patch_id;
                if (*commit_base_at(&commit_base, commit))
                        continue;
-               if (commit_patch_id(commit, &diffopt, &oid, 0))
+               if (commit_patch_id(commit, &diffopt, &oid, 0, 1))
                        die(_("cannot get patch id"));
                ALLOC_GROW(bases->patch_id, bases->nr_patch_id + 1, bases->alloc_patch_id);
                patch_id = bases->patch_id + bases->nr_patch_id;
@@ -1617,8 +1635,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
        extra_to.strdup_strings = 1;
        extra_cc.strdup_strings = 1;
        init_log_defaults();
-       git_config(git_format_config, NULL);
        repo_init_revisions(the_repository, &rev, prefix);
+       git_config(git_format_config, &rev);
        rev.commit_format = CMIT_FMT_EMAIL;
        rev.expand_tabs_in_log_default = 0;
        rev.verbose_header = 1;
index e96f72a..6e99aea 100644 (file)
@@ -37,6 +37,7 @@
 #include "packfile.h"
 #include "tag.h"
 #include "alias.h"
+#include "branch.h"
 #include "commit-reach.h"
 #include "wt-status.h"
 
@@ -58,7 +59,7 @@ static const char * const builtin_merge_usage[] = {
 };
 
 static int show_diffstat = 1, shortlog_len = -1, squash;
-static int option_commit = 1;
+static int option_commit = -1;
 static int option_edit = -1;
 static int allow_trivial = 1, have_message, verify_signatures;
 static int overwrite_ignore = 1;
@@ -73,6 +74,7 @@ static int option_renormalize;
 static int verbosity;
 static int allow_rerere_auto;
 static int abort_current_merge;
+static int quit_current_merge;
 static int continue_current_merge;
 static int allow_unrelated_histories;
 static int show_progress = -1;
@@ -274,6 +276,8 @@ static struct option builtin_merge_options[] = {
        OPT__VERBOSITY(&verbosity),
        OPT_BOOL(0, "abort", &abort_current_merge,
                N_("abort the current in-progress merge")),
+       OPT_BOOL(0, "quit", &quit_current_merge,
+               N_("--abort but leave index and working tree alone")),
        OPT_BOOL(0, "continue", &continue_current_merge,
                N_("continue the current in-progress merge")),
        OPT_BOOL(0, "allow-unrelated-histories", &allow_unrelated_histories,
@@ -287,14 +291,6 @@ static struct option builtin_merge_options[] = {
        OPT_END()
 };
 
-/* Cleans up metadata that is uninteresting after a succeeded merge. */
-static void drop_save(void)
-{
-       unlink(git_path_merge_head(the_repository));
-       unlink(git_path_merge_msg(the_repository));
-       unlink(git_path_merge_mode(the_repository));
-}
-
 static int save_state(struct object_id *stash)
 {
        int len;
@@ -388,7 +384,7 @@ static void finish_up_to_date(const char *msg)
 {
        if (verbosity >= 0)
                printf("%s%s\n", squash ? _(" (nothing to squash)") : "", msg);
-       drop_save();
+       remove_merge_branch_state(the_repository);
 }
 
 static void squash_message(struct commit *commit, struct commit_list *remoteheads)
@@ -881,7 +877,7 @@ static int merge_trivial(struct commit *head, struct commit_list *remoteheads)
                        &result_commit, NULL, sign_commit))
                die(_("failed to write commit object"));
        finish(head, remoteheads, &result_commit, "In-index merge");
-       drop_save();
+       remove_merge_branch_state(the_repository);
        return 0;
 }
 
@@ -907,7 +903,7 @@ static int finish_automerge(struct commit *head,
        strbuf_addf(&buf, "Merge made by the '%s' strategy.", wt_strategy);
        finish(head, remoteheads, &result_commit, buf.buf);
        strbuf_release(&buf);
-       drop_save();
+       remove_merge_branch_state(the_repository);
        return 0;
 }
 
@@ -1289,6 +1285,16 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
                goto done;
        }
 
+       if (quit_current_merge) {
+               if (orig_argc != 2)
+                       usage_msg_opt(_("--quit expects no arguments"),
+                                     builtin_merge_usage,
+                                     builtin_merge_options);
+
+               remove_merge_branch_state(the_repository);
+               goto done;
+       }
+
        if (continue_current_merge) {
                int nargc = 1;
                const char *nargv[] = {"commit", NULL};
@@ -1339,9 +1345,19 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
        if (squash) {
                if (fast_forward == FF_NO)
                        die(_("You cannot combine --squash with --no-ff."));
+               if (option_commit > 0)
+                       die(_("You cannot combine --squash with --commit."));
+               /*
+                * squash can now silently disable option_commit - this is not
+                * a problem as it is only overriding the default, not a user
+                * supplied option.
+                */
                option_commit = 0;
        }
 
+       if (option_commit < 0)
+               option_commit = 1;
+
        if (!argc) {
                if (default_to_upstream)
                        argc = setup_with_upstream(&argv);
@@ -1495,7 +1511,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
                }
 
                finish(head_commit, remoteheads, &commit->object.oid, msg.buf);
-               drop_save();
+               remove_merge_branch_state(the_repository);
                goto done;
        } else if (!remoteheads->next && common->next)
                ;
index 94e82b8..891991b 100644 (file)
@@ -67,7 +67,7 @@ static const char *mktree_usage[] = {
        NULL
 };
 
-static void mktree_line(char *buf, size_t len, int nul_term_line, int allow_missing)
+static void mktree_line(char *buf, int nul_term_line, int allow_missing)
 {
        char *ptr, *ntr;
        const char *p;
@@ -172,7 +172,7 @@ int cmd_mktree(int ac, const char **av, const char *prefix)
                                        break;
                                die("input format error: (blank line only valid in batch mode)");
                        }
-                       mktree_line(sb.buf, sb.len, nul_term_line, allow_missing);
+                       mktree_line(sb.buf, nul_term_line, allow_missing);
                }
                if (is_batch_mode && got_eof && used < 1) {
                        /*
index 05ccf53..16df434 100644 (file)
@@ -40,9 +40,7 @@ static void set_commit_rev_name(struct commit *commit, struct rev_name *name)
 }
 
 static int is_better_name(struct rev_name *name,
-                         const char *tip_name,
                          timestamp_t taggerdate,
-                         int generation,
                          int distance,
                          int from_tag)
 {
@@ -103,8 +101,7 @@ static void name_rev(struct commit *commit,
                name = xmalloc(sizeof(rev_name));
                set_commit_rev_name(commit, name);
                goto copy_data;
-       } else if (is_better_name(name, tip_name, taggerdate,
-                                 generation, distance, from_tag)) {
+       } else if (is_better_name(name, taggerdate, distance, from_tag)) {
 copy_data:
                name->tip_name = tip_name;
                name->taggerdate = taggerdate;
index 41d7fc5..b2be886 100644 (file)
@@ -2899,7 +2899,7 @@ static int ofscmp(const void *a_, const void *b_)
                return oidcmp(&a->object->oid, &b->object->oid);
 }
 
-static void add_objects_in_unpacked_packs(struct rev_info *revs)
+static void add_objects_in_unpacked_packs(void)
 {
        struct packed_git *p;
        struct in_pack in_pack;
@@ -3011,7 +3011,7 @@ static int loosened_object_can_be_discarded(const struct object_id *oid,
        return 1;
 }
 
-static void loosen_unused_packed_objects(struct rev_info *revs)
+static void loosen_unused_packed_objects(void)
 {
        struct packed_git *p;
        uint32_t i;
@@ -3158,11 +3158,11 @@ static void get_object_list(int ac, const char **av)
        }
 
        if (keep_unreachable)
-               add_objects_in_unpacked_packs(&revs);
+               add_objects_in_unpacked_packs();
        if (pack_loose_unreachable)
                add_unreachable_loose_objects();
        if (unpack_unreachable)
-               loosen_unused_packed_objects(&revs);
+               loosen_unused_packed_objects();
 
        oid_array_clear(&recent_objects);
 }
index 970d0d3..bd28b80 100644 (file)
@@ -1,5 +1,6 @@
 #include "builtin.h"
 #include "config.h"
+#include "diff.h"
 
 static void flush_current_id(int patchlen, struct object_id *id, struct object_id *result)
 {
@@ -54,22 +55,6 @@ static int scan_hunk_header(const char *p, int *p_before, int *p_after)
        return 1;
 }
 
-static void flush_one_hunk(struct object_id *result, git_SHA_CTX *ctx)
-{
-       unsigned char hash[GIT_MAX_RAWSZ];
-       unsigned short carry = 0;
-       int i;
-
-       git_SHA1_Final(hash, ctx);
-       git_SHA1_Init(ctx);
-       /* 20-byte sum, with carry */
-       for (i = 0; i < GIT_SHA1_RAWSZ; ++i) {
-               carry += result->hash[i] + hash[i];
-               result->hash[i] = carry;
-               carry >>= 8;
-       }
-}
-
 static int get_one_patchid(struct object_id *next_oid, struct object_id *result,
                           struct strbuf *line_buf, int stable)
 {
index 784bd19..9202e75 100644 (file)
@@ -32,7 +32,7 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)
        repo_diff_setup(the_repository, &diffopt);
 
        options = parse_options_concat(range_diff_options, diffopt.parseopts);
-       argc = parse_options(argc, argv, NULL, options,
+       argc = parse_options(argc, argv, prefix, options,
                             builtin_range_diff_usage, 0);
 
        diff_setup_done(&diffopt);
index 5c9c082..ca5e655 100644 (file)
@@ -111,7 +111,7 @@ static int git_read_tree_config(const char *var, const char *value, void *cb)
        return git_default_config(var, value, cb);
 }
 
-int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
+int cmd_read_tree(int argc, const char **argv, const char *cmd_prefix)
 {
        int i, stage = 0;
        struct object_id oid;
@@ -165,7 +165,7 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
 
        git_config(git_read_tree_config, NULL);
 
-       argc = parse_options(argc, argv, unused_prefix, read_tree_options,
+       argc = parse_options(argc, argv, cmd_prefix, read_tree_options,
                             read_tree_usage, 0);
 
        hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
index ba3a574..b8116db 100644 (file)
@@ -508,7 +508,7 @@ int cmd_rebase__interactive(int argc, const char **argv, const char *prefix)
        if (argc == 1)
                usage_with_options(builtin_rebase_interactive_usage, options);
 
-       argc = parse_options(argc, argv, NULL, options,
+       argc = parse_options(argc, argv, prefix, options,
                        builtin_rebase_interactive_usage, PARSE_OPT_KEEP_ARGV0);
 
        if (!is_null_oid(&squash_onto))
@@ -1153,10 +1153,6 @@ static int run_specific_rebase(struct rebase_options *opts, enum action action)
        }
 
        switch (opts->type) {
-       case REBASE_AM:
-               backend = "git-rebase--am";
-               backend_func = "git_rebase__am";
-               break;
        case REBASE_PRESERVE_MERGES:
                backend = "git-rebase--preserve-merges";
                backend_func = "git_rebase__preserve_merges";
@@ -1167,8 +1163,7 @@ static int run_specific_rebase(struct rebase_options *opts, enum action action)
        }
 
        strbuf_addf(&script_snippet,
-                   ". git-sh-setup && . git-rebase--common &&"
-                   " . %s && %s", backend, backend_func);
+                   ". git-sh-setup && . %s && %s", backend, backend_func);
        argv[0] = script_snippet.buf;
 
        status = run_command_v_opt(argv, RUN_USING_SHELL);
@@ -1203,7 +1198,7 @@ static int rebase_config(const char *var, const char *value, void *data)
                if (git_config_bool(var, value))
                        opts->flags |= REBASE_DIFFSTAT;
                else
-                       opts->flags &= !REBASE_DIFFSTAT;
+                       opts->flags &= ~REBASE_DIFFSTAT;
                return 0;
        }
 
index 29f165d..77b7122 100644 (file)
@@ -1809,8 +1809,7 @@ static const char *unpack_with_sideband(struct shallow_info *si)
        return ret;
 }
 
-static void prepare_shallow_update(struct command *commands,
-                                  struct shallow_info *si)
+static void prepare_shallow_update(struct shallow_info *si)
 {
        int i, j, k, bitmap_size = DIV_ROUND_UP(si->ref->nr, 32);
 
@@ -1876,7 +1875,7 @@ static void update_shallow_info(struct command *commands,
        si->ref = ref;
 
        if (shallow_update) {
-               prepare_shallow_update(commands, si);
+               prepare_shallow_update(si);
                return;
        }
 
index f7edf7f..5591cef 100644 (file)
@@ -1407,7 +1407,7 @@ static int update(int argc, const char **argv)
        return retval;
 }
 
-static int remove_all_fetch_refspecs(const char *remote, const char *key)
+static int remove_all_fetch_refspecs(const char *key)
 {
        return git_config_set_multivar_gently(key, NULL, NULL, 1);
 }
@@ -1437,7 +1437,7 @@ static int set_remote_branches(const char *remotename, const char **branches,
        if (!remote_is_configured(remote, 1))
                die(_("No such remote '%s'"), remotename);
 
-       if (!add_mode && remove_all_fetch_refspecs(remotename, key.buf)) {
+       if (!add_mode && remove_all_fetch_refspecs(key.buf)) {
                strbuf_release(&key);
                return 1;
        }
index 9f31837..660172b 100644 (file)
@@ -77,7 +77,7 @@ static enum missing_action arg_missing_action;
 
 #define DEFAULT_OIDSET_SIZE     (16*1024)
 
-static void finish_commit(struct commit *commit, void *data);
+static void finish_commit(struct commit *commit);
 static void show_commit(struct commit *commit, void *data)
 {
        struct rev_list_info *info = data;
@@ -86,7 +86,7 @@ static void show_commit(struct commit *commit, void *data)
        display_progress(progress, ++progress_counter);
 
        if (info->flags & REV_LIST_QUIET) {
-               finish_commit(commit, data);
+               finish_commit(commit);
                return;
        }
 
@@ -99,7 +99,7 @@ static void show_commit(struct commit *commit, void *data)
                        revs->count_left++;
                else
                        revs->count_right++;
-               finish_commit(commit, data);
+               finish_commit(commit);
                return;
        }
 
@@ -188,10 +188,10 @@ static void show_commit(struct commit *commit, void *data)
                        putchar('\n');
        }
        maybe_flush_or_die(stdout, "stdout");
-       finish_commit(commit, data);
+       finish_commit(commit);
 }
 
-static void finish_commit(struct commit *commit, void *data)
+static void finish_commit(struct commit *commit)
 {
        if (commit->parents) {
                free_commit_list(commit->parents);
index 90cbe89..be8edc6 100644 (file)
@@ -61,7 +61,7 @@ static void print_error_files(struct string_list *files_list,
        }
 }
 
-static void submodules_absorb_gitdir_if_needed(const char *prefix)
+static void submodules_absorb_gitdir_if_needed(void)
 {
        int i;
        for (i = 0; i < list.nr; i++) {
@@ -83,7 +83,7 @@ static void submodules_absorb_gitdir_if_needed(const char *prefix)
                        continue;
 
                if (!submodule_uses_gitfile(name))
-                       absorb_git_dir_into_superproject(prefix, name,
+                       absorb_git_dir_into_superproject(name,
                                ABSORB_GITDIR_RECURSE_SUBMODULES);
        }
 }
@@ -313,7 +313,7 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
        }
 
        if (!index_only)
-               submodules_absorb_gitdir_if_needed(prefix);
+               submodules_absorb_gitdir_if_needed();
 
        /*
         * If not forced, the file, the index and the HEAD (if exists)
index 082daea..35d7f51 100644 (file)
@@ -514,7 +514,6 @@ static int show_merge_base(struct commit_list *seen, int num_rev)
 
 static int show_independent(struct commit **rev,
                            int num_rev,
-                           char **ref_name,
                            unsigned int *rev_mask)
 {
        int i;
@@ -862,7 +861,7 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)
                return show_merge_base(seen, num_rev);
 
        if (independent)
-               return show_independent(rev, num_rev, ref_name, rev_mask);
+               return show_independent(rev, num_rev, rev_mask);
 
        /* Show list; --more=-1 means list-only */
        if (1 < num_rev || extra < 0) {
index 0bf4aa0..13da32d 100644 (file)
@@ -2107,8 +2107,7 @@ static int absorb_git_dirs(int argc, const char **argv, const char *prefix)
                return 1;
 
        for (i = 0; i < list.nr; i++)
-               absorb_git_dir_into_superproject(prefix,
-                               list.entries[i]->name, flags);
+               absorb_git_dir_into_superproject(list.entries[i]->name, flags);
 
        return 0;
 }
index 42dc4da..6da8fa2 100644 (file)
@@ -33,7 +33,7 @@ int cmd_upload_pack(int argc, const char **argv, const char *prefix)
        packet_trace_identity("upload-pack");
        read_replace_refs = 0;
 
-       argc = parse_options(argc, argv, NULL, options, upload_pack_usage, 0);
+       argc = parse_options(argc, argv, prefix, options, upload_pack_usage, 0);
 
        if (argc != 1)
                usage_with_options(upload_pack_usage, options);
index 7772c07..4b9e823 100644 (file)
@@ -21,15 +21,14 @@ static const char * const verify_commit_usage[] = {
                NULL
 };
 
-static int run_gpg_verify(const struct object_id *oid, const char *buf, unsigned long size, unsigned flags)
+static int run_gpg_verify(struct commit *commit, unsigned flags)
 {
        struct signature_check signature_check;
        int ret;
 
        memset(&signature_check, 0, sizeof(signature_check));
 
-       ret = check_commit_signature(lookup_commit(the_repository, oid),
-                                    &signature_check);
+       ret = check_commit_signature(commit, &signature_check);
        print_signature_buffer(&signature_check, flags);
 
        signature_check_clear(&signature_check);
@@ -38,26 +37,20 @@ static int run_gpg_verify(const struct object_id *oid, const char *buf, unsigned
 
 static int verify_commit(const char *name, unsigned flags)
 {
-       enum object_type type;
        struct object_id oid;
-       char *buf;
-       unsigned long size;
-       int ret;
+       struct object *obj;
 
        if (get_oid(name, &oid))
                return error("commit '%s' not found.", name);
 
-       buf = read_object_file(&oid, &type, &size);
-       if (!buf)
+       obj = parse_object(the_repository, &oid);
+       if (!obj)
                return error("%s: unable to read file.", name);
-       if (type != OBJ_COMMIT)
+       if (obj->type != OBJ_COMMIT)
                return error("%s: cannot verify a non-commit object of type %s.",
-                               name, type_name(type));
-
-       ret = run_gpg_verify(&oid, buf, size, flags);
+                               name, type_name(obj->type));
 
-       free(buf);
-       return ret;
+       return run_gpg_verify((struct commit *)obj, flags);
 }
 
 static int git_verify_commit_config(const char *var, const char *value, void *cb)
index d2a7e2f..a5bb02b 100644 (file)
@@ -275,6 +275,7 @@ static int add_worktree(const char *path, const char *refname,
        struct strbuf symref = STRBUF_INIT;
        struct commit *commit = NULL;
        int is_branch = 0;
+       struct strbuf sb_name = STRBUF_INIT;
 
        validate_worktree_add(path, opts);
 
@@ -290,7 +291,13 @@ static int add_worktree(const char *path, const char *refname,
                die(_("invalid reference: %s"), refname);
 
        name = worktree_basename(path, &len);
-       git_path_buf(&sb_repo, "worktrees/%.*s", (int)(path + len - name), name);
+       strbuf_add(&sb, name, path + len - name);
+       sanitize_refname_component(sb.buf, &sb_name);
+       if (!sb_name.len)
+               BUG("How come '%s' becomes empty after sanitization?", sb.buf);
+       strbuf_reset(&sb);
+       name = sb_name.buf;
+       git_path_buf(&sb_repo, "worktrees/%s", name);
        len = sb_repo.len;
        if (safe_create_leading_directories_const(sb_repo.buf))
                die_errno(_("could not create leading directories of '%s'"),
@@ -418,6 +425,7 @@ done:
        strbuf_release(&symref);
        strbuf_release(&sb_repo);
        strbuf_release(&sb_git);
+       strbuf_release(&sb_name);
        return ret;
 }
 
index 3d46d22..45d6170 100644 (file)
@@ -16,16 +16,16 @@ static const char * const write_tree_usage[] = {
        NULL
 };
 
-int cmd_write_tree(int argc, const char **argv, const char *unused_prefix)
+int cmd_write_tree(int argc, const char **argv, const char *cmd_prefix)
 {
        int flags = 0, ret;
-       const char *prefix = NULL;
+       const char *tree_prefix = NULL;
        struct object_id oid;
        const char *me = "git-write-tree";
        struct option write_tree_options[] = {
                OPT_BIT(0, "missing-ok", &flags, N_("allow missing objects"),
                        WRITE_TREE_MISSING_OK),
-               OPT_STRING(0, "prefix", &prefix, N_("<prefix>/"),
+               OPT_STRING(0, "prefix", &tree_prefix, N_("<prefix>/"),
                           N_("write tree object for a subdirectory <prefix>")),
                { OPTION_BIT, 0, "ignore-cache-tree", &flags, NULL,
                  N_("only useful for debugging"),
@@ -35,10 +35,10 @@ int cmd_write_tree(int argc, const char **argv, const char *unused_prefix)
        };
 
        git_config(git_default_config, NULL);
-       argc = parse_options(argc, argv, unused_prefix, write_tree_options,
+       argc = parse_options(argc, argv, cmd_prefix, write_tree_options,
                             write_tree_usage, 0);
 
-       ret = write_cache_as_tree(&oid, flags, prefix);
+       ret = write_cache_as_tree(&oid, flags, tree_prefix);
        switch (ret) {
        case 0:
                printf("%s\n", oid_to_hex(&oid));
@@ -50,7 +50,7 @@ int cmd_write_tree(int argc, const char **argv, const char *unused_prefix)
                die("%s: error building trees", me);
                break;
        case WRITE_TREE_PREFIX_ERROR:
-               die("%s: prefix %s not found", me, prefix);
+               die("%s: prefix %s not found", me, tree_prefix);
                break;
        }
        return ret;
index b45666c..b5d21cd 100644 (file)
--- a/bundle.c
+++ b/bundle.c
@@ -142,6 +142,9 @@ int verify_bundle(struct repository *r,
        int i, ret = 0, req_nr;
        const char *message = _("Repository lacks these prerequisite commits:");
 
+       if (!r || !r->objects || !r->objects->odb)
+               return error(_("need a repository to verify a bundle"));
+
        repo_init_revisions(r, &revs, NULL);
        for (i = 0; i < p->nr; i++) {
                struct ref_list_entry *e = p->list + i;
index 3eefbab..9f71bcd 100644 (file)
@@ -1536,7 +1536,7 @@ _git_fetch ()
                return
                ;;
        --filter=*)
-               __gitcomp "blob:none blob:limit= sparse:oid= sparse:path=" "" "${cur##--filter=}"
+               __gitcomp "blob:none blob:limit= sparse:oid=" "" "${cur##--filter=}"
                return
                ;;
        --*)
diff --git a/diff.c b/diff.c
index 4d3cf83..1ee04e3 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -5211,9 +5211,11 @@ static int diff_opt_unified(const struct option *opt,
 
        BUG_ON_OPT_NEG(unset);
 
-       options->context = strtol(arg, &s, 10);
-       if (*s)
-               return error(_("%s expects a numerical value"), "--unified");
+       if (arg) {
+               options->context = strtol(arg, &s, 10);
+               if (*s)
+                       return error(_("%s expects a numerical value"), "--unified");
+       }
        enable_patch_output(&options->output_format);
 
        return 0;
@@ -5272,7 +5274,7 @@ static void prep_parse_options(struct diff_options *options)
                          DIFF_FORMAT_PATCH, DIFF_FORMAT_NO_OUTPUT),
                OPT_CALLBACK_F('U', "unified", options, N_("<n>"),
                               N_("generate diffs with <n> lines context"),
-                              PARSE_OPT_NONEG, diff_opt_unified),
+                              PARSE_OPT_NONEG | PARSE_OPT_OPTARG, diff_opt_unified),
                OPT_BOOL('W', "function-context", &options->flags.funccontext,
                         N_("generate diffs with <n> lines context")),
                OPT_BIT_F(0, "raw", &options->output_format,
@@ -5352,7 +5354,7 @@ static void prep_parse_options(struct diff_options *options)
                             N_("show the given source prefix instead of \"a/\""),
                             PARSE_OPT_NONEG),
                OPT_STRING_F(0, "dst-prefix", &options->b_prefix, N_("<prefix>"),
-                            N_("show the given source prefix instead of \"b/\""),
+                            N_("show the given destination prefix instead of \"b/\""),
                             PARSE_OPT_NONEG),
                OPT_CALLBACK_F(0, "line-prefix", options, N_("<prefix>"),
                               N_("prepend an additional prefix to every line of output"),
@@ -5453,13 +5455,13 @@ static void prep_parse_options(struct diff_options *options)
                               N_("equivalent to --word-diff=color --word-diff-regex=<regex>"),
                               PARSE_OPT_NONEG | PARSE_OPT_OPTARG, diff_opt_color_words),
                OPT_CALLBACK_F(0, "color-moved", options, N_("<mode>"),
-                              N_("move lines of code are colored differently"),
+                              N_("moved lines of code are colored differently"),
                               PARSE_OPT_OPTARG, diff_opt_color_moved),
                OPT_CALLBACK_F(0, "color-moved-ws", options, N_("<mode>"),
                               N_("how white spaces are ignored in --color-moved"),
                               0, diff_opt_color_moved_ws),
 
-               OPT_GROUP(N_("Diff other options")),
+               OPT_GROUP(N_("Other diff options")),
                OPT_CALLBACK_F(0, "relative", options, N_("<prefix>"),
                               N_("when run from subdir, exclude changes outside and show relative paths"),
                               PARSE_OPT_NONEG | PARSE_OPT_OPTARG,
@@ -5988,6 +5990,22 @@ static int remove_space(char *line, int len)
        return dst - line;
 }
 
+void flush_one_hunk(struct object_id *result, git_SHA_CTX *ctx)
+{
+       unsigned char hash[GIT_MAX_RAWSZ];
+       unsigned short carry = 0;
+       int i;
+
+       git_SHA1_Final(hash, ctx);
+       git_SHA1_Init(ctx);
+       /* 20-byte sum, with carry */
+       for (i = 0; i < GIT_SHA1_RAWSZ; ++i) {
+               carry += result->hash[i] + hash[i];
+               result->hash[i] = carry;
+               carry >>= 8;
+       }
+}
+
 static void patch_id_consume(void *priv, char *line, unsigned long len)
 {
        struct patch_id_t *data = priv;
@@ -6012,8 +6030,8 @@ static void patch_id_add_mode(git_SHA_CTX *ctx, unsigned mode)
        git_SHA1_Update(ctx, buf, len);
 }
 
-/* returns 0 upon success, and writes result into sha1 */
-static int diff_get_patch_id(struct diff_options *options, struct object_id *oid, int diff_header_only)
+/* returns 0 upon success, and writes result into oid */
+static int diff_get_patch_id(struct diff_options *options, struct object_id *oid, int diff_header_only, int stable)
 {
        struct diff_queue_struct *q = &diff_queued_diff;
        int i;
@@ -6023,6 +6041,7 @@ static int diff_get_patch_id(struct diff_options *options, struct object_id *oid
        git_SHA1_Init(&ctx);
        memset(&data, 0, sizeof(struct patch_id_t));
        data.ctx = &ctx;
+       oidclr(oid);
 
        for (i = 0; i < q->nr; i++) {
                xpparam_t xpp;
@@ -6098,17 +6117,22 @@ static int diff_get_patch_id(struct diff_options *options, struct object_id *oid
                                  patch_id_consume, &data, &xpp, &xecfg))
                        return error("unable to generate patch-id diff for %s",
                                     p->one->path);
+
+               if (stable)
+                       flush_one_hunk(oid, &ctx);
        }
 
-       git_SHA1_Final(oid->hash, &ctx);
+       if (!stable)
+               git_SHA1_Final(oid->hash, &ctx);
+
        return 0;
 }
 
-int diff_flush_patch_id(struct diff_options *options, struct object_id *oid, int diff_header_only)
+int diff_flush_patch_id(struct diff_options *options, struct object_id *oid, int diff_header_only, int stable)
 {
        struct diff_queue_struct *q = &diff_queued_diff;
        int i;
-       int result = diff_get_patch_id(options, oid, diff_header_only);
+       int result = diff_get_patch_id(options, oid, diff_header_only, stable);
 
        for (i = 0; i < q->nr; i++)
                diff_free_filepair(q->queue[i]);
diff --git a/diff.h b/diff.h
index b20cbcc..b680b37 100644 (file)
--- a/diff.h
+++ b/diff.h
@@ -169,7 +169,7 @@ struct diff_options {
        const char *prefix;
        int prefix_length;
        const char *stat_sep;
-       long xdl_opts;
+       int xdl_opts;
 
        /* see Documentation/diff-options.txt */
        char **anchors;
@@ -436,7 +436,8 @@ int run_diff_files(struct rev_info *revs, unsigned int option);
 int run_diff_index(struct rev_info *revs, int cached);
 
 int do_diff_cache(const struct object_id *, struct diff_options *);
-int diff_flush_patch_id(struct diff_options *, struct object_id *, int);
+int diff_flush_patch_id(struct diff_options *, struct object_id *, int, int);
+void flush_one_hunk(struct object_id *, git_SHA_CTX *);
 
 int diff_result_code(struct diff_options *, int);
 
index f38d04f..76a7bd3 100644 (file)
@@ -2585,6 +2585,7 @@ static void parse_new_commit(const char *arg)
        struct branch *b;
        char *author = NULL;
        char *committer = NULL;
+       const char *encoding = NULL;
        struct hash_list *merge_list = NULL;
        unsigned int merge_count;
        unsigned char prev_fanout, new_fanout;
@@ -2607,6 +2608,8 @@ static void parse_new_commit(const char *arg)
        }
        if (!committer)
                die("Expected committer but didn't get one");
+       if (skip_prefix(command_buf.buf, "encoding ", &encoding))
+               read_next_command();
        parse_data(&msg, 0, NULL);
        read_next_command();
        parse_from(b);
@@ -2670,9 +2673,13 @@ static void parse_new_commit(const char *arg)
        }
        strbuf_addf(&new_data,
                "author %s\n"
-               "committer %s\n"
-               "\n",
+               "committer %s\n",
                author ? author : committer, committer);
+       if (encoding)
+               strbuf_addf(&new_data,
+                       "encoding %s\n",
+                       encoding);
+       strbuf_addch(&new_data, '\n');
        strbuf_addbuf(&new_data, &msg);
        free(author);
        free(committer);
index 3f24d0c..1c10f54 100644 (file)
@@ -1115,7 +1115,7 @@ static int send_fetch_request(struct fetch_negotiator *negotiator, int fd_out,
            server_supports_v2("server-option", 1)) {
                int i;
                for (i = 0; i < args->server_options->nr; i++)
-                       packet_write_fmt(fd_out, "server-option=%s",
+                       packet_buf_write(&req_buf, "server-option=%s",
                                         args->server_options->items[i].string);
        }
 
diff --git a/git-rebase--am.sh b/git-rebase--am.sh
deleted file mode 100644 (file)
index 6416716..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-# This shell script fragment is sourced by git-rebase to implement
-# its default, fast, patch-based, non-interactive mode.
-#
-# Copyright (c) 2010 Junio C Hamano.
-#
-
-git_rebase__am () {
-
-case "$action" in
-continue)
-       git am --resolved --resolvemsg="$resolvemsg" \
-               ${gpg_sign_opt:+"$gpg_sign_opt"} &&
-       move_to_original_branch
-       return
-       ;;
-skip)
-       git am --skip --resolvemsg="$resolvemsg" &&
-       move_to_original_branch
-       return
-       ;;
-show-current-patch)
-       exec git am --show-current-patch
-       ;;
-esac
-
-if test -z "$rebase_root"
-       # this is now equivalent to ! -z "$upstream"
-then
-       revisions=$upstream...$orig_head
-else
-       revisions=$onto...$orig_head
-fi
-
-ret=0
-rm -f "$GIT_DIR/rebased-patches"
-
-git format-patch -k --stdout --full-index --cherry-pick --right-only \
-       --src-prefix=a/ --dst-prefix=b/ --no-renames --no-cover-letter \
-       --pretty=mboxrd --topo-order \
-       $git_format_patch_opt \
-       "$revisions" ${restrict_revision+^$restrict_revision} \
-       >"$GIT_DIR/rebased-patches"
-ret=$?
-
-if test 0 != $ret
-then
-       rm -f "$GIT_DIR/rebased-patches"
-       case "$head_name" in
-       refs/heads/*)
-               git checkout -q "$head_name"
-               ;;
-       *)
-               git checkout -q "$orig_head"
-               ;;
-       esac
-
-       cat >&2 <<-EOF
-
-       git encountered an error while preparing the patches to replay
-       these revisions:
-
-           $revisions
-
-       As a result, git cannot rebase them.
-       EOF
-       return $ret
-fi
-
-git am $git_am_opt --rebasing --resolvemsg="$resolvemsg" \
-       --patch-format=mboxrd \
-       $allow_rerere_autoupdate \
-       ${gpg_sign_opt:+"$gpg_sign_opt"} <"$GIT_DIR/rebased-patches"
-ret=$?
-
-rm -f "$GIT_DIR/rebased-patches"
-
-if test 0 != $ret
-then
-       test -d "$state_dir" && write_basic_state
-       return $ret
-fi
-
-move_to_original_branch
-
-}
diff --git a/git-rebase--common.sh b/git-rebase--common.sh
deleted file mode 100644 (file)
index f00e13e..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-
-resolvemsg="
-$(gettext 'Resolve all conflicts manually, mark them as resolved with
-"git add/rm <conflicted_files>", then run "git rebase --continue".
-You can instead skip this commit: run "git rebase --skip".
-To abort and get back to the state before "git rebase", run "git rebase --abort".')
-"
-
-write_basic_state () {
-       echo "$head_name" > "$state_dir"/head-name &&
-       echo "$onto" > "$state_dir"/onto &&
-       echo "$orig_head" > "$state_dir"/orig-head &&
-       test t = "$GIT_QUIET" && : > "$state_dir"/quiet
-       test t = "$verbose" && : > "$state_dir"/verbose
-       test -n "$strategy" && echo "$strategy" > "$state_dir"/strategy
-       test -n "$strategy_opts" && echo "$strategy_opts" > \
-               "$state_dir"/strategy_opts
-       test -n "$allow_rerere_autoupdate" && echo "$allow_rerere_autoupdate" > \
-               "$state_dir"/allow_rerere_autoupdate
-       test -n "$gpg_sign_opt" && echo "$gpg_sign_opt" > "$state_dir"/gpg_sign_opt
-       test -n "$signoff" && echo "$signoff" >"$state_dir"/signoff
-       test -n "$reschedule_failed_exec" && : > "$state_dir"/reschedule-failed-exec
-}
-
-apply_autostash () {
-       if test -f "$state_dir/autostash"
-       then
-               stash_sha1=$(cat "$state_dir/autostash")
-               if git stash apply $stash_sha1 >/dev/null 2>&1
-               then
-                       echo "$(gettext 'Applied autostash.')" >&2
-               else
-                       git stash store -m "autostash" -q $stash_sha1 ||
-                       die "$(eval_gettext "Cannot store \$stash_sha1")"
-                       gettext 'Applying autostash resulted in conflicts.
-Your changes are safe in the stash.
-You can run "git stash pop" or "git stash drop" at any time.
-' >&2
-               fi
-       fi
-}
-
-move_to_original_branch () {
-       case "$head_name" in
-       refs/*)
-               message="rebase finished: $head_name onto $onto"
-               git update-ref -m "$message" \
-                       $head_name $(git rev-parse HEAD) $orig_head &&
-               git symbolic-ref \
-                       -m "rebase finished: returning to $head_name" \
-                       HEAD $head_name ||
-               die "$(eval_gettext "Could not move back to \$head_name")"
-               ;;
-       esac
-}
-
-output () {
-       case "$verbose" in
-       '')
-               output=$("$@" 2>&1 )
-               status=$?
-               test $status != 0 && printf "%s\n" "$output"
-               return $status
-               ;;
-       *)
-               "$@"
-               ;;
-       esac
-}
index afbb657..dec90e9 100644 (file)
@@ -77,6 +77,61 @@ rewritten_pending="$state_dir"/rewritten-pending
 # and leaves CR at the end instead.
 cr=$(printf "\015")
 
+resolvemsg="
+$(gettext 'Resolve all conflicts manually, mark them as resolved with
+"git add/rm <conflicted_files>", then run "git rebase --continue".
+You can instead skip this commit: run "git rebase --skip".
+To abort and get back to the state before "git rebase", run "git rebase --abort".')
+"
+
+write_basic_state () {
+       echo "$head_name" > "$state_dir"/head-name &&
+       echo "$onto" > "$state_dir"/onto &&
+       echo "$orig_head" > "$state_dir"/orig-head &&
+       test t = "$GIT_QUIET" && : > "$state_dir"/quiet
+       test t = "$verbose" && : > "$state_dir"/verbose
+       test -n "$strategy" && echo "$strategy" > "$state_dir"/strategy
+       test -n "$strategy_opts" && echo "$strategy_opts" > \
+               "$state_dir"/strategy_opts
+       test -n "$allow_rerere_autoupdate" && echo "$allow_rerere_autoupdate" > \
+               "$state_dir"/allow_rerere_autoupdate
+       test -n "$gpg_sign_opt" && echo "$gpg_sign_opt" > "$state_dir"/gpg_sign_opt
+       test -n "$signoff" && echo "$signoff" >"$state_dir"/signoff
+       test -n "$reschedule_failed_exec" && : > "$state_dir"/reschedule-failed-exec
+}
+
+apply_autostash () {
+       if test -f "$state_dir/autostash"
+       then
+               stash_sha1=$(cat "$state_dir/autostash")
+               if git stash apply $stash_sha1 >/dev/null 2>&1
+               then
+                       echo "$(gettext 'Applied autostash.')" >&2
+               else
+                       git stash store -m "autostash" -q $stash_sha1 ||
+                       die "$(eval_gettext "Cannot store \$stash_sha1")"
+                       gettext 'Applying autostash resulted in conflicts.
+Your changes are safe in the stash.
+You can run "git stash pop" or "git stash drop" at any time.
+' >&2
+               fi
+       fi
+}
+
+output () {
+       case "$verbose" in
+       '')
+               output=$("$@" 2>&1 )
+               status=$?
+               test $status != 0 && printf "%s\n" "$output"
+               return $status
+               ;;
+       *)
+               "$@"
+               ;;
+       esac
+}
+
 strategy_args=${strategy:+--strategy=$strategy}
 test -n "$strategy_opts" &&
 eval '
index 24859a7..5f92c89 100755 (executable)
@@ -177,11 +177,15 @@ my $re_encoded_text = qr/[^? \000-\037\177-\377]+/;
 my $re_encoded_word = qr/=\?($re_token)\?($re_token)\?($re_encoded_text)\?=/;
 
 # Variables we fill in automatically, or via prompting:
-my (@to,$no_to,@initial_to,@cc,$no_cc,@initial_cc,@bcclist,$no_bcc,@xh,
+my (@to,@cc,@xh,$envelope_sender,
        $initial_in_reply_to,$reply_to,$initial_subject,@files,
-       $author,$sender,$smtp_authpass,$annotate,$use_xmailer,$compose,$time);
-
-my $envelope_sender;
+       $author,$sender,$smtp_authpass,$annotate,$compose,$time);
+# Things we either get from config, *or* are overridden on the
+# command-line.
+my ($no_cc, $no_to, $no_bcc, $no_identity);
+my (@config_to, @getopt_to);
+my (@config_cc, @getopt_cc);
+my (@config_bcc, @getopt_bcc);
 
 # Example reply to:
 #$initial_in_reply_to = ''; #<20050203173208.GA23964@foobar.com>';
@@ -228,33 +232,37 @@ sub do_edit {
 }
 
 # Variables with corresponding config settings
-my ($thread, $chain_reply_to, $suppress_from, $signed_off_by_cc);
+my ($suppress_from, $signed_off_by_cc);
 my ($cover_cc, $cover_to);
 my ($to_cmd, $cc_cmd);
 my ($smtp_server, $smtp_server_port, @smtp_server_options);
 my ($smtp_authuser, $smtp_encryption, $smtp_ssl_cert_path);
 my ($batch_size, $relogin_delay);
 my ($identity, $aliasfiletype, @alias_files, $smtp_domain, $smtp_auth);
-my ($validate, $confirm);
+my ($confirm);
 my (@suppress_cc);
 my ($auto_8bit_encoding);
 my ($compose_encoding);
-my $target_xfer_encoding = 'auto';
-
+# Variables with corresponding config settings & hardcoded defaults
 my ($debug_net_smtp) = 0;              # Net::SMTP, see send_message()
+my $thread = 1;
+my $chain_reply_to = 0;
+my $use_xmailer = 1;
+my $validate = 1;
+my $target_xfer_encoding = 'auto';
 
 my %config_bool_settings = (
-    "thread" => [\$thread, 1],
-    "chainreplyto" => [\$chain_reply_to, 0],
-    "suppressfrom" => [\$suppress_from, undef],
-    "signedoffbycc" => [\$signed_off_by_cc, undef],
-    "cccover" => [\$cover_cc, undef],
-    "tocover" => [\$cover_to, undef],
-    "signedoffcc" => [\$signed_off_by_cc, undef],      # Deprecated
-    "validate" => [\$validate, 1],
-    "multiedit" => [\$multiedit, undef],
-    "annotate" => [\$annotate, undef],
-    "xmailer" => [\$use_xmailer, 1]
+    "thread" => \$thread,
+    "chainreplyto" => \$chain_reply_to,
+    "suppressfrom" => \$suppress_from,
+    "signedoffbycc" => \$signed_off_by_cc,
+    "cccover" => \$cover_cc,
+    "tocover" => \$cover_to,
+    "signedoffcc" => \$signed_off_by_cc,
+    "validate" => \$validate,
+    "multiedit" => \$multiedit,
+    "annotate" => \$annotate,
+    "xmailer" => \$use_xmailer,
 );
 
 my %config_settings = (
@@ -267,12 +275,12 @@ my %config_settings = (
     "smtpauth" => \$smtp_auth,
     "smtpbatchsize" => \$batch_size,
     "smtprelogindelay" => \$relogin_delay,
-    "to" => \@initial_to,
+    "to" => \@config_to,
     "tocmd" => \$to_cmd,
-    "cc" => \@initial_cc,
+    "cc" => \@config_cc,
     "cccmd" => \$cc_cmd,
     "aliasfiletype" => \$aliasfiletype,
-    "bcc" => \@bcclist,
+    "bcc" => \@config_bcc,
     "suppresscc" => \@suppress_cc,
     "envelopesender" => \$envelope_sender,
     "confirm"   => \$confirm,
@@ -315,13 +323,87 @@ sub signal_handler {
 $SIG{TERM} = \&signal_handler;
 $SIG{INT}  = \&signal_handler;
 
+# Read our sendemail.* config
+sub read_config {
+       my ($configured, $prefix) = @_;
+
+       foreach my $setting (keys %config_bool_settings) {
+               my $target = $config_bool_settings{$setting};
+               my $v = Git::config_bool(@repo, "$prefix.$setting");
+               next unless defined $v;
+               next if $configured->{$setting}++;
+               $$target = $v;
+       }
+
+       foreach my $setting (keys %config_path_settings) {
+               my $target = $config_path_settings{$setting};
+               if (ref($target) eq "ARRAY") {
+                       my @values = Git::config_path(@repo, "$prefix.$setting");
+                       next unless @values;
+                       next if $configured->{$setting}++;
+                       @$target = @values;
+               }
+               else {
+                       my $v = Git::config_path(@repo, "$prefix.$setting");
+                       next unless defined $v;
+                       next if $configured->{$setting}++;
+                       $$target = $v;
+               }
+       }
+
+       foreach my $setting (keys %config_settings) {
+               my $target = $config_settings{$setting};
+               if (ref($target) eq "ARRAY") {
+                       my @values = Git::config(@repo, "$prefix.$setting");
+                       next unless @values;
+                       next if $configured->{$setting}++;
+                       @$target = @values;
+               }
+               else {
+                       my $v = Git::config(@repo, "$prefix.$setting");
+                       next unless defined $v;
+                       next if $configured->{$setting}++;
+                       $$target = $v;
+               }
+       }
+
+       if (!defined $smtp_encryption) {
+               my $setting = "$prefix.smtpencryption";
+               my $enc = Git::config(@repo, $setting);
+               return unless defined $enc;
+               return if $configured->{$setting}++;
+               if (defined $enc) {
+                       $smtp_encryption = $enc;
+               } elsif (Git::config_bool(@repo, "$prefix.smtpssl")) {
+                       $smtp_encryption = 'ssl';
+               }
+       }
+}
+
+# sendemail.identity yields to --identity. We must parse this
+# special-case first before the rest of the config is read.
+$identity = Git::config(@repo, "sendemail.identity");
+my $rc = GetOptions(
+       "identity=s" => \$identity,
+       "no-identity" => \$no_identity,
+);
+usage() unless $rc;
+undef $identity if $no_identity;
+
+# Now we know enough to read the config
+{
+    my %configured;
+    read_config(\%configured, "sendemail.$identity") if defined $identity;
+    read_config(\%configured, "sendemail");
+}
+
 # Begin by accumulating all the variables (defined above), that we will end up
 # needing, first, from the command line:
 
 my $help;
 my $git_completion_helper;
-my $rc = GetOptions("h" => \$help,
-                    "dump-aliases" => \$dump_aliases);
+$rc = GetOptions("h" => \$help,
+                 "dump-aliases" => \$dump_aliases);
 usage() unless $rc;
 die __("--dump-aliases incompatible with other options\n")
     if !$help and $dump_aliases and @ARGV;
@@ -330,12 +412,12 @@ $rc = GetOptions(
                     "in-reply-to=s" => \$initial_in_reply_to,
                    "reply-to=s" => \$reply_to,
                    "subject=s" => \$initial_subject,
-                   "to=s" => \@initial_to,
+                   "to=s" => \@getopt_to,
                    "to-cmd=s" => \$to_cmd,
                    "no-to" => \$no_to,
-                   "cc=s" => \@initial_cc,
+                   "cc=s" => \@getopt_cc,
                    "no-cc" => \$no_cc,
-                   "bcc=s" => \@bcclist,
+                   "bcc=s" => \@getopt_bcc,
                    "no-bcc" => \$no_bcc,
                    "chain-reply-to!" => \$chain_reply_to,
                    "no-chain-reply-to" => sub {$chain_reply_to = 0},
@@ -351,7 +433,6 @@ $rc = GetOptions(
                    "smtp-domain:s" => \$smtp_domain,
                    "smtp-auth=s" => \$smtp_auth,
                    "no-smtp-auth" => sub {$smtp_auth = 'none'},
-                   "identity=s" => \$identity,
                    "annotate!" => \$annotate,
                    "no-annotate" => sub {$annotate = 0},
                    "compose" => \$compose,
@@ -386,6 +467,11 @@ $rc = GetOptions(
                    "git-completion-helper" => \$git_completion_helper,
         );
 
+# Munge any "either config or getopt, not both" variables
+my @initial_to = @getopt_to ? @getopt_to : ($no_to ? () : @config_to);
+my @initial_cc = @getopt_cc ? @getopt_cc : ($no_cc ? () : @config_cc);
+my @initial_bcc = @getopt_bcc ? @getopt_bcc : ($no_bcc ? () : @config_bcc);
+
 usage() if $help;
 completion_helper() if $git_completion_helper;
 unless ($rc) {
@@ -399,65 +485,6 @@ die __("`batch-size` and `relogin` must be specified together " .
        "(via command-line or configuration option)\n")
        if defined $relogin_delay and not defined $batch_size;
 
-# Now, let's fill any that aren't set in with defaults:
-
-sub read_config {
-       my ($prefix) = @_;
-
-       foreach my $setting (keys %config_bool_settings) {
-               my $target = $config_bool_settings{$setting}->[0];
-               $$target = Git::config_bool(@repo, "$prefix.$setting") unless (defined $$target);
-       }
-
-       foreach my $setting (keys %config_path_settings) {
-               my $target = $config_path_settings{$setting};
-               if (ref($target) eq "ARRAY") {
-                       unless (@$target) {
-                               my @values = Git::config_path(@repo, "$prefix.$setting");
-                               @$target = @values if (@values && defined $values[0]);
-                       }
-               }
-               else {
-                       $$target = Git::config_path(@repo, "$prefix.$setting") unless (defined $$target);
-               }
-       }
-
-       foreach my $setting (keys %config_settings) {
-               my $target = $config_settings{$setting};
-               next if $setting eq "to" and defined $no_to;
-               next if $setting eq "cc" and defined $no_cc;
-               next if $setting eq "bcc" and defined $no_bcc;
-               if (ref($target) eq "ARRAY") {
-                       unless (@$target) {
-                               my @values = Git::config(@repo, "$prefix.$setting");
-                               @$target = @values if (@values && defined $values[0]);
-                       }
-               }
-               else {
-                       $$target = Git::config(@repo, "$prefix.$setting") unless (defined $$target);
-               }
-       }
-
-       if (!defined $smtp_encryption) {
-               my $enc = Git::config(@repo, "$prefix.smtpencryption");
-               if (defined $enc) {
-                       $smtp_encryption = $enc;
-               } elsif (Git::config_bool(@repo, "$prefix.smtpssl")) {
-                       $smtp_encryption = 'ssl';
-               }
-       }
-}
-
-# read configuration from [sendemail "$identity"], fall back on [sendemail]
-$identity = Git::config(@repo, "sendemail.identity") unless (defined $identity);
-read_config("sendemail.$identity") if (defined $identity);
-read_config("sendemail");
-
-# fall back on builtin bool defaults
-foreach my $setting (values %config_bool_settings) {
-       ${$setting->[0]} = $setting->[1] unless (defined (${$setting->[0]}));
-}
-
 # 'default' encryption is none -- this only prevents a warning
 $smtp_encryption = '' unless (defined $smtp_encryption);
 
@@ -941,7 +968,7 @@ sub expand_one_alias {
 
 @initial_to = process_address_list(@initial_to);
 @initial_cc = process_address_list(@initial_cc);
-@bcclist = process_address_list(@bcclist);
+@initial_bcc = process_address_list(@initial_bcc);
 
 if ($thread && !defined $initial_in_reply_to && $prompting) {
        $initial_in_reply_to = ask(
@@ -1364,7 +1391,7 @@ sub send_message {
                    }
               @cc);
        my $to = join (",\n\t", @recipients);
-       @recipients = unique_email_list(@recipients,@cc,@bcclist);
+       @recipients = unique_email_list(@recipients,@cc,@initial_bcc);
        @recipients = (map { extract_valid_address_or_die($_) } @recipients);
        my $date = format_2822_time($time++);
        my $gitversion = '@@GIT_VERSION@@';
diff --git a/grep.c b/grep.c
index 0d50598..f7c3a58 100644 (file)
--- a/grep.c
+++ b/grep.c
@@ -1780,6 +1780,10 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colle
        enum grep_context ctx = GREP_CONTEXT_HEAD;
        xdemitconf_t xecfg;
 
+       if (!opt->status_only && gs->name == NULL)
+               BUG("grep call which could print a name requires "
+                   "grep_source.name be non-NULL");
+
        if (!opt->output)
                opt->output = std_output;
 
diff --git a/help.c b/help.c
index a9e451f..5261d83 100644 (file)
--- a/help.c
+++ b/help.c
@@ -754,19 +754,19 @@ static int append_similar_ref(const char *refname, const struct object_id *oid,
 {
        struct similar_ref_cb *cb = (struct similar_ref_cb *)(cb_data);
        char *branch = strrchr(refname, '/') + 1;
-       const char *remote;
 
        /* A remote branch of the same name is deemed similar */
-       if (skip_prefix(refname, "refs/remotes/", &remote) &&
+       if (starts_with(refname, "refs/remotes/") &&
            !strcmp(branch, cb->base_ref))
-               string_list_append(cb->similar_refs, remote);
+               string_list_append_nodup(cb->similar_refs,
+                                        shorten_unambiguous_ref(refname, 1));
        return 0;
 }
 
 static struct string_list guess_refs(const char *ref)
 {
        struct similar_ref_cb ref_cb;
-       struct string_list similar_refs = STRING_LIST_INIT_NODUP;
+       struct string_list similar_refs = STRING_LIST_INIT_DUP;
 
        ref_cb.base_ref = ref;
        ref_cb.similar_refs = &similar_refs;
index c0036f7..a15d0f7 100644 (file)
@@ -78,9 +78,12 @@ static int gently_parse_list_objects_filter(
                return 0;
 
        } else if (skip_prefix(arg, "sparse:path=", &v0)) {
-               filter_options->choice = LOFC_SPARSE_PATH;
-               filter_options->sparse_path_value = strdup(v0);
-               return 0;
+               if (errbuf) {
+                       strbuf_addstr(
+                               errbuf,
+                               _("sparse:path filters support has been dropped"));
+               }
+               return 1;
        }
        /*
         * Please update _git_fetch() in git-completion.bash when you
@@ -136,7 +139,6 @@ void list_objects_filter_release(
 {
        free(filter_options->filter_spec);
        free(filter_options->sparse_oid_value);
-       free(filter_options->sparse_path_value);
        memset(filter_options, 0, sizeof(*filter_options));
 }
 
index e3adc78..c54f000 100644 (file)
@@ -13,7 +13,6 @@ enum list_objects_filter_choice {
        LOFC_BLOB_LIMIT,
        LOFC_TREE_DEPTH,
        LOFC_SPARSE_OID,
-       LOFC_SPARSE_PATH,
        LOFC__COUNT /* must be last */
 };
 
@@ -44,7 +43,6 @@ struct list_objects_filter_options {
         * choice.
         */
        struct object_id *sparse_oid_value;
-       char *sparse_path_value;
        unsigned long blob_limit_value;
        unsigned long tree_exclude_depth;
 };
index ee449de..53f9044 100644 (file)
@@ -478,27 +478,6 @@ static void *filter_sparse_oid__init(
        return d;
 }
 
-static void *filter_sparse_path__init(
-       struct oidset *omitted,
-       struct list_objects_filter_options *filter_options,
-       filter_object_fn *filter_fn,
-       filter_free_fn *filter_free_fn)
-{
-       struct filter_sparse_data *d = xcalloc(1, sizeof(*d));
-       d->omits = omitted;
-       if (add_excludes_from_file_to_list(filter_options->sparse_path_value,
-                                          NULL, 0, &d->el, NULL) < 0)
-               die("could not load filter specification");
-
-       ALLOC_GROW(d->array_frame, d->nr + 1, d->alloc);
-       d->array_frame[d->nr].defval = 0; /* default to include */
-       d->array_frame[d->nr].child_prov_omit = 0;
-
-       *filter_fn = filter_sparse;
-       *filter_free_fn = filter_sparse_free;
-       return d;
-}
-
 typedef void *(*filter_init_fn)(
        struct oidset *omitted,
        struct list_objects_filter_options *filter_options,
@@ -514,7 +493,6 @@ static filter_init_fn s_filters[] = {
        filter_blobs_limit__init,
        filter_trees_depth__init,
        filter_sparse_oid__init,
-       filter_sparse_path__init,
 };
 
 void *list_objects_filter__init(
index 0a7dbc6..818aef7 100644 (file)
--- a/ls-refs.c
+++ b/ls-refs.c
@@ -57,7 +57,8 @@ static int send_ref(const char *refname, const struct object_id *oid,
                if (!symref_target)
                        die("'%s' is a symref but it is not?", refname);
 
-               strbuf_addf(&refline, " symref-target:%s", symref_target);
+               strbuf_addf(&refline, " symref-target:%s",
+                           strip_namespace(symref_target));
        }
 
        if (data->peel) {
index a7bcfcb..d2e380b 100644 (file)
@@ -1660,6 +1660,7 @@ static int handle_rename_add(struct merge_options *opt,
               c->path, add_branch);
 
        prev_path_desc = xstrfmt("version of %s from %s", path, a->path);
+       ci->ren1->src_entry->stages[other_stage].path = a->path;
        if (merge_mode_and_contents(opt, a, c,
                                    &ci->ren1->src_entry->stages[other_stage],
                                    prev_path_desc,
index 272e01e..49f56ab 100644 (file)
@@ -277,10 +277,14 @@ struct object_info {
 #define OBJECT_INFO_IGNORE_LOOSE 16
 /*
  * Do not attempt to fetch the object if missing (even if fetch_is_missing is
- * nonzero). This is meant for bulk prefetching of missing blobs in a partial
- * clone. Implies OBJECT_INFO_QUICK.
+ * nonzero).
  */
-#define OBJECT_INFO_FOR_PREFETCH (32 + OBJECT_INFO_QUICK)
+#define OBJECT_INFO_SKIP_FETCH_OBJECT 32
+/*
+ * This is meant for bulk prefetching of missing blobs in a partial
+ * clone. Implies OBJECT_INFO_SKIP_FETCH_OBJECT and OBJECT_INFO_QUICK
+ */
+#define OBJECT_INFO_FOR_PREFETCH (OBJECT_INFO_SKIP_FETCH_OBJECT | OBJECT_INFO_QUICK)
 
 int oid_object_info_extended(struct repository *r,
                             const struct object_id *,
index 49c8544..d786ec7 100644 (file)
@@ -640,7 +640,7 @@ unsigned char *use_pack(struct packed_git *p,
                        while (packed_git_limit < pack_mapped
                                && unuse_one_window(p))
                                ; /* nothing */
-                       win->base = xmmap(NULL, win->len,
+                       win->base = xmmap_gently(NULL, win->len,
                                PROT_READ, MAP_PRIVATE,
                                p->pack_fd, win->offset);
                        if (win->base == MAP_FAILED)
index 4b95d04..a3de795 100644 (file)
@@ -16,6 +16,9 @@ int parse_opt_abbrev_cb(const struct option *opt, const char *arg, int unset)
        if (!arg) {
                v = unset ? 0 : DEFAULT_ABBREV;
        } else {
+               if (!*arg)
+                       return error(_("option `%s' expects a numerical value"),
+                                    opt->long_name);
                v = strtol(arg, (char **)&arg, 10);
                if (*arg)
                        return error(_("option `%s' expects a numerical value"),
index 987e27c..87b26a1 100644 (file)
@@ -195,6 +195,9 @@ static enum parse_opt_result get_value(struct parse_opt_ctx_t *p,
                }
                if (get_arg(p, opt, flags, &arg))
                        return -1;
+               if (!*arg)
+                       return error(_("%s expects a numerical value"),
+                                    optname(opt, flags));
                *(int *)opt->value = strtol(arg, (char **)&s, 10);
                if (*s)
                        return error(_("%s expects a numerical value"),
index c262e1b..f70d396 100644 (file)
@@ -11,7 +11,7 @@ static int patch_id_defined(struct commit *commit)
 }
 
 int commit_patch_id(struct commit *commit, struct diff_options *options,
-                   struct object_id *oid, int diff_header_only)
+                   struct object_id *oid, int diff_header_only, int stable)
 {
        if (!patch_id_defined(commit))
                return -1;
@@ -22,7 +22,7 @@ int commit_patch_id(struct commit *commit, struct diff_options *options,
        else
                diff_root_tree_oid(&commit->object.oid, "", options);
        diffcore_std(options);
-       return diff_flush_patch_id(options, oid, diff_header_only);
+       return diff_flush_patch_id(options, oid, diff_header_only, stable);
 }
 
 /*
@@ -46,11 +46,11 @@ static int patch_id_neq(const void *cmpfn_data,
        struct patch_id *b = (void *)entry_or_key;
 
        if (is_null_oid(&a->patch_id) &&
-           commit_patch_id(a->commit, opt, &a->patch_id, 0))
+           commit_patch_id(a->commit, opt, &a->patch_id, 0, 0))
                return error("Could not get patch ID for %s",
                        oid_to_hex(&a->commit->object.oid));
        if (is_null_oid(&b->patch_id) &&
-           commit_patch_id(b->commit, opt, &b->patch_id, 0))
+           commit_patch_id(b->commit, opt, &b->patch_id, 0, 0))
                return error("Could not get patch ID for %s",
                        oid_to_hex(&b->commit->object.oid));
        return !oideq(&a->patch_id, &b->patch_id);
@@ -80,7 +80,7 @@ static int init_patch_id_entry(struct patch_id *patch,
        struct object_id header_only_patch_id;
 
        patch->commit = commit;
-       if (commit_patch_id(commit, &ids->diffopts, &header_only_patch_id, 1))
+       if (commit_patch_id(commit, &ids->diffopts, &header_only_patch_id, 1, 0))
                return -1;
 
        hashmap_entry_init(patch, sha1hash(header_only_patch_id.hash));
index 82a12b6..03bb04e 100644 (file)
@@ -20,7 +20,7 @@ struct patch_ids {
 };
 
 int commit_patch_id(struct commit *commit, struct diff_options *options,
-                   struct object_id *oid, int);
+                   struct object_id *oid, int, int);
 int init_patch_ids(struct repository *, struct patch_ids *);
 int free_patch_ids(struct patch_ids *);
 struct patch_id *add_commit_patch_id(struct commit *, struct patch_ids *);
index 9414509..00472a4 100644 (file)
--- a/po/TEAMS
+++ b/po/TEAMS
@@ -11,9 +11,9 @@ Leader:               Jordi Mas <jmas@softcatala.org>
 Members:       Alex Henrie <alexhenrie24@gmail.com>
 
 Language:      de (German)
-Repository:    https://github.com/ralfth/git-po-de
-Leader:                Ralf Thielow <ralf.thielow@gmail.com>
-Members:       Matthias Rüster <matthias.ruester@gmail.com>
+Repository:    https://github.com/ruester/git-po-de
+Leader:                Matthias Rüster <matthias.ruester@gmail.com>
+Members:       Ralf Thielow <ralf.thielow@gmail.com>
                Phillip Szelat <phillip.szelat@gmail.com>
 
 Language:      el (Greek)
@@ -66,4 +66,4 @@ Repository:   https://github.com/jiangxin/git/
 Leader:                Jiang Xin <worldhello.net AT gmail.com>
 Members:       Ray Chen <oldsharp AT gmail.com>
                依云 <lilydjwg AT gmail.com>
-               Fangyi Zhou <fangyi.zhou AT yuriko.moe>
+               Fangyi Zhou <me AT fangyi.io>
index 26c66ca..d72d5b5 100644 (file)
--- a/po/bg.po
+++ b/po/bg.po
@@ -79,7 +79,9 @@
 # packfile пакет
 # promisory гарантиращ, гарант promisory packfile гарантиращ пакет, promisory remote хранилище-гарант
 # delta - разлика, делта, обект-разлика
-# peeled tag - проследен етикет - когато етикет сочи към друг етикет, а не подаване и проследяваме подобно на символна връзка
+# ??
+# peeled tag - проследяване на етикет - когато етикет сочи към друг етикет, а не подаване и проследяваме подобно на символна връзка
+# nested tag - непряк етикет
 # strip - премахвам (за компонент при филтриране)
 # unrelated histories - независими истории
 # inexact rename detection търсене на преименувания на обекти съчетани с промени
 # island marks граници на групите
 # reflog журнал на указателите
 # hash контролна сума, изчисляване на контролна сума
+# fanout откъс (разперване???)
+# idx - index of pack file, 1 index per 1 packfile
+# midx - multi-pack index, for objects across multiple packfiles
+# overlay mode - припокриващ режим (при изтеглянe)
 # ------------------------
 # „$var“ - може да не сработва за shell има gettext и eval_gettext - проверка - намират се лесно по „$
 # ------------------------
 # for i in `sort -u FILES`; do cnt=`grep $i FILES | wc -l`; echo $cnt $i ;done | sort -n
 msgid ""
 msgstr ""
-"Project-Id-Version: git 2.20\n"
+"Project-Id-Version: git 2.22\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2019-02-15 10:09+0800\n"
-"PO-Revision-Date: 2019-02-23 23:27+0200\n"
+"POT-Creation-Date: 2019-06-04 08:24+0800\n"
+"PO-Revision-Date: 2019-06-05 08:50+0200\n"
 "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
 "Language-Team: Bulgarian <dict@fsa-bg.org>\n"
 "Language: bg\n"
@@ -157,37 +163,37 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: advice.c:101
+#: advice.c:103
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%sподсказка: %.*s%s\n"
 
-#: advice.c:154
+#: advice.c:156
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr "Отбирането на подавания е блокирано от неслети файлове."
 
-#: advice.c:156
+#: advice.c:158
 msgid "Committing is not possible because you have unmerged files."
 msgstr "Подаването е блокирано от неслети файлове."
 
-#: advice.c:158
+#: advice.c:160
 msgid "Merging is not possible because you have unmerged files."
 msgstr "Сливането е блокирано от неслети файлове."
 
-#: advice.c:160
+#: advice.c:162
 msgid "Pulling is not possible because you have unmerged files."
 msgstr "Издърпването е блокирано от неслети файлове."
 
-#: advice.c:162
+#: advice.c:164
 msgid "Reverting is not possible because you have unmerged files."
 msgstr "Отмяната е блокирана от неслети файлове."
 
-#: advice.c:164
+#: advice.c:166
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr "Действието „%s“ е блокирано от неслети файлове."
 
-#: advice.c:172
+#: advice.c:174
 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."
@@ -195,23 +201,23 @@ msgstr ""
 "Редактирайте ги в работното дърво, и тогава ползвайте „git add/rm ФАЙЛ“,\n"
 "за да отбележите коригирането им.  След това извършете подаването."
 
-#: advice.c:180
+#: advice.c:182
 msgid "Exiting because of an unresolved conflict."
 msgstr "Изход от програмата заради некоригиран конфликт."
 
-#: advice.c:185 builtin/merge.c:1290
+#: advice.c:187 builtin/merge.c:1320
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Не сте завършили сливане.  (Указателят „MERGE_HEAD“ съществува)."
 
-#: advice.c:187
+#: advice.c:189
 msgid "Please, commit your changes before merging."
 msgstr "Промените трябва да се подадат преди сливане."
 
-#: advice.c:188
+#: advice.c:190
 msgid "Exiting because of unfinished merge."
 msgstr "Изход от програмата заради незавършено сливане."
 
-#: advice.c:194
+#: advice.c:196
 #, c-format
 msgid ""
 "Note: checking out '%s'.\n"
@@ -248,100 +254,100 @@ msgstr "командният ред завършва с „/“"
 msgid "unclosed quote"
 msgstr "кавичка без еш"
 
-#: apply.c:59
+#: apply.c:63
 #, c-format
 msgid "unrecognized whitespace option '%s'"
 msgstr "непозната опция за знаците за интервали „%s“"
 
-#: apply.c:75
+#: apply.c:79
 #, c-format
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "непозната опция за игнориране на знаците за интервали „%s“"
 
-#: apply.c:125
+#: apply.c:129
 msgid "--reject and --3way cannot be used together."
 msgstr "опциите „--reject“ и „--3way“ са несъвместими"
 
-#: apply.c:127
+#: apply.c:131
 msgid "--cached and --3way cannot be used together."
 msgstr "опциите „--cached“ и „--3way“ са несъвместими"
 
-#: apply.c:130
+#: apply.c:134
 msgid "--3way outside a repository"
 msgstr "като „--3way“, но извън хранилище"
 
-#: apply.c:141
+#: apply.c:145
 msgid "--index outside a repository"
 msgstr "като „--index“, но извън хранилище"
 
-#: apply.c:144
+#: apply.c:148
 msgid "--cached outside a repository"
 msgstr "като „--cached“, но извън хранилище"
 
-#: apply.c:825
+#: apply.c:829
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr "Регулярният израз за времето „%s“ не може за бъде компилиран"
 
-#: apply.c:834
+#: apply.c:838
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr "Регулярният израз върна %d при подадена последователност „%s“ на входа"
 
-#: apply.c:908
+#: apply.c:912
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr "Липсва име на файл на ред %d от кръпката"
 
-#: apply.c:946
+#: apply.c:950
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr ""
 "git apply: лош изход от командата „git-diff“ — на ред %2$d се очакваше „/dev/"
 "null“, а бе получен „%1$s“"
 
-#: apply.c:952
+#: apply.c:956
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr ""
 "git apply: лош изход от командата „git-diff“ — на ред %d бе получено "
 "неправилно име на нов файл"
 
-#: apply.c:953
+#: apply.c:957
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr ""
 "git apply: лош изход от командата „git-diff“ — на ред %d бе получено "
 "неправилно име на стар файл"
 
-#: apply.c:958
+#: apply.c:962
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr ""
 "git apply: лош изход от командата „git-diff“ — на ред %d се очакваше „/dev/"
 "null“"
 
-#: apply.c:987
+#: apply.c:991
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "грешен режим на ред №%d: %s"
 
-#: apply.c:1306
+#: apply.c:1310
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr "несъвместими заглавни части на редове №%d и №%d"
 
-#: apply.c:1478
+#: apply.c:1482
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr "при повторното преброяване бе получен неочакван ред: „%.*s“"
 
-#: apply.c:1547
+#: apply.c:1551
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr "част от кръпка без заглавна част на ред %d: %.*s"
 
-#: apply.c:1567
+#: apply.c:1571
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -356,71 +362,71 @@ msgstr[1] ""
 "След съкращаването на първите %d части от компонентите на пътя, в заглавната "
 "част на „git diff“ липсва информация за име на файл (ред: %d)"
 
-#: apply.c:1580
+#: apply.c:1584
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr ""
 "в заглавната част на „git diff“ липсва информация за име на файл (ред: %d)"
 
-#: apply.c:1768
+#: apply.c:1772
 msgid "new file depends on old contents"
 msgstr "новият файл зависи от старото съдържание на файла"
 
-#: apply.c:1770
+#: apply.c:1774
 msgid "deleted file still has contents"
 msgstr "изтритият файл не е празен"
 
-#: apply.c:1804
+#: apply.c:1808
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "грешка в кръпката на ред %d"
 
-#: apply.c:1841
+#: apply.c:1845
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "новият файл „%s“ зависи от старото съдържание на файла"
 
-#: apply.c:1843
+#: apply.c:1847
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "изтритият файл „%s“ не е празен"
 
-#: apply.c:1846
+#: apply.c:1850
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "● предупреждение: файлът „%s“ вече е празен, но не е изтрит"
 
-#: apply.c:1993
+#: apply.c:1997
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "грешка в двоичната кръпка на ред %d: %.*s"
 
-#: apply.c:2030
+#: apply.c:2034
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "неразпозната двоичната кръпка на ред %d"
 
-#: apply.c:2192
+#: apply.c:2196
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "кръпката е с изцяло повредени данни на ред %d"
 
-#: apply.c:2278
+#: apply.c:2282
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "символната връзка „%s“ не може да бъде прочетена"
 
-#: apply.c:2282
+#: apply.c:2286
 #, c-format
 msgid "unable to open or read %s"
 msgstr "файлът „%s“ не може да бъде отворен или прочетен"
 
-#: apply.c:2941
+#: apply.c:2945
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "неправилно начало на ред: „%c“"
 
-#: apply.c:3062
+#: apply.c:3066
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
@@ -429,13 +435,13 @@ msgstr[0] ""
 msgstr[1] ""
 "%d-то парче код бе успешно приложено на ред %d (отместване от %d реда)."
 
-#: apply.c:3074
+#: apply.c:3078
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr ""
 "Контекстът е намален на (%ld/%ld) за прилагането на парчето код на ред %d"
 
-#: apply.c:3080
+#: apply.c:3084
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -444,317 +450,317 @@ msgstr ""
 "при търсене за:\n"
 "%.*s"
 
-#: apply.c:3102
+#: apply.c:3106
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "липсват данните за двоичната кръпка за „%s“"
 
-#: apply.c:3110
+#: apply.c:3114
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr ""
 "двоичната кръпка не може да се приложи в обратна посока, когато обратното "
 "парче за „%s“ липсва"
 
-#: apply.c:3157
+#: apply.c:3161
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr "към „%s“ не може да се приложи двоична кръпка без пълен индекс"
 
-#: apply.c:3167
+#: apply.c:3171
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr "кръпката съответства на „%s“ (%s), който не съвпада по съдържание."
 
-#: apply.c:3175
+#: apply.c:3179
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "кръпката съответства на „%s“, който трябва да е празен, но не е"
 
-#: apply.c:3193
+#: apply.c:3197
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr ""
 "необходимият резултат след операцията  — „%s“ за „%s“ не може да бъде "
 "прочетен"
 
-#: apply.c:3206
+#: apply.c:3210
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "двоичната кръпка не може да бъде приложена върху „%s“"
 
-#: apply.c:3212
+#: apply.c:3216
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 "двоичната кръпка за „%s“ води до неправилни резултати (очакваше се: „%s“, а "
 "бе получено: „%s“)"
 
-#: apply.c:3233
+#: apply.c:3237
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "неуспешно прилагане на кръпка: „%s:%ld“"
 
-#: apply.c:3356
+#: apply.c:3360
 #, c-format
 msgid "cannot checkout %s"
 msgstr "„%s“ не може да се изтегли"
 
-#: apply.c:3408 apply.c:3419 apply.c:3465 midx.c:58 setup.c:278
+#: apply.c:3412 apply.c:3423 apply.c:3469 midx.c:59 setup.c:279
 #, c-format
 msgid "failed to read %s"
 msgstr "файлът „%s“ не може да бъде прочетен"
 
-#: apply.c:3416
+#: apply.c:3420
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "изчитане на „%s“ след проследяване на символна връзка"
 
-#: apply.c:3445 apply.c:3688
+#: apply.c:3449 apply.c:3692
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "обектът с път „%s“ е преименуван или изтрит"
 
-#: apply.c:3531 apply.c:3703
+#: apply.c:3535 apply.c:3707
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "„%s“ не съществува в индекса"
 
-#: apply.c:3540 apply.c:3711
+#: apply.c:3544 apply.c:3715
 #, c-format
 msgid "%s: does not match index"
 msgstr "„%s“ не съответства на индекса"
 
-#: apply.c:3575
+#: apply.c:3579
 msgid "repository lacks the necessary blob to fall back on 3-way merge."
 msgstr ""
 "в хранилището липсват необходимите обекти-BLOB, за да се премине към тройно "
 "сливане."
 
-#: apply.c:3578
+#: apply.c:3582
 #, c-format
 msgid "Falling back to three-way merge...\n"
 msgstr "Преминаване към тройно сливане…\n"
 
-#: apply.c:3594 apply.c:3598
+#: apply.c:3598 apply.c:3602
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "текущото съдържание на „%s“ не може да бъде прочетено"
 
-#: apply.c:3610
+#: apply.c:3614
 #, c-format
 msgid "Failed to fall back on three-way merge...\n"
 msgstr "Неуспешно преминаване към тройно сливане…\n"
 
-#: apply.c:3624
+#: apply.c:3628
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Конфликти при прилагането на кръпката към „%s“.\n"
 
-#: apply.c:3629
+#: apply.c:3633
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Кръпката бе приложена чисто към „%s“.\n"
 
-#: apply.c:3655
+#: apply.c:3659
 msgid "removal patch leaves file contents"
 msgstr "изтриващата кръпка оставя файла непразен"
 
-#: apply.c:3728
+#: apply.c:3732
 #, c-format
 msgid "%s: wrong type"
 msgstr "„%s“: неправилен вид"
 
-#: apply.c:3730
+#: apply.c:3734
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "„%s“ е от вид „%o“, а се очакваше „%o“"
 
-#: apply.c:3881 apply.c:3883 read-cache.c:820 read-cache.c:846
-#: read-cache.c:1299
+#: apply.c:3885 apply.c:3887 read-cache.c:830 read-cache.c:856
+#: read-cache.c:1309
 #, c-format
 msgid "invalid path '%s'"
 msgstr "неправилен път: „%s“"
 
-#: apply.c:3939
+#: apply.c:3943
 #, c-format
 msgid "%s: already exists in index"
 msgstr "„%s“: вече съществува в индекса"
 
-#: apply.c:3942
+#: apply.c:3946
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "„%s“: вече съществува в работното дърво"
 
-#: apply.c:3962
+#: apply.c:3966
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "новите права за достъп (%o) на „%s“ не съвпадат със старите (%o)"
 
-#: apply.c:3967
+#: apply.c:3971
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr ""
 "новите права за достъп (%o) на „%s“ не съвпадат със старите (%o) на „%s“"
 
-#: apply.c:3987
+#: apply.c:3991
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "засегнатият файл „%s“ е след символна връзка"
 
-#: apply.c:3991
+#: apply.c:3995
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "Кръпката „%s“ не може да бъде приложена"
 
-#: apply.c:4006
+#: apply.c:4010
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Проверяване на кръпката „%s“…"
 
-#: apply.c:4098
+#: apply.c:4102
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr ""
 "информацията за сумата по SHA1 за подмодула липсва или не е достатъчна (%s)."
 
-#: apply.c:4105
+#: apply.c:4109
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "смяна на режима на достъпа на „%s“, който не е в текущия връх „HEAD“"
 
-#: apply.c:4108
+#: apply.c:4112
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "информацията за сумата по SHA1 липсва или не е достатъчна (%s)."
 
-#: apply.c:4113 builtin/checkout.c:248 builtin/reset.c:143
+#: apply.c:4117 builtin/checkout.c:257 builtin/reset.c:143
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "неуспешно създаване на запис в кеша чрез „make_cache_entry“ за „%s“"
 
-#: apply.c:4117
+#: apply.c:4121
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "„%s“ не може да се добави към временния индекс"
 
-#: apply.c:4127
+#: apply.c:4131
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "временният индекс не може да се запази в „%s“"
 
-#: apply.c:4265
+#: apply.c:4269
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "„%s“ не може да се извади от индекса"
 
-#: apply.c:4299
+#: apply.c:4303
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "повредена кръпка за модула „%s“"
 
-#: apply.c:4305
+#: apply.c:4309
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr ""
 "не може да се получи информация чрез „stat“ за новосъздадения файл „%s“"
 
-#: apply.c:4313
+#: apply.c:4317
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr ""
 "не може да се за създаде мястото за съхранение на новосъздадения файл „%s“"
 
-#: apply.c:4319 apply.c:4464
+#: apply.c:4323 apply.c:4468
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "не може да се добави запис в кеша за „%s“"
 
-#: apply.c:4362
+#: apply.c:4366
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "в „%s“ не може да се пише"
 
-#: apply.c:4366
+#: apply.c:4370
 #, c-format
 msgid "closing file '%s'"
 msgstr "затваряне на файла „%s“"
 
-#: apply.c:4436
+#: apply.c:4440
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "файлът „%s“ не може да се запише с режим на достъп „%o“"
 
-#: apply.c:4534
+#: apply.c:4538
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Кръпката „%s“ бе приложена чисто."
 
-#: apply.c:4542
+#: apply.c:4546
 msgid "internal error"
 msgstr "вътрешна грешка"
 
-#: apply.c:4545
+#: apply.c:4549
 #, 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:4556
+#: apply.c:4560
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "съкращаване на името на файла с отхвърлените парчета на „ %.*s.rej“"
 
-#: apply.c:4564 builtin/fetch.c:837 builtin/fetch.c:1118
+#: apply.c:4568 builtin/fetch.c:837 builtin/fetch.c:1118
 #, c-format
 msgid "cannot open %s"
 msgstr "„%s“ не може да бъде отворен"
 
-#: apply.c:4578
+#: apply.c:4582
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "%d-то парче бе успешно приложено."
 
-#: apply.c:4582
+#: apply.c:4586
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "%d-то парче бе отхвърлено."
 
-#: apply.c:4692
+#: apply.c:4696
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Пропусната кръпка: „%s“"
 
-#: apply.c:4700
+#: apply.c:4704
 msgid "unrecognized input"
 msgstr "непознат вход"
 
-#: apply.c:4720
+#: apply.c:4724
 msgid "unable to read index file"
 msgstr "индексът не може да бъде записан"
 
-#: apply.c:4875
+#: apply.c:4879
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "кръпката „%s“ не може да бъде отворена: %s"
 
-#: apply.c:4902
+#: apply.c:4906
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "пренебрегната е %d грешка в знаците за интервали"
 msgstr[1] "пренебрегнати са %d грешки в знаците за интервали"
 
-#: apply.c:4908 apply.c:4923
+#: apply.c:4912 apply.c:4927
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d ред добавя грешки в знаците за интервали."
 msgstr[1] "%d реда добавят грешки в знаците за интервали."
 
-#: apply.c:4916
+#: apply.c:4920
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
@@ -763,145 +769,144 @@ msgstr[0] ""
 msgstr[1] ""
 "Добавени са %d реда след корекцията на грешките в знаците за интервали."
 
-#: apply.c:4932 builtin/add.c:539 builtin/mv.c:301 builtin/rm.c:390
+#: apply.c:4936 builtin/add.c:540 builtin/mv.c:301 builtin/rm.c:390
 msgid "Unable to write new index file"
 msgstr "Новият индекс не може да бъде записан"
 
-#: apply.c:4959 apply.c:4962 builtin/am.c:2203 builtin/am.c:2206
-#: builtin/clone.c:122 builtin/fetch.c:118 builtin/merge.c:263
-#: builtin/pull.c:200 builtin/submodule--helper.c:407
+#: apply.c:4963 apply.c:4966 builtin/am.c:2210 builtin/am.c:2213
+#: builtin/clone.c:120 builtin/fetch.c:118 builtin/merge.c:271
+#: builtin/pull.c:207 builtin/submodule--helper.c:407
 #: builtin/submodule--helper.c:1366 builtin/submodule--helper.c:1369
-#: builtin/submodule--helper.c:1850 builtin/submodule--helper.c:1853
-#: builtin/submodule--helper.c:2092 git-add--interactive.perl:197
+#: builtin/submodule--helper.c:1849 builtin/submodule--helper.c:1852
+#: builtin/submodule--helper.c:2091 git-add--interactive.perl:197
 msgid "path"
 msgstr "път"
 
-#: apply.c:4960
+#: apply.c:4964
 msgid "don't apply changes matching the given path"
 msgstr "без прилагане на промените напасващи на дадения път"
 
-#: apply.c:4963
+#: apply.c:4967
 msgid "apply changes matching the given path"
 msgstr "прилагане на промените напасващи на дадения път"
 
-#: apply.c:4965 builtin/am.c:2212
+#: apply.c:4969 builtin/am.c:2219
 msgid "num"
 msgstr "БРОЙ"
 
-#: apply.c:4966
+#: apply.c:4970
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "премахване на този БРОЙ водещи елементи от пътищата в разликата"
 
-#: apply.c:4969
+#: apply.c:4973
 msgid "ignore additions made by the patch"
 msgstr "игнориране на редовете добавени от тази кръпка"
 
-#: apply.c:4971
+#: apply.c:4975
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "извеждане на статистика на промените без прилагане на кръпката"
 
-#: apply.c:4975
+#: apply.c:4979
 msgid "show number of added and deleted lines in decimal notation"
 msgstr "извеждане на броя на добавените и изтритите редове"
 
-#: apply.c:4977
+#: apply.c:4981
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "извеждане на статистика на входните данни без прилагане на кръпката"
 
-#: apply.c:4979
+#: apply.c:4983
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "проверка дали кръпката може да се приложи, без действително прилагане"
 
-#: apply.c:4981
+#: apply.c:4985
 msgid "make sure the patch is applicable to the current index"
 msgstr "проверка дали кръпката може да бъде приложена към текущия индекс"
 
-#: apply.c:4983
+#: apply.c:4987
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "отбелязване на новите файлове с „git add --intent-to-add“"
 
-#: apply.c:4985
+#: apply.c:4989
 msgid "apply a patch without touching the working tree"
 msgstr "прилагане на кръпката без промяна на работното дърво"
 
-#: apply.c:4987
+#: apply.c:4991
 msgid "accept a patch that touches outside the working area"
 msgstr "прилагане на кръпка, която променя и файлове извън работното дърво"
 
-#: apply.c:4990
+#: apply.c:4994
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr ""
 "кръпката да бъде приложена.  Опцията се комбинира с „--check“/„--stat“/„--"
 "summary“"
 
-#: apply.c:4992
+#: apply.c:4996
 msgid "attempt three-way merge if a patch does not apply"
 msgstr "пробване с тройно сливане, ако кръпката не може да се приложи директно"
 
-#: apply.c:4994
+#: apply.c:4998
 msgid "build a temporary index based on embedded index information"
 msgstr ""
 "създаване на временен индекс на база на включената информация за индекса"
 
-#: apply.c:4997 builtin/checkout-index.c:173 builtin/ls-files.c:524
+#: apply.c:5001 builtin/checkout-index.c:173 builtin/ls-files.c:524
 msgid "paths are separated with NUL character"
 msgstr "разделяне на пътищата с нулевия знак „NUL“"
 
-#: apply.c:4999
+#: apply.c:5003
 msgid "ensure at least <n> lines of context match"
 msgstr "да се осигури контекст от поне такъв БРОЙ съвпадащи редове"
 
-#: apply.c:5000 builtin/am.c:2191 builtin/interpret-trailers.c:97
+#: apply.c:5004 builtin/am.c:2198 builtin/interpret-trailers.c:97
 #: builtin/interpret-trailers.c:99 builtin/interpret-trailers.c:101
-#: builtin/pack-objects.c:3314 builtin/rebase.c:1065
+#: builtin/pack-objects.c:3317 builtin/rebase.c:1415
 msgid "action"
 msgstr "действие"
 
-#: apply.c:5001
+#: apply.c:5005
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "засичане на нови или променени редове с грешки в знаците за интервали"
 
-#: apply.c:5004 apply.c:5007
+#: apply.c:5008 apply.c:5011
 msgid "ignore changes in whitespace when finding context"
 msgstr ""
 "игнориране на промените в знаците за интервали при откриване на контекста"
 
-#: apply.c:5010
+#: apply.c:5014
 msgid "apply the patch in reverse"
 msgstr "прилагане на кръпката в обратна посока"
 
-#: apply.c:5012
+#: apply.c:5016
 msgid "don't expect at least one line of context"
 msgstr "без изискване на дори и един ред контекст"
 
-#: apply.c:5014
+#: apply.c:5018
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "оставяне на отхвърлените парчета във файлове с разширение „.rej“"
 
-#: apply.c:5016
+#: apply.c:5020
 msgid "allow overlapping hunks"
 msgstr "позволяване на застъпващи се парчета"
 
-#: apply.c:5017 builtin/add.c:291 builtin/check-ignore.c:22
-#: builtin/commit.c:1312 builtin/count-objects.c:98 builtin/fsck.c:724
-#: builtin/log.c:2037 builtin/mv.c:123 builtin/read-tree.c:128
-#: builtin/rebase--interactive.c:159
+#: apply.c:5021 builtin/add.c:291 builtin/check-ignore.c:22
+#: builtin/commit.c:1317 builtin/count-objects.c:98 builtin/fsck.c:786
+#: builtin/log.c:2045 builtin/mv.c:123 builtin/read-tree.c:128
 msgid "be verbose"
 msgstr "повече подробности"
 
-#: apply.c:5019
+#: apply.c:5023
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "пренебрегване на неправилно липсващ знак за нов ред в края на файл"
 
-#: apply.c:5022
+#: apply.c:5026
 msgid "do not trust the line counts in the hunk headers"
 msgstr "без доверяване на номерата на редовете в заглавните части на парчетата"
 
-#: apply.c:5024 builtin/am.c:2200
+#: apply.c:5028 builtin/am.c:2207
 msgid "root"
 msgstr "НАЧАЛНА_ДИРЕКТОРИЯ"
 
-#: apply.c:5025
+#: apply.c:5029
 msgid "prepend <root> to all filenames"
 msgstr "добавяне на тази НАЧАЛНА_ДИРЕКТОРИЯ към имената на всички файлове"
 
@@ -924,7 +929,7 @@ msgstr ""
 msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote ХРАНИЛИЩЕ [--exec КОМАНДА] --list"
 
-#: archive.c:372 builtin/add.c:177 builtin/add.c:515 builtin/rm.c:299
+#: archive.c:372 builtin/add.c:177 builtin/add.c:516 builtin/rm.c:299
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "пътят „%s“ не съвпада с никой файл"
@@ -956,7 +961,7 @@ msgstr "ФОРМАТ"
 msgid "archive format"
 msgstr "ФОРМАТ на архива"
 
-#: archive.c:456 builtin/log.c:1549
+#: archive.c:456 builtin/log.c:1557
 msgid "prefix"
 msgstr "ПРЕФИКС"
 
@@ -964,11 +969,11 @@ msgstr "ПРЕФИКС"
 msgid "prepend prefix to each pathname in the archive"
 msgstr "добавяне на този ПРЕФИКС към всеки път в архива"
 
-#: archive.c:458 builtin/blame.c:820 builtin/blame.c:821 builtin/config.c:129
-#: builtin/fast-export.c:1091 builtin/fast-export.c:1093 builtin/grep.c:895
-#: builtin/hash-object.c:105 builtin/ls-files.c:560 builtin/ls-files.c:563
-#: builtin/notes.c:412 builtin/notes.c:578 builtin/read-tree.c:123
-#: parse-options.h:162
+#: archive.c:458 builtin/blame.c:821 builtin/blame.c:822
+#: builtin/commit-tree.c:117 builtin/config.c:129 builtin/fast-export.c:1091
+#: builtin/fast-export.c:1093 builtin/grep.c:895 builtin/hash-object.c:105
+#: builtin/ls-files.c:560 builtin/ls-files.c:563 builtin/notes.c:412
+#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:177
 msgid "file"
 msgstr "ФАЙЛ"
 
@@ -1000,8 +1005,8 @@ msgstr "добро компресиране"
 msgid "list supported archive formats"
 msgstr "извеждане на списъка с поддържаните формати"
 
-#: archive.c:477 builtin/archive.c:91 builtin/clone.c:112 builtin/clone.c:115
-#: builtin/submodule--helper.c:1378 builtin/submodule--helper.c:1859
+#: archive.c:477 builtin/archive.c:91 builtin/clone.c:110 builtin/clone.c:113
+#: builtin/submodule--helper.c:1378 builtin/submodule--helper.c:1858
 msgid "repo"
 msgstr "хранилище"
 
@@ -1009,7 +1014,7 @@ msgstr "хранилище"
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "изтегляне на архива от отдалеченото ХРАНИЛИЩЕ"
 
-#: archive.c:479 builtin/archive.c:93 builtin/difftool.c:715
+#: archive.c:479 builtin/archive.c:93 builtin/difftool.c:707
 #: builtin/notes.c:498
 msgid "command"
 msgstr "команда"
@@ -1055,16 +1060,16 @@ msgstr "неподдържани права за достъп до файл: 0%o
 msgid "cannot read %s"
 msgstr "обектът „%s“ не може да бъде прочетен"
 
-#: archive-tar.c:458
+#: archive-tar.c:459
 #, c-format
 msgid "unable to start '%s' filter"
 msgstr "филтърът „%s“ не може да бъде стартиран"
 
-#: archive-tar.c:461
+#: archive-tar.c:462
 msgid "unable to redirect descriptor"
 msgstr "дескрипторът не може да бъде пренасочен"
 
-#: archive-tar.c:468
+#: archive-tar.c:469
 #, c-format
 msgid "'%s' filter reported error"
 msgstr "филтърът „%s“ върна грешка"
@@ -1079,7 +1084,7 @@ msgstr "пътят не е правилно кодиран в UTF-8: %s"
 msgid "path too long (%d chars, SHA1: %s): %s"
 msgstr "твърде дълъг път (%d знака, SHA1: %s): %s"
 
-#: archive-zip.c:474 builtin/pack-objects.c:225 builtin/pack-objects.c:228
+#: archive-zip.c:474 builtin/pack-objects.c:226 builtin/pack-objects.c:229
 #, c-format
 msgid "deflate error (%d)"
 msgstr "грешка при декомпресиране с „deflate“ (%d)"
@@ -1181,26 +1186,26 @@ msgstr "Двоично търсене: трябва да се провери б
 msgid "a %s revision is needed"
 msgstr "необходима е версия „%s“"
 
-#: bisect.c:884 builtin/notes.c:177 builtin/tag.c:237
+#: bisect.c:884 builtin/notes.c:177 builtin/tag.c:248
 #, c-format
 msgid "could not create file '%s'"
 msgstr "файлът „%s“ не може да бъде създаден"
 
-#: bisect.c:937 builtin/merge.c:139
+#: bisect.c:928 builtin/merge.c:146
 #, c-format
 msgid "could not read file '%s'"
 msgstr "файлът „%s“ не може да бъде прочетен"
 
-#: bisect.c:967
+#: bisect.c:958
 msgid "reading bisect refs failed"
 msgstr "неуспешно прочитане на указателите за двоично търсене"
 
-#: bisect.c:986
+#: bisect.c:977
 #, c-format
 msgid "%s was both %s and %s\n"
 msgstr "„%s“ e както „%s“, така и „%s“\n"
 
-#: bisect.c:994
+#: bisect.c:985
 #, c-format
 msgid ""
 "No testable commit found.\n"
@@ -1209,7 +1214,7 @@ msgstr ""
 "Липсва подходящо за тестване подаване.\n"
 "Проверете параметрите за пътищата.\n"
 
-#: bisect.c:1013
+#: bisect.c:1004
 #, c-format
 msgid "(roughly %d step)"
 msgid_plural "(roughly %d steps)"
@@ -1219,53 +1224,53 @@ msgstr[1] "(приблизително %d стъпки)"
 #. TRANSLATORS: the last %s will be replaced with "(roughly %d
 #. steps)" translation.
 #.
-#: bisect.c:1019
+#: bisect.c:1010
 #, 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:1792
+#: blame.c:1794
 msgid "--contents and --reverse do not blend well."
 msgstr "Опциите „--contents“ и „--reverse“ са несъвместими"
 
-#: blame.c:1806
+#: blame.c:1808
 msgid "cannot use --contents with final commit object name"
 msgstr "Опцията „--contents“ е несъвместима с име на обект от крайно подаване"
 
-#: blame.c:1827
+#: blame.c:1829
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "Едновременното задаване на опциите „--reverse“ и „--first-parent“ изисква "
 "указването на крайно подаване"
 
-#: blame.c:1836 bundle.c:164 ref-filter.c:2071 remote.c:1948 sequencer.c:1993
-#: sequencer.c:4064 builtin/commit.c:1004 builtin/log.c:378 builtin/log.c:936
-#: builtin/log.c:1420 builtin/log.c:1796 builtin/log.c:2086 builtin/merge.c:407
-#: builtin/pack-objects.c:3137 builtin/pack-objects.c:3152
+#: blame.c:1838 bundle.c:164 ref-filter.c:2077 remote.c:1938 sequencer.c:2030
+#: sequencer.c:4224 builtin/commit.c:1017 builtin/log.c:382 builtin/log.c:940
+#: builtin/log.c:1428 builtin/log.c:1804 builtin/log.c:2094 builtin/merge.c:415
+#: builtin/pack-objects.c:3140 builtin/pack-objects.c:3155
 #: builtin/shortlog.c:192
 msgid "revision walk setup failed"
 msgstr "неуспешно настройване на обхождането на версиите"
 
-#: blame.c:1854
+#: blame.c:1856
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "Едновременното задаване на опциите „--reverse“ и „--first-parent“ изисква "
 "указването на диапазон по веригата на първите наследници"
 
-#: blame.c:1865
+#: blame.c:1867
 #, c-format
 msgid "no such path %s in %s"
 msgstr "няма път на име „%s“ в „%s“"
 
-#: blame.c:1876
+#: blame.c:1878
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "обектът-BLOB „%s“ в пътя %s не може да бъде прочетен"
 
-#: branch.c:52
+#: branch.c:53
 #, c-format
 msgid ""
 "\n"
@@ -1278,88 +1283,88 @@ msgstr ""
 "информацията за следения клон чрез:\n"
 "git branch --set-upstream-to=%s%s%s"
 
-#: branch.c:66
+#: branch.c:67
 #, c-format
 msgid "Not setting branch %s as its own upstream."
 msgstr ""
 "Клонът „%s“ не може да служи като източник за собствената си синхронизация."
 
-#: branch.c:92
+#: branch.c:93
 #, c-format
 msgid "Branch '%s' set up to track remote branch '%s' from '%s' by rebasing."
 msgstr ""
 "Клонът „%s“ ще следи отдалечения клон „%s“ от хранилището „%s“ чрез "
 "пребазиране."
 
-#: branch.c:93
+#: branch.c:94
 #, c-format
 msgid "Branch '%s' set up to track remote branch '%s' from '%s'."
 msgstr "Клонът „%s“ ще следи отдалечения клон „%s“ от хранилището „%s“."
 
-#: branch.c:97
+#: branch.c:98
 #, c-format
 msgid "Branch '%s' set up to track local branch '%s' by rebasing."
 msgstr "Клонът „%s“ ще следи локалния клон „%s“ чрез пребазиране."
 
-#: branch.c:98
+#: branch.c:99
 #, c-format
 msgid "Branch '%s' set up to track local branch '%s'."
 msgstr "Клонът „%s“ ще следи локалния клон „%s“."
 
-#: branch.c:103
+#: branch.c:104
 #, c-format
 msgid "Branch '%s' set up to track remote ref '%s' by rebasing."
 msgstr "Клонът „%s“ ще следи отдалечения указател „%s“ чрез пребазиране."
 
-#: branch.c:104
+#: branch.c:105
 #, c-format
 msgid "Branch '%s' set up to track remote ref '%s'."
 msgstr "Клонът „%s“ ще следи отдалечения указател „%s“."
 
-#: branch.c:108
+#: branch.c:109
 #, c-format
 msgid "Branch '%s' set up to track local ref '%s' by rebasing."
 msgstr "Клонът „%s“ ще следи локалния указател „%s“ чрез пребазиране."
 
-#: branch.c:109
+#: branch.c:110
 #, c-format
 msgid "Branch '%s' set up to track local ref '%s'."
 msgstr "Клонът „%s“ ще следи локалния указател „%s“."
 
-#: branch.c:118
+#: branch.c:119
 msgid "Unable to write upstream branch configuration"
 msgstr "Настройките за следения клон не могат да бъдат записани"
 
-#: branch.c:155
+#: branch.c:156
 #, c-format
 msgid "Not tracking: ambiguous information for ref %s"
 msgstr "Няма следене: информацията за указателя „%s“ не е еднозначна"
 
-#: branch.c:188
+#: branch.c:189
 #, c-format
 msgid "'%s' is not a valid branch name."
 msgstr "„%s“ не е позволено име за клон."
 
-#: branch.c:207
+#: branch.c:208
 #, c-format
 msgid "A branch named '%s' already exists."
 msgstr "Вече съществува клон с име „%s“."
 
-#: branch.c:212
+#: branch.c:213
 msgid "Cannot force update the current branch."
 msgstr "Текущият клон не може да бъде принудително обновен."
 
-#: branch.c:232
+#: branch.c:233
 #, c-format
 msgid "Cannot setup tracking information; starting point '%s' is not a branch."
 msgstr "Зададените настройки за следенето са грешни — началото „%s“ не е клон."
 
-#: branch.c:234
+#: branch.c:235
 #, c-format
 msgid "the requested upstream branch '%s' does not exist"
 msgstr "заявеният отдалечен клон „%s“ не съществува"
 
-#: branch.c:236
+#: branch.c:237
 msgid ""
 "\n"
 "If you are planning on basing your work on an upstream\n"
@@ -1378,17 +1383,17 @@ msgstr ""
 "може да използвате „git push -u“, за да настроите към кой клон да се "
 "изтласква."
 
-#: branch.c:280
+#: branch.c:281
 #, c-format
 msgid "Not a valid object name: '%s'."
 msgstr "Неправилно име на обект: „%s“"
 
-#: branch.c:300
+#: branch.c:301
 #, c-format
 msgid "Ambiguous object name: '%s'."
 msgstr "Името на обект не е еднозначно: „%s“"
 
-#: branch.c:305
+#: branch.c:306
 #, c-format
 msgid "Not a valid branch point: '%s'."
 msgstr "Неправилно място за начало на клон: „%s“"
@@ -1413,8 +1418,8 @@ msgstr "Файлът „%s“ не изглежда да е пратка на gi
 msgid "unrecognized header: %s%s (%d)"
 msgstr "непозната заглавна част: %s%s (%d)"
 
-#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2215 sequencer.c:2763
-#: builtin/commit.c:776
+#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2281 sequencer.c:2916
+#: builtin/commit.c:788
 #, c-format
 msgid "could not open '%s'"
 msgstr "„%s“ не може да се отвори"
@@ -1463,7 +1468,7 @@ msgid "ref '%s' is excluded by the rev-list options"
 msgstr ""
 "указателят „%s“ не е бил включен поради опциите зададени на „git rev-list“"
 
-#: bundle.c:457 builtin/log.c:193 builtin/log.c:1701 builtin/shortlog.c:306
+#: bundle.c:457 builtin/log.c:197 builtin/log.c:1709 builtin/shortlog.c:306
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "непознат аргумент: %s"
@@ -1486,9 +1491,8 @@ msgstr "Командата „git index-pack“ не завърши успешн
 msgid "invalid color value: %.*s"
 msgstr "неправилна стойност за цвят: %.*s"
 
-#: commit.c:50 sequencer.c:2567 builtin/am.c:355 builtin/am.c:399
-#: builtin/am.c:1375 builtin/am.c:2019 builtin/replace.c:376
-#: builtin/replace.c:448
+#: commit.c:50 sequencer.c:2697 builtin/am.c:355 builtin/am.c:399
+#: builtin/am.c:1377 builtin/am.c:2022 builtin/replace.c:455
 #, c-format
 msgid "could not parse %s"
 msgstr "„%s“ не може да се анализира"
@@ -1521,29 +1525,29 @@ msgstr ""
 "\n"
 "    git config advice.graftFileDeprecated false"
 
-#: commit.c:1122
+#: commit.c:1128
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr ""
 "Подаването „%s“ е с недоверен подпис от GPG, който твърди, че е на „%s“."
 
-#: commit.c:1125
+#: commit.c:1131
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr ""
 "Подаването „%s“ е с неправилен подпис от GPG, който твърди, че е на „%s“."
 
-#: commit.c:1128
+#: commit.c:1134
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "Подаването „%s“ е без подпис от GPG."
 
-#: commit.c:1131
+#: commit.c:1137
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "Подаването „%s“ е с коректен подпис от GPG на „%s“.\n"
 
-#: commit.c:1385
+#: commit.c:1391
 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"
@@ -1553,132 +1557,209 @@ msgstr ""
 "Може да поправите подаването заедно със съобщението или може да\n"
 "зададете ползваното кодиране в настройката „i18n.commitencoding“.\n"
 
-#: commit-graph.c:101
-#, c-format
-msgid "graph file %s is too small"
-msgstr "файлът с гра̀фа на подаванията „%s“ е твърде малък"
+#: commit-graph.c:105
+msgid "commit-graph file is too small"
+msgstr "файлът с гра̀фа на подаванията е твърде малък"
 
-#: commit-graph.c:136
+#: commit-graph.c:170
 #, c-format
-msgid "graph signature %X does not match signature %X"
+msgid "commit-graph signature %X does not match signature %X"
 msgstr "отпечатъкът на гра̀фа с подаванията %X не съвпада с %X"
 
-#: commit-graph.c:143
+#: commit-graph.c:177
 #, c-format
-msgid "graph version %X does not match version %X"
+msgid "commit-graph version %X does not match version %X"
 msgstr "версията на гра̀фа с подаванията %X не съвпада с %X"
 
-#: commit-graph.c:150
+#: commit-graph.c:184
 #, c-format
-msgid "hash version %X does not match version %X"
-msgstr "веÑ\80Ñ\81иÑ\8fÑ\82а Ð½Ð° Ð¾Ñ\82пеÑ\87аÑ\82Ñ\8aка на гра̀фа с подаванията %X не съвпада с %X"
+msgid "commit-graph hash version %X does not match version %X"
+msgstr "веÑ\80Ñ\81иÑ\8fÑ\82а Ð½Ð° ÐºÐ¾Ð½Ñ\82Ñ\80олнаÑ\82а Ñ\81Ñ\83ма на гра̀фа с подаванията %X не съвпада с %X"
 
-#: commit-graph.c:173
-msgid "chunk lookup table entry missing; graph file may be incomplete"
+#: commit-graph.c:207
+msgid "commit-graph chunk lookup table entry missing; file may be incomplete"
 msgstr ""
 "записът в таблицата за откъси липсва, файлът за гра̀фа може да е непълен"
 
-#: commit-graph.c:184
+#: commit-graph.c:218
 #, c-format
-msgid "improper chunk offset %08x%08x"
+msgid "commit-graph improper chunk offset %08x%08x"
 msgstr "неправилно отместване на откъс: %08x%08x"
 
-#: commit-graph.c:221
+#: commit-graph.c:255
 #, c-format
-msgid "chunk id %08x appears multiple times"
+msgid "commit-graph chunk id %08x appears multiple times"
 msgstr "откъсът %08x се явява многократно"
 
-#: commit-graph.c:334
+#: commit-graph.c:390
 #, c-format
 msgid "could not find commit %s"
 msgstr "подаването „%s“ не може да бъде открито"
 
-#: commit-graph.c:671 builtin/pack-objects.c:2646
+#: commit-graph.c:732 builtin/pack-objects.c:2649
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "видът на обекта „%s“ не може да бъде определен"
 
-#: commit-graph.c:704
+#: commit-graph.c:765
 msgid "Loading known commits in commit graph"
 msgstr "Зареждане на познатите подавания в гра̀фа с подаванията"
 
-#: commit-graph.c:720
+#: commit-graph.c:781
 msgid "Expanding reachable commits in commit graph"
 msgstr "Разширяване на достижимите подавания в гра̀фа"
 
-#: commit-graph.c:732
+#: commit-graph.c:793
 msgid "Clearing commit marks in commit graph"
 msgstr "Изчистване на отбелязванията на подаванията в гра̀фа с подаванията"
 
-#: commit-graph.c:752
+#: commit-graph.c:813
 msgid "Computing commit graph generation numbers"
 msgstr "Изчисляване на номерата на поколенията в гра̀фа с подаванията"
 
-#: commit-graph.c:869
+#: commit-graph.c:930
 #, 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 пакетни файла"
 
-#: commit-graph.c:882
+#: commit-graph.c:943
 #, c-format
 msgid "error adding pack %s"
 msgstr "грешка при добавяне на пакетен файл „%s“"
 
-#: commit-graph.c:884
+#: commit-graph.c:945
 #, c-format
 msgid "error opening index for %s"
 msgstr "грешка при отваряне на индекса на „%s“"
 
-#: commit-graph.c:898
+#: commit-graph.c:959
 #, c-format
 msgid "Finding commits for commit graph from %d ref"
 msgid_plural "Finding commits for commit graph from %d refs"
 msgstr[0] "Откриване на подаванията в гра̀фа измежду %d указател"
 msgstr[1] "Откриване на подаванията в гра̀фа измежду %d указатели"
 
-#: commit-graph.c:930
+#: commit-graph.c:991
 msgid "Finding commits for commit graph among packed objects"
 msgstr "Откриване на подаванията в гра̀фа измежду пакетираните обекти"
 
-#: commit-graph.c:943
+#: commit-graph.c:1004
 msgid "Counting distinct commits in commit graph"
 msgstr "Преброяване на различните подавания в гра̀фа"
 
-#: commit-graph.c:956
+#: commit-graph.c:1017
 #, c-format
 msgid "the commit graph format cannot write %d commits"
 msgstr "форматът на гра̀фа с подаванията не може да запише %d подавания"
 
-#: commit-graph.c:965
+#: commit-graph.c:1026
 msgid "Finding extra edges in commit graph"
 msgstr "Откриване на още върхове в гра̀фа с подаванията"
 
-#: commit-graph.c:989
+#: commit-graph.c:1050
 msgid "too many commits to write graph"
 msgstr "прекалено много подавания за записване на гра̀фа"
 
-#: commit-graph.c:996 midx.c:769
+#: commit-graph.c:1057 midx.c:819
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "родителските директории на „%s“ не могат да бъдат създадени"
 
-#: commit-graph.c:1036
+#: commit-graph.c:1097
 #, 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:1109
+#: commit-graph.c:1162
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr "графът с подаванията е с грешна сума за проверка — вероятно е повреден"
 
-#: commit-graph.c:1153
+#: commit-graph.c:1172
+#, c-format
+msgid "commit-graph has incorrect OID order: %s then %s"
+msgstr ""
+"неправилна подредба на обектите по идентификатор в гра̀фа с подаванията: „%s“ "
+"е преди „%s“, а не трябва"
+
+#: commit-graph.c:1182 commit-graph.c:1197
+#, c-format
+msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
+msgstr ""
+"неправилна стойност за откъс в гра̀фа с подаванията: fanout[%d] = %u, а "
+"трябва да е %u"
+
+#: commit-graph.c:1189
+#, c-format
+msgid "failed to parse commit %s from commit-graph"
+msgstr "подаване „%s“ в гра̀фа с подаванията не може да се анализира"
+
+#: commit-graph.c:1206
 msgid "Verifying commits in commit graph"
 msgstr "Проверка на подаванията в гра̀фа"
 
+#: commit-graph.c:1219
+#, c-format
+msgid "failed to parse commit %s from object database for commit-graph"
+msgstr ""
+"подаване „%s“ в базата от данни към гра̀фа с подаванията не може да се "
+"анализира"
+
+#: commit-graph.c:1226
+#, c-format
+msgid "root tree OID for commit %s in commit-graph is %s != %s"
+msgstr ""
+"идентификаторът на обект за кореновото дърво за подаване „%s“ в гра̀фа с "
+"подаванията е „%s“, а трябва да е „%s“"
+
+#: commit-graph.c:1236
+#, c-format
+msgid "commit-graph parent list for commit %s is too long"
+msgstr "списъкът с родители на „%s“ в гра̀фа с подаванията е прекалено дълъг"
+
+#: commit-graph.c:1242
+#, c-format
+msgid "commit-graph parent for %s is %s != %s"
+msgstr "родителят на „%s“ в гра̀фа с подаванията е „%s“, а трябва да е „%s“"
+
+#: commit-graph.c:1255
+#, c-format
+msgid "commit-graph parent list for commit %s terminates early"
+msgstr "списъкът с родители на „%s“ в гра̀фа с подаванията е прекалено къс"
+
+#: commit-graph.c:1260
+#, c-format
+msgid ""
+"commit-graph has generation number zero for commit %s, but non-zero elsewhere"
+msgstr ""
+"номерът на поколението на подаване „%s“ в гра̀фа с подаванията е 0, а другаде "
+"не е"
+
+#: commit-graph.c:1264
+#, c-format
+msgid ""
+"commit-graph has non-zero generation number for commit %s, but zero elsewhere"
+msgstr ""
+"номерът на поколението на подаване „%s“ в гра̀фа с подаванията не е 0, а "
+"другаде е"
+
+#: commit-graph.c:1279
+#, c-format
+msgid "commit-graph generation for commit %s is %u != %u"
+msgstr ""
+"номерът на поколението на подаване „%s“ в гра̀фа с подаванията е %u, а "
+"другаде е %u"
+
+#: commit-graph.c:1285
+#, c-format
+msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
+msgstr ""
+"датата на подаване на „%s“ в гра̀фа с подаванията е %<PRIuMAX>, а трябва да е "
+"%<PRIuMAX>"
+
 #: compat/obstack.c:406 compat/obstack.c:408
 msgid "memory exhausted"
 msgstr "паметта свърши"
@@ -1721,7 +1802,7 @@ msgstr "ключът не съдържа раздел: „%s“"
 msgid "key does not contain variable name: %s"
 msgstr "ключът не съдържа име на променлива: „%s“"
 
-#: config.c:378 sequencer.c:2330
+#: config.c:378 sequencer.c:2459
 #, c-format
 msgid "invalid key: %s"
 msgstr "неправилен ключ: „%s“"
@@ -1861,139 +1942,139 @@ msgstr ""
 "„simple“ (клонът със същото име, от който се издърпва), „upstream“ (клонът, "
 "от който се издърпва) или „current“ (клонът със същото име)"
 
-#: config.c:1481 builtin/pack-objects.c:3394
+#: config.c:1483 builtin/pack-objects.c:3397
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "неправилно ниво на компресиране при пакетиране: %d"
 
-#: config.c:1602
+#: config.c:1604
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "обектът-BLOB „%s“ с конфигурации не може да се зареди"
 
-#: config.c:1605
+#: config.c:1607
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "указателят „%s“ не сочи към обект-BLOB"
 
-#: config.c:1622
+#: config.c:1624
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "обектът-BLOB „%s“ с конфигурации не може да бъде открит"
 
-#: config.c:1652
+#: config.c:1654
 #, c-format
 msgid "failed to parse %s"
 msgstr "„%s“ не може да бъде анализиран"
 
-#: config.c:1705
+#: config.c:1710
 msgid "unable to parse command-line config"
 msgstr "неправилни настройки от командния ред"
 
-#: config.c:2037
+#: config.c:2059
 msgid "unknown error occurred while reading the configuration files"
 msgstr "неочаквана грешка при изчитането на конфигурационните файлове"
 
-#: config.c:2207
+#: config.c:2229
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "Неправилен %s: „%s“"
 
-#: config.c:2250
+#: config.c:2272
 #, c-format
 msgid "unknown core.untrackedCache value '%s'; using 'keep' default value"
 msgstr ""
 "непозната стойност „%s“ за настройката „core.untrackedCache“.  Ще се ползва "
 "стандартната стойност „keep“ (запазване)"
 
-#: config.c:2276
+#: config.c:2298
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr ""
 "стойността на „splitIndex.maxPercentChange“ трябва да е между 1 и 100, а не "
 "%d"
 
-#: config.c:2322
+#: config.c:2344
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "неразпозната стойност „%s“ от командния ред"
 
-#: config.c:2324
+#: config.c:2346
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "неправилна настройка „%s“ във файла „%s“ на ред №%d"
 
-#: config.c:2405
+#: config.c:2427
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "неправилно име на раздел: „%s“"
 
-#: config.c:2437
+#: config.c:2459
 #, c-format
 msgid "%s has multiple values"
 msgstr "зададени са няколко стойности за „%s“"
 
-#: config.c:2466
+#: config.c:2488
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "новият конфигурационен файл „%s“ не може да бъде запазен"
 
-#: config.c:2716 config.c:3040
+#: config.c:2740 config.c:3064
 #, c-format
 msgid "could not lock config file %s"
 msgstr "конфигурационният файл „%s“ не може да бъде заключен"
 
-#: config.c:2727
+#: config.c:2751
 #, c-format
 msgid "opening %s"
 msgstr "отваряне на „%s“"
 
-#: config.c:2762 builtin/config.c:328
+#: config.c:2786 builtin/config.c:328
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "неправилен шаблон: %s"
 
-#: config.c:2787
+#: config.c:2811
 #, c-format
 msgid "invalid config file %s"
 msgstr "неправилен конфигурационен файл: „%s“"
 
-#: config.c:2800 config.c:3053
+#: config.c:2824 config.c:3077
 #, c-format
 msgid "fstat on %s failed"
 msgstr "неуспешно изпълнение на „fstat“ върху „%s“"
 
-#: config.c:2811
+#: config.c:2835
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr "неуспешно изпълнение на „mmap“ върху „%s“"
 
-#: config.c:2820 config.c:3058
+#: config.c:2844 config.c:3082
 #, c-format
 msgid "chmod on %s failed"
 msgstr "неуспешна смяна на права с „chmod“ върху „%s“"
 
-#: config.c:2905 config.c:3155
+#: config.c:2929 config.c:3179
 #, c-format
 msgid "could not write config file %s"
 msgstr "конфигурационният файл „%s“ не може да бъде записан"
 
-#: config.c:2939
+#: config.c:2963
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "„%s“ не може да се зададе да е „%s“"
 
-#: config.c:2941 builtin/remote.c:782
+#: config.c:2965 builtin/remote.c:782
 #, c-format
 msgid "could not unset '%s'"
 msgstr "„%s“ не може да се премахне"
 
-#: config.c:3031
+#: config.c:3055
 #, c-format
 msgid "invalid section name: %s"
 msgstr "неправилно име на раздел: %s"
 
-#: config.c:3198
+#: config.c:3222
 #, c-format
 msgid "missing value for '%s'"
 msgstr "липсва стойност за „%s“"
@@ -2153,28 +2234,28 @@ msgid "ssh variant 'simple' does not support setting port"
 msgstr ""
 "вариантът за „ssh“ — „simple“ (опростен), не поддържа задаването на порт"
 
-#: connect.c:1259
+#: connect.c:1260
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr "необичайният път „%s“ е блокиран"
 
-#: connect.c:1304
+#: connect.c:1307
 msgid "unable to fork"
 msgstr "неуспешно създаване на процес"
 
-#: connected.c:68 builtin/fsck.c:221 builtin/prune.c:146
+#: connected.c:85 builtin/fsck.c:221 builtin/prune.c:43
 msgid "Checking connectivity"
 msgstr "Проверка на свързаността"
 
-#: connected.c:80
+#: connected.c:97
 msgid "Could not run 'git rev-list'"
 msgstr "Командата „git rev-list“ не може да бъде изпълнена."
 
-#: connected.c:100
+#: connected.c:117
 msgid "failed write to rev-list"
 msgstr "неуспешен запис на списъка с версиите"
 
-#: connected.c:107
+#: connected.c:124
 msgid "failed to close rev-list's stdin"
 msgstr "стандартният вход на списъка с версиите не може да бъде затворен"
 
@@ -2417,24 +2498,31 @@ msgstr "файлът с подредбата на съответствията 
 msgid "Performing inexact rename detection"
 msgstr "Търсене на преименувания на обекти съчетани с промени"
 
-#: diff.c:108
-#, c-format
-msgid "option '%s' requires a value"
-msgstr "опцията „%s“ изисква стойност"
+#: diff-no-index.c:238
+msgid "git diff --no-index [<options>] <path> <path>"
+msgstr "git diff --no-index [ОПЦИЯ…] ПЪТ ПЪТ"
+
+#: diff-no-index.c:263
+msgid ""
+"Not a git repository. Use --no-index to compare two paths outside a working "
+"tree"
+msgstr ""
+"Не е хранилище на git.  Ползвайте опцията „--no-index“, за да сравните "
+"пътища извън работно дърво"
 
-#: diff.c:158
+#: diff.c:155
 #, c-format
 msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
 msgstr ""
 "  Неуспешно разпознаване на „%s“ като процент-праг за статистиката по "
 "директории\n"
 
-#: diff.c:163
+#: diff.c:160
 #, c-format
 msgid "  Unknown dirstat parameter '%s'\n"
 msgstr "  Непознат параметър „%s“ за статистиката по директории'\n"
 
-#: diff.c:291
+#: diff.c:296
 msgid ""
 "color moved setting must be one of 'no', 'default', 'blocks', 'zebra', "
 "'dimmed-zebra', 'plain'"
@@ -2443,33 +2531,33 @@ msgstr ""
 "„default“ (стандартно), „blocks“ (парчета), „zebra“ (райе), "
 "„dimmed_zebra“ (тъмно райе), „plain“ (обикновено)"
 
-#: diff.c:319
+#: diff.c:324
 #, 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 ""
-"неподдържан режим за настройката „color-moved-ws mode“ — „%s“, possible "
-"values are „ignore-space-change“ (пренебрегване на промените на празните "
+"неподдържан режим за настройката „color-moved-ws mode“ — „%s“, възможните "
+"стойности са „ignore-space-change“ (пренебрегване на промените на празните "
 "знаци), „ignore-space-at-eol“ (пренебрегване на промените на празните знаци "
 "в края на реда), „ignore-all-space“ (пренебрегване на всички празни знаци), "
 "„allow-indentation-change“ (позволяване на промените в празните знаци за "
 "форматиране)"
 
-#: diff.c:327
+#: diff.c:332
 msgid ""
 "color-moved-ws: allow-indentation-change cannot be combined with other "
 "whitespace modes"
 msgstr ""
-"color-moved-ws: „allow-indentation-change“ е несъвместима с другите режими "
+"„color-moved-ws“: „allow-indentation-change“ е несъвместима с другите режими "
 "за празни знаци"
 
-#: diff.c:400
+#: diff.c:405
 #, c-format
 msgid "Unknown value for 'diff.submodule' config variable: '%s'"
 msgstr "Непозната стойност „%s“ за настройката „diff.submodule“"
 
-#: diff.c:460
+#: diff.c:465
 #, c-format
 msgid ""
 "Found errors in 'diff.dirstat' config variable:\n"
@@ -2478,27 +2566,38 @@ msgstr ""
 "Грешки в настройката „diff.dirstat“:\n"
 "%s"
 
-#: diff.c:4211
+#: diff.c:4210
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr ""
 "външната програма за разлики завърши неуспешно.  Спиране на работата при „%s“"
 
-#: diff.c:4553
+#: diff.c:4555
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr ""
 "Опциите „--name-only“, „--name-status“, „--check“ и „-s“ са несъвместими "
 "една с друга"
 
-#: diff.c:4556
+#: diff.c:4558
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "Опциите „-G“, „-S“ и „--find-object“ са несъвместими една с друга"
 
-#: diff.c:4634
+#: diff.c:4636
 msgid "--follow requires exactly one pathspec"
 msgstr "Опцията „--follow“ изисква точно един път"
 
-#: diff.c:4800
+#: diff.c:4684
+#, c-format
+msgid "invalid --stat value: %s"
+msgstr "неправилна стойност за „--stat“: %s"
+
+#: diff.c:4689 diff.c:4694 diff.c:4699 diff.c:4704 diff.c:5217
+#: parse-options.c:199 parse-options.c:203
+#, c-format
+msgid "%s expects a numerical value"
+msgstr "опцията „%s“ очаква число за аргумент"
+
+#: diff.c:4721
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -2507,341 +2606,849 @@ msgstr ""
 "Неразпознат параметър към опцията „--dirstat/-X“:\n"
 "%s"
 
-#: diff.c:4814
+#: diff.c:4806
 #, c-format
-msgid "Failed to parse --submodule option parameter: '%s'"
-msgstr "Неразпознат параметър към опцията „--submodule“: „%s“"
-
-#: diff.c:5900
-msgid "inexact rename detection was skipped due to too many files."
-msgstr ""
-"търсенето на преименувания на обекти съчетани с промени се прескача поради "
-"многото файлове."
+msgid "unknown change class '%c' in --diff-filter=%s"
+msgstr "непознат вид промяна: „%c“ в „--diff-filter=%s“"
 
-#: diff.c:5903
-msgid "only found copies from modified paths due to too many files."
-msgstr ""
-"установени са точните копия на променените пътища поради многото файлове."
+#: diff.c:4830
+#, c-format
+msgid "unknown value after ws-error-highlight=%.*s"
+msgstr "непозната стойност след „ws-error-highlight=%.*s“"
 
-#: diff.c:5906
+#: diff.c:4844
 #, c-format
-msgid ""
-"you may want to set your %s variable to at least %d and retry the command."
-msgstr "задайте променливата „%s“ да е поне %d и отново изпълнете командата."
+msgid "unable to resolve '%s'"
+msgstr "„%s“ не може да се открие"
 
-#: dir.c:538
+#: diff.c:4894 diff.c:4900
 #, c-format
-msgid "pathspec '%s' did not match any file(s) known to git"
-msgstr "пътят „%s“ не съвпада с никой файл в git"
+msgid "%s expects <n>/<m> form"
+msgstr ""
+"опцията „%s“ изисква стойности за МИНИМАЛЕН_%%_ПРОМЯНА_ЗА_ИЗТОЧНИК_/"
+"МАКСИМАЛЕН_%%_ПРОМЯНА_ЗА_ЗАМЯНА от"
 
-#: dir.c:927
+#: diff.c:4912
 #, c-format
-msgid "cannot use %s as an exclude file"
-msgstr "„%s“ не може да се ползва за игнорираните файлове (като gitignore)"
+msgid "%s expects a character, got '%s'"
+msgstr "опцията „%s“ изисква знак, а не: „%s“"
 
-#: dir.c:1842
+#: diff.c:4933
 #, c-format
-msgid "could not open directory '%s'"
-msgstr "диÑ\80екÑ\82оÑ\80иÑ\8fÑ\82а â\80\9e%sâ\80\9c Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð±Ñ\8aде Ð¾Ñ\82воÑ\80ена"
+msgid "bad --color-moved argument: %s"
+msgstr "непÑ\80авилен Ð°Ñ\80гÑ\83менÑ\82 Ð·Ð° â\80\9e--color-movedâ\80\9c: â\80\9e%sâ\80\9c"
 
-#: dir.c:2084
-msgid "failed to get kernel name and information"
-msgstr "името и версията на ядрото не бяха получени"
+#: diff.c:4952
+#, c-format
+msgid "invalid mode '%s' in --color-moved-ws"
+msgstr "неправилен режим „%s“ за „ --color-moved-ws“"
 
-#: dir.c:2208
-msgid "untracked cache is disabled on this system or location"
+#: diff.c:4992
+msgid ""
+"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
+"\"histogram\""
 msgstr ""
-"кешът за неследените файлове е изключен на тази система или местоположение"
+"опцията приема следните варианти за алгоритъм за разлики: „myers“ (по "
+"Майерс), „minimal“ (минимизиране на разликите), „patience“ (пасианс) и "
+"„histogram“ (хистограмен)"
 
-#: dir.c:3009
+#: diff.c:5028 diff.c:5048
 #, c-format
-msgid "index file corrupt in repo %s"
-msgstr "файлът с индекса е повреден в хранилището „%s“"
+msgid "invalid argument to %s"
+msgstr "неправилен аргумент към „%s“"
 
-#: dir.c:3054 dir.c:3059
+#: diff.c:5186
 #, c-format
-msgid "could not create directories for %s"
-msgstr "диÑ\80екÑ\82оÑ\80ииÑ\82е Ð·Ð° â\80\9e%sâ\80\9c Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð±Ñ\8aдаÑ\82 Ñ\81Ñ\8aздадени"
+msgid "failed to parse --submodule option parameter: '%s'"
+msgstr "неÑ\80азпознаÑ\82 Ð¿Ð°Ñ\80амеÑ\82Ñ\8aÑ\80 ÐºÑ\8aм Ð¾Ð¿Ñ\86иÑ\8fÑ\82а â\80\9e--submoduleâ\80\9c: â\80\9e%sâ\80\9c"
 
-#: dir.c:3088
+#: diff.c:5242
 #, c-format
-msgid "could not migrate git directory from '%s' to '%s'"
-msgstr "диÑ\80екÑ\82оÑ\80иÑ\8fÑ\82а Ð½Ð° git Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е Ð¼Ð¸Ð³Ñ\80иÑ\80а Ð¾Ñ\82 â\80\9e%sâ\80\9c Ð´Ð¾ „%s“"
+msgid "bad --word-diff argument: %s"
+msgstr "непÑ\80авилен Ð°Ñ\80гÑ\83менÑ\82 ÐºÑ\8aм â\80\9e--word-diffâ\80\9c: „%s“"
 
-#: editor.c:73
-#, c-format
-msgid "hint: Waiting for your editor to close the file...%c"
-msgstr "Подсказка: чака се редакторът ви да затвори файла …%c"
+#: diff.c:5265
+msgid "Diff output format options"
+msgstr "Формат на изхода за разликите"
 
-#: entry.c:178
-msgid "Filtering content"
-msgstr "Филтриране на съдържанието"
+#: diff.c:5267 diff.c:5273
+msgid "generate patch"
+msgstr "създаване на кръпки"
 
-#: entry.c:465
-#, c-format
-msgid "could not stat file '%s'"
-msgstr "неуспешно изпълнение на „stat“ върху файла „%s“"
+#: diff.c:5270 builtin/log.c:167
+msgid "suppress diff output"
+msgstr "без извеждане на разликите"
 
-#: environment.c:150
-#, c-format
-msgid "bad git namespace path \"%s\""
-msgstr "неправилен път към пространства от имена „%s“"
+#: diff.c:5275 diff.c:5389 diff.c:5396
+msgid "<n>"
+msgstr "БРОЙ"
 
-#: environment.c:332
-#, c-format
-msgid "could not set GIT_DIR to '%s'"
-msgstr "GIT_DIR не може да се зададе да е „%s“"
+#: diff.c:5276 diff.c:5279
+msgid "generate diffs with <n> lines context"
+msgstr "файловете с разлики да са с контекст с такъв БРОЙ редове"
 
-#: exec-cmd.c:361
-#, c-format
-msgid "too many args to run %s"
-msgstr "прекалено много аргументи за изпълнение „%s“"
+#: diff.c:5281
+msgid "generate the diff in raw format"
+msgstr "файловете с разлики да са в суров формат"
 
-#: fetch-object.c:17
-msgid "Remote with no URL"
-msgstr "Ð\9bипÑ\81ва Ð°Ð´Ñ\80еÑ\81 Ð·Ð° Ð¾Ñ\82далеÑ\87еноÑ\82о Ñ\85Ñ\80анилиÑ\89е"
+#: diff.c:5284
+msgid "synonym for '-p --raw'"
+msgstr "пÑ\81евдоним Ð½Ð° â\80\9e-p --statâ\80\9c"
 
-#: fetch-pack.c:151
-msgid "git fetch-pack: expected shallow list"
-msgstr "git fetch-pack: очаква се плитък списък"
+#: diff.c:5288
+msgid "synonym for '-p --stat'"
+msgstr "псевдоним на „-p --stat“"
 
-#: fetch-pack.c:154
-msgid "git fetch-pack: expected a flush packet after shallow list"
-msgstr "git fetch-pack: след плитък списък се очаква изчистващ пакет „flush“"
+#: diff.c:5292
+msgid "machine friendly --stat"
+msgstr "„--stat“ във формат за четене от програма"
 
-#: fetch-pack.c:165
-msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
-msgstr ""
-"git fetch-pack: очаква се „ACK“/„NAK“, а бе получен изчистващ пакет „flush“"
+#: diff.c:5295
+msgid "output only the last line of --stat"
+msgstr "извеждане само на последния ред на „--stat“"
 
-#: fetch-pack.c:185
-#, c-format
-msgid "git fetch-pack: expected ACK/NAK, got '%s'"
-msgstr "git fetch-pack: очаква се „ACK“/„NAK“, а бе получено „%s“"
+#: diff.c:5297 diff.c:5305
+msgid "<param1,param2>..."
+msgstr "ПАРАМЕТЪР_1, ПАРАМЕТЪР_2, …"
 
-#: fetch-pack.c:256
-msgid "--stateless-rpc requires multi_ack_detailed"
-msgstr "опцията „--stateless-rpc“ изисква  „multi_ack_detailed“"
+#: diff.c:5298
+msgid ""
+"output the distribution of relative amount of changes for each sub-directory"
+msgstr "извеждане на разпределението на промените за всяка поддиректория"
 
-#: fetch-pack.c:358 fetch-pack.c:1264
-#, c-format
-msgid "invalid shallow line: %s"
-msgstr "неправилен плитък ред: „%s“"
+#: diff.c:5302
+msgid "synonym for --dirstat=cumulative"
+msgstr "псевдоним на „--dirstat=cumulative“"
 
-#: fetch-pack.c:364 fetch-pack.c:1271
-#, c-format
-msgid "invalid unshallow line: %s"
-msgstr "неправилен неплитък ред: „%s“"
+#: diff.c:5306
+msgid "synonym for --dirstat=files,param1,param2..."
+msgstr "псевдоним на „--dirstat=ФАЙЛОВЕ,ПАРАМЕТЪР_1,ПАРАМЕТЪР_2,…“"
 
-#: fetch-pack.c:366 fetch-pack.c:1273
-#, c-format
-msgid "object not found: %s"
-msgstr "обектът „%s“ липсва"
+#: diff.c:5310
+msgid "warn if changes introduce conflict markers or whitespace errors"
+msgstr ""
+"предупреждаване, ако промените водят до маркери за конфликт или грешки в "
+"празните знаци"
 
-#: fetch-pack.c:369 fetch-pack.c:1276
-#, c-format
-msgid "error in object: %s"
-msgstr "грешка в обекта: „%s“"
+#: diff.c:5313
+msgid "condensed summary such as creations, renames and mode changes"
+msgstr ""
+"съкратено резюме на създадените, преименуваните и файловете с промяна на "
+"режима на достъп"
 
-#: fetch-pack.c:371 fetch-pack.c:1278
-#, c-format
-msgid "no shallow found: %s"
-msgstr "не е открит плитък обект: %s"
+#: diff.c:5316
+msgid "show only names of changed files"
+msgstr "извеждане само на имената на променените файлове"
 
-#: fetch-pack.c:374 fetch-pack.c:1282
-#, c-format
-msgid "expected shallow/unshallow, got %s"
-msgstr "очаква се плитък или не обект, а бе получено: „%s“"
+#: diff.c:5319
+msgid "show only names and status of changed files"
+msgstr "извеждане само на имената и статистиката за променените файлове"
 
-#: fetch-pack.c:415
-#, c-format
-msgid "got %s %d %s"
-msgstr "получено бе %s %d %s"
+#: diff.c:5321
+msgid "<width>[,<name-width>[,<count>]]"
+msgstr "ШИРОЧИНА[,ИМЕ-ШИРОЧИНА[,БРОЙ]]"
 
-#: fetch-pack.c:432
-#, c-format
-msgid "invalid commit %s"
-msgstr "неправилно подаване: „%s“"
+#: diff.c:5322
+msgid "generate diffstat"
+msgstr "извеждане на статистика за промените"
 
-#: fetch-pack.c:463
-msgid "giving up"
-msgstr "пÑ\80еÑ\83Ñ\81Ñ\82ановÑ\8fване"
+#: diff.c:5324 diff.c:5327 diff.c:5330
+msgid "<width>"
+msgstr "ШÐ\98РÐ\9eЧÐ\98Ð\9dÐ\90"
 
-#: fetch-pack.c:475 progress.c:229
-msgid "done"
-msgstr "действието завърши"
+#: diff.c:5325
+msgid "generate diffstat with a given width"
+msgstr "статистика с такава ШИРОЧИНА за промените"
 
-#: fetch-pack.c:487
-#, c-format
-msgid "got %s (%d) %s"
-msgstr "получено бе %s (%d) %s"
+#: diff.c:5328
+msgid "generate diffstat with a given name width"
+msgstr "статистика за промените с такава ШИРОЧИНА на имената"
 
-#: fetch-pack.c:533
-#, c-format
-msgid "Marking %s as complete"
-msgstr "Отбелязване на „%s“ като пълно"
+#: diff.c:5331
+msgid "generate diffstat with a given graph width"
+msgstr "статистика за промените с такава ШИРОЧИНА на гра̀фа"
 
-#: fetch-pack.c:740
-#, c-format
-msgid "already have %s (%s)"
-msgstr "вече има „%s“ (%s)"
+#: diff.c:5333
+msgid "<count>"
+msgstr "БРОЙ"
 
-#: fetch-pack.c:779
-msgid "fetch-pack: unable to fork off sideband demultiplexer"
-msgstr "fetch-pack: не може да се създаде процес за демултиплексора"
+#: diff.c:5334
+msgid "generate diffstat with limited lines"
+msgstr "ограничаване на БРОя на редовете в статистиката за промените"
 
-#: fetch-pack.c:787
-msgid "protocol error: bad pack header"
-msgstr "пÑ\80оÑ\82околна Ð³Ñ\80еÑ\88ка: Ð½ÐµÐ¿Ñ\80авилна Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð° Ñ\87аÑ\81Ñ\82 Ð½Ð° Ð¿Ð°ÐºÐµÑ\82"
+#: diff.c:5337
+msgid "generate compact summary in diffstat"
+msgstr "кÑ\80аÑ\82ко Ñ\80езÑ\8eме Ð² Ñ\81Ñ\82аÑ\82иÑ\81Ñ\82икаÑ\82а Ð·Ð° Ð¿Ñ\80омениÑ\82е"
 
-#: fetch-pack.c:855
-#, c-format
-msgid "fetch-pack: unable to fork off %s"
-msgstr "fetch-pack: не може да се създаде процес за „%s“"
+#: diff.c:5340
+msgid "output a binary diff that can be applied"
+msgstr "извеждане на двоична разлика във вид за прилагане"
 
-#: fetch-pack.c:871
-#, c-format
-msgid "%s failed"
-msgstr "неуспешно изпълнение на „%s“"
+#: diff.c:5343
+msgid "show full pre- and post-image object names on the \"index\" lines"
+msgstr ""
+"показване на пълните имена на обекти в редовете за индекса при вариантите "
+"преди и след промяната"
 
-#: fetch-pack.c:873
-msgid "error in sideband demultiplexer"
-msgstr "грешка в демултиплексора"
+#: diff.c:5345
+msgid "show colored diff"
+msgstr "разлики в цвят"
 
-#: fetch-pack.c:902
-msgid "Server does not support shallow clients"
-msgstr "СÑ\8aÑ\80вÑ\8aÑ\80Ñ\8aÑ\82 Ð½Ðµ Ð¿Ð¾Ð´Ð´Ñ\8aÑ\80жа Ð¿Ð»Ð¸Ñ\82ки ÐºÐ»Ð¸ÐµÐ½Ñ\82и"
+#: diff.c:5346
+msgid "<kind>"
+msgstr "Ð\92Ð\98Ð\94"
 
-#: fetch-pack.c:906
-msgid "Server supports multi_ack_detailed"
-msgstr "Сървърът поддържа „multi_ack_detailed“"
+#: diff.c:5347
+msgid ""
+"highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
+"diff"
+msgstr ""
+"грешките в празните знаци да се указват в редовете за контекста, вариантите "
+"преди и след разликата,"
 
-#: fetch-pack.c:909
-msgid "Server supports no-done"
-msgstr "Сървърът поддържа „no-done“"
+#: diff.c:5350
+msgid ""
+"do not munge pathnames and use NULs as output field terminators in --raw or "
+"--numstat"
+msgstr ""
+"без преименуване на пътищата.  Да се използват нулеви байтове за разделители "
+"на полета в изхода при ползване на опцията „--raw“ или „--numstat“"
 
-#: fetch-pack.c:915
-msgid "Server supports multi_ack"
-msgstr "СÑ\8aÑ\80вÑ\8aÑ\80Ñ\8aÑ\82 Ð¿Ð¾Ð´Ð´Ñ\8aÑ\80жа â\80\9emulti_ackâ\80\9c"
+#: diff.c:5353 diff.c:5356 diff.c:5359 diff.c:5465
+msgid "<prefix>"
+msgstr "Ð\9fРÐ\95ФÐ\98Ð\9aС"
 
-#: fetch-pack.c:919
-msgid "Server supports side-band-64k"
-msgstr "СÑ\8aÑ\80вÑ\8aÑ\80Ñ\8aÑ\82 Ð¿Ð¾Ð´Ð´Ñ\8aÑ\80жа â\80\9eside-band-64kâ\80\9c"
+#: diff.c:5354
+msgid "show the given source prefix instead of \"a/\""
+msgstr "пÑ\80еÑ\84икÑ\81 Ð²Ð¼ÐµÑ\81Ñ\82о â\80\9ea/â\80\9c Ð·Ð° Ð¸Ð·Ñ\82оÑ\87ник"
 
-#: fetch-pack.c:923
-msgid "Server supports side-band"
-msgstr "СÑ\8aÑ\80вÑ\8aÑ\80Ñ\8aÑ\82 Ð¿Ð¾Ð´Ð´Ñ\8aÑ\80жа â\80\9eside-bandâ\80\9c"
+#: diff.c:5357
+msgid "show the given destination prefix instead of \"b/\""
+msgstr "пÑ\80еÑ\84икÑ\81 Ð²Ð¼ÐµÑ\81Ñ\82о â\80\9eb/â\80\9c Ð·Ð° Ñ\86ел"
 
-#: fetch-pack.c:927
-msgid "Server supports allow-tip-sha1-in-want"
-msgstr "СÑ\8aÑ\80вÑ\8aÑ\80Ñ\8aÑ\82 Ð¿Ð¾Ð´Ð´Ñ\8aÑ\80жа â\80\9eallow-tip-sha1-in-wantâ\80\9c"
+#: diff.c:5360
+msgid "prepend an additional prefix to every line of output"
+msgstr "добавÑ\8fне Ð½Ð° Ð´Ð¾Ð¿Ñ\8aлниÑ\82елен Ð¿Ñ\80еÑ\84икÑ\81 Ð·Ð° Ð²Ñ\81еки Ñ\80ед Ð½Ð° Ð¸Ð·Ñ\85ода"
 
-#: fetch-pack.c:931
-msgid "Server supports allow-reachable-sha1-in-want"
-msgstr "СÑ\8aÑ\80вÑ\8aÑ\80Ñ\8aÑ\82 Ð¿Ð¾Ð´Ð´Ñ\8aÑ\80жа â\80\9eallow-reachable-sha1-in-wantâ\80\9c"
+#: diff.c:5363
+msgid "do not show any source or destination prefix"
+msgstr "без Ð¿Ñ\80еÑ\84икÑ\81 Ð·Ð° Ð¸Ð·Ñ\82оÑ\87ника Ð¸ Ñ\86елÑ\82а"
 
-#: fetch-pack.c:941
+#: diff.c:5366
+msgid "show context between diff hunks up to the specified number of lines"
+msgstr ""
+"извеждане на контекст между последователните парчета с разлики от указания "
+"БРОЙ редове"
+
+#: diff.c:5370 diff.c:5375 diff.c:5380
+msgid "<char>"
+msgstr "ЗНАК"
+
+#: diff.c:5371
+msgid "specify the character to indicate a new line instead of '+'"
+msgstr "знак вместо „+“ за нов вариант на ред"
+
+#: diff.c:5376
+msgid "specify the character to indicate an old line instead of '-'"
+msgstr "знак вместо „-“ за стар вариант на ред"
+
+#: diff.c:5381
+msgid "specify the character to indicate a context instead of ' '"
+msgstr "знак вместо „ “ за контекст"
+
+#: diff.c:5384
+msgid "Diff rename options"
+msgstr "Настройки за разлики с преименуване"
+
+#: diff.c:5385
+msgid "<n>[/<m>]"
+msgstr "МИНИМАЛЕН_%_ПРОМЯНА_ЗА_ИЗТОЧНИК[/МАКСИМАЛEН_%_ПРОМЯНА_ЗА_ЗАМЯНА]"
+
+#: diff.c:5386
+msgid "break complete rewrite changes into pairs of delete and create"
+msgstr ""
+"заместване на пълните промени с последователност от изтриване и създаване"
+
+#: diff.c:5390
+msgid "detect renames"
+msgstr "засичане на преименуванията"
+
+#: diff.c:5394
+msgid "omit the preimage for deletes"
+msgstr "без предварителен вариант при изтриване"
+
+#: diff.c:5397
+msgid "detect copies"
+msgstr "засичане на копиранията"
+
+#: diff.c:5401
+msgid "use unmodified files as source to find copies"
+msgstr "търсене на копирано и от непроменените файлове"
+
+#: diff.c:5403
+msgid "disable rename detection"
+msgstr "без търсене на преименувания"
+
+#: diff.c:5406
+msgid "use empty blobs as rename source"
+msgstr "празни обекти като източник при преименувания"
+
+#: diff.c:5408
+msgid "continue listing the history of a file beyond renames"
+msgstr ""
+"продължаване на извеждането на историята — без отрязването при преименувания "
+"на файл"
+
+#: diff.c:5411
+msgid ""
+"prevent rename/copy detection if the number of rename/copy targets exceeds "
+"given limit"
+msgstr ""
+"без засичане на преименувания/копирания, ако броят им надвишава тази стойност"
+
+#: diff.c:5413
+msgid "Diff algorithm options"
+msgstr "Опции към алгоритъма за разлики"
+
+#: diff.c:5415
+msgid "produce the smallest possible diff"
+msgstr "търсене на възможно най-малка разлика"
+
+#: diff.c:5418
+msgid "ignore whitespace when comparing lines"
+msgstr "без промени в празните знаци при сравняване на редове"
+
+#: diff.c:5421
+msgid "ignore changes in amount of whitespace"
+msgstr "без промени в празните знаци"
+
+#: diff.c:5424
+msgid "ignore changes in whitespace at EOL"
+msgstr "без промени в празните знаци в края на редовете"
+
+#: diff.c:5427
+msgid "ignore carrier-return at the end of line"
+msgstr "без промени в знаците за край на ред"
+
+#: diff.c:5430
+msgid "ignore changes whose lines are all blank"
+msgstr "без промени в редовете, които са изцяло от празни знаци"
+
+#: diff.c:5433
+msgid "heuristic to shift diff hunk boundaries for easy reading"
+msgstr ""
+"евристика за преместване на границите на парчетата за улесняване на четенето"
+
+#: diff.c:5436
+msgid "generate diff using the \"patience diff\" algorithm"
+msgstr "разлика чрез алгоритъм за подредба като пасианс"
+
+#: diff.c:5440
+msgid "generate diff using the \"histogram diff\" algorithm"
+msgstr "разлика по хистограмния алгоритъм"
+
+#: diff.c:5442
+msgid "<algorithm>"
+msgstr "АЛГОРИТЪМ"
+
+#: diff.c:5443
+msgid "choose a diff algorithm"
+msgstr "избор на АЛГОРИТЪМа за разлики"
+
+#: diff.c:5445
+msgid "<text>"
+msgstr "ТЕКСТ"
+
+#: diff.c:5446
+msgid "generate diff using the \"anchored diff\" algorithm"
+msgstr "разлика чрез алгоритъма със закотвяне"
+
+#: diff.c:5448 diff.c:5457 diff.c:5460
+msgid "<mode>"
+msgstr "РЕЖИМ"
+
+#: diff.c:5449
+msgid "show word diff, using <mode> to delimit changed words"
+msgstr ""
+"разлика по думи, като се ползва този РЕЖИМ за отделянето на променените думи"
+
+#: diff.c:5451 diff.c:5454 diff.c:5499
+msgid "<regex>"
+msgstr "РЕГУЛЯРЕН_ИЗРАЗ"
+
+#: diff.c:5452
+msgid "use <regex> to decide what a word is"
+msgstr "РЕГУЛЯРЕН_ИЗРАЗ за разделяне по думи"
+
+#: diff.c:5455
+msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
+msgstr "псевдоним на „--word-diff=color --word-diff-regex=РЕГУЛЯРЕН_ИЗРАЗ“"
+
+#: diff.c:5458
+msgid "moved lines of code are colored differently"
+msgstr "различен цвят за извеждане на преместените редове"
+
+#: diff.c:5461
+msgid "how white spaces are ignored in --color-moved"
+msgstr ""
+"режим за прескачането на празните знаци при задаването на „--color-moved“"
+
+#: diff.c:5464
+msgid "Other diff options"
+msgstr "Други опции за разлики"
+
+#: diff.c:5466
+msgid "when run from subdir, exclude changes outside and show relative paths"
+msgstr ""
+"при изпълнение от поддиректория да се пренебрегват разликите извън нея и да "
+"се ползват относителни пътища"
+
+#: diff.c:5470
+msgid "treat all files as text"
+msgstr "обработка на всички файлове като текстови"
+
+#: diff.c:5472
+msgid "swap two inputs, reverse the diff"
+msgstr "размяна на двата входа — обръщане на разликата"
+
+#: diff.c:5474
+msgid "exit with 1 if there were differences, 0 otherwise"
+msgstr ""
+"завършване с код за състояние 1 при наличието на разлики, а в противен "
+"случай — с 0"
+
+#: diff.c:5476
+msgid "disable all output of the program"
+msgstr "без всякакъв изход от програмата"
+
+#: diff.c:5478
+msgid "allow an external diff helper to be executed"
+msgstr "позволяване на изпълнение на външна помощна програма за разлики"
+
+#: diff.c:5480
+msgid "run external text conversion filters when comparing binary files"
+msgstr ""
+"изпълнение на външни програми-филтри при сравнението на двоични файлове"
+
+#: diff.c:5482
+msgid "<when>"
+msgstr "КОГА"
+
+#: diff.c:5483
+msgid "ignore changes to submodules in the diff generation"
+msgstr "игнориране на промените в подмодулите при извеждането на разликите"
+
+#: diff.c:5486
+msgid "<format>"
+msgstr "ФОРМАТ"
+
+#: diff.c:5487
+msgid "specify how differences in submodules are shown"
+msgstr "начин за извеждане на промените в подмодулите"
+
+#: diff.c:5491
+msgid "hide 'git add -N' entries from the index"
+msgstr "без включване в индекса на записите, добавени с „git add -N“"
+
+#: diff.c:5494
+msgid "treat 'git add -N' entries as real in the index"
+msgstr "включване в индекса на записите, добавени с „git add -N“"
+
+#: diff.c:5496
+msgid "<string>"
+msgstr "НИЗ"
+
+#: diff.c:5497
+msgid ""
+"look for differences that change the number of occurrences of the specified "
+"string"
+msgstr "търсене на разлики, които променят броя на поява на указаните низове"
+
+#: diff.c:5500
+msgid ""
+"look for differences that change the number of occurrences of the specified "
+"regex"
+msgstr ""
+"търсене на разлики, които променят броя на поява на низовете, които напасват "
+"на регулярния израз"
+
+#: diff.c:5503
+msgid "show all changes in the changeset with -S or -G"
+msgstr "извеждане на всички промени с „-G“/„-S“"
+
+#: diff.c:5506
+msgid "treat <string> in -S as extended POSIX regular expression"
+msgstr "НИЗът към „-S“ да се тълкува като разширен регулярен израз по POSIX"
+
+#: diff.c:5509
+msgid "control the order in which files appear in the output"
+msgstr "управление на подредбата на файловете в изхода"
+
+#: diff.c:5510
+msgid "<object-id>"
+msgstr "ИДЕНТИФИКАТОР_НА_ОБЕКТ"
+
+#: diff.c:5511
+msgid ""
+"look for differences that change the number of occurrences of the specified "
+"object"
+msgstr "търсене на разлики, които променят броя на поява на указания обект"
+
+#: diff.c:5513
+msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
+msgstr "[(A|C|D|M|R|T|U|X|B)…[*]]"
+
+#: diff.c:5514
+msgid "select files by diff type"
+msgstr "избор на файловете по вид разлика"
+
+#: diff.c:5516
+msgid "<file>"
+msgstr "ФАЙЛ"
+
+#: diff.c:5517
+msgid "Output to a specific file"
+msgstr "Изход към указания файл"
+
+#: diff.c:6150
+msgid "inexact rename detection was skipped due to too many files."
+msgstr ""
+"търсенето на преименувания на обекти съчетани с промени се прескача поради "
+"многото файлове."
+
+#: diff.c:6153
+msgid "only found copies from modified paths due to too many files."
+msgstr ""
+"установени са само точните копия на променените пътища поради многото "
+"файлове."
+
+#: diff.c:6156
+#, c-format
+msgid ""
+"you may want to set your %s variable to at least %d and retry the command."
+msgstr "задайте променливата „%s“ да е поне %d и отново изпълнете командата."
+
+#: dir.c:537
+#, c-format
+msgid "pathspec '%s' did not match any file(s) known to git"
+msgstr "пътят „%s“ не съвпада с никой файл в git"
+
+#: dir.c:926
+#, c-format
+msgid "cannot use %s as an exclude file"
+msgstr "„%s“ не може да се ползва за игнорираните файлове (като gitignore)"
+
+#: dir.c:1843
+#, c-format
+msgid "could not open directory '%s'"
+msgstr "директорията „%s“ не може да бъде отворена"
+
+#: dir.c:2085
+msgid "failed to get kernel name and information"
+msgstr "името и версията на ядрото не бяха получени"
+
+#: dir.c:2209
+msgid "untracked cache is disabled on this system or location"
+msgstr ""
+"кешът за неследените файлове е изключен на тази система или местоположение"
+
+#: dir.c:3013
+#, c-format
+msgid "index file corrupt in repo %s"
+msgstr "файлът с индекса е повреден в хранилището „%s“"
+
+#: dir.c:3058 dir.c:3063
+#, c-format
+msgid "could not create directories for %s"
+msgstr "директориите за „%s“ не може да бъдат създадени"
+
+#: dir.c:3092
+#, c-format
+msgid "could not migrate git directory from '%s' to '%s'"
+msgstr "директорията на git не може да се мигрира от „%s“ до „%s“"
+
+#: editor.c:73
+#, c-format
+msgid "hint: Waiting for your editor to close the file...%c"
+msgstr "Подсказка: чака се редакторът ви да затвори файла …%c"
+
+#: entry.c:178
+msgid "Filtering content"
+msgstr "Филтриране на съдържанието"
+
+#: entry.c:476
+#, c-format
+msgid "could not stat file '%s'"
+msgstr "неуспешно изпълнение на „stat“ върху файла „%s“"
+
+#: environment.c:150
+#, c-format
+msgid "bad git namespace path \"%s\""
+msgstr "неправилен път към пространства от имена „%s“"
+
+#: environment.c:332
+#, c-format
+msgid "could not set GIT_DIR to '%s'"
+msgstr "GIT_DIR не може да се зададе да е „%s“"
+
+#: exec-cmd.c:363
+#, c-format
+msgid "too many args to run %s"
+msgstr "прекалено много аргументи за изпълнение „%s“"
+
+#: fetch-object.c:17
+msgid "Remote with no URL"
+msgstr "Липсва адрес за отдалеченото хранилище"
+
+#: fetch-pack.c:151
+msgid "git fetch-pack: expected shallow list"
+msgstr "git fetch-pack: очаква се плитък списък"
+
+#: fetch-pack.c:154
+msgid "git fetch-pack: expected a flush packet after shallow list"
+msgstr "git fetch-pack: след плитък списък се очаква изчистващ пакет „flush“"
+
+#: fetch-pack.c:165
+msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
+msgstr ""
+"git fetch-pack: очаква се „ACK“/„NAK“, а бе получен изчистващ пакет „flush“"
+
+#: fetch-pack.c:185
+#, c-format
+msgid "git fetch-pack: expected ACK/NAK, got '%s'"
+msgstr "git fetch-pack: очаква се „ACK“/„NAK“, а бе получено „%s“"
+
+#: fetch-pack.c:196
+msgid "unable to write to remote"
+msgstr "невъзможно писане към отдалечено хранилище"
+
+#: fetch-pack.c:258
+msgid "--stateless-rpc requires multi_ack_detailed"
+msgstr "опцията „--stateless-rpc“ изисква  „multi_ack_detailed“"
+
+#: fetch-pack.c:360 fetch-pack.c:1271
+#, c-format
+msgid "invalid shallow line: %s"
+msgstr "неправилен плитък ред: „%s“"
+
+#: fetch-pack.c:366 fetch-pack.c:1277
+#, c-format
+msgid "invalid unshallow line: %s"
+msgstr "неправилен неплитък ред: „%s“"
+
+#: fetch-pack.c:368 fetch-pack.c:1279
+#, c-format
+msgid "object not found: %s"
+msgstr "обектът „%s“ липсва"
+
+#: fetch-pack.c:371 fetch-pack.c:1282
+#, c-format
+msgid "error in object: %s"
+msgstr "грешка в обекта: „%s“"
+
+#: fetch-pack.c:373 fetch-pack.c:1284
+#, c-format
+msgid "no shallow found: %s"
+msgstr "не е открит плитък обект: %s"
+
+#: fetch-pack.c:376 fetch-pack.c:1288
+#, c-format
+msgid "expected shallow/unshallow, got %s"
+msgstr "очаква се плитък или не обект, а бе получено: „%s“"
+
+#: fetch-pack.c:417
+#, c-format
+msgid "got %s %d %s"
+msgstr "получено бе %s %d %s"
+
+#: fetch-pack.c:434
+#, c-format
+msgid "invalid commit %s"
+msgstr "неправилно подаване: „%s“"
+
+#: fetch-pack.c:465
+msgid "giving up"
+msgstr "преустановяване"
+
+#: fetch-pack.c:477 progress.c:284
+msgid "done"
+msgstr "действието завърши"
+
+#: fetch-pack.c:489
+#, c-format
+msgid "got %s (%d) %s"
+msgstr "получено бе %s (%d) %s"
+
+#: fetch-pack.c:535
+#, c-format
+msgid "Marking %s as complete"
+msgstr "Отбелязване на „%s“ като пълно"
+
+#: fetch-pack.c:744
+#, c-format
+msgid "already have %s (%s)"
+msgstr "вече има „%s“ (%s)"
+
+#: fetch-pack.c:783
+msgid "fetch-pack: unable to fork off sideband demultiplexer"
+msgstr "fetch-pack: не може да се създаде процес за демултиплексора"
+
+#: fetch-pack.c:791
+msgid "protocol error: bad pack header"
+msgstr "протоколна грешка: неправилна заглавна част на пакет"
+
+#: fetch-pack.c:859
+#, c-format
+msgid "fetch-pack: unable to fork off %s"
+msgstr "fetch-pack: не може да се създаде процес за „%s“"
+
+#: fetch-pack.c:875
+#, c-format
+msgid "%s failed"
+msgstr "неуспешно изпълнение на „%s“"
+
+#: fetch-pack.c:877
+msgid "error in sideband demultiplexer"
+msgstr "грешка в демултиплексора"
+
+#: fetch-pack.c:906
+msgid "Server does not support shallow clients"
+msgstr "Сървърът не поддържа плитки клиенти"
+
+#: fetch-pack.c:910
+msgid "Server supports multi_ack_detailed"
+msgstr "Сървърът поддържа „multi_ack_detailed“"
+
+#: fetch-pack.c:913
+msgid "Server supports no-done"
+msgstr "Сървърът поддържа „no-done“"
+
+#: fetch-pack.c:919
+msgid "Server supports multi_ack"
+msgstr "Сървърът поддържа „multi_ack“"
+
+#: fetch-pack.c:923
+msgid "Server supports side-band-64k"
+msgstr "Сървърът поддържа „side-band-64k“"
+
+#: fetch-pack.c:927
+msgid "Server supports side-band"
+msgstr "Сървърът поддържа „side-band“"
+
+#: fetch-pack.c:931
+msgid "Server supports allow-tip-sha1-in-want"
+msgstr "Сървърът поддържа „allow-tip-sha1-in-want“"
+
+#: fetch-pack.c:935
+msgid "Server supports allow-reachable-sha1-in-want"
+msgstr "Сървърът поддържа „allow-reachable-sha1-in-want“"
+
+#: fetch-pack.c:945
 msgid "Server supports ofs-delta"
 msgstr "Сървърът поддържа „ofs-delta“"
 
-#: fetch-pack.c:947 fetch-pack.c:1140
+#: fetch-pack.c:951 fetch-pack.c:1144
 msgid "Server supports filter"
 msgstr "Сървърът поддържа филтри"
 
-#: fetch-pack.c:955
+#: fetch-pack.c:959
 #, c-format
 msgid "Server version is %.*s"
 msgstr "Версията на сървъра е: %.*s"
 
-#: fetch-pack.c:961
+#: fetch-pack.c:965
 msgid "Server does not support --shallow-since"
 msgstr "Сървърът не поддържа опцията „--shallow-since“"
 
-#: fetch-pack.c:965
+#: fetch-pack.c:969
 msgid "Server does not support --shallow-exclude"
 msgstr "Сървърът не поддържа опцията „--shallow-exclude“"
 
-#: fetch-pack.c:967
+#: fetch-pack.c:971
 msgid "Server does not support --deepen"
 msgstr "Сървърът не поддържа опцията „--deepen“"
 
-#: fetch-pack.c:984
+#: fetch-pack.c:988
 msgid "no common commits"
 msgstr "няма общи подавания"
 
-#: fetch-pack.c:996 fetch-pack.c:1419
+#: fetch-pack.c:1000 fetch-pack.c:1449
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: неуспешно доставяне."
 
-#: fetch-pack.c:1134
+#: fetch-pack.c:1138
 msgid "Server does not support shallow requests"
 msgstr "Сървърът не поддържа плитки заявки"
 
-#: fetch-pack.c:1184
+#: fetch-pack.c:1171
+msgid "unable to write request to remote"
+msgstr "невъзможно писане към отдалечено хранилище"
+
+#: fetch-pack.c:1189
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "грешка при прочитане на заглавната част на раздел „%s“"
 
-#: fetch-pack.c:1190
+#: fetch-pack.c:1195
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "очаква се „%s“, а бе получено „%s“"
 
-#: fetch-pack.c:1229
+#: fetch-pack.c:1234
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "неочакван ред за потвърждение: „%s“"
 
-#: fetch-pack.c:1234
+#: fetch-pack.c:1239
 #, c-format
 msgid "error processing acks: %d"
 msgstr "грешка при обработка на потвържденията: %d"
 
-#: fetch-pack.c:1244
+#: fetch-pack.c:1249
 msgid "expected packfile to be sent after 'ready'"
 msgstr ""
 "очакваше се пакетният файл да бъде изпратен след отговор за готовност (ready)"
 
-#: fetch-pack.c:1246
+#: fetch-pack.c:1251
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr ""
 "очакваше се след липса на отговор за готовност (ready) да не се се пращат "
 "други раздели"
 
-#: fetch-pack.c:1287
+#: fetch-pack.c:1293
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "грешка при обработка на информация за дълбочината/плиткостта: %d"
 
-#: fetch-pack.c:1308
+#: fetch-pack.c:1340
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "очаква се искан указател, а бе получено: „%s“"
 
-#: fetch-pack.c:1318
+#: fetch-pack.c:1345
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "неочакван искан указател: „%s“"
 
-#: fetch-pack.c:1322
+#: fetch-pack.c:1350
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "грешка при обработката на исканите указатели: %d"
 
-#: fetch-pack.c:1646
+#: fetch-pack.c:1676
 msgid "no matching remote head"
 msgstr "не може да бъде открит подходящ връх от отдалеченото хранилище"
 
-#: fetch-pack.c:1664 builtin/clone.c:671
+#: fetch-pack.c:1699 builtin/clone.c:673
 msgid "remote did not send all necessary objects"
 msgstr "отдалеченото хранилище не изпрати всички необходими обекти."
 
-#: fetch-pack.c:1690
+#: fetch-pack.c:1726
 #, c-format
 msgid "no such remote ref %s"
 msgstr "такъв отдалечен указател няма: %s"
 
-#: fetch-pack.c:1693
+#: fetch-pack.c:1729
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "Сървърът не позволява заявка за необявен „%s“"
@@ -2945,28 +3552,28 @@ msgstr "команди на git от други директории от „$PA
 msgid "These are common Git commands used in various situations:"
 msgstr "Това са най-често използваните команди на Git:"
 
-#: help.c:363 git.c:90
+#: help.c:363 git.c:97
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "неподдържан списък от команди „%s“"
 
-#: help.c:410
+#: help.c:403
 msgid "The common Git guides are:"
 msgstr "Популярните въведения в Git са:"
 
-#: help.c:519
+#: help.c:512
 msgid "See 'git help <command>' to read about a specific subcommand"
 msgstr "За повече информация за КОМАНДА изпълнете „git help КОМАНДА“"
 
-#: help.c:524
+#: help.c:517
 msgid "External commands"
 msgstr "Външни команди"
 
-#: help.c:539
+#: help.c:532
 msgid "Command aliases"
 msgstr "Псевдоними на командите"
 
-#: help.c:603
+#: help.c:596
 #, c-format
 msgid ""
 "'%s' appears to be a git command, but we were not\n"
@@ -2975,36 +3582,36 @@ msgstr ""
 "Изглежда, че „%s“ е команда на git, но тя не може да\n"
 "бъде изпълнена.  Вероятно пакетът „git-%s“ е повреден."
 
-#: help.c:662
+#: help.c:655
 msgid "Uh oh. Your system reports no Git commands at all."
 msgstr "Странно, изглежда, че на системата ви няма нито една команда на git."
 
-#: help.c:684
+#: help.c:677
 #, c-format
 msgid "WARNING: You called a Git command named '%s', which does not exist."
 msgstr ""
 "ПРЕДУПРЕЖДЕНИЕ: Пробвахте да изпълните команда на Git на име „%s“, а такава "
 "не съществува."
 
-#: help.c:689
+#: help.c:682
 #, c-format
 msgid "Continuing under the assumption that you meant '%s'."
 msgstr ""
 "Изпълнението автоматично продължава, като се счита, че имате предвид „%s“."
 
-#: help.c:694
+#: help.c:687
 #, c-format
 msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
 msgstr ""
 "Изпълнението автоматично ще продължи след %0.1f сек., като се счита, че "
 "имате предвид „%s“."
 
-#: help.c:702
+#: help.c:695
 #, c-format
 msgid "git: '%s' is not a git command. See 'git --help'."
 msgstr "git: „%s“ не е команда на git.  Погледнете изхода от „git --help“."
 
-#: help.c:706
+#: help.c:699
 msgid ""
 "\n"
 "The most similar command is"
@@ -3018,16 +3625,16 @@ msgstr[1] ""
 "\n"
 "Най-близките команди са"
 
-#: help.c:721
+#: help.c:714
 msgid "git version [<options>]"
 msgstr "git version [ОПЦИЯ…]"
 
-#: help.c:789
+#: help.c:782
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s: %s — %s"
 
-#: help.c:793
+#: help.c:786
 msgid ""
 "\n"
 "Did you mean this?"
@@ -3041,7 +3648,7 @@ msgstr[1] ""
 "\n"
 "Команди с подобно име са:"
 
-#: ident.c:345
+#: ident.c:349
 msgid ""
 "\n"
 "*** Please tell me who you are.\n"
@@ -3068,40 +3675,55 @@ msgstr ""
 "хранилище.\n"
 "\n"
 
-#: ident.c:369
+#: ident.c:379
 msgid "no email was given and auto-detection is disabled"
 msgstr "липсва адрес за е-поща, а автоматичното отгатване е изключено"
 
-#: ident.c:374
+#: ident.c:384
 #, c-format
 msgid "unable to auto-detect email address (got '%s')"
 msgstr ""
 "адресът за е-поща не може да бъде отгатнат (най-доброто предположение бе "
 "„%s“)"
 
-#: ident.c:384
+#: ident.c:401
 msgid "no name was given and auto-detection is disabled"
 msgstr "липсва име, а автоматичното отгатване е изключено"
 
-#: ident.c:390
+#: ident.c:407
 #, c-format
 msgid "unable to auto-detect name (got '%s')"
 msgstr "името не може да бъде отгатнато (най-доброто предположение бе „%s“)"
 
-#: ident.c:398
+#: ident.c:415
 #, c-format
 msgid "empty ident name (for <%s>) not allowed"
 msgstr "не може да се ползва празно име като идентификатор (за <%s>)"
 
-#: ident.c:404
+#: ident.c:421
 #, c-format
 msgid "name consists only of disallowed characters: %s"
 msgstr "името съдържа само непозволени знаци: „%s“"
 
-#: ident.c:419 builtin/commit.c:608
+#: ident.c:436 builtin/commit.c:608
+#, c-format
+msgid "invalid date format: %s"
+msgstr "неправилен формат на дата: %s"
+
+#: list-objects.c:129
+#, c-format
+msgid "entry '%s' in tree %s has tree mode, but is not a tree"
+msgstr "обект „%s“ в дървото „%s“ е отбелязан като дърво, но не е"
+
+#: list-objects.c:142
+#, c-format
+msgid "entry '%s' in tree %s has blob mode, but is not a blob"
+msgstr "обект „%s“ в дървото „%s“ е отбелязан като BLOB, но не е"
+
+#: list-objects.c:378
 #, c-format
-msgid "invalid date format: %s"
-msgstr "непÑ\80авилен Ñ\84оÑ\80маÑ\82 Ð½Ð° Ð´Ð°Ñ\82а: %s"
+msgid "unable to load root tree for commit %s"
+msgstr "коÑ\80еновоÑ\82о Ð´Ñ\8aÑ\80во Ð·Ð° Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ðµ â\80\9e%sâ\80\9c Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е Ð·Ð°Ñ\80еди"
 
 #: list-objects-filter-options.c:36
 msgid "multiple filter-specs cannot be combined"
@@ -3111,7 +3733,11 @@ msgstr "не може да комбинирате множество филтр
 msgid "expected 'tree:<depth>'"
 msgstr "очаква се „tree:ДЪЛБОЧИНА“"
 
-#: list-objects-filter-options.c:152
+#: list-objects-filter-options.c:84
+msgid "sparse:path filters support has been dropped"
+msgstr "поддръжката на филтри със „sparse:path“ е премахната"
+
+#: list-objects-filter-options.c:158
 msgid "cannot change partial clone promisor remote"
 msgstr "не може да промените хранилището-гарант на непълно хранилище"
 
@@ -3143,125 +3769,126 @@ msgstr "Файлът-ключалка „%s.lock“ не може да бъде
 msgid "failed to read the cache"
 msgstr "кешът не може да бъде прочетен"
 
-#: merge.c:107 rerere.c:720 builtin/am.c:1884 builtin/am.c:1918
-#: builtin/checkout.c:416 builtin/checkout.c:745 builtin/clone.c:771
+#: merge.c:107 rerere.c:720 builtin/am.c:1887 builtin/am.c:1921
+#: builtin/checkout.c:461 builtin/checkout.c:811 builtin/clone.c:773
+#: builtin/stash.c:264
 msgid "unable to write new index file"
 msgstr "неуспешно записване на новия индекс"
 
-#: merge-recursive.c:332
+#: merge-recursive.c:322
 msgid "(bad commit)\n"
 msgstr "(лошо подаване)\n"
 
-#: merge-recursive.c:355
+#: merge-recursive.c:345
 #, c-format
 msgid "add_cacheinfo failed for path '%s'; merge aborting."
 msgstr ""
 "неуспешно изпълнение на „add_cacheinfo“ за пътя „%s“.  Сливането е "
 "преустановено."
 
-#: merge-recursive.c:364
+#: merge-recursive.c:354
 #, c-format
 msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
 msgstr ""
 "неуспешно изпълнение на „add_cacheinfo“ за обновяването на пътя „%s“.  "
 "Сливането е преустановено."
 
-#: merge-recursive.c:447
+#: merge-recursive.c:437
 msgid "error building trees"
 msgstr "грешка при изграждане на дърветата"
 
-#: merge-recursive.c:902
+#: merge-recursive.c:861
 #, c-format
 msgid "failed to create path '%s'%s"
 msgstr "грешка при създаването на пътя „%s“%s"
 
-#: merge-recursive.c:913
+#: merge-recursive.c:872
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
 msgstr "Изтриване на „%s“, за да се освободи място за поддиректория\n"
 
-#: merge-recursive.c:927 merge-recursive.c:946
+#: merge-recursive.c:886 merge-recursive.c:905
 msgid ": perhaps a D/F conflict?"
 msgstr ": възможно е да има конфликт директория/файл."
 
-#: merge-recursive.c:936
+#: merge-recursive.c:895
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
 msgstr ""
 "преустановяване на действието, за да не се изтрие неследеният файл „%s“"
 
-#: merge-recursive.c:978 builtin/cat-file.c:40
+#: merge-recursive.c:936 builtin/cat-file.c:40
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "обектът „%s“ (%s) не може да бъде прочетен"
 
-#: merge-recursive.c:980
+#: merge-recursive.c:939
 #, c-format
 msgid "blob expected for %s '%s'"
 msgstr "обектът „%s“ (%s) се очакваше да е BLOB, а не е"
 
-#: merge-recursive.c:1004
+#: merge-recursive.c:963
 #, c-format
 msgid "failed to open '%s': %s"
 msgstr "„%s“ не може да се отвори: %s"
 
-#: merge-recursive.c:1015
+#: merge-recursive.c:974
 #, c-format
 msgid "failed to symlink '%s': %s"
 msgstr "неуспешно създаване на символната връзка „%s“: %s"
 
-#: merge-recursive.c:1020
+#: merge-recursive.c:979
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
 msgstr ""
 "не е ясно какво да се прави с обекта „%2$s“ (%3$s) с права за достъп „%1$06o“"
 
-#: merge-recursive.c:1211
+#: merge-recursive.c:1175
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "Неуспешно сливане на подмодула „%s“ (не е изтеглен)"
 
-#: merge-recursive.c:1218
+#: merge-recursive.c:1182
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "Неуспешно сливане на подмодула „%s“ (няма подавания)"
 
-#: merge-recursive.c:1225
+#: merge-recursive.c:1189
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr ""
 "Подмодулът „%s“ не може да бъде слят (базата за сливане не предшества "
 "подаванията)"
 
-#: merge-recursive.c:1233 merge-recursive.c:1245
+#: merge-recursive.c:1197 merge-recursive.c:1209
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "Превъртане на подмодула „%s“ до следното подаване:"
 
-#: merge-recursive.c:1236 merge-recursive.c:1248
+#: merge-recursive.c:1200 merge-recursive.c:1212
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "Превъртане на подмодула „%s“"
 
-#: merge-recursive.c:1271
+#: merge-recursive.c:1235
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 "Неуспешно сливане на подмодула „%s“ (липсва сливането, което се предшества "
 "от подаванията)"
 
-#: merge-recursive.c:1275
+#: merge-recursive.c:1239
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "Неуспешно сливане на подмодула „%s“ (не е превъртане)"
 
-#: merge-recursive.c:1276
+#: merge-recursive.c:1240
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr ""
 "Открито е сливане, което може да решава проблема със сливането на "
 "подмодула:\n"
 
-#: merge-recursive.c:1279
+#: merge-recursive.c:1243
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -3277,31 +3904,31 @@ msgstr ""
 "\n"
 "Това приема предложеното.\n"
 
-#: merge-recursive.c:1288
+#: merge-recursive.c:1252
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr "Неуспешно сливане на подмодула „%s“ (открити са множество сливания)"
 
-#: merge-recursive.c:1361
+#: merge-recursive.c:1325
 msgid "Failed to execute internal merge"
 msgstr "Неуспешно вътрешно сливане"
 
-#: merge-recursive.c:1366
+#: merge-recursive.c:1330
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "„%s“ не може да се добави в базата с данни"
 
-#: merge-recursive.c:1398
+#: merge-recursive.c:1362
 #, c-format
 msgid "Auto-merging %s"
 msgstr "Автоматично сливане на „%s“"
 
-#: merge-recursive.c:1419
+#: merge-recursive.c:1385
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr "Грешка: за да не се изтрие неследеният файл „%s“, се записва в „%s“."
 
-#: merge-recursive.c:1486
+#: merge-recursive.c:1457
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -3310,7 +3937,7 @@ msgstr ""
 "КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ в %s.  Версия %s на „%s“ "
 "е оставена в дървото."
 
-#: merge-recursive.c:1491
+#: merge-recursive.c:1462
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -3319,7 +3946,7 @@ msgstr ""
 "КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ е преименуван на „%s“ в "
 "%s.  Версия %s на „%s“ е оставена в дървото."
 
-#: merge-recursive.c:1498
+#: merge-recursive.c:1469
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -3328,7 +3955,7 @@ msgstr ""
 "КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ в %s.  Версия %s на „%s“ "
 "е оставена в дървото: %s."
 
-#: merge-recursive.c:1503
+#: merge-recursive.c:1474
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -3337,45 +3964,45 @@ msgstr ""
 "КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ е преименуван на „%s“ в "
 "%s.  Версия %s на „%s“ е оставена в дървото: %s."
 
-#: merge-recursive.c:1537
+#: merge-recursive.c:1509
 msgid "rename"
 msgstr "преименуване"
 
-#: merge-recursive.c:1537
+#: merge-recursive.c:1509
 msgid "renamed"
 msgstr "преименуван"
 
-#: merge-recursive.c:1633 merge-recursive.c:2481 merge-recursive.c:3213
+#: merge-recursive.c:1589 merge-recursive.c:2445 merge-recursive.c:3085
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "Преустановяване на действието, за да не се изгуби промененият „%s“"
 
-#: merge-recursive.c:1643
+#: merge-recursive.c:1599
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
 "Отказ да се загуби неследеният файл „%s“, защото е на място, където пречи."
 
-#: merge-recursive.c:1706
+#: merge-recursive.c:1657
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "КОНФЛИКТ (преименуване/добавяне): „%s“ е преименуван на „%s“ в клон „%s“, а "
 "„%s“ е добавен в „%s“"
 
-#: merge-recursive.c:1734
+#: merge-recursive.c:1687
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "„%s“ е директория в „%s“, затова се добавя като „%s“"
 
-#: merge-recursive.c:1739
+#: merge-recursive.c:1692
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr ""
 "Преустановяване на действието, за да не се изгуби неследеният файл „%s“.  "
 "Вместо него се добавя „%s“"
 
-#: merge-recursive.c:1759
+#: merge-recursive.c:1711
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -3384,18 +4011,18 @@ msgstr ""
 "КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон "
 "„%s“, а „%s“ е преименуван на „%s“ в „%s“/%s."
 
-#: merge-recursive.c:1764
+#: merge-recursive.c:1716
 msgid " (left unresolved)"
 msgstr " (некоригиран конфликт)"
 
-#: merge-recursive.c:1868
+#: merge-recursive.c:1825
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон "
 "„%s“, а „%s“ е преименуван на „%s“ в „%s“"
 
-#: merge-recursive.c:2064
+#: merge-recursive.c:2030
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -3406,7 +4033,7 @@ msgstr ""
 "постави „%s“, защото няколко нови директории поделят съдържанието на "
 "директория „%s“, като никоя не съдържа мнозинство от файловете ѝ."
 
-#: merge-recursive.c:2096
+#: merge-recursive.c:2062
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -3415,7 +4042,7 @@ msgstr ""
 "КОНФЛИКТ (косвено преименуване на директория): следният файл или директория "
 "„%s“ не позволяват косвеното преименуване на следния път/ища: %s."
 
-#: merge-recursive.c:2106
+#: merge-recursive.c:2072
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -3425,7 +4052,7 @@ msgstr ""
 "съответства на „%s“.  Косвено преименуване на директория води до поставянето "
 "на тези пътища там: %s."
 
-#: merge-recursive.c:2198
+#: merge-recursive.c:2164
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -3434,7 +4061,7 @@ msgstr ""
 "КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон "
 "„%s“, а „%s“ е преименуван на „%s“ в „%s“"
 
-#: merge-recursive.c:2443
+#: merge-recursive.c:2408
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
@@ -3443,82 +4070,118 @@ msgstr ""
 "ПРЕДУПРЕЖДЕНИЕ: прескачане на преименуването на „%s“ на „%s“ в „%s“, защото "
 "„%s“ също е с променено име."
 
-#: merge-recursive.c:3022
+#: merge-recursive.c:2929
 #, c-format
 msgid "cannot read object %s"
 msgstr "обектът „%s“ не може да се прочете"
 
-#: merge-recursive.c:3025
+#: merge-recursive.c:2932
 #, c-format
 msgid "object %s is not a blob"
 msgstr "обектът „%s“ не е BLOB"
 
-#: merge-recursive.c:3094
+#: merge-recursive.c:2996
 msgid "modify"
 msgstr "промяна"
 
-#: merge-recursive.c:3094
+#: merge-recursive.c:2996
 msgid "modified"
 msgstr "променен"
 
-#: merge-recursive.c:3105
+#: merge-recursive.c:3008
 msgid "content"
 msgstr "съдържание"
 
-#: merge-recursive.c:3112
+#: merge-recursive.c:3012
 msgid "add/add"
 msgstr "добавяне/добавяне"
 
-#: merge-recursive.c:3160
+#: merge-recursive.c:3035
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "Прескачане на „%s“ (слетият резултат е идентичен със сегашния)"
 
-#: merge-recursive.c:3182 git-submodule.sh:861
+#: merge-recursive.c:3057 git-submodule.sh:937
 msgid "submodule"
 msgstr "ПОДМОДУЛ"
 
-#: merge-recursive.c:3183
+#: merge-recursive.c:3058
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "КОНФЛИКТ (%s): Конфликт при сливане на „%s“"
 
-#: merge-recursive.c:3216
+#: merge-recursive.c:3088
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Добавяне като „%s“"
 
-#: merge-recursive.c:3319
+#: merge-recursive.c:3170
+#, c-format
+msgid ""
+"Path updated: %s added in %s inside a directory that was renamed in %s; "
+"moving it to %s."
+msgstr ""
+"Обновен път: „%s“ е добавен в „%s“ в директория, която е преименувана в "
+"„%s“.  Обектът се мести в „%s“."
+
+#: merge-recursive.c:3173
+#, 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 ""
+"КОНФЛИКТ (места на файлове): „%s“ е добавен в „%s“ в директория, която е "
+"преименувана в „%s“.  Предложението е да преместите обекта в „%s“."
+
+#: merge-recursive.c:3177
+#, c-format
+msgid ""
+"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
+"%s; moving it to %s."
+msgstr ""
+"Обновен път: „%s“ е преименуван на „%s“ в „%s“ в директория, която е "
+"преименувана в „%s“.  Обектът се мести в „%s“."
+
+#: merge-recursive.c:3180
+#, 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 ""
+"КОНФЛИКТ (места на файлове): „%s“ е преименуван на „%s“ в „%s“ в директория, "
+"която е преименувана в „%s“.  Предложението е да преместите обекта в „%s“."
+
+#: merge-recursive.c:3294
 #, c-format
 msgid "Removing %s"
 msgstr "Изтриване на „%s“"
 
-#: merge-recursive.c:3345
+#: merge-recursive.c:3317
 msgid "file/directory"
 msgstr "файл/директория"
 
-#: merge-recursive.c:3351
+#: merge-recursive.c:3322
 msgid "directory/file"
 msgstr "директория/файл"
 
-#: merge-recursive.c:3358
+#: merge-recursive.c:3329
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
 "КОНФЛИКТ (%s): Съществува директория на име „%s“ в „%s“.  Добавяне на „%s“ "
 "като „%s“"
 
-#: merge-recursive.c:3367
+#: merge-recursive.c:3338
 #, c-format
 msgid "Adding %s"
 msgstr "Добавяне на „%s“"
 
-#: merge-recursive.c:3376
+#: merge-recursive.c:3347
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "КОНФЛИКТ (добавяне/добавяне): Конфликт при сливане на „%s“"
 
-#: merge-recursive.c:3417
+#: merge-recursive.c:3385
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -3527,131 +4190,135 @@ msgstr ""
 "Сливането ще презапише локалните промени на тези файлове:\n"
 "    %s"
 
-#: merge-recursive.c:3428
+#: merge-recursive.c:3396
 msgid "Already up to date!"
 msgstr "Вече е обновено!"
 
-#: merge-recursive.c:3437
+#: merge-recursive.c:3405
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "неуспешно сливане на дърветата „%s“ и „%s“"
 
-#: merge-recursive.c:3536
+#: merge-recursive.c:3504
 msgid "Merging:"
 msgstr "Сливане:"
 
-#: merge-recursive.c:3549
+#: merge-recursive.c:3517
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "открит е %u общ предшественик:"
 msgstr[1] "открити са %u общи предшественици:"
 
-#: merge-recursive.c:3588
+#: merge-recursive.c:3556
 msgid "merge returned no commit"
 msgstr "сливането не върна подаване"
 
-#: merge-recursive.c:3654
+#: merge-recursive.c:3622
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "Неуспешен анализ на обекта „%s“"
 
-#: merge-recursive.c:3670 builtin/merge.c:692 builtin/merge.c:850
+#: merge-recursive.c:3638 builtin/merge.c:702 builtin/merge.c:873
 msgid "Unable to write index."
 msgstr "Индексът не може да бъде прочетен"
 
-#: midx.c:65
+#: midx.c:66
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "файлът с индекса за множество пакети „%s“ е твърде малък"
 
-#: midx.c:81
+#: midx.c:82
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr "отпечатъкът на индекса за множество пакети 0x%08x не съвпада с 0x%08x"
 
-#: midx.c:86
+#: midx.c:87
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "непозната версия на индекс за множество пакети — %d"
 
-#: midx.c:91
+#: midx.c:92
 #, c-format
 msgid "hash version %u does not match"
 msgstr "версията на отпечатъка %u не съвпада"
 
-#: midx.c:105
+#: midx.c:106
 msgid "invalid chunk offset (too large)"
 msgstr "неправилно (прекалено голямо) отместване на откъс"
 
-#: midx.c:129
+#: midx.c:130
 msgid "terminating multi-pack-index chunk id appears earlier than expected"
 msgstr ""
 "идентификаторът за краен откъс на индекс за множество пакети се явява по-"
 "рано от очакваното"
 
-#: midx.c:142
+#: midx.c:143
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "липсва откъс (pack-name) от индекс за множество пакети"
 
-#: midx.c:144
+#: midx.c:145
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "липсва откъс (OID fanout) от индекс за множество пакети"
 
-#: midx.c:146
+#: midx.c:147
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "липсва откъс (OID lookup) от индекс за множество пакети"
 
-#: midx.c:148
+#: midx.c:149
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "липсва откъс за отместванията на обекти от индекс за множество пакети"
 
-#: midx.c:162
+#: midx.c:163
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr ""
 "неправилна подредба на имената в индекс за множество пакети: „%s“ се появи "
 "преди „%s“"
 
-#: midx.c:205
+#: midx.c:208
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr ""
 "неправилен идентификатор на пакет (pack-int-id): %u (от общо %u пакети)"
 
-#: midx.c:246
+#: midx.c:258
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr ""
 "индексът за множество пакети съдържа 64-битови отмествания, но размерът на "
 "„off_t“ е недостатъчен"
 
-#: midx.c:271
+#: midx.c:286
 msgid "error preparing packfile from multi-pack-index"
 msgstr ""
 "грешка при създаването на пакетен файл на базата на индекс за множество "
 "пакети"
 
-#: midx.c:407
+#: midx.c:457
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "пакетният файл „%s“ не може да бъде добавен"
 
-#: midx.c:413
+#: midx.c:463
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "индексът за пакети „%s“ не може да бъде отворен"
 
-#: midx.c:507
+#: midx.c:557
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "обект %d в пакетния файл липсва"
 
-#: midx.c:943
+#: midx.c:993
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "индексът за множество пакети не може да бъде изчистен при „%s“"
 
-#: midx.c:981
+#: midx.c:1048
+msgid "Looking for referenced packfiles"
+msgstr "Търсене на указаните пакетни файлове"
+
+#: midx.c:1063
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
@@ -3659,27 +4326,37 @@ msgstr ""
 "неправилна подредба на откъси (OID fanout): fanout[%d] = %<PRIx32> > "
 "%<PRIx32> = fanout[%d]"
 
-#: midx.c:992
+#: midx.c:1067
+msgid "Verifying OID order in MIDX"
+msgstr ""
+"Проверка на подредбата на идентификатори на обекти в MIDX (файл с индекс към "
+"множество пакетни файлове)"
+
+#: midx.c:1076
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr ""
 "неправилна подредба на откъси (OID lookup): oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:996
+#: midx.c:1095
+msgid "Sorting objects by packfile"
+msgstr "Подредба на обектите по пакетни файлове"
+
+#: midx.c:1101
 msgid "Verifying object offsets"
 msgstr "Проверка на отместването на обекти"
 
-#: midx.c:1004
+#: midx.c:1117
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "записът в пакета за обекта oid[%d] = %s не може да бъде зареден"
 
-#: midx.c:1010
+#: midx.c:1123
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "индексът на пакета „%s“ не може да бъде зареден"
 
-#: midx.c:1019
+#: midx.c:1132
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "неправилно отместване на обект за oid[%d] = %s: %<PRIx64> != %<PRIx64>"
@@ -3772,91 +4449,86 @@ msgstr "обектът „%s“ не може да бъде анализиран
 msgid "hash mismatch %s"
 msgstr "разлика в контролната сума: „%s“"
 
-#: packfile.c:607
+#: packfile.c:617
 msgid "offset before end of packfile (broken .idx?)"
 msgstr ""
 "отместване преди края на пакетния файл (възможно е индексът да е повреден)"
 
-#: packfile.c:1870
+#: packfile.c:1868
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr ""
 "отместване преди началото на индекса на пакетния файл „%s“ (възможно е "
 "индексът да е повреден)"
 
-#: packfile.c:1874
+#: packfile.c:1872
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr ""
 "отместване преди края на индекса на пакетния файл „%s“ (възможно е индексът "
 "да е отрязан)"
 
-#: parse-options.c:35
+#: parse-options.c:38
 #, c-format
 msgid "%s requires a value"
 msgstr "опцията „%s“ изисква аргумент"
 
-#: parse-options.c:69
+#: parse-options.c:73
 #, c-format
 msgid "%s is incompatible with %s"
 msgstr "опциите „%s“ и „%s“ са несъвместими"
 
-#: parse-options.c:74
+#: parse-options.c:78
 #, c-format
 msgid "%s : incompatible with something else"
 msgstr "опцията „%s“ е несъвместима с нещо"
 
-#: parse-options.c:88 parse-options.c:92 parse-options.c:260
+#: parse-options.c:92 parse-options.c:96 parse-options.c:319
 #, c-format
 msgid "%s takes no value"
 msgstr "опцията „%s“ не приема аргументи"
 
-#: parse-options.c:90
+#: parse-options.c:94
 #, c-format
 msgid "%s isn't available"
 msgstr "опцията „%s“ не е налична"
 
-#: parse-options.c:178
-#, c-format
-msgid "%s expects a numerical value"
-msgstr "опцията „%s“ очаква число за аргумент"
-
-#: parse-options.c:194
+#: parse-options.c:219
 #, c-format
 msgid "%s expects a non-negative integer value with an optional k/m/g suffix"
 msgstr ""
 "„%s“ очаква неотрицателно цяло число, евентуално със суфикс „k“/„m“/„g“"
 
-#: parse-options.c:322
+#: parse-options.c:389
 #, c-format
 msgid "ambiguous option: %s (could be --%s%s or --%s%s)"
 msgstr "нееднозначна опция: „%s“ (може да е „--%s%s“ или „--%s%s“)"
 
-#: parse-options.c:356 parse-options.c:364
+#: parse-options.c:423 parse-options.c:431
 #, c-format
 msgid "did you mean `--%s` (with two dashes ?)"
 msgstr "„--%s“ (с 2 тирета) ли имахте предвид?"
 
-#: parse-options.c:649
+#: parse-options.c:859
 #, c-format
 msgid "unknown option `%s'"
 msgstr "непозната опция: „%s“"
 
-#: parse-options.c:651
+#: parse-options.c:861
 #, c-format
 msgid "unknown switch `%c'"
 msgstr "непознат флаг „%c“"
 
-#: parse-options.c:653
+#: parse-options.c:863
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "непозната стойност извън „ascii“ в низа: „%s“"
 
-#: parse-options.c:675
+#: parse-options.c:887
 msgid "..."
 msgstr "…"
 
-#: parse-options.c:694
+#: parse-options.c:906
 #, c-format
 msgid "usage: %s"
 msgstr "употреба: %s"
@@ -3864,43 +4536,48 @@ msgstr "употреба: %s"
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:700
+#: parse-options.c:912
 #, c-format
 msgid "   or: %s"
 msgstr "     или: %s"
 
-#: parse-options.c:703
+#: parse-options.c:915
 #, c-format
 msgid "    %s"
 msgstr "    %s"
 
-#: parse-options.c:742
+#: parse-options.c:954
 msgid "-NUM"
 msgstr "-ЧИСЛО"
 
-#: parse-options-cb.c:21
+#: parse-options.c:968
+#, c-format
+msgid "alias of --%s"
+msgstr "псевдоним на „--%s“"
+
+#: parse-options-cb.c:20 parse-options-cb.c:24
 #, c-format
 msgid "option `%s' expects a numerical value"
 msgstr "опцията „%s“ очаква число за аргумент"
 
-#: parse-options-cb.c:38
+#: parse-options-cb.c:41
 #, c-format
 msgid "malformed expiration date '%s'"
 msgstr "неправилна дата на срок: „%s“"
 
-#: parse-options-cb.c:51
+#: parse-options-cb.c:54
 #, c-format
 msgid "option `%s' expects \"always\", \"auto\", or \"never\""
 msgstr ""
 "опцията „%s“ изисква някоя от стойностите: „always“ (винаги), "
 "„auto“ (автоматично) или „never“ (никога)"
 
-#: parse-options-cb.c:110
+#: parse-options-cb.c:130 parse-options-cb.c:147
 #, c-format
 msgid "malformed object name '%s'"
 msgstr "неправилно име на обект „%s“"
 
-#: path.c:894
+#: path.c:897
 #, c-format
 msgid "Could not make %s writable by group"
 msgstr "Не могат да се дадат права за запис в директорията „%s“ на групата"
@@ -3979,47 +4656,55 @@ msgstr "%s: магическите пътища не се поддържат о
 msgid "pathspec '%s' is beyond a symbolic link"
 msgstr "пътят „%s“ е след символна връзка"
 
-#: pkt-line.c:104
+#: pkt-line.c:92
+msgid "unable to write flush packet"
+msgstr "пакетът за изчистване на буферите не може да се запише"
+
+#: pkt-line.c:99
+msgid "unable to write delim packet"
+msgstr "разделящият пакет не може да се запише"
+
+#: pkt-line.c:106
 msgid "flush packet write failed"
 msgstr "неуспешно изчистване на буферите при запис на пакет"
 
-#: pkt-line.c:144 pkt-line.c:230
+#: pkt-line.c:146 pkt-line.c:232
 msgid "protocol error: impossibly long line"
 msgstr "протоколна грешка: прекалено дълъг ред"
 
-#: pkt-line.c:160 pkt-line.c:162
+#: pkt-line.c:162 pkt-line.c:164
 msgid "packet write with format failed"
 msgstr "неуспешен запис на пакет с формат"
 
-#: pkt-line.c:194
+#: pkt-line.c:196
 msgid "packet write failed - data exceeds max packet size"
 msgstr ""
 "неуспешен запис на пакетен файл — данните надвишават максималният размер на "
 "пакет"
 
-#: pkt-line.c:201 pkt-line.c:208
+#: pkt-line.c:203 pkt-line.c:210
 msgid "packet write failed"
 msgstr "неуспешен запис на пакет"
 
-#: pkt-line.c:293
+#: pkt-line.c:295
 msgid "read error"
 msgstr "грешка при четене"
 
-#: pkt-line.c:301
+#: pkt-line.c:303
 msgid "the remote end hung up unexpectedly"
 msgstr "отдалеченото хранилище неочаквано прекъсна връзката"
 
-#: pkt-line.c:329
+#: pkt-line.c:331
 #, c-format
 msgid "protocol error: bad line length character: %.4s"
 msgstr "протоколна грешка: неправилeн знак за дължина на ред: %.4s"
 
-#: pkt-line.c:339 pkt-line.c:344
+#: pkt-line.c:341 pkt-line.c:346
 #, c-format
 msgid "protocol error: bad line length %d"
 msgstr "протоколна грешка: неправилна дължина на ред: %d"
 
-#: pkt-line.c:353
+#: pkt-line.c:362
 #, c-format
 msgid "remote error: %s"
 msgstr "отдалечена грешка: %s"
@@ -4033,7 +4718,7 @@ msgstr "Обновяване на индекса"
 msgid "unable to create threaded lstat: %s"
 msgstr "не може да се създаде нишка за изпълнението на „lstat“: %s"
 
-#: pretty.c:963
+#: pretty.c:966
 msgid "unable to parse --pretty format"
 msgstr "аргументът към опцията „--pretty“ не може да се анализира"
 
@@ -4046,7 +4731,7 @@ msgid "could not read `log` output"
 msgstr ""
 "изходът от командата за журнала с подавания „log“ не може да се прочете"
 
-#: range-diff.c:74 sequencer.c:4828
+#: range-diff.c:74 sequencer.c:4897
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "подаването „%s“ не може да бъде анализирано"
@@ -4060,48 +4745,53 @@ msgstr "неуспешно търсене на разлика"
 msgid "could not parse log for '%s'"
 msgstr "журналът с подаванията на „%s“ не може да бъде анализиран"
 
-#: read-cache.c:673
+#: read-cache.c:680
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr ""
 "няма да бъде добавен псевдоним за файл „%s“ („%s“ вече съществува в индекса)"
 
-#: read-cache.c:689
+#: read-cache.c:696
 msgid "cannot create an empty blob in the object database"
 msgstr "в базата от данни за обектите не може да се създаде празен обект-BLOB"
 
-#: read-cache.c:710
+#: read-cache.c:718
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr ""
 "%s: може да добавяте само обикновени файлове, символни връзки и директории "
 "на git"
 
-#: read-cache.c:765
+#: read-cache.c:723
+#, c-format
+msgid "'%s' does not have a commit checked out"
+msgstr "не е изтеглено подаване в „%s“"
+
+#: read-cache.c:775
 #, c-format
 msgid "unable to index file '%s'"
 msgstr "файлът „%s“ не може да бъде индексиран"
 
-#: read-cache.c:784
+#: read-cache.c:794
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr "„%s“ не може да се добави в индекса"
 
-#: read-cache.c:795
+#: read-cache.c:805
 #, c-format
 msgid "unable to stat '%s'"
 msgstr "„stat“ не може да се изпълни върху „%s“"
 
-#: read-cache.c:1304
+#: read-cache.c:1314
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr "„%s“ съществува и като файл, и като директория"
 
-#: read-cache.c:1489
+#: read-cache.c:1499
 msgid "Refresh index"
 msgstr "Обновяване на индекса"
 
-#: read-cache.c:1603
+#: read-cache.c:1613
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -4110,7 +4800,7 @@ msgstr ""
 "Зададена е неправилна стойност на настройката „index.version“.\n"
 "Ще се ползва версия %i"
 
-#: read-cache.c:1613
+#: read-cache.c:1623
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -4120,147 +4810,155 @@ msgstr ""
 "„GIT_INDEX_VERSION“.\n"
 "Ще се ползва версия %i"
 
-#: read-cache.c:1684
+#: read-cache.c:1679
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "неправилен подпис: „0x%08x“"
 
-#: read-cache.c:1687
+#: read-cache.c:1682
 #, c-format
 msgid "bad index version %d"
 msgstr "неправилна версия на индекса %d"
 
-#: read-cache.c:1696
+#: read-cache.c:1691
 msgid "bad index file sha1 signature"
 msgstr "неправилен подпис за контролна сума по SHA1 на файла на индекса"
 
-#: read-cache.c:1726
+#: read-cache.c:1721
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr ""
 "индексът ползва разширение „%.4s“, което не се поддържа от тази версия на git"
 
-#: read-cache.c:1728
+#: read-cache.c:1723
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "игнориране на разширението „%.4s“"
 
-#: read-cache.c:1765
+#: read-cache.c:1760
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "непознат формат на запис в индекса: „0x%08x“"
 
-#: read-cache.c:1781
+#: read-cache.c:1776
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "неправилно име на поле в индекса близо до пътя „%s“"
 
-#: read-cache.c:1836
+#: read-cache.c:1833
 msgid "unordered stage entries in index"
 msgstr "неподредени записи в индекса"
 
-#: read-cache.c:1839
+#: read-cache.c:1836
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "множество записи за слетия файл „%s“"
 
-#: read-cache.c:1842
+#: read-cache.c:1839
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "неподредени записи за „%s“"
 
-#: read-cache.c:1949 read-cache.c:2227 rerere.c:565 rerere.c:599 rerere.c:1111
-#: builtin/add.c:459 builtin/check-ignore.c:178 builtin/checkout.c:294
-#: builtin/checkout.c:622 builtin/checkout.c:991 builtin/clean.c:955
-#: builtin/commit.c:344 builtin/diff-tree.c:116 builtin/grep.c:498
+#: read-cache.c:1946 read-cache.c:2234 rerere.c:565 rerere.c:599 rerere.c:1111
+#: builtin/add.c:460 builtin/check-ignore.c:178 builtin/checkout.c:358
+#: builtin/checkout.c:672 builtin/checkout.c:1060 builtin/clean.c:955
+#: builtin/commit.c:344 builtin/diff-tree.c:120 builtin/grep.c:498
 #: builtin/mv.c:145 builtin/reset.c:245 builtin/rm.c:271
 #: builtin/submodule--helper.c:330
 msgid "index file corrupt"
 msgstr "файлът с индекса е повреден"
 
-#: read-cache.c:2090
+#: read-cache.c:2087
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "не може да се създаде нишка за зареждане на обектите от кеша: %s"
 
-#: read-cache.c:2103
+#: read-cache.c:2100
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "не може да се изчака нишка за зареждане на обектите от кеша: %s"
 
-#: read-cache.c:2136
+#: read-cache.c:2133
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: неуспешно отваряне на файла на индекса"
 
-#: read-cache.c:2140
+#: read-cache.c:2137
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s: не може да се получи информация за отворения индекс със „stat“"
 
-#: read-cache.c:2144
+#: read-cache.c:2141
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s: файлът на индекса е по-малък от очакваното"
 
-#: read-cache.c:2148
+#: read-cache.c:2145
 #, c-format
 msgid "%s: unable to map index file"
 msgstr "%s: неуспешно заделяне на съответстваща памет чрез „mmap“ на индекса"
 
-#: read-cache.c:2190
+#: read-cache.c:2187
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr ""
 "не може да се създаде нишка за зареждане на разширенията на индекса: %s"
 
-#: read-cache.c:2217
+#: read-cache.c:2214
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr ""
 "не може да се създаде нишка за зареждане на разширенията на индекса: %s"
 
-#: read-cache.c:2239
+#: read-cache.c:2246
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "споделеният индекс „%s“ не може да се обнови"
 
-#: read-cache.c:2274
+#: read-cache.c:2293
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "грешки в индекса — в „%2$s“ се очаква „%1$s“, а бе получено „%3$s“"
 
-#: read-cache.c:2971 sequencer.c:4791 wrapper.c:658 builtin/merge.c:1087
+#: read-cache.c:2989 wrapper.c:658 builtin/merge.c:1117
 #, c-format
 msgid "could not close '%s'"
 msgstr "„%s“ не може да се затвори"
 
-#: read-cache.c:3044 sequencer.c:2237 sequencer.c:3647
+#: read-cache.c:3092 sequencer.c:2354 sequencer.c:3807
 #, c-format
 msgid "could not stat '%s'"
 msgstr "неуспешно изпълнение на „stat“ върху „%s“"
 
-#: read-cache.c:3057
+#: read-cache.c:3105
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "не може да се отвори директорията на git: %s"
 
-#: read-cache.c:3069
+#: read-cache.c:3117
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "неуспешно изтриване на „%s“"
 
-#: read-cache.c:3088
+#: read-cache.c:3142
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "правата за достъп до „%s“ не могат да бъдат поправени"
 
-#: read-cache.c:3237
+#: read-cache.c:3291
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s: не може да се премине към етап №0"
 
-#: rebase-interactive.c:10
+#: rebase-interactive.c:26
+#, c-format
+msgid ""
+"unrecognized setting %s for option rebase.missingCommitsCheck. Ignoring."
+msgstr ""
+"Непозната стойност „%s“ за настройката „rebase.missingCommitsCheck“.  "
+"Настройката се прескача."
+
+#: rebase-interactive.c:35
 msgid ""
 "\n"
 "Commands:\n"
@@ -4307,7 +5005,14 @@ msgstr ""
 "Може да променяте последователността на редовете — те се изпълняват\n"
 "последователно отгоре-надолу.\n"
 
-#: rebase-interactive.c:31 git-rebase--preserve-merges.sh:173
+#: rebase-interactive.c:56
+#, c-format
+msgid "Rebase %s onto %s (%d command)"
+msgid_plural "Rebase %s onto %s (%d commands)"
+msgstr[0] "Пребазиране на „%s“ върху „%s“ (%d команди)"
+msgstr[1] "Пребазиране на „%s“ върху „%s“ (%d команда)"
+
+#: rebase-interactive.c:65 git-rebase--preserve-merges.sh:173
 msgid ""
 "\n"
 "Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
@@ -4316,7 +5021,7 @@ msgstr ""
 "Не изтривайте редове.  Подаванията могат да се прескачат с командата "
 "„drop“.\n"
 
-#: rebase-interactive.c:34 git-rebase--preserve-merges.sh:177
+#: rebase-interactive.c:68 git-rebase--preserve-merges.sh:177
 msgid ""
 "\n"
 "If you remove a line here THAT COMMIT WILL BE LOST.\n"
@@ -4324,7 +5029,7 @@ msgstr ""
 "\n"
 "Ако изтриете ред, съответстващото му подаване ще бъде ИЗТРИТО.\n"
 
-#: rebase-interactive.c:40 git-rebase--preserve-merges.sh:816
+#: rebase-interactive.c:74 git-rebase--preserve-merges.sh:816
 msgid ""
 "\n"
 "You are editing the todo file of an ongoing interactive rebase.\n"
@@ -4339,7 +5044,7 @@ msgstr ""
 "    git rebase --continue\n"
 "\n"
 
-#: rebase-interactive.c:45 git-rebase--preserve-merges.sh:893
+#: rebase-interactive.c:79 git-rebase--preserve-merges.sh:893
 msgid ""
 "\n"
 "However, if you remove everything, the rebase will be aborted.\n"
@@ -4349,125 +5054,154 @@ msgstr ""
 "Ако изтриете всичко, пребазирането ще бъде преустановено.\n"
 "\n"
 
-#: rebase-interactive.c:51 git-rebase--preserve-merges.sh:900
+#: rebase-interactive.c:85 git-rebase--preserve-merges.sh:900
 msgid "Note that empty commits are commented out"
 msgstr "Празните подавания са коментирани"
 
-#: rebase-interactive.c:62 rebase-interactive.c:75 sequencer.c:2219
-#: sequencer.c:4569 sequencer.c:4625 sequencer.c:4900
+#: rebase-interactive.c:105 rerere.c:485 rerere.c:692 sequencer.c:3339
+#: sequencer.c:3365 sequencer.c:4996 builtin/fsck.c:356 builtin/rebase.c:235
 #, c-format
-msgid "could not read '%s'."
-msgstr "от „%s“ не може да се чете."
+msgid "could not write '%s'"
+msgstr "„%s“ не може да се запише"
+
+#: rebase-interactive.c:108
+#, c-format
+msgid "could not copy '%s' to '%s'."
+msgstr "„%s“ не може да се копира като „%s“."
+
+#: rebase-interactive.c:173
+#, c-format
+msgid ""
+"Warning: some commits may have been dropped accidentally.\n"
+"Dropped commits (newer to older):\n"
+msgstr ""
+"Предупреждение: някои подавания може да са пропуснати.\n"
+"Пропуснати подавания (новите са най-отгоре):\n"
+
+#: rebase-interactive.c:180
+#, c-format
+msgid ""
+"To avoid this message, use \"drop\" to explicitly remove a commit.\n"
+"\n"
+"Use 'git config rebase.missingCommitsCheck' to change the level of "
+"warnings.\n"
+"The possible behaviours are: ignore, warn, error.\n"
+"\n"
+msgstr ""
+"За да не получавате това съобщение, изрично ползвайте командата „drop“.\n"
+"\n"
+"Настройката „rebase.missingCommitsCheck“ управлява нивото на предупреждение\n"
+"Възможните стойности са „ignore“ (пренебрегване), „warn“ (само "
+"предупреждение)\n"
+"или „error“ (считане за грешка).\n"
 
 #: refs.c:192
 #, c-format
 msgid "%s does not point to a valid object!"
 msgstr "„%s“ не сочи към позволен обект!"
 
-#: refs.c:583
+#: refs.c:597
 #, c-format
 msgid "ignoring dangling symref %s"
 msgstr "игнориране на указател на обект извън клон „%s“"
 
-#: refs.c:585 ref-filter.c:1976
+#: refs.c:599 ref-filter.c:1982
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "игнориране на повредения указател „%s“"
 
-#: refs.c:711
+#: refs.c:734
 #, c-format
 msgid "could not open '%s' for writing: %s"
 msgstr "„%s“ не може да бъде отворен за запис: %s"
 
-#: refs.c:721 refs.c:772
+#: refs.c:744 refs.c:795
 #, c-format
 msgid "could not read ref '%s'"
 msgstr "указателят „%s“ не може да се прочете"
 
-#: refs.c:727
+#: refs.c:750
 #, c-format
 msgid "ref '%s' already exists"
 msgstr "указателят „%s“ вече съществува"
 
-#: refs.c:732
+#: refs.c:755
 #, c-format
 msgid "unexpected object ID when writing '%s'"
 msgstr "неочакван идентификатор на обект при записването на „%s“"
 
-#: refs.c:740 sequencer.c:396 sequencer.c:2549 sequencer.c:2675
-#: sequencer.c:2689 sequencer.c:2923 sequencer.c:4789 sequencer.c:4852
-#: wrapper.c:656
+#: refs.c:763 sequencer.c:400 sequencer.c:2679 sequencer.c:2805
+#: sequencer.c:2819 sequencer.c:3076 sequencer.c:4913 wrapper.c:656
 #, c-format
 msgid "could not write to '%s'"
 msgstr "в „%s“ не може да се пише"
 
-#: refs.c:767 sequencer.c:4787 sequencer.c:4846 wrapper.c:225 wrapper.c:395
-#: builtin/am.c:713 builtin/rebase.c:575
+#: refs.c:790 wrapper.c:225 wrapper.c:395 builtin/am.c:715 builtin/rebase.c:993
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "„%s“ не може да бъде отворен за запис"
 
-#: refs.c:774
+#: refs.c:797
 #, c-format
 msgid "unexpected object ID when deleting '%s'"
 msgstr "неочакван идентификатор на обект при изтриването на „%s“"
 
-#: refs.c:905
+#: refs.c:928
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "има пропуски в журнала с подаванията за указателя „%s“ след „%s“"
 
-#: refs.c:911
+#: refs.c:934
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr "журналът с подаванията за указателя „%s“ свършва неочаквано след „%s“"
 
-#: refs.c:969
+#: refs.c:993
 #, c-format
 msgid "log for %s is empty"
 msgstr "журналът с подаванията за указателя „%s“ е празен"
 
-#: refs.c:1061
+#: refs.c:1085
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "указател не може да се обнови с грешно име „%s“"
 
-#: refs.c:1137
+#: refs.c:1161
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "неуспешно обновяване на указателя „%s“: %s"
 
-#: refs.c:1911
+#: refs.c:1942
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "не са позволени повече от една промени на указателя „%s“"
 
-#: refs.c:1943
+#: refs.c:1974
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "обновяванията на указатели са забранени в среди под карантина"
 
-#: refs.c:2039 refs.c:2069
+#: refs.c:2070 refs.c:2100
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "„%s“ съществува, не може да се създаде „%s“"
 
-#: refs.c:2045 refs.c:2080
+#: refs.c:2076 refs.c:2111
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "невъзможно е едновременно да се обработват „%s“ и „%s“"
 
-#: refs/files-backend.c:1228
+#: refs/files-backend.c:1234
 #, c-format
 msgid "could not remove reference %s"
 msgstr "Указателят „%s“ не може да бъде изтрит"
 
-#: refs/files-backend.c:1242 refs/packed-backend.c:1532
+#: refs/files-backend.c:1248 refs/packed-backend.c:1532
 #: refs/packed-backend.c:1542
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr "Указателят „%s“ не може да бъде изтрит: %s"
 
-#: refs/files-backend.c:1245 refs/packed-backend.c:1545
+#: refs/files-backend.c:1251 refs/packed-backend.c:1545
 #, c-format
 msgid "could not delete references: %s"
 msgstr "Указателите не може да бъдат изтрити: %s"
@@ -4477,7 +5211,7 @@ msgstr "Указателите не може да бъдат изтрити: %s"
 msgid "invalid refspec '%s'"
 msgstr "неправилен указател: „%s“"
 
-#: ref-filter.c:39 wt-status.c:1861
+#: ref-filter.c:39 wt-status.c:1909
 msgid "gone"
 msgstr "изтрит"
 
@@ -4601,78 +5335,78 @@ msgstr "очаква се положителна широчина с лексе
 msgid "unrecognized %%(if) argument: %s"
 msgstr "непознат аргумент за „%%(if)“: %s"
 
-#: ref-filter.c:527
+#: ref-filter.c:531
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "неправилно име на обект: „%.*s“"
 
-#: ref-filter.c:554
+#: ref-filter.c:558
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "непознато име на обект: „%.*s“"
 
-#: ref-filter.c:558
+#: ref-filter.c:562
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
 msgstr "не е хранилище на git, а полето „%.*s“ изисква достъп данни на обектни"
 
-#: ref-filter.c:682
+#: ref-filter.c:686
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr "формат: лексемата %%(if) е използвана без съответната ѝ %%(then)"
 
-#: ref-filter.c:745
+#: ref-filter.c:749
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr "формат: лексемата %%(then) е използвана без съответната ѝ %%(if)"
 
-#: ref-filter.c:747
+#: ref-filter.c:751
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "формат: лексемата %%(then) е използвана повече от един път"
 
-#: ref-filter.c:749
+#: ref-filter.c:753
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "формат: лексемата %%(then) е използвана след %%(else)"
 
-#: ref-filter.c:777
+#: ref-filter.c:781
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr "формат: лексемата %%(else) е използвана без съответната ѝ %%(if)"
 
-#: ref-filter.c:779
+#: ref-filter.c:783
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr "формат: лексемата %%(else) е използвана без съответната ѝ %%(then)"
 
-#: ref-filter.c:781
+#: ref-filter.c:785
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "формат: лексемата %%(else) е използвана повече от един път"
 
-#: ref-filter.c:796
+#: ref-filter.c:800
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "формат: лексемата %%(end) е използвана без съответната ѝ"
 
-#: ref-filter.c:853
+#: ref-filter.c:857
 #, c-format
 msgid "malformed format string %s"
 msgstr "неправилен форматиращ низ „%s“"
 
-#: ref-filter.c:1447
+#: ref-filter.c:1453
 #, c-format
 msgid "(no branch, rebasing %s)"
 msgstr "(извън клон, пребазиране на „%s“)"
 
-#: ref-filter.c:1450
+#: ref-filter.c:1456
 #, c-format
 msgid "(no branch, rebasing detached HEAD %s)"
 msgstr "(извън клон, пребазиране на несвързан указател „HEAD“ при „%s“)"
 
-#: ref-filter.c:1453
+#: ref-filter.c:1459
 #, c-format
 msgid "(no branch, bisect started on %s)"
 msgstr "(извън клон, двоично търсене от „%s“)"
@@ -4680,7 +5414,7 @@ msgstr "(извън клон, двоично търсене от „%s“)"
 #. TRANSLATORS: make sure this matches "HEAD
 #. detached at " in wt-status.c
 #.
-#: ref-filter.c:1461
+#: ref-filter.c:1467
 #, c-format
 msgid "(HEAD detached at %s)"
 msgstr "(Указателят „HEAD“ не е свързан и е при „%s“)"
@@ -4688,56 +5422,56 @@ msgstr "(Указателят „HEAD“ не е свързан и е при „
 #. TRANSLATORS: make sure this matches "HEAD
 #. detached from " in wt-status.c
 #.
-#: ref-filter.c:1468
+#: ref-filter.c:1474
 #, c-format
 msgid "(HEAD detached from %s)"
 msgstr "Указателят „HEAD“ не е свързан и е отделѐн от „%s“"
 
-#: ref-filter.c:1472
+#: ref-filter.c:1478
 msgid "(no branch)"
 msgstr "(извън клон)"
 
-#: ref-filter.c:1506 ref-filter.c:1663
+#: ref-filter.c:1512 ref-filter.c:1669
 #, c-format
 msgid "missing object %s for %s"
 msgstr "обектът „%s“ липсва за „%s“"
 
-#: ref-filter.c:1516
+#: ref-filter.c:1522
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "неуспешно анализиране чрез „parse_object_buffer“ на „%s“ за „%s“"
 
-#: ref-filter.c:1882
+#: ref-filter.c:1888
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "обект със сгрешен формат при „%s“"
 
-#: ref-filter.c:1971
+#: ref-filter.c:1977
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "игнориране на указателя с грешно име „%s“"
 
-#: ref-filter.c:2257
+#: ref-filter.c:2263
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "грешка във форма̀та: липсва лексемата %%(end)"
 
-#: ref-filter.c:2352
+#: ref-filter.c:2363
 #, c-format
 msgid "option `%s' is incompatible with --merged"
 msgstr "опциите „%s“ и „--merged“ са несъвместими"
 
-#: ref-filter.c:2355
+#: ref-filter.c:2366
 #, c-format
 msgid "option `%s' is incompatible with --no-merged"
 msgstr "опциите „%s“ и „--no-merged“ са несъвместими"
 
-#: ref-filter.c:2365
+#: ref-filter.c:2376
 #, c-format
 msgid "malformed object name %s"
 msgstr "неправилно име на обект „%s“"
 
-#: ref-filter.c:2370
+#: ref-filter.c:2381
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "опцията „%s“ не сочи към подаване"
@@ -4937,42 +5671,42 @@ msgstr "отдалеченият указател „%s“ не може да б
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "• прескачане на неочаквания локален указател „%s“"
 
-#: remote.c:1990
+#: remote.c:2016
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "Този клон следи „%s“, но следеният клон е изтрит.\n"
 
-#: remote.c:1994
+#: remote.c:2020
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (за да коригирате това, използвайте „git branch --unset-upstream“)\n"
 
-#: remote.c:1997
+#: remote.c:2023
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Клонът е актуализиран към „%s“.\n"
 
-#: remote.c:2001
+#: remote.c:2027
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Клонът ви и „%s“ сочат към различни подавания.\n"
 
-#: remote.c:2004
+#: remote.c:2030
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (за повече информация ползвайте „%s“)\n"
 
-#: remote.c:2008
+#: remote.c:2034
 #, 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] "Клонът ви е с %2$d подаване пред „%1$s“.\n"
 msgstr[1] "Клонът ви е с %2$d подавания пред „%1$s“.\n"
 
-#: remote.c:2014
+#: remote.c:2040
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (публикувайте локалните си промени чрез „git push“)\n"
 
-#: remote.c:2017
+#: remote.c:2043
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -4980,11 +5714,11 @@ msgid_plural ""
 msgstr[0] "Клонът ви е с %2$d подаване зад „%1$s“ и може да бъде превъртян.\n"
 msgstr[1] "Клонът ви е с %2$d подавания зад „%1$s“ и може да бъде превъртян.\n"
 
-#: remote.c:2025
+#: remote.c:2051
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (обновете локалния си клон чрез „git pull“)\n"
 
-#: remote.c:2028
+#: remote.c:2054
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -4999,11 +5733,11 @@ msgstr[1] ""
 "Текущият клон се е отделил от „%s“,\n"
 "двата имат съответно по %d и %d несъвпадащи подавания.\n"
 
-#: remote.c:2038
+#: remote.c:2064
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (слейте отдалечения клон в локалния чрез „git pull“)\n"
 
-#: remote.c:2221
+#: remote.c:2247
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "очакваното име на обект „%s“ не може да бъде анализирано"
@@ -5031,12 +5765,6 @@ msgstr "повреден „MERGE_RR“ (запис за коригиране н
 msgid "unable to write rerere record"
 msgstr "приложеното коригиране на конфликт не може да бъде записано"
 
-#: rerere.c:485 rerere.c:692 sequencer.c:3186 sequencer.c:3212
-#: builtin/fsck.c:314
-#, c-format
-msgid "could not write '%s'"
-msgstr "„%s“ не може да се запише"
-
 #: rerere.c:495
 #, c-format
 msgid "there were errors while writing '%s' (%s)"
@@ -5090,8 +5818,8 @@ msgstr "излишният обект „%s“ не може да се изтр
 msgid "Recorded preimage for '%s'"
 msgstr "Предварителният вариант на „%s“ е запазен"
 
-#: rerere.c:881 submodule.c:2012 builtin/submodule--helper.c:1417
-#: builtin/submodule--helper.c:1427
+#: rerere.c:881 submodule.c:2024 builtin/log.c:1750
+#: builtin/submodule--helper.c:1417 builtin/submodule--helper.c:1427
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "Директорията „%s“ не може да бъде създадена"
@@ -5125,29 +5853,35 @@ msgstr "Запазената корекция на конфликт при „%s
 msgid "unable to open rr-cache directory"
 msgstr "директорията „rr-cache“ не може да се отвори"
 
-#: revision.c:2484
+#: revision.c:2476
 msgid "your current branch appears to be broken"
 msgstr "Текущият клон е повреден"
 
-#: revision.c:2487
+#: revision.c:2479
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "Текущият клон „%s“ е без подавания "
 
-#: revision.c:2684
+#: revision.c:2679
 msgid "--first-parent is incompatible with --bisect"
 msgstr "опциите „--first-parent“ и „--bisect“ са несъвместими"
 
-#: run-command.c:742
+#: revision.c:2683
+msgid "-L does not yet support diff formats besides -p and -s"
+msgstr ""
+"опцията „-L“ поддържа единствено форматирането на разликите според опциите „-"
+"p“ и „-s“"
+
+#: run-command.c:763
 msgid "open /dev/null failed"
 msgstr "неуспешно отваряне на „/dev/null“"
 
-#: run-command.c:1231
+#: run-command.c:1269
 #, c-format
 msgid "cannot create async thread: %s"
 msgstr "не може да се създаде асинхронна нишка: %s"
 
-#: run-command.c:1295
+#: run-command.c:1333
 #, c-format
 msgid ""
 "The '%s' hook was ignored because it's not set as executable.\n"
@@ -5198,34 +5932,34 @@ msgstr "получаващата страна не поддържа изтлас
 msgid "the receiving end does not support push options"
 msgstr "отсрещната страна не поддържа опции при изтласкване"
 
-#: sequencer.c:184
+#: sequencer.c:187
 #, c-format
 msgid "invalid commit message cleanup mode '%s'"
 msgstr "несъществуващ режим на изчистване „%s“ на съобщение при подаване"
 
-#: sequencer.c:288
+#: sequencer.c:292
 #, c-format
 msgid "could not delete '%s'"
 msgstr "„%s“ не може да бъде изтрит"
 
-#: sequencer.c:314
+#: sequencer.c:318
 msgid "revert"
 msgstr "отмяна"
 
-#: sequencer.c:316
+#: sequencer.c:320
 msgid "cherry-pick"
 msgstr "отбиране"
 
-#: sequencer.c:318
+#: sequencer.c:322
 msgid "rebase -i"
 msgstr "rebase -i"
 
-#: sequencer.c:320
+#: sequencer.c:324
 #, c-format
 msgid "unknown action: %d"
 msgstr "неизвестно действие: %d"
 
-#: sequencer.c:378
+#: sequencer.c:382
 msgid ""
 "a