summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documentation/RelNotes/2.16.3.txt49
-rw-r--r--Documentation/RelNotes/2.17.0.txt56
-rw-r--r--Documentation/config.txt2
-rw-r--r--Documentation/diff-options.txt8
-rw-r--r--Documentation/git-config.txt6
-rw-r--r--Documentation/git-filter-branch.txt8
-rw-r--r--Documentation/git-index-pack.txt3
-rw-r--r--Documentation/git-send-email.txt5
-rw-r--r--Documentation/git-shortlog.txt2
-rw-r--r--Documentation/git-stash.txt2
-rw-r--r--Documentation/git-worktree.txt34
-rw-r--r--Documentation/git.txt3
-rw-r--r--Documentation/gitattributes.txt13
-rw-r--r--Documentation/merge-strategies.txt2
-rw-r--r--Documentation/technical/http-protocol.txt3
-rwxr-xr-xGIT-VERSION-GEN2
-rw-r--r--INSTALL14
-rw-r--r--Makefile94
-rw-r--r--apply.c5
-rw-r--r--builtin/add.c9
-rw-r--r--builtin/branch.c2
-rw-r--r--builtin/checkout-index.c2
-rw-r--r--builtin/checkout.c7
-rw-r--r--builtin/clean.c2
-rw-r--r--builtin/commit.c10
-rw-r--r--builtin/config.c10
-rw-r--r--builtin/fetch.c2
-rw-r--r--builtin/gc.c7
-rw-r--r--builtin/grep.c13
-rw-r--r--builtin/index-pack.c7
-rw-r--r--builtin/ls-remote.c5
-rw-r--r--builtin/merge.c15
-rw-r--r--builtin/mv.c7
-rw-r--r--builtin/notes.c4
-rw-r--r--builtin/pack-objects.c1
-rw-r--r--builtin/pull.c2
-rw-r--r--builtin/push.c2
-rw-r--r--builtin/reflog.c1
-rw-r--r--builtin/remote.c2
-rw-r--r--builtin/replace.c3
-rw-r--r--builtin/rev-list.c2
-rw-r--r--builtin/rm.c9
-rw-r--r--builtin/shortlog.c8
-rw-r--r--builtin/submodule--helper.c4
-rw-r--r--builtin/tag.c2
-rw-r--r--builtin/unpack-objects.c1
-rw-r--r--builtin/update-server-info.c2
-rw-r--r--builtin/worktree.c224
-rw-r--r--cache.h6
-rwxr-xr-xci/lib-travisci.sh2
-rw-r--r--compat/mingw.c11
-rw-r--r--compat/mingw.h3
-rw-r--r--configure.ac26
-rw-r--r--contrib/completion/git-completion.bash319
-rwxr-xr-xcontrib/examples/git-difftool.perl2
-rwxr-xr-xcontrib/hooks/pre-auto-gc-battery2
-rw-r--r--diff.c96
-rw-r--r--diff.h1
-rw-r--r--fast-import.c4
-rw-r--r--fetch-pack.c58
-rwxr-xr-xgit-add--interactive.perl118
-rwxr-xr-xgit-filter-branch.sh8
-rwxr-xr-xgit-send-email.perl195
-rw-r--r--git.c2
-rw-r--r--gitweb/INSTALL3
-rwxr-xr-xgitweb/gitweb.perl17
-rw-r--r--http.c4
-rw-r--r--merge-recursive.c1253
-rw-r--r--merge-recursive.h27
-rw-r--r--merge.c12
-rw-r--r--object.h28
-rw-r--r--parse-options.c46
-rw-r--r--parse-options.h30
-rw-r--r--perl/FromCPAN/.gitattributes1
-rw-r--r--perl/FromCPAN/Error.pm (renamed from perl/Git/FromCPAN/Error.pm)295
-rw-r--r--perl/FromCPAN/Mail/Address.pm (renamed from perl/Git/FromCPAN/Mail/Address.pm)8
-rw-r--r--perl/Git.pm14
-rw-r--r--perl/Git/Error.pm46
-rw-r--r--perl/Git/LoadCPAN.pm104
-rw-r--r--perl/Git/LoadCPAN/Error.pm10
-rw-r--r--perl/Git/LoadCPAN/Mail/Address.pm10
-rwxr-xr-xperl/Git/Mail/Address.pm24
-rw-r--r--po/bg.po4598
-rw-r--r--po/ca.po7549
-rw-r--r--po/de.po4620
-rw-r--r--po/es.po5213
-rw-r--r--po/fr.po4586
-rw-r--r--po/git.pot4396
-rw-r--r--po/ko.po4583
-rw-r--r--po/sv.po4571
-rw-r--r--po/vi.po4591
-rw-r--r--po/zh_CN.po4561
-rw-r--r--read-cache.c16
-rw-r--r--rerere.c8
-rw-r--r--sequencer.c43
-rw-r--r--sha1_file.c11
-rw-r--r--strbuf.c24
-rw-r--r--strbuf.h19
-rw-r--r--t/README23
-rw-r--r--t/lib-terminal.sh4
-rwxr-xr-xt/t1507-rev-parse-upstream.sh14
-rwxr-xr-xt/t1510-repo-setup.sh4
-rwxr-xr-xt/t2028-worktree-move.sh85
-rwxr-xr-xt/t3030-merge-recursive.sh36
-rwxr-xr-xt/t3200-branch.sh2
-rwxr-xr-xt/t3501-revert-cherry-pick.sh2
-rwxr-xr-xt/t3701-add-interactive.sh315
-rwxr-xr-xt/t4013-diff-various.sh5
-rw-r--r--t/t4013/diff.diff-tree_--pretty_--root_--stat_--compact-summary_initial12
-rw-r--r--t/t4013/diff.diff-tree_--pretty_-R_--root_--stat_--compact-summary_initial12
-rw-r--r--t/t4013/diff.diff-tree_--stat_--compact-summary_initial_mode4
-rw-r--r--t/t4013/diff.diff-tree_-R_--stat_--compact-summary_initial_mode4
-rwxr-xr-xt/t4151-am-abort.sh5
-rwxr-xr-xt/t4201-shortlog.sh5
-rwxr-xr-xt/t5302-pack-index.sh5
-rwxr-xr-xt/t5500-fetch-pack.sh12
-rwxr-xr-xt/t5526-fetch-submodules.sh2
-rwxr-xr-xt/t5536-fetch-conflicts.sh22
-rwxr-xr-xt/t5570-git-daemon.sh2
-rwxr-xr-xt/t5616-partial-clone.sh11
-rwxr-xr-xt/t6043-merge-rename-directories.sh3998
-rwxr-xr-xt/t7006-pager.sh49
-rwxr-xr-xt/t7607-merge-overwrite.sh2
-rwxr-xr-xt/t9001-send-email.sh2
-rwxr-xr-xt/t9400-git-cvsserver-server.sh8
-rwxr-xr-xt/t9402-git-cvsserver-refs.sh8
-rwxr-xr-xt/t9902-completion.sh43
-rwxr-xr-xt/t9903-bash-prompt.sh14
-rw-r--r--t/test-lib-functions.sh24
-rw-r--r--t/test-lib.sh19
-rw-r--r--unpack-trees.c5
-rw-r--r--unpack-trees.h4
-rw-r--r--upload-pack.c8
-rw-r--r--userdiff.c2
-rw-r--r--worktree.c96
-rw-r--r--worktree.h18
136 files changed, 34125 insertions, 23611 deletions
diff --git a/Documentation/RelNotes/2.16.3.txt b/Documentation/RelNotes/2.16.3.txt
new file mode 100644
index 0000000..64a0bcb
--- /dev/null
+++ b/Documentation/RelNotes/2.16.3.txt
@@ -0,0 +1,49 @@
+Git v2.16.3 Release Notes
+=========================
+
+Fixes since v2.16.2
+-------------------
+
+ * "git status" after moving a path in the working tree (hence making
+ it appear "removed") and then adding with the -N option (hence
+ making that appear "added") detected it as a rename, but did not
+ report the old and new pathnames correctly.
+
+ * "git commit --fixup" did not allow "-m<message>" option to be used
+ at the same time; allow it to annotate resulting commit with more
+ text.
+
+ * When resetting the working tree files recursively, the working tree
+ of submodules are now also reset to match.
+
+ * Fix for a commented-out code to adjust it to a rather old API change
+ around object ID.
+
+ * When there are too many changed paths, "git diff" showed a warning
+ message but in the middle of a line.
+
+ * The http tracing code, often used to debug connection issues,
+ learned to redact potentially sensitive information from its output
+ so that it can be more safely sharable.
+
+ * Crash fix for a corner case where an error codepath tried to unlock
+ what it did not acquire lock on.
+
+ * The split-index mode had a few corner case bugs fixed.
+
+ * Assorted fixes to "git daemon".
+
+ * Completion of "git merge -s<strategy>" (in contrib/) did not work
+ well in non-C locale.
+
+ * Workaround for segfault with more recent versions of SVN.
+
+ * Recently introduced leaks in fsck have been plugged.
+
+ * Travis CI integration now builds the executable in 'script' phase
+ to follow the established practice, rather than during
+ 'before_script' phase. This allows the CI categorize the failures
+ better ('failed' is project's fault, 'errored' is build
+ environment's).
+
+Also contains various documentation updates and code clean-ups.
diff --git a/Documentation/RelNotes/2.17.0.txt b/Documentation/RelNotes/2.17.0.txt
index 7001dbb..d6db0e1 100644
--- a/Documentation/RelNotes/2.17.0.txt
+++ b/Documentation/RelNotes/2.17.0.txt
@@ -61,6 +61,15 @@ UI, Workflows & Features
* "git diff" and friends learned funcname patterns for Go language
source files.
+ * "git send-email" learned "--reply-to=<address>" option.
+
+ * Funcname pattern used for C# now recognizes "async" keyword.
+
+ * In a way similar to how "git tag" learned to honor the pager
+ setting only in the list mode, "git config" learned to ignore the
+ pager setting when it is used for setting values (i.e. when the
+ purpose of the operation is not to "show").
+
Performance, Internal Implementation, Development Support etc.
@@ -71,6 +80,20 @@ Performance, Internal Implementation, Development Support etc.
* The build procedure for perl/ part has been greatly simplified by
weaning ourselves off of MakeMaker.
+ * Perl 5.8 or greater has been required since Git 1.7.4 released in
+ 2010, but we continued to assume some core modules may not exist and
+ used a conditional "eval { require <<module>> }"; we no longer do
+ this. Some platforms (Fedora/RedHat/CentOS, for example) ship Perl
+ without all core modules by default (e.g. Digest::MD5, File::Temp,
+ File::Spec, Net::Domain, Net::SMTP). Users on such platforms may
+ need to install these additional modules.
+
+ * As a convenience, we install copies of Perl modules we require which
+ are not part of the core Perl distribution (e.g. Error and
+ Mail::Address). Users and packagers whose operating system provides
+ these modules can set NO_PERL_CPAN_FALLBACKS to avoid installing the
+ bundled modules.
+
* In preparation for implementing narrow/partial clone, the machinery
for checking object connectivity used by gc and fsck has been
taught that a missing object is OK when it is referenced by a
@@ -134,6 +157,11 @@ Performance, Internal Implementation, Development Support etc.
is the untracked cache information is often wasteful, and this has
been optimized out.
+ * Various pieces of Perl code we have have been cleaned up.
+
+ * Internal API clean-up to allow write_locked_index() optionally skip
+ writing the in-core index when it is not modified.
+
Also contains various documentation updates and code clean-ups.
@@ -303,6 +331,27 @@ Fixes since v2.16
when the command was reimplemented in C by mistake.
(merge 095c741edd ab/gc-auto-in-commit later to maint).
+ * Allow running a couple of tests with "sh -x".
+ (merge c20bf94abc sg/cvs-tests-with-x later to maint).
+
+ * The codepath to replace an existing entry in the index had a bug in
+ updating the name hash structure, which has been fixed.
+ (merge 0e267b7a24 bp/refresh-cache-ent-rehash-fix later to maint).
+
+ * The transfer.fsckobjects configuration tells "git fetch" to
+ validate the data and connected-ness of objects in the received
+ pack; the code to perform this check has been taught about the
+ narrow clone's convention that missing objects that are reachable
+ from objects in a pack that came from a promissor remote is OK.
+
+ * There was an unused file-scope static variable left in http.c when
+ building for versions of libCURL that is older than 7.19.4, which
+ has been fixed.
+ (merge b8fd6008ec rj/http-code-cleanup later to maint).
+
+ * Shell script portability fix.
+ (merge 206a6ae013 ml/filter-branch-portability-fix later to maint).
+
* Other minor doc, test and build updates and code cleanups.
(merge e2a5a028c7 bw/oidmap-autoinit later to maint).
(merge ec3b4b06f8 cl/t9001-cleanup later to maint).
@@ -340,3 +389,10 @@ Fixes since v2.16
(merge edfb8ba068 ot/ref-filter-cleanup later to maint).
(merge 11395a3b4b jc/test-must-be-empty later to maint).
(merge 768b9d6db7 mk/doc-pretty-fill later to maint).
+ (merge 2caa7b8d27 ab/man-sec-list later to maint).
+ (merge 40c17eb184 ks/t3200-typofix later to maint).
+ (merge bd9958c358 dp/merge-strategy-doc-fix later to maint).
+ (merge 9ee0540a40 js/ming-strftime later to maint).
+ (merge 1775e990f7 tz/complete-tag-delete-tagname later to maint).
+ (merge 00a4b03501 rj/warning-uninitialized-fix later to maint).
+ (merge b635ed97a0 jk/attributes-path-doc later to maint).
diff --git a/Documentation/config.txt b/Documentation/config.txt
index ce9102c..4e0cff8 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -3364,7 +3364,7 @@ uploadpack.packObjectsHook::
stdout.
uploadpack.allowFilter::
- If this option is set, `upload-pack` will advertise partial
+ If this option is set, `upload-pack` will support partial
clone and partial fetch object filtering.
+
Note that this configuration variable is ignored if it is seen in the
diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt
index c330c01..e3a44f0 100644
--- a/Documentation/diff-options.txt
+++ b/Documentation/diff-options.txt
@@ -128,6 +128,14 @@ have to use `--diff-algorithm=default` option.
These parameters can also be set individually with `--stat-width=<width>`,
`--stat-name-width=<name-width>` and `--stat-count=<count>`.
+--compact-summary::
+ Output a condensed summary of extended header information such
+ as file creations or deletions ("new" or "gone", optionally "+l"
+ if it's a symlink) and mode changes ("+x" or "-x" for adding
+ or removing executable bit respectively) in diffstat. The
+ information is put betwen the filename part and the graph
+ part. Implies `--stat`.
+
--numstat::
Similar to `--stat`, but shows number of added and
deleted lines in decimal notation and pathname without
diff --git a/Documentation/git-config.txt b/Documentation/git-config.txt
index 14da5fc..e09ed5d 100644
--- a/Documentation/git-config.txt
+++ b/Documentation/git-config.txt
@@ -233,6 +233,12 @@ See also <<FILES>>.
using `--file`, `--global`, etc) and `on` when searching all
config files.
+CONFIGURATION
+-------------
+`pager.config` is only respected when listing configuration, i.e., when
+using `--list` or any of the `--get-*` which may return multiple results.
+The default is to use a pager.
+
[[FILES]]
FILES
-----
diff --git a/Documentation/git-filter-branch.txt b/Documentation/git-filter-branch.txt
index 3a52e4d..b634043 100644
--- a/Documentation/git-filter-branch.txt
+++ b/Documentation/git-filter-branch.txt
@@ -222,6 +222,14 @@ this purpose, they are instead rewritten to point at the nearest ancestor that
was not excluded.
+EXIT STATUS
+-----------
+
+On success, the exit status is `0`. If the filter can't find any commits to
+rewrite, the exit status is `2`. On any other error, the exit status may be
+any other non-zero value.
+
+
Examples
--------
diff --git a/Documentation/git-index-pack.txt b/Documentation/git-index-pack.txt
index 1b4b65d..138edb4 100644
--- a/Documentation/git-index-pack.txt
+++ b/Documentation/git-index-pack.txt
@@ -77,6 +77,9 @@ OPTIONS
--check-self-contained-and-connected::
Die if the pack contains broken links. For internal use only.
+--fsck-objects::
+ Die if the pack contains broken objects. For internal use only.
+
--threads=<n>::
Specifies the number of threads to spawn when resolving
deltas. This requires that index-pack be compiled with
diff --git a/Documentation/git-send-email.txt b/Documentation/git-send-email.txt
index 8060ea3..71ef97b 100644
--- a/Documentation/git-send-email.txt
+++ b/Documentation/git-send-email.txt
@@ -84,6 +84,11 @@ See the CONFIGURATION section for `sendemail.multiEdit`.
the value of GIT_AUTHOR_IDENT, or GIT_COMMITTER_IDENT if that is not
set, as returned by "git var -l".
+--reply-to=<address>::
+ Specify the address where replies from recipients should go to.
+ Use this if replies to messages should go to another address than what
+ is specified with the --from parameter.
+
--in-reply-to=<identifier>::
Make the first mail (or all the mails with `--no-thread`) appear as a
reply to the given Message-Id, which avoids breaking threads to
diff --git a/Documentation/git-shortlog.txt b/Documentation/git-shortlog.txt
index ee6c547..5e35ea1 100644
--- a/Documentation/git-shortlog.txt
+++ b/Documentation/git-shortlog.txt
@@ -8,8 +8,8 @@ git-shortlog - Summarize 'git log' output
SYNOPSIS
--------
[verse]
-git log --pretty=short | 'git shortlog' [<options>]
'git shortlog' [<options>] [<revision range>] [[\--] <path>...]
+git log --pretty=short | 'git shortlog' [<options>]
DESCRIPTION
-----------
diff --git a/Documentation/git-stash.txt b/Documentation/git-stash.txt
index 056dfb8..7ef8c47 100644
--- a/Documentation/git-stash.txt
+++ b/Documentation/git-stash.txt
@@ -14,7 +14,7 @@ SYNOPSIS
'git stash' ( pop | apply ) [--index] [-q|--quiet] [<stash>]
'git stash' branch <branchname> [<stash>]
'git stash' [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]
- [-u|--include-untracked] [-a|--all] [-m|--message <message>]]
+ [-u|--include-untracked] [-a|--all] [-m|--message <message>]
[--] [<pathspec>...]]
'git stash' clear
'git stash' create [<message>]
diff --git a/Documentation/git-worktree.txt b/Documentation/git-worktree.txt
index 5ac3f68..e7eb24a 100644
--- a/Documentation/git-worktree.txt
+++ b/Documentation/git-worktree.txt
@@ -12,7 +12,9 @@ SYNOPSIS
'git worktree add' [-f] [--detach] [--checkout] [--lock] [-b <new-branch>] <path> [<commit-ish>]
'git worktree list' [--porcelain]
'git worktree lock' [--reason <string>] <worktree>
+'git worktree move' <worktree> <new-path>
'git worktree prune' [-n] [-v] [--expire <expire>]
+'git worktree remove' [--force] <worktree>
'git worktree unlock' <worktree>
DESCRIPTION
@@ -34,10 +36,6 @@ The working tree's administrative files in the repository (see
`git worktree prune` in the main or any linked working tree to
clean up any stale administrative files.
-If you move a linked working tree, you need to manually update the
-administrative files so that they do not get pruned automatically. See
-section "DETAILS" for more information.
-
If a linked working tree is stored on a portable device or network share
which is not always mounted, you can prevent its administrative files from
being pruned by issuing the `git worktree lock` command, optionally
@@ -80,10 +78,22 @@ files from being pruned automatically. This also prevents it from
being moved or deleted. Optionally, specify a reason for the lock
with `--reason`.
+move::
+
+Move a working tree to a new location. Note that the main working tree
+or linked working trees containing submodules cannot be moved.
+
prune::
Prune working tree information in $GIT_DIR/worktrees.
+remove::
+
+Remove a working tree. Only clean working trees (no untracked files
+and no modification in tracked files) can be removed. Unclean working
+trees or ones with submodules can be removed with `--force`. The main
+working tree cannot be removed.
+
unlock::
Unlock a working tree, allowing it to be pruned, moved or deleted.
@@ -93,9 +103,10 @@ OPTIONS
-f::
--force::
- By default, `add` refuses to create a new working tree when `<commit-ish>` is a branch name and
- is already checked out by another working tree. This option overrides
- that safeguard.
+ By default, `add` refuses to create a new working tree when
+ `<commit-ish>` is a branch name and is already checked out by
+ another working tree and `remove` refuses to remove an unclean
+ working tree. This option overrides that safeguard.
-b <new-branch>::
-B <new-branch>::
@@ -197,7 +208,7 @@ thumb is do not make any assumption about whether a path belongs to
$GIT_DIR or $GIT_COMMON_DIR when you need to directly access something
inside $GIT_DIR. Use `git rev-parse --git-path` to get the final path.
-If you move a linked working tree, you need to update the 'gitdir' file
+If you manually move a linked working tree, you need to update the 'gitdir' file
in the entry's directory. For example, if a linked working tree is moved
to `/newpath/test-next` and its `.git` file points to
`/path/main/.git/worktrees/test-next`, then update
@@ -277,13 +288,6 @@ Multiple checkout in general is still experimental, and the support
for submodules is incomplete. It is NOT recommended to make multiple
checkouts of a superproject.
-git-worktree could provide more automation for tasks currently
-performed manually, such as:
-
-- `remove` to remove a linked working tree and its administrative files (and
- warn if the working tree is dirty)
-- `mv` to move or rename a working tree and update its administrative files
-
GIT
---
Part of the linkgit:git[1] suite
diff --git a/Documentation/git.txt b/Documentation/git.txt
index 8163b57..4767860 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
@@ -849,6 +849,9 @@ Report bugs to the Git mailing list <git@vger.kernel.org> where the
development and maintenance is primarily done. You do not have to be
subscribed to the list to send a message there.
+Issues which are security relevant should be disclosed privately to
+the Git Security mailing list <git-security@googlegroups.com>.
+
SEE ALSO
--------
linkgit:gittutorial[7], linkgit:gittutorial-2[7],
diff --git a/Documentation/gitattributes.txt b/Documentation/gitattributes.txt
index d52b254..1094fe2 100644
--- a/Documentation/gitattributes.txt
+++ b/Documentation/gitattributes.txt
@@ -56,9 +56,16 @@ Unspecified::
When more than one pattern matches the path, a later line
overrides an earlier line. This overriding is done per
-attribute. The rules how the pattern matches paths are the
-same as in `.gitignore` files; see linkgit:gitignore[5].
-Unlike `.gitignore`, negative patterns are forbidden.
+attribute.
+
+The rules by which the pattern matches paths are the same as in
+`.gitignore` files (see linkgit:gitignore[5]), with a few exceptions:
+
+ - negative patterns are forbidden
+
+ - patterns that match a directory do not recursively match paths
+ inside that directory (so using the trailing-slash `path/` syntax is
+ pointless in an attributes file; use `path/**` instead)
When deciding what attributes are assigned to a path, Git
consults `$GIT_DIR/info/attributes` file (which has the highest
diff --git a/Documentation/merge-strategies.txt b/Documentation/merge-strategies.txt
index fd5d748..4a58aad 100644
--- a/Documentation/merge-strategies.txt
+++ b/Documentation/merge-strategies.txt
@@ -40,7 +40,7 @@ the other tree did, declaring 'our' history contains all that happened in it.
theirs;;
This is the opposite of 'ours'; note that, unlike 'ours', there is
- no 'theirs' merge stragegy to confuse this merge option with.
+ no 'theirs' merge strategy to confuse this merge option with.
patience;;
With this option, 'merge-recursive' spends a little extra time
diff --git a/Documentation/technical/http-protocol.txt b/Documentation/technical/http-protocol.txt
index a0e45f2..64f49d0 100644
--- a/Documentation/technical/http-protocol.txt
+++ b/Documentation/technical/http-protocol.txt
@@ -214,10 +214,12 @@ smart server reply:
S: Cache-Control: no-cache
S:
S: 001e# service=git-upload-pack\n
+ S: 0000
S: 004895dcfa3633004da0049d3d0fa03f80589cbcaf31 refs/heads/maint\0multi_ack\n
S: 0042d049f6c27a2244e12041955e262a404c7faba355 refs/heads/master\n
S: 003c2cb58b79488a98d2721cea644875a8dd0026b115 refs/tags/v1.0\n
S: 003fa3c2e2402b99163d1d59756e5f207ae21cccba4c refs/tags/v1.0^{}\n
+ S: 0000
The client may send Extra Parameters (see
Documentation/technical/pack-protocol.txt) as a colon-separated string
@@ -277,6 +279,7 @@ The returned response contains "version 1" if "version=1" was sent as an
Extra Parameter.
smart_reply = PKT-LINE("# service=$servicename" LF)
+ "0000"
*1("version 1")
ref_list
"0000"
diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
index 0c86f1c..1b4624c 100755
--- a/GIT-VERSION-GEN
+++ b/GIT-VERSION-GEN
@@ -1,7 +1,7 @@
#!/bin/sh
GVF=GIT-VERSION-FILE
-DEF_VER=v2.16.GIT
+DEF_VER=v2.17.0
LF='
'
diff --git a/INSTALL b/INSTALL
index 808e07b..c39006e 100644
--- a/INSTALL
+++ b/INSTALL
@@ -88,9 +88,9 @@ Issues of note:
export GIT_EXEC_PATH PATH GITPERLLIB
- By default (unless NO_PERL is provided) Git will ship various perl
- scripts & libraries it needs. However, for simplicity it doesn't
- use the ExtUtils::MakeMaker toolchain to decide where to place the
- perl libraries. Depending on the system this can result in the perl
+ scripts. However, for simplicity it doesn't use the
+ ExtUtils::MakeMaker toolchain to decide where to place the perl
+ libraries. Depending on the system this can result in the perl
libraries not being where you'd like them if they're expected to be
used by things other than Git itself.
@@ -102,6 +102,11 @@ Issues of note:
Will result in e.g. perllibdir=/usr/share/perl/5.26.1 on Debian,
perllibdir=/usr/share/perl5 (which we'd use by default) on CentOS.
+ - Unless NO_PERL is provided Git will ship various perl libraries it
+ needs. Distributors of Git will usually want to set
+ NO_PERL_CPAN_FALLBACKS if NO_PERL is not provided to use their own
+ copies of the CPAN modules Git needs.
+
- Git is reasonably self-sufficient, but does depend on a few external
programs and libraries. Git can be used without most of them by adding
the approriate "NO_<LIBRARY>=YesPlease" to the make command line or
@@ -121,7 +126,8 @@ Issues of note:
Redhat/Fedora are reported to ship Perl binary package with some
core modules stripped away (see http://lwn.net/Articles/477234/),
so you might need to install additional packages other than Perl
- itself, e.g. Time::HiRes.
+ itself, e.g. Digest::MD5, File::Spec, File::Temp, Net::Domain,
+ Net::SMTP, and Time::HiRes.
- git-imap-send needs the OpenSSL library to talk IMAP over SSL if
you are using libcurl older than 7.34.0. Otherwise you can use
diff --git a/Makefile b/Makefile
index de4b8f0..96f6138 100644
--- a/Makefile
+++ b/Makefile
@@ -29,10 +29,10 @@ all::
# Perl-compatible regular expressions instead of standard or extended
# POSIX regular expressions.
#
-# Currently USE_LIBPCRE is a synonym for USE_LIBPCRE1, define
-# USE_LIBPCRE2 instead if you'd like to use version 2 of the PCRE
-# library. The USE_LIBPCRE flag will likely be changed to mean v2 by
-# default in future releases.
+# USE_LIBPCRE is a synonym for USE_LIBPCRE2, define USE_LIBPCRE1
+# instead if you'd like to use the legacy version 1 of the PCRE
+# library. Support for version 1 will likely be removed in some future
+# release of Git, as upstream has all but abandoned it.
#
# When using USE_LIBPCRE1, define NO_LIBPCRE1_JIT if the PCRE v1
# library is compiled without --enable-jit. We will auto-detect
@@ -296,6 +296,12 @@ all::
#
# Define NO_PERL if you do not want Perl scripts or libraries at all.
#
+# Define NO_PERL_CPAN_FALLBACKS if you do not want to install bundled
+# copies of CPAN modules that serve as a fallback in case the modules
+# are not available on the system. This option is intended for
+# distributions that want to use their packaged versions of Perl
+# modules, instead of the fallbacks shipped with Git.
+#
# Define PYTHON_PATH to the path of your Python binary (often /usr/bin/python
# but /usr/bin/python2.7 on some platforms).
#
@@ -329,6 +335,13 @@ all::
# when hardlinking a file to another name and unlinking the original file right
# away (some NTFS drivers seem to zero the contents in that scenario).
#
+# Define INSTALL_SYMLINKS if you prefer to have everything that can be
+# symlinked between bin/ and libexec/ to use relative symlinks between
+# the two. This option overrides NO_CROSS_DIRECTORY_HARDLINKS and
+# NO_INSTALL_HARDLINKS which will also use symlinking by indirection
+# within the same directory in some cases, INSTALL_SYMLINKS will
+# always symlink to the final target directly.
+#
# Define NO_CROSS_DIRECTORY_HARDLINKS if you plan to distribute the installed
# programs as a tar, where bin/ and libexec/ might be on different file systems.
#
@@ -468,8 +481,7 @@ ARFLAGS = rcs
# This can help installing the suite in a relocatable way.
prefix = $(HOME)
-bindir_relative = bin
-bindir = $(prefix)/$(bindir_relative)
+bindir = $(prefix)/bin
mandir = $(prefix)/share/man
infodir = $(prefix)/share/info
gitexecdir = libexec/git-core
@@ -486,8 +498,10 @@ lib = lib
# DESTDIR =
pathsep = :
+bindir_relative = $(patsubst $(prefix)/%,%,$(bindir))
mandir_relative = $(patsubst $(prefix)/%,%,$(mandir))
infodir_relative = $(patsubst $(prefix)/%,%,$(infodir))
+gitexecdir_relative = $(patsubst $(prefix)/%,%,$(gitexecdir))
htmldir_relative = $(patsubst $(prefix)/%,%,$(htmldir))
export prefix bindir sharedir sysconfdir gitwebdir perllibdir localedir
@@ -1164,13 +1178,18 @@ ifdef NO_LIBGEN_H
COMPAT_OBJS += compat/basename.o
endif
-USE_LIBPCRE1 ?= $(USE_LIBPCRE)
+USE_LIBPCRE2 ?= $(USE_LIBPCRE)
-ifneq (,$(USE_LIBPCRE1))
- ifdef USE_LIBPCRE2
-$(error Only set USE_LIBPCRE1 (or its alias USE_LIBPCRE) or USE_LIBPCRE2, not both!)
+ifneq (,$(USE_LIBPCRE2))
+ ifdef USE_LIBPCRE1
+$(error Only set USE_LIBPCRE2 (or its alias USE_LIBPCRE) or USE_LIBPCRE1, not both!)
endif
+ BASIC_CFLAGS += -DUSE_LIBPCRE2
+ EXTLIBS += -lpcre2-8
+endif
+
+ifdef USE_LIBPCRE1
BASIC_CFLAGS += -DUSE_LIBPCRE1
EXTLIBS += -lpcre
@@ -1179,11 +1198,6 @@ ifdef NO_LIBPCRE1_JIT
endif
endif
-ifdef USE_LIBPCRE2
- BASIC_CFLAGS += -DUSE_LIBPCRE2
- EXTLIBS += -lpcre2-8
-endif
-
ifdef LIBPCREDIR
BASIC_CFLAGS += -I$(LIBPCREDIR)/include
EXTLIBS += -L$(LIBPCREDIR)/$(lib) $(CC_LD_DYNPATH)$(LIBPCREDIR)/$(lib)
@@ -1735,6 +1749,7 @@ infodir_relative_SQ = $(subst ','\'',$(infodir_relative))
perllibdir_SQ = $(subst ','\'',$(perllibdir))
localedir_SQ = $(subst ','\'',$(localedir))
gitexecdir_SQ = $(subst ','\'',$(gitexecdir))
+gitexecdir_relative_SQ = $(subst ','\'',$(gitexecdir_relative))
template_dir_SQ = $(subst ','\'',$(template_dir))
htmldir_relative_SQ = $(subst ','\'',$(htmldir_relative))
prefix_SQ = $(subst ','\'',$(prefix))
@@ -2304,14 +2319,22 @@ po/build/locale/%/LC_MESSAGES/git.mo: po/%.po
LIB_PERL := $(wildcard perl/Git.pm perl/Git/*.pm perl/Git/*/*.pm perl/Git/*/*/*.pm)
LIB_PERL_GEN := $(patsubst perl/%.pm,perl/build/lib/%.pm,$(LIB_PERL))
+LIB_CPAN := $(wildcard perl/FromCPAN/*.pm perl/FromCPAN/*/*.pm)
+LIB_CPAN_GEN := $(patsubst perl/%.pm,perl/build/lib/%.pm,$(LIB_CPAN))
ifndef NO_PERL
all:: $(LIB_PERL_GEN)
+ifndef NO_PERL_CPAN_FALLBACKS
+all:: $(LIB_CPAN_GEN)
+endif
+NO_PERL_CPAN_FALLBACKS_SQ = $(subst ','\'',$(NO_PERL_CPAN_FALLBACKS))
endif
perl/build/lib/%.pm: perl/%.pm
$(QUIET_GEN)mkdir -p $(dir $@) && \
- sed -e 's|@@LOCALEDIR@@|$(localedir_SQ)|g' < $< > $@
+ sed -e 's|@@LOCALEDIR@@|$(localedir_SQ)|g' \
+ -e 's|@@NO_PERL_CPAN_FALLBACKS@@|$(NO_PERL_CPAN_FALLBACKS_SQ)|g' \
+ < $< > $@
perl/build/man/man3/Git.3pm: perl/Git.pm
$(QUIET_GEN)mkdir -p $(dir $@) && \
@@ -2592,35 +2615,44 @@ endif
bindir=$$(cd '$(DESTDIR_SQ)$(bindir_SQ)' && pwd) && \
execdir=$$(cd '$(DESTDIR_SQ)$(gitexec_instdir_SQ)' && pwd) && \
+ destdir_from_execdir_SQ=$$(echo '$(gitexecdir_relative_SQ)' | sed -e 's|[^/][^/]*|..|g') && \
{ test "$$bindir/" = "$$execdir/" || \
for p in git$X $(filter $(install_bindir_programs),$(ALL_PROGRAMS)); do \
$(RM) "$$execdir/$$p" && \
- test -z "$(NO_INSTALL_HARDLINKS)$(NO_CROSS_DIRECTORY_HARDLINKS)" && \
- ln "$$bindir/$$p" "$$execdir/$$p" 2>/dev/null || \
- cp "$$bindir/$$p" "$$execdir/$$p" || exit; \
+ test -n "$(INSTALL_SYMLINKS)" && \
+ ln -s "$$destdir_from_execdir_SQ/$(bindir_relative_SQ)/$$p" "$$execdir/$$p" || \
+ { test -z "$(NO_INSTALL_HARDLINKS)$(NO_CROSS_DIRECTORY_HARDLINKS)" && \
+ ln "$$bindir/$$p" "$$execdir/$$p" 2>/dev/null || \
+ cp "$$bindir/$$p" "$$execdir/$$p" || exit; } \
done; \
} && \
for p in $(filter $(install_bindir_programs),$(BUILT_INS)); do \
$(RM) "$$bindir/$$p" && \
- test -z "$(NO_INSTALL_HARDLINKS)" && \
- ln "$$bindir/git$X" "$$bindir/$$p" 2>/dev/null || \
- ln -s "git$X" "$$bindir/$$p" 2>/dev/null || \
- cp "$$bindir/git$X" "$$bindir/$$p" || exit; \
+ test -n "$(INSTALL_SYMLINKS)" && \
+ ln -s "git$X" "$$bindir/$$p" || \
+ { test -z "$(NO_INSTALL_HARDLINKS)" && \
+ ln "$$bindir/git$X" "$$bindir/$$p" 2>/dev/null || \
+ ln -s "git$X" "$$bindir/$$p" 2>/dev/null || \
+ cp "$$bindir/git$X" "$$bindir/$$p" || exit; } \
done && \
for p in $(BUILT_INS); do \
$(RM) "$$execdir/$$p" && \
- test -z "$(NO_INSTALL_HARDLINKS)" && \
- ln "$$execdir/git$X" "$$execdir/$$p" 2>/dev/null || \
- ln -s "git$X" "$$execdir/$$p" 2>/dev/null || \
- cp "$$execdir/git$X" "$$execdir/$$p" || exit; \
+ test -n "$(INSTALL_SYMLINKS)" && \
+ ln -s "$$destdir_from_execdir_SQ/$(bindir_relative_SQ)/git$X" "$$execdir/$$p" || \
+ { test -z "$(NO_INSTALL_HARDLINKS)" && \
+ ln "$$execdir/git$X" "$$execdir/$$p" 2>/dev/null || \
+ ln -s "git$X" "$$execdir/$$p" 2>/dev/null || \
+ cp "$$execdir/git$X" "$$execdir/$$p" || exit; } \
done && \
remote_curl_aliases="$(REMOTE_CURL_ALIASES)" && \
for p in $$remote_curl_aliases; do \
$(RM) "$$execdir/$$p" && \
- test -z "$(NO_INSTALL_HARDLINKS)" && \
- ln "$$execdir/git-remote-http$X" "$$execdir/$$p" 2>/dev/null || \
- ln -s "git-remote-http$X" "$$execdir/$$p" 2>/dev/null || \
- cp "$$execdir/git-remote-http$X" "$$execdir/$$p" || exit; \
+ test -n "$(INSTALL_SYMLINKS)" && \
+ ln -s "git-remote-http$X" "$$execdir/$$p" || \
+ { test -z "$(NO_INSTALL_HARDLINKS)" && \
+ ln "$$execdir/git-remote-http$X" "$$execdir/$$p" 2>/dev/null || \
+ ln -s "git-remote-http$X" "$$execdir/$$p" 2>/dev/null || \
+ cp "$$execdir/git-remote-http$X" "$$execdir/$$p" || exit; } \
done && \
./check_bindir "z$$bindir" "z$$execdir" "$$bindir/git-add$X"
diff --git a/apply.c b/apply.c
index b1e1bd5..7e5792c 100644
--- a/apply.c
+++ b/apply.c
@@ -4943,8 +4943,9 @@ int apply_parse_options(int argc, const char **argv,
N_("make sure the patch is applicable to the current index")),
OPT_BOOL(0, "cached", &state->cached,
N_("apply a patch without touching the working tree")),
- OPT_BOOL(0, "unsafe-paths", &state->unsafe_paths,
- N_("accept a patch that touches outside the working area")),
+ OPT_BOOL_F(0, "unsafe-paths", &state->unsafe_paths,
+ N_("accept a patch that touches outside the working area"),
+ PARSE_OPT_NOCOMPLETE),
OPT_BOOL(0, "apply", force_apply,
N_("also apply the patch (use with --stat/--summary/--check)")),
OPT_BOOL('3', "3way", &state->threeway,
diff --git a/builtin/add.c b/builtin/add.c
index bf01d89..9ef7fb0 100644
--- a/builtin/add.c
+++ b/builtin/add.c
@@ -294,7 +294,7 @@ static struct option builtin_add_options[] = {
OPT_BOOL('i', "interactive", &add_interactive, N_("interactive picking")),
OPT_BOOL('p', "patch", &patch_interactive, N_("select hunks interactively")),
OPT_BOOL('e', "edit", &edit_interactive, N_("edit current diff and apply")),
- OPT__FORCE(&ignored_too, N_("allow adding otherwise ignored files")),
+ OPT__FORCE(&ignored_too, N_("allow adding otherwise ignored files"), 0),
OPT_BOOL('u', "update", &take_worktree_changes, N_("update tracked files")),
OPT_BOOL(0, "renormalize", &add_renormalize, N_("renormalize EOL of tracked files (implies -u)")),
OPT_BOOL('N', "intent-to-add", &intent_to_add, N_("record only the fact that the path will be added later")),
@@ -534,10 +534,9 @@ int cmd_add(int argc, const char **argv, const char *prefix)
unplug_bulk_checkin();
finish:
- if (active_cache_changed) {
- if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
- die(_("Unable to write new index file"));
- }
+ if (write_locked_index(&the_index, &lock_file,
+ COMMIT_LOCK | SKIP_IF_UNCHANGED))
+ die(_("Unable to write new index file"));
UNLEAK(pathspec);
UNLEAK(dir);
diff --git a/builtin/branch.c b/builtin/branch.c
index 659deb3..5bd2a0d 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -615,7 +615,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
OPT_BOOL('l', "create-reflog", &reflog, N_("create the branch's reflog")),
OPT_BOOL(0, "edit-description", &edit_description,
N_("edit the description for the branch")),
- OPT__FORCE(&force, N_("force creation, move/rename, deletion")),
+ OPT__FORCE(&force, N_("force creation, move/rename, deletion"), PARSE_OPT_NOCOMPLETE),
OPT_MERGED(&filter, N_("print only branches that are merged")),
OPT_NO_MERGED(&filter, N_("print only branches that are not merged")),
OPT_COLUMN(0, "column", &colopts, N_("list branches in columns")),
diff --git a/builtin/checkout-index.c b/builtin/checkout-index.c
index b0e78b8..a730f6a 100644
--- a/builtin/checkout-index.c
+++ b/builtin/checkout-index.c
@@ -157,7 +157,7 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix)
struct option builtin_checkout_index_options[] = {
OPT_BOOL('a', "all", &all,
N_("check out all files in the index")),
- OPT__FORCE(&force, N_("force overwrite of existing files")),
+ OPT__FORCE(&force, N_("force overwrite of existing files"), 0),
OPT__QUIET(&quiet,
N_("no warning for existing files and files not in index")),
OPT_BOOL('n', "no-create", &not_new,
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 45968c2..b49b582 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -1117,9 +1117,12 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
2),
OPT_SET_INT('3', "theirs", &opts.writeout_stage, N_("checkout their version for unmerged files"),
3),
- OPT__FORCE(&opts.force, N_("force checkout (throw away local modifications)")),
+ OPT__FORCE(&opts.force, N_("force checkout (throw away local modifications)"),
+ PARSE_OPT_NOCOMPLETE),
OPT_BOOL('m', "merge", &opts.merge, N_("perform a 3-way merge with the new branch")),
- OPT_BOOL(0, "overwrite-ignore", &opts.overwrite_ignore, N_("update ignored files (default)")),
+ OPT_BOOL_F(0, "overwrite-ignore", &opts.overwrite_ignore,
+ N_("update ignored files (default)"),
+ PARSE_OPT_NOCOMPLETE),
OPT_STRING(0, "conflict", &conflict_style, N_("style"),
N_("conflict style (merge or diff3)")),
OPT_BOOL('p', "patch", &opts.patch_mode, N_("select hunks interactively")),
diff --git a/builtin/clean.c b/builtin/clean.c
index 189e206..fad533a 100644
--- a/builtin/clean.c
+++ b/builtin/clean.c
@@ -909,7 +909,7 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
struct option options[] = {
OPT__QUIET(&quiet, N_("do not print names of files removed")),
OPT__DRY_RUN(&dry_run, N_("dry run")),
- OPT__FORCE(&force, N_("force")),
+ OPT__FORCE(&force, N_("force"), PARSE_OPT_NOCOMPLETE),
OPT_BOOL('i', "interactive", &interactive, N_("interactive cleaning")),
OPT_BOOL('d', NULL, &remove_directories,
N_("remove whole directories")),
diff --git a/builtin/commit.c b/builtin/commit.c
index 092077c..37fcb55 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -389,13 +389,9 @@ static const char *prepare_index(int argc, const char **argv, const char *prefix
if (active_cache_changed
|| !cache_tree_fully_valid(active_cache_tree))
update_main_cache_tree(WRITE_TREE_SILENT);
- if (active_cache_changed) {
- if (write_locked_index(&the_index, &index_lock,
- COMMIT_LOCK))
- die(_("unable to write new_index file"));
- } else {
- rollback_lock_file(&index_lock);
- }
+ if (write_locked_index(&the_index, &index_lock,
+ COMMIT_LOCK | SKIP_IF_UNCHANGED))
+ die(_("unable to write new_index file"));
commit_style = COMMIT_AS_IS;
ret = get_index_file();
goto out;
diff --git a/builtin/config.c b/builtin/config.c
index ab5f954..01169dd 100644
--- a/builtin/config.c
+++ b/builtin/config.c
@@ -48,6 +48,13 @@ static int show_origin;
#define ACTION_GET_COLORBOOL (1<<14)
#define ACTION_GET_URLMATCH (1<<15)
+/*
+ * The actions "ACTION_LIST | ACTION_GET_*" which may produce more than
+ * one line of output and which should therefore be paged.
+ */
+#define PAGING_ACTIONS (ACTION_LIST | ACTION_GET_ALL | \
+ ACTION_GET_REGEXP | ACTION_GET_URLMATCH)
+
#define TYPE_BOOL (1<<0)
#define TYPE_INT (1<<1)
#define TYPE_BOOL_OR_INT (1<<2)
@@ -594,6 +601,9 @@ int cmd_config(int argc, const char **argv, const char *prefix)
usage_with_options(builtin_config_usage, builtin_config_options);
}
+ if (actions & PAGING_ACTIONS)
+ setup_auto_pager("config", 1);
+
if (actions == ACTION_LIST) {
check_argc(argc, 0, 0);
if (config_with_options(show_all_config, NULL,
diff --git a/builtin/fetch.c b/builtin/fetch.c
index 90bb659..8295f92 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -126,7 +126,7 @@ static struct option builtin_fetch_options[] = {
N_("append to .git/FETCH_HEAD instead of overwriting")),
OPT_STRING(0, "upload-pack", &upload_pack, N_("path"),
N_("path to upload pack on remote end")),
- OPT__FORCE(&force, N_("force overwrite of local branch")),
+ OPT__FORCE(&force, N_("force overwrite of local branch"), 0),
OPT_BOOL('m', "multiple", &multiple,
N_("fetch from multiple remotes")),
OPT_SET_INT('t', "tags", &tags,
diff --git a/builtin/gc.c b/builtin/gc.c
index 77fa720..f51e5a6 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -360,8 +360,11 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
N_("prune unreferenced objects"),
PARSE_OPT_OPTARG, NULL, (intptr_t)prune_expire },
OPT_BOOL(0, "aggressive", &aggressive, N_("be more thorough (increased runtime)")),
- OPT_BOOL(0, "auto", &auto_gc, N_("enable auto-gc mode")),
- OPT_BOOL(0, "force", &force, N_("force running gc even if there may be another gc running")),
+ OPT_BOOL_F(0, "auto", &auto_gc, N_("enable auto-gc mode"),
+ PARSE_OPT_NOCOMPLETE),
+ OPT_BOOL_F(0, "force", &force,
+ N_("force running gc even if there may be another gc running"),
+ PARSE_OPT_NOCOMPLETE),
OPT_END()
};
diff --git a/builtin/grep.c b/builtin/grep.c
index bf50bab..668cb80 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c
@@ -839,8 +839,9 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
OPT_BOOL('L', "files-without-match",
&opt.unmatch_name_only,
N_("show only the names of files without match")),
- OPT_BOOL('z', "null", &opt.null_following_name,
- N_("print NUL after filenames")),
+ OPT_BOOL_F('z', "null", &opt.null_following_name,
+ N_("print NUL after filenames"),
+ PARSE_OPT_NOCOMPLETE),
OPT_BOOL('c', "count", &opt.count,
N_("show the number of matches instead of matching lines")),
OPT__COLOR(&opt.color, N_("highlight matches")),
@@ -891,9 +892,11 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
OPT_GROUP(""),
{ OPTION_STRING, 'O', "open-files-in-pager", &show_in_pager,
N_("pager"), N_("show matching files in the pager"),
- PARSE_OPT_OPTARG, NULL, (intptr_t)default_pager },
- OPT_BOOL(0, "ext-grep", &external_grep_allowed__ignored,
- N_("allow calling of grep(1) (ignored by this build)")),
+ PARSE_OPT_OPTARG | PARSE_OPT_NOCOMPLETE,
+ NULL, (intptr_t)default_pager },
+ OPT_BOOL_F(0, "ext-grep", &external_grep_allowed__ignored,
+ N_("allow calling of grep(1) (ignored by this build)"),
+ PARSE_OPT_NOCOMPLETE),
OPT_END()
};
diff --git a/builtin/index-pack.c b/builtin/index-pack.c
index 7873e72..657a5dd 100644
--- a/builtin/index-pack.c
+++ b/builtin/index-pack.c
@@ -49,6 +49,7 @@ struct thread_local {
int pack_fd;
};
+/* Remember to update object flag allocation in object.h */
#define FLAG_LINK (1u<<20)
#define FLAG_CHECKED (1u<<21)
@@ -827,7 +828,7 @@ static void sha1_object(const void *data, struct object_entry *obj_entry,
free(has_data);
}
- if (strict) {
+ if (strict || do_fsck_object) {
read_lock();
if (type == OBJ_BLOB) {
struct blob *blob = lookup_blob(oid);
@@ -853,7 +854,7 @@ static void sha1_object(const void *data, struct object_entry *obj_entry,
if (do_fsck_object &&
fsck_object(obj, buf, size, &fsck_options))
die(_("Error in object"));
- if (fsck_walk(obj, NULL, &fsck_options))
+ if (strict && fsck_walk(obj, NULL, &fsck_options))
die(_("Not all child objects of %s are reachable"), oid_to_hex(&obj->oid));
if (obj->type == OBJ_TREE) {
@@ -1689,6 +1690,8 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
} else if (!strcmp(arg, "--check-self-contained-and-connected")) {
strict = 1;
check_self_contained_and_connected = 1;
+ } else if (!strcmp(arg, "--fsck-objects")) {
+ do_fsck_object = 1;
} else if (!strcmp(arg, "--verify")) {
verify = 1;
} else if (!strcmp(arg, "--verify-stat")) {
diff --git a/builtin/ls-remote.c b/builtin/ls-remote.c
index c4be98a..540d564 100644
--- a/builtin/ls-remote.c
+++ b/builtin/ls-remote.c
@@ -60,8 +60,9 @@ int cmd_ls_remote(int argc, const char **argv, const char *prefix)
OPT_BIT(0, "refs", &flags, N_("do not show peeled tags"), REF_NORMAL),
OPT_BOOL(0, "get-url", &get_url,
N_("take url.<base>.insteadOf into account")),
- OPT_SET_INT(0, "exit-code", &status,
- N_("exit with exit code 2 if no matching refs are found"), 2),
+ OPT_SET_INT_F(0, "exit-code", &status,
+ N_("exit with exit code 2 if no matching refs are found"),
+ 2, PARSE_OPT_NOCOMPLETE),
OPT_BOOL(0, "symref", &show_symref_target,
N_("show underlying ref in addition to the object pointed by it")),
OPT_END()
diff --git a/builtin/merge.c b/builtin/merge.c
index b4f3210..8746c5e 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -652,10 +652,9 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
hold_locked_index(&lock, LOCK_DIE_ON_ERROR);
refresh_cache(REFRESH_QUIET);
- if (active_cache_changed &&
- write_locked_index(&the_index, &lock, COMMIT_LOCK))
+ if (write_locked_index(&the_index, &lock,
+ COMMIT_LOCK | SKIP_IF_UNCHANGED))
return error(_("Unable to write index."));
- rollback_lock_file(&lock);
if (!strcmp(strategy, "recursive") || !strcmp(strategy, "subtree")) {
int clean, x;
@@ -692,10 +691,9 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
remoteheads->item, reversed, &result);
if (clean < 0)
exit(128);
- if (active_cache_changed &&
- write_locked_index(&the_index, &lock, COMMIT_LOCK))
+ if (write_locked_index(&the_index, &lock,
+ COMMIT_LOCK | SKIP_IF_UNCHANGED))
die (_("unable to write %s"), get_index_file());
- rollback_lock_file(&lock);
return clean ? 0 : 1;
} else {
return try_merge_command(strategy, xopts_nr, xopts,
@@ -811,10 +809,9 @@ static int merge_trivial(struct commit *head, struct commit_list *remoteheads)
hold_locked_index(&lock, LOCK_DIE_ON_ERROR);
refresh_cache(REFRESH_QUIET);
- if (active_cache_changed &&
- write_locked_index(&the_index, &lock, COMMIT_LOCK))
+ if (write_locked_index(&the_index, &lock,
+ COMMIT_LOCK | SKIP_IF_UNCHANGED))
return error(_("Unable to write index."));
- rollback_lock_file(&lock);
write_tree_trivial(&result_tree);
printf(_("Wonderful.\n"));
diff --git a/builtin/mv.c b/builtin/mv.c
index 8ce6a2d..6d141f7 100644
--- a/builtin/mv.c
+++ b/builtin/mv.c
@@ -122,7 +122,8 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
struct option builtin_mv_options[] = {
OPT__VERBOSE(&verbose, N_("be verbose")),
OPT__DRY_RUN(&show_only, N_("dry run")),
- OPT__FORCE(&force, N_("force move/rename even if target exists")),
+ OPT__FORCE(&force, N_("force move/rename even if target exists"),
+ PARSE_OPT_NOCOMPLETE),
OPT_BOOL('k', NULL, &ignore_errors, N_("skip move/rename errors")),
OPT_END(),
};
@@ -292,8 +293,8 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
if (gitmodules_modified)
stage_updated_gitmodules(&the_index);
- if (active_cache_changed &&
- write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
+ if (write_locked_index(&the_index, &lock_file,
+ COMMIT_LOCK | SKIP_IF_UNCHANGED))
die(_("Unable to write new index file"));
return 0;
diff --git a/builtin/notes.c b/builtin/notes.c
index 5ddfa44..921e08d 100644
--- a/builtin/notes.c
+++ b/builtin/notes.c
@@ -413,7 +413,7 @@ static int add(int argc, const char **argv, const char *prefix)
parse_reuse_arg},
OPT_BOOL(0, "allow-empty", &allow_empty,
N_("allow storing empty note")),
- OPT__FORCE(&force, N_("replace existing notes")),
+ OPT__FORCE(&force, N_("replace existing notes"), PARSE_OPT_NOCOMPLETE),
OPT_END()
};
@@ -484,7 +484,7 @@ static int copy(int argc, const char **argv, const char *prefix)
struct notes_tree *t;
const char *rewrite_cmd = NULL;
struct option options[] = {
- OPT__FORCE(&force, N_("replace existing notes")),
+ OPT__FORCE(&force, N_("replace existing notes"), PARSE_OPT_NOCOMPLETE),
OPT_BOOL(0, "stdin", &from_stdin, N_("read objects from stdin")),
OPT_STRING(0, "for-rewrite", &rewrite_cmd, N_("command"),
N_("load rewriting config for <command> (implies "
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index a1d6746..e7e6732 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -2544,6 +2544,7 @@ static void read_object_list_from_stdin(void)
}
}
+/* Remember to update object flag allocation in object.h */
#define OBJECT_ADDED (1u<<20)
static void show_commit(struct commit *commit, void *data)
diff --git a/builtin/pull.c b/builtin/pull.c
index 1876271..e32d6cd 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -193,7 +193,7 @@ static struct option pull_options[] = {
OPT_PASSTHRU(0, "upload-pack", &opt_upload_pack, N_("path"),
N_("path to upload pack on remote end"),
0),
- OPT__FORCE(&opt_force, N_("force overwrite of local branch")),
+ OPT__FORCE(&opt_force, N_("force overwrite of local branch"), 0),
OPT_PASSTHRU('t', "tags", &opt_tags, NULL,
N_("fetch all tags and associated objects"),
PARSE_OPT_NOARG),
diff --git a/builtin/push.c b/builtin/push.c
index 1c28427..013c20d 100644
--- a/builtin/push.c
+++ b/builtin/push.c
@@ -548,7 +548,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)
{ OPTION_CALLBACK, 0, "recurse-submodules", &recurse_submodules, "check|on-demand|no",
N_("control recursive pushing of submodules"),
PARSE_OPT_OPTARG, option_parse_recurse_submodules },
- OPT_BOOL( 0 , "thin", &thin, N_("use thin pack")),
+ OPT_BOOL_F( 0 , "thin", &thin, N_("use thin pack"), PARSE_OPT_NOCOMPLETE),
OPT_STRING( 0 , "receive-pack", &receivepack, "receive-pack", N_("receive pack program")),
OPT_STRING( 0 , "exec", &receivepack, "receive-pack", N_("receive pack program")),
OPT_BIT('u', "set-upstream", &flags, N_("set upstream for git pull/status"),
diff --git a/builtin/reflog.c b/builtin/reflog.c
index 25f7c5e..a89bd1d 100644
--- a/builtin/reflog.c
+++ b/builtin/reflog.c
@@ -52,6 +52,7 @@ struct collect_reflog_cb {
int nr;
};
+/* Remember to update object flag allocation in object.h */
#define INCOMPLETE (1u<<10)
#define STUDYING (1u<<11)
#define REACHABLE (1u<<12)
diff --git a/builtin/remote.c b/builtin/remote.c
index 6487d92..805ffc0 100644
--- a/builtin/remote.c
+++ b/builtin/remote.c
@@ -168,7 +168,7 @@ static int add(int argc, const char **argv)
OPT_STRING('m', "master", &master, N_("branch"), N_("master branch")),
{ OPTION_CALLBACK, 0, "mirror", &mirror, N_("push|fetch"),
N_("set up remote as a mirror to push to or fetch from"),
- PARSE_OPT_OPTARG, parse_mirror_opt },
+ PARSE_OPT_OPTARG | PARSE_OPT_COMP_ARG, parse_mirror_opt },
OPT_END()
};
diff --git a/builtin/replace.c b/builtin/replace.c
index 19006e5..935647b 100644
--- a/builtin/replace.c
+++ b/builtin/replace.c
@@ -439,7 +439,8 @@ int cmd_replace(int argc, const char **argv, const char *prefix)
OPT_CMDMODE('d', "delete", &cmdmode, N_("delete replace refs"), MODE_DELETE),
OPT_CMDMODE('e', "edit", &cmdmode, N_("edit existing object"), MODE_EDIT),
OPT_CMDMODE('g', "graft", &cmdmode, N_("change a commit's parents"), MODE_GRAFT),
- OPT_BOOL('f', "force", &force, N_("replace the ref if it exists")),
+ OPT_BOOL_F('f', "force", &force, N_("replace the ref if it exists"),
+ PARSE_OPT_NOCOMPLETE),
OPT_BOOL(0, "raw", &raw, N_("do not pretty-print contents for --edit")),
OPT_STRING(0, "format", &format, N_("format"), N_("use this format")),
OPT_END()
diff --git a/builtin/rev-list.c b/builtin/rev-list.c
index 2fd72c0..fadd3ec 100644
--- a/builtin/rev-list.c
+++ b/builtin/rev-list.c
@@ -536,7 +536,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
mark_edges_uninteresting(&revs, show_edge);
if (bisect_list) {
- int reaches = reaches, all = all;
+ int reaches, all;
find_bisection(&revs.commits, &reaches, &all, bisect_find_all);
diff --git a/builtin/rm.c b/builtin/rm.c
index 974a7ef..5b6fc7e 100644
--- a/builtin/rm.c
+++ b/builtin/rm.c
@@ -242,7 +242,7 @@ static struct option builtin_rm_options[] = {
OPT__DRY_RUN(&show_only, N_("dry run")),
OPT__QUIET(&quiet, N_("do not list removed files")),
OPT_BOOL( 0 , "cached", &index_only, N_("only remove from the index")),
- OPT__FORCE(&force, N_("override the up-to-date check")),
+ OPT__FORCE(&force, N_("override the up-to-date check"), PARSE_OPT_NOCOMPLETE),
OPT_BOOL('r', NULL, &recursive, N_("allow recursive removal")),
OPT_BOOL( 0 , "ignore-unmatch", &ignore_unmatch,
N_("exit with a zero status even if nothing matched")),
@@ -385,10 +385,9 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
stage_updated_gitmodules(&the_index);
}
- if (active_cache_changed) {
- if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
- die(_("Unable to write new index file"));
- }
+ if (write_locked_index(&the_index, &lock_file,
+ COMMIT_LOCK | SKIP_IF_UNCHANGED))
+ die(_("Unable to write new index file"));
return 0;
}
diff --git a/builtin/shortlog.c b/builtin/shortlog.c
index e29875b..3a823b3 100644
--- a/builtin/shortlog.c
+++ b/builtin/shortlog.c
@@ -11,7 +11,8 @@
#include "parse-options.h"
static char const * const shortlog_usage[] = {
- N_("git shortlog [<options>] [<revision-range>] [[--] [<path>...]]"),
+ N_("git shortlog [<options>] [<revision-range>] [[--] <path>...]"),
+ N_("git log --pretty=short | git shortlog [<options>]"),
NULL
};
@@ -292,6 +293,11 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)
parse_done:
argc = parse_options_end(&ctx);
+ if (nongit && argc > 1) {
+ error(_("too many arguments given outside repository"));
+ usage_with_options(shortlog_usage, options);
+ }
+
if (setup_revisions(argc, argv, &rev, NULL) != 1) {
error(_("unrecognized argument: %s"), argv[1]);
usage_with_options(shortlog_usage, options);
diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
index b1daca9..6ba8587 100644
--- a/builtin/submodule--helper.c
+++ b/builtin/submodule--helper.c
@@ -1019,7 +1019,7 @@ static int module_deinit(int argc, const char **argv, const char *prefix)
struct option module_deinit_options[] = {
OPT__QUIET(&quiet, N_("Suppress submodule status output")),
- OPT__FORCE(&force, N_("Remove submodule working trees even if they contain local changes")),
+ OPT__FORCE(&force, N_("Remove submodule working trees even if they contain local changes"), 0),
OPT_BOOL(0, "all", &all, N_("Unregister all submodules")),
OPT_END()
};
@@ -1042,7 +1042,7 @@ static int module_deinit(int argc, const char **argv, const char *prefix)
die(_("Use '--all' if you really want to deinitialize all submodules"));
if (module_list_compute(argc, argv, prefix, &pathspec, &list) < 0)
- BUG("module_list_compute should not choke on empty pathspec");
+ return 1;
info.prefix = prefix;
if (quiet)
diff --git a/builtin/tag.c b/builtin/tag.c
index 86450ba..8cff6d0 100644
--- a/builtin/tag.c
+++ b/builtin/tag.c
@@ -398,7 +398,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
N_("how to strip spaces and #comments from message")),
OPT_STRING('u', "local-user", &keyid, N_("key-id"),
N_("use another key to sign the tag")),
- OPT__FORCE(&force, N_("replace the tag if exists")),
+ OPT__FORCE(&force, N_("replace the tag if exists"), 0),
OPT_BOOL(0, "create-reflog", &create_reflog, N_("create a reflog")),
OPT_GROUP(N_("Tag listing options")),
diff --git a/builtin/unpack-objects.c b/builtin/unpack-objects.c
index af02e1b..b7755c6 100644
--- a/builtin/unpack-objects.c
+++ b/builtin/unpack-objects.c
@@ -158,6 +158,7 @@ struct obj_info {
struct object *obj;
};
+/* Remember to update object flag allocation in object.h */
#define FLAG_OPEN (1u<<20)
#define FLAG_WRITTEN (1u<<21)
diff --git a/builtin/update-server-info.c b/builtin/update-server-info.c
index 873070e..4321a34 100644
--- a/builtin/update-server-info.c
+++ b/builtin/update-server-info.c
@@ -12,7 +12,7 @@ int cmd_update_server_info(int argc, const char **argv, const char *prefix)
{
int force = 0;
struct option options[] = {
- OPT__FORCE(&force, N_("update the info files from scratch")),
+ OPT__FORCE(&force, N_("update the info files from scratch"), 0),
OPT_END()
};
diff --git a/builtin/worktree.c b/builtin/worktree.c
index 3442f25..ba2cb87 100644
--- a/builtin/worktree.c
+++ b/builtin/worktree.c
@@ -17,7 +17,9 @@ static const char * const worktree_usage[] = {
N_("git worktree add [<options>] <path> [<commit-ish>]"),
N_("git worktree list [<options>]"),
N_("git worktree lock [<options>] <path>"),
+ N_("git worktree move <worktree> <new-path>"),
N_("git worktree prune [<options>]"),
+ N_("git worktree remove [<options>] <worktree>"),
N_("git worktree unlock <path>"),
NULL
};
@@ -379,7 +381,9 @@ static int add(int ac, const char **av, const char *prefix)
const char *branch;
const char *opt_track = NULL;
struct option options[] = {
- OPT__FORCE(&opts.force, N_("checkout <branch> even if already checked out in other worktree")),
+ OPT__FORCE(&opts.force,
+ N_("checkout <branch> even if already checked out in other worktree"),
+ PARSE_OPT_NOCOMPLETE),
OPT_STRING('b', NULL, &opts.new_branch, N_("branch"),
N_("create a new branch")),
OPT_STRING('B', NULL, &new_branch_force, N_("branch"),
@@ -619,6 +623,220 @@ static int unlock_worktree(int ac, const char **av, const char *prefix)
return ret;
}
+static void validate_no_submodules(const struct worktree *wt)
+{
+ struct index_state istate = { NULL };
+ int i, found_submodules = 0;
+
+ if (read_index_from(&istate, worktree_git_path(wt, "index"),
+ get_worktree_git_dir(wt)) > 0) {
+ for (i = 0; i < istate.cache_nr; i++) {
+ struct cache_entry *ce = istate.cache[i];
+
+ if (S_ISGITLINK(ce->ce_mode)) {
+ found_submodules = 1;
+ break;
+ }
+ }
+ }
+ discard_index(&istate);
+
+ if (found_submodules)
+ die(_("working trees containing submodules cannot be moved or removed"));
+}
+
+static int move_worktree(int ac, const char **av, const char *prefix)
+{
+ struct option options[] = {
+ OPT_END()
+ };
+ struct worktree **worktrees, *wt;
+ struct strbuf dst = STRBUF_INIT;
+ struct strbuf errmsg = STRBUF_INIT;
+ const char *reason;
+ char *path;
+
+ ac = parse_options(ac, av, prefix, options, worktree_usage, 0);
+ if (ac != 2)
+ usage_with_options(worktree_usage, options);
+
+ path = prefix_filename(prefix, av[1]);
+ strbuf_addstr(&dst, path);
+ free(path);
+
+ worktrees = get_worktrees(0);
+ wt = find_worktree(worktrees, prefix, av[0]);
+ if (!wt)
+ die(_("'%s' is not a working tree"), av[0]);
+ if (is_main_worktree(wt))
+ die(_("'%s' is a main working tree"), av[0]);
+ if (is_directory(dst.buf)) {
+ const char *sep = find_last_dir_sep(wt->path);
+
+ if (!sep)
+ die(_("could not figure out destination name from '%s'"),
+ wt->path);
+ strbuf_trim_trailing_dir_sep(&dst);
+ strbuf_addstr(&dst, sep);
+ }
+ if (file_exists(dst.buf))
+ die(_("target '%s' already exists"), dst.buf);
+
+ validate_no_submodules(wt);
+
+ reason = is_worktree_locked(wt);
+ if (reason) {
+ if (*reason)
+ die(_("cannot move a locked working tree, lock reason: %s"),
+ reason);
+ die(_("cannot move a locked working tree"));
+ }
+ if (validate_worktree(wt, &errmsg, 0))
+ die(_("validation failed, cannot move working tree: %s"),
+ errmsg.buf);
+ strbuf_release(&errmsg);
+
+ if (rename(wt->path, dst.buf) == -1)
+ die_errno(_("failed to move '%s' to '%s'"), wt->path, dst.buf);
+
+ update_worktree_location(wt, dst.buf);
+
+ strbuf_release(&dst);
+ free_worktrees(worktrees);
+ return 0;
+}
+
+/*
+ * Note, "git status --porcelain" is used to determine if it's safe to
+ * delete a whole worktree. "git status" does not ignore user
+ * configuration, so if a normal "git status" shows "clean" for the
+ * user, then it's ok to remove it.
+ *
+ * This assumption may be a bad one. We may want to ignore
+ * (potentially bad) user settings and only delete a worktree when
+ * it's absolutely safe to do so from _our_ point of view because we
+ * know better.
+ */
+static void check_clean_worktree(struct worktree *wt,
+ const char *original_path)
+{
+ struct argv_array child_env = ARGV_ARRAY_INIT;
+ struct child_process cp;
+ char buf[1];
+ int ret;
+
+ /*
+ * Until we sort this out, all submodules are "dirty" and
+ * will abort this function.
+ */
+ validate_no_submodules(wt);
+
+ argv_array_pushf(&child_env, "%s=%s/.git",
+ GIT_DIR_ENVIRONMENT, wt->path);
+ argv_array_pushf(&child_env, "%s=%s",
+ GIT_WORK_TREE_ENVIRONMENT, wt->path);
+ memset(&cp, 0, sizeof(cp));
+ argv_array_pushl(&cp.args, "status",
+ "--porcelain", "--ignore-submodules=none",
+ NULL);
+ cp.env = child_env.argv;
+ cp.git_cmd = 1;
+ cp.dir = wt->path;
+ cp.out = -1;
+ ret = start_command(&cp);
+ if (ret)
+ die_errno(_("failed to run 'git status' on '%s'"),
+ original_path);
+ ret = xread(cp.out, buf, sizeof(buf));
+ if (ret)
+ die(_("'%s' is dirty, use --force to delete it"),
+ original_path);
+ close(cp.out);
+ ret = finish_command(&cp);
+ if (ret)
+ die_errno(_("failed to run 'git status' on '%s', code %d"),
+ original_path, ret);
+}
+
+static int delete_git_work_tree(struct worktree *wt)
+{
+ struct strbuf sb = STRBUF_INIT;
+ int ret = 0;
+
+ strbuf_addstr(&sb, wt->path);
+ if (remove_dir_recursively(&sb, 0)) {
+ error_errno(_("failed to delete '%s'"), sb.buf);
+ ret = -1;
+ }
+ strbuf_release(&sb);
+ return ret;
+}
+
+static int delete_git_dir(struct worktree *wt)
+{
+ struct strbuf sb = STRBUF_INIT;
+ int ret = 0;
+
+ strbuf_addstr(&sb, git_common_path("worktrees/%s", wt->id));
+ if (remove_dir_recursively(&sb, 0)) {
+ error_errno(_("failed to delete '%s'"), sb.buf);
+ ret = -1;
+ }
+ strbuf_release(&sb);
+ return ret;
+}
+
+static int remove_worktree(int ac, const char **av, const char *prefix)
+{
+ int force = 0;
+ struct option options[] = {
+ OPT_BOOL(0, "force", &force,
+ N_("force removing even if the worktree is dirty")),
+ OPT_END()
+ };
+ struct worktree **worktrees, *wt;
+ struct strbuf errmsg = STRBUF_INIT;
+ const char *reason;
+ int ret = 0;
+
+ ac = parse_options(ac, av, prefix, options, worktree_usage, 0);
+ if (ac != 1)
+ usage_with_options(worktree_usage, options);
+
+ worktrees = get_worktrees(0);
+ wt = find_worktree(worktrees, prefix, av[0]);
+ if (!wt)
+ die(_("'%s' is not a working tree"), av[0]);
+ if (is_main_worktree(wt))
+ die(_("'%s' is a main working tree"), av[0]);
+ reason = is_worktree_locked(wt);
+ if (reason) {
+ if (*reason)
+ die(_("cannot remove a locked working tree, lock reason: %s"),
+ reason);
+ die(_("cannot remove a locked working tree"));
+ }
+ if (validate_worktree(wt, &errmsg, WT_VALIDATE_WORKTREE_MISSING_OK))
+ die(_("validation failed, cannot remove working tree: %s"),
+ errmsg.buf);
+ strbuf_release(&errmsg);
+
+ if (file_exists(wt->path)) {
+ if (!force)
+ check_clean_worktree(wt, av[0]);
+
+ ret |= delete_git_work_tree(wt);
+ }
+ /*
+ * continue on even if ret is non-zero, there's no going back
+ * from here.
+ */
+ ret |= delete_git_dir(wt);
+
+ free_worktrees(worktrees);
+ return ret;
+}
+
int cmd_worktree(int ac, const char **av, const char *prefix)
{
struct option options[] = {
@@ -641,5 +859,9 @@ int cmd_worktree(int ac, const char **av, const char *prefix)
return lock_worktree(ac - 1, av + 1, prefix);
if (!strcmp(av[1], "unlock"))
return unlock_worktree(ac - 1, av + 1, prefix);
+ if (!strcmp(av[1], "move"))
+ return move_worktree(ac - 1, av + 1, prefix);
+ if (!strcmp(av[1], "remove"))
+ return remove_worktree(ac - 1, av + 1, prefix);
usage_with_options(worktree_usage, options);
}
diff --git a/cache.h b/cache.h
index 0491f0c..83ba2d2 100644
--- a/cache.h
+++ b/cache.h
@@ -599,6 +599,7 @@ extern int read_index_unmerged(struct index_state *);
/* For use with `write_locked_index()`. */
#define COMMIT_LOCK (1 << 0)
+#define SKIP_IF_UNCHANGED (1 << 1)
/*
* Write the index while holding an already-taken lock. Close the lock,
@@ -615,6 +616,9 @@ extern int read_index_unmerged(struct index_state *);
* With `COMMIT_LOCK`, the lock is always committed or rolled back.
* Without it, the lock is closed, but neither committed nor rolled
* back.
+ *
+ * If `SKIP_IF_UNCHANGED` is given and the index is unchanged, nothing
+ * is written (and the lock is rolled back if `COMMIT_LOCK` is given).
*/
extern int write_locked_index(struct index_state *, struct lock_file *lock, unsigned flags);
@@ -1773,6 +1777,8 @@ struct object_info {
#define OBJECT_INFO_SKIP_CACHED 4
/* Do not retry packed storage after checking packed and loose storage */
#define OBJECT_INFO_QUICK 8
+/* Do not check loose object */
+#define OBJECT_INFO_IGNORE_LOOSE 16
extern int oid_object_info_extended(const struct object_id *, struct object_info *, unsigned flags);
/*
diff --git a/ci/lib-travisci.sh b/ci/lib-travisci.sh
index 1efee55..109ef28 100755
--- a/ci/lib-travisci.sh
+++ b/ci/lib-travisci.sh
@@ -97,7 +97,7 @@ fi
export DEVELOPER=1
export DEFAULT_TEST_TARGET=prove
export GIT_PROVE_OPTS="--timer --jobs 3 --state=failed,slow,save"
-export GIT_TEST_OPTS="--verbose-log"
+export GIT_TEST_OPTS="--verbose-log -x"
export GIT_TEST_CLONE_2GB=YesPlease
case "$jobname" in
diff --git a/compat/mingw.c b/compat/mingw.c
index 2d44d21..a67872b 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -761,6 +761,17 @@ revert_attrs:
return rc;
}
+#undef strftime
+size_t mingw_strftime(char *s, size_t max,
+ const char *format, const struct tm *tm)
+{
+ size_t ret = strftime(s, max, format, tm);
+
+ if (!ret && errno == EINVAL)
+ die("invalid strftime format: '%s'", format);
+ return ret;
+}
+
unsigned int sleep (unsigned int seconds)
{
Sleep(seconds*1000);
diff --git a/compat/mingw.h b/compat/mingw.h
index e03aecf..571019d 100644
--- a/compat/mingw.h
+++ b/compat/mingw.h
@@ -361,6 +361,9 @@ int mingw_fstat(int fd, struct stat *buf);
int mingw_utime(const char *file_name, const struct utimbuf *times);
#define utime mingw_utime
+size_t mingw_strftime(char *s, size_t max,
+ const char *format, const struct tm *tm);
+#define strftime mingw_strftime
pid_t mingw_spawnvpe(const char *cmd, const char **argv, char **env,
const char *dir,
diff --git a/configure.ac b/configure.ac
index 7f84151..6f1fd9d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -254,25 +254,25 @@ GIT_PARSE_WITH([openssl]))
# Perl-compatible regular expressions instead of standard or extended
# POSIX regular expressions.
#
-# Currently USE_LIBPCRE is a synonym for USE_LIBPCRE1, define
-# USE_LIBPCRE2 instead if you'd like to use version 2 of the PCRE
-# library. The USE_LIBPCRE flag will likely be changed to mean v2 by
-# default in future releases.
+# USE_LIBPCRE is a synonym for USE_LIBPCRE2, define USE_LIBPCRE1
+# instead if you'd like to use the legacy version 1 of the PCRE
+# library. Support for version 1 will likely be removed in some future
+# release of Git, as upstream has all but abandoned it.
#
# Define LIBPCREDIR=/foo/bar if your PCRE header and library files are in
# /foo/bar/include and /foo/bar/lib directories.
#
AC_ARG_WITH(libpcre,
-AS_HELP_STRING([--with-libpcre],[synonym for --with-libpcre1]),
+AS_HELP_STRING([--with-libpcre],[synonym for --with-libpcre2]),
if test "$withval" = "no"; then
- USE_LIBPCRE1=
+ USE_LIBPCRE2=
elif test "$withval" = "yes"; then
- USE_LIBPCRE1=YesPlease
+ USE_LIBPCRE2=YesPlease
else
- USE_LIBPCRE1=YesPlease
+ USE_LIBPCRE2=YesPlease
LIBPCREDIR=$withval
AC_MSG_NOTICE([Setting LIBPCREDIR to $LIBPCREDIR])
- dnl USE_LIBPCRE1 can still be modified below, so don't substitute
+ dnl USE_LIBPCRE2 can still be modified below, so don't substitute
dnl it yet.
GIT_CONF_SUBST([LIBPCREDIR])
fi)
@@ -296,6 +296,10 @@ AS_HELP_STRING([], [ARG can be also prefix for libpcre library and hea
AC_ARG_WITH(libpcre2,
AS_HELP_STRING([--with-libpcre2],[support Perl-compatible regexes via libpcre2 (default is NO)])
AS_HELP_STRING([], [ARG can be also prefix for libpcre library and headers]),
+ if test -n "$USE_LIBPCRE2"; then
+ AC_MSG_ERROR([Only supply one of --with-libpcre or its synonym --with-libpcre2!])
+ fi
+
if test -n "$USE_LIBPCRE1"; then
AC_MSG_ERROR([Only supply one of --with-libpcre1 or --with-libpcre2!])
fi
@@ -549,8 +553,8 @@ if test -n "$USE_LIBPCRE1"; then
GIT_STASH_FLAGS($LIBPCREDIR)
AC_CHECK_LIB([pcre], [pcre_version],
-[USE_LIBPCRE=YesPlease],
-[USE_LIBPCRE=])
+[USE_LIBPCRE1=YesPlease],
+[USE_LIBPCRE1=])
GIT_UNSTASH_FLAGS($LIBPCREDIR)
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 91536d8..b09c8a2 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -280,6 +280,43 @@ __gitcomp ()
esac
}
+# Clear the variables caching builtins' options when (re-)sourcing
+# the completion script.
+unset $(set |sed -ne 's/^\(__gitcomp_builtin_[a-zA-Z0-9_][a-zA-Z0-9_]*\)=.*/\1/p') 2>/dev/null
+
+# This function is equivalent to
+#
+# __gitcomp "$(git xxx --git-completion-helper) ..."
+#
+# except that the output is cached. Accept 1-3 arguments:
+# 1: the git command to execute, this is also the cache key
+# 2: extra options to be added on top (e.g. negative forms)
+# 3: options to be excluded
+__gitcomp_builtin ()
+{
+ # spaces must be replaced with underscore for multi-word
+ # commands, e.g. "git remote add" becomes remote_add.
+ local cmd="$1"
+ local incl="$2"
+ local excl="$3"
+
+ local var=__gitcomp_builtin_"${cmd/-/_}"
+ local options
+ eval "options=\$$var"
+
+ if [ -z "$options" ]; then
+ # leading and trailing spaces are significant to make
+ # option removal work correctly.
+ options=" $(__git ${cmd/_/ } --git-completion-helper) $incl "
+ for i in $excl; do
+ options="${options/ $i / }"
+ done
+ eval "$var=\"$options\""
+ fi
+
+ __gitcomp "$options"
+}
+
# Variation of __gitcomp_nl () that appends to the existing list of
# completion candidates, COMPREPLY.
__gitcomp_nl_append ()
@@ -1072,12 +1109,13 @@ __git_count_arguments ()
}
__git_whitespacelist="nowarn warn error error-all fix"
+__git_am_inprogress_options="--skip --continue --resolved --abort --quit --show-current-patch"
_git_am ()
{
__git_find_repo_path
if [ -d "$__git_repo_path"/rebase-apply ]; then
- __gitcomp "--skip --continue --resolved --abort --quit --show-current-patch"
+ __gitcomp "$__git_am_inprogress_options"
return
fi
case "$cur" in
@@ -1086,12 +1124,8 @@ _git_am ()
return
;;
--*)
- __gitcomp "
- --3way --committer-date-is-author-date --ignore-date
- --ignore-whitespace --ignore-space-change
- --interactive --keep --no-utf8 --signoff --utf8
- --whitespace= --scissors
- "
+ __gitcomp_builtin am "--no-utf8" \
+ "$__git_am_inprogress_options"
return
esac
}
@@ -1104,14 +1138,7 @@ _git_apply ()
return
;;
--*)
- __gitcomp "
- --stat --numstat --summary --check --index
- --cached --index-info --reverse --reject --unidiff-zero
- --apply --no-add --exclude=
- --ignore-whitespace --ignore-space-change
- --whitespace= --inaccurate-eof --verbose
- --recount --directory=
- "
+ __gitcomp_builtin apply
return
esac
}
@@ -1120,10 +1147,7 @@ _git_add ()
{
case "$cur" in
--*)
- __gitcomp "
- --interactive --refresh --patch --update --dry-run
- --ignore-errors --intent-to-add --force --edit --chmod=
- "
+ __gitcomp_builtin add
return
esac
@@ -1200,12 +1224,8 @@ _git_branch ()
__git_complete_refs --cur="${cur##--set-upstream-to=}"
;;
--*)
- __gitcomp "
- --color --no-color --verbose --abbrev= --no-abbrev
- --track --no-track --contains --no-contains --merged --no-merged
- --set-upstream-to= --edit-description --list
- --unset-upstream --delete --move --copy --remotes
- --column --no-column --sort= --points-at
+ __gitcomp_builtin branch "--no-color --no-abbrev
+ --no-track --no-column
"
;;
*)
@@ -1247,11 +1267,7 @@ _git_checkout ()
__gitcomp "diff3 merge" "" "${cur##--conflict=}"
;;
--*)
- __gitcomp "
- --quiet --ours --theirs --track --no-track --merge
- --conflict= --orphan --patch --detach --ignore-skip-worktree-bits
- --recurse-submodules --no-recurse-submodules
- "
+ __gitcomp_builtin checkout "--no-track --no-recurse-submodules"
;;
*)
# check if --track, --no-track, or --no-guess was specified
@@ -1271,16 +1287,19 @@ _git_cherry ()
__git_complete_refs
}
+__git_cherry_pick_inprogress_options="--continue --quit --abort"
+
_git_cherry_pick ()
{
__git_find_repo_path
if [ -f "$__git_repo_path"/CHERRY_PICK_HEAD ]; then
- __gitcomp "--continue --quit --abort"
+ __gitcomp "$__git_cherry_pick_inprogress_options"
return
fi
case "$cur" in
--*)
- __gitcomp "--edit --no-commit --signoff --strategy= --mainline"
+ __gitcomp_builtin cherry-pick "" \
+ "$__git_cherry_pick_inprogress_options"
;;
*)
__git_complete_refs
@@ -1292,7 +1311,7 @@ _git_clean ()
{
case "$cur" in
--*)
- __gitcomp "--dry-run --quiet"
+ __gitcomp_builtin clean
return
;;
esac
@@ -1305,26 +1324,7 @@ _git_clone ()
{
case "$cur" in
--*)
- __gitcomp "
- --local
- --no-hardlinks
- --shared
- --reference
- --quiet
- --no-checkout
- --bare
- --mirror
- --origin
- --upload-pack
- --template=
- --depth
- --single-branch
- --no-tags
- --branch
- --recurse-submodules
- --no-single-branch
- --shallow-submodules
- "
+ __gitcomp_builtin clone "--no-single-branch"
return
;;
esac
@@ -1357,16 +1357,7 @@ _git_commit ()
return
;;
--*)
- __gitcomp "
- --all --author= --signoff --verify --no-verify
- --edit --no-edit
- --amend --include --only --interactive
- --dry-run --reuse-message= --reedit-message=
- --reset-author --file= --message= --template=
- --cleanup= --untracked-files --untracked-files=
- --verbose --quiet --fixup= --squash=
- --patch --short --date --allow-empty
- "
+ __gitcomp_builtin commit "--no-edit --verify"
return
esac
@@ -1382,11 +1373,7 @@ _git_describe ()
{
case "$cur" in
--*)
- __gitcomp "
- --all --tags --contains --abbrev= --candidates=
- --exact-match --debug --long --match --always --first-parent
- --exclude --dirty --broken
- "
+ __gitcomp_builtin describe
return
esac
__git_complete_refs
@@ -1411,7 +1398,7 @@ __git_diff_common_options="--stat --numstat --shortstat --summary
--dirstat --dirstat= --dirstat-by-file
--dirstat-by-file= --cumulative
--diff-algorithm=
- --submodule --submodule=
+ --submodule --submodule= --ignore-submodules
"
_git_diff ()
@@ -1452,11 +1439,11 @@ _git_difftool ()
return
;;
--*)
- __gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
- --base --ours --theirs
- --no-renames --diff-filter= --find-copies-harder
- --relative --ignore-submodules
- --tool="
+ __gitcomp_builtin difftool "$__git_diff_common_options
+ --base --cached --ours --theirs
+ --pickaxe-all --pickaxe-regex
+ --relative --staged
+ "
return
;;
esac
@@ -1465,12 +1452,6 @@ _git_difftool ()
__git_fetch_recurse_submodules="yes on-demand no"
-__git_fetch_options="
- --quiet --verbose --append --upload-pack --force --keep --depth=
- --tags --no-tags --all --prune --dry-run --recurse-submodules=
- --unshallow --update-shallow --prune-tags
-"
-
_git_fetch ()
{
case "$cur" in
@@ -1479,7 +1460,7 @@ _git_fetch ()
return
;;
--*)
- __gitcomp "$__git_fetch_options"
+ __gitcomp_builtin fetch "--no-tags"
return
;;
esac
@@ -1516,10 +1497,7 @@ _git_fsck ()
{
case "$cur" in
--*)
- __gitcomp "
- --tags --root --unreachable --cache --no-reflogs --full
- --strict --verbose --lost-found --name-objects
- "
+ __gitcomp_builtin fsck "--no-reflogs"
return
;;
esac
@@ -1529,7 +1507,7 @@ _git_gc ()
{
case "$cur" in
--*)
- __gitcomp "--prune --aggressive"
+ __gitcomp_builtin gc
return
;;
esac
@@ -1585,21 +1563,7 @@ _git_grep ()
case "$cur" in
--*)
- __gitcomp "
- --cached
- --text --ignore-case --word-regexp --invert-match
- --full-name --line-number
- --extended-regexp --basic-regexp --fixed-strings
- --perl-regexp
- --threads
- --files-with-matches --name-only
- --files-without-match
- --max-depth
- --count
- --and --or --not --all-match
- --break --heading --show-function --function-context
- --untracked --no-index
- "
+ __gitcomp_builtin grep
return
;;
esac
@@ -1617,7 +1581,7 @@ _git_help ()
{
case "$cur" in
--*)
- __gitcomp "--all --guides --info --man --web"
+ __gitcomp_builtin help
return
;;
esac
@@ -1640,7 +1604,7 @@ _git_init ()
return
;;
--*)
- __gitcomp "--quiet --bare --template= --shared --shared="
+ __gitcomp_builtin init
return
;;
esac
@@ -1650,13 +1614,7 @@ _git_ls_files ()
{
case "$cur" in
--*)
- __gitcomp "--cached --deleted --modified --others --ignored
- --stage --directory --no-empty-directory --unmerged
- --killed --exclude= --exclude-from=
- --exclude-per-directory= --exclude-standard
- --error-unmatch --with-tree= --full-name
- --abbrev --ignored --exclude-per-directory
- "
+ __gitcomp_builtin ls-files "--no-empty-directory"
return
;;
esac
@@ -1670,7 +1628,7 @@ _git_ls_remote ()
{
case "$cur" in
--*)
- __gitcomp "--heads --tags --refs --get-url --symref"
+ __gitcomp_builtin ls-remote
return
;;
esac
@@ -1794,22 +1752,18 @@ _git_log ()
__git_complete_revlist
}
-# Common merge options shared by git-merge(1) and git-pull(1).
-__git_merge_options="
- --no-commit --no-stat --log --no-log --squash --strategy
- --commit --stat --no-squash --ff --no-ff --ff-only --edit --no-edit
- --verify-signatures --no-verify-signatures --gpg-sign
- --quiet --verbose --progress --no-progress
-"
-
_git_merge ()
{
__git_complete_strategy && return
case "$cur" in
--*)
- __gitcomp "$__git_merge_options
- --rerere-autoupdate --no-rerere-autoupdate --abort --continue"
+ __gitcomp_builtin merge "--no-rerere-autoupdate
+ --no-commit --no-edit --no-ff
+ --no-log --no-progress
+ --no-squash --no-stat
+ --no-verify-signatures
+ "
return
esac
__git_complete_refs
@@ -1833,7 +1787,7 @@ _git_merge_base ()
{
case "$cur" in
--*)
- __gitcomp "--octopus --independent --is-ancestor --fork-point"
+ __gitcomp_builtin merge-base
return
;;
esac
@@ -1844,7 +1798,7 @@ _git_mv ()
{
case "$cur" in
--*)
- __gitcomp "--dry-run"
+ __gitcomp_builtin mv
return
;;
esac
@@ -1860,17 +1814,17 @@ _git_mv ()
_git_name_rev ()
{
- __gitcomp "--tags --all --stdin"
+ __gitcomp_builtin name-rev
}
_git_notes ()
{
- local subcommands='add append copy edit list prune remove show'
+ local subcommands='add append copy edit get-ref list merge prune remove show'
local subcommand="$(__git_find_on_cmdline "$subcommands")"
case "$subcommand,$cur" in
,--*)
- __gitcomp '--ref'
+ __gitcomp_builtin notes
;;
,*)
case "$prev" in
@@ -1882,21 +1836,14 @@ _git_notes ()
;;
esac
;;
- add,--reuse-message=*|append,--reuse-message=*|\
- add,--reedit-message=*|append,--reedit-message=*)
+ *,--reuse-message=*|*,--reedit-message=*)
__git_complete_refs --cur="${cur#*=}"
;;
- add,--*|append,--*)
- __gitcomp '--file= --message= --reedit-message=
- --reuse-message='
+ *,--*)
+ __gitcomp_builtin notes_$subcommand
;;
- copy,--*)
- __gitcomp '--stdin'
- ;;
- prune,--*)
- __gitcomp '--dry-run --verbose'
- ;;
- prune,*)
+ prune,*|get-ref,*)
+ # this command does not take a ref, do not complete it
;;
*)
case "$prev" in
@@ -1920,12 +1867,11 @@ _git_pull ()
return
;;
--*)
- __gitcomp "
- --rebase --no-rebase
- --autostash --no-autostash
- $__git_merge_options
- $__git_fetch_options
- "
+ __gitcomp_builtin pull "--no-autostash --no-commit --no-edit
+ --no-ff --no-log --no-progress --no-rebase
+ --no-squash --no-stat --no-tags
+ --no-verify-signatures"
+
return
;;
esac
@@ -1976,12 +1922,7 @@ _git_push ()
return
;;
--*)
- __gitcomp "
- --all --mirror --tags --dry-run --force --verbose
- --quiet --prune --delete --follow-tags
- --receive-pack= --repo= --set-upstream
- --force-with-lease --force-with-lease= --recurse-submodules=
- "
+ __gitcomp_builtin push
return
;;
esac
@@ -2016,6 +1957,7 @@ _git_rebase ()
--autostash --no-autostash
--verify --no-verify
--keep-empty --root --force-rebase --no-ff
+ --rerere-autoupdate
--exec
"
@@ -2081,7 +2023,7 @@ _git_send_email ()
--compose --confirm= --dry-run --envelope-sender
--from --identity
--in-reply-to --no-chain-reply-to --no-signed-off-by-cc
- --no-suppress-from --no-thread --quiet
+ --no-suppress-from --no-thread --quiet --reply-to
--signed-off-by-cc --smtp-pass --smtp-server
--smtp-server-port --smtp-encryption= --smtp-user
--subject --suppress-cc= --suppress-from --thread --to
@@ -2119,11 +2061,7 @@ _git_status ()
return
;;
--*)
- __gitcomp "
- --short --branch --porcelain --long --verbose
- --untracked-files= --ignore-submodules= --ignored
- --column= --no-column
- "
+ __gitcomp_builtin status "--no-column"
return
;;
esac
@@ -2265,14 +2203,7 @@ _git_config ()
esac
case "$cur" in
--*)
- __gitcomp "
- --system --global --local --file=
- --list --replace-all
- --get --get-all --get-regexp
- --add --unset --unset-all
- --remove-section --rename-section
- --name-only
- "
+ __gitcomp_builtin config
return
;;
branch.*.*)
@@ -2672,7 +2603,7 @@ _git_remote ()
if [ -z "$subcommand" ]; then
case "$cur" in
--*)
- __gitcomp "--verbose"
+ __gitcomp_builtin remote
;;
*)
__gitcomp "$subcommands"
@@ -2683,33 +2614,33 @@ _git_remote ()
case "$subcommand,$cur" in
add,--*)
- __gitcomp "--track --master --fetch --tags --no-tags --mirror="
+ __gitcomp_builtin remote_add "--no-tags"
;;
add,*)
;;
set-head,--*)
- __gitcomp "--auto --delete"
+ __gitcomp_builtin remote_set-head
;;
set-branches,--*)
- __gitcomp "--add"
+ __gitcomp_builtin remote_set-branches
;;
set-head,*|set-branches,*)
__git_complete_remote_or_refspec
;;
update,--*)
- __gitcomp "--prune"
+ __gitcomp_builtin remote_update
;;
update,*)
__gitcomp "$(__git_get_config_variables "remotes")"
;;
set-url,--*)
- __gitcomp "--push --add --delete"
+ __gitcomp_builtin remote_set-url
;;
get-url,--*)
- __gitcomp "--push --all"
+ __gitcomp_builtin remote_get-url
;;
prune,--*)
- __gitcomp "--dry-run"
+ __gitcomp_builtin remote_prune
;;
*)
__gitcomp_nl "$(__git_remotes)"
@@ -2721,7 +2652,7 @@ _git_replace ()
{
case "$cur" in
--*)
- __gitcomp "--edit --graft --format= --list --delete"
+ __gitcomp_builtin replace
return
;;
esac
@@ -2745,26 +2676,26 @@ _git_reset ()
case "$cur" in
--*)
- __gitcomp "--merge --mixed --hard --soft --patch --keep"
+ __gitcomp_builtin reset
return
;;
esac
__git_complete_refs
}
+__git_revert_inprogress_options="--continue --quit --abort"
+
_git_revert ()
{
__git_find_repo_path
if [ -f "$__git_repo_path"/REVERT_HEAD ]; then
- __gitcomp "--continue --quit --abort"
+ __gitcomp "$__git_revert_inprogress_options"
return
fi
case "$cur" in
--*)
- __gitcomp "
- --edit --mainline --no-edit --no-commit --signoff
- --strategy= --strategy-option=
- "
+ __gitcomp_builtin revert "--no-edit" \
+ "$__git_revert_inprogress_options"
return
;;
esac
@@ -2775,7 +2706,7 @@ _git_rm ()
{
case "$cur" in
--*)
- __gitcomp "--cached --dry-run --ignore-unmatch --quiet"
+ __gitcomp_builtin rm
return
;;
esac
@@ -2833,12 +2764,7 @@ _git_show_branch ()
{
case "$cur" in
--*)
- __gitcomp "
- --all --remotes --topo-order --date-order --current --more=
- --list --independent --merge-base --no-name
- --color --no-color
- --sha1-name --sparse --topics --reflog
- "
+ __gitcomp_builtin show-branch "--no-color"
return
;;
esac
@@ -3045,7 +2971,7 @@ _git_tag ()
while [ $c -lt $cword ]; do
i="${words[c]}"
case "$i" in
- -d|-v)
+ -d|--delete|-v|--verify)
__gitcomp_direct "$(__git_tags "" "$cur" " ")"
return
;;
@@ -3071,11 +2997,7 @@ _git_tag ()
case "$cur" in
--*)
- __gitcomp "
- --list --delete --verify --annotate --message --file
- --sign --cleanup --local-user --force --column --sort=
- --contains --no-contains --points-at --merged --no-merged --create-reflog
- "
+ __gitcomp_builtin tag
;;
esac
}
@@ -3087,23 +3009,26 @@ _git_whatchanged ()
_git_worktree ()
{
- local subcommands="add list lock prune unlock"
+ local subcommands="add list lock move prune remove unlock"
local subcommand="$(__git_find_on_cmdline "$subcommands")"
if [ -z "$subcommand" ]; then
__gitcomp "$subcommands"
else
case "$subcommand,$cur" in
add,--*)
- __gitcomp "--detach"
+ __gitcomp_builtin worktree_add
;;
list,--*)
- __gitcomp "--porcelain"
+ __gitcomp_builtin worktree_list
;;
lock,--*)
- __gitcomp "--reason"
+ __gitcomp_builtin worktree_lock
;;
prune,--*)
- __gitcomp "--dry-run --expire --verbose"
+ __gitcomp_builtin worktree_prune
+ ;;
+ remove,--*)
+ __gitcomp "--force"
;;
*)
;;
diff --git a/contrib/examples/git-difftool.perl b/contrib/examples/git-difftool.perl
index fb0fd0b..b2ea80f 100755
--- a/contrib/examples/git-difftool.perl
+++ b/contrib/examples/git-difftool.perl
@@ -13,7 +13,7 @@
use 5.008;
use strict;
use warnings;
-use Git::Error qw(:try);
+use Git::LoadCPAN::Error qw(:try);
use File::Basename qw(dirname);
use File::Copy;
use File::Find;
diff --git a/contrib/hooks/pre-auto-gc-battery b/contrib/hooks/pre-auto-gc-battery
index 6a2cdeb..7ba78c4 100755
--- a/contrib/hooks/pre-auto-gc-battery
+++ b/contrib/hooks/pre-auto-gc-battery
@@ -17,7 +17,7 @@
# ln -sf /usr/share/git-core/contrib/hooks/pre-auto-gc-battery \
# hooks/pre-auto-gc
-if test -x /sbin/on_ac_power && /sbin/on_ac_power
+if test -x /sbin/on_ac_power && (/sbin/on_ac_power;test $? -ne 1)
then
exit 0
elif test "$(cat /sys/class/power_supply/AC/online 2>/dev/null)" = 1
diff --git a/diff.c b/diff.c
index 5c8f3e1..1289df4 100644
--- a/diff.c
+++ b/diff.c
@@ -2045,11 +2045,10 @@ static void fn_out_consume(void *priv, char *line, unsigned long len)
}
}
-static char *pprint_rename(const char *a, const char *b)
+static void pprint_rename(struct strbuf *name, const char *a, const char *b)
{
const char *old_name = a;
const char *new_name = b;
- struct strbuf name = STRBUF_INIT;
int pfx_length, sfx_length;
int pfx_adjust_for_slash;
int len_a = strlen(a);
@@ -2059,10 +2058,10 @@ static char *pprint_rename(const char *a, const char *b)
int qlen_b = quote_c_style(b, NULL, NULL, 0);
if (qlen_a || qlen_b) {
- quote_c_style(a, &name, NULL, 0);
- strbuf_addstr(&name, " => ");
- quote_c_style(b, &name, NULL, 0);
- return strbuf_detach(&name, NULL);
+ quote_c_style(a, name, NULL, 0);
+ strbuf_addstr(name, " => ");
+ quote_c_style(b, name, NULL, 0);
+ return;
}
/* Find common prefix */
@@ -2109,19 +2108,18 @@ static char *pprint_rename(const char *a, const char *b)
if (b_midlen < 0)
b_midlen = 0;
- strbuf_grow(&name, pfx_length + a_midlen + b_midlen + sfx_length + 7);
+ strbuf_grow(name, pfx_length + a_midlen + b_midlen + sfx_length + 7);
if (pfx_length + sfx_length) {
- strbuf_add(&name, a, pfx_length);
- strbuf_addch(&name, '{');
+ strbuf_add(name, a, pfx_length);
+ strbuf_addch(name, '{');
}
- strbuf_add(&name, a + pfx_length, a_midlen);
- strbuf_addstr(&name, " => ");
- strbuf_add(&name, b + pfx_length, b_midlen);
+ strbuf_add(name, a + pfx_length, a_midlen);
+ strbuf_addstr(name, " => ");
+ strbuf_add(name, b + pfx_length, b_midlen);
if (pfx_length + sfx_length) {
- strbuf_addch(&name, '}');
- strbuf_add(&name, a + len_a - sfx_length, sfx_length);
+ strbuf_addch(name, '}');
+ strbuf_add(name, a + len_a - sfx_length, sfx_length);
}
- return strbuf_detach(&name, NULL);
}
struct diffstat_t {
@@ -2131,6 +2129,7 @@ struct diffstat_t {
char *from_name;
char *name;
char *print_name;
+ const char *comments;
unsigned is_unmerged:1;
unsigned is_binary:1;
unsigned is_renamed:1;
@@ -2197,23 +2196,20 @@ static void show_graph(struct strbuf *out, char ch, int cnt,
static void fill_print_name(struct diffstat_file *file)
{
- char *pname;
+ struct strbuf pname = STRBUF_INIT;
if (file->print_name)
return;
- if (!file->is_renamed) {
- struct strbuf buf = STRBUF_INIT;
- if (quote_c_style(file->name, &buf, NULL, 0)) {
- pname = strbuf_detach(&buf, NULL);
- } else {
- pname = file->name;
- strbuf_release(&buf);
- }
- } else {
- pname = pprint_rename(file->from_name, file->name);
- }
- file->print_name = pname;
+ if (file->is_renamed)
+ pprint_rename(&pname, file->from_name, file->name);
+ else
+ quote_c_style(file->name, &pname, NULL, 0);
+
+ if (file->comments)
+ strbuf_addf(&pname, " (%s)", file->comments);
+
+ file->print_name = strbuf_detach(&pname, NULL);
}
static void print_stat_summary_inserts_deletes(struct diff_options *options,
@@ -2797,8 +2793,7 @@ static void free_diffstat_info(struct diffstat_t *diffstat)
int i;
for (i = 0; i < diffstat->nr; i++) {
struct diffstat_file *f = diffstat->files[i];
- if (f->name != f->print_name)
- free(f->print_name);
+ free(f->print_name);
free(f->name);
free(f->from_name);
free(f);
@@ -3248,6 +3243,32 @@ static void builtin_diff(const char *name_a,
return;
}
+static char *get_compact_summary(const struct diff_filepair *p, int is_renamed)
+{
+ if (!is_renamed) {
+ if (p->status == DIFF_STATUS_ADDED) {
+ if (S_ISLNK(p->two->mode))
+ return "new +l";
+ else if ((p->two->mode & 0777) == 0755)
+ return "new +x";
+ else
+ return "new";
+ } else if (p->status == DIFF_STATUS_DELETED)
+ return "gone";
+ }
+ if (S_ISLNK(p->one->mode) && !S_ISLNK(p->two->mode))
+ return "mode -l";
+ else if (!S_ISLNK(p->one->mode) && S_ISLNK(p->two->mode))
+ return "mode +l";
+ else if ((p->one->mode & 0777) == 0644 &&
+ (p->two->mode & 0777) == 0755)
+ return "mode +x";
+ else if ((p->one->mode & 0777) == 0755 &&
+ (p->two->mode & 0777) == 0644)
+ return "mode -x";
+ return NULL;
+}
+
static void builtin_diffstat(const char *name_a, const char *name_b,
struct diff_filespec *one,
struct diff_filespec *two,
@@ -3267,6 +3288,8 @@ static void builtin_diffstat(const char *name_a, const char *name_b,
data = diffstat_add(diffstat, name_a, name_b);
data->is_interesting = p->status != DIFF_STATUS_UNKNOWN;
+ if (o->flags.stat_with_summary)
+ data->comments = get_compact_summary(p, data->is_renamed);
if (!one || !two) {
data->is_unmerged = 1;
@@ -4553,6 +4576,11 @@ int diff_opt_parse(struct diff_options *options,
else if (starts_with(arg, "--stat"))
/* --stat, --stat-width, --stat-name-width, or --stat-count */
return stat_opt(options, av);
+ else if (!strcmp(arg, "--compact-summary")) {
+ options->flags.stat_with_summary = 1;
+ options->output_format |= DIFF_FORMAT_DIFFSTAT;
+ } else if (!strcmp(arg, "--no-compact-summary"))
+ options->flags.stat_with_summary = 0;
/* renames options */
else if (starts_with(arg, "-B") ||
@@ -5241,10 +5269,12 @@ static void show_rename_copy(struct diff_options *opt, const char *renamecopy,
struct diff_filepair *p)
{
struct strbuf sb = STRBUF_INIT;
- char *names = pprint_rename(p->one->path, p->two->path);
+ struct strbuf names = STRBUF_INIT;
+
+ pprint_rename(&names, p->one->path, p->two->path);
strbuf_addf(&sb, " %s %s (%d%%)\n",
- renamecopy, names, similarity_index(p));
- free(names);
+ renamecopy, names.buf, similarity_index(p));
+ strbuf_release(&names);
emit_diff_symbol(opt, DIFF_SYMBOL_SUMMARY,
sb.buf, sb.len, 0);
show_mode_change(opt, p, 0);
diff --git a/diff.h b/diff.h
index 6bd278a..d29560f 100644
--- a/diff.h
+++ b/diff.h
@@ -93,6 +93,7 @@ struct diff_flags {
unsigned dirstat_by_line:1;
unsigned funccontext:1;
unsigned default_follow_renames:1;
+ unsigned stat_with_summary:1;
};
static inline void diff_flags_or(struct diff_flags *a,
diff --git a/fast-import.c b/fast-import.c
index b300e44..a2e8b1d 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -3006,7 +3006,7 @@ static void cat_blob(struct object_entry *oe, struct object_id *oid)
static void parse_get_mark(const char *p)
{
- struct object_entry *oe = oe;
+ struct object_entry *oe;
char output[GIT_MAX_HEXSZ + 2];
/* get-mark SP <object> LF */
@@ -3023,7 +3023,7 @@ static void parse_get_mark(const char *p)
static void parse_cat_blob(const char *p)
{
- struct object_entry *oe = oe;
+ struct object_entry *oe;
struct object_id oid;
/* cat-blob SP <object> LF */
diff --git a/fetch-pack.c b/fetch-pack.c
index d974612..52932b3 100644
--- a/fetch-pack.c
+++ b/fetch-pack.c
@@ -711,6 +711,28 @@ static void mark_alternate_complete(struct object *obj)
mark_complete(&obj->oid);
}
+struct loose_object_iter {
+ struct oidset *loose_object_set;
+ struct ref *refs;
+};
+
+/*
+ * If the number of refs is not larger than the number of loose objects,
+ * this function stops inserting.
+ */
+static int add_loose_objects_to_set(const struct object_id *oid,
+ const char *path,
+ void *data)
+{
+ struct loose_object_iter *iter = data;
+ oidset_insert(iter->loose_object_set, oid);
+ if (iter->refs == NULL)
+ return 1;
+
+ iter->refs = iter->refs->next;
+ return 0;
+}
+
static int everything_local(struct fetch_pack_args *args,
struct ref **refs,
struct ref **sought, int nr_sought)
@@ -719,16 +741,31 @@ static int everything_local(struct fetch_pack_args *args,
int retval;
int old_save_commit_buffer = save_commit_buffer;
timestamp_t cutoff = 0;
+ struct oidset loose_oid_set = OIDSET_INIT;
+ int use_oidset = 0;
+ struct loose_object_iter iter = {&loose_oid_set, *refs};
+
+ /* Enumerate all loose objects or know refs are not so many. */
+ use_oidset = !for_each_loose_object(add_loose_objects_to_set,
+ &iter, 0);
save_commit_buffer = 0;
for (ref = *refs; ref; ref = ref->next) {
struct object *o;
+ unsigned int flags = OBJECT_INFO_QUICK;
- if (!has_object_file_with_flags(&ref->old_oid,
- OBJECT_INFO_QUICK))
- continue;
+ if (use_oidset &&
+ !oidset_contains(&loose_oid_set, &ref->old_oid)) {
+ /*
+ * I know this does not exist in the loose form,
+ * so check if it exists in a non-loose form.
+ */
+ flags |= OBJECT_INFO_IGNORE_LOOSE;
+ }
+ if (!has_object_file_with_flags(&ref->old_oid, flags))
+ continue;
o = parse_object(&ref->old_oid);
if (!o)
continue;
@@ -744,6 +781,8 @@ static int everything_local(struct fetch_pack_args *args,
}
}
+ oidset_clear(&loose_oid_set);
+
if (!args->no_dependents) {
if (!args->deepen) {
for_each_ref(mark_complete_oid, NULL);
@@ -886,8 +925,17 @@ static int get_pack(struct fetch_pack_args *args,
? fetch_fsck_objects
: transfer_fsck_objects >= 0
? transfer_fsck_objects
- : 0)
- argv_array_push(&cmd.args, "--strict");
+ : 0) {
+ if (args->from_promisor)
+ /*
+ * We cannot use --strict in index-pack because it
+ * checks both broken objects and links, but we only
+ * want to check for broken objects.
+ */
+ argv_array_push(&cmd.args, "--fsck-objects");
+ else
+ argv_array_push(&cmd.args, "--strict");
+ }
cmd.in = demux.out;
cmd.git_cmd = 1;
diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index d9d8ff3..c1f52e4 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -677,7 +677,7 @@ sub add_untracked_cmd {
sub run_git_apply {
my $cmd = shift;
my $fh;
- open $fh, '| git ' . $cmd . " --recount --allow-overlap";
+ open $fh, '| git ' . $cmd . " --allow-overlap";
print $fh @_;
return close $fh;
}
@@ -705,6 +705,14 @@ sub parse_diff {
}
my (@hunk) = { TEXT => [], DISPLAY => [], TYPE => 'header' };
+ if (@colored && @colored != @diff) {
+ print STDERR
+ "fatal: mismatched output from interactive.diffFilter\n",
+ "hint: Your filter must maintain a one-to-one correspondence\n",
+ "hint: between its input and output lines.\n";
+ exit 1;
+ }
+
for (my $i = 0; $i < @diff; $i++) {
if ($diff[$i] =~ /^@@ /) {
push @hunk, { TEXT => [], DISPLAY => [],
@@ -751,6 +759,15 @@ sub parse_hunk_header {
return ($o_ofs, $o_cnt, $n_ofs, $n_cnt);
}
+sub format_hunk_header {
+ my ($o_ofs, $o_cnt, $n_ofs, $n_cnt) = @_;
+ return ("@@ -$o_ofs" .
+ (($o_cnt != 1) ? ",$o_cnt" : '') .
+ " +$n_ofs" .
+ (($n_cnt != 1) ? ",$n_cnt" : '') .
+ " @@\n");
+}
+
sub split_hunk {
my ($text, $display) = @_;
my @split = ();
@@ -784,6 +801,11 @@ sub split_hunk {
while (++$i < @$text) {
my $line = $text->[$i];
my $display = $display->[$i];
+ if ($line =~ /^\\/) {
+ push @{$this->{TEXT}}, $line;
+ push @{$this->{DISPLAY}}, $display;
+ next;
+ }
if ($line =~ /^ /) {
if ($this->{ADDDEL} &&
!defined $next_hunk_start) {
@@ -838,11 +860,7 @@ sub split_hunk {
my $o_cnt = $hunk->{OCNT};
my $n_cnt = $hunk->{NCNT};
- my $head = ("@@ -$o_ofs" .
- (($o_cnt != 1) ? ",$o_cnt" : '') .
- " +$n_ofs" .
- (($n_cnt != 1) ? ",$n_cnt" : '') .
- " @@\n");
+ my $head = format_hunk_header($o_ofs, $o_cnt, $n_ofs, $n_cnt);
my $display_head = $head;
unshift @{$hunk->{TEXT}}, $head;
if ($diff_use_color) {
@@ -886,6 +904,9 @@ sub merge_hunk {
$n_cnt++;
push @line, $line;
next;
+ } elsif ($line =~ /^\\/) {
+ push @line, $line;
+ next;
}
last if ($o1_ofs <= $ofs);
@@ -904,6 +925,9 @@ sub merge_hunk {
$n_cnt++;
push @line, $line;
next;
+ } elsif ($line =~ /^\\/) {
+ push @line, $line;
+ next;
}
$ofs++;
$o_cnt++;
@@ -912,11 +936,7 @@ sub merge_hunk {
}
push @line, $line;
}
- my $head = ("@@ -$o0_ofs" .
- (($o_cnt != 1) ? ",$o_cnt" : '') .
- " +$n0_ofs" .
- (($n_cnt != 1) ? ",$n_cnt" : '') .
- " @@\n");
+ my $head = format_hunk_header($o0_ofs, $o_cnt, $n0_ofs, $n_cnt);
@{$prev->{TEXT}} = ($head, @line);
}
@@ -925,14 +945,35 @@ sub coalesce_overlapping_hunks {
my @out = ();
my ($last_o_ctx, $last_was_dirty);
+ my $ofs_delta = 0;
- for (grep { $_->{USE} } @in) {
+ for (@in) {
if ($_->{TYPE} ne 'hunk') {
push @out, $_;
next;
}
my $text = $_->{TEXT};
- my ($o_ofs) = parse_hunk_header($text->[0]);
+ my ($o_ofs, $o_cnt, $n_ofs, $n_cnt) =
+ parse_hunk_header($text->[0]);
+ unless ($_->{USE}) {
+ $ofs_delta += $o_cnt - $n_cnt;
+ # If this hunk has been edited then subtract
+ # the delta that is due to the edit.
+ if ($_->{OFS_DELTA}) {
+ $ofs_delta -= $_->{OFS_DELTA};
+ }
+ next;
+ }
+ if ($ofs_delta) {
+ $n_ofs += $ofs_delta;
+ $_->{TEXT}->[0] = format_hunk_header($o_ofs, $o_cnt,
+ $n_ofs, $n_cnt);
+ }
+ # If this hunk was edited then adjust the offset delta
+ # to reflect the edit.
+ if ($_->{OFS_DELTA}) {
+ $ofs_delta += $_->{OFS_DELTA};
+ }
if (defined $last_o_ctx &&
$o_ofs <= $last_o_ctx &&
!$_->{DIRTY} &&
@@ -1004,6 +1045,30 @@ marked for discarding."),
marked for applying."),
);
+sub recount_edited_hunk {
+ local $_;
+ my ($oldtext, $newtext) = @_;
+ my ($o_cnt, $n_cnt) = (0, 0);
+ for (@{$newtext}[1..$#{$newtext}]) {
+ my $mode = substr($_, 0, 1);
+ if ($mode eq '-') {
+ $o_cnt++;
+ } elsif ($mode eq '+') {
+ $n_cnt++;
+ } elsif ($mode eq ' ') {
+ $o_cnt++;
+ $n_cnt++;
+ }
+ }
+ my ($o_ofs, undef, $n_ofs, undef) =
+ parse_hunk_header($newtext->[0]);
+ $newtext->[0] = format_hunk_header($o_ofs, $o_cnt, $n_ofs, $n_cnt);
+ my (undef, $orig_o_cnt, undef, $orig_n_cnt) =
+ parse_hunk_header($oldtext->[0]);
+ # Return the change in the number of lines inserted by this hunk
+ return $orig_o_cnt - $orig_n_cnt - $o_cnt + $n_cnt;
+}
+
sub edit_hunk_manually {
my ($oldtext) = @_;
@@ -1102,25 +1167,32 @@ sub prompt_yesno {
}
sub edit_hunk_loop {
- my ($head, $hunk, $ix) = @_;
- my $text = $hunk->[$ix]->{TEXT};
+ my ($head, $hunks, $ix) = @_;
+ my $hunk = $hunks->[$ix];
+ my $text = $hunk->{TEXT};
while (1) {
- $text = edit_hunk_manually($text);
- if (!defined $text) {
+ my $newtext = edit_hunk_manually($text);
+ if (!defined $newtext) {
return undef;
}
my $newhunk = {
- TEXT => $text,
- TYPE => $hunk->[$ix]->{TYPE},
+ TEXT => $newtext,
+ TYPE => $hunk->{TYPE},
USE => 1,
DIRTY => 1,
};
+ $newhunk->{OFS_DELTA} = recount_edited_hunk($text, $newtext);
+ # If this hunk has already been edited then add the
+ # offset delta of the previous edit to get the real
+ # delta from the original unedited hunk.
+ $hunk->{OFS_DELTA} and
+ $newhunk->{OFS_DELTA} += $hunk->{OFS_DELTA};
if (diff_applies($head,
- @{$hunk}[0..$ix-1],
+ @{$hunks}[0..$ix-1],
$newhunk,
- @{$hunk}[$ix+1..$#{$hunk}])) {
- $newhunk->{DISPLAY} = [color_diff(@{$text})];
+ @{$hunks}[$ix+1..$#{$hunks}])) {
+ $newhunk->{DISPLAY} = [color_diff(@{$newtext})];
return $newhunk;
}
else {
@@ -1492,7 +1564,7 @@ sub patch_update_file {
error_msg __("No other hunks to search\n");
next;
}
- if ($1 eq "") {
+ if ($regex eq "") {
print colored $prompt_color, __("search for regex? ");
$regex = <STDIN>;
if (defined $regex) {
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index 1b7e4b2..2587a01 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -310,7 +310,7 @@ git rev-list --reverse --topo-order --default HEAD \
die "Could not get the commits"
commits=$(wc -l <../revs | tr -d " ")
-test $commits -eq 0 && die "Found nothing to rewrite"
+test $commits -eq 0 && die_with_status 2 "Found nothing to rewrite"
# Rewrite the commits
report_progress ()
@@ -627,12 +627,12 @@ then
print H "$_:$f\n" or die;
}
close(H) or die;' || die "Unable to save state")
- state_tree=$(/bin/echo -e "100644 blob $state_blob\tfilter.map" | git mktree)
+ state_tree=$(printf '100644 blob %s\tfilter.map\n' "$state_blob" | git mktree)
if test -n "$state_commit"
then
- state_commit=$(/bin/echo "Sync" | git commit-tree "$state_tree" -p "$state_commit")
+ state_commit=$(echo "Sync" | git commit-tree "$state_tree" -p "$state_commit")
else
- state_commit=$(/bin/echo "Sync" | git commit-tree "$state_tree" )
+ state_commit=$(echo "Sync" | git commit-tree "$state_tree" )
fi
git update-ref "$state_branch" "$state_commit"
fi
diff --git a/git-send-email.perl b/git-send-email.perl
index 435c7c9..2fa7818 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -26,11 +26,13 @@ use Text::ParseWords;
use Term::ANSIColor;
use File::Temp qw/ tempdir tempfile /;
use File::Spec::Functions qw(catdir catfile);
-use Git::Error qw(:try);
+use Git::LoadCPAN::Error qw(:try);
use Cwd qw(abs_path cwd);
use Git;
use Git::I18N;
-use Git::Mail::Address;
+use Net::Domain ();
+use Net::SMTP ();
+use Git::LoadCPAN::Mail::Address;
Getopt::Long::Configure qw/ pass_through /;
@@ -57,6 +59,7 @@ git send-email --dump-aliases
--[no-]cc <str> * Email Cc:
--[no-]bcc <str> * Email Bcc:
--subject <str> * Email "Subject:"
+ --reply-to <str> * Email "Reply-To:"
--in-reply-to <str> * Email "In-Reply-To:"
--[no-]xmailer * Add "X-Mailer:" header (default).
--[no-]annotate * Review each patch that will be sent in an editor.
@@ -167,13 +170,13 @@ 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,
- $initial_reply_to,$initial_subject,@files,
+ $initial_in_reply_to,$reply_to,$initial_subject,@files,
$author,$sender,$smtp_authpass,$annotate,$use_xmailer,$compose,$time);
my $envelope_sender;
# Example reply to:
-#$initial_reply_to = ''; #<20050203173208.GA23964@foobar.com>';
+#$initial_in_reply_to = ''; #<20050203173208.GA23964@foobar.com>';
my $repo = eval { Git->repository() };
my @repo = $repo ? ($repo) : ();
@@ -315,7 +318,8 @@ die __("--dump-aliases incompatible with other options\n")
if !$help and $dump_aliases and @ARGV;
$rc = GetOptions(
"sender|from=s" => \$sender,
- "in-reply-to=s" => \$initial_reply_to,
+ "in-reply-to=s" => \$initial_in_reply_to,
+ "reply-to=s" => \$reply_to,
"subject=s" => \$initial_subject,
"to=s" => \@initial_to,
"to-cmd=s" => \$to_cmd,
@@ -681,7 +685,8 @@ if ($compose) {
my $tpl_sender = $sender || $repoauthor || $repocommitter || '';
my $tpl_subject = $initial_subject || '';
- my $tpl_reply_to = $initial_reply_to || '';
+ my $tpl_in_reply_to = $initial_in_reply_to || '';
+ my $tpl_reply_to = $reply_to || '';
print $c <<EOT1, Git::prefix_lines("GIT: ", __ <<EOT2), <<EOT3;
From $tpl_sender # This line is ignored.
@@ -693,8 +698,9 @@ for the patch you are writing.
Clear the body content if you don't wish to send a summary.
EOT2
From: $tpl_sender
+Reply-To: $tpl_reply_to
Subject: $tpl_subject
-In-Reply-To: $tpl_reply_to
+In-Reply-To: $tpl_in_reply_to
EOT3
for my $f (@files) {
@@ -708,57 +714,73 @@ EOT3
do_edit($compose_filename);
}
- open my $c2, ">", $compose_filename . ".final"
- or die sprintf(__("Failed to open %s.final: %s"), $compose_filename, $!);
-
open $c, "<", $compose_filename
or die sprintf(__("Failed to open %s: %s"), $compose_filename, $!);
- my $need_8bit_cte = file_has_nonascii($compose_filename);
- my $in_body = 0;
- my $summary_empty = 1;
if (!defined $compose_encoding) {
$compose_encoding = "UTF-8";
}
- while(<$c>) {
- next if m/^GIT:/;
- if ($in_body) {
- $summary_empty = 0 unless (/^\n$/);
- } elsif (/^\n$/) {
- $in_body = 1;
- if ($need_8bit_cte) {
- print $c2 "MIME-Version: 1.0\n",
- "Content-Type: text/plain; ",
- "charset=$compose_encoding\n",
- "Content-Transfer-Encoding: 8bit\n";
- }
- } elsif (/^MIME-Version:/i) {
- $need_8bit_cte = 0;
- } elsif (/^Subject:\s*(.+)\s*$/i) {
- $initial_subject = $1;
- my $subject = $initial_subject;
- $_ = "Subject: " .
- quote_subject($subject, $compose_encoding) .
- "\n";
- } elsif (/^In-Reply-To:\s*(.+)\s*$/i) {
- $initial_reply_to = $1;
- next;
- } elsif (/^From:\s*(.+)\s*$/i) {
- $sender = $1;
- next;
- } elsif (/^(?:To|Cc|Bcc):/i) {
- print __("To/Cc/Bcc fields are not interpreted yet, they have been ignored\n");
- next;
+
+ my %parsed_email;
+ while (my $line = <$c>) {
+ next if $line =~ m/^GIT:/;
+ parse_header_line($line, \%parsed_email);
+ if ($line =~ /^$/) {
+ $parsed_email{'body'} = filter_body($c);
}
- print $c2 $_;
}
close $c;
- close $c2;
- if ($summary_empty) {
+ open my $c2, ">", $compose_filename . ".final"
+ or die sprintf(__("Failed to open %s.final: %s"), $compose_filename, $!);
+
+
+ if ($parsed_email{'From'}) {
+ $sender = delete($parsed_email{'From'});
+ }
+ if ($parsed_email{'In-Reply-To'}) {
+ $initial_in_reply_to = delete($parsed_email{'In-Reply-To'});
+ }
+ if ($parsed_email{'Reply-To'}) {
+ $reply_to = delete($parsed_email{'Reply-To'});
+ }
+ if ($parsed_email{'Subject'}) {
+ $initial_subject = delete($parsed_email{'Subject'});
+ print $c2 "Subject: " .
+ quote_subject($initial_subject, $compose_encoding) .
+ "\n";
+ }
+
+ if ($parsed_email{'MIME-Version'}) {
+ print $c2 "MIME-Version: $parsed_email{'MIME-Version'}\n",
+ "Content-Type: $parsed_email{'Content-Type'};\n",
+ "Content-Transfer-Encoding: $parsed_email{'Content-Transfer-Encoding'}\n";
+ delete($parsed_email{'MIME-Version'});
+ delete($parsed_email{'Content-Type'});
+ delete($parsed_email{'Content-Transfer-Encoding'});
+ } elsif (file_has_nonascii($compose_filename)) {
+ my $content_type = (delete($parsed_email{'Content-Type'}) or
+ "text/plain; charset=$compose_encoding");
+ print $c2 "MIME-Version: 1.0\n",
+ "Content-Type: $content_type\n",
+ "Content-Transfer-Encoding: 8bit\n";
+ }
+ # Preserve unknown headers
+ foreach my $key (keys %parsed_email) {
+ next if $key eq 'body';
+ print $c2 "$key: $parsed_email{$key}";
+ }
+
+ if ($parsed_email{'body'}) {
+ print $c2 "\n$parsed_email{'body'}\n";
+ delete($parsed_email{'body'});
+ } else {
print __("Summary email is empty, skipping it\n");
$compose = -1;
}
+
+ close $c2;
+
} elsif ($annotate) {
do_edit(@files);
}
@@ -797,6 +819,32 @@ sub ask {
return;
}
+sub parse_header_line {
+ my $lines = shift;
+ my $parsed_line = shift;
+ my $addr_pat = join "|", qw(To Cc Bcc);
+
+ foreach (split(/\n/, $lines)) {
+ if (/^($addr_pat):\s*(.+)$/i) {
+ $parsed_line->{$1} = [ parse_address_line($2) ];
+ } elsif (/^([^:]*):\s*(.+)\s*$/i) {
+ $parsed_line->{$1} = $2;
+ }
+ }
+}
+
+sub filter_body {
+ my $c = shift;
+ my $body = "";
+ while (my $body_line = <$c>) {
+ if ($body_line !~ m/^GIT:/) {
+ $body .= $body_line;
+ }
+ }
+ return $body;
+}
+
+
my %broken_encoding;
sub file_declares_8bit_cte {
@@ -877,16 +925,22 @@ sub expand_one_alias {
@initial_cc = process_address_list(@initial_cc);
@bcclist = process_address_list(@bcclist);
-if ($thread && !defined $initial_reply_to && $prompting) {
- $initial_reply_to = ask(
+if ($thread && !defined $initial_in_reply_to && $prompting) {
+ $initial_in_reply_to = ask(
__("Message-ID to be used as In-Reply-To for the first email (if any)? "),
default => "",
valid_re => qr/\@.*\./, confirm_only => 1);
}
-if (defined $initial_reply_to) {
- $initial_reply_to =~ s/^\s*<?//;
- $initial_reply_to =~ s/>?\s*$//;
- $initial_reply_to = "<$initial_reply_to>" if $initial_reply_to ne '';
+if (defined $initial_in_reply_to) {
+ $initial_in_reply_to =~ s/^\s*<?//;
+ $initial_in_reply_to =~ s/>?\s*$//;
+ $initial_in_reply_to = "<$initial_in_reply_to>" if $initial_in_reply_to ne '';
+}
+
+if (defined $reply_to) {
+ $reply_to =~ s/^\s+|\s+$//g;
+ ($reply_to) = expand_aliases($reply_to);
+ $reply_to = sanitize_address($reply_to);
}
if (!defined $smtp_server) {
@@ -906,7 +960,7 @@ if ($compose && $compose > 0) {
}
# Variables we set as part of the loop over files
-our ($message_id, %mail, $subject, $reply_to, $references, $message,
+our ($message_id, %mail, $subject, $in_reply_to, $references, $message,
$needs_confirm, $message_num, $ask_default);
sub extract_valid_address {
@@ -1147,10 +1201,8 @@ sub valid_fqdn {
sub maildomain_net {
my $maildomain;
- if (eval { require Net::Domain; 1 }) {
- my $domain = Net::Domain::domainname();
- $maildomain = $domain if valid_fqdn($domain);
- }
+ my $domain = Net::Domain::domainname();
+ $maildomain = $domain if valid_fqdn($domain);
return $maildomain;
}
@@ -1158,17 +1210,15 @@ sub maildomain_net {
sub maildomain_mta {
my $maildomain;
- if (eval { require Net::SMTP; 1 }) {
- for my $host (qw(mailhost localhost)) {
- my $smtp = Net::SMTP->new($host);
- if (defined $smtp) {
- my $domain = $smtp->domain;
- $smtp->quit;
+ for my $host (qw(mailhost localhost)) {
+ my $smtp = Net::SMTP->new($host);
+ if (defined $smtp) {
+ my $domain = $smtp->domain;
+ $smtp->quit;
- $maildomain = $domain if valid_fqdn($domain);
+ $maildomain = $domain if valid_fqdn($domain);
- last if $maildomain;
- }
+ last if $maildomain;
}
}
@@ -1315,11 +1365,14 @@ Message-Id: $message_id
if ($use_xmailer) {
$header .= "X-Mailer: git-send-email $gitversion\n";
}
- if ($reply_to) {
+ if ($in_reply_to) {
- $header .= "In-Reply-To: $reply_to\n";
+ $header .= "In-Reply-To: $in_reply_to\n";
$header .= "References: $references\n";
}
+ if ($reply_to) {
+ $header .= "Reply-To: $reply_to\n";
+ }
if (@xh) {
$header .= join("\n", @xh) . "\n";
}
@@ -1494,8 +1547,8 @@ EOF
return 1;
}
-$reply_to = $initial_reply_to;
-$references = $initial_reply_to || '';
+$in_reply_to = $initial_in_reply_to;
+$references = $initial_in_reply_to || '';
$subject = $initial_subject;
$message_num = 0;
@@ -1705,9 +1758,9 @@ foreach my $t (@files) {
# set up for the next message
if ($thread && $message_was_sent &&
- ($chain_reply_to || !defined $reply_to || length($reply_to) == 0 ||
+ ($chain_reply_to || !defined $in_reply_to || length($in_reply_to) == 0 ||
$message_num == 1)) {
- $reply_to = $message_id;
+ $in_reply_to = $message_id;
if (length $references > 0) {
$references .= "\n $message_id";
} else {
diff --git a/git.c b/git.c
index 96cd734..ceaa58e 100644
--- a/git.c
+++ b/git.c
@@ -389,7 +389,7 @@ static struct cmd_struct commands[] = {
{ "column", cmd_column, RUN_SETUP_GENTLY },
{ "commit", cmd_commit, RUN_SETUP | NEED_WORK_TREE },
{ "commit-tree", cmd_commit_tree, RUN_SETUP },
- { "config", cmd_config, RUN_SETUP_GENTLY },
+ { "config", cmd_config, RUN_SETUP_GENTLY | DELAY_PAGER_CONFIG },
{ "count-objects", cmd_count_objects, RUN_SETUP },
{ "credential", cmd_credential, RUN_SETUP_GENTLY },
{ "describe", cmd_describe, RUN_SETUP },
diff --git a/gitweb/INSTALL b/gitweb/INSTALL
index 408f285..a58e6b3 100644
--- a/gitweb/INSTALL
+++ b/gitweb/INSTALL
@@ -29,12 +29,11 @@ Requirements
------------
- Core git tools
- - Perl
+ - Perl 5.8
- Perl modules: CGI, Encode, Fcntl, File::Find, File::Basename.
- web server
The following optional Perl modules are required for extra features
- - Digest::MD5 - for gravatar support
- CGI::Fast and FCGI - for running gitweb as FastCGI script
- HTML::TagCloud - for fancy tag cloud in project list view
- HTTP::Date or Time::ParseDate - to support If-Modified-Since for feeds
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 2417057..2594a4b 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -20,6 +20,8 @@ use Fcntl ':mode';
use File::Find qw();
use File::Basename qw(basename);
use Time::HiRes qw(gettimeofday tv_interval);
+use Digest::MD5 qw(md5_hex);
+
binmode STDOUT, ':utf8';
if (!defined($CGI::VERSION) || $CGI::VERSION < 4.08) {
@@ -490,7 +492,6 @@ our %feature = (
# Currently available providers are gravatar and picon.
# If an unknown provider is specified, the feature is disabled.
- # Gravatar depends on Digest::MD5.
# Picon currently relies on the indiana.edu database.
# To enable system wide have in $GITWEB_CONFIG
@@ -1166,18 +1167,8 @@ sub configure_gitweb_features {
our @snapshot_fmts = gitweb_get_feature('snapshot');
@snapshot_fmts = filter_snapshot_fmts(@snapshot_fmts);
- # check that the avatar feature is set to a known provider name,
- # and for each provider check if the dependencies are satisfied.
- # if the provider name is invalid or the dependencies are not met,
- # reset $git_avatar to the empty string.
our ($git_avatar) = gitweb_get_feature('avatar');
- if ($git_avatar eq 'gravatar') {
- $git_avatar = '' unless (eval { require Digest::MD5; 1; });
- } elsif ($git_avatar eq 'picon') {
- # no dependencies
- } else {
- $git_avatar = '';
- }
+ $git_avatar = '' unless $git_avatar =~ /^(?:gravatar|picon)$/s;
our @extra_branch_refs = gitweb_get_feature('extra-branch-refs');
@extra_branch_refs = filter_and_validate_refs (@extra_branch_refs);
@@ -2167,7 +2158,7 @@ sub gravatar_url {
my $size = shift;
$avatar_cache{$email} ||=
"//www.gravatar.com/avatar/" .
- Digest::MD5::md5_hex($email) . "?s=";
+ md5_hex($email) . "?s=";
return $avatar_cache{$email} . $size;
}
diff --git a/http.c b/http.c
index 8c11156..a5bd5d6 100644
--- a/http.c
+++ b/http.c
@@ -69,6 +69,9 @@ static const char *ssl_key;
#if LIBCURL_VERSION_NUM >= 0x070908
static const char *ssl_capath;
#endif
+#if LIBCURL_VERSION_NUM >= 0x071304
+static const char *curl_no_proxy;
+#endif
#if LIBCURL_VERSION_NUM >= 0x072c00
static const char *ssl_pinnedkey;
#endif
@@ -77,7 +80,6 @@ static long curl_low_speed_limit = -1;
static long curl_low_speed_time = -1;
static int curl_ftp_no_epsv;
static const char *curl_http_proxy;
-static const char *curl_no_proxy;
static const char *http_proxy_authmethod;
static struct {
const char *name;
diff --git a/merge-recursive.c b/merge-recursive.c
index c554016..9c05eb7 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -49,6 +49,67 @@ static unsigned int path_hash(const char *path)
return ignore_case ? strihash(path) : strhash(path);
}
+static struct dir_rename_entry *dir_rename_find_entry(struct hashmap *hashmap,
+ char *dir)
+{
+ struct dir_rename_entry key;
+
+ if (dir == NULL)
+ return NULL;
+ hashmap_entry_init(&key, strhash(dir));
+ key.dir = dir;
+ return hashmap_get(hashmap, &key, NULL);
+}
+
+static int dir_rename_cmp(const void *unused_cmp_data,
+ const void *entry,
+ const void *entry_or_key,
+ const void *unused_keydata)
+{
+ const struct dir_rename_entry *e1 = entry;
+ const struct dir_rename_entry *e2 = entry_or_key;
+
+ return strcmp(e1->dir, e2->dir);
+}
+
+static void dir_rename_init(struct hashmap *map)
+{
+ hashmap_init(map, dir_rename_cmp, NULL, 0);
+}
+
+static void dir_rename_entry_init(struct dir_rename_entry *entry,
+ char *directory)
+{
+ hashmap_entry_init(entry, strhash(directory));
+ entry->dir = directory;
+ entry->non_unique_new_dir = 0;
+ strbuf_init(&entry->new_dir, 0);
+ string_list_init(&entry->possible_new_dirs, 0);
+}
+
+static struct collision_entry *collision_find_entry(struct hashmap *hashmap,
+ char *target_file)
+{
+ struct collision_entry key;
+
+ hashmap_entry_init(&key, strhash(target_file));
+ key.target_file = target_file;
+ return hashmap_get(hashmap, &key, NULL);
+}
+
+static int collision_cmp(void *unused_cmp_data,
+ const struct collision_entry *e1,
+ const struct collision_entry *e2,
+ const void *unused_keydata)
+{
+ return strcmp(e1->target_file, e2->target_file);
+}
+
+static void collision_init(struct hashmap *map)
+{
+ hashmap_init(map, (hashmap_cmp_fn) collision_cmp, NULL, 0);
+}
+
static void flush_output(struct merge_options *o)
{
if (o->buffer_output < 2 && o->obuf.len) {
@@ -119,6 +180,7 @@ static int oid_eq(const struct object_id *a, const struct object_id *b)
enum rename_type {
RENAME_NORMAL = 0,
+ RENAME_DIR,
RENAME_DELETE,
RENAME_ONE_FILE_TO_ONE,
RENAME_ONE_FILE_TO_TWO,
@@ -275,32 +337,37 @@ static void init_tree_desc_from_tree(struct tree_desc *desc, struct tree *tree)
init_tree_desc(desc, tree->buffer, tree->size);
}
-static int git_merge_trees(int index_only,
+static int git_merge_trees(struct merge_options *o,
struct tree *common,
struct tree *head,
struct tree *merge)
{
int rc;
struct tree_desc t[3];
- struct unpack_trees_options opts;
- memset(&opts, 0, sizeof(opts));
- if (index_only)
- opts.index_only = 1;
+ memset(&o->unpack_opts, 0, sizeof(o->unpack_opts));
+ if (o->call_depth)
+ o->unpack_opts.index_only = 1;
else
- opts.update = 1;
- opts.merge = 1;
- opts.head_idx = 2;
- opts.fn = threeway_merge;
- opts.src_index = &the_index;
- opts.dst_index = &the_index;
- setup_unpack_trees_porcelain(&opts, "merge");
+ o->unpack_opts.update = 1;
+ o->unpack_opts.merge = 1;
+ o->unpack_opts.head_idx = 2;
+ o->unpack_opts.fn = threeway_merge;
+ o->unpack_opts.src_index = &the_index;
+ o->unpack_opts.dst_index = &the_index;
+ setup_unpack_trees_porcelain(&o->unpack_opts, "merge");
init_tree_desc_from_tree(t+0, common);
init_tree_desc_from_tree(t+1, head);
init_tree_desc_from_tree(t+2, merge);
- rc = unpack_trees(3, t, &opts);
+ rc = unpack_trees(3, t, &o->unpack_opts);
+ /*
+ * unpack_trees NULLifies src_index, but it's used in verify_uptodate,
+ * so set to the new index which will usually have modification
+ * timestamp info copied over.
+ */
+ o->unpack_opts.src_index = &the_index;
cache_tree_free(&active_cache_tree);
return rc;
}
@@ -360,6 +427,21 @@ static void get_files_dirs(struct merge_options *o, struct tree *tree)
read_tree_recursive(tree, "", 0, 0, &match_all, save_files_dirs, o);
}
+static int get_tree_entry_if_blob(struct tree *tree,
+ const char *path,
+ struct object_id *hashy,
+ unsigned int *mode_o)
+{
+ int ret;
+
+ ret = get_tree_entry(&tree->object.oid, path, hashy, mode_o);
+ if (S_ISDIR(*mode_o)) {
+ oidcpy(hashy, &null_oid);
+ *mode_o = 0;
+ }
+ return ret;
+}
+
/*
* Returns an index_entry instance which doesn't have to correspond to
* a real cache entry in Git's index.
@@ -370,12 +452,12 @@ static struct stage_data *insert_stage_data(const char *path,
{
struct string_list_item *item;
struct stage_data *e = xcalloc(1, sizeof(struct stage_data));
- get_tree_entry(&o->object.oid, path,
- &e->stages[1].oid, &e->stages[1].mode);
- get_tree_entry(&a->object.oid, path,
- &e->stages[2].oid, &e->stages[2].mode);
- get_tree_entry(&b->object.oid, path,
- &e->stages[3].oid, &e->stages[3].mode);
+ get_tree_entry_if_blob(o, path,
+ &e->stages[1].oid, &e->stages[1].mode);
+ get_tree_entry_if_blob(a, path,
+ &e->stages[2].oid, &e->stages[2].mode);
+ get_tree_entry_if_blob(b, path,
+ &e->stages[3].oid, &e->stages[3].mode);
item = string_list_insert(entries, path);
item->util = e;
return e;
@@ -534,78 +616,10 @@ struct rename {
*/
struct stage_data *src_entry;
struct stage_data *dst_entry;
+ unsigned add_turned_into_rename:1;
unsigned processed:1;
};
-/*
- * Get information of all renames which occurred between 'o_tree' and
- * 'tree'. We need the three trees in the merge ('o_tree', 'a_tree' and
- * 'b_tree') to be able to associate the correct cache entries with
- * the rename information. 'tree' is always equal to either a_tree or b_tree.
- */
-static struct string_list *get_renames(struct merge_options *o,
- struct tree *tree,
- struct tree *o_tree,
- struct tree *a_tree,
- struct tree *b_tree,
- struct string_list *entries)
-{
- int i;
- struct string_list *renames;
- struct diff_options opts;
-
- renames = xcalloc(1, sizeof(struct string_list));
- if (!o->detect_rename)
- return renames;
-
- diff_setup(&opts);
- opts.flags.recursive = 1;
- opts.flags.rename_empty = 0;
- opts.detect_rename = DIFF_DETECT_RENAME;
- opts.rename_limit = o->merge_rename_limit >= 0 ? o->merge_rename_limit :
- o->diff_rename_limit >= 0 ? o->diff_rename_limit :
- 1000;
- opts.rename_score = o->rename_score;
- opts.show_rename_progress = o->show_rename_progress;
- opts.output_format = DIFF_FORMAT_NO_OUTPUT;
- diff_setup_done(&opts);
- diff_tree_oid(&o_tree->object.oid, &tree->object.oid, "", &opts);
- diffcore_std(&opts);
- if (opts.needed_rename_limit > o->needed_rename_limit)
- o->needed_rename_limit = opts.needed_rename_limit;
- for (i = 0; i < diff_queued_diff.nr; ++i) {
- struct string_list_item *item;
- struct rename *re;
- struct diff_filepair *pair = diff_queued_diff.queue[i];
- if (pair->status != 'R') {
- diff_free_filepair(pair);
- continue;
- }
- re = xmalloc(sizeof(*re));
- re->processed = 0;
- re->pair = pair;
- item = string_list_lookup(entries, re->pair->one->path);
- if (!item)
- re->src_entry = insert_stage_data(re->pair->one->path,
- o_tree, a_tree, b_tree, entries);
- else
- re->src_entry = item->util;
-
- item = string_list_lookup(entries, re->pair->two->path);
- if (!item)
- re->dst_entry = insert_stage_data(re->pair->two->path,
- o_tree, a_tree, b_tree, entries);
- else
- re->dst_entry = item->util;
- item = string_list_insert(renames, pair->one->path);
- item->util = re;
- }
- opts.output_format = DIFF_FORMAT_NO_OUTPUT;
- diff_queued_diff.nr = 0;
- diff_flush(&opts);
- return renames;
-}
-
static int update_stages(struct merge_options *opt, const char *path,
const struct diff_filespec *o,
const struct diff_filespec *a,
@@ -637,6 +651,27 @@ static int update_stages(struct merge_options *opt, const char *path,
return 0;
}
+static int update_stages_for_stage_data(struct merge_options *opt,
+ const char *path,
+ const struct stage_data *stage_data)
+{
+ struct diff_filespec o, a, b;
+
+ o.mode = stage_data->stages[1].mode;
+ oidcpy(&o.oid, &stage_data->stages[1].oid);
+
+ a.mode = stage_data->stages[2].mode;
+ oidcpy(&a.oid, &stage_data->stages[2].oid);
+
+ b.mode = stage_data->stages[3].mode;
+ oidcpy(&b.oid, &stage_data->stages[3].oid);
+
+ return update_stages(opt, path,
+ is_null_oid(&o.oid) ? NULL : &o,
+ is_null_oid(&a.oid) ? NULL : &a,
+ is_null_oid(&b.oid) ? NULL : &b);
+}
+
static void update_entry(struct stage_data *entry,
struct diff_filespec *o,
struct diff_filespec *a,
@@ -765,6 +800,20 @@ static int would_lose_untracked(const char *path)
return !was_tracked(path) && file_exists(path);
}
+static int was_dirty(struct merge_options *o, const char *path)
+{
+ struct cache_entry *ce;
+ int dirty = 1;
+
+ if (o->call_depth || !was_tracked(path))
+ return !dirty;
+
+ ce = cache_file_exists(path, strlen(path), ignore_case);
+ dirty = (ce->ce_stat_data.sd_mtime.sec > 0 &&
+ verify_uptodate(ce, &o->unpack_opts) != 0);
+ return dirty;
+}
+
static int make_room_for_path(struct merge_options *o, const char *path)
{
int status, i;
@@ -1114,6 +1163,38 @@ static int merge_file_one(struct merge_options *o,
return merge_file_1(o, &one, &a, &b, branch1, branch2, mfi);
}
+static int conflict_rename_dir(struct merge_options *o,
+ struct diff_filepair *pair,
+ const char *rename_branch,
+ const char *other_branch)
+{
+ const struct diff_filespec *dest = pair->two;
+
+ if (!o->call_depth && would_lose_untracked(dest->path)) {
+ char *alt_path = unique_path(o, dest->path, rename_branch);
+
+ output(o, 1, _("Error: Refusing to lose untracked file at %s; "
+ "writing to %s instead."),
+ dest->path, alt_path);
+ /*
+ * Write the file in worktree at alt_path, but not in the
+ * index. Instead, write to dest->path for the index but
+ * only at the higher appropriate stage.
+ */
+ if (update_file(o, 0, &dest->oid, dest->mode, alt_path))
+ return -1;
+ free(alt_path);
+ return update_stages(o, dest->path, NULL,
+ rename_branch == o->branch1 ? dest : NULL,
+ rename_branch == o->branch1 ? NULL : dest);
+ }
+
+ /* Update dest->path both in index and in worktree */
+ if (update_file(o, 1, &dest->oid, dest->mode, dest->path))
+ return -1;
+ return 0;
+}
+
static int handle_change_delete(struct merge_options *o,
const char *path, const char *old_path,
const struct object_id *o_oid, int o_mode,
@@ -1127,7 +1208,8 @@ static int handle_change_delete(struct merge_options *o,
const char *update_path = path;
int ret = 0;
- if (dir_in_way(path, !o->call_depth, 0)) {
+ if (dir_in_way(path, !o->call_depth, 0) ||
+ (!o->call_depth && would_lose_untracked(path))) {
update_path = alt_path = unique_path(o, path, change_branch);
}
@@ -1242,17 +1324,34 @@ static int handle_file(struct merge_options *o,
add = filespec_from_entry(&other, dst_entry, stage ^ 1);
if (add) {
+ int ren_src_was_dirty = was_dirty(o, rename->path);
char *add_name = unique_path(o, rename->path, other_branch);
if (update_file(o, 0, &add->oid, add->mode, add_name))
return -1;
- remove_file(o, 0, rename->path, 0);
+ if (ren_src_was_dirty) {
+ output(o, 1, _("Refusing to lose dirty file at %s"),
+ rename->path);
+ }
+ /*
+ * Because the double negatives somehow keep confusing me...
+ * 1) update_wd iff !ren_src_was_dirty.
+ * 2) no_wd iff !update_wd
+ * 3) so, no_wd == !!ren_src_was_dirty == ren_src_was_dirty
+ */
+ remove_file(o, 0, rename->path, ren_src_was_dirty);
dst_name = unique_path(o, rename->path, cur_branch);
} else {
if (dir_in_way(rename->path, !o->call_depth, 0)) {
dst_name = unique_path(o, rename->path, cur_branch);
output(o, 1, _("%s is a directory in %s adding as %s instead"),
rename->path, other_branch, dst_name);
+ } else if (!o->call_depth &&
+ would_lose_untracked(rename->path)) {
+ dst_name = unique_path(o, rename->path, cur_branch);
+ output(o, 1, _("Refusing to lose untracked file at %s; "
+ "adding as %s instead"),
+ rename->path, dst_name);
}
}
if ((ret = update_file(o, 0, &rename->oid, rename->mode, dst_name)))
@@ -1378,11 +1477,43 @@ static int conflict_rename_rename_2to1(struct merge_options *o,
char *new_path2 = unique_path(o, path, ci->branch2);
output(o, 1, _("Renaming %s to %s and %s to %s instead"),
a->path, new_path1, b->path, new_path2);
- remove_file(o, 0, path, 0);
+ if (was_dirty(o, path))
+ output(o, 1, _("Refusing to lose dirty file at %s"),
+ path);
+ else if (would_lose_untracked(path))
+ /*
+ * Only way we get here is if both renames were from
+ * a directory rename AND user had an untracked file
+ * at the location where both files end up after the
+ * two directory renames. See testcase 10d of t6043.
+ */
+ output(o, 1, _("Refusing to lose untracked file at "
+ "%s, even though it's in the way."),
+ path);
+ else
+ remove_file(o, 0, path, 0);
ret = update_file(o, 0, &mfi_c1.oid, mfi_c1.mode, new_path1);
if (!ret)
ret = update_file(o, 0, &mfi_c2.oid, mfi_c2.mode,
new_path2);
+ /*
+ * unpack_trees() actually populates the index for us for
+ * "normal" rename/rename(2to1) situtations so that the
+ * correct entries are at the higher stages, which would
+ * make the call below to update_stages_for_stage_data
+ * unnecessary. However, if either of the renames came
+ * from a directory rename, then unpack_trees() will not
+ * have gotten the right data loaded into the index, so we
+ * need to do so now. (While it'd be tempting to move this
+ * call to update_stages_for_stage_data() to
+ * apply_directory_rename_modifications(), that would break
+ * our intermediate calls to would_lose_untracked() since
+ * those rely on the current in-memory index. See also the
+ * big "NOTE" in update_stages()).
+ */
+ if (update_stages_for_stage_data(o, path, ci->dst_entry1))
+ ret = -1;
+
free(new_path2);
free(new_path1);
}
@@ -1390,6 +1521,754 @@ static int conflict_rename_rename_2to1(struct merge_options *o,
return ret;
}
+/*
+ * Get the diff_filepairs changed between o_tree and tree.
+ */
+static struct diff_queue_struct *get_diffpairs(struct merge_options *o,
+ struct tree *o_tree,
+ struct tree *tree)
+{
+ struct diff_queue_struct *ret;
+ struct diff_options opts;
+
+ diff_setup(&opts);
+ opts.flags.recursive = 1;
+ opts.flags.rename_empty = 0;
+ opts.detect_rename = DIFF_DETECT_RENAME;
+ opts.rename_limit = o->merge_rename_limit >= 0 ? o->merge_rename_limit :
+ o->diff_rename_limit >= 0 ? o->diff_rename_limit :
+ 1000;
+ opts.rename_score = o->rename_score;
+ opts.show_rename_progress = o->show_rename_progress;
+ opts.output_format = DIFF_FORMAT_NO_OUTPUT;
+ diff_setup_done(&opts);
+ diff_tree_oid(&o_tree->object.oid, &tree->object.oid, "", &opts);
+ diffcore_std(&opts);
+ if (opts.needed_rename_limit > o->needed_rename_limit)
+ o->needed_rename_limit = opts.needed_rename_limit;
+
+ ret = xmalloc(sizeof(*ret));
+ *ret = diff_queued_diff;
+
+ opts.output_format = DIFF_FORMAT_NO_OUTPUT;
+ diff_queued_diff.nr = 0;
+ diff_queued_diff.queue = NULL;
+ diff_flush(&opts);
+ return ret;
+}
+
+static int tree_has_path(struct tree *tree, const char *path)
+{
+ struct object_id hashy;
+ unsigned int mode_o;
+
+ return !get_tree_entry(&tree->object.oid, path,
+ &hashy, &mode_o);
+}
+
+/*
+ * Return a new string that replaces the beginning portion (which matches
+ * entry->dir), with entry->new_dir. In perl-speak:
+ * new_path_name = (old_path =~ s/entry->dir/entry->new_dir/);
+ * NOTE:
+ * Caller must ensure that old_path starts with entry->dir + '/'.
+ */
+static char *apply_dir_rename(struct dir_rename_entry *entry,
+ const char *old_path)
+{
+ struct strbuf new_path = STRBUF_INIT;
+ int oldlen, newlen;
+
+ if (entry->non_unique_new_dir)
+ return NULL;
+
+ oldlen = strlen(entry->dir);
+ newlen = entry->new_dir.len + (strlen(old_path) - oldlen) + 1;
+ strbuf_grow(&new_path, newlen);
+ strbuf_addbuf(&new_path, &entry->new_dir);
+ strbuf_addstr(&new_path, &old_path[oldlen]);
+
+ return strbuf_detach(&new_path, NULL);
+}
+
+static void get_renamed_dir_portion(const char *old_path, const char *new_path,
+ char **old_dir, char **new_dir)
+{
+ char *end_of_old, *end_of_new;
+ int old_len, new_len;
+
+ *old_dir = NULL;
+ *new_dir = NULL;
+
+ /*
+ * For
+ * "a/b/c/d/e/foo.c" -> "a/b/some/thing/else/e/foo.c"
+ * the "e/foo.c" part is the same, we just want to know that
+ * "a/b/c/d" was renamed to "a/b/some/thing/else"
+ * so, for this example, this function returns "a/b/c/d" in
+ * *old_dir and "a/b/some/thing/else" in *new_dir.
+ *
+ * Also, if the basename of the file changed, we don't care. We
+ * want to know which portion of the directory, if any, changed.
+ */
+ end_of_old = strrchr(old_path, '/');
+ end_of_new = strrchr(new_path, '/');
+
+ if (end_of_old == NULL || end_of_new == NULL)
+ return;
+ while (*--end_of_new == *--end_of_old &&
+ end_of_old != old_path &&
+ end_of_new != new_path)
+ ; /* Do nothing; all in the while loop */
+ /*
+ * We've found the first non-matching character in the directory
+ * paths. That means the current directory we were comparing
+ * represents the rename. Move end_of_old and end_of_new back
+ * to the full directory name.
+ */
+ if (*end_of_old == '/')
+ end_of_old++;
+ if (*end_of_old != '/')
+ end_of_new++;
+ end_of_old = strchr(end_of_old, '/');
+ end_of_new = strchr(end_of_new, '/');
+
+ /*
+ * It may have been the case that old_path and new_path were the same
+ * directory all along. Don't claim a rename if they're the same.
+ */
+ old_len = end_of_old - old_path;
+ new_len = end_of_new - new_path;
+
+ if (old_len != new_len || strncmp(old_path, new_path, old_len)) {
+ *old_dir = xstrndup(old_path, old_len);
+ *new_dir = xstrndup(new_path, new_len);
+ }
+}
+
+static void remove_hashmap_entries(struct hashmap *dir_renames,
+ struct string_list *items_to_remove)
+{
+ int i;
+ struct dir_rename_entry *entry;
+
+ for (i = 0; i < items_to_remove->nr; i++) {
+ entry = items_to_remove->items[i].util;
+ hashmap_remove(dir_renames, entry, NULL);
+ }
+ string_list_clear(items_to_remove, 0);
+}
+
+/*
+ * See if there is a directory rename for path, and if there are any file
+ * level conflicts for the renamed location. If there is a rename and
+ * there are no conflicts, return the new name. Otherwise, return NULL.
+ */
+static char *handle_path_level_conflicts(struct merge_options *o,
+ const char *path,
+ struct dir_rename_entry *entry,
+ struct hashmap *collisions,
+ struct tree *tree)
+{
+ char *new_path = NULL;
+ struct collision_entry *collision_ent;
+ int clean = 1;
+ struct strbuf collision_paths = STRBUF_INIT;
+
+ /*
+ * entry has the mapping of old directory name to new directory name
+ * that we want to apply to path.
+ */
+ new_path = apply_dir_rename(entry, path);
+
+ if (!new_path) {
+ /* This should only happen when entry->non_unique_new_dir set */
+ if (!entry->non_unique_new_dir)
+ BUG("entry->non_unqiue_dir not set and !new_path");
+ output(o, 1, _("CONFLICT (directory rename split): "
+ "Unclear where to place %s because directory "
+ "%s was renamed to multiple other directories, "
+ "with no destination getting a majority of the "
+ "files."),
+ path, entry->dir);
+ clean = 0;
+ return NULL;
+ }
+
+ /*
+ * The caller needs to have ensured that it has pre-populated
+ * collisions with all paths that map to new_path. Do a quick check
+ * to ensure that's the case.
+ */
+ collision_ent = collision_find_entry(collisions, new_path);
+ if (collision_ent == NULL)
+ BUG("collision_ent is NULL");
+
+ /*
+ * Check for one-sided add/add/.../add conflicts, i.e.
+ * where implicit renames from the other side doing
+ * directory rename(s) can affect this side of history
+ * to put multiple paths into the same location. Warn
+ * and bail on directory renames for such paths.
+ */
+ if (collision_ent->reported_already) {
+ clean = 0;
+ } else if (tree_has_path(tree, new_path)) {
+ collision_ent->reported_already = 1;
+ strbuf_add_separated_string_list(&collision_paths, ", ",
+ &collision_ent->source_files);
+ output(o, 1, _("CONFLICT (implicit dir rename): Existing "
+ "file/dir at %s in the way of implicit "
+ "directory rename(s) putting the following "
+ "path(s) there: %s."),
+ new_path, collision_paths.buf);
+ clean = 0;
+ } else if (collision_ent->source_files.nr > 1) {
+ collision_ent->reported_already = 1;
+ strbuf_add_separated_string_list(&collision_paths, ", ",
+ &collision_ent->source_files);
+ output(o, 1, _("CONFLICT (implicit dir rename): Cannot map "
+ "more than one path to %s; implicit directory "
+ "renames tried to put these paths there: %s"),
+ new_path, collision_paths.buf);
+ clean = 0;
+ }
+
+ /* Free memory we no longer need */
+ strbuf_release(&collision_paths);
+ if (!clean && new_path) {
+ free(new_path);
+ return NULL;
+ }
+
+ return new_path;
+}
+
+/*
+ * There are a couple things we want to do at the directory level:
+ * 1. Check for both sides renaming to the same thing, in order to avoid
+ * implicit renaming of files that should be left in place. (See
+ * testcase 6b in t6043 for details.)
+ * 2. Prune directory renames if there are still files left in the
+ * the original directory. These represent a partial directory rename,
+ * i.e. a rename where only some of the files within the directory
+ * were renamed elsewhere. (Technically, this could be done earlier
+ * in get_directory_renames(), except that would prevent us from
+ * doing the previous check and thus failing testcase 6b.)
+ * 3. Check for rename/rename(1to2) conflicts (at the directory level).
+ * In the future, we could potentially record this info as well and
+ * omit reporting rename/rename(1to2) conflicts for each path within
+ * the affected directories, thus cleaning up the merge output.
+ * NOTE: We do NOT check for rename/rename(2to1) conflicts at the
+ * directory level, because merging directories is fine. If it
+ * causes conflicts for files within those merged directories, then
+ * that should be detected at the individual path level.
+ */
+static void handle_directory_level_conflicts(struct merge_options *o,
+ struct hashmap *dir_re_head,
+ struct tree *head,
+ struct hashmap *dir_re_merge,
+ struct tree *merge)
+{
+ struct hashmap_iter iter;
+ struct dir_rename_entry *head_ent;
+ struct dir_rename_entry *merge_ent;
+
+ struct string_list remove_from_head = STRING_LIST_INIT_NODUP;
+ struct string_list remove_from_merge = STRING_LIST_INIT_NODUP;
+
+ hashmap_iter_init(dir_re_head, &iter);
+ while ((head_ent = hashmap_iter_next(&iter))) {
+ merge_ent = dir_rename_find_entry(dir_re_merge, head_ent->dir);
+ if (merge_ent &&
+ !head_ent->non_unique_new_dir &&
+ !merge_ent->non_unique_new_dir &&
+ !strbuf_cmp(&head_ent->new_dir, &merge_ent->new_dir)) {
+ /* 1. Renamed identically; remove it from both sides */
+ string_list_append(&remove_from_head,
+ head_ent->dir)->util = head_ent;
+ strbuf_release(&head_ent->new_dir);
+ string_list_append(&remove_from_merge,
+ merge_ent->dir)->util = merge_ent;
+ strbuf_release(&merge_ent->new_dir);
+ } else if (tree_has_path(head, head_ent->dir)) {
+ /* 2. This wasn't a directory rename after all */
+ string_list_append(&remove_from_head,
+ head_ent->dir)->util = head_ent;
+ strbuf_release(&head_ent->new_dir);
+ }
+ }
+
+ remove_hashmap_entries(dir_re_head, &remove_from_head);
+ remove_hashmap_entries(dir_re_merge, &remove_from_merge);
+
+ hashmap_iter_init(dir_re_merge, &iter);
+ while ((merge_ent = hashmap_iter_next(&iter))) {
+ head_ent = dir_rename_find_entry(dir_re_head, merge_ent->dir);
+ if (tree_has_path(merge, merge_ent->dir)) {
+ /* 2. This wasn't a directory rename after all */
+ string_list_append(&remove_from_merge,
+ merge_ent->dir)->util = merge_ent;
+ } else if (head_ent &&
+ !head_ent->non_unique_new_dir &&
+ !merge_ent->non_unique_new_dir) {
+ /* 3. rename/rename(1to2) */
+ /*
+ * We can assume it's not rename/rename(1to1) because
+ * that was case (1), already checked above. So we
+ * know that head_ent->new_dir and merge_ent->new_dir
+ * are different strings.
+ */
+ output(o, 1, _("CONFLICT (rename/rename): "
+ "Rename directory %s->%s in %s. "
+ "Rename directory %s->%s in %s"),
+ head_ent->dir, head_ent->new_dir.buf, o->branch1,
+ head_ent->dir, merge_ent->new_dir.buf, o->branch2);
+ string_list_append(&remove_from_head,
+ head_ent->dir)->util = head_ent;
+ strbuf_release(&head_ent->new_dir);
+ string_list_append(&remove_from_merge,
+ merge_ent->dir)->util = merge_ent;
+ strbuf_release(&merge_ent->new_dir);
+ }
+ }
+
+ remove_hashmap_entries(dir_re_head, &remove_from_head);
+ remove_hashmap_entries(dir_re_merge, &remove_from_merge);
+}
+
+static struct hashmap *get_directory_renames(struct diff_queue_struct *pairs,
+ struct tree *tree)
+{
+ struct hashmap *dir_renames;
+ struct hashmap_iter iter;
+ struct dir_rename_entry *entry;
+ int i;
+
+ /*
+ * Typically, we think of a directory rename as all files from a
+ * certain directory being moved to a target directory. However,
+ * what if someone first moved two files from the original
+ * directory in one commit, and then renamed the directory
+ * somewhere else in a later commit? At merge time, we just know
+ * that files from the original directory went to two different
+ * places, and that the bulk of them ended up in the same place.
+ * We want each directory rename to represent where the bulk of the
+ * files from that directory end up; this function exists to find
+ * where the bulk of the files went.
+ *
+ * The first loop below simply iterates through the list of file
+ * renames, finding out how often each directory rename pair
+ * possibility occurs.
+ */
+ dir_renames = xmalloc(sizeof(struct hashmap));
+ dir_rename_init(dir_renames);
+ for (i = 0; i < pairs->nr; ++i) {
+ struct string_list_item *item;
+ int *count;
+ struct diff_filepair *pair = pairs->queue[i];
+ char *old_dir, *new_dir;
+
+ /* File not part of directory rename if it wasn't renamed */
+ if (pair->status != 'R')
+ continue;
+
+ get_renamed_dir_portion(pair->one->path, pair->two->path,
+ &old_dir, &new_dir);
+ if (!old_dir)
+ /* Directory didn't change at all; ignore this one. */
+ continue;
+
+ entry = dir_rename_find_entry(dir_renames, old_dir);
+ if (!entry) {
+ entry = xmalloc(sizeof(struct dir_rename_entry));
+ dir_rename_entry_init(entry, old_dir);
+ hashmap_put(dir_renames, entry);
+ } else {
+ free(old_dir);
+ }
+ item = string_list_lookup(&entry->possible_new_dirs, new_dir);
+ if (!item) {
+ item = string_list_insert(&entry->possible_new_dirs,
+ new_dir);
+ item->util = xcalloc(1, sizeof(int));
+ } else {
+ free(new_dir);
+ }
+ count = item->util;
+ *count += 1;
+ }
+
+ /*
+ * For each directory with files moved out of it, we find out which
+ * target directory received the most files so we can declare it to
+ * be the "winning" target location for the directory rename. This
+ * winner gets recorded in new_dir. If there is no winner
+ * (multiple target directories received the same number of files),
+ * we set non_unique_new_dir. Once we've determined the winner (or
+ * that there is no winner), we no longer need possible_new_dirs.
+ */
+ hashmap_iter_init(dir_renames, &iter);
+ while ((entry = hashmap_iter_next(&iter))) {
+ int max = 0;
+ int bad_max = 0;
+ char *best = NULL;
+
+ for (i = 0; i < entry->possible_new_dirs.nr; i++) {
+ int *count = entry->possible_new_dirs.items[i].util;
+
+ if (*count == max)
+ bad_max = max;
+ else if (*count > max) {
+ max = *count;
+ best = entry->possible_new_dirs.items[i].string;
+ }
+ }
+ if (bad_max == max)
+ entry->non_unique_new_dir = 1;
+ else {
+ assert(entry->new_dir.len == 0);
+ strbuf_addstr(&entry->new_dir, best);
+ }
+ /*
+ * The relevant directory sub-portion of the original full
+ * filepaths were xstrndup'ed before inserting into
+ * possible_new_dirs, and instead of manually iterating the
+ * list and free'ing each, just lie and tell
+ * possible_new_dirs that it did the strdup'ing so that it
+ * will free them for us.
+ */
+ entry->possible_new_dirs.strdup_strings = 1;
+ string_list_clear(&entry->possible_new_dirs, 1);
+ }
+
+ return dir_renames;
+}
+
+static struct dir_rename_entry *check_dir_renamed(const char *path,
+ struct hashmap *dir_renames)
+{
+ char temp[PATH_MAX];
+ char *end;
+ struct dir_rename_entry *entry;
+
+ strcpy(temp, path);
+ while ((end = strrchr(temp, '/'))) {
+ *end = '\0';
+ entry = dir_rename_find_entry(dir_renames, temp);
+ if (entry)
+ return entry;
+ }
+ return NULL;
+}
+
+static void compute_collisions(struct hashmap *collisions,
+ struct hashmap *dir_renames,
+ struct diff_queue_struct *pairs)
+{
+ int i;
+
+ /*
+ * Multiple files can be mapped to the same path due to directory
+ * renames done by the other side of history. Since that other
+ * side of history could have merged multiple directories into one,
+ * if our side of history added the same file basename to each of
+ * those directories, then all N of them would get implicitly
+ * renamed by the directory rename detection into the same path,
+ * and we'd get an add/add/.../add conflict, and all those adds
+ * from *this* side of history. This is not representable in the
+ * index, and users aren't going to easily be able to make sense of
+ * it. So we need to provide a good warning about what's
+ * happening, and fall back to no-directory-rename detection
+ * behavior for those paths.
+ *
+ * See testcases 9e and all of section 5 from t6043 for examples.
+ */
+ collision_init(collisions);
+
+ for (i = 0; i < pairs->nr; ++i) {
+ struct dir_rename_entry *dir_rename_ent;
+ struct collision_entry *collision_ent;
+ char *new_path;
+ struct diff_filepair *pair = pairs->queue[i];
+
+ if (pair->status != 'A' && pair->status != 'R')
+ continue;
+ dir_rename_ent = check_dir_renamed(pair->two->path,
+ dir_renames);
+ if (!dir_rename_ent)
+ continue;
+
+ new_path = apply_dir_rename(dir_rename_ent, pair->two->path);
+ if (!new_path)
+ /*
+ * dir_rename_ent->non_unique_new_path is true, which
+ * means there is no directory rename for us to use,
+ * which means it won't cause us any additional
+ * collisions.
+ */
+ continue;
+ collision_ent = collision_find_entry(collisions, new_path);
+ if (!collision_ent) {
+ collision_ent = xcalloc(1,
+ sizeof(struct collision_entry));
+ hashmap_entry_init(collision_ent, strhash(new_path));
+ hashmap_put(collisions, collision_ent);
+ collision_ent->target_file = new_path;
+ } else {
+ free(new_path);
+ }
+ string_list_insert(&collision_ent->source_files,
+ pair->two->path);
+ }
+}
+
+static char *check_for_directory_rename(struct merge_options *o,
+ const char *path,
+ struct tree *tree,
+ struct hashmap *dir_renames,
+ struct hashmap *dir_rename_exclusions,
+ struct hashmap *collisions,
+ int *clean_merge)
+{
+ char *new_path = NULL;
+ struct dir_rename_entry *entry = check_dir_renamed(path, dir_renames);
+ struct dir_rename_entry *oentry = NULL;
+
+ if (!entry)
+ return new_path;
+
+ /*
+ * This next part is a little weird. We do not want to do an
+ * implicit rename into a directory we renamed on our side, because
+ * that will result in a spurious rename/rename(1to2) conflict. An
+ * example:
+ * Base commit: dumbdir/afile, otherdir/bfile
+ * Side 1: smrtdir/afile, otherdir/bfile
+ * Side 2: dumbdir/afile, dumbdir/bfile
+ * Here, while working on Side 1, we could notice that otherdir was
+ * renamed/merged to dumbdir, and change the diff_filepair for
+ * otherdir/bfile into a rename into dumbdir/bfile. However, Side
+ * 2 will notice the rename from dumbdir to smrtdir, and do the
+ * transitive rename to move it from dumbdir/bfile to
+ * smrtdir/bfile. That gives us bfile in dumbdir vs being in
+ * smrtdir, a rename/rename(1to2) conflict. We really just want
+ * the file to end up in smrtdir. And the way to achieve that is
+ * to not let Side1 do the rename to dumbdir, since we know that is
+ * the source of one of our directory renames.
+ *
+ * That's why oentry and dir_rename_exclusions is here.
+ *
+ * As it turns out, this also prevents N-way transient rename
+ * confusion; See testcases 9c and 9d of t6043.
+ */
+ oentry = dir_rename_find_entry(dir_rename_exclusions, entry->new_dir.buf);
+ if (oentry) {
+ output(o, 1, _("WARNING: Avoiding applying %s -> %s rename "
+ "to %s, because %s itself was renamed."),
+ entry->dir, entry->new_dir.buf, path, entry->new_dir.buf);
+ } else {
+ new_path = handle_path_level_conflicts(o, path, entry,
+ collisions, tree);
+ *clean_merge &= (new_path != NULL);
+ }
+
+ return new_path;
+}
+
+static void apply_directory_rename_modifications(struct merge_options *o,
+ struct diff_filepair *pair,
+ char *new_path,
+ struct rename *re,
+ struct tree *tree,
+ struct tree *o_tree,
+ struct tree *a_tree,
+ struct tree *b_tree,
+ struct string_list *entries,
+ int *clean)
+{
+ struct string_list_item *item;
+ int stage = (tree == a_tree ? 2 : 3);
+ int update_wd;
+
+ /*
+ * In all cases where we can do directory rename detection,
+ * unpack_trees() will have read pair->two->path into the
+ * index and the working copy. We need to remove it so that
+ * we can instead place it at new_path. It is guaranteed to
+ * not be untracked (unpack_trees() would have errored out
+ * saying the file would have been overwritten), but it might
+ * be dirty, though.
+ */
+ update_wd = !was_dirty(o, pair->two->path);
+ if (!update_wd)
+ output(o, 1, _("Refusing to lose dirty file at %s"),
+ pair->two->path);
+ remove_file(o, 1, pair->two->path, !update_wd);
+
+ /* Find or create a new re->dst_entry */
+ item = string_list_lookup(entries, new_path);
+ if (item) {
+ /*
+ * Since we're renaming on this side of history, and it's
+ * due to a directory rename on the other side of history
+ * (which we only allow when the directory in question no
+ * longer exists on the other side of history), the
+ * original entry for re->dst_entry is no longer
+ * necessary...
+ */
+ re->dst_entry->processed = 1;
+
+ /*
+ * ...because we'll be using this new one.
+ */
+ re->dst_entry = item->util;
+ } else {
+ /*
+ * re->dst_entry is for the before-dir-rename path, and we
+ * need it to hold information for the after-dir-rename
+ * path. Before creating a new entry, we need to mark the
+ * old one as unnecessary (...unless it is shared by
+ * src_entry, i.e. this didn't use to be a rename, in which
+ * case we can just allow the normal processing to happen
+ * for it).
+ */
+ if (pair->status == 'R')
+ re->dst_entry->processed = 1;
+
+ re->dst_entry = insert_stage_data(new_path,
+ o_tree, a_tree, b_tree,
+ entries);
+ item = string_list_insert(entries, new_path);
+ item->util = re->dst_entry;
+ }
+
+ /*
+ * Update the stage_data with the information about the path we are
+ * moving into place. That slot will be empty and available for us
+ * to write to because of the collision checks in
+ * handle_path_level_conflicts(). In other words,
+ * re->dst_entry->stages[stage].oid will be the null_oid, so it's
+ * open for us to write to.
+ *
+ * It may be tempting to actually update the index at this point as
+ * well, using update_stages_for_stage_data(), but as per the big
+ * "NOTE" in update_stages(), doing so will modify the current
+ * in-memory index which will break calls to would_lose_untracked()
+ * that we need to make. Instead, we need to just make sure that
+ * the various conflict_rename_*() functions update the index
+ * explicitly rather than relying on unpack_trees() to have done it.
+ */
+ get_tree_entry(&tree->object.oid,
+ pair->two->path,
+ &re->dst_entry->stages[stage].oid,
+ &re->dst_entry->stages[stage].mode);
+
+ /* Update pair status */
+ if (pair->status == 'A') {
+ /*
+ * Recording rename information for this add makes it look
+ * like a rename/delete conflict. Make sure we can
+ * correctly handle this as an add that was moved to a new
+ * directory instead of reporting a rename/delete conflict.
+ */
+ re->add_turned_into_rename = 1;
+ }
+ /*
+ * We don't actually look at pair->status again, but it seems
+ * pedagogically correct to adjust it.
+ */
+ pair->status = 'R';
+
+ /*
+ * Finally, record the new location.
+ */
+ pair->two->path = new_path;
+}
+
+/*
+ * Get information of all renames which occurred in 'pairs', making use of
+ * any implicit directory renames inferred from the other side of history.
+ * We need the three trees in the merge ('o_tree', 'a_tree' and 'b_tree')
+ * to be able to associate the correct cache entries with the rename
+ * information; tree is always equal to either a_tree or b_tree.
+ */
+static struct string_list *get_renames(struct merge_options *o,
+ struct diff_queue_struct *pairs,
+ struct hashmap *dir_renames,
+ struct hashmap *dir_rename_exclusions,
+ struct tree *tree,
+ struct tree *o_tree,
+ struct tree *a_tree,
+ struct tree *b_tree,
+ struct string_list *entries,
+ int *clean_merge)
+{
+ int i;
+ struct hashmap collisions;
+ struct hashmap_iter iter;
+ struct collision_entry *e;
+ struct string_list *renames;
+
+ compute_collisions(&collisions, dir_renames, pairs);
+ renames = xcalloc(1, sizeof(struct string_list));
+
+ for (i = 0; i < pairs->nr; ++i) {
+ struct string_list_item *item;
+ struct rename *re;
+ struct diff_filepair *pair = pairs->queue[i];
+ char *new_path; /* non-NULL only with directory renames */
+
+ if (pair->status != 'A' && pair->status != 'R') {
+ diff_free_filepair(pair);
+ continue;
+ }
+ new_path = check_for_directory_rename(o, pair->two->path, tree,
+ dir_renames,
+ dir_rename_exclusions,
+ &collisions,
+ clean_merge);
+ if (pair->status != 'R' && !new_path) {
+ diff_free_filepair(pair);
+ continue;
+ }
+
+ re = xmalloc(sizeof(*re));
+ re->processed = 0;
+ re->add_turned_into_rename = 0;
+ re->pair = pair;
+ item = string_list_lookup(entries, re->pair->one->path);
+ if (!item)
+ re->src_entry = insert_stage_data(re->pair->one->path,
+ o_tree, a_tree, b_tree, entries);
+ else
+ re->src_entry = item->util;
+
+ item = string_list_lookup(entries, re->pair->two->path);
+ if (!item)
+ re->dst_entry = insert_stage_data(re->pair->two->path,
+ o_tree, a_tree, b_tree, entries);
+ else
+ re->dst_entry = item->util;
+ item = string_list_insert(renames, pair->one->path);
+ item->util = re;
+ if (new_path)
+ apply_directory_rename_modifications(o, pair, new_path,
+ re, tree, o_tree,
+ a_tree, b_tree,
+ entries,
+ clean_merge);
+ }
+
+ hashmap_iter_init(&collisions, &iter);
+ while ((e = hashmap_iter_next(&iter))) {
+ free(e->target_file);
+ string_list_clear(&e->source_files, 0);
+ }
+ hashmap_free(&collisions, 1);
+ return renames;
+}
+
static int process_renames(struct merge_options *o,
struct string_list *a_renames,
struct string_list *b_renames)
@@ -1548,7 +2427,19 @@ static int process_renames(struct merge_options *o,
dst_other.mode = ren1->dst_entry->stages[other_stage].mode;
try_merge = 0;
- if (oid_eq(&src_other.oid, &null_oid)) {
+ if (oid_eq(&src_other.oid, &null_oid) &&
+ ren1->add_turned_into_rename) {
+ setup_rename_conflict_info(RENAME_DIR,
+ ren1->pair,
+ NULL,
+ branch1,
+ branch2,
+ ren1->dst_entry,
+ NULL,
+ o,
+ NULL,
+ NULL);
+ } else if (oid_eq(&src_other.oid, &null_oid)) {
setup_rename_conflict_info(RENAME_DELETE,
ren1->pair,
NULL,
@@ -1645,6 +2536,105 @@ cleanup_and_return:
return clean_merge;
}
+struct rename_info {
+ struct string_list *head_renames;
+ struct string_list *merge_renames;
+};
+
+static void initial_cleanup_rename(struct diff_queue_struct *pairs,
+ struct hashmap *dir_renames)
+{
+ struct hashmap_iter iter;
+ struct dir_rename_entry *e;
+
+ hashmap_iter_init(dir_renames, &iter);
+ while ((e = hashmap_iter_next(&iter))) {
+ free(e->dir);
+ strbuf_release(&e->new_dir);
+ /* possible_new_dirs already cleared in get_directory_renames */
+ }
+ hashmap_free(dir_renames, 1);
+ free(dir_renames);
+
+ free(pairs->queue);
+ free(pairs);
+}
+
+static int handle_renames(struct merge_options *o,
+ struct tree *common,
+ struct tree *head,
+ struct tree *merge,
+ struct string_list *entries,
+ struct rename_info *ri)
+{
+ struct diff_queue_struct *head_pairs, *merge_pairs;
+ struct hashmap *dir_re_head, *dir_re_merge;
+ int clean = 1;
+
+ ri->head_renames = NULL;
+ ri->merge_renames = NULL;
+
+ if (!o->detect_rename)
+ return 1;
+
+ head_pairs = get_diffpairs(o, common, head);
+ merge_pairs = get_diffpairs(o, common, merge);
+
+ dir_re_head = get_directory_renames(head_pairs, head);
+ dir_re_merge = get_directory_renames(merge_pairs, merge);
+
+ handle_directory_level_conflicts(o,
+ dir_re_head, head,
+ dir_re_merge, merge);
+
+ ri->head_renames = get_renames(o, head_pairs,
+ dir_re_merge, dir_re_head, head,
+ common, head, merge, entries,
+ &clean);
+ if (clean < 0)
+ goto cleanup;
+ ri->merge_renames = get_renames(o, merge_pairs,
+ dir_re_head, dir_re_merge, merge,
+ common, head, merge, entries,
+ &clean);
+ if (clean < 0)
+ goto cleanup;
+ clean &= process_renames(o, ri->head_renames, ri->merge_renames);
+
+cleanup:
+ /*
+ * Some cleanup is deferred until cleanup_renames() because the
+ * data structures are still needed and referenced in
+ * process_entry(). But there are a few things we can free now.
+ */
+ initial_cleanup_rename(head_pairs, dir_re_head);
+ initial_cleanup_rename(merge_pairs, dir_re_merge);
+
+ return clean;
+}
+
+static void final_cleanup_rename(struct string_list *rename)
+{
+ const struct rename *re;
+ int i;
+
+ if (rename == NULL)
+ return;
+
+ for (i = 0; i < rename->nr; i++) {
+ re = rename->items[i].util;
+ diff_free_filepair(re->pair);
+ }
+ string_list_clear(rename, 1);
+ free(rename);
+}
+
+static void final_cleanup_renames(struct rename_info *re_info)
+{
+ final_cleanup_rename(re_info->head_renames);
+ final_cleanup_rename(re_info->merge_renames);
+}
+
static struct object_id *stage_oid(const struct object_id *oid, unsigned mode)
{
return (is_null_oid(oid) || mode == 0) ? NULL: (struct object_id *)oid;
@@ -1735,6 +2725,7 @@ static int handle_modify_delete(struct merge_options *o,
static int merge_content(struct merge_options *o,
const char *path,
+ int file_in_way,
struct object_id *o_oid, int o_mode,
struct object_id *a_oid, int a_mode,
struct object_id *b_oid, int b_mode,
@@ -1782,7 +2773,6 @@ static int merge_content(struct merge_options *o,
if (mfi.clean && !df_conflict_remains &&
oid_eq(&mfi.oid, a_oid) && mfi.mode == a_mode) {
- int path_renamed_outside_HEAD;
output(o, 3, _("Skipped %s (merged same as existing)"), path);
/*
* The content merge resulted in the same file contents we
@@ -1790,8 +2780,7 @@ static int merge_content(struct merge_options *o,
* are recorded at the correct path (which may not be true
* if the merge involves a rename).
*/
- path_renamed_outside_HEAD = !path2 || !strcmp(path, path2);
- if (!path_renamed_outside_HEAD) {
+ if (was_tracked(path)) {
add_cacheinfo(o, mfi.mode, &mfi.oid, path,
0, (!o->call_depth), 0);
return mfi.clean;
@@ -1809,7 +2798,7 @@ static int merge_content(struct merge_options *o,
return -1;
}
- if (df_conflict_remains) {
+ if (df_conflict_remains || file_in_way) {
char *new_path;
if (o->call_depth) {
remove_file_from_cache(path);
@@ -1843,6 +2832,30 @@ static int merge_content(struct merge_options *o,
return mfi.clean;
}
+static int conflict_rename_normal(struct merge_options *o,
+ const char *path,
+ struct object_id *o_oid, unsigned int o_mode,
+ struct object_id *a_oid, unsigned int a_mode,
+ struct object_id *b_oid, unsigned int b_mode,
+ struct rename_conflict_info *ci)
+{
+ int clean_merge;
+ int file_in_the_way = 0;
+
+ if (was_dirty(o, path)) {
+ file_in_the_way = 1;
+ output(o, 1, _("Refusing to lose dirty file at %s"), path);
+ }
+
+ /* Merge the content and write it out */
+ clean_merge = merge_content(o, path, file_in_the_way,
+ o_oid, o_mode, a_oid, a_mode, b_oid, b_mode,
+ ci);
+ if (clean_merge > 0 && file_in_the_way)
+ clean_merge = 0;
+ return clean_merge;
+}
+
/* Per entry merge function */
static int process_entry(struct merge_options *o,
const char *path, struct stage_data *entry)
@@ -1862,9 +2875,20 @@ static int process_entry(struct merge_options *o,
switch (conflict_info->rename_type) {
case RENAME_NORMAL:
case RENAME_ONE_FILE_TO_ONE:
- clean_merge = merge_content(o, path,
- o_oid, o_mode, a_oid, a_mode, b_oid, b_mode,
- conflict_info);
+ clean_merge = conflict_rename_normal(o,
+ path,
+ o_oid, o_mode,
+ a_oid, a_mode,
+ b_oid, b_mode,
+ conflict_info);
+ break;
+ case RENAME_DIR:
+ clean_merge = 1;
+ if (conflict_rename_dir(o,
+ conflict_info->pair1,
+ conflict_info->branch1,
+ conflict_info->branch2))
+ clean_merge = -1;
break;
case RENAME_DELETE:
clean_merge = 0;
@@ -1952,7 +2976,7 @@ static int process_entry(struct merge_options *o,
} else if (a_oid && b_oid) {
/* Case C: Added in both (check for same permissions) and */
/* case D: Modified in both, but differently. */
- clean_merge = merge_content(o, path,
+ clean_merge = merge_content(o, path, 0 /* file_in_way */,
o_oid, o_mode, a_oid, a_mode, b_oid, b_mode,
NULL);
} else if (!o_oid && !a_oid && !b_oid) {
@@ -1993,7 +3017,7 @@ int merge_trees(struct merge_options *o,
return 1;
}
- code = git_merge_trees(o->call_depth, common, head, merge);
+ code = git_merge_trees(o, common, head, merge);
if (code != 0) {
if (show(o, 4) || o->call_depth)
@@ -2004,7 +3028,8 @@ int merge_trees(struct merge_options *o,
}
if (unmerged_cache()) {
- struct string_list *entries, *re_head, *re_merge;
+ struct string_list *entries;
+ struct rename_info re_info;
int i;
/*
* Only need the hashmap while processing entries, so
@@ -2018,9 +3043,8 @@ int merge_trees(struct merge_options *o,
get_files_dirs(o, merge);
entries = get_unmerged();
- re_head = get_renames(o, head, common, head, merge, entries);
- re_merge = get_renames(o, merge, common, head, merge, entries);
- clean = process_renames(o, re_head, re_merge);
+ clean = handle_renames(o, common, head, merge, entries,
+ &re_info);
record_df_conflict_files(o, entries);
if (clean < 0)
goto cleanup;
@@ -2045,16 +3069,13 @@ int merge_trees(struct merge_options *o,
}
cleanup:
- string_list_clear(re_merge, 0);
- string_list_clear(re_head, 0);
+ final_cleanup_renames(&re_info);
+
string_list_clear(entries, 1);
+ free(entries);
hashmap_free(&o->current_file_dir_set, 1);
- free(re_merge);
- free(re_head);
- free(entries);
-
if (clean < 0)
return clean;
}
@@ -2090,7 +3111,7 @@ int merge_recursive(struct merge_options *o,
{
struct commit_list *iter;
struct commit *merged_common_ancestors;
- struct tree *mrtree = mrtree;
+ struct tree *mrtree;
int clean;
if (show(o, 4)) {
@@ -2218,11 +3239,13 @@ int merge_recursive_generic(struct merge_options *o,
hold_locked_index(&lock, LOCK_DIE_ON_ERROR);
clean = merge_recursive(o, head_commit, next_commit, ca,
result);
- if (clean < 0)
+ if (clean < 0) {
+ rollback_lock_file(&lock);
return clean;
+ }
- if (active_cache_changed &&
- write_locked_index(&the_index, &lock, COMMIT_LOCK))
+ if (write_locked_index(&the_index, &lock,
+ COMMIT_LOCK | SKIP_IF_UNCHANGED))
return err(o, _("Unable to write index."));
return clean ? 0 : 1;
diff --git a/merge-recursive.h b/merge-recursive.h
index 80d69d1..d863cf8 100644
--- a/merge-recursive.h
+++ b/merge-recursive.h
@@ -1,6 +1,7 @@
#ifndef MERGE_RECURSIVE_H
#define MERGE_RECURSIVE_H
+#include "unpack-trees.h"
#include "string-list.h"
struct merge_options {
@@ -27,6 +28,32 @@ struct merge_options {
struct strbuf obuf;
struct hashmap current_file_dir_set;
struct string_list df_conflict_file_set;
+ struct unpack_trees_options unpack_opts;
+};
+
+/*
+ * For dir_rename_entry, directory names are stored as a full path from the
+ * toplevel of the repository and do not include a trailing '/'. Also:
+ *
+ * dir: original name of directory being renamed
+ * non_unique_new_dir: if true, could not determine new_dir
+ * new_dir: final name of directory being renamed
+ * possible_new_dirs: temporary used to help determine new_dir; see comments
+ * in get_directory_renames() for details
+ */
+struct dir_rename_entry {
+ struct hashmap_entry ent; /* must be the first member! */
+ char *dir;
+ unsigned non_unique_new_dir:1;
+ struct strbuf new_dir;
+ struct string_list possible_new_dirs;
+};
+
+struct collision_entry {
+ struct hashmap_entry ent; /* must be the first member! */
+ char *target_file;
+ struct string_list source_files;
+ unsigned reported_already:1;
};
/* merge_trees() but with recursive ancestor consolidation */
diff --git a/merge.c b/merge.c
index 195b578..f06a477 100644
--- a/merge.c
+++ b/merge.c
@@ -113,17 +113,23 @@ int checkout_fast_forward(const struct object_id *head,
setup_unpack_trees_porcelain(&opts, "merge");
trees[nr_trees] = parse_tree_indirect(head);
- if (!trees[nr_trees++])
+ if (!trees[nr_trees++]) {
+ rollback_lock_file(&lock_file);
return -1;
+ }
trees[nr_trees] = parse_tree_indirect(remote);
- if (!trees[nr_trees++])
+ if (!trees[nr_trees++]) {
+ rollback_lock_file(&lock_file);
return -1;
+ }
for (i = 0; i < nr_trees; i++) {
parse_tree(trees[i]);
init_tree_desc(t+i, trees[i]->buffer, trees[i]->size);
}
- if (unpack_trees(nr_trees, t, &opts))
+ if (unpack_trees(nr_trees, t, &opts)) {
+ rollback_lock_file(&lock_file);
return -1;
+ }
if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
return error(_("unable to write new index file"));
return 0;
diff --git a/object.h b/object.h
index a5eb263..f13f85b 100644
--- a/object.h
+++ b/object.h
@@ -28,18 +28,22 @@ struct object_array {
#define TYPE_BITS 3
/*
* object flag allocation:
- * revision.h: 0---------10 26
- * fetch-pack.c: 0---5
- * walker.c: 0-2
- * upload-pack.c: 4 11----------------19
- * builtin/blame.c: 12-13
- * bisect.c: 16
- * bundle.c: 16
- * http-push.c: 16-----19
- * commit.c: 16-----19
- * sha1_name.c: 20
- * list-objects-filter.c: 21
- * builtin/fsck.c: 0--3
+ * revision.h: 0---------10 26
+ * fetch-pack.c: 0----5
+ * walker.c: 0-2
+ * upload-pack.c: 4 11----------------19
+ * builtin/blame.c: 12-13
+ * bisect.c: 16
+ * bundle.c: 16
+ * http-push.c: 16-----19
+ * commit.c: 16-----19
+ * sha1_name.c: 20
+ * list-objects-filter.c: 21
+ * builtin/fsck.c: 0--3
+ * builtin/index-pack.c: 2021
+ * builtin/pack-objects.c: 20
+ * builtin/reflog.c: 10--12
+ * builtin/unpack-objects.c: 2021
*/
#define FLAG_BITS 27
diff --git a/parse-options.c b/parse-options.c
index d02eb8b..125e84f 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -425,6 +425,48 @@ void parse_options_start(struct parse_opt_ctx_t *ctx,
parse_options_check(options);
}
+/*
+ * TODO: we are not completing the --no-XXX form yet because there are
+ * many options that do not suppress it properly.
+ */
+static int show_gitcomp(struct parse_opt_ctx_t *ctx,
+ const struct option *opts)
+{
+ for (; opts->type != OPTION_END; opts++) {
+ const char *suffix = "";
+
+ if (!opts->long_name)
+ continue;
+ if (opts->flags & (PARSE_OPT_HIDDEN | PARSE_OPT_NOCOMPLETE))
+ continue;
+
+ switch (opts->type) {
+ case OPTION_GROUP:
+ continue;
+ case OPTION_STRING:
+ case OPTION_FILENAME:
+ case OPTION_INTEGER:
+ case OPTION_MAGNITUDE:
+ case OPTION_CALLBACK:
+ if (opts->flags & PARSE_OPT_NOARG)
+ break;
+ if (opts->flags & PARSE_OPT_OPTARG)
+ break;
+ if (opts->flags & PARSE_OPT_LASTARG_DEFAULT)
+ break;
+ suffix = "=";
+ break;
+ default:
+ break;
+ }
+ if (opts->flags & PARSE_OPT_COMP_ARG)
+ suffix = "=";
+ printf(" --%s%s", opts->long_name, suffix);
+ }
+ fputc('\n', stdout);
+ exit(0);
+}
+
static int usage_with_options_internal(struct parse_opt_ctx_t *,
const char * const *,
const struct option *, int, int);
@@ -455,6 +497,10 @@ int parse_options_step(struct parse_opt_ctx_t *ctx,
if (internal_help && ctx->total == 1 && !strcmp(arg + 1, "h"))
goto show_usage;
+ /* lone --git-completion-helper is asked by git-completion.bash */
+ if (ctx->total == 1 && !strcmp(arg + 1, "-git-completion-helper"))
+ return show_gitcomp(ctx, options);
+
if (arg[1] != '-') {
ctx->opt = arg + 1;
switch (parse_short_opt(ctx, options)) {
diff --git a/parse-options.h b/parse-options.h
index af71122..ab1cc36 100644
--- a/parse-options.h
+++ b/parse-options.h
@@ -38,7 +38,9 @@ enum parse_opt_option_flags {
PARSE_OPT_LASTARG_DEFAULT = 16,
PARSE_OPT_NODASH = 32,
PARSE_OPT_LITERAL_ARGHELP = 64,
- PARSE_OPT_SHELL_EVAL = 256
+ PARSE_OPT_SHELL_EVAL = 256,
+ PARSE_OPT_NOCOMPLETE = 512,
+ PARSE_OPT_COMP_ARG = 1024
};
struct option;
@@ -89,6 +91,11 @@ typedef int parse_opt_ll_cb(struct parse_opt_ctx_t *ctx,
* PARSE_OPT_LITERAL_ARGHELP: says that argh shouldn't be enclosed in brackets
* (i.e. '<argh>') in the help message.
* Useful for options with multiple parameters.
+ * PARSE_OPT_NOCOMPLETE: by default all visible options are completable
+ * by git-completion.bash. This option suppresses that.
+ * PARSE_OPT_COMP_ARG: this option forces to git-completion.bash to
+ * complete an option as --name= not --name even if
+ * the option takes optional argument.
*
* `callback`::
* pointer to the callback to use for OPTION_CALLBACK or
@@ -112,19 +119,24 @@ struct option {
intptr_t defval;
};
+#define OPT_BIT_F(s, l, v, h, b, f) { OPTION_BIT, (s), (l), (v), NULL, (h), \
+ PARSE_OPT_NOARG|(f), NULL, (b) }
+#define OPT_COUNTUP_F(s, l, v, h, f) { OPTION_COUNTUP, (s), (l), (v), NULL, \
+ (h), PARSE_OPT_NOARG|(f) }
+#define OPT_SET_INT_F(s, l, v, h, i, f) { OPTION_SET_INT, (s), (l), (v), NULL, \
+ (h), PARSE_OPT_NOARG | (f), NULL, (i) }
+#define OPT_BOOL_F(s, l, v, h, f) OPT_SET_INT_F(s, l, v, h, 1, f)
+
#define OPT_END() { OPTION_END }
#define OPT_ARGUMENT(l, h) { OPTION_ARGUMENT, 0, (l), NULL, NULL, \
(h), PARSE_OPT_NOARG}
#define OPT_GROUP(h) { OPTION_GROUP, 0, NULL, NULL, NULL, (h) }
-#define OPT_BIT(s, l, v, h, b) { OPTION_BIT, (s), (l), (v), NULL, (h), \
- PARSE_OPT_NOARG, NULL, (b) }
+#define OPT_BIT(s, l, v, h, b) OPT_BIT_F(s, l, v, h, b, 0)
#define OPT_NEGBIT(s, l, v, h, b) { OPTION_NEGBIT, (s), (l), (v), NULL, \
(h), PARSE_OPT_NOARG, NULL, (b) }
-#define OPT_COUNTUP(s, l, v, h) { OPTION_COUNTUP, (s), (l), (v), NULL, \
- (h), PARSE_OPT_NOARG }
-#define OPT_SET_INT(s, l, v, h, i) { OPTION_SET_INT, (s), (l), (v), NULL, \
- (h), PARSE_OPT_NOARG, NULL, (i) }
-#define OPT_BOOL(s, l, v, h) OPT_SET_INT(s, l, v, h, 1)
+#define OPT_COUNTUP(s, l, v, h) OPT_COUNTUP_F(s, l, v, h, 0)
+#define OPT_SET_INT(s, l, v, h, i) OPT_SET_INT_F(s, l, v, h, i, 0)
+#define OPT_BOOL(s, l, v, h) OPT_BOOL_F(s, l, v, h, 0)
#define OPT_HIDDEN_BOOL(s, l, v, h) { OPTION_SET_INT, (s), (l), (v), NULL, \
(h), PARSE_OPT_NOARG | PARSE_OPT_HIDDEN, NULL, 1}
#define OPT_CMDMODE(s, l, v, h, i) { OPTION_CMDMODE, (s), (l), (v), NULL, \
@@ -240,7 +252,7 @@ extern int parse_opt_passthru_argv(const struct option *, const char *, int);
{ OPTION_CALLBACK, 'q', "quiet", (var), NULL, N_("be more quiet"), \
PARSE_OPT_NOARG, &parse_opt_verbosity_cb, 0 }
#define OPT__DRY_RUN(var, h) OPT_BOOL('n', "dry-run", (var), (h))
-#define OPT__FORCE(var, h) OPT_COUNTUP('f', "force", (var), (h))
+#define OPT__FORCE(var, h, f) OPT_COUNTUP_F('f', "force", (var), (h), (f))
#define OPT__ABBREV(var) \
{ OPTION_CALLBACK, 0, "abbrev", (var), N_("n"), \
N_("use <n> digits to display SHA-1s"), \
diff --git a/perl/FromCPAN/.gitattributes b/perl/FromCPAN/.gitattributes
new file mode 100644
index 0000000..8b64fc5
--- /dev/null
+++ b/perl/FromCPAN/.gitattributes
@@ -0,0 +1 @@
+/Error.pm whitespace=-blank-at-eof
diff --git a/perl/Git/FromCPAN/Error.pm b/perl/FromCPAN/Error.pm
index 6098135..8b95e2d 100644
--- a/perl/Git/FromCPAN/Error.pm
+++ b/perl/FromCPAN/Error.pm
@@ -12,10 +12,12 @@
package Error;
use strict;
+use warnings;
+
use vars qw($VERSION);
use 5.004;
-$VERSION = "0.15009";
+$VERSION = "0.17025";
use overload (
'""' => 'stringify',
@@ -32,21 +34,35 @@ $Error::THROWN = undef; # last error thrown, a workaround until die $ref works
my $LAST; # Last error created
my %ERROR; # Last error associated with package
-sub throw_Error_Simple
+sub _throw_Error_Simple
{
my $args = shift;
return Error::Simple->new($args->{'text'});
}
-$Error::ObjectifyCallback = \&throw_Error_Simple;
+$Error::ObjectifyCallback = \&_throw_Error_Simple;
# Exported subs are defined in Error::subs
+use Scalar::Util ();
+
sub import {
shift;
+ my @tags = @_;
local $Exporter::ExportLevel = $Exporter::ExportLevel + 1;
- Error::subs->import(@_);
+
+ @tags = grep {
+ if( $_ eq ':warndie' ) {
+ Error::WarnDie->import();
+ 0;
+ }
+ else {
+ 1;
+ }
+ } @tags;
+
+ Error::subs->import(@tags);
}
# I really want to use last for the name of this method, but it is a keyword
@@ -107,10 +123,6 @@ sub stacktrace {
$text;
}
-# Allow error propagation, ie
-#
-# $ber->encode(...) or
-# return Error->prior($ber)->associate($ldap);
sub associate {
my $err = shift;
@@ -130,6 +142,7 @@ sub associate {
return;
}
+
sub new {
my $self = shift;
my($pkg,$file,$line) = caller($Error::Depth);
@@ -246,6 +259,10 @@ sub value {
package Error::Simple;
+use vars qw($VERSION);
+
+$VERSION = "0.17025";
+
@Error::Simple::ISA = qw(Error);
sub new {
@@ -288,14 +305,6 @@ use vars qw(@EXPORT_OK @ISA %EXPORT_TAGS);
@ISA = qw(Exporter);
-
-sub blessed {
- my $item = shift;
- local $@; # don't kill an outer $@
- ref $item and eval { $item->can('can') };
-}
-
-
sub run_clauses ($$$\@) {
my($clauses,$err,$wantarray,$result) = @_;
my $code = undef;
@@ -314,16 +323,17 @@ sub run_clauses ($$$\@) {
my $pkg = $catch->[$i];
unless(defined $pkg) {
#except
- splice(@$catch,$i,2,$catch->[$i+1]->());
+ splice(@$catch,$i,2,$catch->[$i+1]->($err));
$i -= 2;
next CATCHLOOP;
}
- elsif(blessed($err) && $err->isa($pkg)) {
+ elsif(Scalar::Util::blessed($err) && $err->isa($pkg)) {
$code = $catch->[$i+1];
while(1) {
my $more = 0;
- local($Error::THROWN);
+ local($Error::THROWN, $@);
my $ok = eval {
+ $@ = $err;
if($wantarray) {
@{$result} = $code->($err,\$more);
}
@@ -341,10 +351,9 @@ sub run_clauses ($$$\@) {
undef $err;
}
else {
- $err = defined($Error::THROWN)
- ? $Error::THROWN : $@;
- $err = $Error::ObjectifyCallback->({'text' =>$err})
- unless ref($err);
+ $err = $@ || $Error::THROWN;
+ $err = $Error::ObjectifyCallback->({'text' =>$err})
+ unless ref($err);
}
last CATCH;
};
@@ -357,7 +366,9 @@ sub run_clauses ($$$\@) {
if(defined($owise = $clauses->{'otherwise'})) {
my $code = $clauses->{'otherwise'};
my $more = 0;
+ local($Error::THROWN, $@);
my $ok = eval {
+ $@ = $err;
if($wantarray) {
@{$result} = $code->($err,\$more);
}
@@ -374,11 +385,10 @@ sub run_clauses ($$$\@) {
undef $err;
}
else {
- $err = defined($Error::THROWN)
- ? $Error::THROWN : $@;
+ $err = $@ || $Error::THROWN;
- $err = $Error::ObjectifyCallback->({'text' =>$err})
- unless ref($err);
+ $err = $Error::ObjectifyCallback->({'text' =>$err})
+ unless ref($err);
}
}
}
@@ -398,7 +408,7 @@ sub try (&;$) {
do {
local $Error::THROWN = undef;
- local $@ = undef;
+ local $@ = undef;
$ok = eval {
if($wantarray) {
@@ -413,21 +423,21 @@ sub try (&;$) {
1;
};
- $err = defined($Error::THROWN) ? $Error::THROWN : $@
+ $err = $@ || $Error::THROWN
unless $ok;
};
shift @Error::STACK;
$err = run_clauses($clauses,$err,wantarray,@result)
- unless($ok);
+ unless($ok);
$clauses->{'finally'}->()
if(defined($clauses->{'finally'}));
if (defined($err))
{
- if (blessed($err) && $err->can('throw'))
+ if (Scalar::Util::blessed($err) && $err->can('throw'))
{
throw $err;
}
@@ -506,12 +516,116 @@ sub otherwise (&;$) {
}
1;
+
+package Error::WarnDie;
+
+sub gen_callstack($)
+{
+ my ( $start ) = @_;
+
+ require Carp;
+ local $Carp::CarpLevel = $start;
+ my $trace = Carp::longmess("");
+ # Remove try calls from the trace
+ $trace =~ s/(\n\s+\S+__ANON__[^\n]+)?\n\s+eval[^\n]+\n\s+Error::subs::try[^\n]+(?=\n)//sog;
+ $trace =~ s/(\n\s+\S+__ANON__[^\n]+)?\n\s+eval[^\n]+\n\s+Error::subs::run_clauses[^\n]+\n\s+Error::subs::try[^\n]+(?=\n)//sog;
+ my @callstack = split( m/\n/, $trace );
+ return @callstack;
+}
+
+my $old_DIE;
+my $old_WARN;
+
+sub DEATH
+{
+ my ( $e ) = @_;
+
+ local $SIG{__DIE__} = $old_DIE if( defined $old_DIE );
+
+ die @_ if $^S;
+
+ my ( $etype, $message, $location, @callstack );
+ if ( ref($e) && $e->isa( "Error" ) ) {
+ $etype = "exception of type " . ref( $e );
+ $message = $e->text;
+ $location = $e->file . ":" . $e->line;
+ @callstack = split( m/\n/, $e->stacktrace );
+ }
+ else {
+ # Don't apply subsequent layer of message formatting
+ die $e if( $e =~ m/^\nUnhandled perl error caught at toplevel:\n\n/ );
+ $etype = "perl error";
+ my $stackdepth = 0;
+ while( caller( $stackdepth ) =~ m/^Error(?:$|::)/ ) {
+ $stackdepth++
+ }
+
+ @callstack = gen_callstack( $stackdepth + 1 );
+
+ $message = "$e";
+ chomp $message;
+
+ if ( $message =~ s/ at (.*?) line (\d+)\.$// ) {
+ $location = $1 . ":" . $2;
+ }
+ else {
+ my @caller = caller( $stackdepth );
+ $location = $caller[1] . ":" . $caller[2];
+ }
+ }
+
+ shift @callstack;
+ # Do it this way in case there are no elements; we don't print a spurious \n
+ my $callstack = join( "", map { "$_\n"} @callstack );
+
+ die "\nUnhandled $etype caught at toplevel:\n\n $message\n\nThrown from: $location\n\nFull stack trace:\n\n$callstack\n";
+}
+
+sub TAXES
+{
+ my ( $message ) = @_;
+
+ local $SIG{__WARN__} = $old_WARN if( defined $old_WARN );
+
+ $message =~ s/ at .*? line \d+\.$//;
+ chomp $message;
+
+ my @callstack = gen_callstack( 1 );
+ my $location = shift @callstack;
+
+ # $location already starts in a leading space
+ $message .= $location;
+
+ # Do it this way in case there are no elements; we don't print a spurious \n
+ my $callstack = join( "", map { "$_\n"} @callstack );
+
+ warn "$message:\n$callstack";
+}
+
+sub import
+{
+ $old_DIE = $SIG{__DIE__};
+ $old_WARN = $SIG{__WARN__};
+
+ $SIG{__DIE__} = \&DEATH;
+ $SIG{__WARN__} = \&TAXES;
+}
+
+1;
+
__END__
=head1 NAME
Error - Error/exception handling in an OO-ish way
+=head1 WARNING
+
+Using the "Error" module is B<no longer recommended> due to the black-magical
+nature of its syntactic sugar, which often tends to break. Its maintainers
+have stopped actively writing code that uses it, and discourage people
+from doing so. See the "SEE ALSO" section below for better recommendations.
+
=head1 SYNOPSIS
use Error qw(:try);
@@ -529,7 +643,7 @@ Error - Error/exception handling in an OO-ish way
try {
do_some_stuff();
die "error!" if $condition;
- throw Error::Simple -text => "Oops!" if $other_condition;
+ throw Error::Simple "Oops!" if $other_condition;
}
catch Error::IO with {
my $E = shift;
@@ -587,7 +701,7 @@ C<BLOCK> will be passed two arguments. The first will be the error
being thrown. The second is a reference to a scalar variable. If this
variable is set by the catch block then, on return from the catch
block, try will continue processing as if the catch block was never
-found.
+found. The error will also be available in C<$@>.
To propagate the error the catch block may call C<$err-E<gt>throw>
@@ -608,7 +722,7 @@ type.
Catch any error by executing the code in C<BLOCK>
When evaluated C<BLOCK> will be passed one argument, which will be the
-error being processed.
+error being processed. The error will also be available in C<$@>.
Only one otherwise block may be specified per try block
@@ -625,12 +739,25 @@ Only one finally block may be specified per try block
=back
+=head1 COMPATIBILITY
+
+L<Moose> exports a keyword called C<with> which clashes with Error's. This
+example returns a prototype mismatch error:
+
+ package MyTest;
+
+ use warnings;
+ use Moose;
+ use Error qw(:try);
+
+(Thanks to C<maik.hentsche@amd.com> for the report.).
+
=head1 CLASS INTERFACE
=head2 CONSTRUCTORS
The C<Error> object is implemented as a HASH. This HASH is initialized
-with the arguments that are passed to its constructor. The elements
+with the arguments that are passed to it's constructor. The elements
that are used by, or are retrievable by the C<Error> class are listed
below, other classes may add to these.
@@ -655,6 +782,10 @@ an object blessed into that package as the C<-object> argument.
=over 4
+=item Error->new()
+
+See the Error::Simple documentation.
+
=item throw ( [ ARGS ] )
Create a new C<Error> object and throw an error, which will be caught
@@ -730,6 +861,13 @@ The line where the constructor of this error was called from
The text of the error
+=item $err->associate($obj)
+
+Associates an error with an object to allow error propagation. I.e:
+
+ $ber->encode(...) or
+ return Error->prior($ber)->associate($ldap);
+
=back
=head2 OVERLOAD METHODS
@@ -759,11 +897,9 @@ to the constructor.
=head1 PRE-DEFINED ERROR CLASSES
-=over 4
-
-=item Error::Simple
+=head2 Error::Simple
-This class can be used to hold simple error strings and values. Its
+This class can be used to hold simple error strings and values. It's
constructor takes two arguments. The first is a text value, the second
is a numeric value. These values are what will be returned by the
overload methods.
@@ -775,7 +911,6 @@ of the error object.
This class is used internally if an eval'd block die's with an error
that is a plain string. (Unless C<$Error::ObjectifyCallback> is modified)
-=back
=head1 $Error::ObjectifyCallback
@@ -804,6 +939,76 @@ class MyError::Bar by default:
# Error handling here.
}
+=cut
+
+=head1 MESSAGE HANDLERS
+
+C<Error> also provides handlers to extend the output of the C<warn()> perl
+function, and to handle the printing of a thrown C<Error> that is not caught
+or otherwise handled. These are not installed by default, but are requested
+using the C<:warndie> tag in the C<use> line.
+
+ use Error qw( :warndie );
+
+These new error handlers are installed in C<$SIG{__WARN__}> and
+C<$SIG{__DIE__}>. If these handlers are already defined when the tag is
+imported, the old values are stored, and used during the new code. Thus, to
+arrange for custom handling of warnings and errors, you will need to perform
+something like the following:
+
+ BEGIN {
+ $SIG{__WARN__} = sub {
+ print STDERR "My special warning handler: $_[0]"
+ };
+ }
+
+ use Error qw( :warndie );
+
+Note that setting C<$SIG{__WARN__}> after the C<:warndie> tag has been
+imported will overwrite the handler that C<Error> provides. If this cannot be
+avoided, then the tag can be explicitly C<import>ed later
+
+ use Error;
+
+ $SIG{__WARN__} = ...;
+
+ import Error qw( :warndie );
+
+=head2 EXAMPLE
+
+The C<__DIE__> handler turns messages such as
+
+ Can't call method "foo" on an undefined value at examples/warndie.pl line 16.
+
+into
+
+ Unhandled perl error caught at toplevel:
+
+ Can't call method "foo" on an undefined value
+
+ Thrown from: examples/warndie.pl:16
+
+ Full stack trace:
+
+ main::inner('undef') called at examples/warndie.pl line 20
+ main::outer('undef') called at examples/warndie.pl line 23
+
+=cut
+
+=head1 SEE ALSO
+
+See L<Exception::Class> for a different module providing Object-Oriented
+exception handling, along with a convenient syntax for declaring hierarchies
+for them. It doesn't provide Error's syntactic sugar of C<try { ... }>,
+C<catch { ... }>, etc. which may be a good thing or a bad thing based
+on what you want. (Because Error's syntactic sugar tends to break.)
+
+L<Error::Exception> aims to combine L<Error> and L<Exception::Class>
+"with correct stringification".
+
+L<TryCatch> and L<Try::Tiny> are similar in concept to Error.pm only providing
+a syntax that hopefully breaks less.
+
=head1 KNOWN BUGS
None, but that does not mean there are not any.
@@ -816,12 +1021,20 @@ The code that inspired me to write this was originally written by
Peter Seibel <peter@weblogic.com> and adapted by Jesse Glick
<jglick@sig.bsh.com>.
+C<:warndie> handlers added by Paul Evans <leonerd@leonerd.org.uk>
+
=head1 MAINTAINER
-Shlomi Fish <shlomif@iglu.org.il>
+Shlomi Fish, L<http://www.shlomifish.org/> .
=head1 PAST MAINTAINERS
Arun Kumar U <u_arunkumar@yahoo.com>
+=head1 COPYRIGHT
+
+Copyright (c) 1997-8 Graham Barr. All rights reserved.
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
=cut
diff --git a/perl/Git/FromCPAN/Mail/Address.pm b/perl/FromCPAN/Mail/Address.pm
index 13b2ff7..683d490 100644
--- a/perl/Git/FromCPAN/Mail/Address.pm
+++ b/perl/FromCPAN/Mail/Address.pm
@@ -1,10 +1,14 @@
-# Copyrights 1995-2017 by [Mark Overmeer <perl@overmeer.net>].
+# Copyrights 1995-2018 by [Mark Overmeer].
# For other contributors see ChangeLog.
# See the manual pages for details on the licensing terms.
# Pod stripped from pm file by OODoc 2.02.
+# This code is part of the bundle MailTools. Meta-POD processed with
+# OODoc into POD and HTML manual-pages. See README.md for Copyright.
+# Licensed under the same terms as Perl itself.
+
package Mail::Address;
use vars '$VERSION';
-$VERSION = '2.19';
+$VERSION = '2.20';
use strict;
diff --git a/perl/Git.pm b/perl/Git.pm
index a7440a1..16ebcc6 100644
--- a/perl/Git.pm
+++ b/perl/Git.pm
@@ -9,7 +9,10 @@ package Git;
use 5.008;
use strict;
+use warnings;
+use File::Temp ();
+use File::Spec ();
BEGIN {
@@ -101,7 +104,7 @@ increase notwithstanding).
use Carp qw(carp croak); # but croak is bad - throw instead
-use Git::Error qw(:try);
+use Git::LoadCPAN::Error qw(:try);
use Cwd qw(abs_path cwd);
use IPC::Open2 qw(open2);
use Fcntl qw(SEEK_SET SEEK_CUR);
@@ -189,7 +192,6 @@ sub repository {
};
if ($dir) {
- _verify_require();
File::Spec->file_name_is_absolute($dir) or $dir = $opts{Directory} . '/' . $dir;
$opts{Repository} = abs_path($dir);
@@ -1290,8 +1292,6 @@ sub temp_release {
sub _temp_cache {
my ($self, $name) = _maybe_self(@_);
- _verify_require();
-
my $temp_fd = \$TEMP_FILEMAP{$name};
if (defined $$temp_fd and $$temp_fd->opened) {
if ($TEMP_FILES{$$temp_fd}{locked}) {
@@ -1325,11 +1325,6 @@ sub _temp_cache {
$$temp_fd;
}
-sub _verify_require {
- eval { require File::Temp; require File::Spec; };
- $@ and throw Error::Simple($@);
-}
-
=item temp_reset ( FILEHANDLE )
Truncates and resets the position of the C<FILEHANDLE>.
@@ -1694,7 +1689,6 @@ sub DESTROY {
# Pipe implementation for ActiveState Perl.
package Git::activestate_pipe;
-use strict;
sub TIEHANDLE {
my ($class, @params) = @_;
diff --git a/perl/Git/Error.pm b/perl/Git/Error.pm
deleted file mode 100644
index 09bbc97..0000000
--- a/perl/Git/Error.pm
+++ /dev/null
@@ -1,46 +0,0 @@
-package Git::Error;
-use 5.008;
-use strict;
-use warnings;
-
-=head1 NAME
-
-Git::Error - Wrapper for the L<Error> module, in case it's not installed
-
-=head1 DESCRIPTION
-
-Wraps the import function for the L<Error> module.
-
-This module is only intended to be used for code shipping in the
-C<git.git> repository. Use it for anything else at your peril!
-
-=cut
-
-sub import {
- shift;
- my $caller = caller;
-
- eval {
- require Error;
- 1;
- } or do {
- my $error = $@ || "Zombie Error";
-
- my $Git_Error_pm_path = $INC{"Git/Error.pm"} || die "BUG: Should have our own path from %INC!";
-
- require File::Basename;
- my $Git_Error_pm_root = File::Basename::dirname($Git_Error_pm_path) || die "BUG: Can't figure out lib/Git dirname from '$Git_Error_pm_path'!";
-
- require File::Spec;
- my $Git_pm_FromCPAN_root = File::Spec->catdir($Git_Error_pm_root, 'FromCPAN');
- die "BUG: '$Git_pm_FromCPAN_root' should be a directory!" unless -d $Git_pm_FromCPAN_root;
-
- local @INC = ($Git_pm_FromCPAN_root, @INC);
- require Error;
- };
-
- unshift @_, $caller;
- goto &Error::import;
-}
-
-1;
diff --git a/perl/Git/LoadCPAN.pm b/perl/Git/LoadCPAN.pm
new file mode 100644
index 0000000..e5585e7
--- /dev/null
+++ b/perl/Git/LoadCPAN.pm
@@ -0,0 +1,104 @@
+package Git::LoadCPAN;
+use 5.008;
+use strict;
+use warnings;
+
+=head1 NAME
+
+Git::LoadCPAN - Wrapper for loading modules from the CPAN (OS) or Git's own copy
+
+=head1 DESCRIPTION
+
+The Perl code in Git depends on some modules from the CPAN, but we
+don't want to make those a hard requirement for anyone building from
+source.
+
+Therefore the L<Git::LoadCPAN> namespace shipped with Git contains
+wrapper modules like C<Git::LoadCPAN::Module::Name> that will first
+attempt to load C<Module::Name> from the OS, and if that doesn't work
+will fall back on C<FromCPAN::Module::Name> shipped with Git itself.
+
+Usually distributors will not ship with Git's Git::FromCPAN tree at
+all via the C<NO_PERL_CPAN_FALLBACKS> option, preferring to use their
+own packaging of CPAN modules instead.
+
+This module is only intended to be used for code shipping in the
+C<git.git> repository. Use it for anything else at your peril!
+
+=cut
+
+# NO_PERL_CPAN_FALLBACKS_STR evades the sed search-replace from the
+# Makefile, and allows for detecting whether the module is loaded from
+# perl/Git as opposed to perl/build/Git, which is useful for one-off
+# testing without having Error.pm et al installed.
+use constant NO_PERL_CPAN_FALLBACKS_STR => '@@' . 'NO_PERL_CPAN_FALLBACKS' . '@@';
+use constant NO_PERL_CPAN_FALLBACKS => (
+ q[@@NO_PERL_CPAN_FALLBACKS@@] ne ''
+ and
+ q[@@NO_PERL_CPAN_FALLBACKS@@] ne NO_PERL_CPAN_FALLBACKS_STR
+);
+
+sub import {
+ shift;
+ my $caller = caller;
+ my %args = @_;
+ my $module = exists $args{module} ? delete $args{module} : die "BUG: Expected 'module' parameter!";
+ my $import = exists $args{import} ? delete $args{import} : die "BUG: Expected 'import' parameter!";
+ die "BUG: Too many arguments!" if keys %args;
+
+ # Foo::Bar to Foo/Bar.pm
+ my $package_pm = $module;
+ $package_pm =~ s[::][/]g;
+ $package_pm .= '.pm';
+
+ eval {
+ require $package_pm;
+ 1;
+ } or do {
+ my $error = $@ || "Zombie Error";
+
+ if (NO_PERL_CPAN_FALLBACKS) {
+ chomp(my $error = sprintf <<'THEY_PROMISED', $module);
+BUG: The '%s' module is not here, but NO_PERL_CPAN_FALLBACKS was set!
+
+Git needs this Perl module from the CPAN, and will by default ship
+with a copy of it. This Git was built with NO_PERL_CPAN_FALLBACKS,
+meaning that whoever built it promised to provide this module.
+
+You're seeing this error because they broke that promise, and we can't
+load our fallback version, since we were asked not to install it.
+
+If you're seeing this error and didn't package Git yourself the
+package you're using is broken, or your system is broken. This error
+won't appear if Git is built without NO_PERL_CPAN_FALLBACKS (instead
+we'll use our fallback version of the module).
+THEY_PROMISED
+ die $error;
+ }
+
+ my $Git_LoadCPAN_pm_path = $INC{"Git/LoadCPAN.pm"} || die "BUG: Should have our own path from %INC!";
+
+ require File::Basename;
+ my $Git_LoadCPAN_pm_root = File::Basename::dirname($Git_LoadCPAN_pm_path) || die "BUG: Can't figure out lib/Git dirname from '$Git_LoadCPAN_pm_path'!";
+
+ require File::Spec;
+ my $Git_pm_FromCPAN_root = File::Spec->catdir($Git_LoadCPAN_pm_root, '..', 'FromCPAN');
+ die "BUG: '$Git_pm_FromCPAN_root' should be a directory!" unless -d $Git_pm_FromCPAN_root;
+
+ local @INC = ($Git_pm_FromCPAN_root, @INC);
+ require $package_pm;
+ };
+
+ if ($import) {
+ no strict 'refs';
+ *{"${caller}::import"} = sub {
+ shift;
+ use strict 'refs';
+ unshift @_, $module;
+ goto &{"${module}::import"};
+ };
+ use strict 'refs';
+ }
+}
+
+1;
diff --git a/perl/Git/LoadCPAN/Error.pm b/perl/Git/LoadCPAN/Error.pm
new file mode 100644
index 0000000..c6d2c45
--- /dev/null
+++ b/perl/Git/LoadCPAN/Error.pm
@@ -0,0 +1,10 @@
+package Git::LoadCPAN::Error;
+use 5.008;
+use strict;
+use warnings;
+use Git::LoadCPAN (
+ module => 'Error',
+ import => 1,
+);
+
+1;
diff --git a/perl/Git/LoadCPAN/Mail/Address.pm b/perl/Git/LoadCPAN/Mail/Address.pm
new file mode 100644
index 0000000..f70a4f0
--- /dev/null
+++ b/perl/Git/LoadCPAN/Mail/Address.pm
@@ -0,0 +1,10 @@
+package Git::LoadCPAN::Mail::Address;
+use 5.008;
+use strict;
+use warnings;
+use Git::LoadCPAN (
+ module => 'Mail::Address',
+ import => 0,
+);
+
+1;
diff --git a/perl/Git/Mail/Address.pm b/perl/Git/Mail/Address.pm
deleted file mode 100755
index 2ce3e84..0000000
--- a/perl/Git/Mail/Address.pm
+++ /dev/null
@@ -1,24 +0,0 @@
-package Git::Mail::Address;
-use 5.008;
-use strict;
-use warnings;
-
-=head1 NAME
-
-Git::Mail::Address - Wrapper for the L<Mail::Address> module, in case it's not installed
-
-=head1 DESCRIPTION
-
-This module is only intended to be used for code shipping in the
-C<git.git> repository. Use it for anything else at your peril!
-
-=cut
-
-eval {
- require Mail::Address;
- 1;
-} or do {
- require Git::FromCPAN::Mail::Address;
-};
-
-1;
diff --git a/po/bg.po b/po/bg.po
index a37d5df..48fe315 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -70,6 +70,8 @@
# linked checkout свързано изтегляне
# term управляваща дума (за git-bisect)
# mergetag етикет при сливане
+# packfile пакет
+# promisory гаратиращ, гарант promisory packfile гарантиращ пакет, promisory remote хранилище-гарант
# delta - разлика, делта, обект-разлика
# peeled tag - проследен етикет - когато етикет сочи към друг етикет, а не подаване и проследяваме подобно на символна връзка
# strip - премахвам (за компонент при филтриране)
@@ -88,6 +90,7 @@
# ignored (file) игнориран, понякога - пропуснат
# manual, man page ръководство
# guide въведение
+# partial clone непълно хранилище
# ------------------------
# „$var“ - може да не сработва за shell има gettext и eval_gettext - проверка - намират се лесно по „$
# ------------------------
@@ -100,8 +103,8 @@ msgid ""
msgstr ""
"Project-Id-Version: git master\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2018-01-07 07:50+0800\n"
-"PO-Revision-Date: 2018-01-11 22:01+0100\n"
+"POT-Creation-Date: 2018-03-16 07:29+0800\n"
+"PO-Revision-Date: 2018-03-16 09:53+0100\n"
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
"Language: bg\n"
@@ -152,7 +155,7 @@ msgstr ""
msgid "Exiting because of an unresolved conflict."
msgstr "Изход от програмата заради некоригиран конфликт."
-#: advice.c:121 builtin/merge.c:1213
+#: advice.c:121 builtin/merge.c:1251
msgid "You have not concluded your merge (MERGE_HEAD exists)."
msgstr "Не сте завършили сливане. (Указателят „MERGE_HEAD“ съществува)."
@@ -573,7 +576,7 @@ msgstr "смяна на режима на достъпа на „%s“, койт
msgid "sha1 information is lacking or useless (%s)."
msgstr "информацията за сумата по SHA1 липсва или не е достатъчна (%s)."
-#: apply.c:4095 builtin/checkout.c:236 builtin/reset.c:148
+#: apply.c:4095 builtin/checkout.c:235 builtin/reset.c:140
#, c-format
msgid "make_cache_entry failed for path '%s'"
msgstr "неуспешно създаване на запис в кеша чрез „make_cache_entry“ за „%s“"
@@ -651,7 +654,7 @@ msgstr[1] "Прилагане на кръпката „%%s“ с %d отхвър
msgid "truncating .rej filename to %.*s.rej"
msgstr "съкращаване на името на файла с отхвърлените парчета на „ %.*s.rej“"
-#: apply.c:4545 builtin/fetch.c:761 builtin/fetch.c:1011
+#: apply.c:4545 builtin/fetch.c:775 builtin/fetch.c:1025
#, c-format
msgid "cannot open %s"
msgstr "„%s“ не може да бъде отворен"
@@ -711,11 +714,11 @@ msgstr[1] ""
msgid "Unable to write new index file"
msgstr "Новият индекс не може да бъде записан"
-#: apply.c:4921 apply.c:4924 builtin/am.c:2220 builtin/am.c:2223
-#: builtin/clone.c:116 builtin/fetch.c:116 builtin/pull.c:193
-#: builtin/submodule--helper.c:369 builtin/submodule--helper.c:860
-#: builtin/submodule--helper.c:863 builtin/submodule--helper.c:1230
-#: builtin/submodule--helper.c:1233 builtin/submodule--helper.c:1450
+#: apply.c:4921 apply.c:4924 builtin/am.c:2254 builtin/am.c:2257
+#: builtin/clone.c:118 builtin/fetch.c:127 builtin/pull.c:193
+#: builtin/submodule--helper.c:403 builtin/submodule--helper.c:1197
+#: builtin/submodule--helper.c:1200 builtin/submodule--helper.c:1567
+#: builtin/submodule--helper.c:1570 builtin/submodule--helper.c:1787
#: git-add--interactive.perl:197
msgid "path"
msgstr "път"
@@ -728,7 +731,7 @@ msgstr "без прилагане на промените напасващи н
msgid "apply changes matching the given path"
msgstr "прилагане на промените напасващи на дадения път"
-#: apply.c:4927 builtin/am.c:2229
+#: apply.c:4927 builtin/am.c:2263
msgid "num"
msgstr "БРОЙ"
@@ -768,79 +771,79 @@ msgstr "прилагане на кръпката без промяна на ра
msgid "accept a patch that touches outside the working area"
msgstr "прилагане на кръпка, която променя и файлове извън работното дърво"
-#: apply.c:4949
+#: apply.c:4950
msgid "also apply the patch (use with --stat/--summary/--check)"
msgstr ""
"кръпката да бъде приложена. Опцията се комбинира с „--check“/„--stat“/„--"
"summary“"
-#: apply.c:4951
+#: apply.c:4952
msgid "attempt three-way merge if a patch does not apply"
msgstr "пробване с тройно сливане, ако кръпката не може да се приложи директно"
-#: apply.c:4953
+#: apply.c:4954
msgid "build a temporary index based on embedded index information"
msgstr ""
"създаване на временен индекс на база на включената информация за индекса"
-#: apply.c:4956 builtin/checkout-index.c:168 builtin/ls-files.c:515
+#: apply.c:4957 builtin/checkout-index.c:168 builtin/ls-files.c:515
msgid "paths are separated with NUL character"
msgstr "разделяне на пътищата с нулевия знак „NUL“"
-#: apply.c:4958
+#: apply.c:4959
msgid "ensure at least <n> lines of context match"
msgstr "да се осигури контекст от поне такъв БРОЙ съвпадащи редове"
-#: apply.c:4959 builtin/am.c:2208 builtin/interpret-trailers.c:95
+#: apply.c:4960 builtin/am.c:2242 builtin/interpret-trailers.c:95
#: builtin/interpret-trailers.c:97 builtin/interpret-trailers.c:99
-#: builtin/pack-objects.c:3009
+#: builtin/pack-objects.c:3035
msgid "action"
msgstr "действие"
-#: apply.c:4960
+#: apply.c:4961
msgid "detect new or modified lines that have whitespace errors"
msgstr "засичане на нови или променени редове с грешки в знаците за интервали"
-#: apply.c:4963 apply.c:4966
+#: apply.c:4964 apply.c:4967
msgid "ignore changes in whitespace when finding context"
msgstr ""
"игнориране на промените в знаците за интервали при откриване на контекста"
-#: apply.c:4969
+#: apply.c:4970
msgid "apply the patch in reverse"
msgstr "прилагане на кръпката в обратна посока"
-#: apply.c:4971
+#: apply.c:4972
msgid "don't expect at least one line of context"
msgstr "без изискване на дори и един ред контекст"
-#: apply.c:4973
+#: apply.c:4974
msgid "leave the rejected hunks in corresponding *.rej files"
msgstr "оставяне на отхвърлените парчета във файлове с разширение „.rej“"
-#: apply.c:4975
+#: apply.c:4976
msgid "allow overlapping hunks"
msgstr "позволяване на застъпващи се парчета"
-#: apply.c:4976 builtin/add.c:292 builtin/check-ignore.c:21
-#: builtin/commit.c:1361 builtin/count-objects.c:96 builtin/fsck.c:640
-#: builtin/log.c:1896 builtin/mv.c:123 builtin/read-tree.c:125
+#: apply.c:4977 builtin/add.c:292 builtin/check-ignore.c:21
+#: builtin/commit.c:1276 builtin/count-objects.c:96 builtin/fsck.c:665
+#: builtin/log.c:1901 builtin/mv.c:123 builtin/read-tree.c:125
msgid "be verbose"
msgstr "повече подробности"
-#: apply.c:4978
+#: apply.c:4979
msgid "tolerate incorrectly detected missing new-line at the end of file"
msgstr "пренебрегване на неправилно липсващ знак за нов ред в края на файл"
-#: apply.c:4981
+#: apply.c:4982
msgid "do not trust the line counts in the hunk headers"
msgstr "без доверяване на номерата на редовете в заглавните части на парчетата"
-#: apply.c:4983 builtin/am.c:2217
+#: apply.c:4984 builtin/am.c:2251
msgid "root"
msgstr "НАЧАЛНА_ДИРЕКТОРИЯ"
-#: apply.c:4984
+#: apply.c:4985
msgid "prepend <root> to all filenames"
msgstr "добавяне на тази НАЧАЛНА_ДИРЕКТОРИЯ към имената на всички файлове"
@@ -876,7 +879,7 @@ msgstr "ФОРМАТ"
msgid "archive format"
msgstr "ФОРМАТ на архива"
-#: archive.c:437 builtin/log.c:1459
+#: archive.c:437 builtin/log.c:1462
msgid "prefix"
msgstr "ПРЕФИКС"
@@ -884,11 +887,11 @@ msgstr "ПРЕФИКС"
msgid "prepend prefix to each pathname in the archive"
msgstr "добавяне на този ПРЕФИКС към всеки път в архива"
-#: archive.c:439 builtin/blame.c:693 builtin/blame.c:694 builtin/config.c:62
-#: builtin/fast-export.c:1005 builtin/fast-export.c:1007 builtin/grep.c:861
-#: builtin/hash-object.c:102 builtin/ls-files.c:551 builtin/ls-files.c:554
+#: archive.c:439 builtin/blame.c:702 builtin/blame.c:703 builtin/config.c:62
+#: builtin/fast-export.c:1005 builtin/fast-export.c:1007 builtin/grep.c:869
+#: builtin/hash-object.c:103 builtin/ls-files.c:551 builtin/ls-files.c:554
#: builtin/notes.c:405 builtin/notes.c:568 builtin/read-tree.c:120
-#: parse-options.h:153
+#: parse-options.h:165
msgid "file"
msgstr "ФАЙЛ"
@@ -920,8 +923,8 @@ msgstr "добро компресиране"
msgid "list supported archive formats"
msgstr "извеждане на списъка с поддържаните формати"
-#: archive.c:458 builtin/archive.c:90 builtin/clone.c:106 builtin/clone.c:109
-#: builtin/submodule--helper.c:872 builtin/submodule--helper.c:1239
+#: archive.c:458 builtin/archive.c:90 builtin/clone.c:108 builtin/clone.c:111
+#: builtin/submodule--helper.c:1209 builtin/submodule--helper.c:1576
msgid "repo"
msgstr "хранилище"
@@ -972,22 +975,22 @@ msgstr ""
"Отрицателните шаблони се игнорират в атрибутите на git.\n"
"Ако ви трябва начална удивителна, ползвайте „\\!“."
-#: bisect.c:458
+#: bisect.c:460
#, c-format
msgid "Badly quoted content in file '%s': %s"
msgstr "Неправилно цитирано съдържание във файла „%s“: %s"
-#: bisect.c:666
+#: bisect.c:668
#, c-format
msgid "We cannot bisect more!\n"
msgstr "Повече не може да се търси двоично!\n"
-#: bisect.c:720
+#: bisect.c:722
#, c-format
msgid "Not a valid commit name %s"
msgstr "Неправилно име на подаване „%s“"
-#: bisect.c:744
+#: bisect.c:746
#, c-format
msgid ""
"The merge base %s is bad.\n"
@@ -996,7 +999,7 @@ msgstr ""
"Неправилна база за сливане: %s.\n"
"Следователно грешката е коригирана между „%s“ и [%s].\n"
-#: bisect.c:749
+#: bisect.c:751
#, c-format
msgid ""
"The merge base %s is new.\n"
@@ -1005,7 +1008,7 @@ msgstr ""
"Нова база за сливане: %s.\n"
"Свойството е променено между „%s“ и [%s].\n"
-#: bisect.c:754
+#: bisect.c:756
#, c-format
msgid ""
"The merge base %s is %s.\n"
@@ -1014,7 +1017,7 @@ msgstr ""
"Базата за сливане „%s“ е %s.\n"
"Следователно първото %s подаване е между „%s“ и [%s].\n"
-#: bisect.c:762
+#: bisect.c:764
#, c-format
msgid ""
"Some %s revs are not ancestors of the %s rev.\n"
@@ -1025,7 +1028,7 @@ msgstr ""
"Двоичното търсене с git bisect няма да работи правилно.\n"
"Дали не сте объркали указателите „%s“ и „%s“?\n"
-#: bisect.c:775
+#: bisect.c:777
#, c-format
msgid ""
"the merge base between %s and [%s] must be skipped.\n"
@@ -1041,31 +1044,31 @@ msgstr ""
msgid "Bisecting: a merge base must be tested\n"
msgstr "Двоично търсене: трябва да се провери база за сливане\n"
-#: bisect.c:862
+#: bisect.c:850
#, c-format
msgid "a %s revision is needed"
msgstr "необходима е версия „%s“"
-#: bisect.c:879 builtin/notes.c:175 builtin/tag.c:234
+#: bisect.c:869 builtin/notes.c:175 builtin/tag.c:235
#, c-format
msgid "could not create file '%s'"
msgstr "файлът „%s“ не може да бъде създаден"
-#: bisect.c:930
+#: bisect.c:920
#, c-format
msgid "could not read file '%s'"
msgstr "файлът „%s“ не може да бъде прочетен"
-#: bisect.c:960
+#: bisect.c:950
msgid "reading bisect refs failed"
msgstr "неуспешно прочитане на указателите за двоично търсене"
-#: bisect.c:979
+#: bisect.c:969
#, c-format
msgid "%s was both %s and %s\n"
msgstr "„%s“ e както „%s“, така и „%s“\n"
-#: bisect.c:987
+#: bisect.c:977
#, c-format
msgid ""
"No testable commit found.\n"
@@ -1074,7 +1077,7 @@ msgstr ""
"Липсва подходящо за тестване подаване.\n"
"Проверете параметрите за пътищата.\n"
-#: bisect.c:1006
+#: bisect.c:996
#, c-format
msgid "(roughly %d step)"
msgid_plural "(roughly %d steps)"
@@ -1084,47 +1087,47 @@ msgstr[1] "(приблизително %d стъпки)"
#. TRANSLATORS: the last %s will be replaced with "(roughly %d
#. steps)" translation.
#.
-#: bisect.c:1012
+#: bisect.c:1002
#, 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:1757
+#: blame.c:1758
msgid "--contents and --reverse do not blend well."
msgstr "Опциите „--contents“ и „--reverse“ са несъвместими"
-#: blame.c:1768
+#: blame.c:1769
msgid "cannot use --contents with final commit object name"
msgstr "Опцията „--contents“ е несъвместима с име на обект от крайно подаване"
-#: blame.c:1788
+#: blame.c:1789
msgid "--reverse and --first-parent together require specified latest commit"
msgstr ""
"Едновременното задаване на опциите „--reverse“ и „--first-parent“ изисква "
"указването на крайно подаване"
-#: blame.c:1797 bundle.c:169 ref-filter.c:1981 sequencer.c:1177
-#: sequencer.c:2370 builtin/commit.c:1066 builtin/log.c:364 builtin/log.c:918
-#: builtin/log.c:1368 builtin/log.c:1697 builtin/log.c:1945 builtin/merge.c:369
+#: blame.c:1798 bundle.c:160 ref-filter.c:1978 sequencer.c:1699
+#: sequencer.c:2901 builtin/commit.c:976 builtin/log.c:366 builtin/log.c:920
+#: builtin/log.c:1371 builtin/log.c:1702 builtin/log.c:1950 builtin/merge.c:370
#: builtin/shortlog.c:191
msgid "revision walk setup failed"
msgstr "неуспешно настройване на обхождането на версиите"
-#: blame.c:1815
+#: blame.c:1816
msgid ""
"--reverse --first-parent together require range along first-parent chain"
msgstr ""
"Едновременното задаване на опциите „--reverse“ и „--first-parent“ изисква "
"указването на диапазон по веригата на първите наследници"
-#: blame.c:1826
+#: blame.c:1827
#, c-format
msgid "no such path %s in %s"
msgstr "няма път на име „%s“ в „%s“"
-#: blame.c:1837
+#: blame.c:1838
#, c-format
msgid "cannot read blob %s for path %s"
msgstr "обектът BLOB „%s“ в пътя %s не може да бъде прочетен"
@@ -1277,77 +1280,76 @@ msgstr "Файлът „%s“ не изглежда да е пратка на gi
msgid "unrecognized header: %s%s (%d)"
msgstr "непозната заглавна част: %s%s (%d)"
-#: bundle.c:88 sequencer.c:1360 sequencer.c:1807 sequencer.c:2637
-#: sequencer.c:2663 sequencer.c:2754 sequencer.c:2856 builtin/commit.c:782
+#: bundle.c:88 sequencer.c:1879 sequencer.c:2337 builtin/commit.c:750
#, c-format
msgid "could not open '%s'"
msgstr "„%s“ не може да се отвори"
-#: bundle.c:140
+#: bundle.c:139
msgid "Repository lacks these prerequisite commits:"
msgstr "В хранилището липсват следните необходими подавания:"
-#: bundle.c:193
+#: bundle.c:190
#, c-format
msgid "The bundle contains this ref:"
msgid_plural "The bundle contains these %d refs:"
msgstr[0] "Пратката съдържа следния указател:"
msgstr[1] "Пратката съдържа следните %d указатели:"
-#: bundle.c:200
+#: bundle.c:197
msgid "The bundle records a complete history."
msgstr "Пратката съдържа пълна история."
-#: bundle.c:202
+#: bundle.c:199
#, c-format
msgid "The bundle requires this ref:"
msgid_plural "The bundle requires these %d refs:"
msgstr[0] "Пратката изисква следния указател:"
msgstr[1] "Пратката изисква следните %d указатели:"
-#: bundle.c:261
+#: bundle.c:258
msgid "Could not spawn pack-objects"
msgstr "Командата „git pack-objects“ не може да бъде стартирана"
-#: bundle.c:272
+#: bundle.c:269
msgid "pack-objects died"
msgstr "Командата „git pack-objects“ не завърши успешно"
-#: bundle.c:314
+#: bundle.c:311
msgid "rev-list died"
msgstr "Командата „git rev-list“ не завърши успешно"
-#: bundle.c:363
+#: bundle.c:360
#, c-format
msgid "ref '%s' is excluded by the rev-list options"
msgstr ""
"указателят „%s“ не е бил включен поради опциите зададени на „git rev-list“"
-#: bundle.c:453 builtin/log.c:181 builtin/log.c:1604 builtin/shortlog.c:296
+#: bundle.c:450 builtin/log.c:183 builtin/log.c:1607 builtin/shortlog.c:296
#, c-format
msgid "unrecognized argument: %s"
msgstr "непознат аргумент: %s"
-#: bundle.c:461
+#: bundle.c:458
msgid "Refusing to create empty bundle."
msgstr "Създаването на празна пратка е невъзможно."
-#: bundle.c:473
+#: bundle.c:470
#, c-format
msgid "cannot create '%s'"
msgstr "Файлът „%s“ не може да бъде създаден"
-#: bundle.c:501
+#: bundle.c:498
msgid "index-pack died"
msgstr "Командата „git index-pack“ не завърши успешно"
-#: color.c:301
+#: color.c:296
#, c-format
msgid "invalid color value: %.*s"
msgstr "неправилна стойност за цвят: %.*s"
-#: commit.c:41 sequencer.c:1614 builtin/am.c:421 builtin/am.c:465
-#: builtin/am.c:1434 builtin/am.c:2069
+#: commit.c:41 sequencer.c:2141 builtin/am.c:421 builtin/am.c:465
+#: builtin/am.c:1436 builtin/am.c:2072
#, c-format
msgid "could not parse %s"
msgstr "„%s“ не може да се анализира"
@@ -1357,7 +1359,7 @@ msgstr "„%s“ не може да се анализира"
msgid "%s %s is not a commit!"
msgstr "%s %s не е подаване!"
-#: commit.c:1524
+#: commit.c:1506
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"
@@ -1463,69 +1465,69 @@ msgstr "„%s“ не е правилна стойност за време за
msgid "bad zlib compression level %d"
msgstr "неправилно ниво на компресиране: %d"
-#: config.c:1222
+#: config.c:1225
#, c-format
msgid "invalid mode for object creation: %s"
msgstr "неправилен режим за създаването на обекти: %s"
-#: config.c:1378
+#: config.c:1386
#, c-format
msgid "bad pack compression level %d"
msgstr "неправилно ниво на компресиране при пакетиране: %d"
-#: config.c:1574
+#: config.c:1582
msgid "unable to parse command-line config"
msgstr "неправилни настройки от командния ред"
-#: config.c:1906
+#: config.c:1914
msgid "unknown error occurred while reading the configuration files"
msgstr "неочаквана грешка при изчитането на конфигурационните файлове"
-#: config.c:2093
+#: config.c:2101
#, c-format
msgid "Invalid %s: '%s'"
msgstr "Неправилен %s: „%s“"
-#: config.c:2136
+#: config.c:2144
#, c-format
msgid "unknown core.untrackedCache value '%s'; using 'keep' default value"
msgstr ""
"непозната стойност „%s“ за настройката „core.untrackedCache“. Ще се ползва "
"стандартната стойност „keep“ (запазване)"
-#: config.c:2162
+#: config.c:2170
#, c-format
msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
msgstr ""
"стойността на „splitIndex.maxPercentChange“ трябва да е между 1 и 100, а не "
"%d"
-#: config.c:2187
+#: config.c:2195
#, c-format
msgid "unable to parse '%s' from command-line config"
msgstr "неразпозната стойност „%s“ от командния ред"
-#: config.c:2189
+#: config.c:2197
#, c-format
msgid "bad config variable '%s' in file '%s' at line %d"
msgstr "неправилна настройка „%s“ във файла „%s“ на ред №%d"
-#: config.c:2248
+#: config.c:2256
#, c-format
msgid "%s has multiple values"
msgstr "зададени са няколко стойности за „%s“"
-#: config.c:2591 config.c:2808
+#: config.c:2599 config.c:2816
#, c-format
msgid "fstat on %s failed"
msgstr "неуспешно изпълнение на „fstat“ върху „%s“"
-#: config.c:2698
+#: config.c:2706
#, c-format
msgid "could not set '%s' to '%s'"
msgstr "„%s“ не може да се зададе да е „%s“"
-#: config.c:2700 builtin/remote.c:776
+#: config.c:2708 builtin/remote.c:776
#, c-format
msgid "could not unset '%s'"
msgstr "„%s“ не може да се премахне"
@@ -1546,24 +1548,29 @@ msgstr ""
"Проверете дали то съществува и дали имате права\n"
"за достъп."
-#: connected.c:64 builtin/fsck.c:183 builtin/prune.c:141
+#: connected.c:66 builtin/fsck.c:198 builtin/prune.c:144
msgid "Checking connectivity"
msgstr "Проверка на връзката"
-#: connected.c:76
+#: connected.c:78
msgid "Could not run 'git rev-list'"
msgstr "Командата „git rev-list“ не може да бъде изпълнена."
-#: connected.c:96
+#: connected.c:98
msgid "failed write to rev-list"
msgstr "неуспешен запис на списъка с версиите"
-#: connected.c:103
+#: connected.c:105
msgid "failed to close rev-list's stdin"
msgstr "стандартният вход на списъка с версиите не може да бъде затворен"
#: convert.c:205
#, c-format
+msgid "CRLF would be replaced by LF in %s."
+msgstr "Всяка последователност от знаци „CRLF“ ще бъдe заменена с „LF“ в „%s“."
+
+#: convert.c:207
+#, c-format
msgid ""
"CRLF will be replaced by LF in %s.\n"
"The file will have its original line endings in your working directory."
@@ -1572,12 +1579,13 @@ msgstr ""
"Файлът ще остане с първоначалните знаци за край на ред в работната ви "
"директория."
-#: convert.c:209
+#: convert.c:215
#, c-format
-msgid "CRLF would be replaced by LF in %s."
-msgstr "Всяка последователност от знаци „CRLF“ ще бъдe заменена с „LF“ в „%s“."
+msgid "LF would be replaced by CRLF in %s"
+msgstr ""
+"Всеки знак „LF“ ще бъдe заменен с последователността от знаци „CRLF“ в „%s“."
-#: convert.c:215
+#: convert.c:217
#, c-format
msgid ""
"LF will be replaced by CRLF in %s.\n"
@@ -1588,12 +1596,6 @@ msgstr ""
"Файлът ще остане с първоначалните знаци за край на ред в работната ви "
"директория."
-#: convert.c:219
-#, c-format
-msgid "LF would be replaced by CRLF in %s"
-msgstr ""
-"Всеки знак „LF“ ще бъдe заменен с последователността от знаци „CRLF“ в „%s“."
-
#: date.c:116
msgid "in the future"
msgstr "в бъдещето"
@@ -1694,7 +1696,7 @@ msgid ""
"'plain'"
msgstr ""
"настройката за цвят за преместване трябва да е една от: „no“ (без), "
-"„default“ (стандартно), „zebra“ (райе), „dimmed_zebra“ (притъмнено райе), "
+"„default“ (стандартно), „zebra“ (райе), „dimmed_zebra“ (тъмно райе), "
"„plain“ (обикновено)"
#: diff.c:341
@@ -1711,23 +1713,27 @@ msgstr ""
"Грешки в настройката „diff.dirstat“:\n"
"%s"
-#: diff.c:3799
+#: diff.c:3822
#, c-format
msgid "external diff died, stopping at %s"
msgstr ""
"външната програма за разлики завърши неуспешно. Спиране на работата при „%s“"
-#: diff.c:4127
+#: diff.c:4146
msgid "--name-only, --name-status, --check and -s are mutually exclusive"
msgstr ""
"Опциите „--name-only“, „--name-status“, „--check“ и „-s“ са несъвместими "
"една с друга"
-#: diff.c:4215
+#: diff.c:4149
+msgid "-G, -S and --find-object are mutually exclusive"
+msgstr "Опциите „-G“, „-S“ и „--find-object“ са несъвместими една с друга"
+
+#: diff.c:4237
msgid "--follow requires exactly one pathspec"
msgstr "Опцията „--follow“ изисква точно един път"
-#: diff.c:4381
+#: diff.c:4403
#, c-format
msgid ""
"Failed to parse --dirstat/-X option parameter:\n"
@@ -1736,43 +1742,48 @@ msgstr ""
"Неразпознат параметър към опцията „--dirstat/-X“:\n"
"%s"
-#: diff.c:4395
+#: diff.c:4417
#, c-format
msgid "Failed to parse --submodule option parameter: '%s'"
msgstr "Неразпознат параметър към опцията „--submodule“: „%s“"
-#: diff.c:5446
+#: diff.c:5493
msgid "inexact rename detection was skipped due to too many files."
msgstr ""
"търсенето на преименувания на обекти съчетани с промени се прескача поради "
"многото файлове."
-#: diff.c:5449
+#: diff.c:5496
msgid "only found copies from modified paths due to too many files."
msgstr ""
"установени са точните копия на променените пътища поради многото файлове."
-#: diff.c:5452
+#: diff.c:5499
#, c-format
msgid ""
"you may want to set your %s variable to at least %d and retry the command."
msgstr "задайте променливата „%s“ да е поне %d и отново изпълнете командата."
-#: dir.c:2100
+#: dir.c:1866
+#, c-format
+msgid "could not open directory '%s'"
+msgstr "директорията „%s“ не може да бъде отворена"
+
+#: dir.c:2108
msgid "failed to get kernel name and information"
msgstr "името и версията на ядрото не бяха получени"
-#: dir.c:2219
+#: dir.c:2232
msgid "Untracked cache is disabled on this system or location."
msgstr ""
"Кеша за неследените файлове е изключен на тази система или местоположение."
-#: dir.c:3002 dir.c:3007
+#: dir.c:3024 dir.c:3029
#, c-format
msgid "could not create directories for %s"
msgstr "директориите за „%s“ не може да бъдат създадени"
-#: dir.c:3032
+#: dir.c:3054
#, c-format
msgid "could not migrate git directory from '%s' to '%s'"
msgstr "директорията на git не може да се мигрира от „%s“ до „%s“"
@@ -1791,184 +1802,193 @@ msgstr "Филтриране на съдържанието"
msgid "could not stat file '%s'"
msgstr "неуспешно изпълнение на „stat“ върху файла „%s“"
-#: fetch-pack.c:252
+#: fetch-object.c:17
+msgid "Remote with no URL"
+msgstr "Липсва адрес за отдалеченото хранилище"
+
+#: fetch-pack.c:253
msgid "git fetch-pack: expected shallow list"
msgstr "git fetch-pack: очаква се плитък списък"
-#: fetch-pack.c:264
-msgid "git fetch-pack: expected ACK/NAK, got EOF"
-msgstr "git fetch-pack: очакваше се „ACK“/„NAK“, а бе получен „EOF“"
+#: fetch-pack.c:265
+msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
+msgstr ""
+"git fetch-pack: очакваше се „ACK“/„NAK“, а бе получен изчистващ пакет „flush“"
-#: fetch-pack.c:283 builtin/archive.c:63
+#: fetch-pack.c:284 builtin/archive.c:63
#, c-format
msgid "remote error: %s"
msgstr "отдалечена грешка: %s"
-#: fetch-pack.c:284
+#: fetch-pack.c:285
#, c-format
msgid "git fetch-pack: expected ACK/NAK, got '%s'"
msgstr "git fetch-pack: очакваше се „ACK“/„NAK“, а бе получен „%s“"
-#: fetch-pack.c:336
+#: fetch-pack.c:337
msgid "--stateless-rpc requires multi_ack_detailed"
msgstr "опцията „--stateless-rpc“ изисква „multi_ack_detailed“"
-#: fetch-pack.c:422
+#: fetch-pack.c:428
#, c-format
msgid "invalid shallow line: %s"
msgstr "неправилен плитък ред: „%s“"
-#: fetch-pack.c:428
+#: fetch-pack.c:434
#, c-format
msgid "invalid unshallow line: %s"
msgstr "неправилен неплитък ред: „%s“"
-#: fetch-pack.c:430
+#: fetch-pack.c:436
#, c-format
msgid "object not found: %s"
msgstr "обектът „%s“ липсва"
-#: fetch-pack.c:433
+#: fetch-pack.c:439
#, c-format
msgid "error in object: %s"
msgstr "грешка в обекта: „%s“"
-#: fetch-pack.c:435
+#: fetch-pack.c:441
#, c-format
msgid "no shallow found: %s"
msgstr "не е открит плитък обект: %s"
-#: fetch-pack.c:438
+#: fetch-pack.c:444
#, c-format
msgid "expected shallow/unshallow, got %s"
msgstr "очаква се плитък или не обект, а бе получено: %s"
-#: fetch-pack.c:477
+#: fetch-pack.c:485
#, c-format
msgid "got %s %d %s"
msgstr "получено бе %s %d %s"
-#: fetch-pack.c:491
+#: fetch-pack.c:499
#, c-format
msgid "invalid commit %s"
msgstr "неправилно подаване: „%s“"
-#: fetch-pack.c:524
+#: fetch-pack.c:532
msgid "giving up"
msgstr "преустановяване"
-#: fetch-pack.c:534 progress.c:229
+#: fetch-pack.c:542 progress.c:229
msgid "done"
msgstr "действието завърши"
-#: fetch-pack.c:546
+#: fetch-pack.c:554
#, c-format
msgid "got %s (%d) %s"
msgstr "получено бе %s (%d) %s"
-#: fetch-pack.c:592
+#: fetch-pack.c:600
#, c-format
msgid "Marking %s as complete"
msgstr "Отбелязване на „%s“ като пълно"
-#: fetch-pack.c:777
+#: fetch-pack.c:788
#, c-format
msgid "already have %s (%s)"
msgstr "вече има „%s“ (%s)"
-#: fetch-pack.c:815
+#: fetch-pack.c:829
msgid "fetch-pack: unable to fork off sideband demultiplexer"
msgstr "fetch-pack: не може да се създаде процес за демултиплексора"
-#: fetch-pack.c:823
+#: fetch-pack.c:837
msgid "protocol error: bad pack header"
msgstr "протоколна грешка: неправилна заглавна част на пакет"
-#: fetch-pack.c:879
+#: fetch-pack.c:895
#, c-format
msgid "fetch-pack: unable to fork off %s"
msgstr "fetch-pack: не може да се създаде процес за „%s“"
-#: fetch-pack.c:895
+#: fetch-pack.c:911
#, c-format
msgid "%s failed"
msgstr "неуспешно изпълнение на „%s“"
-#: fetch-pack.c:897
+#: fetch-pack.c:913
msgid "error in sideband demultiplexer"
msgstr "грешка в демултиплексора"
-#: fetch-pack.c:924
+#: fetch-pack.c:940
msgid "Server does not support shallow clients"
msgstr "Сървърът не поддържа плитки клиенти"
-#: fetch-pack.c:928
+#: fetch-pack.c:944
msgid "Server supports multi_ack_detailed"
msgstr "Сървърът поддържа „multi_ack_detailed“"
-#: fetch-pack.c:931
+#: fetch-pack.c:947
msgid "Server supports no-done"
msgstr "Сървърът поддържа „no-done“"
-#: fetch-pack.c:937
+#: fetch-pack.c:953
msgid "Server supports multi_ack"
msgstr "Сървърът поддържа „multi_ack“"
-#: fetch-pack.c:941
+#: fetch-pack.c:957
msgid "Server supports side-band-64k"
msgstr "Сървърът поддържа „side-band-64k“"
-#: fetch-pack.c:945
+#: fetch-pack.c:961
msgid "Server supports side-band"
msgstr "Сървърът поддържа „side-band“"
-#: fetch-pack.c:949
+#: fetch-pack.c:965
msgid "Server supports allow-tip-sha1-in-want"
msgstr "Сървърът поддържа „allow-tip-sha1-in-want“"
-#: fetch-pack.c:953
+#: fetch-pack.c:969
msgid "Server supports allow-reachable-sha1-in-want"
msgstr "Сървърът поддържа „allow-reachable-sha1-in-want“"
-#: fetch-pack.c:963
+#: fetch-pack.c:979
msgid "Server supports ofs-delta"
msgstr "Сървърът поддържа „ofs-delta“"
-#: fetch-pack.c:970
+#: fetch-pack.c:985
+msgid "Server supports filter"
+msgstr "Сървърът поддържа филтри"
+
+#: fetch-pack.c:993
#, c-format
msgid "Server version is %.*s"
msgstr "Версията на сървъра е: %.*s"
-#: fetch-pack.c:976
+#: fetch-pack.c:999
msgid "Server does not support --shallow-since"
msgstr "Сървърът не поддържа опцията „--shallow-since“"
-#: fetch-pack.c:980
+#: fetch-pack.c:1003
msgid "Server does not support --shallow-exclude"
msgstr "Сървърът не поддържа опцията „--shallow-exclude“"
-#: fetch-pack.c:982
+#: fetch-pack.c:1005
msgid "Server does not support --deepen"
msgstr "Сървърът не поддържа опцията „--deepen“"
-#: fetch-pack.c:993
+#: fetch-pack.c:1016
msgid "no common commits"
msgstr "няма общи подавания"
-#: fetch-pack.c:1005
+#: fetch-pack.c:1028
msgid "git fetch-pack: fetch failed."
msgstr "git fetch-pack: неуспешно доставяне."
-#: fetch-pack.c:1167
+#: fetch-pack.c:1190
msgid "no matching remote head"
msgstr "не може да бъде открит подходящ връх от отдалеченото хранилище"
-#: fetch-pack.c:1189
+#: fetch-pack.c:1212
#, c-format
msgid "no such remote ref %s"
msgstr "такъв отдалечен указател няма: %s"
-#: fetch-pack.c:1192
+#: fetch-pack.c:1215
#, c-format
msgid "Server does not allow request for unadvertised object %s"
msgstr "Сървърът не позволява заявка за необявен „%s“"
@@ -1991,17 +2011,18 @@ msgstr "Програмата не успя да запише самостоят
msgid "ignore invalid color '%.*s' in log.graphColors"
msgstr "прескачане на неправилния цвят „%.*s“ в „log.graphColors“"
-#: grep.c:2017
+#: grep.c:2022
#, c-format
msgid "'%s': unable to read %s"
msgstr "„%s“: файлът сочен от „%s“ не може да бъде прочетен"
-#: grep.c:2034 builtin/clone.c:404 builtin/diff.c:81 builtin/rm.c:134
+#: grep.c:2039 setup.c:163 builtin/clone.c:407 builtin/diff.c:81
+#: builtin/rm.c:134
#, c-format
msgid "failed to stat '%s'"
msgstr "не може да бъде получена информация чрез „stat“ за „%s“"
-#: grep.c:2045
+#: grep.c:2050
#, c-format
msgid "'%s': short read"
msgstr "„%s“: изчитането върна по-малко байтове от очакваното"
@@ -2151,19 +2172,18 @@ msgstr "не може да се ползва празно име като иде
msgid "name consists only of disallowed characters: %s"
msgstr "името съдържа само непозволени знаци: „%s“"
-#: ident.c:416 builtin/commit.c:616
+#: ident.c:416 builtin/commit.c:582
#, c-format
msgid "invalid date format: %s"
msgstr "неправилен формат на дата: %s"
-#: list-objects-filter-options.c:30
-msgid "multiple object filter types cannot be combined"
-msgstr "не може да комбинирате филтри по различен вид обекти"
+#: list-objects-filter-options.c:36
+msgid "multiple filter-specs cannot be combined"
+msgstr "не може да комбинирате множество филтри"
-#: list-objects-filter-options.c:41 list-objects-filter-options.c:68
-#, c-format
-msgid "invalid filter-spec expression '%s'"
-msgstr "указан е неправилен израз за филтър: „%s“"
+#: list-objects-filter-options.c:126
+msgid "cannot change partial clone promisor remote"
+msgstr "не може да промените хранилището-гарант на непълно хранилище"
#: lockfile.c:151
#, c-format
@@ -2193,8 +2213,8 @@ msgstr "Файлът-ключалка „%s.lock“ не може да бъде
msgid "failed to read the cache"
msgstr "кешът не може да бъде прочетен"
-#: merge.c:128 builtin/am.c:1943 builtin/am.c:1977 builtin/checkout.c:379
-#: builtin/checkout.c:600 builtin/clone.c:754
+#: merge.c:134 builtin/am.c:1946 builtin/am.c:1980 builtin/checkout.c:378
+#: builtin/checkout.c:599 builtin/clone.c:759
msgid "unable to write new index file"
msgstr "неуспешно записване на новия индекс"
@@ -2211,62 +2231,62 @@ msgstr "неуспешно изпълнение на „addinfo_cache“ за п
msgid "error building trees"
msgstr "грешка при изграждане на дърветата"
-#: merge-recursive.c:752
+#: merge-recursive.c:771
#, c-format
msgid "failed to create path '%s'%s"
msgstr "грешка при създаването на пътя „%s“%s"
-#: merge-recursive.c:763
+#: merge-recursive.c:782
#, c-format
msgid "Removing %s to make room for subdirectory\n"
msgstr "Изтриване на „%s“, за да се освободи място за поддиректория\n"
-#: merge-recursive.c:777 merge-recursive.c:796
+#: merge-recursive.c:796 merge-recursive.c:815
msgid ": perhaps a D/F conflict?"
msgstr ": възможно е да има конфликт директория/файл."
-#: merge-recursive.c:786
+#: merge-recursive.c:805
#, c-format
msgid "refusing to lose untracked file at '%s'"
msgstr ""
"преустановяване на действието, за да не се изтрие неследеният файл „%s“"
-#: merge-recursive.c:828 builtin/cat-file.c:37
+#: merge-recursive.c:847 builtin/cat-file.c:37
#, c-format
msgid "cannot read object %s '%s'"
msgstr "обектът „%s“ (%s) не може да бъде прочетен"
-#: merge-recursive.c:830
+#: merge-recursive.c:849
#, c-format
msgid "blob expected for %s '%s'"
msgstr "обектът „%s“ (%s) се очакваше да е BLOB, а не е"
-#: merge-recursive.c:854
+#: merge-recursive.c:873
#, c-format
msgid "failed to open '%s': %s"
msgstr "„%s“ не може да се отвори: %s"
-#: merge-recursive.c:865
+#: merge-recursive.c:884
#, c-format
msgid "failed to symlink '%s': %s"
msgstr "неуспешно създаване на символната връзка „%s“: %s"
-#: merge-recursive.c:870
+#: merge-recursive.c:889
#, c-format
msgid "do not know what to do with %06o %s '%s'"
msgstr ""
"не е ясно какво да се прави с обекта „%2$s“ (%3$s) с права за достъп „%1$06o“"
-#: merge-recursive.c:1010
+#: merge-recursive.c:1029
msgid "Failed to execute internal merge"
msgstr "Неуспешно вътрешно сливане"
-#: merge-recursive.c:1014
+#: merge-recursive.c:1034
#, c-format
msgid "Unable to add %s to database"
msgstr "„%s“ не може да се добави в базата с данни"
-#: merge-recursive.c:1117
+#: merge-recursive.c:1146
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -2275,7 +2295,7 @@ msgstr ""
"КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ в %s. Версия %s на „%s“ "
"е оставена в дървото."
-#: merge-recursive.c:1122
+#: merge-recursive.c:1151
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -2284,7 +2304,7 @@ msgstr ""
"КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ е преименуван на „%s“ в "
"%s. Версия %s на „%s“ е оставена в дървото."
-#: merge-recursive.c:1129
+#: merge-recursive.c:1158
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -2293,7 +2313,7 @@ msgstr ""
"КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ в %s. Версия %s на „%s“ "
"е оставена в дървото: %s."
-#: merge-recursive.c:1134
+#: merge-recursive.c:1163
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -2302,20 +2322,20 @@ msgstr ""
"КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ е преименуван на „%s“ в "
"%s. Версия %s на „%s“ е оставена в дървото: %s."
-#: merge-recursive.c:1168
+#: merge-recursive.c:1197
msgid "rename"
msgstr "преименуване"
-#: merge-recursive.c:1168
+#: merge-recursive.c:1197
msgid "renamed"
msgstr "преименуван"
-#: merge-recursive.c:1225
+#: merge-recursive.c:1254
#, c-format
msgid "%s is a directory in %s adding as %s instead"
msgstr "„%s“ е директория в „%s“, затова се добавя като „%s“"
-#: merge-recursive.c:1250
+#: merge-recursive.c:1279
#, c-format
msgid ""
"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -2324,145 +2344,145 @@ msgstr ""
"КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон "
"„%s“, а „%s“ е преименуван на „%s“ в „%s“/%s."
-#: merge-recursive.c:1255
+#: merge-recursive.c:1284
msgid " (left unresolved)"
msgstr " (некоригиран конфликт)"
-#: merge-recursive.c:1317
+#: merge-recursive.c:1346
#, 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:1350
+#: merge-recursive.c:1379
#, c-format
msgid "Renaming %s to %s and %s to %s instead"
msgstr "Преименуване на „%s“ на „%s“, а „%s“ на „%s“"
-#: merge-recursive.c:1553
+#: merge-recursive.c:1582
#, c-format
msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s"
msgstr ""
"КОНФЛИКТ (преименуване/добавяне): „%s“ е преименуван на „%s“ в клон „%s“, а "
"„%s“ е добавен в „%s“"
-#: merge-recursive.c:1568
+#: merge-recursive.c:1597
#, c-format
msgid "Adding merged %s"
msgstr "Добавяне на слетия „%s“"
-#: merge-recursive.c:1575 merge-recursive.c:1805
+#: merge-recursive.c:1604 merge-recursive.c:1834
#, c-format
msgid "Adding as %s instead"
msgstr "Добавяне като „%s“"
-#: merge-recursive.c:1632
+#: merge-recursive.c:1661
#, c-format
msgid "cannot read object %s"
msgstr "обектът „%s“ не може да се прочете"
-#: merge-recursive.c:1635
+#: merge-recursive.c:1664
#, c-format
msgid "object %s is not a blob"
msgstr "обектът „%s“ не е BLOB"
-#: merge-recursive.c:1704
+#: merge-recursive.c:1733
msgid "modify"
msgstr "промяна"
-#: merge-recursive.c:1704
+#: merge-recursive.c:1733
msgid "modified"
msgstr "променен"
-#: merge-recursive.c:1714
+#: merge-recursive.c:1743
msgid "content"
msgstr "съдържание"
-#: merge-recursive.c:1721
+#: merge-recursive.c:1750
msgid "add/add"
msgstr "добавяне/добавяне"
-#: merge-recursive.c:1757
+#: merge-recursive.c:1786
#, c-format
msgid "Skipped %s (merged same as existing)"
msgstr "Прескачане на „%s“ (слетият резултат е идентичен със сегашния)"
-#: merge-recursive.c:1771
+#: merge-recursive.c:1800
#, c-format
msgid "Auto-merging %s"
msgstr "Автоматично сливане на „%s“"
-#: merge-recursive.c:1775 git-submodule.sh:932
+#: merge-recursive.c:1804 git-submodule.sh:879
msgid "submodule"
msgstr "ПОДМОДУЛ"
-#: merge-recursive.c:1776
+#: merge-recursive.c:1805
#, c-format
msgid "CONFLICT (%s): Merge conflict in %s"
msgstr "КОНФЛИКТ (%s): Конфликт при сливане на „%s“"
-#: merge-recursive.c:1870
+#: merge-recursive.c:1899
#, c-format
msgid "Removing %s"
msgstr "Изтриване на „%s“"
-#: merge-recursive.c:1896
+#: merge-recursive.c:1925
msgid "file/directory"
msgstr "файл/директория"
-#: merge-recursive.c:1902
+#: merge-recursive.c:1931
msgid "directory/file"
msgstr "директория/файл"
-#: merge-recursive.c:1909
+#: merge-recursive.c:1938
#, 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:1918
+#: merge-recursive.c:1947
#, c-format
msgid "Adding %s"
msgstr "Добавяне на „%s“"
-#: merge-recursive.c:1958
+#: merge-recursive.c:1987
#, c-format
msgid "Dirty index: cannot merge (dirty: %s)"
msgstr ""
"Индексът не е чист: кръпките не могат да бъдат приложени (замърсени са: %s)"
-#: merge-recursive.c:1962
+#: merge-recursive.c:1991
msgid "Already up to date!"
msgstr "Вече е обновено!"
-#: merge-recursive.c:1971
+#: merge-recursive.c:2000
#, c-format
msgid "merging of trees %s and %s failed"
msgstr "неуспешно сливане на дърветата „%s“ и „%s“"
-#: merge-recursive.c:2068
+#: merge-recursive.c:2097
msgid "Merging:"
msgstr "Сливане:"
-#: merge-recursive.c:2081
+#: merge-recursive.c:2110
#, c-format
msgid "found %u common ancestor:"
msgid_plural "found %u common ancestors:"
msgstr[0] "открит е %u общ предшественик:"
msgstr[1] "открити са %u общи предшественици:"
-#: merge-recursive.c:2120
+#: merge-recursive.c:2149
msgid "merge returned no commit"
msgstr "сливането не върна подаване"
-#: merge-recursive.c:2183
+#: merge-recursive.c:2212
#, c-format
msgid "Could not parse object '%s'"
msgstr "Неуспешен анализ на обекта „%s“"
-#: merge-recursive.c:2197 builtin/merge.c:656 builtin/merge.c:815
+#: merge-recursive.c:2228 builtin/merge.c:657 builtin/merge.c:816
msgid "Unable to write index."
msgstr "Индексът не може да бъде прочетен"
@@ -2489,17 +2509,17 @@ msgid "You have not concluded your notes merge (%s exists)."
msgstr ""
"Не сте завършили сливането на бележките. (Указателят „%s“ съществува)."
-#: notes-utils.c:42
+#: notes-utils.c:43
msgid "Cannot commit uninitialized/unreferenced notes tree"
msgstr ""
"Неинициализирано или нереферирано дърво за бележки не може да бъде подадено"
-#: notes-utils.c:101
+#: notes-utils.c:102
#, c-format
msgid "Bad notes.rewriteMode value: '%s'"
msgstr "Неправилна стойност за „notes.rewriteMode“: „%s“"
-#: notes-utils.c:111
+#: notes-utils.c:112
#, c-format
msgid "Refusing to rewrite notes in %s (outside of refs/notes/)"
msgstr ""
@@ -2509,7 +2529,7 @@ msgstr ""
#. the environment variable, the second %s is
#. its value.
#.
-#: notes-utils.c:141
+#: notes-utils.c:142
#, c-format
msgid "Bad %s value: '%s'"
msgstr "Зададена е лоша стойност на променливата „%s“: „%s“"
@@ -2519,30 +2539,30 @@ msgstr "Зададена е лоша стойност на променлива
msgid "unable to parse object: %s"
msgstr "обектът „%s“ не може да бъде анализиран"
-#: packfile.c:556
+#: packfile.c:561
msgid "offset before end of packfile (broken .idx?)"
msgstr ""
"отместване преди края на пакетния файл (възможно е индексът да е повреден)"
-#: packfile.c:1683
+#: packfile.c:1694
#, c-format
msgid "offset before start of pack index for %s (corrupt index?)"
msgstr ""
"отместване преди началото на индекса на пакетния файл „%s“ (възможно е "
"индексът да е повреден)"
-#: packfile.c:1687
+#: packfile.c:1698
#, c-format
msgid "offset beyond end of pack index for %s (truncated index?)"
msgstr ""
"отместване преди края на индекса на пакетния файл „%s“ (възможно е индексът "
"да е отрязан)"
-#: parse-options.c:573
+#: parse-options.c:619
msgid "..."
msgstr "…"
-#: parse-options.c:592
+#: parse-options.c:638
#, c-format
msgid "usage: %s"
msgstr "употреба: %s"
@@ -2550,17 +2570,17 @@ msgstr "употреба: %s"
#. TRANSLATORS: the colon here should align with the
#. one in "usage: %s" translation.
#.
-#: parse-options.c:598
+#: parse-options.c:644
#, c-format
msgid " or: %s"
msgstr " или: %s"
-#: parse-options.c:601
+#: parse-options.c:647
#, c-format
msgid " %s"
msgstr " %s"
-#: parse-options.c:640
+#: parse-options.c:686
msgid "-NUM"
msgstr "-ЧИСЛО"
@@ -2652,7 +2672,7 @@ msgstr "пътят „%s“ е след символна връзка"
msgid "unable to parse --pretty format"
msgstr "аргументът към опцията „--pretty“ не може да се анализира"
-#: read-cache.c:1472
+#: read-cache.c:1473
#, c-format
msgid ""
"index.version set, but the value is invalid.\n"
@@ -2661,7 +2681,7 @@ msgstr ""
"Зададена е неправилна стойност на настройката „index.version“.\n"
"Ще се ползва версия %i"
-#: read-cache.c:1482
+#: read-cache.c:1483
#, c-format
msgid ""
"GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -2671,22 +2691,22 @@ msgstr ""
"„GIT_INDEX_VERSION“.\n"
"Ще се ползва версия %i"
-#: read-cache.c:2370 sequencer.c:2731 wrapper.c:658 builtin/merge.c:1048
+#: read-cache.c:2375 sequencer.c:3248 wrapper.c:658 builtin/merge.c:1049
#, c-format
msgid "could not close '%s'"
msgstr "„%s“ не може да се затвори"
-#: read-cache.c:2442 sequencer.c:1369 sequencer.c:2096
+#: read-cache.c:2448 sequencer.c:1900 sequencer.c:2627
#, c-format
msgid "could not stat '%s'"
msgstr "неуспешно изпълнение на „stat“ върху „%s“"
-#: read-cache.c:2455
+#: read-cache.c:2461
#, c-format
msgid "unable to open git dir: %s"
msgstr "не може да се отвори директорията на git: %s"
-#: read-cache.c:2467
+#: read-cache.c:2473
#, c-format
msgid "unable to unlink: %s"
msgstr "неуспешно изтриване на „%s“"
@@ -2705,18 +2725,18 @@ msgstr "обновяванията на указатели са забранен
msgid "could not remove reference %s"
msgstr "Указателят „%s“ не може да бъде изтрит"
-#: refs/files-backend.c:1203 refs/packed-backend.c:1524
-#: refs/packed-backend.c:1534
+#: refs/files-backend.c:1203 refs/packed-backend.c:1528
+#: refs/packed-backend.c:1538
#, c-format
msgid "could not delete reference %s: %s"
msgstr "Указателят „%s“ не може да бъде изтрит: %s"
-#: refs/files-backend.c:1206 refs/packed-backend.c:1537
+#: refs/files-backend.c:1206 refs/packed-backend.c:1541
#, c-format
msgid "could not delete references: %s"
msgstr "Указателите не може да бъдат изтрити: %s"
-#: ref-filter.c:35 wt-status.c:1816
+#: ref-filter.c:35 wt-status.c:1842
msgid "gone"
msgstr "изтрит"
@@ -2910,130 +2930,140 @@ msgstr "Указателят „HEAD“ не е свързан и е отдел
msgid "(no branch)"
msgstr "(извън клон)"
-#: ref-filter.c:1488 ref-filter.c:1519
+#: ref-filter.c:1364
#, c-format
msgid "missing object %s for %s"
msgstr "обектът „%s“ липсва за „%s“"
-#: ref-filter.c:1491 ref-filter.c:1522
+#: ref-filter.c:1367
#, c-format
msgid "parse_object_buffer failed on %s for %s"
msgstr "неуспешно анализиране чрез „parse_object_buffer“ на „%s“ за „%s“"
-#: ref-filter.c:1822
+#: ref-filter.c:1819
#, c-format
msgid "malformed object at '%s'"
msgstr "обект със сгрешен формат при „%s“"
-#: ref-filter.c:1889
+#: ref-filter.c:1886
#, c-format
msgid "ignoring ref with broken name %s"
msgstr "игнориране на указателя с грешно име „%s“"
-#: ref-filter.c:1894
+#: ref-filter.c:1891
#, c-format
msgid "ignoring broken ref %s"
msgstr "игнориране на повредения указател „%s“"
-#: ref-filter.c:2156
+#: ref-filter.c:2152
#, c-format
msgid "format: %%(end) atom missing"
msgstr "грешка във форма̀та: липсва лексемата %%(end)"
-#: ref-filter.c:2250
+#: ref-filter.c:2246
#, c-format
msgid "malformed object name %s"
msgstr "неправилно име на обект „%s“"
-#: remote.c:780
+#: remote.c:795
#, c-format
msgid "Cannot fetch both %s and %s to %s"
msgstr "Невъзможно е да се доставят едновременно и „%s“, и „%s“ към „%s“"
-#: remote.c:784
+#: remote.c:799
#, c-format
msgid "%s usually tracks %s, not %s"
msgstr "„%s“ обикновено следи „%s“, а не „%s“"
-#: remote.c:788
+#: remote.c:803
#, c-format
msgid "%s tracks both %s and %s"
msgstr "„%s“ следи както „%s“, така и „%s“"
-#: remote.c:796
+#: remote.c:811
msgid "Internal error"
msgstr "Вътрешна грешка"
-#: remote.c:1711 remote.c:1813
+#: remote.c:1726 remote.c:1828
msgid "HEAD does not point to a branch"
msgstr "Указателят „HEAD“ не сочи към клон"
-#: remote.c:1720
+#: remote.c:1735
#, c-format
msgid "no such branch: '%s'"
msgstr "няма клон на име „%s“"
-#: remote.c:1723
+#: remote.c:1738
#, c-format
msgid "no upstream configured for branch '%s'"
msgstr "не е зададен клон-източник за клона „%s“"
-#: remote.c:1729
+#: remote.c:1744
#, c-format
msgid "upstream branch '%s' not stored as a remote-tracking branch"
msgstr "клонът-източник „%s“ не е съхранен като следящ клон"
-#: remote.c:1744
+#: remote.c:1759
#, c-format
msgid "push destination '%s' on remote '%s' has no local tracking branch"
msgstr ""
"липсва локален следящ клон за местоположението за изтласкване „%s“ в "
"хранилището „%s“"
-#: remote.c:1756
+#: remote.c:1771
#, c-format
msgid "branch '%s' has no remote for pushing"
msgstr "няма информация клонът „%s“ да следи някой друг"
-#: remote.c:1767
+#: remote.c:1782
#, c-format
msgid "push refspecs for '%s' do not include '%s'"
msgstr "указателят за изтласкване на „%s“ не включва „%s“"
-#: remote.c:1780
+#: remote.c:1795
msgid "push has no destination (push.default is 'nothing')"
msgstr "указателят за изтласкване не включва цел („push.default“ е „nothing“)"
-#: remote.c:1802
+#: remote.c:1817
msgid "cannot resolve 'simple' push to a single destination"
msgstr "простото (simple) изтласкване не съответства на една цел"
-#: remote.c:2106
+#: remote.c:2132
#, c-format
msgid "Your branch is based on '%s', but the upstream is gone.\n"
msgstr "Този клон следи „%s“, но следеният клон е изтрит.\n"
-#: remote.c:2110
+#: remote.c:2136
msgid " (use \"git branch --unset-upstream\" to fixup)\n"
msgstr " (за да коригирате това, използвайте „git branch --unset-upstream“)\n"
-#: remote.c:2113
+#: remote.c:2139
#, c-format
msgid "Your branch is up to date with '%s'.\n"
msgstr "Клонът е актуализиран към „%s“.\n"
-#: remote.c:2117
+#: remote.c:2143
+#, c-format
+msgid "Your branch and '%s' refer to different commits.\n"
+msgstr "Клонът ви и „%s“ сочат към различни подавания.\n"
+
+#: remote.c:2146
+#, c-format
+msgid " (use \"%s\" for details)\n"
+msgstr " (за повече информация ползвайте „%s“)\n"
+
+#: remote.c:2150
#, 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:2123
+#: remote.c:2156
msgid " (use \"git push\" to publish your local commits)\n"
msgstr " (публикувайте локалните си промени чрез „git push“)\n"
-#: remote.c:2126
+#: remote.c:2159
#, c-format
msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
msgid_plural ""
@@ -3041,11 +3071,11 @@ msgid_plural ""
msgstr[0] "Клонът ви е с %2$d подаване зад „%1$s“ и може да бъде превъртян.\n"
msgstr[1] "Клонът ви е с %2$d подавания зад „%1$s“ и може да бъде превъртян.\n"
-#: remote.c:2134
+#: remote.c:2167
msgid " (use \"git pull\" to update your local branch)\n"
msgstr " (обновете локалния си клон чрез „git pull“)\n"
-#: remote.c:2137
+#: remote.c:2170
#, c-format
msgid ""
"Your branch and '%s' have diverged,\n"
@@ -3060,28 +3090,28 @@ msgstr[1] ""
"Текущият клон се е отделил от „%s“,\n"
"двата имат съответно по %d и %d несъвпадащи подавания.\n"
-#: remote.c:2147
+#: remote.c:2180
msgid " (use \"git pull\" to merge the remote branch into yours)\n"
msgstr " (слейте отдалечения клон в локалния чрез „git pull“)\n"
-#: revision.c:2268
+#: revision.c:2277
msgid "your current branch appears to be broken"
msgstr "Текущият клон е повреден"
-#: revision.c:2271
+#: revision.c:2280
#, c-format
msgid "your current branch '%s' does not have any commits yet"
msgstr "Текущият клон „%s“ е без подавания "
-#: revision.c:2465
+#: revision.c:2477
msgid "--first-parent is incompatible with --bisect"
msgstr "опциите „--first-parent“ и „--bisect“ са несъвместими"
-#: run-command.c:645
+#: run-command.c:731
msgid "open /dev/null failed"
msgstr "неуспешно отваряне на „/dev/null“"
-#: run-command.c:1188
+#: run-command.c:1274
#, c-format
msgid ""
"The '%s' hook was ignored because it's not set as executable.\n"
@@ -3092,25 +3122,31 @@ msgstr ""
" git config advice.ignoredHook false"
#: send-pack.c:141
+msgid "unexpected flush packet while reading remote unpack status"
+msgstr ""
+"неочакван изчистващ пакет „flush“ при изчитане на състоянието от "
+"отдалеченото разпакетиране"
+
+#: send-pack.c:143
#, c-format
msgid "unable to parse remote unpack status: %s"
msgstr ""
"състоянието от отдалеченото разпакетиране не може да бъде анализирано: %s"
-#: send-pack.c:143
+#: send-pack.c:145
#, c-format
msgid "remote unpack failed: %s"
msgstr "неуспешно отдалечено разпакетиране: %s"
-#: send-pack.c:306
+#: send-pack.c:308
msgid "failed to sign the push certificate"
msgstr "сертификатът за изтласкване не може да бъде подписан"
-#: send-pack.c:419
+#: send-pack.c:421
msgid "the receiving end does not support --signed push"
msgstr "отсрещната страна не поддържа изтласкване с опцията „--signed“"
-#: send-pack.c:421
+#: send-pack.c:423
msgid ""
"not sending a push certificate since the receiving end does not support --"
"signed push"
@@ -3118,32 +3154,37 @@ msgstr ""
"отсрещната страна не поддържа изтласкване с опцията „--signed“, затова не се "
"използва сертификат"
-#: send-pack.c:433
+#: send-pack.c:435
msgid "the receiving end does not support --atomic push"
msgstr "получаващата страна не поддържа изтласкване с опцията „--atomic“"
-#: send-pack.c:438
+#: send-pack.c:440
msgid "the receiving end does not support push options"
msgstr "отсрещната страна не поддържа опции при изтласкване"
-#: sequencer.c:218
+#: sequencer.c:158
+#, c-format
+msgid "invalid commit message cleanup mode '%s'"
+msgstr "несъществуващ режим на изчистване „%s“ на съобщение при подаване"
+
+#: sequencer.c:267
msgid "revert"
msgstr "отмяна"
-#: sequencer.c:220
+#: sequencer.c:269
msgid "cherry-pick"
msgstr "отбиране"
-#: sequencer.c:222
+#: sequencer.c:271
msgid "rebase -i"
msgstr "rebase -i"
-#: sequencer.c:224
+#: sequencer.c:273
#, c-format
msgid "Unknown action: %d"
msgstr "Неизвестно действие: %d"
-#: sequencer.c:281
+#: sequencer.c:330
msgid ""
"after resolving the conflicts, mark the corrected paths\n"
"with 'git add <paths>' or 'git rm <paths>'"
@@ -3151,7 +3192,7 @@ msgstr ""
"след коригирането на конфликтите, отбележете съответните\n"
"пътища с „git add ПЪТ…“ или „git rm ПЪТ…“."
-#: sequencer.c:284
+#: sequencer.c:333
msgid ""
"after resolving the conflicts, mark the corrected paths\n"
"with 'git add <paths>' or 'git rm <paths>'\n"
@@ -3161,43 +3202,43 @@ msgstr ""
"пътища с „git add ПЪТ…“ или „git rm ПЪТ…“, след което\n"
"подайте резултата с командата „git commit'“."
-#: sequencer.c:297 sequencer.c:1718
+#: sequencer.c:346 sequencer.c:2245
#, c-format
msgid "could not lock '%s'"
msgstr "„%s“ не може да се заключи"
-#: sequencer.c:300 sequencer.c:1595 sequencer.c:1723 sequencer.c:1737
-#: sequencer.c:2729 sequencer.c:2800 wrapper.c:656
+#: sequencer.c:349 sequencer.c:2124 sequencer.c:2250 sequencer.c:2264
+#: sequencer.c:3246 sequencer.c:3310 wrapper.c:656
#, c-format
msgid "could not write to '%s'"
msgstr "в „%s“ не може да се пише"
-#: sequencer.c:304
+#: sequencer.c:353
#, c-format
msgid "could not write eol to '%s'"
msgstr "краят на ред не може да се запише в „%s“"
-#: sequencer.c:308 sequencer.c:1600 sequencer.c:1725
+#: sequencer.c:356 sequencer.c:2128 sequencer.c:2252
#, c-format
-msgid "failed to finalize '%s'."
-msgstr "„%s“ не може да се завърши."
+msgid "failed to finalize '%s'"
+msgstr "„%s“ не може да се завърши"
-#: sequencer.c:332 sequencer.c:829 sequencer.c:1621 builtin/am.c:259
-#: builtin/commit.c:754 builtin/merge.c:1046
+#: sequencer.c:379 sequencer.c:1340 sequencer.c:2148 builtin/am.c:259
+#: builtin/commit.c:722 builtin/merge.c:1047
#, c-format
msgid "could not read '%s'"
msgstr "файлът „%s“ не може да бъде прочетен"
-#: sequencer.c:358
+#: sequencer.c:405
#, c-format
msgid "your local changes would be overwritten by %s."
msgstr "локалните ви промени ще бъдат презаписани при %s."
-#: sequencer.c:362
+#: sequencer.c:409
msgid "commit your changes or stash them to proceed."
msgstr "подайте или скатайте промените, за да продължите"
-#: sequencer.c:391
+#: sequencer.c:438
#, c-format
msgid "%s: fast-forward"
msgstr "%s: превъртане"
@@ -3205,20 +3246,20 @@ msgstr "%s: превъртане"
#. TRANSLATORS: %s will be "revert", "cherry-pick" or
#. "rebase -i".
#.
-#: sequencer.c:477
+#: sequencer.c:526
#, c-format
msgid "%s: Unable to write new index file"
msgstr "%s: новият индекс не може да бъде запазен"
-#: sequencer.c:496
+#: sequencer.c:542
msgid "could not resolve HEAD commit"
msgstr "подаването, сочено от указателя „HEAD“, не може да бъде открито"
-#: sequencer.c:516
+#: sequencer.c:562
msgid "unable to update cache tree"
msgstr "дървото на кеша не може да бъде обновено"
-#: sequencer.c:600
+#: sequencer.c:658
#, c-format
msgid ""
"you have staged changes in your working tree\n"
@@ -3247,17 +3288,131 @@ msgstr ""
"\n"
" git rebase --continue\n"
-#: sequencer.c:702
+#: sequencer.c:915
+msgid "'prepare-commit-msg' hook failed"
+msgstr ""
+"неуспешно изпълнение на куката при промяна на съобщението при подаване "
+"(prepare-commit-msg)"
+
+#: sequencer.c:922
+msgid ""
+"Your name and email address were configured automatically based\n"
+"on your username and hostname. Please check that they are accurate.\n"
+"You can suppress this message by setting them explicitly. Run the\n"
+"following command and follow the instructions in your editor to edit\n"
+"your configuration file:\n"
+"\n"
+" git config --global --edit\n"
+"\n"
+"After doing this, you may fix the identity used for this commit with:\n"
+"\n"
+" git commit --amend --reset-author\n"
+msgstr ""
+"Името и адресът за е-поща са настроени автоматично на базата на името на\n"
+"потребителя и името на машината. Проверете дали са верни. Можете да "
+"спрете\n"
+"това съобщение като изрично зададете стойностите. Изпълнете следната "
+"команда\n"
+"и следвайте инструкциите в текстовия ви редактор, за да редактирате\n"
+"конфигурационния файл:\n"
+"\n"
+" git config --global --edit\n"
+"\n"
+"След като направите това, можете да коригирате информацията за автора на\n"
+"текущото подаване чрез:\n"
+"\n"
+" git commit --amend --reset-author\n"
+
+#: sequencer.c:935
+msgid ""
+"Your name and email address were configured automatically based\n"
+"on your username and hostname. Please check that they are accurate.\n"
+"You can suppress this message by setting them explicitly:\n"
+"\n"
+" git config --global user.name \"Your Name\"\n"
+" git config --global user.email you@example.com\n"
+"\n"
+"After doing this, you may fix the identity used for this commit with:\n"
+"\n"
+" git commit --amend --reset-author\n"
+msgstr ""
+"Името и адресът за е-поща са настроени автоматично на базата на името на\n"
+"потребителя и името на машината. Проверете дали са верни. Можете да "
+"спрете\n"
+"това съобщение като изрично зададете стойностите:\n"
+"\n"
+" git config --global user.name \"Вашето Име\"\n"
+" git config --global user.email пенчо@example.com\n"
+"\n"
+"След като направите това, можете да коригирате информацията за автора на\n"
+"текущото подаване чрез:\n"
+"\n"
+" git commit --amend --reset-author\n"
+
+#: sequencer.c:975
+msgid "couldn't look up newly created commit"
+msgstr "току що създаденото подаване не може да бъде открито"
+
+#: sequencer.c:977
+msgid "could not parse newly created commit"
+msgstr "току що създаденото подаване не може да бъде анализирано"
+
+#: sequencer.c:1023
+msgid "unable to resolve HEAD after creating commit"
+msgstr ""
+"състоянието сочено от указателя „HEAD“ не може да бъде открито след "
+"подаването"
+
+#: sequencer.c:1025
+msgid "detached HEAD"
+msgstr "несвързан връх „HEAD“"
+
+#: sequencer.c:1029
+msgid " (root-commit)"
+msgstr " (начално подаване)"
+
+#: sequencer.c:1050
+msgid "could not parse HEAD"
+msgstr "указателят „HEAD“ не може да бъде анализиран"
+
+#: sequencer.c:1052
+#, c-format
+msgid "HEAD %s is not a commit!"
+msgstr "указателят „HEAD“ „%s“ сочи към нещо, което не е подаване!"
+
+#: sequencer.c:1056 builtin/commit.c:1491
+msgid "could not parse HEAD commit"
+msgstr "върховото подаване „HEAD“ не може да бъде прочетено"
+
+#: sequencer.c:1107 sequencer.c:1673
+msgid "unable to parse commit author"
+msgstr "авторът на подаването не може да бъде анализиран"
+
+#: sequencer.c:1117 builtin/am.c:1630 builtin/merge.c:643
+msgid "git write-tree failed to write a tree"
+msgstr "Командата „git write-tree“ не успя да запише обект-дърво"
+
+#: sequencer.c:1134 sequencer.c:1186
+#, c-format
+msgid "unable to read commit message from '%s'"
+msgstr "съобщението за подаване не може да бъде прочетено от „%s“"
+
+#: sequencer.c:1154 builtin/am.c:1650 builtin/commit.c:1594 builtin/merge.c:826
+#: builtin/merge.c:851
+msgid "failed to write commit object"
+msgstr "обектът за подаването не може да бъде записан"
+
+#: sequencer.c:1213
#, c-format
msgid "could not parse commit %s"
msgstr "подаването „%s“ не може да бъде анализирано"
-#: sequencer.c:707
+#: sequencer.c:1218
#, c-format
msgid "could not parse parent commit %s"
msgstr "родителското подаване „%s“ не може да бъде анализирано"
-#: sequencer.c:836
+#: sequencer.c:1347
#, c-format
msgid ""
"unexpected 1st line of squash message:\n"
@@ -3268,7 +3423,7 @@ msgstr ""
"\n"
" %.*s"
-#: sequencer.c:842
+#: sequencer.c:1353
#, c-format
msgid ""
"invalid 1st line of squash message:\n"
@@ -3279,250 +3434,254 @@ msgstr ""
"\n"
" %.*s"
-#: sequencer.c:848 sequencer.c:873
+#: sequencer.c:1359 sequencer.c:1384
#, c-format
msgid "This is a combination of %d commits."
msgstr "Това е обединение от %d подавания"
-#: sequencer.c:857 sequencer.c:2748
+#: sequencer.c:1368 sequencer.c:3265
msgid "need a HEAD to fixup"
msgstr "За смачкване ви трябва указател „HEAD“"
-#: sequencer.c:859
+#: sequencer.c:1370
msgid "could not read HEAD"
msgstr "указателят „HEAD“ не може да се прочете"
-#: sequencer.c:861
+#: sequencer.c:1372
msgid "could not read HEAD's commit message"
msgstr ""
"съобщението за подаване към указателя „HEAD“ не може да бъде прочетено: %s"
-#: sequencer.c:867
+#: sequencer.c:1378
#, c-format
msgid "cannot write '%s'"
msgstr "„%s“ не може да се запази"
-#: sequencer.c:876 git-rebase--interactive.sh:446
+#: sequencer.c:1387 git-rebase--interactive.sh:452
msgid "This is the 1st commit message:"
msgstr "Това е 1-то съобщение при подаване:"
-#: sequencer.c:884
+#: sequencer.c:1395
#, c-format
msgid "could not read commit message of %s"
msgstr "съобщението за подаване към „%s“ не може да бъде прочетено"
-#: sequencer.c:891
+#: sequencer.c:1402
#, c-format
msgid "This is the commit message #%d:"
msgstr "Това е съобщение при подаване №%d:"
-#: sequencer.c:896
+#: sequencer.c:1407
#, c-format
msgid "The commit message #%d will be skipped:"
msgstr "Съобщение при подаване №%d ще бъде прескочено:"
-#: sequencer.c:901
+#: sequencer.c:1412
#, c-format
msgid "unknown command: %d"
msgstr "непозната команда: %d"
-#: sequencer.c:967
+#: sequencer.c:1479
msgid "your index file is unmerged."
msgstr "индексът не е слят."
-#: sequencer.c:986
+#: sequencer.c:1498
#, c-format
msgid "commit %s is a merge but no -m option was given."
msgstr "подаването „%s“ е сливане, но не е дадена опцията „-m“"
-#: sequencer.c:994
+#: sequencer.c:1506
#, c-format
msgid "commit %s does not have parent %d"
msgstr "подаването „%s“ няма родител %d"
-#: sequencer.c:998
+#: sequencer.c:1510
#, c-format
msgid "mainline was specified but commit %s is not a merge."
msgstr "указано е базово подаване, но подаването „%s“ не е сливане."
-#: sequencer.c:1004
+#: sequencer.c:1516
#, c-format
msgid "cannot get commit message for %s"
msgstr "неуспешно извличане на съобщението за подаване на „%s“"
#. TRANSLATORS: The first %s will be a "todo" command like
#. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1023
+#: sequencer.c:1535
#, c-format
msgid "%s: cannot parse parent commit %s"
msgstr "%s: неразпозната стойност за родителското подаване „%s“"
-#: sequencer.c:1086 sequencer.c:1867
+#: sequencer.c:1600 sequencer.c:2397
#, c-format
msgid "could not rename '%s' to '%s'"
msgstr "„%s“ не може да се преименува на „%s“"
-#: sequencer.c:1137
+#: sequencer.c:1654
#, c-format
msgid "could not revert %s... %s"
msgstr "подаването „%s“… не може да бъде отменено: „%s“"
-#: sequencer.c:1138
+#: sequencer.c:1655
#, c-format
msgid "could not apply %s... %s"
msgstr "подаването „%s“… не може да бъде приложено: „%s“"
-#: sequencer.c:1180
+#: sequencer.c:1702
msgid "empty commit set passed"
msgstr "зададено е празно множество от подавания"
-#: sequencer.c:1190
+#: sequencer.c:1712
#, c-format
msgid "git %s: failed to read the index"
msgstr "git %s: неуспешно изчитане на индекса"
-#: sequencer.c:1196
+#: sequencer.c:1718
#, c-format
msgid "git %s: failed to refresh the index"
msgstr "git %s: неуспешно обновяване на индекса"
-#: sequencer.c:1270
+#: sequencer.c:1792
#, c-format
msgid "%s does not accept arguments: '%s'"
msgstr "„%s“ не приема аргументи: „%s“"
-#: sequencer.c:1279
+#: sequencer.c:1801
#, c-format
msgid "missing arguments for %s"
msgstr "„%s“ изисква аргументи"
-#: sequencer.c:1322
+#: sequencer.c:1844
#, c-format
msgid "invalid line %d: %.*s"
msgstr "неправилен ред %d: %.*s"
-#: sequencer.c:1330
+#: sequencer.c:1852
#, c-format
msgid "cannot '%s' without a previous commit"
msgstr "Без предишно подаване не може да се изпълни „%s“"
-#: sequencer.c:1363 sequencer.c:2525 sequencer.c:2560 sequencer.c:2642
-#: sequencer.c:2668 sequencer.c:2758 sequencer.c:2859
+#: sequencer.c:1883 sequencer.c:3056 sequencer.c:3091
#, c-format
msgid "could not read '%s'."
msgstr "от „%s“ не може да се чете."
-#: sequencer.c:1375
+#: sequencer.c:1906
msgid "please fix this using 'git rebase --edit-todo'."
msgstr "коригирайте това чрез „git rebase --edit-todo“."
-#: sequencer.c:1377
+#: sequencer.c:1908
#, c-format
msgid "unusable instruction sheet: '%s'"
msgstr "неизползваем файл с описание на предстоящите действия: „%s“"
-#: sequencer.c:1382
+#: sequencer.c:1913
msgid "no commits parsed."
msgstr "никое от подаванията не може да се разпознае."
-#: sequencer.c:1393
+#: sequencer.c:1924
msgid "cannot cherry-pick during a revert."
msgstr ""
"по време на отмяна на подаване не може да се извърши отбиране на подаване."
-#: sequencer.c:1395
+#: sequencer.c:1926
msgid "cannot revert during a cherry-pick."
msgstr "по време на отбиране не може да се извърши отмяна на подаване."
-#: sequencer.c:1462
+#: sequencer.c:1993
#, c-format
msgid "invalid key: %s"
msgstr "неправилен ключ: „%s“"
-#: sequencer.c:1465
+#: sequencer.c:1996
#, c-format
msgid "invalid value for %s: %s"
msgstr "неправилна стойност за „%s“: „%s“"
-#: sequencer.c:1531
+#: sequencer.c:2062
#, c-format
msgid "malformed options sheet: '%s'"
msgstr "неправилен файл с опции: „%s“"
-#: sequencer.c:1569
+#: sequencer.c:2100
msgid "a cherry-pick or revert is already in progress"
msgstr ""
"в момента вече се извършва отбиране на подавания или пребазиране на клона"
-#: sequencer.c:1570
+#: sequencer.c:2101
msgid "try \"git cherry-pick (--continue | --quit | --abort)\""
msgstr "използвайте „git cherry-pick (--continue | --quit | --abort)“"
-#: sequencer.c:1573
+#: sequencer.c:2104
#, c-format
msgid "could not create sequencer directory '%s'"
msgstr "директорията за секвенсора „%s“ не може да бъде създадена"
-#: sequencer.c:1588
+#: sequencer.c:2118
msgid "could not lock HEAD"
msgstr "указателят „HEAD“ не може да се заключи"
-#: sequencer.c:1646 sequencer.c:2230
+#: sequencer.c:2173 sequencer.c:2761
msgid "no cherry-pick or revert in progress"
msgstr ""
"в момента не се извършва отбиране на подавания или пребазиране на клона"
-#: sequencer.c:1648
+#: sequencer.c:2175
msgid "cannot resolve HEAD"
msgstr "Подаването сочено от указателя „HEAD“ не може да бъде открито"
-#: sequencer.c:1650 sequencer.c:1685
+#: sequencer.c:2177 sequencer.c:2212
msgid "cannot abort from a branch yet to be born"
msgstr ""
"действието не може да бъде преустановено, когато сте на клон, който тепърва "
"предстои да бъде създаден"
-#: sequencer.c:1671 builtin/grep.c:713
+#: sequencer.c:2198 builtin/grep.c:720
#, c-format
msgid "cannot open '%s'"
msgstr "„%s“ не може да бъде отворен"
-#: sequencer.c:1673
+#: sequencer.c:2200
#, c-format
msgid "cannot read '%s': %s"
msgstr "„%s“ не може да бъде прочетен: %s"
-#: sequencer.c:1674
+#: sequencer.c:2201
msgid "unexpected end of file"
msgstr "неочакван край на файл"
-#: sequencer.c:1680
+#: sequencer.c:2207
#, c-format
msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
msgstr ""
"запазеният преди започването на отбирането файл за указателя „HEAD“ — „%s“ е "
"повреден"
-#: sequencer.c:1691
+#: sequencer.c:2218
msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
msgstr ""
"Изглежда указателят „HEAD“ е променен. Проверете към какво сочи.\n"
"Не се правят промени."
-#: sequencer.c:1832 sequencer.c:2128
+#: sequencer.c:2324 sequencer.c:2679
+#, c-format
+msgid "could not update %s"
+msgstr "„%s“ не може да се обнови"
+
+#: sequencer.c:2362 sequencer.c:2659
msgid "cannot read HEAD"
msgstr "указателят „HEAD“ не може да бъде прочетен"
-#: sequencer.c:1872 builtin/difftool.c:639
+#: sequencer.c:2402 builtin/difftool.c:639
#, c-format
msgid "could not copy '%s' to '%s'"
msgstr "„%s“ не може да се копира като „%s“"
-#: sequencer.c:1891
+#: sequencer.c:2421
msgid "could not read index"
msgstr "индексът не може да бъде прочетен"
-#: sequencer.c:1896
+#: sequencer.c:2426
#, c-format
msgid ""
"execution failed: %s\n"
@@ -3537,11 +3696,11 @@ msgstr ""
" git rebase --continue\n"
"\n"
-#: sequencer.c:1902
+#: sequencer.c:2432
msgid "and made changes to the index and/or the working tree\n"
msgstr "и промени индекса и/или работното дърво\n"
-#: sequencer.c:1908
+#: sequencer.c:2438
#, c-format
msgid ""
"execution succeeded: %s\n"
@@ -3558,17 +3717,17 @@ msgstr ""
" git rebase --continue\n"
"\n"
-#: sequencer.c:1967
+#: sequencer.c:2497
#, c-format
msgid "Applied autostash.\n"
msgstr "Автоматично скатаното е приложено.\n"
-#: sequencer.c:1979
+#: sequencer.c:2509
#, c-format
msgid "cannot store %s"
msgstr "„%s“ не може да бъде запазен"
-#: sequencer.c:1982 git-rebase.sh:175
+#: sequencer.c:2512 git-rebase.sh:178
#, c-format
msgid ""
"Applying autostash resulted in conflicts.\n"
@@ -3579,57 +3738,52 @@ msgstr ""
"надеждно скатани. Можете да пробвате да ги приложите чрез „git stash pop“\n"
"или да ги изхвърлите чрез „git stash drop“, когато поискате.\n"
-#: sequencer.c:2064
+#: sequencer.c:2595
#, c-format
msgid "Stopped at %s... %.*s\n"
msgstr "Спиране при „%s“… %.*s\n"
-#: sequencer.c:2106
+#: sequencer.c:2637
#, c-format
msgid "unknown command %d"
msgstr "непозната команда %d"
-#: sequencer.c:2136
+#: sequencer.c:2667
msgid "could not read orig-head"
msgstr "указателят за „orig-head“ не може да се прочете"
-#: sequencer.c:2141 sequencer.c:2745
+#: sequencer.c:2672 sequencer.c:3262
msgid "could not read 'onto'"
msgstr "указателят за „onto“ не може да се прочете"
-#: sequencer.c:2148
-#, c-format
-msgid "could not update %s"
-msgstr "„%s“ не може да се обнови"
-
-#: sequencer.c:2155
+#: sequencer.c:2686
#, c-format
msgid "could not update HEAD to %s"
msgstr "„HEAD“ не може да бъде обновен до „%s“"
-#: sequencer.c:2239
+#: sequencer.c:2770
msgid "cannot rebase: You have unstaged changes."
msgstr "не може да пребазирате, защото има промени, които не са в индекса."
-#: sequencer.c:2244
+#: sequencer.c:2775
msgid "could not remove CHERRY_PICK_HEAD"
msgstr "указателят „CHERRY_PICK_HEAD“ не може да бъде изтрит"
-#: sequencer.c:2253
+#: sequencer.c:2784
msgid "cannot amend non-existing commit"
msgstr "несъществуващо подаване не може да се поправи"
-#: sequencer.c:2255
+#: sequencer.c:2786
#, c-format
msgid "invalid file: '%s'"
msgstr "неправилен файл: „%s“"
-#: sequencer.c:2257
+#: sequencer.c:2788
#, c-format
msgid "invalid contents: '%s'"
msgstr "неправилно съдържание: „%s“"
-#: sequencer.c:2260
+#: sequencer.c:2791
msgid ""
"\n"
"You have uncommitted changes in your working tree. Please, commit them\n"
@@ -3639,38 +3793,38 @@ msgstr ""
"В работното дърво има неподадени промени. Първо ги подайте, а след това\n"
"отново изпълнете „git rebase --continue“."
-#: sequencer.c:2270
+#: sequencer.c:2801
msgid "could not commit staged changes."
msgstr "промените в индекса не могат да бъдат подадени."
-#: sequencer.c:2350
+#: sequencer.c:2881
#, c-format
msgid "%s: can't cherry-pick a %s"
msgstr "%s: не може да се отбере „%s“"
-#: sequencer.c:2354
+#: sequencer.c:2885
#, c-format
msgid "%s: bad revision"
msgstr "%s: неправилна версия"
-#: sequencer.c:2387
+#: sequencer.c:2918
msgid "can't revert as initial commit"
msgstr "първоначалното подаване не може да бъде отменено"
-#: sequencer.c:2492
+#: sequencer.c:3023
msgid "make_script: unhandled options"
msgstr "make_script: неподдържани опции"
-#: sequencer.c:2495
+#: sequencer.c:3026
msgid "make_script: error preparing revisions"
msgstr "make_script: грешка при подготовката на версии"
-#: sequencer.c:2529 sequencer.c:2564
+#: sequencer.c:3060 sequencer.c:3095
#, c-format
msgid "unusable todo list: '%s'"
msgstr "неуспешно изтриване на списъка за изпълнение: „%s“"
-#: sequencer.c:2615
+#: sequencer.c:3146
#, c-format
msgid ""
"unrecognized setting %s for option rebase.missingCommitsCheck. Ignoring."
@@ -3678,7 +3832,7 @@ msgstr ""
"Непозната стойност „%s“ за настройката „rebase.missingCommitsCheck“. "
"Настройката се прескача."
-#: sequencer.c:2695
+#: sequencer.c:3212
#, c-format
msgid ""
"Warning: some commits may have been dropped accidentally.\n"
@@ -3687,7 +3841,7 @@ msgstr ""
"Предупреждение: някои подавания може да са пропуснати.\n"
"Пропуснати подавания (новите са най-отгоре):\n"
-#: sequencer.c:2702
+#: sequencer.c:3219
#, c-format
msgid ""
"To avoid this message, use \"drop\" to explicitly remove a commit.\n"
@@ -3704,7 +3858,7 @@ msgstr ""
"предупреждение)\n"
"или „error“ (считане за грешка).\n"
-#: sequencer.c:2714
+#: sequencer.c:3231
#, c-format
msgid ""
"You can fix this with 'git rebase --edit-todo' and then run 'git rebase --"
@@ -3715,21 +3869,26 @@ msgstr ""
"continue“ след това.\n"
"Може и да преустановите пребазирането с командата „git rebase --abort“.\n"
-#: sequencer.c:2727 sequencer.c:2794 wrapper.c:225 wrapper.c:395
+#: sequencer.c:3244 sequencer.c:3304 wrapper.c:225 wrapper.c:395
#: builtin/am.c:779
#, c-format
msgid "could not open '%s' for writing"
msgstr "„%s“ не може да бъде отворен за запис"
-#: sequencer.c:2775
+#: sequencer.c:3285
#, c-format
msgid "could not parse commit '%s'"
msgstr "подаването „%s“ не може да бъде анализирано"
-#: sequencer.c:2897
+#: sequencer.c:3401
msgid "the script was already rearranged."
msgstr "скриптът вече е преподреден."
+#: setup.c:122
+#, c-format
+msgid "'%s' is outside repository"
+msgstr "„%s“ е извън хранилището"
+
#: setup.c:171
#, c-format
msgid ""
@@ -3754,6 +3913,11 @@ msgstr ""
"\n"
" git КОМАНДА [ВЕРСИЯ…] -- [ФАЙЛ…]"
+#: setup.c:233
+#, c-format
+msgid "option '%s' must come before non-option arguments"
+msgstr "опцията „%s“ трябва да е преди първия аргумент, който не е опция"
+
#: setup.c:252
#, c-format
msgid ""
@@ -3761,82 +3925,153 @@ msgid ""
"Use '--' to separate paths from revisions, like this:\n"
"'git <command> [<revision>...] -- [<file>...]'"
msgstr ""
-"нееднозначен аргумент „%s: както версия, така и път.\n"
+"нееднозначен аргумент „%s“: както версия, така и път.\n"
"Разделяйте пътищата от версиите с „--“, ето така:\n"
"\n"
" git КОМАНДА [ВЕРСИЯ…] -- [ФАЙЛ…]"
-#: setup.c:501
+#: setup.c:388
+msgid "unable to set up work tree using invalid config"
+msgstr ""
+"не може да се зададе текуща работна директория при неправилни настройки"
+
+#: setup.c:395
+msgid "this operation must be run in a work tree"
+msgstr "тази команда трябва да се изпълни в работно дърво"
+
+#: setup.c:506
#, c-format
msgid "Expected git repo version <= %d, found %d"
msgstr "Очаква се версия на хранилището на git <= %d, а не %d"
-#: setup.c:509
+#: setup.c:514
msgid "unknown repository extensions found:"
msgstr "открити са непознати разширения в хранилището:"
-#: setup.c:811
+#: setup.c:533
+#, c-format
+msgid "error opening '%s'"
+msgstr "„%s“ не може да се отвори"
+
+#: setup.c:535
+#, c-format
+msgid "too large to be a .git file: '%s'"
+msgstr "прекалено голям файл „.git“: „%s“"
+
+#: setup.c:537
+#, c-format
+msgid "error reading %s"
+msgstr "грешка при прочитане на „%s“"
+
+#: setup.c:539
+#, c-format
+msgid "invalid gitfile format: %s"
+msgstr "неправилен формат на gitfile: %s"
+
+#: setup.c:541
+#, c-format
+msgid "no path in gitfile: %s"
+msgstr "липсва път в gitfile: „%s“"
+
+#: setup.c:543
+#, c-format
+msgid "not a git repository: %s"
+msgstr "не е хранилище на Git: %s"
+
+#: setup.c:642
+#, c-format
+msgid "'$%s' too big"
+msgstr "„%s“ е прекалено голям"
+
+#: setup.c:656
+#, c-format
+msgid "not a git repository: '%s'"
+msgstr "не е хранилище на git: „%s“"
+
+#: setup.c:685 setup.c:687 setup.c:718
#, c-format
-msgid "Not a git repository (or any of the parent directories): %s"
+msgid "cannot chdir to '%s'"
+msgstr "не може да се влезе в директорията „%s“"
+
+#: setup.c:690 setup.c:746 setup.c:756 setup.c:795 setup.c:803 setup.c:818
+msgid "cannot come back to cwd"
+msgstr "процесът не може да се върне към предишната работна директория"
+
+#: setup.c:816
+#, c-format
+msgid "not a git repository (or any of the parent directories): %s"
msgstr ""
-"Нито тази, нито която и да е от по-горните директории, не е хранилище на "
+"нито тази, нито която и да е от по-горните директории, не е хранилище на "
"git: %s"
-#: setup.c:813 builtin/index-pack.c:1653
-msgid "Cannot come back to cwd"
-msgstr "Процесът не може да се върне към предишната работна директория"
+#: setup.c:827
+#, c-format
+msgid "failed to stat '%*s%s%s'"
+msgstr "не може да бъде получена информация чрез „stat“ за „%*s%s%s“"
-#: setup.c:1052
+#: setup.c:1057
msgid "Unable to read current working directory"
msgstr "Текущата работна директория не може да бъде прочетена"
-#: setup.c:1064 setup.c:1070
+#: setup.c:1069 setup.c:1075
#, c-format
-msgid "Cannot change to '%s'"
-msgstr "Не може да се влезе в директорията „%s“"
+msgid "cannot change to '%s'"
+msgstr "не може да се влезе в директорията „%s“"
-#: setup.c:1083
+#: setup.c:1088
#, c-format
msgid ""
-"Not a git repository (or any parent up to mount point %s)\n"
+"not a git repository (or any parent up to mount point %s)\n"
"Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."
msgstr ""
-"Нито тази, нито която и да е от по-горните директории (до точката на "
+"нито тази, нито която и да е от по-горните директории (до точката на "
"монтиране „%s“), не е хранилище на git.\n"
"Git работи в рамките на една файлова система, защото променливата на средата "
"„GIT_DISCOVERY_ACROSS_FILESYSTEM“ не е зададена."
-#: setup.c:1167
+#: setup.c:1172
#, c-format
msgid ""
-"Problem with core.sharedRepository filemode value (0%.3o).\n"
+"problem with core.sharedRepository filemode value (0%.3o).\n"
"The owner of files must always have read and write permissions."
msgstr ""
-"Зададеният в „core.sharedRepository“ режим за достъп до файлове е неправилен "
+"зададеният в „core.sharedRepository“ режим за достъп до файлове е неправилен "
"(0%.3o).\n"
"Собственикът на файла трябва да има права за писане и четене."
-#: sha1_file.c:598
+#: setup.c:1215
+msgid "open /dev/null or dup failed"
+msgstr "неуспешно изпълнение на „open“ или „dup“ върху „/dev/null“"
+
+#: setup.c:1230
+msgid "fork failed"
+msgstr "неуспешно изпълнение на „fork“"
+
+#: setup.c:1235
+msgid "setsid failed"
+msgstr "неуспешно изпълнение на „setsid“"
+
+#: sha1_file.c:592
#, c-format
msgid "path '%s' does not exist"
msgstr "пътят „%s“ не съществува."
-#: sha1_file.c:624
+#: sha1_file.c:618
#, c-format
msgid "reference repository '%s' as a linked checkout is not supported yet."
msgstr "все още не се поддържа еталонно хранилище „%s“ като свързано."
-#: sha1_file.c:630
+#: sha1_file.c:624
#, c-format
msgid "reference repository '%s' is not a local repository."
msgstr "еталонното хранилище „%s“ не е локално"
-#: sha1_file.c:636
+#: sha1_file.c:630
#, c-format
msgid "reference repository '%s' is shallow"
msgstr "еталонното хранилище „%s“ е плитко"
-#: sha1_file.c:644
+#: sha1_file.c:638
#, c-format
msgid "reference repository '%s' is grafted"
msgstr "еталонното хранилище „%s“ е с присаждане"
@@ -3914,7 +4149,7 @@ msgstr "Пътят „%s“ е в подмодула „%.*s“"
msgid "submodule entry '%s' (%s) is a %s, not a commit"
msgstr "записът за подмодула „%s“ (%s) е %s, а не подаване!"
-#: submodule.c:1065 builtin/branch.c:648 builtin/submodule--helper.c:1387
+#: submodule.c:1065 builtin/branch.c:648 builtin/submodule--helper.c:1724
msgid "Failed to resolve HEAD as a valid ref."
msgstr "Не може да се открие към какво сочи указателят „HEAD“"
@@ -3938,7 +4173,7 @@ msgstr "командата „git status“ не може да се изпълн
msgid "submodule '%s' has dirty index"
msgstr "индексът на подмодула „%s“ не е чист"
-#: submodule.c:1876
+#: submodule.c:1878
#, c-format
msgid ""
"relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -3946,18 +4181,18 @@ msgstr ""
"не се поддържа „relocate_gitdir“ за подмодула „%s“, който има повече от едно "
"работно дърво"
-#: submodule.c:1888 submodule.c:1944
+#: submodule.c:1890 submodule.c:1946
#, c-format
msgid "could not lookup name for submodule '%s'"
msgstr "името на подмодула „%s“ не може да бъде намерено"
-#: submodule.c:1892 builtin/submodule--helper.c:909
-#: builtin/submodule--helper.c:919
+#: submodule.c:1894 builtin/submodule--helper.c:1246
+#: builtin/submodule--helper.c:1256
#, c-format
msgid "could not create directory '%s'"
msgstr "Директорията „%s“ не може да бъде създадена"
-#: submodule.c:1895
+#: submodule.c:1897
#, c-format
msgid ""
"Migrating git directory of '%s%s' from\n"
@@ -3968,20 +4203,20 @@ msgstr ""
"„%s“ към\n"
"„%s“\n"
-#: submodule.c:1979
+#: submodule.c:1981
#, c-format
msgid "could not recurse into submodule '%s'"
msgstr "неуспешна обработка на поддиректориите в подмодула „%s“"
-#: submodule.c:2023
+#: submodule.c:2025
msgid "could not start ls-files in .."
msgstr "„ls-stat“ не може да се стартира в „..“"
-#: submodule.c:2043
+#: submodule.c:2045
msgid "BUG: returned path string doesn't match cwd?"
msgstr "ГРЕШКА: полученият низ за пътя не съвпада с върнатото от „cwd“"
-#: submodule.c:2062
+#: submodule.c:2064
#, c-format
msgid "ls-tree returned unexpected return code %d"
msgstr "„ls-tree“ завърши с неочакван изходен код: %d"
@@ -4059,7 +4294,7 @@ msgstr "Клонът „%s“ ще следи „%s“ от „%s“\n"
msgid "transport: invalid depth option '%s'"
msgstr "transport: неправилна опция за дълбочина: %s"
-#: transport.c:904
+#: transport.c:916
#, c-format
msgid ""
"The following submodule paths contain changes that can\n"
@@ -4068,7 +4303,7 @@ msgstr ""
"Следните пътища за подмодули съдържат промени,\n"
"които липсват от всички отдалечени хранилища:\n"
-#: transport.c:908
+#: transport.c:920
#, c-format
msgid ""
"\n"
@@ -4093,11 +4328,11 @@ msgstr ""
" git push\n"
"\n"
-#: transport.c:916
+#: transport.c:928
msgid "Aborting."
msgstr "Преустановяване на действието."
-#: transport-helper.c:1074
+#: transport-helper.c:1079
#, c-format
msgid "Could not read ref %s"
msgstr "Указателят „%s“ не може да се прочете."
@@ -4118,7 +4353,7 @@ msgstr "празно име на файл в запис в дърво"
msgid "too-short tree file"
msgstr "прекалено кратък файл-дърво"
-#: unpack-trees.c:107
+#: unpack-trees.c:108
#, c-format
msgid ""
"Your local changes to the following files would be overwritten by checkout:\n"
@@ -4127,7 +4362,7 @@ msgstr ""
"Изтеглянето ще презапише локалните промени на тези файлове:\n"
"%%sПодайте или скатайте промените, за да преминете към нов клон."
-#: unpack-trees.c:109
+#: unpack-trees.c:110
#, c-format
msgid ""
"Your local changes to the following files would be overwritten by checkout:\n"
@@ -4136,7 +4371,7 @@ msgstr ""
"Изтеглянето ще презапише локалните промени на тези файлове:\n"
"%%s"
-#: unpack-trees.c:112
+#: unpack-trees.c:113
#, c-format
msgid ""
"Your local changes to the following files would be overwritten by merge:\n"
@@ -4145,7 +4380,7 @@ msgstr ""
"Сливането ще презапише локалните промени на тези файлове:\n"
"%%sПодайте или скатайте промените, за да слеете."
-#: unpack-trees.c:114
+#: unpack-trees.c:115
#, c-format
msgid ""
"Your local changes to the following files would be overwritten by merge:\n"
@@ -4154,7 +4389,7 @@ msgstr ""
"Сливането ще презапише локалните промени на тези файлове:\n"
"%%s"
-#: unpack-trees.c:117
+#: unpack-trees.c:118
#, c-format
msgid ""
"Your local changes to the following files would be overwritten by %s:\n"
@@ -4163,7 +4398,7 @@ msgstr ""
"„%s“ ще презапише локалните промени на тези файлове:\n"
"%%sПодайте или скатайте промените, за да извършите „%s“."
-#: unpack-trees.c:119
+#: unpack-trees.c:120
#, c-format
msgid ""
"Your local changes to the following files would be overwritten by %s:\n"
@@ -4172,7 +4407,7 @@ msgstr ""
"„%s“ ще презапише локалните промени на тези файлове:\n"
"%%s"
-#: unpack-trees.c:124
+#: unpack-trees.c:125
#, c-format
msgid ""
"Updating the following directories would lose untracked files in them:\n"
@@ -4181,7 +4416,7 @@ msgstr ""
"Обновяването на следните директории ще изтрие неследените файлове в тях:\n"
"%s"
-#: unpack-trees.c:128
+#: unpack-trees.c:129
#, c-format
msgid ""
"The following untracked working tree files would be removed by checkout:\n"
@@ -4190,7 +4425,7 @@ msgstr ""
"Изтеглянето ще изтрие тези неследени файлове в работното дърво:\n"
"%%sПреместете ги или ги изтрийте, за да преминете на друг клон."
-#: unpack-trees.c:130
+#: unpack-trees.c:131
#, c-format
msgid ""
"The following untracked working tree files would be removed by checkout:\n"
@@ -4199,7 +4434,7 @@ msgstr ""
"Изтеглянето ще изтрие тези неследени файлове в работното дърво:\n"
"%%s"
-#: unpack-trees.c:133
+#: unpack-trees.c:134
#, c-format
msgid ""
"The following untracked working tree files would be removed by merge:\n"
@@ -4208,7 +4443,7 @@ msgstr ""
"Сливането ще изтрие тези неследени файлове в работното дърво:\n"
"%%sПреместете ги или ги изтрийте, за да слеете."
-#: unpack-trees.c:135
+#: unpack-trees.c:136
#, c-format
msgid ""
"The following untracked working tree files would be removed by merge:\n"
@@ -4217,7 +4452,7 @@ msgstr ""
"Сливането ще изтрие тези неследени файлове в работното дърво:\n"
"%%s"
-#: unpack-trees.c:138
+#: unpack-trees.c:139
#, c-format
msgid ""
"The following untracked working tree files would be removed by %s:\n"
@@ -4226,7 +4461,7 @@ msgstr ""
"„%s“ ще изтрие тези неследени файлове в работното дърво:\n"
"%%sПреместете ги или ги изтрийте, за да извършите „%s“."
-#: unpack-trees.c:140
+#: unpack-trees.c:141
#, c-format
msgid ""
"The following untracked working tree files would be removed by %s:\n"
@@ -4235,7 +4470,7 @@ msgstr ""
"„%s“ ще изтрие тези неследени файлове в работното дърво:\n"
"%%s"
-#: unpack-trees.c:145
+#: unpack-trees.c:146
#, c-format
msgid ""
"The following untracked working tree files would be overwritten by "
@@ -4245,7 +4480,7 @@ msgstr ""
"Изтеглянето ще презапише тези неследени файлове в работното дърво:\n"
"%%sПреместете ги или ги изтрийте, за да смените клон."
-#: unpack-trees.c:147
+#: unpack-trees.c:148
#, c-format
msgid ""
"The following untracked working tree files would be overwritten by "
@@ -4255,7 +4490,7 @@ msgstr ""
"Изтеглянето ще презапише тези неследени файлове в работното дърво:\n"
"%%s"
-#: unpack-trees.c:150
+#: unpack-trees.c:151
#, c-format
msgid ""
"The following untracked working tree files would be overwritten by merge:\n"
@@ -4264,7 +4499,7 @@ msgstr ""
"Сливането ще презапише тези неследени файлове в работното дърво:\n"
"%%sПреместете ги или ги изтрийте, за да слеете."
-#: unpack-trees.c:152
+#: unpack-trees.c:153
#, c-format
msgid ""
"The following untracked working tree files would be overwritten by merge:\n"
@@ -4273,7 +4508,7 @@ msgstr ""
"Сливането ще презапише тези неследени файлове в работното дърво:\n"
"%%s"
-#: unpack-trees.c:155
+#: unpack-trees.c:156
#, c-format
msgid ""
"The following untracked working tree files would be overwritten by %s:\n"
@@ -4282,7 +4517,7 @@ msgstr ""
"„%s“ ще презапише тези неследени файлове в работното дърво:\n"
"%%sПреместете ги или ги изтрийте, за да извършите „%s“."
-#: unpack-trees.c:157
+#: unpack-trees.c:158
#, c-format
msgid ""
"The following untracked working tree files would be overwritten by %s:\n"
@@ -4291,12 +4526,12 @@ msgstr ""
"„%s“ ще презапише тези неследени файлове в работното дърво:\n"
"%%s"
-#: unpack-trees.c:164
+#: unpack-trees.c:165
#, c-format
msgid "Entry '%s' overlaps with '%s'. Cannot bind."
msgstr "Записът за „%s“ съвпада с този за „%s“. Не може да се присвои."
-#: unpack-trees.c:167
+#: unpack-trees.c:168
#, c-format
msgid ""
"Cannot update sparse checkout: the following entries are not up to date:\n"
@@ -4306,7 +4541,7 @@ msgstr ""
"актуални:\n"
"%s"
-#: unpack-trees.c:169
+#: unpack-trees.c:170
#, c-format
msgid ""
"The following working tree files would be overwritten by sparse checkout "
@@ -4317,7 +4552,7 @@ msgstr ""
"дърво:\n"
"%s"
-#: unpack-trees.c:171
+#: unpack-trees.c:172
#, c-format
msgid ""
"The following working tree files would be removed by sparse checkout "
@@ -4328,7 +4563,7 @@ msgstr ""
"дърво:\n"
"%s"
-#: unpack-trees.c:173
+#: unpack-trees.c:174
#, c-format
msgid ""
"Cannot update submodule:\n"
@@ -4337,12 +4572,12 @@ msgstr ""
"Подмодулът не може да бъде обновен:\n"
"„%s“"
-#: unpack-trees.c:250
+#: unpack-trees.c:251
#, c-format
msgid "Aborting\n"
msgstr "Преустановяване на действието\n"
-#: unpack-trees.c:332
+#: unpack-trees.c:333
msgid "Checking out files"
msgstr "Изтегляне на файлове"
@@ -4375,18 +4610,44 @@ msgstr "неправилен номер на порт"
msgid "invalid '..' path segment"
msgstr "неправилна част от пътя „..“"
-#: worktree.c:245
+#: worktree.c:245 builtin/am.c:2147
#, c-format
msgid "failed to read '%s'"
msgstr "„%s“ не може да бъде прочетен"
+#: worktree.c:291
+#, c-format
+msgid "'%s' at main working tree is not the repository directory"
+msgstr "„%s“ в основното работно дърво не е директорията на хранилището"
+
+#: worktree.c:302
+#, c-format
+msgid "'%s' file does not contain absolute path to the working tree location"
+msgstr ""
+"файлът „%s“ не съдържа абсолютния път към местоположението на работното дърво"
+
+#: worktree.c:314
+#, c-format
+msgid "'%s' does not exist"
+msgstr "„%s“ не съществува."
+
+#: worktree.c:320
+#, c-format
+msgid "'%s' is not a .git file, error code %d"
+msgstr "„%s“ не е файл на .git, код за грешка: %d"
+
+#: worktree.c:328
+#, c-format
+msgid "'%s' does not point back to '%s'"
+msgstr "„%s“ не сочи към обратно към „%s“"
+
#: wrapper.c:223 wrapper.c:393
#, c-format
msgid "could not open '%s' for reading and writing"
msgstr "„%s“ не може да бъде отворен и за четене, и за запис"
#: wrapper.c:227 wrapper.c:397 builtin/am.c:320 builtin/am.c:770
-#: builtin/am.c:862 builtin/merge.c:1043
+#: builtin/am.c:862 builtin/merge.c:1044
#, c-format
msgid "could not open '%s' for reading"
msgstr "файлът не може да бъде прочетен: „%s“"
@@ -4400,161 +4661,161 @@ msgstr "няма достъп до „%s“"
msgid "unable to get current working directory"
msgstr "текущата работна директория е недостъпна"
-#: wt-status.c:150
+#: wt-status.c:151
msgid "Unmerged paths:"
msgstr "Неслети пътища:"
-#: wt-status.c:177 wt-status.c:204
+#: wt-status.c:178 wt-status.c:205
#, c-format
msgid " (use \"git reset %s <file>...\" to unstage)"
msgstr " (използвайте „git reset %s ФАЙЛ…“, за да извадите ФАЙЛа от индекса)"
-#: wt-status.c:179 wt-status.c:206
+#: wt-status.c:180 wt-status.c:207
msgid " (use \"git rm --cached <file>...\" to unstage)"
msgstr ""
" (използвайте „git rm --cached %s ФАЙЛ…“, за да извадите ФАЙЛа от индекса)"
-#: wt-status.c:183
+#: wt-status.c:184
msgid " (use \"git add <file>...\" to mark resolution)"
msgstr ""
" (използвайте „git add ФАЙЛ…“, за да укажете разрешаването на конфликта)"
-#: wt-status.c:185 wt-status.c:189
+#: wt-status.c:186 wt-status.c:190
msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)"
msgstr ""
" (използвайте „git add/rm ФАЙЛ…“, според решението, което избирате за "
"конфликта)"
-#: wt-status.c:187
+#: wt-status.c:188
msgid " (use \"git rm <file>...\" to mark resolution)"
msgstr ""
" (използвайте „git rm ФАЙЛ…“, за да укажете разрешаването на конфликта)"
-#: wt-status.c:198 wt-status.c:984
+#: wt-status.c:199 wt-status.c:1007
msgid "Changes to be committed:"
msgstr "Промени, които ще бъдат подадени:"
-#: wt-status.c:216 wt-status.c:993
+#: wt-status.c:217 wt-status.c:1016
msgid "Changes not staged for commit:"
msgstr "Промени, които не са в индекса за подаване:"
-#: wt-status.c:220
+#: wt-status.c:221
msgid " (use \"git add <file>...\" to update what will be committed)"
msgstr ""
" (използвайте „git add ФАЙЛ…“, за да обновите съдържанието за подаване)"
-#: wt-status.c:222
+#: wt-status.c:223
msgid " (use \"git add/rm <file>...\" to update what will be committed)"
msgstr ""
" (използвайте „git add/rm ФАЙЛ…“, за да обновите съдържанието за подаване)"
-#: wt-status.c:223
+#: wt-status.c:224
msgid ""
" (use \"git checkout -- <file>...\" to discard changes in working directory)"
msgstr ""
" (използвайте „git checkout -- ФАЙЛ…“, за да отхвърлите промените в "
"работното дърво)"
-#: wt-status.c:225
+#: wt-status.c:226
msgid " (commit or discard the untracked or modified content in submodules)"
msgstr ""
" (подайте или отхвърлете неследеното или промененото съдържание в "
"подмодулите)"
-#: wt-status.c:237
+#: wt-status.c:238
#, c-format
msgid " (use \"git %s <file>...\" to include in what will be committed)"
msgstr ""
" (използвайте „git %s ФАЙЛ…“, за да определите какво включвате в подаването)"
-#: wt-status.c:252
+#: wt-status.c:253
msgid "both deleted:"
msgstr "изтрити в двата случая:"
-#: wt-status.c:254
+#: wt-status.c:255
msgid "added by us:"
msgstr "добавени от вас:"
-#: wt-status.c:256
+#: wt-status.c:257
msgid "deleted by them:"
msgstr "изтрити от тях:"
-#: wt-status.c:258
+#: wt-status.c:259
msgid "added by them:"
msgstr "добавени от тях:"
-#: wt-status.c:260
+#: wt-status.c:261
msgid "deleted by us:"
msgstr "изтрити от вас:"
-#: wt-status.c:262
+#: wt-status.c:263
msgid "both added:"
msgstr "добавени и в двата случая:"
-#: wt-status.c:264
+#: wt-status.c:265
msgid "both modified:"
msgstr "променени и в двата случая:"
-#: wt-status.c:274
+#: wt-status.c:275
msgid "new file:"
msgstr "нов файл:"
-#: wt-status.c:276
+#: wt-status.c:277
msgid "copied:"
msgstr "копиран:"
-#: wt-status.c:278
+#: wt-status.c:279
msgid "deleted:"
msgstr "изтрит:"
-#: wt-status.c:280
+#: wt-status.c:281
msgid "modified:"
msgstr "променен:"
-#: wt-status.c:282
+#: wt-status.c:283
msgid "renamed:"
msgstr "преименуван:"
-#: wt-status.c:284
+#: wt-status.c:285
msgid "typechange:"
msgstr "смяна на вида:"
-#: wt-status.c:286
+#: wt-status.c:287
msgid "unknown:"
msgstr "непозната промяна:"
-#: wt-status.c:288
+#: wt-status.c:289
msgid "unmerged:"
msgstr "неслят:"
-#: wt-status.c:370
+#: wt-status.c:369
msgid "new commits, "
msgstr "нови подавания, "
-#: wt-status.c:372
+#: wt-status.c:371
msgid "modified content, "
msgstr "променено съдържание, "
-#: wt-status.c:374
+#: wt-status.c:373
msgid "untracked content, "
msgstr "неследено съдържание, "
-#: wt-status.c:824
+#: wt-status.c:847
#, c-format
msgid "Your stash currently has %d entry"
msgid_plural "Your stash currently has %d entries"
msgstr[0] "Има %d скатаване."
msgstr[1] "Има %d скатавания."
-#: wt-status.c:856
+#: wt-status.c:879
msgid "Submodules changed but not updated:"
msgstr "Подмодулите са променени, но не са обновени:"
-#: wt-status.c:858
+#: wt-status.c:881
msgid "Submodule changes to be committed:"
msgstr "Промени в подмодулите за подаване:"
-#: wt-status.c:940
+#: wt-status.c:963
msgid ""
"Do not modify or remove the line above.\n"
"Everything below it will be ignored."
@@ -4562,241 +4823,241 @@ msgstr ""
"Не променяйте и не изтривайте горния ред.\n"
"Всичко отдолу ще бъде изтрито."
-#: wt-status.c:1053
+#: wt-status.c:1076
msgid "You have unmerged paths."
msgstr "Някои пътища не са слети."
-#: wt-status.c:1056
+#: wt-status.c:1079
msgid " (fix conflicts and run \"git commit\")"
msgstr " (коригирайте конфликтите и изпълнете „git commit“)"
-#: wt-status.c:1058
+#: wt-status.c:1081
msgid " (use \"git merge --abort\" to abort the merge)"
msgstr " (използвайте „git merge --abort“, за да преустановите сливането)"
-#: wt-status.c:1063
+#: wt-status.c:1086
msgid "All conflicts fixed but you are still merging."
msgstr "Всички конфликти са решени, но продължавате сливането."
-#: wt-status.c:1066
+#: wt-status.c:1089
msgid " (use \"git commit\" to conclude merge)"
msgstr " (използвайте „git commit“, за да завършите сливането)"
-#: wt-status.c:1076
+#: wt-status.c:1099
msgid "You are in the middle of an am session."
msgstr "В момента прилагате поредица от кръпки чрез „git am“."
-#: wt-status.c:1079
+#: wt-status.c:1102
msgid "The current patch is empty."
msgstr "Текущата кръпка е празна."
-#: wt-status.c:1083
+#: wt-status.c:1106
msgid " (fix conflicts and then run \"git am --continue\")"
msgstr " (коригирайте конфликтите и изпълнете „git am --continue“)"
-#: wt-status.c:1085
+#: wt-status.c:1108
msgid " (use \"git am --skip\" to skip this patch)"
msgstr " (използвайте „git am --skip“, за да пропуснете тази кръпка)"
-#: wt-status.c:1087
+#: wt-status.c:1110
msgid " (use \"git am --abort\" to restore the original branch)"
msgstr ""
" (използвайте „git am --abort“, за да възстановите първоначалния клон)"
-#: wt-status.c:1219
+#: wt-status.c:1242
msgid "git-rebase-todo is missing."
msgstr "„git-rebase-todo“ липсва."
-#: wt-status.c:1221
+#: wt-status.c:1244
msgid "No commands done."
msgstr "Не са изпълнени команди."
-#: wt-status.c:1224
+#: wt-status.c:1247
#, c-format
msgid "Last command done (%d command done):"
msgid_plural "Last commands done (%d commands done):"
msgstr[0] "Последна изпълнена команда (изпълнена е общо %d команда):"
msgstr[1] "Последна изпълнена команда (изпълнени са общо %d команди):"
-#: wt-status.c:1235
+#: wt-status.c:1258
#, c-format
msgid " (see more in file %s)"
msgstr " повече информация има във файла „%s“)"
-#: wt-status.c:1240
+#: wt-status.c:1263
msgid "No commands remaining."
msgstr "Не остават повече команди."
-#: wt-status.c:1243
+#: wt-status.c:1266
#, c-format
msgid "Next command to do (%d remaining command):"
msgid_plural "Next commands to do (%d remaining commands):"
msgstr[0] "Следваща команда за изпълнение (остава още %d команда):"
msgstr[1] "Следваща команда за изпълнение (остават още %d команди):"
-#: wt-status.c:1251
+#: wt-status.c:1274
msgid " (use \"git rebase --edit-todo\" to view and edit)"
msgstr ""
" (използвайте „git rebase --edit-todo“, за да разгледате и редактирате)"
-#: wt-status.c:1264
+#: wt-status.c:1287
#, c-format
msgid "You are currently rebasing branch '%s' on '%s'."
msgstr "В момента пребазирате клона „%s“ върху „%s“."
-#: wt-status.c:1269
+#: wt-status.c:1292
msgid "You are currently rebasing."
msgstr "В момента пребазирате."
-#: wt-status.c:1283
+#: wt-status.c:1306
msgid " (fix conflicts and then run \"git rebase --continue\")"
msgstr " (коригирайте конфликтите и използвайте „git rebase --continue“)"
-#: wt-status.c:1285
+#: wt-status.c:1308
msgid " (use \"git rebase --skip\" to skip this patch)"
msgstr " (използвайте „git rebase --skip“, за да пропуснете тази кръпка)"
-#: wt-status.c:1287
+#: wt-status.c:1310
msgid " (use \"git rebase --abort\" to check out the original branch)"
msgstr ""
" (използвайте „git rebase --abort“, за да възстановите първоначалния клон)"
-#: wt-status.c:1293
+#: wt-status.c:1316
msgid " (all conflicts fixed: run \"git rebase --continue\")"
msgstr " (всички конфликти са коригирани: изпълнете „git rebase --continue“)"
-#: wt-status.c:1297
+#: wt-status.c:1320
#, c-format
msgid ""
"You are currently splitting a commit while rebasing branch '%s' on '%s'."
msgstr "В момента разделяте подаване докато пребазирате клона „%s“ върху „%s“."
-#: wt-status.c:1302
+#: wt-status.c:1325
msgid "You are currently splitting a commit during a rebase."
msgstr "В момента разделяте подаване докато пребазирате."
-#: wt-status.c:1305
+#: wt-status.c:1328
msgid " (Once your working directory is clean, run \"git rebase --continue\")"
msgstr ""
" (След като работното ви дърво стане чисто, използвайте „git rebase --"
"continue“)"
-#: wt-status.c:1309
+#: wt-status.c:1332
#, c-format
msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
msgstr ""
"В момента редактирате подаване докато пребазирате клона „%s“ върху „%s“."
-#: wt-status.c:1314
+#: wt-status.c:1337
msgid "You are currently editing a commit during a rebase."
msgstr "В момента редактирате подаване докато пребазирате."
-#: wt-status.c:1317
+#: wt-status.c:1340
msgid " (use \"git commit --amend\" to amend the current commit)"
msgstr ""
" (използвайте „git commit --amend“, за да редактирате текущото подаване)"
-#: wt-status.c:1319
+#: wt-status.c:1342
msgid ""
" (use \"git rebase --continue\" once you are satisfied with your changes)"
msgstr ""
" (използвайте „git rebase --continue“, след като завършите промените си)"
-#: wt-status.c:1329
+#: wt-status.c:1352
#, c-format
msgid "You are currently cherry-picking commit %s."
msgstr "В момента отбирате подаването „%s“."
-#: wt-status.c:1334
+#: wt-status.c:1357
msgid " (fix conflicts and run \"git cherry-pick --continue\")"
msgstr " (коригирайте конфликтите и изпълнете „git cherry-pick --continue“)"
-#: wt-status.c:1337
+#: wt-status.c:1360
msgid " (all conflicts fixed: run \"git cherry-pick --continue\")"
msgstr ""
" (всички конфликти са коригирани, изпълнете „git cherry-pick --continue“)"
-#: wt-status.c:1339
+#: wt-status.c:1362
msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
msgstr ""
" (използвайте „git cherry-pick --abort“, за да отмените всички действия с "
"отбиране)"
-#: wt-status.c:1348
+#: wt-status.c:1371
#, c-format
msgid "You are currently reverting commit %s."
msgstr "В момента отменяте подаване „%s“."
-#: wt-status.c:1353
+#: wt-status.c:1376
msgid " (fix conflicts and run \"git revert --continue\")"
msgstr " (коригирайте конфликтите и изпълнете „git revert --continue“)"
-#: wt-status.c:1356
+#: wt-status.c:1379
msgid " (all conflicts fixed: run \"git revert --continue\")"
msgstr " (всички конфликти са коригирани, изпълнете „git revert --continue“)"
-#: wt-status.c:1358
+#: wt-status.c:1381
msgid " (use \"git revert --abort\" to cancel the revert operation)"
msgstr ""
" (използвайте „git revert --abort“, за да преустановите отмяната на "
"подаване)"
-#: wt-status.c:1369
+#: wt-status.c:1392
#, c-format
msgid "You are currently bisecting, started from branch '%s'."
msgstr "В момента търсите двоично, като сте стартирали от клон „%s“."
-#: wt-status.c:1373
+#: wt-status.c:1396
msgid "You are currently bisecting."
msgstr "В момента търсите двоично."
-#: wt-status.c:1376
+#: wt-status.c:1399
msgid " (use \"git bisect reset\" to get back to the original branch)"
msgstr ""
" (използвайте „git bisect reset“, за да се върнете към първоначалното "
"състояние и клон)"
-#: wt-status.c:1573
+#: wt-status.c:1596
msgid "On branch "
msgstr "На клон "
-#: wt-status.c:1579
+#: wt-status.c:1602
msgid "interactive rebase in progress; onto "
msgstr "извършвате интерактивно пребазиране върху "
-#: wt-status.c:1581
+#: wt-status.c:1604
msgid "rebase in progress; onto "
msgstr "извършвате пребазиране върху "
-#: wt-status.c:1586
+#: wt-status.c:1609
msgid "HEAD detached at "
msgstr "Указателят „HEAD“ не е свързан и е при "
-#: wt-status.c:1588
+#: wt-status.c:1611
msgid "HEAD detached from "
msgstr "Указателят „HEAD“ не е свързан и е отделѐн от "
-#: wt-status.c:1591
+#: wt-status.c:1614
msgid "Not currently on any branch."
msgstr "Извън всички клони."
-#: wt-status.c:1611
+#: wt-status.c:1634
msgid "Initial commit"
msgstr "Първоначално подаване"
-#: wt-status.c:1612
+#: wt-status.c:1635
msgid "No commits yet"
msgstr "Все още липсват подавания"
-#: wt-status.c:1626
+#: wt-status.c:1649
msgid "Untracked files"
msgstr "Неследени файлове"
-#: wt-status.c:1628
+#: wt-status.c:1651
msgid "Ignored files"
msgstr "Игнорирани файлове"
-#: wt-status.c:1632
+#: wt-status.c:1655
#, c-format
msgid ""
"It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -4808,32 +5069,32 @@ msgstr ""
"изпълнението, но не трябва да забравяте ръчно да добавяте новите файлове.\n"
"За повече подробности погледнете „git status help“."
-#: wt-status.c:1638
+#: wt-status.c:1661
#, c-format
msgid "Untracked files not listed%s"
msgstr "Неследените файлове не са изведени%s"
-#: wt-status.c:1640
+#: wt-status.c:1663
msgid " (use -u option to show untracked files)"
msgstr " (използвайте опцията „-u“, за да изведете неследените файлове)"
-#: wt-status.c:1646
+#: wt-status.c:1669
msgid "No changes"
msgstr "Няма промени"
-#: wt-status.c:1651
+#: wt-status.c:1674
#, c-format
msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
msgstr ""
"към индекса за подаване не са добавени промени (използвайте „git add“ и/или "
"„git commit -a“)\n"
-#: wt-status.c:1654
+#: wt-status.c:1677
#, c-format
msgid "no changes added to commit\n"
msgstr "към индекса за подаване не са добавени промени\n"
-#: wt-status.c:1657
+#: wt-status.c:1680
#, c-format
msgid ""
"nothing added to commit but untracked files present (use \"git add\" to "
@@ -4842,67 +5103,71 @@ msgstr ""
"към индекса за подаване не са добавени промени, но има нови файлове "
"(използвайте „git add“, за да започне тяхното следене)\n"
-#: wt-status.c:1660
+#: wt-status.c:1683
#, c-format
msgid "nothing added to commit but untracked files present\n"
msgstr "към индекса за подаване не са добавени промени, но има нови файлове\n"
-#: wt-status.c:1663
+#: wt-status.c:1686
#, c-format
msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
msgstr ""
"липсват каквито и да е промени (създайте или копирайте файлове и използвайте "
"„git add“, за да започне тяхното следене)\n"
-#: wt-status.c:1666 wt-status.c:1671
+#: wt-status.c:1689 wt-status.c:1694
#, c-format
msgid "nothing to commit\n"
msgstr "липсват каквито и да е промени\n"
-#: wt-status.c:1669
+#: wt-status.c:1692
#, c-format
msgid "nothing to commit (use -u to show untracked files)\n"
msgstr ""
"липсват каквито и да е промени (използвайте опцията „-u“, за да се изведат и "
"неследените файлове)\n"
-#: wt-status.c:1673
+#: wt-status.c:1696
#, c-format
msgid "nothing to commit, working tree clean\n"
msgstr "липсват каквито и да е промени, работното дърво е чисто\n"
-#: wt-status.c:1785
+#: wt-status.c:1809
msgid "No commits yet on "
msgstr "Все още липсват подавания в "
-#: wt-status.c:1789
+#: wt-status.c:1813
msgid "HEAD (no branch)"
msgstr "HEAD (извън клон)"
-#: wt-status.c:1818 wt-status.c:1826
+#: wt-status.c:1844
+msgid "different"
+msgstr "различен"
+
+#: wt-status.c:1846 wt-status.c:1854
msgid "behind "
msgstr "назад с "
-#: wt-status.c:1821 wt-status.c:1824
+#: wt-status.c:1849 wt-status.c:1852
msgid "ahead "
msgstr "напред с "
#. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2318
+#: wt-status.c:2358
#, c-format
msgid "cannot %s: You have unstaged changes."
msgstr "не може да извършите „%s“, защото има промени, които не са в индекса."
-#: wt-status.c:2324
+#: wt-status.c:2364
msgid "additionally, your index contains uncommitted changes."
msgstr "освен това в индекса има неподадени промени."
-#: wt-status.c:2326
+#: wt-status.c:2366
#, c-format
msgid "cannot %s: Your index contains uncommitted changes."
msgstr "не може да извършите „%s“, защото в индекса има неподадени промени."
-#: compat/precompose_utf8.c:58 builtin/clone.c:437
+#: compat/precompose_utf8.c:58 builtin/clone.c:440
#, c-format
msgid "failed to unlink '%s'"
msgstr "неуспешно изтриване на „%s“"
@@ -4916,7 +5181,7 @@ msgstr "git add [ОПЦИЯ…] [--] ПЪТ…"
msgid "unexpected diff status %c"
msgstr "неочакван изходен код при генериране на разлика: %c"
-#: builtin/add.c:88 builtin/commit.c:291
+#: builtin/add.c:88 builtin/commit.c:257
msgid "updating files failed"
msgstr "неуспешно обновяване на файловете"
@@ -4965,7 +5230,7 @@ msgid "The following paths are ignored by one of your .gitignore files:\n"
msgstr ""
"Следните пътища ще бъдат игнорирани според някой от файловете „.gitignore“:\n"
-#: builtin/add.c:291 builtin/clean.c:911 builtin/fetch.c:133 builtin/mv.c:124
+#: builtin/add.c:291 builtin/clean.c:911 builtin/fetch.c:146 builtin/mv.c:124
#: builtin/prune-packed.c:55 builtin/pull.c:207 builtin/push.c:541
#: builtin/remote.c:1333 builtin/rm.c:242 builtin/send-pack.c:164
msgid "dry run"
@@ -4975,7 +5240,7 @@ msgstr "пробно изпълнение"
msgid "interactive picking"
msgstr "интерактивно отбиране на промени"
-#: builtin/add.c:295 builtin/checkout.c:1137 builtin/reset.c:310
+#: builtin/add.c:295 builtin/checkout.c:1128 builtin/reset.c:302
msgid "select hunks interactively"
msgstr "интерактивен избор на парчета код"
@@ -5104,10 +5369,10 @@ msgstr "Нищо не е зададено и нищо не е добавено.\
msgid "Maybe you wanted to say 'git add .'?\n"
msgstr "Вероятно искахте да използвате „git add .“?\n"
-#: builtin/add.c:449 builtin/check-ignore.c:176 builtin/checkout.c:281
-#: builtin/checkout.c:484 builtin/clean.c:958 builtin/commit.c:350
-#: builtin/diff-tree.c:114 builtin/mv.c:143 builtin/reset.c:249
-#: builtin/rm.c:271 builtin/submodule--helper.c:311
+#: builtin/add.c:449 builtin/check-ignore.c:177 builtin/checkout.c:280
+#: builtin/checkout.c:483 builtin/clean.c:958 builtin/commit.c:316
+#: builtin/diff-tree.c:114 builtin/mv.c:144 builtin/reset.c:241
+#: builtin/rm.c:271 builtin/submodule--helper.c:326
msgid "index file corrupt"
msgstr "файлът с индекса е повреден"
@@ -5160,59 +5425,59 @@ msgstr "неправилно отместване на часовия пояс"
msgid "Patch format detection failed."
msgstr "Форматът на кръпката не може да бъде определен."
-#: builtin/am.c:1013 builtin/clone.c:402
+#: builtin/am.c:1013 builtin/clone.c:405
#, c-format
msgid "failed to create directory '%s'"
msgstr "директорията „%s“ не може да бъде създадена"
-#: builtin/am.c:1017
+#: builtin/am.c:1018
msgid "Failed to split patches."
msgstr "Кръпките не могат да бъдат разделени."
-#: builtin/am.c:1146 builtin/commit.c:376
+#: builtin/am.c:1148 builtin/commit.c:342
msgid "unable to write index file"
msgstr "индексът не може да бъде записан"
-#: builtin/am.c:1160
+#: builtin/am.c:1162
#, c-format
msgid "When you have resolved this problem, run \"%s --continue\"."
msgstr "След коригирането на този проблем изпълнете „%s --continue“."
-#: builtin/am.c:1161
+#: builtin/am.c:1163
#, c-format
msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
msgstr "Ако предпочитате да прескочите тази кръпка, изпълнете „%s --skip“."
-#: builtin/am.c:1162
+#: builtin/am.c:1164
#, c-format
msgid "To restore the original branch and stop patching, run \"%s --abort\"."
msgstr "За да се върнете към първоначалното състояние, изпълнете „%s --abort“."
-#: builtin/am.c:1269
+#: builtin/am.c:1271
msgid "Patch is empty."
msgstr "Кръпката е празна."
-#: builtin/am.c:1335
+#: builtin/am.c:1337
#, c-format
msgid "invalid ident line: %.*s"
msgstr "грешен ред с идентичност: %.*s"
-#: builtin/am.c:1357
+#: builtin/am.c:1359
#, c-format
msgid "unable to parse commit %s"
msgstr "подаването не може да бъде анализирано: %s"
-#: builtin/am.c:1550
+#: builtin/am.c:1554
msgid "Repository lacks necessary blobs to fall back on 3-way merge."
msgstr ""
"В хранилището липсват необходимите обекти BLOB, за да се премине към тройно "
"сливане."
-#: builtin/am.c:1552
+#: builtin/am.c:1556
msgid "Using index info to reconstruct a base tree..."
msgstr "Базовото дърво се реконструира от информацията в индекса…"
-#: builtin/am.c:1571
+#: builtin/am.c:1575
msgid ""
"Did you hand edit your patch?\n"
"It does not apply to blobs recorded in its index."
@@ -5220,39 +5485,30 @@ msgstr ""
"Кръпката не може да се приложи към обектите BLOB в индекса.\n"
"Да не би да сте я редактирали на ръка?"
-#: builtin/am.c:1577
+#: builtin/am.c:1581
msgid "Falling back to patching base and 3-way merge..."
msgstr "Преминаване към прилагане на кръпка към базата и тройно сливане…"
-#: builtin/am.c:1602
+#: builtin/am.c:1606
msgid "Failed to merge in the changes."
msgstr "Неуспешно сливане на промените."
-#: builtin/am.c:1626 builtin/merge.c:642
-msgid "git write-tree failed to write a tree"
-msgstr "Командата „git write-tree“ не успя да запише обект-дърво"
-
-#: builtin/am.c:1633
+#: builtin/am.c:1637
msgid "applying to an empty history"
msgstr "прилагане върху празна история"
-#: builtin/am.c:1646 builtin/commit.c:1798 builtin/merge.c:825
-#: builtin/merge.c:850
-msgid "failed to write commit object"
-msgstr "обектът за подаването не може да бъде записан"
-
-#: builtin/am.c:1679 builtin/am.c:1683
+#: builtin/am.c:1683 builtin/am.c:1687
#, c-format
msgid "cannot resume: %s does not exist."
msgstr "не може да се продължи — „%s“ не съществува."
-#: builtin/am.c:1699
+#: builtin/am.c:1703
msgid "cannot be interactive without stdin connected to a terminal."
msgstr ""
"За интерактивно изпълнение е необходимо стандартният\n"
"вход да е свързан с терминал, а в момента не е."
-#: builtin/am.c:1704
+#: builtin/am.c:1708
msgid "Commit Body is:"
msgstr "Тялото на кръпката за прилагане е:"
@@ -5260,38 +5516,39 @@ msgstr "Тялото на кръпката за прилагане е:"
#. in your translation. The program will only accept English
#. input at this point.
#.
-#: builtin/am.c:1714
+#: builtin/am.c:1718
msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
msgstr ""
"Прилагане? „y“ — да/„n“ — не/„e“ — редактиране/„v“ — преглед/„a“ — приемане "
"на всичко:"
-#: builtin/am.c:1764
+#: builtin/am.c:1768
#, c-format
msgid "Dirty index: cannot apply patches (dirty: %s)"
msgstr ""
"Индексът не е чист: кръпките не могат да бъдат приложени (замърсени са: %s)"
-#: builtin/am.c:1804 builtin/am.c:1876
+#: builtin/am.c:1808 builtin/am.c:1879
#, c-format
msgid "Applying: %.*s"
msgstr "Прилагане: %.*s"
-#: builtin/am.c:1820
+#: builtin/am.c:1824
msgid "No changes -- Patch already applied."
msgstr "Без промени — кръпката вече е приложена."
-#: builtin/am.c:1828
+#: builtin/am.c:1832
#, c-format
msgid "Patch failed at %s %.*s"
msgstr "Неуспешно прилагане на кръпка при %s %.*s“"
-#: builtin/am.c:1834
-#, c-format
-msgid "The copy of the patch that failed is found in: %s"
-msgstr "Дубликат на проблемната кръпка се намира в: %s"
+#: builtin/am.c:1838
+msgid "Use 'git am --show-current-patch' to see the failed patch"
+msgstr ""
+"За да видите неуспешно приложени кръпки, използвайте опцията „git am --show-"
+"current-patch“ to see the failed patch"
-#: builtin/am.c:1879
+#: builtin/am.c:1882
msgid ""
"No changes - did you forget to use 'git add'?\n"
"If there is nothing left to stage, chances are that something else\n"
@@ -5301,7 +5558,7 @@ msgstr ""
"Ако няма друга промяна за включване в индекса, най-вероятно някоя друга\n"
"кръпка е довела до същите промени и в такъв случай просто пропуснете тази."
-#: builtin/am.c:1886
+#: builtin/am.c:1889
msgid ""
"You still have unmerged paths in your index.\n"
"You should 'git add' each file with resolved conflicts to mark them as "
@@ -5312,17 +5569,17 @@ msgstr ""
"След корекция на конфликтите изпълнете „git add“ върху поправените файлове.\n"
"За да приемете „изтрити от тях“, изпълнете „git rm“ върху изтритите файлове."
-#: builtin/am.c:1993 builtin/am.c:1997 builtin/am.c:2009 builtin/reset.c:332
-#: builtin/reset.c:340
+#: builtin/am.c:1996 builtin/am.c:2000 builtin/am.c:2012 builtin/reset.c:324
+#: builtin/reset.c:332
#, c-format
msgid "Could not parse object '%s'."
msgstr "„%s“ не е разпознат като обект."
-#: builtin/am.c:2045
+#: builtin/am.c:2048
msgid "failed to clean index"
msgstr "индексът не може да бъде изчистен"
-#: builtin/am.c:2080
+#: builtin/am.c:2083
msgid ""
"You seem to have moved HEAD since the last 'am' failure.\n"
"Not rewinding to ORIG_HEAD"
@@ -5333,138 +5590,147 @@ msgstr ""
"сочи към\n"
"„ORIG_HEAD“"
-#: builtin/am.c:2143
+#: builtin/am.c:2174
#, c-format
msgid "Invalid value for --patch-format: %s"
msgstr "Неправилна стойност за „--patch-format“: „%s“"
-#: builtin/am.c:2176
+#: builtin/am.c:2210
msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
msgstr "git am [ОПЦИЯ…] [(ФАЙЛ_С_ПОЩА|ДИРЕКТОРИЯ_С_ПОЩА)…]"
-#: builtin/am.c:2177
+#: builtin/am.c:2211
msgid "git am [<options>] (--continue | --skip | --abort)"
msgstr "git am [ОПЦИЯ…] (--continue | --quit | --abort)"
-#: builtin/am.c:2183
+#: builtin/am.c:2217
msgid "run interactively"
msgstr "интерактивна работа"
-#: builtin/am.c:2185
+#: builtin/am.c:2219
msgid "historical option -- no-op"
msgstr "изоставена опция, съществува по исторически причини, нищо не прави"
-#: builtin/am.c:2187
+#: builtin/am.c:2221
msgid "allow fall back on 3way merging if needed"
msgstr "да се преминава към тройно сливане при нужда."
-#: builtin/am.c:2188 builtin/init-db.c:484 builtin/prune-packed.c:57
-#: builtin/repack.c:180
+#: builtin/am.c:2222 builtin/init-db.c:484 builtin/prune-packed.c:57
+#: builtin/repack.c:182
msgid "be quiet"
msgstr "без извеждане на информация"
-#: builtin/am.c:2190
+#: builtin/am.c:2224
msgid "add a Signed-off-by line to the commit message"
msgstr "добавяне на ред за подпис „Signed-off-by“ в съобщението за подаване"
-#: builtin/am.c:2193
+#: builtin/am.c:2227
msgid "recode into utf8 (default)"
msgstr "прекодиране в UTF-8 (стандартно)"
-#: builtin/am.c:2195
+#: builtin/am.c:2229
msgid "pass -k flag to git-mailinfo"
msgstr "подаване на опцията „-k“ на командата „git-mailinfo“"
-#: builtin/am.c:2197
+#: builtin/am.c:2231
msgid "pass -b flag to git-mailinfo"
msgstr "подаване на опцията „-b“ на командата „git-mailinfo“"
-#: builtin/am.c:2199
+#: builtin/am.c:2233
msgid "pass -m flag to git-mailinfo"
msgstr "подаване на опцията „-m“ на командата „git-mailinfo“"
-#: builtin/am.c:2201
+#: builtin/am.c:2235
msgid "pass --keep-cr flag to git-mailsplit for mbox format"
msgstr ""
"подаване на опцията „--keep-cr“ на командата „git-mailsplit“ за формат „mbox“"
-#: builtin/am.c:2204
+#: builtin/am.c:2238
msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
msgstr ""
"без подаване на опцията „--keep-cr“ на командата „git-mailsplit“ независимо "
"от „am.keepcr“"
-#: builtin/am.c:2207
+#: builtin/am.c:2241
msgid "strip everything before a scissors line"
msgstr "пропускане на всичко преди реда за отрязване"
-#: builtin/am.c:2209 builtin/am.c:2212 builtin/am.c:2215 builtin/am.c:2218
-#: builtin/am.c:2221 builtin/am.c:2224 builtin/am.c:2227 builtin/am.c:2230
-#: builtin/am.c:2236
+#: builtin/am.c:2243 builtin/am.c:2246 builtin/am.c:2249 builtin/am.c:2252
+#: builtin/am.c:2255 builtin/am.c:2258 builtin/am.c:2261 builtin/am.c:2264
+#: builtin/am.c:2270
msgid "pass it through git-apply"
msgstr "прекарване през „git-apply“"
-#: builtin/am.c:2226 builtin/fmt-merge-msg.c:665 builtin/fmt-merge-msg.c:668
-#: builtin/grep.c:845 builtin/merge.c:205 builtin/pull.c:145 builtin/pull.c:203
-#: builtin/repack.c:189 builtin/repack.c:193 builtin/repack.c:195
-#: builtin/show-branch.c:631 builtin/show-ref.c:169 builtin/tag.c:377
-#: parse-options.h:132 parse-options.h:134 parse-options.h:245
+#: builtin/am.c:2260 builtin/fmt-merge-msg.c:665 builtin/fmt-merge-msg.c:668
+#: builtin/grep.c:853 builtin/merge.c:206 builtin/pull.c:145 builtin/pull.c:203
+#: builtin/repack.c:191 builtin/repack.c:195 builtin/repack.c:197
+#: builtin/show-branch.c:631 builtin/show-ref.c:169 builtin/tag.c:382
+#: parse-options.h:144 parse-options.h:146 parse-options.h:257
msgid "n"
msgstr "БРОЙ"
-#: builtin/am.c:2232 builtin/branch.c:629 builtin/for-each-ref.c:38
-#: builtin/replace.c:444 builtin/tag.c:412 builtin/verify-tag.c:39
+#: builtin/am.c:2266 builtin/branch.c:629 builtin/for-each-ref.c:38
+#: builtin/replace.c:445 builtin/tag.c:418 builtin/verify-tag.c:39
msgid "format"
msgstr "ФОРМАТ"
-#: builtin/am.c:2233
+#: builtin/am.c:2267
msgid "format the patch(es) are in"
msgstr "формат на кръпките"
-#: builtin/am.c:2239
+#: builtin/am.c:2273
msgid "override error message when patch failure occurs"
msgstr "избрано от вас съобщение за грешка при прилагане на кръпки"
-#: builtin/am.c:2241
+#: builtin/am.c:2275
msgid "continue applying patches after resolving a conflict"
msgstr "продължаване на прилагането на кръпки след коригирането на конфликт"
-#: builtin/am.c:2244
+#: builtin/am.c:2278
msgid "synonyms for --continue"
msgstr "синоними на „--continue“"
-#: builtin/am.c:2247
+#: builtin/am.c:2281
msgid "skip the current patch"
msgstr "прескачане на текущата кръпка"
-#: builtin/am.c:2250
+#: builtin/am.c:2284
msgid "restore the original branch and abort the patching operation."
msgstr ""
"възстановяване на първоначалното състояние на клона и преустановяване на "
"прилагането на кръпката."
-#: builtin/am.c:2254
+#: builtin/am.c:2287
+msgid "abort the patching operation but keep HEAD where it is."
+msgstr ""
+"преустановяване на прилагането на кръпката без промяна към кое сочи „HEAD“."
+
+#: builtin/am.c:2290
+msgid "show the patch being applied."
+msgstr "показване на прилаганата кръпка."
+
+#: builtin/am.c:2294
msgid "lie about committer date"
msgstr "дата за подаване различна от първоначалната"
-#: builtin/am.c:2256
+#: builtin/am.c:2296
msgid "use current timestamp for author date"
msgstr "използване на текущото време като това за автор"
-#: builtin/am.c:2258 builtin/commit.c:1636 builtin/merge.c:236
-#: builtin/pull.c:178 builtin/revert.c:112 builtin/tag.c:392
+#: builtin/am.c:2298 builtin/commit.c:1431 builtin/merge.c:237
+#: builtin/pull.c:178 builtin/revert.c:112 builtin/tag.c:398
msgid "key-id"
msgstr "ИДЕНТИФИКАТОР_НА_КЛЮЧ"
-#: builtin/am.c:2259
+#: builtin/am.c:2299
msgid "GPG-sign commits"
msgstr "подписване на подаванията с GPG"
-#: builtin/am.c:2262
+#: builtin/am.c:2302
msgid "(internal use for git-rebase)"
msgstr "(ползва се вътрешно за „git-rebase“)"
-#: builtin/am.c:2280
+#: builtin/am.c:2320
msgid ""
"The -b/--binary option has been a no-op for long time, and\n"
"it will be removed. Please do not use it anymore."
@@ -5472,18 +5738,18 @@ msgstr ""
"Опциите „-b“/„--binary“ отдавна не правят нищо и\n"
"ще бъдат премахнати в бъдеще. Не ги ползвайте."
-#: builtin/am.c:2287
+#: builtin/am.c:2327
msgid "failed to read the index"
msgstr "неуспешно изчитане на индекса"
-#: builtin/am.c:2302
+#: builtin/am.c:2342
#, c-format
msgid "previous rebase directory %s still exists but mbox given."
msgstr ""
"предишната директория за пребазиране „%s“ все още съществува, а е зададен "
"файл „mbox“."
-#: builtin/am.c:2326
+#: builtin/am.c:2366
#, c-format
msgid ""
"Stray %s directory found.\n"
@@ -5492,7 +5758,7 @@ msgstr ""
"Открита е излишна директория „%s“.\n"
"Можете да я изтриете с командата „git am --abort“."
-#: builtin/am.c:2332
+#: builtin/am.c:2372
msgid "Resolve operation not in progress, we are not resuming."
msgstr "В момента не тече операция по коригиране и няма как да се продължи."
@@ -5514,8 +5780,9 @@ msgid "git archive: Remote with no URL"
msgstr "git archive: Липсва адрес за отдалеченото хранилище"
#: builtin/archive.c:58
-msgid "git archive: expected ACK/NAK, got EOF"
-msgstr "git archive: очакваше се „ACK“/„NAK“, а бе получен „EOF“"
+msgid "git archive: expected ACK/NAK, got a flush packet"
+msgstr ""
+"git archive: очакваше се „ACK“/„NAK“, а бе получен изчистващ пакет „flush“"
#: builtin/archive.c:61
#, c-format
@@ -5602,125 +5869,125 @@ msgstr "git blame [ОПЦИЯ…] [ОПЦИЯ_ЗА_ВЕРСИЯТА…] [ВЕР
msgid "<rev-opts> are documented in git-rev-list(1)"
msgstr "ОПЦИИте_ЗА_ВЕРСИЯТА са документирани в ръководството git-rev-list(1)"
-#: builtin/blame.c:668
+#: builtin/blame.c:677
msgid "Show blame entries as we find them, incrementally"
msgstr "Извеждане на анотациите с намирането им, последователно"
-#: builtin/blame.c:669
+#: builtin/blame.c:678
msgid "Show blank SHA-1 for boundary commits (Default: off)"
msgstr ""
"Извеждане на празни суми по SHA1 за граничните подавания (стандартно опцията "
"е изключена)"
-#: builtin/blame.c:670
+#: builtin/blame.c:679
msgid "Do not treat root commits as boundaries (Default: off)"
msgstr ""
"Началните подавания да не се считат за гранични (стандартно опцията е "
"изключена)"
-#: builtin/blame.c:671
+#: builtin/blame.c:680
msgid "Show work cost statistics"
msgstr "Извеждане на статистика за извършените действия"
-#: builtin/blame.c:672
+#: builtin/blame.c:681
msgid "Force progress reporting"
msgstr "Принудително извеждане на напредъка"
-#: builtin/blame.c:673
+#: builtin/blame.c:682
msgid "Show output score for blame entries"
msgstr "Извеждане на допълнителна информация за определянето на анотациите"
-#: builtin/blame.c:674
+#: builtin/blame.c:683
msgid "Show original filename (Default: auto)"
msgstr ""
"Извеждане на първоначалното име на файл (стандартно това е автоматично)"
-#: builtin/blame.c:675
+#: builtin/blame.c:684
msgid "Show original linenumber (Default: off)"
msgstr ""
"Извеждане на първоначалният номер на ред (стандартно опцията е изключена)"
-#: builtin/blame.c:676
+#: builtin/blame.c:685
msgid "Show in a format designed for machine consumption"
msgstr "Извеждане във формат за по-нататъшна обработка"
-#: builtin/blame.c:677
+#: builtin/blame.c:686
msgid "Show porcelain format with per-line commit information"
msgstr ""
"Извеждане във формат за команди от потребителско ниво с информация на всеки "
"ред"
-#: builtin/blame.c:678
+#: builtin/blame.c:687
msgid "Use the same output mode as git-annotate (Default: off)"
msgstr ""
"Използване на същия формат като „git-annotate“ (стандартно опцията е "
"изключена)"
-#: builtin/blame.c:679
+#: builtin/blame.c:688
msgid "Show raw timestamp (Default: off)"
msgstr "Извеждане на неформатирани времена (стандартно опцията е изключена)"
-#: builtin/blame.c:680
+#: builtin/blame.c:689
msgid "Show long commit SHA1 (Default: off)"
msgstr "Извеждане на пълните суми по SHA1 (стандартно опцията е изключена)"
-#: builtin/blame.c:681
+#: builtin/blame.c:690
msgid "Suppress author name and timestamp (Default: off)"
msgstr "Без име на автор и време на промяна (стандартно опцията е изключена)"
-#: builtin/blame.c:682
+#: builtin/blame.c:691
msgid "Show author email instead of name (Default: off)"
msgstr ""
"Извеждане на е-пощата на автора, а не името му (стандартно опцията е "
"изключена)"
-#: builtin/blame.c:683
+#: builtin/blame.c:692
msgid "Ignore whitespace differences"
msgstr "Без разлики в знаците за интервали"
-#: builtin/blame.c:690
+#: builtin/blame.c:699
msgid "Use an experimental heuristic to improve diffs"
msgstr "Подобряване на разликите чрез експериментална евристика"
-#: builtin/blame.c:692
+#: builtin/blame.c:701
msgid "Spend extra cycles to find better match"
msgstr "Допълнителни изчисления за по-добри резултати"
-#: builtin/blame.c:693
+#: builtin/blame.c:702
msgid "Use revisions from <file> instead of calling git-rev-list"
msgstr "Изчитане на версиите от ФАЙЛ, а не чрез изпълнение на „git-rev-list“"
-#: builtin/blame.c:694
+#: builtin/blame.c:703
msgid "Use <file>'s contents as the final image"
msgstr "Използване на съдържанието на ФАЙЛа като крайно положение"
-#: builtin/blame.c:695 builtin/blame.c:696
+#: builtin/blame.c:704 builtin/blame.c:705
msgid "score"
msgstr "напасване на редовете"
-#: builtin/blame.c:695
+#: builtin/blame.c:704
msgid "Find line copies within and across files"
msgstr ""
"Търсене на копирани редове както в рамките на един файл, така и от един файл "
"към друг"
-#: builtin/blame.c:696
+#: builtin/blame.c:705
msgid "Find line movements within and across files"
msgstr ""
"Търсене на преместени редове както в рамките на един файл, така и от един "
"файл към друг"
-#: builtin/blame.c:697
+#: builtin/blame.c:706
msgid "n,m"
msgstr "n,m"
-#: builtin/blame.c:697
+#: builtin/blame.c:706
msgid "Process only line range n,m, counting from 1"
msgstr ""
"Информация само за редовете в диапазона от n до m включително. Броенето "
"започва от 1"
-#: builtin/blame.c:744
+#: builtin/blame.c:753
msgid "--progress can't be used with --incremental or porcelain formats"
msgstr ""
"опцията „--progress“ е несъвместима с „--incremental“ и форма̀та на командите "
@@ -5734,18 +6001,18 @@ msgstr ""
#. your language may need more or fewer display
#. columns.
#.
-#: builtin/blame.c:795
+#: builtin/blame.c:804
msgid "4 years, 11 months ago"
msgstr "преди 4 години и 11 месеца"
-#: builtin/blame.c:882
+#: builtin/blame.c:890
#, c-format
msgid "file %s has only %lu line"
msgid_plural "file %s has only %lu lines"
msgstr[0] "има само %2$lu ред във файла „%1$s“"
msgstr[1] "има само %2$lu реда във файла „%1$s“"
-#: builtin/blame.c:928
+#: builtin/blame.c:936
msgid "Blaming lines"
msgstr "Анотирани редове"
@@ -6037,17 +6304,17 @@ msgstr "извеждане само на неслетите клони"
msgid "list branches in columns"
msgstr "извеждане по колони"
-#: builtin/branch.c:622 builtin/for-each-ref.c:40 builtin/tag.c:405
+#: builtin/branch.c:622 builtin/for-each-ref.c:40 builtin/tag.c:411
msgid "key"
msgstr "КЛЮЧ"
-#: builtin/branch.c:623 builtin/for-each-ref.c:41 builtin/tag.c:406
+#: builtin/branch.c:623 builtin/for-each-ref.c:41 builtin/tag.c:412
msgid "field name to sort on"
msgstr "име на полето, по което да е подредбата"
#: builtin/branch.c:625 builtin/for-each-ref.c:43 builtin/notes.c:408
#: builtin/notes.c:411 builtin/notes.c:571 builtin/notes.c:574
-#: builtin/tag.c:408
+#: builtin/tag.c:414
msgid "object"
msgstr "ОБЕКТ"
@@ -6055,16 +6322,16 @@ msgstr "ОБЕКТ"
msgid "print only branches of the object"
msgstr "извеждане само на клоните на ОБЕКТА"
-#: builtin/branch.c:628 builtin/for-each-ref.c:49 builtin/tag.c:415
+#: builtin/branch.c:628 builtin/for-each-ref.c:49 builtin/tag.c:421
msgid "sorting and filtering are case insensitive"
msgstr "подредбата и филтрирането третират еднакво малките и главните букви"
-#: builtin/branch.c:629 builtin/for-each-ref.c:38 builtin/tag.c:413
+#: builtin/branch.c:629 builtin/for-each-ref.c:38 builtin/tag.c:419
#: builtin/verify-tag.c:39
msgid "format to use for the output"
msgstr "ФОРМАТ за изхода"
-#: builtin/branch.c:652 builtin/clone.c:730
+#: builtin/branch.c:652 builtin/clone.c:735
msgid "HEAD not found below refs/heads!"
msgstr "В директорията „refs/heads“ липсва файл „HEAD“"
@@ -6163,7 +6430,7 @@ msgstr "За създаването на пратка е необходимо х
msgid "Need a repository to unbundle."
msgstr "За приемането на пратка е необходимо хранилище."
-#: builtin/cat-file.c:521
+#: builtin/cat-file.c:523
msgid ""
"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
"p | <type> | --textconv | --filters) [--path=<path>] <object>"
@@ -6171,7 +6438,7 @@ msgstr ""
"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
"p | ВИД | --textconv --filters) [--path=ПЪТ] ОБЕКТ"
-#: builtin/cat-file.c:522
+#: builtin/cat-file.c:524
msgid ""
"git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
"filters]"
@@ -6179,71 +6446,71 @@ msgstr ""
"git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
"filters]"
-#: builtin/cat-file.c:559
+#: builtin/cat-file.c:561
msgid "<type> can be one of: blob, tree, commit, tag"
msgstr ""
"ВИДът може да е: „blob“ (обект BLOB), „tree“ (дърво), „commit“ (подаване), "
"„tag“ (етикет)"
-#: builtin/cat-file.c:560
+#: builtin/cat-file.c:562
msgid "show object type"
msgstr "извеждане на вида на обект"
-#: builtin/cat-file.c:561
+#: builtin/cat-file.c:563
msgid "show object size"
msgstr "извеждане на размера на обект"
-#: builtin/cat-file.c:563
+#: builtin/cat-file.c:565
msgid "exit with zero when there's no error"
msgstr "изход с 0, когато няма грешка"
-#: builtin/cat-file.c:564
+#: builtin/cat-file.c:566
msgid "pretty-print object's content"
msgstr "форматирано извеждане на съдържанието на обекта"
-#: builtin/cat-file.c:566
+#: builtin/cat-file.c:568
msgid "for blob objects, run textconv on object's content"
msgstr ""
"да се стартира програмата зададена в настройката „textconv“ за преобразуване "
"на съдържанието на обекта BLOB"
-#: builtin/cat-file.c:568
+#: builtin/cat-file.c:570
msgid "for blob objects, run filters on object's content"
msgstr ""
"да се стартират програмите за преобразуване на съдържанието на обектите BLOB"
-#: builtin/cat-file.c:569 git-submodule.sh:931
+#: builtin/cat-file.c:571 git-submodule.sh:878
msgid "blob"
msgstr "обект BLOB"
-#: builtin/cat-file.c:570
+#: builtin/cat-file.c:572
msgid "use a specific path for --textconv/--filters"
msgstr "опциите „--textconv“/„--filters“ изискват път"
-#: builtin/cat-file.c:572
+#: builtin/cat-file.c:574
msgid "allow -s and -t to work with broken/corrupt objects"
msgstr "позволяване на опциите „-s“ и „-t“ да работят с повредени обекти"
-#: builtin/cat-file.c:573
+#: builtin/cat-file.c:575
msgid "buffer --batch output"
msgstr "буфериране на изхода от „--batch“"
-#: builtin/cat-file.c:575
+#: builtin/cat-file.c:577
msgid "show info and content of objects fed from the standard input"
msgstr ""
"извеждане на информация и съдържание на обектите подадени на стандартния вход"
-#: builtin/cat-file.c:578
+#: builtin/cat-file.c:580
msgid "show info about objects fed from the standard input"
msgstr "извеждане на информация за обектите подадени на стандартния вход"
-#: builtin/cat-file.c:581
+#: builtin/cat-file.c:583
msgid "follow in-tree symlinks (used with --batch or --batch-check)"
msgstr ""
"следване на символните връзки сочещи в дървото (ползва се с „--batch“ или „--"
"batch-check“)"
-#: builtin/cat-file.c:583
+#: builtin/cat-file.c:585
msgid "show all objects with --batch or --batch-check"
msgstr "извеждане на всички обекти с „--batch“ или „--batch-check“"
@@ -6263,7 +6530,7 @@ msgstr "извеждане на всички атрибути, зададени
msgid "use .gitattributes only from the index"
msgstr "използване на файла „.gitattributes“ само от индекса"
-#: builtin/check-attr.c:22 builtin/check-ignore.c:24 builtin/hash-object.c:99
+#: builtin/check-attr.c:22 builtin/check-ignore.c:24 builtin/hash-object.c:100
msgid "read file names from stdin"
msgstr "изчитане на имената на файловете от стандартния вход"
@@ -6271,7 +6538,7 @@ msgstr "изчитане на имената на файловете от ста
msgid "terminate input and output records by a NUL character"
msgstr "разделяне на входните и изходните записи с нулевия знак „NUL“"
-#: builtin/check-ignore.c:20 builtin/checkout.c:1118 builtin/gc.c:358
+#: builtin/check-ignore.c:20 builtin/checkout.c:1106 builtin/gc.c:358
msgid "suppress progress reporting"
msgstr "без показване на напредъка"
@@ -6283,27 +6550,27 @@ msgstr "извеждане на несъвпадащите пътища"
msgid "ignore index when checking"
msgstr "прескачане на индекса при проверката"
-#: builtin/check-ignore.c:158
+#: builtin/check-ignore.c:159
msgid "cannot specify pathnames with --stdin"
msgstr "опцията „--stdin“ е несъвместима с имена на пътища"
-#: builtin/check-ignore.c:161
+#: builtin/check-ignore.c:162
msgid "-z only makes sense with --stdin"
msgstr "опцията „-z“ изисква „--stdin“"
-#: builtin/check-ignore.c:163
+#: builtin/check-ignore.c:164
msgid "no path specified"
msgstr "не е зададен път"
-#: builtin/check-ignore.c:167
+#: builtin/check-ignore.c:168
msgid "--quiet is only valid with a single pathname"
msgstr "опцията „--quiet“ изисква да е подаден точно един път"
-#: builtin/check-ignore.c:169
+#: builtin/check-ignore.c:170
msgid "cannot have both --quiet and --verbose"
msgstr "опциите „--quiet“ и „--verbose“ са несъвместими"
-#: builtin/check-ignore.c:172
+#: builtin/check-ignore.c:173
msgid "--non-matching is only valid with --verbose"
msgstr "опцията „--non-matching“ изисква „--verbose“"
@@ -6361,9 +6628,9 @@ msgid "write the content to temporary files"
msgstr "записване на съдържанието във временни файлове"
#: builtin/checkout-index.c:173 builtin/column.c:31
-#: builtin/submodule--helper.c:866 builtin/submodule--helper.c:869
-#: builtin/submodule--helper.c:875 builtin/submodule--helper.c:1237
-#: builtin/worktree.c:552
+#: builtin/submodule--helper.c:1203 builtin/submodule--helper.c:1206
+#: builtin/submodule--helper.c:1212 builtin/submodule--helper.c:1574
+#: builtin/worktree.c:570
msgid "string"
msgstr "НИЗ"
@@ -6408,81 +6675,81 @@ msgstr "някоя от необходимите версии липсва в п
msgid "path '%s': cannot merge"
msgstr "пътят „%s“ не може да бъде слян"
-#: builtin/checkout.c:232
+#: builtin/checkout.c:231
#, c-format
msgid "Unable to add merge result for '%s'"
msgstr "Резултатът за „%s“ не може да бъде слян"
-#: builtin/checkout.c:254 builtin/checkout.c:257 builtin/checkout.c:260
-#: builtin/checkout.c:263
+#: builtin/checkout.c:253 builtin/checkout.c:256 builtin/checkout.c:259
+#: builtin/checkout.c:262
#, c-format
msgid "'%s' cannot be used with updating paths"
msgstr "Опцията „%s“ е несъвместима с обновяването на пътища"
-#: builtin/checkout.c:266 builtin/checkout.c:269
+#: builtin/checkout.c:265 builtin/checkout.c:268
#, c-format
msgid "'%s' cannot be used with %s"
msgstr "Опцията „%s“ е несъвместима с „%s“"
-#: builtin/checkout.c:272
+#: builtin/checkout.c:271
#, c-format
msgid "Cannot update paths and switch to branch '%s' at the same time."
msgstr ""
"Невъзможно е едновременно да обновявате пътища и да преминете към клона „%s“."
-#: builtin/checkout.c:341 builtin/checkout.c:348
+#: builtin/checkout.c:340 builtin/checkout.c:347
#, c-format
msgid "path '%s' is unmerged"
msgstr "пътят „%s“ не е слят"
-#: builtin/checkout.c:506
+#: builtin/checkout.c:505
msgid "you need to resolve your current index first"
msgstr "първо трябва да коригирате индекса си"
-#: builtin/checkout.c:637
+#: builtin/checkout.c:636
#, c-format
msgid "Can not do reflog for '%s': %s\n"
msgstr "Журналът на указателите за „%s“ не може да се проследи: %s\n"
-#: builtin/checkout.c:678
+#: builtin/checkout.c:677
msgid "HEAD is now at"
msgstr "Указателят „HEAD“ в момента сочи към"
-#: builtin/checkout.c:682 builtin/clone.c:684
+#: builtin/checkout.c:681 builtin/clone.c:689
msgid "unable to update HEAD"
msgstr "Указателят „HEAD“ не може да бъде обновен"
-#: builtin/checkout.c:686
+#: builtin/checkout.c:685
#, c-format
msgid "Reset branch '%s'\n"
msgstr "Зануляване на клона „%s“\n"
-#: builtin/checkout.c:689
+#: builtin/checkout.c:688
#, c-format
msgid "Already on '%s'\n"
msgstr "Вече сте на „%s“\n"
-#: builtin/checkout.c:693
+#: builtin/checkout.c:692
#, c-format
msgid "Switched to and reset branch '%s'\n"
msgstr "Преминаване към клона „%s“ и зануляване на промените\n"
-#: builtin/checkout.c:695 builtin/checkout.c:1051
+#: builtin/checkout.c:694 builtin/checkout.c:1039
#, c-format
msgid "Switched to a new branch '%s'\n"
msgstr "Преминахте към новия клон „%s“\n"
-#: builtin/checkout.c:697
+#: builtin/checkout.c:696
#, c-format
msgid "Switched to branch '%s'\n"
msgstr "Преминахте към клона „%s“\n"
-#: builtin/checkout.c:748
+#: builtin/checkout.c:747
#, c-format
msgid " ... and %d more.\n"
msgstr "… и още %d.\n"
-#: builtin/checkout.c:754
+#: builtin/checkout.c:753
#, c-format
msgid ""
"Warning: you are leaving %d commit behind, not connected to\n"
@@ -6504,7 +6771,7 @@ msgstr[1] ""
"\n"
"%s\n"
-#: builtin/checkout.c:773
+#: builtin/checkout.c:772
#, c-format
msgid ""
"If you want to keep it by creating a new branch, this may be a good time\n"
@@ -6531,164 +6798,164 @@ msgstr[1] ""
" git branch ИМЕ_НА_НОВИЯ_КЛОН %s\n"
"\n"
-#: builtin/checkout.c:814
+#: builtin/checkout.c:804
msgid "internal error in revision walk"
msgstr "вътрешна грешка при обхождането на версиите"
-#: builtin/checkout.c:818
+#: builtin/checkout.c:808
msgid "Previous HEAD position was"
msgstr "Преди това „HEAD“ сочеше към"
-#: builtin/checkout.c:848 builtin/checkout.c:1046
+#: builtin/checkout.c:836 builtin/checkout.c:1034
msgid "You are on a branch yet to be born"
msgstr "В момента сте на клон, който предстои да бъде създаден"
-#: builtin/checkout.c:952
+#: builtin/checkout.c:940
#, c-format
msgid "only one reference expected, %d given."
msgstr "очакваше се един указател, а сте подали %d."
-#: builtin/checkout.c:992 builtin/worktree.c:247
+#: builtin/checkout.c:980 builtin/worktree.c:249
#, c-format
msgid "invalid reference: %s"
msgstr "неправилен указател: %s"
-#: builtin/checkout.c:1021
+#: builtin/checkout.c:1009
#, c-format
msgid "reference is not a tree: %s"
msgstr "указателят не сочи към обект-дърво: %s"
-#: builtin/checkout.c:1060
+#: builtin/checkout.c:1048
msgid "paths cannot be used with switching branches"
msgstr "задаването на път е несъвместимо с преминаването от един клон към друг"
-#: builtin/checkout.c:1063 builtin/checkout.c:1067
+#: builtin/checkout.c:1051 builtin/checkout.c:1055
#, c-format
msgid "'%s' cannot be used with switching branches"
msgstr "опцията „%s“ е несъвместима с преминаването от един клон към друг"
-#: builtin/checkout.c:1071 builtin/checkout.c:1074 builtin/checkout.c:1079
-#: builtin/checkout.c:1082
+#: builtin/checkout.c:1059 builtin/checkout.c:1062 builtin/checkout.c:1067
+#: builtin/checkout.c:1070
#, c-format
msgid "'%s' cannot be used with '%s'"
msgstr "опцията „%s“ е несъвместима с „%s“"
-#: builtin/checkout.c:1087
+#: builtin/checkout.c:1075
#, c-format
msgid "Cannot switch branch to a non-commit '%s'"
msgstr ""
"За да преминете към клон, подайте указател, който сочи към подаване. „%s“ "
"не е такъв"
-#: builtin/checkout.c:1119 builtin/checkout.c:1121 builtin/clone.c:114
-#: builtin/remote.c:166 builtin/remote.c:168 builtin/worktree.c:369
-#: builtin/worktree.c:371
+#: builtin/checkout.c:1107 builtin/checkout.c:1109 builtin/clone.c:116
+#: builtin/remote.c:166 builtin/remote.c:168 builtin/worktree.c:387
+#: builtin/worktree.c:389
msgid "branch"
msgstr "клон"
-#: builtin/checkout.c:1120
+#: builtin/checkout.c:1108
msgid "create and checkout a new branch"
msgstr "създаване и преминаване към нов клон"
-#: builtin/checkout.c:1122
+#: builtin/checkout.c:1110
msgid "create/reset and checkout a branch"
msgstr "създаване/зануляване на клон и преминаване към него"
-#: builtin/checkout.c:1123
+#: builtin/checkout.c:1111
msgid "create reflog for new branch"
msgstr "създаване на журнал на указателите за нов клон"
-#: builtin/checkout.c:1124 builtin/worktree.c:373
+#: builtin/checkout.c:1112 builtin/worktree.c:391
msgid "detach HEAD at named commit"
msgstr "отделяне на указателя „HEAD“ към указаното подаване"
-#: builtin/checkout.c:1125
+#: builtin/checkout.c:1113
msgid "set upstream info for new branch"
msgstr "задаване на кой клон бива следен при създаването на новия клон"
-#: builtin/checkout.c:1127
+#: builtin/checkout.c:1115
msgid "new-branch"
msgstr "НОВ_КЛОН"
-#: builtin/checkout.c:1127
+#: builtin/checkout.c:1115
msgid "new unparented branch"
msgstr "нов клон без родител"
-#: builtin/checkout.c:1128
+#: builtin/checkout.c:1116
msgid "checkout our version for unmerged files"
msgstr "изтегляне на вашата версия на неслетите файлове"
-#: builtin/checkout.c:1130
+#: builtin/checkout.c:1118
msgid "checkout their version for unmerged files"
msgstr "изтегляне на чуждата версия на неслетите файлове"
-#: builtin/checkout.c:1132
+#: builtin/checkout.c:1120
msgid "force checkout (throw away local modifications)"
msgstr "принудително изтегляне (вашите промени ще бъдат занулени)"
-#: builtin/checkout.c:1133
+#: builtin/checkout.c:1122
msgid "perform a 3-way merge with the new branch"
msgstr "извършване на тройно сливане с новия клон"
-#: builtin/checkout.c:1134 builtin/merge.c:238
+#: builtin/checkout.c:1124 builtin/merge.c:239
msgid "update ignored files (default)"
msgstr "обновяване на игнорираните файлове (стандартно)"
-#: builtin/checkout.c:1135 builtin/log.c:1496 parse-options.h:251
+#: builtin/checkout.c:1126 builtin/log.c:1499 parse-options.h:263
msgid "style"
msgstr "СТИЛ"
-#: builtin/checkout.c:1136
+#: builtin/checkout.c:1127
msgid "conflict style (merge or diff3)"
msgstr "действие при конфликт (сливане или тройна разлика)"
-#: builtin/checkout.c:1139
+#: builtin/checkout.c:1130
msgid "do not limit pathspecs to sparse entries only"
msgstr "без ограничаване на изброените пътища само до частично изтеглените"
-#: builtin/checkout.c:1141
+#: builtin/checkout.c:1132
msgid "second guess 'git checkout <no-such-branch>'"
msgstr ""
"опит за отгатване на име на клон след неуспешен опит с „git checkout "
"НЕСЪЩЕСТВУВАЩ_КЛОН“"
-#: builtin/checkout.c:1143
+#: builtin/checkout.c:1134
msgid "do not check if another worktree is holding the given ref"
msgstr "без проверка дали друго работно дърво държи указателя"
-#: builtin/checkout.c:1147 builtin/clone.c:81 builtin/fetch.c:137
-#: builtin/merge.c:235 builtin/pull.c:123 builtin/push.c:556
+#: builtin/checkout.c:1138 builtin/clone.c:83 builtin/fetch.c:150
+#: builtin/merge.c:236 builtin/pull.c:123 builtin/push.c:556
#: builtin/send-pack.c:173
msgid "force progress reporting"
msgstr "извеждане на напредъка"
-#: builtin/checkout.c:1177
+#: builtin/checkout.c:1168
msgid "-b, -B and --orphan are mutually exclusive"
msgstr "Опциите „-b“, „-B“ и „--orphan“ са несъвместими една с друга"
-#: builtin/checkout.c:1194
+#: builtin/checkout.c:1185
msgid "--track needs a branch name"
msgstr "опцията „--track“ изисква име на клон"
-#: builtin/checkout.c:1199
+#: builtin/checkout.c:1190
msgid "Missing branch name; try -b"
msgstr "Липсва име на клон, използвайте опцията „-b“"
-#: builtin/checkout.c:1235
+#: builtin/checkout.c:1226
msgid "invalid path specification"
msgstr "указан е неправилен път"
-#: builtin/checkout.c:1242
+#: builtin/checkout.c:1233
#, c-format
msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
msgstr "„%s“ не е подаване, затова от него не може да се създаде клон „%s“"
-#: builtin/checkout.c:1246
+#: builtin/checkout.c:1237
#, c-format
msgid "git checkout: --detach does not take a path argument '%s'"
msgstr "git checkout: опцията „--detach“ не приема аргумент-път „%s“"
-#: builtin/checkout.c:1250
+#: builtin/checkout.c:1241
msgid ""
"git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
"checking out of the index."
@@ -6787,7 +7054,7 @@ msgid "Remove %s [y/N]? "
msgstr "Да се изтрие ли „%s“? „y“ — да, „N“ — НЕ"
#
-#: builtin/clean.c:788 git-add--interactive.perl:1616
+#: builtin/clean.c:788 git-add--interactive.perl:1710
#, c-format
msgid "Bye.\n"
msgstr "Изход.\n"
@@ -6810,11 +7077,11 @@ msgstr ""
"help — този край\n"
"? — подсказка за шаблоните"
-#: builtin/clean.c:823 git-add--interactive.perl:1692
+#: builtin/clean.c:823 git-add--interactive.perl:1786
msgid "*** Commands ***"
msgstr "●●● Команди ●●●"
-#: builtin/clean.c:824 git-add--interactive.perl:1689
+#: builtin/clean.c:824 git-add--interactive.perl:1783
msgid "What now"
msgstr "Избор на следващо действие"
@@ -6844,8 +7111,8 @@ msgstr "интерактивно изтриване"
msgid "remove whole directories"
msgstr "изтриване на цели директории"
-#: builtin/clean.c:916 builtin/describe.c:530 builtin/describe.c:532
-#: builtin/grep.c:863 builtin/log.c:155 builtin/log.c:157
+#: builtin/clean.c:916 builtin/describe.c:533 builtin/describe.c:535
+#: builtin/grep.c:871 builtin/log.c:157 builtin/log.c:159
#: builtin/ls-files.c:548 builtin/name-rev.c:397 builtin/name-rev.c:399
#: builtin/show-ref.c:176
msgid "pattern"
@@ -6884,148 +7151,148 @@ msgstr ""
"което изисква някоя от опциите „-i“, „-n“ или „-f“. Няма да се извърши "
"изчистване"
-#: builtin/clone.c:39
+#: builtin/clone.c:40
msgid "git clone [<options>] [--] <repo> [<dir>]"
msgstr "git clone [ОПЦИЯ…] [--] ХРАНИЛИЩЕ [ДИРЕКТОРИЯ]"
-#: builtin/clone.c:83
+#: builtin/clone.c:85
msgid "don't create a checkout"
msgstr "без създаване на работно дърво"
-#: builtin/clone.c:84 builtin/clone.c:86 builtin/init-db.c:479
+#: builtin/clone.c:86 builtin/clone.c:88 builtin/init-db.c:479
msgid "create a bare repository"
msgstr "създаване на голо хранилище"
-#: builtin/clone.c:88
+#: builtin/clone.c:90
msgid "create a mirror repository (implies bare)"
msgstr ""
"създаване на хранилище-огледало (включва опцията „--bare“ за голо хранилище)"
-#: builtin/clone.c:90
+#: builtin/clone.c:92
msgid "to clone from a local repository"
msgstr "клониране от локално хранилище"
-#: builtin/clone.c:92
+#: builtin/clone.c:94
msgid "don't use local hardlinks, always copy"
msgstr "без твърди връзки, файловете винаги да се копират"
-#: builtin/clone.c:94
+#: builtin/clone.c:96
msgid "setup as shared repository"
msgstr "настройване за споделено хранилище"
-#: builtin/clone.c:96 builtin/clone.c:100
+#: builtin/clone.c:98 builtin/clone.c:102
msgid "pathspec"
msgstr "път"
-#: builtin/clone.c:96 builtin/clone.c:100
+#: builtin/clone.c:98 builtin/clone.c:102
msgid "initialize submodules in the clone"
msgstr "инициализиране на подмодулите при това клониране"
-#: builtin/clone.c:103
+#: builtin/clone.c:105
msgid "number of submodules cloned in parallel"
msgstr "брой подмодули, клонирани паралелно"
-#: builtin/clone.c:104 builtin/init-db.c:476
+#: builtin/clone.c:106 builtin/init-db.c:476
msgid "template-directory"
msgstr "директория с шаблони"
-#: builtin/clone.c:105 builtin/init-db.c:477
+#: builtin/clone.c:107 builtin/init-db.c:477
msgid "directory from which templates will be used"
msgstr "директория, която съдържа шаблоните, които да се ползват"
-#: builtin/clone.c:107 builtin/clone.c:109 builtin/submodule--helper.c:873
-#: builtin/submodule--helper.c:1240
+#: builtin/clone.c:109 builtin/clone.c:111 builtin/submodule--helper.c:1210
+#: builtin/submodule--helper.c:1577
msgid "reference repository"
msgstr "еталонно хранилище"
-#: builtin/clone.c:111
+#: builtin/clone.c:113
msgid "use --reference only while cloning"
msgstr "опцията „--reference“ може да се използва само при клониране"
-#: builtin/clone.c:112 builtin/column.c:27 builtin/merge-file.c:44
+#: builtin/clone.c:114 builtin/column.c:27 builtin/merge-file.c:44
msgid "name"
msgstr "ИМЕ"
-#: builtin/clone.c:113
+#: builtin/clone.c:115
msgid "use <name> instead of 'origin' to track upstream"
msgstr "използване на това ИМЕ вместо „origin“ при проследяване на клони"
-#: builtin/clone.c:115
+#: builtin/clone.c:117
msgid "checkout <branch> instead of the remote's HEAD"
msgstr "изтегляне на този КЛОН, а не соченият от отдалечения указател „HEAD“"
-#: builtin/clone.c:117
+#: builtin/clone.c:119
msgid "path to git-upload-pack on the remote"
msgstr "път към командата „git-upload-pack“ на отдалеченото хранилище"
-#: builtin/clone.c:118 builtin/fetch.c:138 builtin/grep.c:806
+#: builtin/clone.c:120 builtin/fetch.c:151 builtin/grep.c:813
#: builtin/pull.c:211
msgid "depth"
msgstr "ДЪЛБОЧИНА"
-#: builtin/clone.c:119
+#: builtin/clone.c:121
msgid "create a shallow clone of that depth"
msgstr "плитко клониране до тази ДЪЛБОЧИНА"
-#: builtin/clone.c:120 builtin/fetch.c:140 builtin/pack-objects.c:2991
-#: parse-options.h:142
+#: builtin/clone.c:122 builtin/fetch.c:153 builtin/pack-objects.c:3017
+#: parse-options.h:154
msgid "time"
msgstr "ВРЕМЕ"
-#: builtin/clone.c:121
+#: builtin/clone.c:123
msgid "create a shallow clone since a specific time"
msgstr "плитко клониране до момент във времето"
-#: builtin/clone.c:122 builtin/fetch.c:142
+#: builtin/clone.c:124 builtin/fetch.c:155
msgid "revision"
msgstr "версия"
-#: builtin/clone.c:123 builtin/fetch.c:143
+#: builtin/clone.c:125 builtin/fetch.c:156
msgid "deepen history of shallow clone, excluding rev"
msgstr "задълбочаване на историята на плитко хранилище до изключващ указател"
-#: builtin/clone.c:125
+#: builtin/clone.c:127
msgid "clone only one branch, HEAD or --branch"
msgstr ""
"клониране само на един клон — или сочения от отдалечения „HEAD“, или изрично "
"зададения с „--branch“"
-#: builtin/clone.c:127
+#: builtin/clone.c:129
msgid "don't clone any tags, and make later fetches not to follow them"
msgstr ""
"без клониране на етикети, като последващите доставяния няма да ги следят"
-#: builtin/clone.c:129
+#: builtin/clone.c:131
msgid "any cloned submodules will be shallow"
msgstr "всички клонирани подмодули ще са плитки"
-#: builtin/clone.c:130 builtin/init-db.c:485
+#: builtin/clone.c:132 builtin/init-db.c:485
msgid "gitdir"
msgstr "СЛУЖЕБНА_ДИРЕКТОРИЯ"
-#: builtin/clone.c:131 builtin/init-db.c:486
+#: builtin/clone.c:133 builtin/init-db.c:486
msgid "separate git dir from working tree"
msgstr "отделна СЛУЖЕБНА_ДИРЕКТОРИЯ за git извън работното дърво"
-#: builtin/clone.c:132
+#: builtin/clone.c:134
msgid "key=value"
msgstr "КЛЮЧ=СТОЙНОСТ"
-#: builtin/clone.c:133
+#: builtin/clone.c:135
msgid "set config inside the new repository"
msgstr "задаване на настройките на новото хранилище"
-#: builtin/clone.c:134 builtin/fetch.c:160 builtin/pull.c:224
+#: builtin/clone.c:136 builtin/fetch.c:173 builtin/pull.c:224
#: builtin/push.c:567
msgid "use IPv4 addresses only"
msgstr "само адреси IPv4"
-#: builtin/clone.c:136 builtin/fetch.c:162 builtin/pull.c:227
+#: builtin/clone.c:138 builtin/fetch.c:175 builtin/pull.c:227
#: builtin/push.c:569
msgid "use IPv6 addresses only"
msgstr "само адреси IPv6"
-#: builtin/clone.c:273
+#: builtin/clone.c:276
msgid ""
"No directory name could be guessed.\n"
"Please specify a directory on the command line"
@@ -7033,43 +7300,43 @@ msgstr ""
"Името на директорията не може да бъде отгатнато.\n"
"Задайте директорията изрично на командния ред"
-#: builtin/clone.c:326
+#: builtin/clone.c:329
#, c-format
msgid "info: Could not add alternate for '%s': %s\n"
msgstr ""
"ПРЕДУПРЕЖДЕНИЕ: не може да се добави алтернативен източник на „%s“: %s\n"
-#: builtin/clone.c:398
+#: builtin/clone.c:401
#, c-format
msgid "failed to open '%s'"
msgstr "директорията „%s“ не може да бъде отворена"
-#: builtin/clone.c:406
+#: builtin/clone.c:409
#, c-format
msgid "%s exists and is not a directory"
msgstr "„%s“ съществува и не е директория"
-#: builtin/clone.c:420
+#: builtin/clone.c:423
#, c-format
msgid "failed to stat %s\n"
msgstr "не може да бъде получена информация чрез „stat“ за „%s“\n"
-#: builtin/clone.c:442
+#: builtin/clone.c:445
#, c-format
msgid "failed to create link '%s'"
msgstr "връзката „%s“ не може да бъде създадена"
-#: builtin/clone.c:446
+#: builtin/clone.c:449
#, c-format
msgid "failed to copy file to '%s'"
msgstr "файлът не може да бъде копиран като „%s“"
-#: builtin/clone.c:472
+#: builtin/clone.c:475
#, c-format
msgid "done.\n"
msgstr "действието завърши.\n"
-#: builtin/clone.c:484
+#: builtin/clone.c:489
msgid ""
"Clone succeeded, but checkout failed.\n"
"You can inspect what was checked out with 'git status'\n"
@@ -7080,103 +7347,103 @@ msgstr ""
"клон в момента са изтеглени с командата „git status“. Можете да\n"
"завършите изтеглянето на клона с командата „git checkout -f HEAD“.\n"
-#: builtin/clone.c:561
+#: builtin/clone.c:566
#, c-format
msgid "Could not find remote branch %s to clone."
msgstr ""
"Клонът „%s“ от отдалеченото хранилище, което клонирате,\n"
"и който следва да бъде изтеглен, не съществува."
-#: builtin/clone.c:656
+#: builtin/clone.c:661
msgid "remote did not send all necessary objects"
msgstr "отдалеченото хранилище не изпрати всички необходими обекти."
-#: builtin/clone.c:672
+#: builtin/clone.c:677
#, c-format
msgid "unable to update %s"
msgstr "обектът „%s“ не може да бъде обновен"
-#: builtin/clone.c:721
+#: builtin/clone.c:726
msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
msgstr ""
"указателят „HEAD“ от отдалеченото хранилище сочи към нещо,\n"
"което не съществува. Не може да се изтегли определен клон.\n"
-#: builtin/clone.c:751
+#: builtin/clone.c:756
msgid "unable to checkout working tree"
msgstr "работното дърво не може да бъде подготвено"
-#: builtin/clone.c:796
+#: builtin/clone.c:801
msgid "unable to write parameters to config file"
msgstr "настройките не могат да бъдат записани в конфигурационния файл"
-#: builtin/clone.c:859
+#: builtin/clone.c:864
msgid "cannot repack to clean up"
msgstr "не може да се извърши пакетиране за изчистване на файловете"
-#: builtin/clone.c:861
+#: builtin/clone.c:866
msgid "cannot unlink temporary alternates file"
msgstr "временният файл за алтернативни обекти не може да бъде изтрит"
-#: builtin/clone.c:894 builtin/receive-pack.c:1945
+#: builtin/clone.c:906 builtin/receive-pack.c:1946
msgid "Too many arguments."
msgstr "Прекалено много аргументи."
-#: builtin/clone.c:898
+#: builtin/clone.c:910
msgid "You must specify a repository to clone."
msgstr "Трябва да укажете кое хранилище искате да клонирате."
-#: builtin/clone.c:911
+#: builtin/clone.c:923
#, c-format
msgid "--bare and --origin %s options are incompatible."
msgstr "опциите „--bare“ и „--origin %s“ са несъвместими."
-#: builtin/clone.c:914
+#: builtin/clone.c:926
msgid "--bare and --separate-git-dir are incompatible."
msgstr "опциите „--bare“ и „--separate-git-dir“ са несъвместими."
-#: builtin/clone.c:927
+#: builtin/clone.c:939
#, c-format
msgid "repository '%s' does not exist"
msgstr "не съществува хранилище „%s“"
-#: builtin/clone.c:933 builtin/fetch.c:1358
+#: builtin/clone.c:945 builtin/fetch.c:1455
#, c-format
msgid "depth %s is not a positive number"
msgstr "дълбочината трябва да е положително цяло число, а не „%s“"
-#: builtin/clone.c:943
+#: builtin/clone.c:955
#, c-format
msgid "destination path '%s' already exists and is not an empty directory."
msgstr "целевият път „%s“ съществува и не е празна директория."
-#: builtin/clone.c:953
+#: builtin/clone.c:965
#, c-format
msgid "working tree '%s' already exists."
msgstr "в „%s“ вече съществува работно дърво."
-#: builtin/clone.c:968 builtin/clone.c:979 builtin/difftool.c:270
-#: builtin/worktree.c:253 builtin/worktree.c:283
+#: builtin/clone.c:980 builtin/clone.c:1001 builtin/difftool.c:270
+#: builtin/worktree.c:255 builtin/worktree.c:285
#, c-format
msgid "could not create leading directories of '%s'"
msgstr "родителските директории на „%s“ не могат да бъдат създадени"
-#: builtin/clone.c:971
+#: builtin/clone.c:985
#, c-format
msgid "could not create work tree dir '%s'"
msgstr "работното дърво в „%s“ не може да бъде създадено."
-#: builtin/clone.c:983
+#: builtin/clone.c:1005
#, c-format
msgid "Cloning into bare repository '%s'...\n"
msgstr "Клониране и създаване на голо хранилище в „%s“…\n"
-#: builtin/clone.c:985
+#: builtin/clone.c:1007
#, c-format
msgid "Cloning into '%s'...\n"
msgstr "Клониране и създаване на хранилище в „%s“…\n"
-#: builtin/clone.c:1009
+#: builtin/clone.c:1031
msgid ""
"clone --recursive is not compatible with both --reference and --reference-if-"
"able"
@@ -7184,38 +7451,44 @@ msgstr ""
"Опцията „--recursive“ е несъвместима с опциите „--reference“ и „--reference-"
"if-able“"
-#: builtin/clone.c:1071
+#: builtin/clone.c:1093
msgid "--depth is ignored in local clones; use file:// instead."
msgstr ""
"При локално клониране опцията „--depth“ се прескача. Ползвайте схемата "
"„file://“."
-#: builtin/clone.c:1073
+#: builtin/clone.c:1095
msgid "--shallow-since is ignored in local clones; use file:// instead."
msgstr ""
"При локално клониране опцията „--shallow-since“ се прескача. Ползвайте "
"схемата „file://“."
-#: builtin/clone.c:1075
+#: builtin/clone.c:1097
msgid "--shallow-exclude is ignored in local clones; use file:// instead."
msgstr ""
"При локално клониране опцията „--shallow-exclude“ се прескача. Ползвайте "
"схемата „file://“."
-#: builtin/clone.c:1078
+#: builtin/clone.c:1099
+msgid "--filter is ignored in local clones; use file:// instead."
+msgstr ""
+"При локално клониране опцията „--filter“ се прескача. Ползвайте схемата "
+"„file://“."
+
+#: builtin/clone.c:1102
msgid "source repository is shallow, ignoring --local"
msgstr "клонираното хранилище е плитко, затова опцията „--local“ се прескача"
-#: builtin/clone.c:1083
+#: builtin/clone.c:1107
msgid "--local is ignored"
msgstr "опцията „--local“ се прескача"
-#: builtin/clone.c:1139 builtin/clone.c:1147
+#: builtin/clone.c:1169 builtin/clone.c:1177
#, c-format
msgid "Remote branch %s not found in upstream %s"
msgstr "Отдалеченият клон „%s“ липсва в клонираното хранилище „%s“"
-#: builtin/clone.c:1150
+#: builtin/clone.c:1180
msgid "You appear to have cloned an empty repository."
msgstr "Изглежда клонирахте празно хранилище."
@@ -7251,70 +7524,15 @@ msgstr "Поле в знаци между колоните"
msgid "--command must be the first argument"
msgstr "опцията „--command“ трябва да е първият аргумент"
-#: builtin/commit.c:39
+#: builtin/commit.c:37
msgid "git commit [<options>] [--] <pathspec>..."
msgstr "git commit [ОПЦИЯ…] [--] ПЪТ…"
-#: builtin/commit.c:44
+#: builtin/commit.c:42
msgid "git status [<options>] [--] <pathspec>..."
msgstr "git status [ОПЦИЯ…] [--] ПЪТ…"
-#: builtin/commit.c:49
-msgid ""
-"Your name and email address were configured automatically based\n"
-"on your username and hostname. Please check that they are accurate.\n"
-"You can suppress this message by setting them explicitly. Run the\n"
-"following command and follow the instructions in your editor to edit\n"
-"your configuration file:\n"
-"\n"
-" git config --global --edit\n"
-"\n"
-"After doing this, you may fix the identity used for this commit with:\n"
-"\n"
-" git commit --amend --reset-author\n"
-msgstr ""
-"Името и адресът за е-поща са настроени автоматично на базата на името на\n"
-"потребителя и името на машината. Проверете дали са верни. Можете да "
-"спрете\n"
-"това съобщение като изрично зададете стойностите. Изпълнете следната "
-"команда\n"
-"и следвайте инструкциите в текстовия ви редактор, за да редактирате\n"
-"конфигурационния файл:\n"
-"\n"
-" git config --global --edit\n"
-"\n"
-"След като направите това, можете да коригирате информацията за автора на\n"
-"текущото подаване чрез:\n"
-"\n"
-" git commit --amend --reset-author\n"
-
-#: builtin/commit.c:62
-msgid ""
-"Your name and email address were configured automatically based\n"
-"on your username and hostname. Please check that they are accurate.\n"
-"You can suppress this message by setting them explicitly:\n"
-"\n"
-" git config --global user.name \"Your Name\"\n"
-" git config --global user.email you@example.com\n"
-"\n"
-"After doing this, you may fix the identity used for this commit with:\n"
-"\n"
-" git commit --amend --reset-author\n"
-msgstr ""
-"Името и адресът за е-поща са настроени автоматично на базата на името на\n"
-"потребителя и името на машината. Проверете дали са верни. Можете да "
-"спрете\n"
-"това съобщение като изрично зададете стойностите:\n"
-"\n"
-" git config --global user.name \"Вашето Име\"\n"
-" git config --global user.email пенчо@example.com\n"
-"\n"
-"След като направите това, можете да коригирате информацията за автора на\n"
-"текущото подаване чрез:\n"
-"\n"
-" git commit --amend --reset-author\n"
-
-#: builtin/commit.c:74
+#: builtin/commit.c:47
msgid ""
"You asked to amend the most recent commit, but doing so would make\n"
"it empty. You can repeat your command with --allow-empty, or you can\n"
@@ -7326,7 +7544,7 @@ msgstr ""
"с опцията „--allow-empty“, или да го изтриете от историята с командата:\n"
"„git reset HEAD^“.\n"
-#: builtin/commit.c:79
+#: builtin/commit.c:52
msgid ""
"The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
"If you wish to commit it anyway, use:\n"
@@ -7341,11 +7559,11 @@ msgstr ""
" git commit --allow-empty\n"
"\n"
-#: builtin/commit.c:86
+#: builtin/commit.c:59
msgid "Otherwise, please use 'git reset'\n"
msgstr "В противен случай използвайте командата „git reset“\n"
-#: builtin/commit.c:89
+#: builtin/commit.c:62
msgid ""
"If you wish to skip this commit, use:\n"
"\n"
@@ -7361,61 +7579,61 @@ msgstr ""
"Чрез командата „git cherry-pick --continue“ ще продължите отбирането на\n"
"останалите подавания.\n"
-#: builtin/commit.c:318
+#: builtin/commit.c:284
msgid "failed to unpack HEAD tree object"
msgstr "върховото дърво (HEAD tree object) не може да бъде извадено от пакет"
-#: builtin/commit.c:359
+#: builtin/commit.c:325
msgid "unable to create temporary index"
msgstr "временният индекс не може да бъде създаден"
-#: builtin/commit.c:365
+#: builtin/commit.c:331
msgid "interactive add failed"
msgstr "неуспешно интерактивно добавяне"
-#: builtin/commit.c:378
+#: builtin/commit.c:344
msgid "unable to update temporary index"
msgstr "временният индекс не може да бъде обновен"
-#: builtin/commit.c:380
+#: builtin/commit.c:346
msgid "Failed to update main cache tree"
msgstr "Дървото на основния кеш не може да бъде обновено"
-#: builtin/commit.c:405 builtin/commit.c:429 builtin/commit.c:478
+#: builtin/commit.c:371 builtin/commit.c:395 builtin/commit.c:444
msgid "unable to write new_index file"
msgstr "новият индекс не може да бъде записан"
-#: builtin/commit.c:461
+#: builtin/commit.c:427
msgid "cannot do a partial commit during a merge."
msgstr "по време на сливане не може да се извърши частично подаване."
-#: builtin/commit.c:463
+#: builtin/commit.c:429
msgid "cannot do a partial commit during a cherry-pick."
msgstr "по време на отбиране не може да се извърши частично подаване."
-#: builtin/commit.c:471
+#: builtin/commit.c:437
msgid "cannot read the index"
msgstr "индексът не може да бъде прочетен"
-#: builtin/commit.c:490
+#: builtin/commit.c:456
msgid "unable to write temporary index file"
msgstr "временният индекс не може да бъде записан"
-#: builtin/commit.c:587
+#: builtin/commit.c:553
#, c-format
msgid "commit '%s' lacks author header"
msgstr "заглавната част за автор в подаването „%s“ липсва"
-#: builtin/commit.c:589
+#: builtin/commit.c:555
#, c-format
msgid "commit '%s' has malformed author line"
msgstr "заглавната част за автор в подаването „%s“ е неправилна"
-#: builtin/commit.c:608
+#: builtin/commit.c:574
msgid "malformed --author parameter"
msgstr "неправилен параметър към опцията „--author“"
-#: builtin/commit.c:660
+#: builtin/commit.c:626
msgid ""
"unable to select a comment character that is not used\n"
"in the current commit message"
@@ -7423,38 +7641,38 @@ msgstr ""
"не може да се избере знак за коментар — в текущото съобщение за подаване са "
"използвани всички подобни знаци"
-#: builtin/commit.c:697 builtin/commit.c:730 builtin/commit.c:1114
+#: builtin/commit.c:663 builtin/commit.c:696 builtin/commit.c:1024
#, c-format
msgid "could not lookup commit %s"
msgstr "следното подаване не може да бъде открито: %s"
-#: builtin/commit.c:709 builtin/shortlog.c:309
+#: builtin/commit.c:675 builtin/shortlog.c:309
#, c-format
msgid "(reading log message from standard input)\n"
msgstr "(изчитане на съобщението за подаване от стандартния вход)\n"
-#: builtin/commit.c:711
+#: builtin/commit.c:677
msgid "could not read log from standard input"
msgstr "съобщението за подаване не бе прочетено стандартния вход"
-#: builtin/commit.c:715
+#: builtin/commit.c:681
#, c-format
msgid "could not read log file '%s'"
msgstr "файлът със съобщението за подаване „%s“ не може да бъде прочетен"
-#: builtin/commit.c:742 builtin/commit.c:750
+#: builtin/commit.c:710 builtin/commit.c:718
msgid "could not read SQUASH_MSG"
msgstr "съобщението за смачкване SQUASH_MSG не може да бъде прочетено"
-#: builtin/commit.c:747
+#: builtin/commit.c:715
msgid "could not read MERGE_MSG"
msgstr "съобщението за сливане MERGE_MSG не може да бъде прочетено"
-#: builtin/commit.c:801
+#: builtin/commit.c:769
msgid "could not write commit template"
msgstr "шаблонът за подаване не може да бъде запазен"
-#: builtin/commit.c:819
+#: builtin/commit.c:787
#, c-format
msgid ""
"\n"
@@ -7469,7 +7687,7 @@ msgstr ""
" %s\n"
"и опитайте отново.\n"
-#: builtin/commit.c:824
+#: builtin/commit.c:792
#, c-format
msgid ""
"\n"
@@ -7485,7 +7703,7 @@ msgstr ""
" %s\n"
"и опитайте отново.\n"
-#: builtin/commit.c:837
+#: builtin/commit.c:805
#, c-format
msgid ""
"Please enter the commit message for your changes. Lines starting\n"
@@ -7494,7 +7712,7 @@ msgstr ""
"Въведете съобщението за подаване на промените. Редовете, които започват\n"
"с „%c“, ще бъдат пропуснати, а празно съобщение преустановява подаването.\n"
-#: builtin/commit.c:844
+#: builtin/commit.c:813
#, c-format
msgid ""
"Please enter the commit message for your changes. Lines starting\n"
@@ -7505,150 +7723,154 @@ msgstr ""
"с „%c“, също ще бъдат включени — може да ги изтриете вие. Празно \n"
"съобщение преустановява подаването.\n"
-#: builtin/commit.c:861
+#: builtin/commit.c:830
#, c-format
msgid "%sAuthor: %.*s <%.*s>"
msgstr "%sАвтор: %.*s <%.*s>"
-#: builtin/commit.c:869
+#: builtin/commit.c:838
#, c-format
msgid "%sDate: %s"
msgstr "%sДата: %s"
-#: builtin/commit.c:876
+#: builtin/commit.c:845
#, c-format
msgid "%sCommitter: %.*s <%.*s>"
msgstr "%sПодаващ: %.*s <%.*s>"
-#: builtin/commit.c:893
+#: builtin/commit.c:862
msgid "Cannot read index"
msgstr "Индексът не може да бъде прочетен"
-#: builtin/commit.c:959
+#: builtin/commit.c:928
msgid "Error building trees"
msgstr "Грешка при изграждане на дърветата"
-#: builtin/commit.c:973 builtin/tag.c:252
+#: builtin/commit.c:942 builtin/tag.c:256
#, c-format
msgid "Please supply the message using either -m or -F option.\n"
msgstr "Подайте съобщението с някоя от опциите „-m“ или „-F“.\n"
-#: builtin/commit.c:1076
+#: builtin/commit.c:986
#, c-format
msgid "--author '%s' is not 'Name <email>' and matches no existing author"
msgstr ""
"Опцията „--author '%s'“ не отговаря на форма̀та „Име <е-поща>“ и не съвпада с "
"никой автор"
-#: builtin/commit.c:1090
+#: builtin/commit.c:1000
#, c-format
msgid "Invalid ignored mode '%s'"
msgstr "Неправилен режим за игнорираните файлове: „%s“"
-#: builtin/commit.c:1104 builtin/commit.c:1349
+#: builtin/commit.c:1014 builtin/commit.c:1264
#, c-format
msgid "Invalid untracked files mode '%s'"
msgstr "Неправилен режим за неследените файлове: „%s“"
-#: builtin/commit.c:1142
+#: builtin/commit.c:1052
msgid "--long and -z are incompatible"
msgstr "Опциите „--long“ и „-z“ са несъвместими."
-#: builtin/commit.c:1172
+#: builtin/commit.c:1085
msgid "Using both --reset-author and --author does not make sense"
msgstr "Опциите „--reset-author“ и „--author“ са несъвместими."
-#: builtin/commit.c:1181
+#: builtin/commit.c:1094
msgid "You have nothing to amend."
msgstr "Няма какво да бъде поправено."
-#: builtin/commit.c:1184
+#: builtin/commit.c:1097
msgid "You are in the middle of a merge -- cannot amend."
msgstr "В момента се извършва сливане, не можете да поправяте."
-#: builtin/commit.c:1186
+#: builtin/commit.c:1099
msgid "You are in the middle of a cherry-pick -- cannot amend."
msgstr "В момента се извършва отбиране на подаване, не можете да поправяте."
-#: builtin/commit.c:1189
+#: builtin/commit.c:1102
msgid "Options --squash and --fixup cannot be used together"
msgstr "Опциите „--squash“ и „--fixup“ са несъвместими."
-#: builtin/commit.c:1199
+#: builtin/commit.c:1112
msgid "Only one of -c/-C/-F/--fixup can be used."
msgstr "Опциите „-c“, „-C“, „-F“ и „--fixup““ са несъвместими."
-#: builtin/commit.c:1201
-msgid "Option -m cannot be combined with -c/-C/-F/--fixup."
-msgstr "Опцията „-m“ е несъвместима с „-c“, „-C“, „-F“ и „--fixup“."
+#: builtin/commit.c:1114
+msgid "Option -m cannot be combined with -c/-C/-F."
+msgstr "Опцията „-m“ е несъвместима с „-c“, „-C“ и „-F“."
-#: builtin/commit.c:1209
+#: builtin/commit.c:1122
msgid "--reset-author can be used only with -C, -c or --amend."
msgstr ""
"Опцията „--reset-author“ може да се използва само заедно с „-C“, „-c“ или\n"
"„--amend“."
-#: builtin/commit.c:1226
+#: builtin/commit.c:1139
msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
msgstr ""
"Опциите „--include“, „--only“, „--all“, „--interactive“ и „--patch“ са\n"
"несъвместими."
-#: builtin/commit.c:1228
+#: builtin/commit.c:1141
msgid "No paths with --include/--only does not make sense."
msgstr "Опциите „--include“ и „--only“ изискват аргументи."
-#: builtin/commit.c:1240 builtin/tag.c:535
+#: builtin/commit.c:1155 builtin/tag.c:542
#, c-format
msgid "Invalid cleanup mode %s"
msgstr "Несъществуващ режим на изчистване „%s“"
-#: builtin/commit.c:1245
+#: builtin/commit.c:1160
msgid "Paths with -a does not make sense."
msgstr "Опцията „-a“ е несъвместима със задаването на пътища."
-#: builtin/commit.c:1363 builtin/commit.c:1648
+#: builtin/commit.c:1278 builtin/commit.c:1443
msgid "show status concisely"
msgstr "кратка информация за състоянието"
-#: builtin/commit.c:1365 builtin/commit.c:1650
+#: builtin/commit.c:1280 builtin/commit.c:1445
msgid "show branch information"
msgstr "информация за клоните"
-#: builtin/commit.c:1367
+#: builtin/commit.c:1282
msgid "show stash information"
msgstr "информация за скатаното"
-#: builtin/commit.c:1369
+#: builtin/commit.c:1284 builtin/commit.c:1447
+msgid "compute full ahead/behind values"
+msgstr "изчисляване на точните стойности напред/назад"
+
+#: builtin/commit.c:1286
msgid "version"
msgstr "версия"
-#: builtin/commit.c:1369 builtin/commit.c:1652 builtin/push.c:542
-#: builtin/worktree.c:523
+#: builtin/commit.c:1286 builtin/commit.c:1449 builtin/push.c:542
+#: builtin/worktree.c:541
msgid "machine-readable output"
msgstr "формат на изхода за четене от програма"
-#: builtin/commit.c:1372 builtin/commit.c:1654
+#: builtin/commit.c:1289 builtin/commit.c:1451
msgid "show status in long format (default)"
msgstr "подробна информация за състоянието (стандартно)"
-#: builtin/commit.c:1375 builtin/commit.c:1657
+#: builtin/commit.c:1292 builtin/commit.c:1454
msgid "terminate entries with NUL"
msgstr "разделяне на елементите с нулевия знак „NUL“"
-#: builtin/commit.c:1377 builtin/commit.c:1381 builtin/commit.c:1660
-#: builtin/fast-export.c:999 builtin/fast-export.c:1002 builtin/tag.c:390
+#: builtin/commit.c:1294 builtin/commit.c:1298 builtin/commit.c:1457
+#: builtin/fast-export.c:999 builtin/fast-export.c:1002 builtin/tag.c:396
msgid "mode"
msgstr "РЕЖИМ"
-#: builtin/commit.c:1378 builtin/commit.c:1660
+#: builtin/commit.c:1295 builtin/commit.c:1457
msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
msgstr ""
"извеждане на неследените файлове. Възможните РЕЖИМи са „all“ (подробна "
"информация), „normal“ (кратка информация), „no“ (без неследените файлове). "
"Стандартният РЕЖИМ е: „all“."
-#: builtin/commit.c:1382
+#: builtin/commit.c:1299
msgid ""
"show ignored files, optional modes: traditional, matching, no. (Default: "
"traditional)"
@@ -7657,11 +7879,11 @@ msgstr ""
"„traditional“ (традиционен), „matching“ (напасващи), „no“ (без игнорираните "
"файлове). Стандартният РЕЖИМ е: „traditional“."
-#: builtin/commit.c:1384 parse-options.h:155
+#: builtin/commit.c:1301 parse-options.h:167
msgid "when"
msgstr "КОГА"
-#: builtin/commit.c:1385
+#: builtin/commit.c:1302
msgid ""
"ignore changes to submodules, optional when: all, dirty, untracked. "
"(Default: all)"
@@ -7670,216 +7892,190 @@ msgstr ""
"една от „all“ (всички), „dirty“ (тези с неподадени промени), "
"„untracked“ (неследени)"
-#: builtin/commit.c:1387
+#: builtin/commit.c:1304
msgid "list untracked files in columns"
msgstr "извеждане на неследените файлове в колони"
-#: builtin/commit.c:1406
+#: builtin/commit.c:1323
msgid "Unsupported combination of ignored and untracked-files arguments"
msgstr "Неподдържана комбинация от аргументи за игнорирани и неследени файлове"
-#: builtin/commit.c:1469
-msgid "couldn't look up newly created commit"
-msgstr "току що създаденото подаване не може да бъде открито"
-
-#: builtin/commit.c:1471
-msgid "could not parse newly created commit"
-msgstr "току що създаденото подаване не може да бъде анализирано"
-
-#: builtin/commit.c:1516
-msgid "unable to resolve HEAD after creating commit"
-msgstr ""
-"състоянието сочено от указателя „HEAD“ не може да бъде открито след "
-"подаването"
-
-#: builtin/commit.c:1518
-msgid "detached HEAD"
-msgstr "несвързан връх „HEAD“"
-
-#: builtin/commit.c:1521
-msgid " (root-commit)"
-msgstr " (начално подаване)"
-
-#: builtin/commit.c:1618
+#: builtin/commit.c:1413
msgid "suppress summary after successful commit"
msgstr "без информация след успешно подаване"
-#: builtin/commit.c:1619
+#: builtin/commit.c:1414
msgid "show diff in commit message template"
msgstr "добавяне на разликата към шаблона за съобщението при подаване"
-#: builtin/commit.c:1621
+#: builtin/commit.c:1416
msgid "Commit message options"
msgstr "Опции за съобщението при подаване"
-#: builtin/commit.c:1622 builtin/tag.c:388
+#: builtin/commit.c:1417 builtin/tag.c:393
msgid "read message from file"
msgstr "взимане на съобщението от ФАЙЛ"
-#: builtin/commit.c:1623
+#: builtin/commit.c:1418
msgid "author"
msgstr "АВТОР"
-#: builtin/commit.c:1623
+#: builtin/commit.c:1418
msgid "override author for commit"
msgstr "задаване на АВТОР за подаването"
-#: builtin/commit.c:1624 builtin/gc.c:359
+#: builtin/commit.c:1419 builtin/gc.c:359
msgid "date"
msgstr "ДАТА"
-#: builtin/commit.c:1624
+#: builtin/commit.c:1419
msgid "override date for commit"
msgstr "задаване на ДАТА за подаването"
-#: builtin/commit.c:1625 builtin/merge.c:225 builtin/notes.c:402
-#: builtin/notes.c:565 builtin/tag.c:386
+#: builtin/commit.c:1420 builtin/merge.c:226 builtin/notes.c:402
+#: builtin/notes.c:565 builtin/tag.c:391
msgid "message"
msgstr "СЪОБЩЕНИЕ"
-#: builtin/commit.c:1625
+#: builtin/commit.c:1420
msgid "commit message"
msgstr "СЪОБЩЕНИЕ при подаване"
-#: builtin/commit.c:1626 builtin/commit.c:1627 builtin/commit.c:1628
-#: builtin/commit.c:1629 parse-options.h:257 ref-filter.h:92
+#: builtin/commit.c:1421 builtin/commit.c:1422 builtin/commit.c:1423
+#: builtin/commit.c:1424 parse-options.h:269 ref-filter.h:92
msgid "commit"
msgstr "ПОДАВАНЕ"
-#: builtin/commit.c:1626
+#: builtin/commit.c:1421
msgid "reuse and edit message from specified commit"
msgstr "преизползване и редактиране на съобщението от указаното ПОДАВАНЕ"
-#: builtin/commit.c:1627
+#: builtin/commit.c:1422
msgid "reuse message from specified commit"
msgstr "преизползване на съобщението от указаното ПОДАВАНЕ"
-#: builtin/commit.c:1628
+#: builtin/commit.c:1423
msgid "use autosquash formatted message to fixup specified commit"
msgstr ""
"използване на автоматичното съобщение при смачкване за вкарване на указаното "
"ПОДАВАНЕ в предното без следа"
-#: builtin/commit.c:1629
+#: builtin/commit.c:1424
msgid "use autosquash formatted message to squash specified commit"
msgstr ""
"използване на автоматичното съобщение при смачкване за смачкване на "
"указаното ПОДАВАНЕ в предното"
-#: builtin/commit.c:1630
+#: builtin/commit.c:1425
msgid "the commit is authored by me now (used with -C/-c/--amend)"
msgstr ""
"смяна на автора да съвпада с подаващия (използва се с „-C“/„-c“/„--amend“)"
-#: builtin/commit.c:1631 builtin/log.c:1443 builtin/merge.c:239
+#: builtin/commit.c:1426 builtin/log.c:1446 builtin/merge.c:240
#: builtin/pull.c:149 builtin/revert.c:105
msgid "add Signed-off-by:"
msgstr "добавяне на поле за подпис — „Signed-off-by:“"
-#: builtin/commit.c:1632
+#: builtin/commit.c:1427
msgid "use specified template file"
msgstr "използване на указания шаблонен ФАЙЛ"
-#: builtin/commit.c:1633
+#: builtin/commit.c:1428
msgid "force edit of commit"
msgstr "редактиране на подаване"
-#: builtin/commit.c:1634
+#: builtin/commit.c:1429
msgid "default"
msgstr "стандартно"
-#: builtin/commit.c:1634 builtin/tag.c:391
+#: builtin/commit.c:1429 builtin/tag.c:397
msgid "how to strip spaces and #comments from message"
msgstr "кои празни знаци и #коментари да се махат от съобщенията"
-#: builtin/commit.c:1635
+#: builtin/commit.c:1430
msgid "include status in commit message template"
msgstr "вмъкване на състоянието в шаблона за съобщението при подаване"
-#: builtin/commit.c:1637 builtin/merge.c:237 builtin/pull.c:179
+#: builtin/commit.c:1432 builtin/merge.c:238 builtin/pull.c:179
#: builtin/revert.c:113
msgid "GPG sign commit"
msgstr "подписване на подаването с GPG"
-#: builtin/commit.c:1640
+#: builtin/commit.c:1435
msgid "Commit contents options"
msgstr "Опции за избор на файлове при подаване"
-#: builtin/commit.c:1641
+#: builtin/commit.c:1436
msgid "commit all changed files"
msgstr "подаване на всички променени файлове"
-#: builtin/commit.c:1642
+#: builtin/commit.c:1437
msgid "add specified files to index for commit"
msgstr "добавяне на указаните файлове към индекса за подаване"
-#: builtin/commit.c:1643
+#: builtin/commit.c:1438
msgid "interactively add files"
msgstr "интерактивно добавяне на файлове"
-#: builtin/commit.c:1644
+#: builtin/commit.c:1439
msgid "interactively add changes"
msgstr "интерактивно добавяне на промени"
-#: builtin/commit.c:1645
+#: builtin/commit.c:1440
msgid "commit only specified files"
msgstr "подаване само на указаните файлове"
-#: builtin/commit.c:1646
+#: builtin/commit.c:1441
msgid "bypass pre-commit and commit-msg hooks"
msgstr ""
"без изпълнение на куките преди подаване и при промяна на съобщението за "
"подаване (pre-commit и commit-msg)"
-#: builtin/commit.c:1647
+#: builtin/commit.c:1442
msgid "show what would be committed"
msgstr "отпечатване на това, което би било подадено"
-#: builtin/commit.c:1658
+#: builtin/commit.c:1455
msgid "amend previous commit"
msgstr "поправяне на предишното подаване"
-#: builtin/commit.c:1659
+#: builtin/commit.c:1456
msgid "bypass post-rewrite hook"
msgstr "без изпълнение на куката след презаписване (post-rewrite)"
-#: builtin/commit.c:1664
+#: builtin/commit.c:1461
msgid "ok to record an empty change"
msgstr "позволяване на празни подавания"
-#: builtin/commit.c:1666
+#: builtin/commit.c:1463
msgid "ok to record a change with an empty message"
msgstr "позволяване на подавания с празни съобщения"
-#: builtin/commit.c:1696
-msgid "could not parse HEAD commit"
-msgstr "върховото подаване „HEAD“ не може да бъде прочетено"
-
-#: builtin/commit.c:1741
+#: builtin/commit.c:1536
#, c-format
msgid "Corrupt MERGE_HEAD file (%s)"
msgstr "Повреден файл за върха за сливането „MERGE_HEAD“ (%s)"
-#: builtin/commit.c:1748
+#: builtin/commit.c:1543
msgid "could not read MERGE_MODE"
msgstr "режимът на сливане „MERGE_MODE“ не може да бъде прочетен"
-#: builtin/commit.c:1767
+#: builtin/commit.c:1562
#, c-format
msgid "could not read commit message: %s"
msgstr "съобщението за подаване не може да бъде прочетено: %s"
-#: builtin/commit.c:1778
+#: builtin/commit.c:1573
#, c-format
msgid "Aborting commit due to empty commit message.\n"
msgstr "Неизвършване на подаване поради празно съобщение.\n"
-#: builtin/commit.c:1783
+#: builtin/commit.c:1578
#, c-format
msgid "Aborting commit; you did not edit the message.\n"
msgstr "Неизвършване на подаване поради нередактирано съобщение.\n"
-#: builtin/commit.c:1831
+#: builtin/commit.c:1613
msgid ""
"Repository has been updated, but unable to write\n"
"new_index file. Check that disk is not full and quota is\n"
@@ -8080,7 +8276,7 @@ msgstr "извеждане на размерите на обектите във
#: builtin/describe.c:22
msgid "git describe [<options>] [<commit-ish>...]"
-msgstr "git describe [ОПЦИЯ…] УКАЗАТЕЛ_КЪМ_ПОДАВАНЕ…"
+msgstr "git describe [ОПЦИЯ…] [УКАЗАТЕЛ_КЪМ_ПОДАВАНЕ…]"
#: builtin/describe.c:23
msgid "git describe [<options>] --dirty"
@@ -8113,22 +8309,22 @@ msgstr "в анотирания етикет „%s“ липсва вграде
msgid "tag '%s' is really '%s' here"
msgstr "етикетът „%s“ тук е всъщност „%s“"
-#: builtin/describe.c:314
+#: builtin/describe.c:317
#, c-format
msgid "no tag exactly matches '%s'"
msgstr "никой етикет не напасва точно „%s“"
-#: builtin/describe.c:316
+#: builtin/describe.c:319
#, c-format
msgid "No exact match on refs or tags, searching to describe\n"
msgstr "Никоя версия и етикет не напасват точно. Търси се по описание\n"
-#: builtin/describe.c:363
+#: builtin/describe.c:366
#, c-format
msgid "finished search at %s\n"
msgstr "търсенето приключи при „%s“\n"
-#: builtin/describe.c:389
+#: builtin/describe.c:392
#, c-format
msgid ""
"No annotated tags can describe '%s'.\n"
@@ -8137,7 +8333,7 @@ msgstr ""
"Никой анотиран етикет не описва „%s“.\n"
"Съществуват и неанотирани етикети. Пробвайте с опцията „--tags“."
-#: builtin/describe.c:393
+#: builtin/describe.c:396
#, c-format
msgid ""
"No tags can describe '%s'.\n"
@@ -8146,12 +8342,12 @@ msgstr ""
"Никой етикет не описва „%s“.\n"
"Пробвайте с опцията „--always“ или създайте етикети."
-#: builtin/describe.c:423
+#: builtin/describe.c:426
#, c-format
msgid "traversed %lu commits\n"
msgstr "претърсени са %lu подавания\n"
-#: builtin/describe.c:426
+#: builtin/describe.c:429
#, c-format
msgid ""
"more than %i tags found; listed %i most recent\n"
@@ -8160,93 +8356,93 @@ msgstr ""
"открити са над %i етикета, изведени са последните %i,\n"
"търсенето бе прекратено при „%s“.\n"
-#: builtin/describe.c:494
+#: builtin/describe.c:497
#, c-format
msgid "describe %s\n"
msgstr "описание на „%s“\n"
-#: builtin/describe.c:497 builtin/log.c:500
+#: builtin/describe.c:500 builtin/log.c:502
#, c-format
msgid "Not a valid object name %s"
msgstr "Неправилно име на обект „%s“"
-#: builtin/describe.c:505
+#: builtin/describe.c:508
#, c-format
msgid "%s is neither a commit nor blob"
msgstr "„%s“ не е нито подаване, нито обект BLOB"
-#: builtin/describe.c:519
+#: builtin/describe.c:522
msgid "find the tag that comes after the commit"
msgstr "откриване на етикета, който следва подаване"
-#: builtin/describe.c:520
+#: builtin/describe.c:523
msgid "debug search strategy on stderr"
msgstr ""
"извеждане на информация за трасиране на стратегията за търсене на "
"стандартната грешка"
-#: builtin/describe.c:521
+#: builtin/describe.c:524
msgid "use any ref"
msgstr "използване на произволен указател"
-#: builtin/describe.c:522
+#: builtin/describe.c:525
msgid "use any tag, even unannotated"
msgstr "използване на всеки етикет — включително и неанотираните"
-#: builtin/describe.c:523
+#: builtin/describe.c:526
msgid "always use long format"
msgstr "винаги да се ползва дългият формат"
-#: builtin/describe.c:524
+#: builtin/describe.c:527
msgid "only follow first parent"
msgstr "проследяване само на първия родител"
-#: builtin/describe.c:527
+#: builtin/describe.c:530
msgid "only output exact matches"
msgstr "извеждане само на точните съвпадения"
-#: builtin/describe.c:529
+#: builtin/describe.c:532
msgid "consider <n> most recent tags (default: 10)"
msgstr "да се търси само в този БРОЙ последни етикети (стандартно: 10)"
-#: builtin/describe.c:531
+#: builtin/describe.c:534
msgid "only consider tags matching <pattern>"
msgstr "да се търси само измежду етикетите напасващи този ШАБЛОН"
-#: builtin/describe.c:533
+#: builtin/describe.c:536
msgid "do not consider tags matching <pattern>"
msgstr "да не се търси измежду етикетите напасващи този ШАБЛОН"
-#: builtin/describe.c:535 builtin/name-rev.c:406
+#: builtin/describe.c:538 builtin/name-rev.c:406
msgid "show abbreviated commit object as fallback"
msgstr "извеждане на съкратено име на обект като резервен вариант"
-#: builtin/describe.c:536 builtin/describe.c:539
+#: builtin/describe.c:539 builtin/describe.c:542
msgid "mark"
msgstr "МАРКЕР"
-#: builtin/describe.c:537
+#: builtin/describe.c:540
msgid "append <mark> on dirty working tree (default: \"-dirty\")"
msgstr "добавяне на такъв МАРКЕР на работното дърво (стандартно е „-dirty“)"
-#: builtin/describe.c:540
+#: builtin/describe.c:543
msgid "append <mark> on broken working tree (default: \"-broken\")"
msgstr ""
"добавяне на такъв МАРКЕР на счупеното работно дърво (стандартно е „-broken“)"
-#: builtin/describe.c:558
+#: builtin/describe.c:561
msgid "--long is incompatible with --abbrev=0"
msgstr "Опциите „--long“ и „--abbrev=0“ са несъвместими"
-#: builtin/describe.c:587
+#: builtin/describe.c:590
msgid "No names found, cannot describe anything."
msgstr "Не са открити имена — нищо не може да бъде описано."
-#: builtin/describe.c:637
+#: builtin/describe.c:640
msgid "--dirty is incompatible with commit-ishes"
msgstr "опцията „--dirty“ е несъвместима с указател към подаване"
-#: builtin/describe.c:639
+#: builtin/describe.c:642
msgid "--broken is incompatible with commit-ishes"
msgstr "опцията „--broken“ е несъвместима с указател към подаване"
@@ -8435,95 +8631,101 @@ msgstr "Прилагане на УКАЗАТЕЛя_НА_ВЕРСИЯ към из
msgid "anonymize output"
msgstr "анонимизиране на извежданата информация"
-#: builtin/fetch.c:24
+#: builtin/fetch.c:25
msgid "git fetch [<options>] [<repository> [<refspec>...]]"
msgstr "git fetch [ОПЦИЯ…] [ХРАНИЛИЩЕ [УКАЗАТЕЛ…]]"
-#: builtin/fetch.c:25
+#: builtin/fetch.c:26
msgid "git fetch [<options>] <group>"
msgstr "git fetch [ОПЦИЯ…] ГРУПА"
-#: builtin/fetch.c:26
+#: builtin/fetch.c:27
msgid "git fetch --multiple [<options>] [(<repository> | <group>)...]"
msgstr "git fetch --multiple [ОПЦИЯ…] [(ХРАНИЛИЩЕ | ГРУПА)…]"
-#: builtin/fetch.c:27
+#: builtin/fetch.c:28
msgid "git fetch --all [<options>]"
msgstr "git fetch --all [ОПЦИЯ…]"
-#: builtin/fetch.c:113 builtin/pull.c:188
+#: builtin/fetch.c:124 builtin/pull.c:188
msgid "fetch from all remotes"
msgstr "доставяне от всички отдалечени хранилища"
-#: builtin/fetch.c:115 builtin/pull.c:191
+#: builtin/fetch.c:126 builtin/pull.c:191
msgid "append to .git/FETCH_HEAD instead of overwriting"
msgstr "добавяне към „.git/FETCH_HEAD“ вместо замяна"
-#: builtin/fetch.c:117 builtin/pull.c:194
+#: builtin/fetch.c:128 builtin/pull.c:194
msgid "path to upload pack on remote end"
msgstr "отдалечен път, където да се качи пакетът"
-#: builtin/fetch.c:118 builtin/pull.c:196
+#: builtin/fetch.c:129 builtin/pull.c:196
msgid "force overwrite of local branch"
msgstr "принудително презаписване на локалния клон"
-#: builtin/fetch.c:120
+#: builtin/fetch.c:131
msgid "fetch from multiple remotes"
msgstr "доставяне от множество отдалечени хранилища"
-#: builtin/fetch.c:122 builtin/pull.c:198
+#: builtin/fetch.c:133 builtin/pull.c:198
msgid "fetch all tags and associated objects"
msgstr "доставяне на всички етикети и принадлежащи обекти"
-#: builtin/fetch.c:124
+#: builtin/fetch.c:135
msgid "do not fetch all tags (--no-tags)"
msgstr "без доставянето на всички етикети „--no-tags“"
-#: builtin/fetch.c:126
+#: builtin/fetch.c:137
msgid "number of submodules fetched in parallel"
msgstr "брой подмодули доставени паралелно"
-#: builtin/fetch.c:128 builtin/pull.c:201
+#: builtin/fetch.c:139 builtin/pull.c:201
msgid "prune remote-tracking branches no longer on remote"
msgstr "окастряне на клоните следящи вече несъществуващи отдалечени клони"
-#: builtin/fetch.c:129 builtin/fetch.c:152 builtin/pull.c:126
+#: builtin/fetch.c:141
+msgid "prune local tags no longer on remote and clobber changed tags"
+msgstr ""
+"окастряне на локалните етикети, които вече не съществуват в отдалеченото "
+"хранилище и махане на променените"
+
+#: builtin/fetch.c:142 builtin/fetch.c:165 builtin/pull.c:126
msgid "on-demand"
msgstr "ПРИ НУЖДА"
-#: builtin/fetch.c:130
+#: builtin/fetch.c:143
msgid "control recursive fetching of submodules"
msgstr "управление на рекурсивното доставяне на подмодулите"
-#: builtin/fetch.c:134 builtin/pull.c:209
+#: builtin/fetch.c:147 builtin/pull.c:209
msgid "keep downloaded pack"
msgstr "запазване на изтеглените пакети с обекти"
-#: builtin/fetch.c:136
+#: builtin/fetch.c:149
msgid "allow updating of HEAD ref"
msgstr "позволяване на обновяването на указателя „HEAD“"
-#: builtin/fetch.c:139 builtin/fetch.c:145 builtin/pull.c:212
+#: builtin/fetch.c:152 builtin/fetch.c:158 builtin/pull.c:212
msgid "deepen history of shallow clone"
msgstr "задълбочаване на историята на плитко хранилище"
-#: builtin/fetch.c:141
+#: builtin/fetch.c:154
msgid "deepen history of shallow repository based on time"
msgstr "задълбочаване на историята на плитко хранилище до определено време"
-#: builtin/fetch.c:147 builtin/pull.c:215
+#: builtin/fetch.c:160 builtin/pull.c:215
msgid "convert to a complete repository"
msgstr "превръщане в пълно хранилище"
-#: builtin/fetch.c:149 builtin/log.c:1463
+#: builtin/fetch.c:162 builtin/log.c:1466
msgid "dir"
msgstr "директория"
-#: builtin/fetch.c:150
+#: builtin/fetch.c:163
msgid "prepend this to submodule path output"
msgstr "добавяне на това пред пътя на подмодула"
-#: builtin/fetch.c:153
+#: builtin/fetch.c:166
msgid ""
"default for recursive fetching of submodules (lower priority than config "
"files)"
@@ -8531,91 +8733,91 @@ msgstr ""
"стандартно рекурсивно изтегляне на подмодулите (файловете с настройки са с "
"приоритет)"
-#: builtin/fetch.c:157 builtin/pull.c:218
+#: builtin/fetch.c:170 builtin/pull.c:218
msgid "accept refs that update .git/shallow"
msgstr "приемане на указатели, които обновяват „.git/shallow“"
-#: builtin/fetch.c:158 builtin/pull.c:220
+#: builtin/fetch.c:171 builtin/pull.c:220
msgid "refmap"
msgstr "КАРТА_С_УКАЗАТЕЛИ"
-#: builtin/fetch.c:159 builtin/pull.c:221
+#: builtin/fetch.c:172 builtin/pull.c:221
msgid "specify fetch refmap"
msgstr "указване на КАРТАта_С_УКАЗАТЕЛИ за доставяне"
-#: builtin/fetch.c:417
+#: builtin/fetch.c:431
msgid "Couldn't find remote ref HEAD"
msgstr "Указателят „HEAD“ в отдалеченото хранилище не може да бъде открит"
-#: builtin/fetch.c:535
+#: builtin/fetch.c:549
#, c-format
msgid "configuration fetch.output contains invalid value %s"
msgstr "настройката „fetch.output“ е с неправилна стойност „%s“"
-#: builtin/fetch.c:628
+#: builtin/fetch.c:642
#, c-format
msgid "object %s not found"
msgstr "обектът „%s“ липсва"
-#: builtin/fetch.c:632
+#: builtin/fetch.c:646
msgid "[up to date]"
msgstr "[актуализиран]"
-#: builtin/fetch.c:645 builtin/fetch.c:725
+#: builtin/fetch.c:659 builtin/fetch.c:739
msgid "[rejected]"
msgstr "[отхвърлен]"
-#: builtin/fetch.c:646
+#: builtin/fetch.c:660
msgid "can't fetch in current branch"
msgstr "в текущия клон не може да се доставя"
-#: builtin/fetch.c:655
+#: builtin/fetch.c:669
msgid "[tag update]"
msgstr "[обновяване на етикетите]"
-#: builtin/fetch.c:656 builtin/fetch.c:689 builtin/fetch.c:705
-#: builtin/fetch.c:720
+#: builtin/fetch.c:670 builtin/fetch.c:703 builtin/fetch.c:719
+#: builtin/fetch.c:734
msgid "unable to update local ref"
msgstr "локален указател не може да бъде обновен"
-#: builtin/fetch.c:675
+#: builtin/fetch.c:689
msgid "[new tag]"
msgstr "[нов етикет]"
-#: builtin/fetch.c:678
+#: builtin/fetch.c:692
msgid "[new branch]"
msgstr "[нов клон]"
-#: builtin/fetch.c:681
+#: builtin/fetch.c:695
msgid "[new ref]"
msgstr "[нов указател]"
-#: builtin/fetch.c:720
+#: builtin/fetch.c:734
msgid "forced update"
msgstr "принудително обновяване"
-#: builtin/fetch.c:725
+#: builtin/fetch.c:739
msgid "non-fast-forward"
msgstr "същинско сливане"
-#: builtin/fetch.c:770
+#: builtin/fetch.c:784
#, c-format
msgid "%s did not send all necessary objects\n"
msgstr "хранилището „%s“ не изпрати всички необходими обекти\n"
-#: builtin/fetch.c:790
+#: builtin/fetch.c:804
#, c-format
msgid "reject %s because shallow roots are not allowed to be updated"
msgstr ""
"отхвърляне на върха „%s“, защото плитките хранилища не могат да бъдат "
"обновявани"
-#: builtin/fetch.c:878 builtin/fetch.c:974
+#: builtin/fetch.c:892 builtin/fetch.c:988
#, c-format
msgid "From %.*s\n"
msgstr "От %.*s\n"
-#: builtin/fetch.c:889
+#: builtin/fetch.c:903
#, c-format
msgid ""
"some local refs could not be updated; try running\n"
@@ -8625,50 +8827,57 @@ msgstr ""
"„git remote prune %s“, за да премахнете остарелите клони, които\n"
"предизвикват конфликта"
-#: builtin/fetch.c:944
+#: builtin/fetch.c:958
#, c-format
msgid " (%s will become dangling)"
msgstr " (обектът „%s“ ще се окаже извън клон)"
-#: builtin/fetch.c:945
+#: builtin/fetch.c:959
#, c-format
msgid " (%s has become dangling)"
msgstr " (обектът „%s“ вече е извън клон)"
-#: builtin/fetch.c:977
+#: builtin/fetch.c:991
msgid "[deleted]"
msgstr "[изтрит]"
-#: builtin/fetch.c:978 builtin/remote.c:1024
+#: builtin/fetch.c:992 builtin/remote.c:1024
msgid "(none)"
msgstr "(нищо)"
-#: builtin/fetch.c:1001
+#: builtin/fetch.c:1015
#, c-format
msgid "Refusing to fetch into current branch %s of non-bare repository"
msgstr "Не може да доставите в текущия клон „%s“ на хранилище, което не е голо"
-#: builtin/fetch.c:1020
+#: builtin/fetch.c:1034
#, c-format
msgid "Option \"%s\" value \"%s\" is not valid for %s"
msgstr "Стойността „%2$s“ за опцията „%1$s“ не е съвместима с „%3$s“"
-#: builtin/fetch.c:1023
+#: builtin/fetch.c:1037
#, c-format
msgid "Option \"%s\" is ignored for %s\n"
msgstr "Опцията „%s“ се прескача при „%s“\n"
-#: builtin/fetch.c:1256
+#: builtin/fetch.c:1277
#, c-format
msgid "Fetching %s\n"
msgstr "Доставяне на „%s“\n"
-#: builtin/fetch.c:1258 builtin/remote.c:97
+#: builtin/fetch.c:1279 builtin/remote.c:97
#, c-format
msgid "Could not fetch %s"
msgstr "„%s“ не може да се достави"
-#: builtin/fetch.c:1276
+#: builtin/fetch.c:1325 builtin/fetch.c:1498
+msgid ""
+"--filter can only be used with the remote configured in core.partialClone"
+msgstr ""
+"опцията „--filter“ може да се ползва само с отдалеченото хранилище указано в "
+"настройката „core.partialClone“"
+
+#: builtin/fetch.c:1350
msgid ""
"No remote repository specified. Please, specify either a URL or a\n"
"remote name from which new revisions should be fetched."
@@ -8676,41 +8885,41 @@ msgstr ""
"Не сте указали отдалечено хранилище. Задайте или адрес, или име\n"
"на отдалечено хранилище, откъдето да се доставят новите версии."
-#: builtin/fetch.c:1299
+#: builtin/fetch.c:1394
msgid "You need to specify a tag name."
msgstr "Трябва да укажете име на етикет."
-#: builtin/fetch.c:1342
+#: builtin/fetch.c:1439
msgid "Negative depth in --deepen is not supported"
msgstr "Отрицателна дълбочина като аргумент на „--deepen“ не се поддържа"
-#: builtin/fetch.c:1344
+#: builtin/fetch.c:1441
msgid "--deepen and --depth are mutually exclusive"
msgstr "Опциите „--deepen“ и „--depth“ са несъвместими една с друга"
-#: builtin/fetch.c:1349
+#: builtin/fetch.c:1446
msgid "--depth and --unshallow cannot be used together"
msgstr "опциите „--depth“ и „--unshallow“ са несъвместими"
-#: builtin/fetch.c:1351
+#: builtin/fetch.c:1448
msgid "--unshallow on a complete repository does not make sense"
msgstr "не можете да използвате опцията „--unshallow“ върху пълно хранилище"
-#: builtin/fetch.c:1364
+#: builtin/fetch.c:1464
msgid "fetch --all does not take a repository argument"
msgstr "към „git fetch --all“ не можете да добавите аргумент — хранилище"
-#: builtin/fetch.c:1366
+#: builtin/fetch.c:1466
msgid "fetch --all does not make sense with refspecs"
msgstr ""
"към „git fetch --all“ не можете да добавите аргумент — указател на версия"
-#: builtin/fetch.c:1377
+#: builtin/fetch.c:1475
#, c-format
msgid "No such remote or remote group: %s"
msgstr "Няма нито отдалечено хранилище, нито група от хранилища на име „%s“"
-#: builtin/fetch.c:1385
+#: builtin/fetch.c:1482
msgid "Fetching a group and specifying refspecs does not make sense"
msgstr "Указването на група и указването на версия са несъвместими"
@@ -8778,7 +8987,7 @@ msgstr "цитиране подходящо за tcl"
msgid "show only <n> matched refs"
msgstr "извеждане само на този БРОЙ напаснати указатели"
-#: builtin/for-each-ref.c:39 builtin/tag.c:414
+#: builtin/for-each-ref.c:39 builtin/tag.c:420
msgid "respect format colors"
msgstr "спазване на цветовете на форма̀та"
@@ -8802,64 +9011,64 @@ msgstr "извеждане само на указателите, които съ
msgid "print only refs which don't contain the commit"
msgstr "извеждане само на указателите, които не съдържат това ПОДАВАНЕ"
-#: builtin/fsck.c:543
+#: builtin/fsck.c:568
msgid "Checking object directories"
msgstr "Проверка на директориите с обекти"
-#: builtin/fsck.c:635
+#: builtin/fsck.c:660
msgid "git fsck [<options>] [<object>...]"
msgstr "git fsck [ОПЦИЯ…] [ОБЕКТ…]"
-#: builtin/fsck.c:641
+#: builtin/fsck.c:666
msgid "show unreachable objects"
msgstr "показване на недостижимите обекти"
-#: builtin/fsck.c:642
+#: builtin/fsck.c:667
msgid "show dangling objects"
msgstr "показване на обектите извън клоните"
-#: builtin/fsck.c:643
+#: builtin/fsck.c:668
msgid "report tags"
msgstr "показване на етикетите"
-#: builtin/fsck.c:644
+#: builtin/fsck.c:669
msgid "report root nodes"
msgstr "показване на кореновите възли"
-#: builtin/fsck.c:645
+#: builtin/fsck.c:670
msgid "make index objects head nodes"
msgstr "задаване на обекти от индекса да са коренови"
# FIXME bad message
-#: builtin/fsck.c:646
+#: builtin/fsck.c:671
msgid "make reflogs head nodes (default)"
msgstr "проследяване на указателите от журнала като глави (стандартно)"
-#: builtin/fsck.c:647
+#: builtin/fsck.c:672
msgid "also consider packs and alternate objects"
msgstr "допълнително да се проверяват пакетите и алтернативните обекти"
-#: builtin/fsck.c:648
+#: builtin/fsck.c:673
msgid "check only connectivity"
msgstr "проверка само на връзката"
-#: builtin/fsck.c:649
+#: builtin/fsck.c:674
msgid "enable more strict checking"
msgstr "по-строги проверки"
-#: builtin/fsck.c:651
+#: builtin/fsck.c:676
msgid "write dangling objects in .git/lost-found"
msgstr "запазване на обектите извън клоните в директорията „.git/lost-found“"
-#: builtin/fsck.c:652 builtin/prune.c:107
+#: builtin/fsck.c:677 builtin/prune.c:108
msgid "show progress"
msgstr "показване на напредъка"
-#: builtin/fsck.c:653
+#: builtin/fsck.c:678
msgid "show verbose names for reachable objects"
msgstr "показване на подробни имена на достижимите обекти"
-#: builtin/fsck.c:714
+#: builtin/fsck.c:742
msgid "Checking objects"
msgstr "Проверка на обектите"
@@ -8906,37 +9115,37 @@ msgstr "изчерпателно търсене на боклука (за сме
msgid "enable auto-gc mode"
msgstr "включване на автоматичното събиране на боклука (auto-gc)"
-#: builtin/gc.c:364
+#: builtin/gc.c:366
msgid "force running gc even if there may be another gc running"
msgstr ""
"изрично стартиране на събирането на боклука, дори и ако вече работи друго "
"събиране"
-#: builtin/gc.c:381
+#: builtin/gc.c:384
#, c-format
msgid "Failed to parse gc.logexpiry value %s"
msgstr "Неразпозната стойност на „gc.logexpiry“: %s"
-#: builtin/gc.c:409
+#: builtin/gc.c:412
#, c-format
msgid "Auto packing the repository in background for optimum performance.\n"
msgstr ""
"Автоматично пакетиране на заден фон на хранилището за по-добра "
"производителност.\n"
-#: builtin/gc.c:411
+#: builtin/gc.c:414
#, c-format
msgid "Auto packing the repository for optimum performance.\n"
msgstr "Автоматично пакетиране на хранилището за по-добра производителност.\n"
-#: builtin/gc.c:412
+#: builtin/gc.c:415
#, c-format
msgid "See \"git help gc\" for manual housekeeping.\n"
msgstr ""
"Погледнете ръководството за повече информация как да изпълните „git help "
"gc“.\n"
-#: builtin/gc.c:437
+#: builtin/gc.c:440
#, c-format
msgid ""
"gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
@@ -8945,7 +9154,7 @@ msgstr ""
"процеса: %<PRIuMAX> (ако сте сигурни, че това не е вярно, това използвайте\n"
"опцията „--force“)"
-#: builtin/gc.c:481
+#: builtin/gc.c:487
msgid ""
"There are too many unreachable loose objects; run 'git prune' to remove them."
msgstr ""
@@ -8956,12 +9165,12 @@ msgstr ""
msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
msgstr "git grep [ОПЦИЯ…] [-e] ШАБЛОН [ВЕРСИЯ…] [[--] ПЪТ…]"
-#: builtin/grep.c:226
+#: builtin/grep.c:225
#, c-format
msgid "grep: failed to create thread: %s"
msgstr "grep: неуспешно създаване на нишка: %s"
-#: builtin/grep.c:284
+#: builtin/grep.c:283
#, c-format
msgid "invalid number of threads specified (%d) for %s"
msgstr "зададен е неправилен брой нишки (%d) за %s"
@@ -8970,259 +9179,259 @@ msgstr "зададен е неправилен брой нишки (%d) за %s"
#. variable for tweaking threads, currently
#. grep.threads
#.
-#: builtin/grep.c:293 builtin/index-pack.c:1495 builtin/index-pack.c:1688
+#: builtin/grep.c:292 builtin/index-pack.c:1523 builtin/index-pack.c:1712
#, c-format
msgid "no threads support, ignoring %s"
msgstr "липсва поддръжка за нишки. „%s“ ще се пренебрегне"
-#: builtin/grep.c:453 builtin/grep.c:573 builtin/grep.c:615
+#: builtin/grep.c:460 builtin/grep.c:580 builtin/grep.c:622
#, c-format
msgid "unable to read tree (%s)"
msgstr "дървото не може да бъде прочетено (%s)"
-#: builtin/grep.c:630
+#: builtin/grep.c:637
#, c-format
msgid "unable to grep from object of type %s"
msgstr "не може да се изпълни „grep“ от обект от вида %s"
-#: builtin/grep.c:696
+#: builtin/grep.c:703
#, c-format
msgid "switch `%c' expects a numerical value"
msgstr "опцията „%c“ очаква число за аргумент"
-#: builtin/grep.c:783
+#: builtin/grep.c:790
msgid "search in index instead of in the work tree"
msgstr "търсене в индекса, а не в работното дърво"
-#: builtin/grep.c:785
+#: builtin/grep.c:792
msgid "find in contents not managed by git"
msgstr "търсене и във файловете, които не са под управлението на git"
-#: builtin/grep.c:787
+#: builtin/grep.c:794
msgid "search in both tracked and untracked files"
msgstr "търсене и в следените, и в неследените файлове"
-#: builtin/grep.c:789
+#: builtin/grep.c:796
msgid "ignore files specified via '.gitignore'"
msgstr "игнориране на файловете указани в „.gitignore“"
-#: builtin/grep.c:791
+#: builtin/grep.c:798
msgid "recursively search in each submodule"
msgstr "рекурсивно търсене във всички подмодули"
-#: builtin/grep.c:794
+#: builtin/grep.c:801
msgid "show non-matching lines"
msgstr "извеждане на редовете, които не съвпадат"
-#: builtin/grep.c:796
+#: builtin/grep.c:803
msgid "case insensitive matching"
msgstr "без значение на регистъра на буквите (главни/малки)"
-#: builtin/grep.c:798
+#: builtin/grep.c:805
msgid "match patterns only at word boundaries"
msgstr "напасване на шаблоните само по границите на думите"
-#: builtin/grep.c:800
+#: builtin/grep.c:807
msgid "process binary files as text"
msgstr "обработване на двоичните файлове като текстови"
-#: builtin/grep.c:802
+#: builtin/grep.c:809
msgid "don't match patterns in binary files"
msgstr "прескачане на двоичните файлове"
-#: builtin/grep.c:805
+#: builtin/grep.c:812
msgid "process binary files with textconv filters"
msgstr ""
"обработване на двоичните файлове чрез филтри за преобразуване към текст"
-#: builtin/grep.c:807
+#: builtin/grep.c:814
msgid "descend at most <depth> levels"
msgstr "навлизане максимално на тази ДЪЛБОЧИНА в дървото"
-#: builtin/grep.c:811
+#: builtin/grep.c:818
msgid "use extended POSIX regular expressions"
msgstr "разширени регулярни изрази по POSIX"
-#: builtin/grep.c:814
+#: builtin/grep.c:821
msgid "use basic POSIX regular expressions (default)"
msgstr "основни регулярни изрази по POSIX (стандартно)"
-#: builtin/grep.c:817
+#: builtin/grep.c:824
msgid "interpret patterns as fixed strings"
msgstr "шаблоните са дословни низове"
-#: builtin/grep.c:820
+#: builtin/grep.c:827
msgid "use Perl-compatible regular expressions"
msgstr "регулярни изрази на Perl"
-#: builtin/grep.c:823
+#: builtin/grep.c:830
msgid "show line numbers"
msgstr "извеждане на номерата на редовете"
-#: builtin/grep.c:824
+#: builtin/grep.c:831
msgid "don't show filenames"
msgstr "без извеждане на имената на файловете"
-#: builtin/grep.c:825
+#: builtin/grep.c:832
msgid "show filenames"
msgstr "извеждане на имената на файловете"
-#: builtin/grep.c:827
+#: builtin/grep.c:834
msgid "show filenames relative to top directory"
msgstr ""
"извеждане на относителните имена на файловете спрямо основната директория на "
"хранилището"
-#: builtin/grep.c:829
+#: builtin/grep.c:836
msgid "show only filenames instead of matching lines"
msgstr "извеждане само на имената на файловете без напасващите редове"
-#: builtin/grep.c:831
+#: builtin/grep.c:838
msgid "synonym for --files-with-matches"
msgstr "синоним на „--files-with-matches“"
-#: builtin/grep.c:834
+#: builtin/grep.c:841
msgid "show only the names of files without match"
msgstr ""
"извеждане само на имената на файловете, които не съдържат ред, напасващ на "
"шаблона"
-#: builtin/grep.c:836
+#: builtin/grep.c:843
msgid "print NUL after filenames"
msgstr "извеждане на нулевия знак „NUL“ след всяко име на файл"
-#: builtin/grep.c:838
+#: builtin/grep.c:846
msgid "show the number of matches instead of matching lines"
msgstr "извеждане на броя на съвпаденията вместо напасващите редове"
-#: builtin/grep.c:839
+#: builtin/grep.c:847
msgid "highlight matches"
msgstr "оцветяване на напасванията"
-#: builtin/grep.c:841
+#: builtin/grep.c:849
msgid "print empty line between matches from different files"
msgstr "извеждане на празен ред между напасванията от различни файлове"
-#: builtin/grep.c:843
+#: builtin/grep.c:851
msgid "show filename only once above matches from same file"
msgstr ""
"извеждане на името на файла само веднъж за всички напасвания от този файл"
-#: builtin/grep.c:846
+#: builtin/grep.c:854
msgid "show <n> context lines before and after matches"
msgstr "извеждане на такъв БРОЙ редове преди и след напасванията"
-#: builtin/grep.c:849
+#: builtin/grep.c:857
msgid "show <n> context lines before matches"
msgstr "извеждане на такъв БРОЙ редове преди напасванията"
-#: builtin/grep.c:851
+#: builtin/grep.c:859
msgid "show <n> context lines after matches"
msgstr "извеждане на такъв БРОЙ редове след напасванията"
-#: builtin/grep.c:853
+#: builtin/grep.c:861
msgid "use <n> worker threads"
msgstr "използване на такъв БРОЙ работещи нишки"
-#: builtin/grep.c:854
+#: builtin/grep.c:862
msgid "shortcut for -C NUM"
msgstr "синоним на „-C БРОЙ“"
-#: builtin/grep.c:857
+#: builtin/grep.c:865
msgid "show a line with the function name before matches"
msgstr "извеждане на ред с името на функцията, в която е напаснат шаблона"
-#: builtin/grep.c:859
+#: builtin/grep.c:867
msgid "show the surrounding function"
msgstr "извеждане на обхващащата функция"
-#: builtin/grep.c:862
+#: builtin/grep.c:870
msgid "read patterns from file"
msgstr "изчитане на шаблоните от ФАЙЛ"
-#: builtin/grep.c:864
+#: builtin/grep.c:872
msgid "match <pattern>"
msgstr "напасване на ШАБЛОН"
-#: builtin/grep.c:866
+#: builtin/grep.c:874
msgid "combine patterns specified with -e"
msgstr "комбиниране на шаблоните указани с опцията „-e“"
-#: builtin/grep.c:878
+#: builtin/grep.c:886
msgid "indicate hit with exit status without output"
msgstr ""
"без извеждане на стандартния изход. Изходният код указва наличието на "
"напасване"
-#: builtin/grep.c:880
+#: builtin/grep.c:888
msgid "show only matches from files that match all patterns"
msgstr ""
"извеждане на редове само от файловете, които напасват на всички шаблони"
-#: builtin/grep.c:882
+#: builtin/grep.c:890
msgid "show parse tree for grep expression"
msgstr "извеждане на дървото за анализ на регулярния израз"
-#: builtin/grep.c:886
+#: builtin/grep.c:894
msgid "pager"
msgstr "програма за преглед по страници"
-#: builtin/grep.c:886
+#: builtin/grep.c:894
msgid "show matching files in the pager"
msgstr "извеждане на съвпадащите файлове в програма за преглед по страници"
-#: builtin/grep.c:889
+#: builtin/grep.c:898
msgid "allow calling of grep(1) (ignored by this build)"
msgstr ""
"позволяване на стартирането на grep(1) (текущият компилат пренебрегва тази "
"опция)"
-#: builtin/grep.c:952
+#: builtin/grep.c:962
msgid "no pattern given."
msgstr "липсва шаблон."
-#: builtin/grep.c:984
+#: builtin/grep.c:994
msgid "--no-index or --untracked cannot be used with revs"
msgstr "опциите „--cached“ и „--untracked“ са несъвместими с версии."
-#: builtin/grep.c:991
+#: builtin/grep.c:1001
#, c-format
msgid "unable to resolve revision: %s"
msgstr "версията „%s“ не може бъде открита"
-#: builtin/grep.c:1026 builtin/index-pack.c:1491
+#: builtin/grep.c:1036 builtin/index-pack.c:1519
#, c-format
msgid "invalid number of threads specified (%d)"
msgstr "зададен е неправилен брой нишки: %d"
-#: builtin/grep.c:1031
+#: builtin/grep.c:1041
msgid "no threads support, ignoring --threads"
msgstr "липсва поддръжка за нишки. „--threads“ ще се пренебрегне"
-#: builtin/grep.c:1055
+#: builtin/grep.c:1065
msgid "--open-files-in-pager only works on the worktree"
msgstr ""
"опцията „--open-files-in-pager“ е съвместима само с търсене в работното дърво"
-#: builtin/grep.c:1078
+#: builtin/grep.c:1088
msgid "option not supported with --recurse-submodules."
msgstr "опцията е несъвместима с „--recurse-submodules“."
-#: builtin/grep.c:1084
+#: builtin/grep.c:1094
msgid "--cached or --untracked cannot be used with --no-index."
msgstr "опциите „--cached“ и „--untracked“ са несъвместими с „--no-index“."
-#: builtin/grep.c:1090
+#: builtin/grep.c:1100
msgid "--[no-]exclude-standard cannot be used for tracked contents."
msgstr ""
"опциите „--(no-)exclude-standard“ са несъвместими с търсене по следени "
"файлове."
-#: builtin/grep.c:1098
+#: builtin/grep.c:1108
msgid "both --cached and trees are given."
msgstr "опцията „--cached“ е несъвместима със задаване на дърво."
-#: builtin/hash-object.c:82
+#: builtin/hash-object.c:83
msgid ""
"git hash-object [-t <type>] [-w] [--path=<file> | --no-filters] [--stdin] "
"[--] <file>..."
@@ -9230,38 +9439,38 @@ msgstr ""
"git hash-object [-t ВИД] [-w] [--path=ФАЙЛ | --no-filters] [--stdin] [--] "
"ФАЙЛ…"
-#: builtin/hash-object.c:83
+#: builtin/hash-object.c:84
msgid "git hash-object --stdin-paths"
msgstr "git hash-object --stdin-paths"
-#: builtin/hash-object.c:95
+#: builtin/hash-object.c:96
msgid "type"
msgstr "ВИД"
-#: builtin/hash-object.c:95
+#: builtin/hash-object.c:96
msgid "object type"
msgstr "ВИД на обекта"
-#: builtin/hash-object.c:96
+#: builtin/hash-object.c:97
msgid "write the object into the object database"
msgstr "записване на обекта в базата от данни за обектите"
-#: builtin/hash-object.c:98
+#: builtin/hash-object.c:99
msgid "read the object from stdin"
msgstr "изчитане на обекта от стандартния вход"
-#: builtin/hash-object.c:100
+#: builtin/hash-object.c:101
msgid "store file as is without filters"
msgstr "запазване на файла както е — без филтри"
-#: builtin/hash-object.c:101
+#: builtin/hash-object.c:102
msgid ""
"just hash any random garbage to create corrupt objects for debugging Git"
msgstr ""
"създаване и хеширане на произволни данни за повредени обекти за трасиране на "
"Git"
-#: builtin/hash-object.c:102
+#: builtin/hash-object.c:103
msgid "process file as it were from this path"
msgstr "обработване на ФАЙЛа все едно е с този път"
@@ -9395,154 +9604,154 @@ msgstr "„%s“ е синоним на „%s“"
msgid "usage: %s%s"
msgstr "употреба: %s%s"
-#: builtin/index-pack.c:156
+#: builtin/index-pack.c:157
#, c-format
msgid "unable to open %s"
msgstr "обектът „%s“ не може да бъде отворен"
-#: builtin/index-pack.c:206
+#: builtin/index-pack.c:207
#, c-format
msgid "object type mismatch at %s"
msgstr "неправилен вид на обекта „%s“"
-#: builtin/index-pack.c:226
+#: builtin/index-pack.c:227
#, c-format
msgid "did not receive expected object %s"
msgstr "очакваният обект „%s“ не бе получен"
-#: builtin/index-pack.c:229
+#: builtin/index-pack.c:230
#, c-format
msgid "object %s: expected type %s, found %s"
msgstr "неправилен вид на обекта „%s“: очакваше се „%s“, а бе получен „%s“"
-#: builtin/index-pack.c:271
+#: builtin/index-pack.c:272
#, c-format
msgid "cannot fill %d byte"
msgid_plural "cannot fill %d bytes"
msgstr[0] "не може да се запълни %d байт"
msgstr[1] "не може да се запълнят %d байта"
-#: builtin/index-pack.c:281
+#: builtin/index-pack.c:282
msgid "early EOF"
msgstr "неочакван край на файл"
-#: builtin/index-pack.c:282
+#: builtin/index-pack.c:283
msgid "read error on input"
msgstr "грешка при четене на входните данни"
-#: builtin/index-pack.c:294
+#: builtin/index-pack.c:295
msgid "used more bytes than were available"
msgstr "използвани са повече от наличните байтове"
-#: builtin/index-pack.c:301
+#: builtin/index-pack.c:302
msgid "pack too large for current definition of off_t"
msgstr "пакетният файл е прекалено голям за текущата стойност на типа „off_t“"
-#: builtin/index-pack.c:304 builtin/unpack-objects.c:93
+#: builtin/index-pack.c:305 builtin/unpack-objects.c:93
msgid "pack exceeds maximum allowed size"
msgstr "пакетният файл надвишава максималния възможен размер"
-#: builtin/index-pack.c:319
+#: builtin/index-pack.c:320
#, c-format
msgid "unable to create '%s'"
msgstr "пакетният файл „%s“ не може да бъде създаден"
-#: builtin/index-pack.c:325
+#: builtin/index-pack.c:326
#, c-format
msgid "cannot open packfile '%s'"
msgstr "пакетният файл „%s“ не може да бъде отворен"
-#: builtin/index-pack.c:339
+#: builtin/index-pack.c:340
msgid "pack signature mismatch"
msgstr "несъответствие в подписа към пакетния файл"
-#: builtin/index-pack.c:341
+#: builtin/index-pack.c:342
#, c-format
msgid "pack version %<PRIu32> unsupported"
msgstr "не се поддържа пакетиране вeрсия „%<PRIu32>“"
-#: builtin/index-pack.c:359
+#: builtin/index-pack.c:360
#, c-format
msgid "pack has bad object at offset %<PRIuMAX>: %s"
msgstr "повреден обект в пакетния файл при отместване %<PRIuMAX>: %s"
-#: builtin/index-pack.c:480
+#: builtin/index-pack.c:481
#, c-format
msgid "inflate returned %d"
msgstr "декомпресирането с „inflate“ върна %d"
-#: builtin/index-pack.c:529
+#: builtin/index-pack.c:530
msgid "offset value overflow for delta base object"
msgstr "стойността на отместването за обекта-разлика води до препълване"
-#: builtin/index-pack.c:537
+#: builtin/index-pack.c:538
msgid "delta base offset is out of bound"
msgstr "стойността на отместването за обекта-разлика е извън диапазона"
-#: builtin/index-pack.c:545
+#: builtin/index-pack.c:546
#, c-format
msgid "unknown object type %d"
msgstr "непознат вид обект %d"
-#: builtin/index-pack.c:576
+#: builtin/index-pack.c:577
msgid "cannot pread pack file"
msgstr "пакетният файл не може да бъде прочетен"
-#: builtin/index-pack.c:578
+#: builtin/index-pack.c:579
#, c-format
msgid "premature end of pack file, %<PRIuMAX> byte missing"
msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
msgstr[0] "неочакван край на файл, липсва %<PRIuMAX> байт"
msgstr[1] "неочакван край на файл, липсват %<PRIuMAX> байта"
-#: builtin/index-pack.c:604
+#: builtin/index-pack.c:605
msgid "serious inflate inconsistency"
msgstr "сериозна грешка при декомпресиране с „inflate“"
-#: builtin/index-pack.c:749 builtin/index-pack.c:755 builtin/index-pack.c:778
-#: builtin/index-pack.c:817 builtin/index-pack.c:826
+#: builtin/index-pack.c:750 builtin/index-pack.c:756 builtin/index-pack.c:779
+#: builtin/index-pack.c:818 builtin/index-pack.c:827
#, c-format
msgid "SHA1 COLLISION FOUND WITH %s !"
msgstr ""
"СЪВПАДЕНИЕ НА СТОЙНОСТИТЕ ЗА СУМИТЕ ЗА SHA1: „%s“ НА ДВА РАЗЛИЧНИ ОБЕКТА!"
-#: builtin/index-pack.c:752 builtin/pack-objects.c:179
-#: builtin/pack-objects.c:273
+#: builtin/index-pack.c:753 builtin/pack-objects.c:182
+#: builtin/pack-objects.c:276
#, c-format
msgid "unable to read %s"
msgstr "обектът „%s“ не може да бъде прочетен"
-#: builtin/index-pack.c:815
+#: builtin/index-pack.c:816
#, c-format
msgid "cannot read existing object info %s"
msgstr "съществуващият обект в „%s“ не може да бъде прочетен"
-#: builtin/index-pack.c:823
+#: builtin/index-pack.c:824
#, c-format
msgid "cannot read existing object %s"
msgstr "съществуващият обект „%s“ не може да бъде прочетен"
-#: builtin/index-pack.c:837
+#: builtin/index-pack.c:838
#, c-format
msgid "invalid blob object %s"
msgstr "неправилен обект BLOB „%s“"
# FIXME perhaps invalid object
-#: builtin/index-pack.c:852
+#: builtin/index-pack.c:853
#, c-format
msgid "invalid %s"
msgstr "неправилен обект „%s“"
-#: builtin/index-pack.c:855
+#: builtin/index-pack.c:856
msgid "Error in object"
msgstr "Грешка в обекта"
-#: builtin/index-pack.c:857
+#: builtin/index-pack.c:858
#, c-format
msgid "Not all child objects of %s are reachable"
msgstr "Някои обекти, наследници на „%s“, не могат да бъдат достигнати"
-#: builtin/index-pack.c:929 builtin/index-pack.c:960
+#: builtin/index-pack.c:930 builtin/index-pack.c:961
msgid "failed to apply delta"
msgstr "разликата не може да бъде приложена"
@@ -9620,80 +9829,81 @@ msgstr "добавеният обект не може да се компреси
msgid "local object %s is corrupt"
msgstr "локалният обект „%s“ е повреден"
-#: builtin/index-pack.c:1409
-msgid "error while closing pack file"
-msgstr "грешка при затварянето на пакетния файл"
+#: builtin/index-pack.c:1397
+#, c-format
+msgid "packfile name '%s' does not end with '.pack'"
+msgstr "името на пакетния файл „%s“ не завършва на „.pack“"
-#: builtin/index-pack.c:1421
+#: builtin/index-pack.c:1422
#, c-format
-msgid "cannot write keep file '%s'"
-msgstr ""
-"грешка при записването на файла „%s“, осигуряващ запазване на директория"
+msgid "cannot write %s file '%s'"
+msgstr "грешка при запис на файла „%s“ „%s“"
-#: builtin/index-pack.c:1429
+#: builtin/index-pack.c:1430
#, c-format
-msgid "cannot close written keep file '%s'"
-msgstr ""
-"грешка при затварянето на записания файл „%s“, осигуряващ запазване на "
-"директория"
+msgid "cannot close written %s file '%s'"
+msgstr "грешка при затварянето на записания файл „%s“ „%s“"
+
+#: builtin/index-pack.c:1454
+msgid "error while closing pack file"
+msgstr "грешка при затварянето на пакетния файл"
-#: builtin/index-pack.c:1439
+#: builtin/index-pack.c:1468
msgid "cannot store pack file"
msgstr "пакетният файл не може да бъде запазен"
-#: builtin/index-pack.c:1447
+#: builtin/index-pack.c:1476
msgid "cannot store index file"
msgstr "файлът за индекса не може да бъде съхранен"
-#: builtin/index-pack.c:1485
+#: builtin/index-pack.c:1513
#, c-format
msgid "bad pack.indexversion=%<PRIu32>"
msgstr "зададена е неправилна версия пакетиране: „pack.indexversion=%<PRIu32>“"
-#: builtin/index-pack.c:1553
+#: builtin/index-pack.c:1581
#, c-format
msgid "Cannot open existing pack file '%s'"
msgstr "Съществуващият пакетен файл „%s“ не може да бъде отворен"
-#: builtin/index-pack.c:1555
+#: builtin/index-pack.c:1583
#, c-format
msgid "Cannot open existing pack idx file for '%s'"
msgstr "Съществуващият индекс за пакетния файл „%s“ не може да бъде отворен"
-#: builtin/index-pack.c:1603
+#: builtin/index-pack.c:1631
#, c-format
msgid "non delta: %d object"
msgid_plural "non delta: %d objects"
msgstr[0] "%d обект не е разлика"
msgstr[1] "%d обекта не са разлика"
-#: builtin/index-pack.c:1610
+#: builtin/index-pack.c:1638
#, c-format
msgid "chain length = %d: %lu object"
msgid_plural "chain length = %d: %lu objects"
msgstr[0] "дължината на веригата е %d: %lu обект"
msgstr[1] "дължината на веригата е %d: %lu обекта"
-#: builtin/index-pack.c:1623
-#, c-format
-msgid "packfile name '%s' does not end with '.pack'"
-msgstr "името на пакетния файл „%s“ не завършва на „.pack“"
+#: builtin/index-pack.c:1675
+msgid "Cannot come back to cwd"
+msgstr "Процесът не може да се върне към предишната работна директория"
-#: builtin/index-pack.c:1700 builtin/index-pack.c:1703
-#: builtin/index-pack.c:1719 builtin/index-pack.c:1723
+#: builtin/index-pack.c:1724 builtin/index-pack.c:1727
+#: builtin/index-pack.c:1743 builtin/index-pack.c:1747
#, c-format
msgid "bad %s"
msgstr "неправилна стойност „%s“"
-#: builtin/index-pack.c:1739
+#: builtin/index-pack.c:1763
msgid "--fix-thin cannot be used without --stdin"
msgstr "опцията „--fix-thin“ изисква „--stdin“"
-#: builtin/index-pack.c:1741
+#: builtin/index-pack.c:1765
msgid "--stdin requires a git repository"
msgstr "„--stdin“ изисква хранилище на git"
-#: builtin/index-pack.c:1749
+#: builtin/index-pack.c:1771
msgid "--verify with no packfile name given"
msgstr "опцията „--verify“ изисква име на пакетен файл"
@@ -9880,124 +10090,124 @@ msgstr "опцията „--trailer“ е несъвместима с „--name-
msgid "no input file given for in-place editing"
msgstr "не е зададен входен файл за редактиране на място"
-#: builtin/log.c:46
+#: builtin/log.c:48
msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
msgstr "git log [ОПЦИЯ…] [ДИАПАЗОН_НА_ВЕРСИИТЕ] [[--] ПЪТ…]"
-#: builtin/log.c:47
+#: builtin/log.c:49
msgid "git show [<options>] <object>..."
msgstr "git show [ОПЦИЯ…] ОБЕКТ…"
-#: builtin/log.c:91
+#: builtin/log.c:93
#, c-format
msgid "invalid --decorate option: %s"
msgstr "неправилна опция „--decorate“: %s"
-#: builtin/log.c:151
+#: builtin/log.c:153
msgid "suppress diff output"
msgstr "без извеждане на разликите"
-#: builtin/log.c:152
+#: builtin/log.c:154
msgid "show source"
msgstr "извеждане на изходния код"
-#: builtin/log.c:153
+#: builtin/log.c:155
msgid "Use mail map file"
msgstr ""
"Използване на файл за съответствията на имената и адресите на е-поща („."
"mailmap“)"
-#: builtin/log.c:155
+#: builtin/log.c:157
msgid "only decorate refs that match <pattern>"
msgstr "специален формат само на указателите напасващи на ШАБЛОНа"
-#: builtin/log.c:157
+#: builtin/log.c:159
msgid "do not decorate refs that match <pattern>"
msgstr "без специален формат на указателите напасващи на ШАБЛОНа"
-#: builtin/log.c:158
+#: builtin/log.c:160
msgid "decorate options"
msgstr "настройки на форма̀та на извежданата информация"
-#: builtin/log.c:161
+#: builtin/log.c:163
msgid "Process line range n,m in file, counting from 1"
msgstr ""
"Обработване само на редовете във файла в диапазона от n до m включително. "
"Броенето започва от 1"
-#: builtin/log.c:257
+#: builtin/log.c:259
#, c-format
msgid "Final output: %d %s\n"
msgstr "Резултат: %d %s\n"
-#: builtin/log.c:508
+#: builtin/log.c:510
#, c-format
msgid "git show %s: bad file"
msgstr "git show %s: повреден файл"
-#: builtin/log.c:523 builtin/log.c:617
+#: builtin/log.c:525 builtin/log.c:619
#, c-format
msgid "Could not read object %s"
msgstr "Обектът не може да бъде прочетен: %s"
-#: builtin/log.c:641
+#: builtin/log.c:643
#, c-format
msgid "Unknown type: %d"
msgstr "Неизвестен вид: %d"
-#: builtin/log.c:762
+#: builtin/log.c:764
msgid "format.headers without value"
msgstr "не е зададена стойност на „format.headers“"
-#: builtin/log.c:863
+#: builtin/log.c:865
msgid "name of output directory is too long"
msgstr "прекалено дълго име на директорията за изходната информация"
-#: builtin/log.c:879
+#: builtin/log.c:881
#, c-format
msgid "Cannot open patch file %s"
msgstr "Файлът-кръпка „%s“ не може да бъде отворен"
-#: builtin/log.c:896
+#: builtin/log.c:898
msgid "Need exactly one range."
msgstr "Трябва да зададете точно един диапазон."
-#: builtin/log.c:906
+#: builtin/log.c:908
msgid "Not a range."
msgstr "Не е диапазон."
-#: builtin/log.c:1012
+#: builtin/log.c:1014
msgid "Cover letter needs email format"
msgstr "Придружаващото писмо трябва да е форматирано като е-писмо"
-#: builtin/log.c:1092
+#: builtin/log.c:1095
#, c-format
msgid "insane in-reply-to: %s"
msgstr "неправилен формат на заглавната част за отговор „in-reply-to“: %s"
-#: builtin/log.c:1119
+#: builtin/log.c:1122
msgid "git format-patch [<options>] [<since> | <revision-range>]"
msgstr "git format-patch [ОПЦИЯ…] [ОТ | ДИАПАЗОН_НА_ВЕРСИИТЕ]"
-#: builtin/log.c:1169
+#: builtin/log.c:1172
msgid "Two output directories?"
msgstr "Можете да укажете максимум една директория за изход."
-#: builtin/log.c:1276 builtin/log.c:1927 builtin/log.c:1929 builtin/log.c:1941
+#: builtin/log.c:1279 builtin/log.c:1932 builtin/log.c:1934 builtin/log.c:1946
#, c-format
msgid "Unknown commit %s"
msgstr "Непознато подаване „%s“"
-#: builtin/log.c:1286 builtin/notes.c:887 builtin/tag.c:516
+#: builtin/log.c:1289 builtin/notes.c:887 builtin/tag.c:522
#, c-format
msgid "Failed to resolve '%s' as a valid ref."
msgstr "Не може да се открие към какво сочи „%s“."
-#: builtin/log.c:1291
+#: builtin/log.c:1294
msgid "Could not find exact merge base."
msgstr "Точната база за сливане не може да се открие."
-#: builtin/log.c:1295
+#: builtin/log.c:1298
msgid ""
"Failed to get upstream, if you want to record base commit automatically,\n"
"please use git branch --set-upstream-to to track a remote branch.\n"
@@ -10007,234 +10217,234 @@ msgstr ""
"зададете, използвайте „git branch --set-upstream-to“.\n"
"Можете ръчно да зададете базово подаване чрез „--base=<base-commit-id>“."
-#: builtin/log.c:1315
+#: builtin/log.c:1318
msgid "Failed to find exact merge base"
msgstr "Точната база при сливане не може да бъде открита"
-#: builtin/log.c:1326
+#: builtin/log.c:1329
msgid "base commit should be the ancestor of revision list"
msgstr "базовото подаване трябва да е предшественикът на списъка с версиите"
-#: builtin/log.c:1330
+#: builtin/log.c:1333
msgid "base commit shouldn't be in revision list"
msgstr "базовото подаване не може да е в списъка с версиите"
-#: builtin/log.c:1379
+#: builtin/log.c:1382
msgid "cannot get patch id"
msgstr "идентификаторът на кръпката не може да бъде получен"
-#: builtin/log.c:1438
+#: builtin/log.c:1441
msgid "use [PATCH n/m] even with a single patch"
msgstr "номерация „[PATCH n/m]“ дори и при единствена кръпка"
-#: builtin/log.c:1441
+#: builtin/log.c:1444
msgid "use [PATCH] even with multiple patches"
msgstr "номерация „[PATCH]“ дори и при множество кръпки"
-#: builtin/log.c:1445
+#: builtin/log.c:1448
msgid "print patches to standard out"
msgstr "извеждане на кръпките на стандартния изход"
-#: builtin/log.c:1447
+#: builtin/log.c:1450
msgid "generate a cover letter"
msgstr "създаване на придружаващо писмо"
-#: builtin/log.c:1449
+#: builtin/log.c:1452
msgid "use simple number sequence for output file names"
msgstr "проста числова последователност за имената на файловете-кръпки"
-#: builtin/log.c:1450
+#: builtin/log.c:1453
msgid "sfx"
msgstr "ЗНАЦИ"
-#: builtin/log.c:1451
+#: builtin/log.c:1454
msgid "use <sfx> instead of '.patch'"
msgstr "използване на тези ЗНАЦИ за суфикс вместо „.patch“"
-#: builtin/log.c:1453
+#: builtin/log.c:1456
msgid "start numbering patches at <n> instead of 1"
msgstr "номерирането на кръпките да започва от този БРОЙ, а не с 1"
-#: builtin/log.c:1455
+#: builtin/log.c:1458
msgid "mark the series as Nth re-roll"
msgstr "отбелязване, че това е N-тата поредна редакция на поредицата от кръпки"
-#: builtin/log.c:1457
+#: builtin/log.c:1460
msgid "Use [RFC PATCH] instead of [PATCH]"
msgstr "Използване на „[RFC PATCH]“ вместо „[PATCH]“"
-#: builtin/log.c:1460
+#: builtin/log.c:1463
msgid "Use [<prefix>] instead of [PATCH]"
msgstr "Използване на този „[ПРЕФИКС]“ вместо „[PATCH]“"
-#: builtin/log.c:1463
+#: builtin/log.c:1466
msgid "store resulting files in <dir>"
msgstr "запазване на изходните файлове в тази ДИРЕКТОРИЯ"
-#: builtin/log.c:1466
+#: builtin/log.c:1469
msgid "don't strip/add [PATCH]"
msgstr "без добавяне/махане на префикса „[PATCH]“"
-#: builtin/log.c:1469
+#: builtin/log.c:1472
msgid "don't output binary diffs"
msgstr "без извеждане на разлики между двоични файлове"
-#: builtin/log.c:1471
+#: builtin/log.c:1474
msgid "output all-zero hash in From header"
msgstr "в заглавната част „From:“ (от) хешът да е само от нули"
-#: builtin/log.c:1473
+#: builtin/log.c:1476
msgid "don't include a patch matching a commit upstream"
msgstr "да не се включват кръпки, които присъстват в следения клон"
-#: builtin/log.c:1475
+#: builtin/log.c:1478
msgid "show patch format instead of default (patch + stat)"
msgstr ""
"извеждане във формат за кръпки, а на в стандартния (кръпка и статистика)"
-#: builtin/log.c:1477
+#: builtin/log.c:1480
msgid "Messaging"
msgstr "Опции при изпращане"
-#: builtin/log.c:1478
+#: builtin/log.c:1481
msgid "header"
msgstr "ЗАГЛАВНА_ЧАСТ"
-#: builtin/log.c:1479
+#: builtin/log.c:1482
msgid "add email header"
msgstr "добавяне на тази ЗАГЛАВНА_ЧАСТ"
-#: builtin/log.c:1480 builtin/log.c:1482
+#: builtin/log.c:1483 builtin/log.c:1485
msgid "email"
msgstr "Е-ПОЩА"
-#: builtin/log.c:1480
+#: builtin/log.c:1483
msgid "add To: header"
msgstr "добавяне на заглавна част „To:“ (до)"
-#: builtin/log.c:1482
+#: builtin/log.c:1485
msgid "add Cc: header"
msgstr "добавяне на заглавна част „Cc:“ (и до)"
-#: builtin/log.c:1484
+#: builtin/log.c:1487
msgid "ident"
msgstr "ИДЕНТИЧНОСТ"
-#: builtin/log.c:1485
+#: builtin/log.c:1488
msgid "set From address to <ident> (or committer ident if absent)"
msgstr ""
"задаване на адреса в заглавната част „From“ (от) да е тази ИДЕНТИЧНОСТ. Ако "
"не е зададена такава, се взима адреса на подаващия"
-#: builtin/log.c:1487
+#: builtin/log.c:1490
msgid "message-id"
msgstr "ИДЕНТИФИКАТОР_НА_СЪОБЩЕНИЕ"
-#: builtin/log.c:1488
+#: builtin/log.c:1491
msgid "make first mail a reply to <message-id>"
msgstr ""
"първото съобщение да е в отговор на е-писмото с този "
"ИДЕНТИФИКАТОР_НА_СЪОБЩЕНИЕ"
-#: builtin/log.c:1489 builtin/log.c:1492
+#: builtin/log.c:1492 builtin/log.c:1495
msgid "boundary"
msgstr "граница"
-#: builtin/log.c:1490
+#: builtin/log.c:1493
msgid "attach the patch"
msgstr "прикрепяне на кръпката"
-#: builtin/log.c:1493
+#: builtin/log.c:1496
msgid "inline the patch"
msgstr "включване на кръпката в текста на писмата"
-#: builtin/log.c:1497
+#: builtin/log.c:1500
msgid "enable message threading, styles: shallow, deep"
msgstr ""
"използване на нишки за съобщенията. СТИЛът е „shallow“ (плитък) или "
"„deep“ (дълбок)"
-#: builtin/log.c:1499
+#: builtin/log.c:1502
msgid "signature"
msgstr "подпис"
-#: builtin/log.c:1500
+#: builtin/log.c:1503
msgid "add a signature"
msgstr "добавяне на поле за подпис"
-#: builtin/log.c:1501
+#: builtin/log.c:1504
msgid "base-commit"
msgstr "БАЗОВО_ПОДАВАНЕ"
-#: builtin/log.c:1502
+#: builtin/log.c:1505
msgid "add prerequisite tree info to the patch series"
msgstr "добавяне на необходимото БАЗово дърво към серията кръпки"
-#: builtin/log.c:1504
+#: builtin/log.c:1507
msgid "add a signature from a file"
msgstr "добавяне на подпис от файл"
-#: builtin/log.c:1505
+#: builtin/log.c:1508
msgid "don't print the patch filenames"
msgstr "без извеждане на имената на кръпките"
-#: builtin/log.c:1507
+#: builtin/log.c:1510
msgid "show progress while generating patches"
msgstr "извеждане на напредъка във фазата на създаване на кръпките"
-#: builtin/log.c:1582
+#: builtin/log.c:1585
#, c-format
msgid "invalid ident line: %s"
msgstr "грешна идентичност: %s"
-#: builtin/log.c:1597
+#: builtin/log.c:1600
msgid "-n and -k are mutually exclusive."
msgstr "опциите „-n“ и „-k“ са несъвместими."
-#: builtin/log.c:1599
+#: builtin/log.c:1602
msgid "--subject-prefix/--rfc and -k are mutually exclusive."
msgstr "опциите „--subject-prefix“/„-rfc“ и „-k“ са несъвместими."
-#: builtin/log.c:1607
+#: builtin/log.c:1610
msgid "--name-only does not make sense"
msgstr "опцията „--name-only“ е несъвместима с генерирането на кръпки"
-#: builtin/log.c:1609
+#: builtin/log.c:1612
msgid "--name-status does not make sense"
msgstr "опцията „--name-status“ е несъвместима с генерирането на кръпки"
-#: builtin/log.c:1611
+#: builtin/log.c:1614
msgid "--check does not make sense"
msgstr "опцията „--check“ е несъвместима с генерирането на кръпки"
-#: builtin/log.c:1641
+#: builtin/log.c:1646
msgid "standard output, or directory, which one?"
msgstr ""
"изходът може да или стандартният, или да е в директория, но не и двете."
-#: builtin/log.c:1643
+#: builtin/log.c:1648
#, c-format
msgid "Could not create directory '%s'"
msgstr "Директорията „%s“ не може да бъде създадена"
-#: builtin/log.c:1736
+#: builtin/log.c:1741
#, c-format
msgid "unable to read signature file '%s'"
msgstr "файлът „%s“ с подпис не може да бъде прочетен"
-#: builtin/log.c:1768
+#: builtin/log.c:1773
msgid "Generating patches"
msgstr "Създаване на кръпки"
-#: builtin/log.c:1812
+#: builtin/log.c:1817
msgid "Failed to create output files"
msgstr "Изходните файлове не могат да бъдат създадени"
-#: builtin/log.c:1862
+#: builtin/log.c:1867
msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
msgstr "git cherry [-v] [ОТДАЛЕЧЕН_КЛОН [ВРЪХ [ПРЕДЕЛ]]]"
-#: builtin/log.c:1916
+#: builtin/log.c:1921
#, c-format
msgid ""
"Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -10390,7 +10600,7 @@ msgstr "взимане предвид на „url.БАЗА.insteadOf“"
msgid "exit with exit code 2 if no matching refs are found"
msgstr "изход с код 2, ако не се открият съвпадащи указатели"
-#: builtin/ls-remote.c:66
+#: builtin/ls-remote.c:67
msgid "show underlying ref in addition to the object pointed by it"
msgstr "извеждане на указателя заедно с обекта сочен от него"
@@ -10437,186 +10647,186 @@ msgstr ""
msgid "empty mbox: '%s'"
msgstr "празна пощенска кутия mbox: „%s“"
-#: builtin/merge.c:48
+#: builtin/merge.c:49
msgid "git merge [<options>] [<commit>...]"
msgstr "git merge [ОПЦИЯ…] [ПОДАВАНЕ…]"
-#: builtin/merge.c:49
+#: builtin/merge.c:50
msgid "git merge --abort"
msgstr "git merge --abort"
-#: builtin/merge.c:50
+#: builtin/merge.c:51
msgid "git merge --continue"
msgstr "git merge --continue"
-#: builtin/merge.c:107
+#: builtin/merge.c:108
msgid "switch `m' requires a value"
msgstr "опцията „-m“ изисква стойност"
-#: builtin/merge.c:144
+#: builtin/merge.c:145
#, c-format
msgid "Could not find merge strategy '%s'.\n"
msgstr "Няма такава стратегия за сливане: „%s“.\n"
-#: builtin/merge.c:145
+#: builtin/merge.c:146
#, c-format
msgid "Available strategies are:"
msgstr "Наличните стратегии са:"
-#: builtin/merge.c:150
+#: builtin/merge.c:151
#, c-format
msgid "Available custom strategies are:"
msgstr "Допълнителните стратегии са:"
-#: builtin/merge.c:200 builtin/pull.c:137
+#: builtin/merge.c:201 builtin/pull.c:137
msgid "do not show a diffstat at the end of the merge"
msgstr "без извеждане на статистиката след завършване на сливане"
-#: builtin/merge.c:203 builtin/pull.c:140
+#: builtin/merge.c:204 builtin/pull.c:140
msgid "show a diffstat at the end of the merge"
msgstr "извеждане на статистиката след завършване на сливане"
-#: builtin/merge.c:204 builtin/pull.c:143
+#: builtin/merge.c:205 builtin/pull.c:143
msgid "(synonym to --stat)"
msgstr "(синоним на „--stat“)"
-#: builtin/merge.c:206 builtin/pull.c:146
+#: builtin/merge.c:207 builtin/pull.c:146
msgid "add (at most <n>) entries from shortlog to merge commit message"
msgstr ""
"добавяне (на максимум такъв БРОЙ) записи от съкратения журнал в съобщението "
"за подаване"
-#: builtin/merge.c:209 builtin/pull.c:152
+#: builtin/merge.c:210 builtin/pull.c:152
msgid "create a single commit instead of doing a merge"
msgstr "създаване на едно подаване вместо извършване на сливане"
-#: builtin/merge.c:211 builtin/pull.c:155
+#: builtin/merge.c:212 builtin/pull.c:155
msgid "perform a commit if the merge succeeds (default)"
msgstr "извършване на подаване при успешно сливане (стандартно действие)"
-#: builtin/merge.c:213 builtin/pull.c:158
+#: builtin/merge.c:214 builtin/pull.c:158
msgid "edit message before committing"
msgstr "редактиране на съобщението преди подаване"
-#: builtin/merge.c:214
+#: builtin/merge.c:215
msgid "allow fast-forward (default)"
msgstr "позволяване на превъртане (стандартно действие)"
-#: builtin/merge.c:216 builtin/pull.c:164
+#: builtin/merge.c:217 builtin/pull.c:164
msgid "abort if fast-forward is not possible"
msgstr "преустановяване, ако превъртането е невъзможно"
-#: builtin/merge.c:220 builtin/pull.c:167
+#: builtin/merge.c:221 builtin/pull.c:167
msgid "verify that the named commit has a valid GPG signature"
msgstr "проверка, че указаното подаване е с правилен подпис на GPG"
-#: builtin/merge.c:221 builtin/notes.c:777 builtin/pull.c:171
+#: builtin/merge.c:222 builtin/notes.c:777 builtin/pull.c:171
#: builtin/revert.c:109
msgid "strategy"
msgstr "СТРАТЕГИЯ"
-#: builtin/merge.c:222 builtin/pull.c:172
+#: builtin/merge.c:223 builtin/pull.c:172
msgid "merge strategy to use"
msgstr "СТРАТЕГИЯ за сливане, която да се ползва"
-#: builtin/merge.c:223 builtin/pull.c:175
+#: builtin/merge.c:224 builtin/pull.c:175
msgid "option=value"
msgstr "ОПЦИЯ=СТОЙНОСТ"
-#: builtin/merge.c:224 builtin/pull.c:176
+#: builtin/merge.c:225 builtin/pull.c:176
msgid "option for selected merge strategy"
msgstr "ОПЦИЯ за избраната стратегия за сливане"
-#: builtin/merge.c:226
+#: builtin/merge.c:227
msgid "merge commit message (for a non-fast-forward merge)"
msgstr "СЪОБЩЕНИЕ при подаването със сливане (при същински сливания)"
-#: builtin/merge.c:230
+#: builtin/merge.c:231
msgid "abort the current in-progress merge"
msgstr "преустановяване на текущото сливане"
-#: builtin/merge.c:232
+#: builtin/merge.c:233
msgid "continue the current in-progress merge"
msgstr "продължаване на текущото сливане"
-#: builtin/merge.c:234 builtin/pull.c:183
+#: builtin/merge.c:235 builtin/pull.c:183
msgid "allow merging unrelated histories"
msgstr "позволяване на сливане на независими истории"
-#: builtin/merge.c:240
+#: builtin/merge.c:241
msgid "verify commit-msg hook"
msgstr ""
"проверка на куката при промяна на съобщението при подаване (commit-msg)"
-#: builtin/merge.c:265
+#: builtin/merge.c:266
msgid "could not run stash."
msgstr "не може да се извърши скатаване"
-#: builtin/merge.c:270
+#: builtin/merge.c:271
msgid "stash failed"
msgstr "неуспешно скатаване"
-#: builtin/merge.c:275
+#: builtin/merge.c:276
#, c-format
msgid "not a valid object: %s"
msgstr "неправилен обект: „%s“"
-#: builtin/merge.c:297 builtin/merge.c:314
+#: builtin/merge.c:298 builtin/merge.c:315
msgid "read-tree failed"
msgstr "неуспешно прочитане на обект-дърво"
-#: builtin/merge.c:344
+#: builtin/merge.c:345
msgid " (nothing to squash)"
msgstr " (няма какво да се смачка)"
-#: builtin/merge.c:355
+#: builtin/merge.c:356
#, c-format
msgid "Squash commit -- not updating HEAD\n"
msgstr "Подаване със смачкване — указателят „HEAD“ няма да бъде обновен\n"
-#: builtin/merge.c:405
+#: builtin/merge.c:406
#, c-format
msgid "No merge message -- not updating HEAD\n"
msgstr ""
"Липсва съобщение при подаване — указателят „HEAD“ няма да бъде обновен\n"
-#: builtin/merge.c:455
+#: builtin/merge.c:456
#, c-format
msgid "'%s' does not point to a commit"
msgstr "„%s“ не сочи към подаване"
-#: builtin/merge.c:545
+#: builtin/merge.c:546
#, c-format
msgid "Bad branch.%s.mergeoptions string: %s"
msgstr "Неправилен низ за настройката „branch.%s.mergeoptions“: „%s“"
-#: builtin/merge.c:667
+#: builtin/merge.c:668
msgid "Not handling anything other than two heads merge."
msgstr "Поддържа се само сливане на точно две истории."
-#: builtin/merge.c:681
+#: builtin/merge.c:682
#, c-format
msgid "Unknown option for merge-recursive: -X%s"
msgstr "Непозната опция за рекурсивното сливане „merge-recursive“: „-X%s“"
-#: builtin/merge.c:696
+#: builtin/merge.c:697
#, c-format
msgid "unable to write %s"
msgstr "„%s“ не може да бъде записан"
-#: builtin/merge.c:748
+#: builtin/merge.c:749
#, c-format
msgid "Could not read from '%s'"
msgstr "От „%s“ не може да се чете"
-#: builtin/merge.c:757
+#: builtin/merge.c:758
#, c-format
msgid "Not committing merge; use 'git commit' to complete the merge.\n"
msgstr ""
"Сливането няма да бъде подадено. За завършването му и подаването му "
"използвайте командата „git commit“.\n"
-#: builtin/merge.c:763
+#: builtin/merge.c:764
#, c-format
msgid ""
"Please enter a commit message to explain why this merge is necessary,\n"
@@ -10631,72 +10841,72 @@ msgstr ""
"Редовете, които започват с „%c“ ще бъдат пропуснати, а празно съобщение\n"
"преустановява подаването.\n"
-#: builtin/merge.c:799
+#: builtin/merge.c:800
msgid "Empty commit message."
msgstr "Празно съобщение при подаване."
-#: builtin/merge.c:819
+#: builtin/merge.c:820
#, c-format
msgid "Wonderful.\n"
msgstr "Първият етап на сливането завърши.\n"
-#: builtin/merge.c:872
+#: builtin/merge.c:873
#, c-format
msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
msgstr ""
"Неуспешно автоматично сливане — коригирайте конфликтите и подайте "
"резултата.\n"
-#: builtin/merge.c:911
+#: builtin/merge.c:912
msgid "No current branch."
msgstr "Няма текущ клон."
-#: builtin/merge.c:913
+#: builtin/merge.c:914
msgid "No remote for the current branch."
msgstr "Текущият клон не следи никой."
-#: builtin/merge.c:915
+#: builtin/merge.c:916
msgid "No default upstream defined for the current branch."
msgstr "Текущият клон не следи никой клон."
-#: builtin/merge.c:920
+#: builtin/merge.c:921
#, c-format
msgid "No remote-tracking branch for %s from %s"
msgstr "Никой клон не следи клона „%s“ от хранилището „%s“"
-#: builtin/merge.c:973
+#: builtin/merge.c:974
#, c-format
msgid "Bad value '%s' in environment '%s'"
msgstr "Неправилна стойност „%s“ в средата „%s“"
-#: builtin/merge.c:1075
+#: builtin/merge.c:1076
#, c-format
msgid "not something we can merge in %s: %s"
msgstr "не може да се слее в „%s“: %s"
-#: builtin/merge.c:1109
+#: builtin/merge.c:1110
msgid "not something we can merge"
msgstr "не може да се слее"
-#: builtin/merge.c:1174
+#: builtin/merge.c:1212
msgid "--abort expects no arguments"
msgstr "опцията „--abort“ не приема аргументи"
-#: builtin/merge.c:1178
+#: builtin/merge.c:1216
msgid "There is no merge to abort (MERGE_HEAD missing)."
msgstr ""
"Не може да преустановите сливане, защото в момента не се извършва такова "
"(липсва указател „MERGE_HEAD“)."
-#: builtin/merge.c:1190
+#: builtin/merge.c:1228
msgid "--continue expects no arguments"
msgstr "опцията „--continue“ не приема аргументи"
-#: builtin/merge.c:1194
+#: builtin/merge.c:1232
msgid "There is no merge in progress (MERGE_HEAD missing)."
msgstr "В момента не се извършва сливане (липсва указател „MERGE_HEAD“)."
-#: builtin/merge.c:1210
+#: builtin/merge.c:1248
msgid ""
"You have not concluded your merge (MERGE_HEAD exists).\n"
"Please, commit your changes before you merge."
@@ -10704,7 +10914,7 @@ msgstr ""
"Не сте завършили сливане. (Указателят „MERGE_HEAD“ съществува).\n"
"Подайте промените си, преди да започнете ново сливане."
-#: builtin/merge.c:1217
+#: builtin/merge.c:1255
msgid ""
"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
"Please, commit your changes before you merge."
@@ -10712,121 +10922,121 @@ msgstr ""
"Не сте завършили отбиране на подаване (указателят „CHERRY_PICK_HEAD“\n"
"съществува). Подайте промените си, преди да започнете ново сливане."
-#: builtin/merge.c:1220
+#: builtin/merge.c:1258
msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
msgstr ""
"Не сте завършили отбиране на подаване (указателят „CHERRY_PICK_HEAD“\n"
"съществува)."
-#: builtin/merge.c:1229
+#: builtin/merge.c:1267
msgid "You cannot combine --squash with --no-ff."
msgstr "Опцията „--squash“ е несъвместима с „--no-ff“."
-#: builtin/merge.c:1237
+#: builtin/merge.c:1275
msgid "No commit specified and merge.defaultToUpstream not set."
msgstr ""
"Не е указано подаване и настройката „merge.defaultToUpstream“ не е зададена."
-#: builtin/merge.c:1254
+#: builtin/merge.c:1292
msgid "Squash commit into empty head not supported yet"
msgstr "Подаване със смачкване във връх без история все още не се поддържа"
-#: builtin/merge.c:1256
+#: builtin/merge.c:1294
msgid "Non-fast-forward commit does not make sense into an empty head"
msgstr ""
"Понеже върхът е без история, всички сливания са превъртания, не може да се "
"извърши същинско сливане изисквано от опцията „--no-ff“"
-#: builtin/merge.c:1261
+#: builtin/merge.c:1299
#, c-format
msgid "%s - not something we can merge"
msgstr "„%s“ — не е нещо, което може да се слее"
-#: builtin/merge.c:1263
+#: builtin/merge.c:1301
msgid "Can merge only exactly one commit into empty head"
msgstr "Можете да слеете точно едно подаване във връх без история"
-#: builtin/merge.c:1297
+#: builtin/merge.c:1335
#, c-format
msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
msgstr ""
"Подаването „%s“ е с недоверен подпис от GPG, който твърди, че е на „%s“."
-#: builtin/merge.c:1300
+#: builtin/merge.c:1338
#, c-format
msgid "Commit %s has a bad GPG signature allegedly by %s."
msgstr ""
"Подаването „%s“ е с неправилен подпис от GPG, който твърди, че е на „%s“."
-#: builtin/merge.c:1303
+#: builtin/merge.c:1341
#, c-format
msgid "Commit %s does not have a GPG signature."
msgstr "Подаването „%s“ е без подпис от GPG."
-#: builtin/merge.c:1306
+#: builtin/merge.c:1344
#, c-format
msgid "Commit %s has a good GPG signature by %s\n"
msgstr "Подаването „%s“ е с коректен подпис от GPG на „%s“.\n"
-#: builtin/merge.c:1368
+#: builtin/merge.c:1403
msgid "refusing to merge unrelated histories"
msgstr "независими истории не може да се слеят"
-#: builtin/merge.c:1377
+#: builtin/merge.c:1412
msgid "Already up to date."
msgstr "Вече е обновено."
-#: builtin/merge.c:1387
+#: builtin/merge.c:1422
#, c-format
msgid "Updating %s..%s\n"
msgstr "Обновяване „%s..%s“\n"
-#: builtin/merge.c:1428
+#: builtin/merge.c:1463
#, c-format
msgid "Trying really trivial in-index merge...\n"
msgstr "Проба със сливане в рамките на индекса…\n"
-#: builtin/merge.c:1435
+#: builtin/merge.c:1470
#, c-format
msgid "Nope.\n"
msgstr "Неуспешно сливане.\n"
-#: builtin/merge.c:1460
+#: builtin/merge.c:1495
msgid "Already up to date. Yeeah!"
msgstr "Вече е обновено!"
-#: builtin/merge.c:1466
+#: builtin/merge.c:1501
msgid "Not possible to fast-forward, aborting."
msgstr "Не може да се извърши превъртане, преустановяване на действието."
-#: builtin/merge.c:1489 builtin/merge.c:1568
+#: builtin/merge.c:1524 builtin/merge.c:1603
#, c-format
msgid "Rewinding the tree to pristine...\n"
msgstr "Привеждане на дървото към първоначалното…\n"
-#: builtin/merge.c:1493
+#: builtin/merge.c:1528
#, c-format
msgid "Trying merge strategy %s...\n"
msgstr "Пробване със стратегията за сливане „%s“…\n"
-#: builtin/merge.c:1559
+#: builtin/merge.c:1594
#, c-format
msgid "No merge strategy handled the merge.\n"
msgstr "Никоя стратегия за сливане не може да извърши сливането.\n"
-#: builtin/merge.c:1561
+#: builtin/merge.c:1596
#, c-format
msgid "Merge with strategy %s failed.\n"
msgstr "Неуспешно сливане със стратегия „%s“.\n"
-#: builtin/merge.c:1570
+#: builtin/merge.c:1605
#, c-format
msgid "Using the %s to prepare resolving by hand.\n"
msgstr ""
"Ползва се стратегията „%s“, която ще подготви дървото за коригиране на "
"ръка.\n"
-#: builtin/merge.c:1582
+#: builtin/merge.c:1617
#, c-format
msgid "Automatic merge went well; stopped before committing as requested\n"
msgstr ""
@@ -10985,72 +11195,72 @@ msgstr "„%.*s“ вече е в индекса"
msgid "force move/rename even if target exists"
msgstr "принудително преместване/преименуване дори целта да съществува"
-#: builtin/mv.c:126
+#: builtin/mv.c:127
msgid "skip move/rename errors"
msgstr "прескачане на грешките при преместване/преименуване"
-#: builtin/mv.c:167
+#: builtin/mv.c:168
#, c-format
msgid "destination '%s' is not a directory"
msgstr "целта „%s“ съществува и не е директория"
-#: builtin/mv.c:178
+#: builtin/mv.c:179
#, c-format
msgid "Checking rename of '%s' to '%s'\n"
msgstr "Проверка на преименуването на обект от „%s“ на „%s“\n"
-#: builtin/mv.c:182
+#: builtin/mv.c:183
msgid "bad source"
msgstr "неправилен обект"
-#: builtin/mv.c:185
+#: builtin/mv.c:186
msgid "can not move directory into itself"
msgstr "директория не може да се премести в себе си"
-#: builtin/mv.c:188
+#: builtin/mv.c:189
msgid "cannot move directory over file"
msgstr "директория не може да се премести върху файл"
-#: builtin/mv.c:197
+#: builtin/mv.c:198
msgid "source directory is empty"
msgstr "първоначалната директория е празна"
-#: builtin/mv.c:222
+#: builtin/mv.c:223
msgid "not under version control"
msgstr "не е под контрола на Git"
-#: builtin/mv.c:225
+#: builtin/mv.c:226
msgid "destination exists"
msgstr "целта съществува"
-#: builtin/mv.c:233
+#: builtin/mv.c:234
#, c-format
msgid "overwriting '%s'"
msgstr "презаписване на „%s“"
-#: builtin/mv.c:236
+#: builtin/mv.c:237
msgid "Cannot overwrite"
msgstr "Презаписването е невъзможно"
-#: builtin/mv.c:239
+#: builtin/mv.c:240
msgid "multiple sources for the same target"
msgstr "множество източници за една цел"
-#: builtin/mv.c:241
+#: builtin/mv.c:242
msgid "destination directory does not exist"
msgstr "целевата директория не съществува"
-#: builtin/mv.c:248
+#: builtin/mv.c:249
#, c-format
msgid "%s, source=%s, destination=%s"
msgstr "%s, обект: „%s“, цел: „%s“"
-#: builtin/mv.c:269
+#: builtin/mv.c:270
#, c-format
msgid "Renaming %s to %s\n"
msgstr "Преименуване на „%s“ на „%s“\n"
-#: builtin/mv.c:275 builtin/remote.c:712 builtin/repack.c:390
+#: builtin/mv.c:276 builtin/remote.c:712 builtin/repack.c:394
#, c-format
msgid "renaming '%s' failed"
msgstr "неуспешно преименуване на „%s“"
@@ -11244,12 +11454,12 @@ msgstr "обектът-бележка не може да бъде записан
msgid "the note contents have been left in %s"
msgstr "съдържанието на бележката е във файла „%s“"
-#: builtin/notes.c:234 builtin/tag.c:500
+#: builtin/notes.c:234 builtin/tag.c:506
#, c-format
msgid "cannot read '%s'"
msgstr "файлът „%s“ не може да бъде прочетен"
-#: builtin/notes.c:236 builtin/tag.c:503
+#: builtin/notes.c:236 builtin/tag.c:509
#, c-format
msgid "could not open or read '%s'"
msgstr "файлът „%s“ не може да бъде отворен или прочетен"
@@ -11503,7 +11713,7 @@ msgstr "опитът за изтриването на несъществуващ
msgid "read object names from the standard input"
msgstr "изчитане на имената на обектите от стандартния вход"
-#: builtin/notes.c:943 builtin/prune.c:105 builtin/worktree.c:158
+#: builtin/notes.c:943 builtin/prune.c:106 builtin/worktree.c:160
msgid "do not remove, show only"
msgstr "само извеждане без действително окастряне"
@@ -11537,200 +11747,204 @@ msgstr ""
"git pack-objects [ОПЦИЯ…] ПРЕФИКС_НА_ИМЕТО [< СПИСЪК_С_УКАЗАТЕЛИ | < "
"СПИСЪК_С_ОБЕКТИ]"
-#: builtin/pack-objects.c:192 builtin/pack-objects.c:195
+#: builtin/pack-objects.c:195 builtin/pack-objects.c:198
#, c-format
msgid "deflate error (%d)"
msgstr "грешка при декомпресиране с „deflate“ (%d)"
-#: builtin/pack-objects.c:788
+#: builtin/pack-objects.c:791
msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
msgstr ""
"изключване на записването на битовата маска, пакетите са разделени поради "
"стойността на „pack.packSizeLimit“"
-#: builtin/pack-objects.c:801
+#: builtin/pack-objects.c:804
msgid "Writing objects"
msgstr "Записване на обектите"
-#: builtin/pack-objects.c:1081
+#: builtin/pack-objects.c:1084
msgid "disabling bitmap writing, as some objects are not being packed"
msgstr ""
"изключване на записването на битовата маска, защото някои обекти няма да се "
"пакетират"
-#: builtin/pack-objects.c:2451
+#: builtin/pack-objects.c:2454
msgid "Compressing objects"
msgstr "Компресиране на обектите"
-#: builtin/pack-objects.c:2599
+#: builtin/pack-objects.c:2625
msgid "invalid value for --missing"
msgstr "неправилна стойност за „--missing“"
-#: builtin/pack-objects.c:2902
+#: builtin/pack-objects.c:2928
#, c-format
msgid "unsupported index version %s"
msgstr "неподдържана версия на индекса „%s“"
-#: builtin/pack-objects.c:2906
+#: builtin/pack-objects.c:2932
#, c-format
msgid "bad index version '%s'"
msgstr "неправилна версия на индекса „%s“"
-#: builtin/pack-objects.c:2936
+#: builtin/pack-objects.c:2962
msgid "do not show progress meter"
msgstr "без извеждане на напредъка"
-#: builtin/pack-objects.c:2938
+#: builtin/pack-objects.c:2964
msgid "show progress meter"
msgstr "извеждане на напредъка"
-#: builtin/pack-objects.c:2940
+#: builtin/pack-objects.c:2966
msgid "show progress meter during object writing phase"
msgstr "извеждане на напредъка във фазата на запазване на обектите"
-#: builtin/pack-objects.c:2943
+#: builtin/pack-objects.c:2969
msgid "similar to --all-progress when progress meter is shown"
msgstr ""
"същото действие като опцията „--all-progress“ при извеждането на напредъка"
-#: builtin/pack-objects.c:2944
+#: builtin/pack-objects.c:2970
msgid "version[,offset]"
msgstr "ВЕРСИЯ[,ОТМЕСТВАНЕ]"
-#: builtin/pack-objects.c:2945
+#: builtin/pack-objects.c:2971
msgid "write the pack index file in the specified idx format version"
msgstr ""
"запазване на индекса на пакетните файлове във форма̀та с указаната версия"
-#: builtin/pack-objects.c:2948
+#: builtin/pack-objects.c:2974
msgid "maximum size of each output pack file"
msgstr "максимален размер на всеки пакетен файл"
-#: builtin/pack-objects.c:2950
+#: builtin/pack-objects.c:2976
msgid "ignore borrowed objects from alternate object store"
msgstr "игнориране на обектите заети от други хранилища на обекти"
-#: builtin/pack-objects.c:2952
+#: builtin/pack-objects.c:2978
msgid "ignore packed objects"
msgstr "игнориране на пакетираните обекти"
-#: builtin/pack-objects.c:2954
+#: builtin/pack-objects.c:2980
msgid "limit pack window by objects"
msgstr "ограничаване на прозореца за пакетиране по брой обекти"
-#: builtin/pack-objects.c:2956
+#: builtin/pack-objects.c:2982
msgid "limit pack window by memory in addition to object limit"
msgstr ""
"ограничаване на прозореца за пакетиране и по памет освен по брой обекти"
-#: builtin/pack-objects.c:2958
+#: builtin/pack-objects.c:2984
msgid "maximum length of delta chain allowed in the resulting pack"
msgstr ""
"максимална дължина на веригата от разлики, която е позволена в пакетния файл"
-#: builtin/pack-objects.c:2960
+#: builtin/pack-objects.c:2986
msgid "reuse existing deltas"
msgstr "преизползване на съществуващите разлики"
-#: builtin/pack-objects.c:2962
+#: builtin/pack-objects.c:2988
msgid "reuse existing objects"
msgstr "преизползване на съществуващите обекти"
-#: builtin/pack-objects.c:2964
+#: builtin/pack-objects.c:2990
msgid "use OFS_DELTA objects"
msgstr "използване на обекти „OFS_DELTA“"
-#: builtin/pack-objects.c:2966
+#: builtin/pack-objects.c:2992
msgid "use threads when searching for best delta matches"
msgstr ""
"стартиране на нишки за претърсване на най-добрите съвпадения на разликите"
-#: builtin/pack-objects.c:2968
+#: builtin/pack-objects.c:2994
msgid "do not create an empty pack output"
msgstr "без създаване на празен пакетен файл"
-#: builtin/pack-objects.c:2970
+#: builtin/pack-objects.c:2996
msgid "read revision arguments from standard input"
msgstr "изчитане на версиите от стандартния вход"
-#: builtin/pack-objects.c:2972
+#: builtin/pack-objects.c:2998
msgid "limit the objects to those that are not yet packed"
msgstr "ограничаване до все още непакетираните обекти"
-#: builtin/pack-objects.c:2975
+#: builtin/pack-objects.c:3001
msgid "include objects reachable from any reference"
msgstr ""
"включване на всички обекти, които могат да се достигнат от произволен "
"указател"
-#: builtin/pack-objects.c:2978
+#: builtin/pack-objects.c:3004
msgid "include objects referred by reflog entries"
msgstr "включване и на обектите сочени от записите в журнала на указателите"
-#: builtin/pack-objects.c:2981
+#: builtin/pack-objects.c:3007
msgid "include objects referred to by the index"
msgstr "включване и на обектите сочени от индекса"
-#: builtin/pack-objects.c:2984
+#: builtin/pack-objects.c:3010
msgid "output pack to stdout"
msgstr "извеждане на пакета на стандартния изход"
-#: builtin/pack-objects.c:2986
+#: builtin/pack-objects.c:3012
msgid "include tag objects that refer to objects to be packed"
msgstr ""
"включване и на обектите-етикети, които сочат към обектите, които ще бъдат "
"пакетирани"
-#: builtin/pack-objects.c:2988
+#: builtin/pack-objects.c:3014
msgid "keep unreachable objects"
msgstr "запазване на недостижимите обекти"
-#: builtin/pack-objects.c:2990
+#: builtin/pack-objects.c:3016
msgid "pack loose unreachable objects"
msgstr "пакетиране и на недостижимите обекти"
-#: builtin/pack-objects.c:2992
+#: builtin/pack-objects.c:3018
msgid "unpack unreachable objects newer than <time>"
msgstr "разпакетиране на недостижимите обекти, които са по-нови от това ВРЕМЕ"
-#: builtin/pack-objects.c:2995
+#: builtin/pack-objects.c:3021
msgid "create thin packs"
msgstr "създаване на съкратени пакети"
-#: builtin/pack-objects.c:2997
+#: builtin/pack-objects.c:3023
msgid "create packs suitable for shallow fetches"
msgstr "пакетиране подходящо за плитко доставяне"
-#: builtin/pack-objects.c:2999
+#: builtin/pack-objects.c:3025
msgid "ignore packs that have companion .keep file"
msgstr "игнориране на пакетите, които са придружени от файл „.keep“"
-#: builtin/pack-objects.c:3001
+#: builtin/pack-objects.c:3027
msgid "pack compression level"
msgstr "ниво на компресиране при пакетиране"
-#: builtin/pack-objects.c:3003
+#: builtin/pack-objects.c:3029
msgid "do not hide commits by grafts"
msgstr ""
"извеждане на всички родители — дори и тези, които нормално са скрити при "
"присажданията"
-#: builtin/pack-objects.c:3005
+#: builtin/pack-objects.c:3031
msgid "use a bitmap index if available to speed up counting objects"
msgstr ""
"използване на съществуващи индекси на база битови маски за ускоряване на "
"преброяването на обектите"
-#: builtin/pack-objects.c:3007
+#: builtin/pack-objects.c:3033
msgid "write a bitmap index together with the pack index"
msgstr ""
"запазване и на индекс на база побитова маска, заедно с индекса за пакета"
-#: builtin/pack-objects.c:3010
+#: builtin/pack-objects.c:3036
msgid "handling for missing objects"
msgstr "как да се обработват липсващите обекти"
-#: builtin/pack-objects.c:3144
+#: builtin/pack-objects.c:3039
+msgid "do not pack objects in promisor packfiles"
+msgstr "без пакетиране на обекти в гарантиращи пакети"
+
+#: builtin/pack-objects.c:3178
msgid "Counting objects"
msgstr "Преброяване на обектите"
@@ -11758,15 +11972,19 @@ msgstr "Изтриване на повтарящите се обекти"
msgid "git prune [-n] [-v] [--progress] [--expire <time>] [--] [<head>...]"
msgstr "git prune [-n] [-v] [--progress] [--expire ВРЕМЕ] [--] [ВРЪХ…]"
-#: builtin/prune.c:106
+#: builtin/prune.c:107
msgid "report pruned objects"
msgstr "информация за окастрените обекти"
-#: builtin/prune.c:109
+#: builtin/prune.c:110
msgid "expire objects older than <time>"
msgstr "окастряне на обектите по-стари от това ВРЕМЕ"
-#: builtin/prune.c:123
+#: builtin/prune.c:112
+msgid "limit traversal to objects outside promisor packfiles"
+msgstr "ограничаване на обхождането до обекти извън гарантиращи пакети"
+
+#: builtin/prune.c:126
msgid "cannot prune in a precious-objects repo"
msgstr "хранилище с важни обекти не може да се окастря"
@@ -11867,7 +12085,7 @@ msgstr "За повече информация погледнете ръково
msgid "<remote>"
msgstr "ОТДАЛЕЧЕНО_ХРАНИЛИЩЕ"
-#: builtin/pull.c:433 builtin/pull.c:448 builtin/pull.c:453 git-rebase.sh:466
+#: builtin/pull.c:433 builtin/pull.c:448 builtin/pull.c:453 git-rebase.sh:477
#: git-parse-remote.sh:65
msgid "<branch>"
msgstr "КЛОН"
@@ -11892,27 +12110,27 @@ msgstr ""
"За сливане е указан отдалеченият указател „%s“,\n"
"но такъв не е доставен."
-#: builtin/pull.c:817
+#: builtin/pull.c:819
msgid "ignoring --verify-signatures for rebase"
msgstr "без „--verify-signatures“ при пребазиране"
-#: builtin/pull.c:865
+#: builtin/pull.c:867
msgid "--[no-]autostash option is only valid with --rebase."
msgstr "опцията „--[no-]autostash“ изисква „--rebase“"
-#: builtin/pull.c:873
+#: builtin/pull.c:875
msgid "Updating an unborn branch with changes added to the index."
msgstr "Обновяване на все още несъздаден клон с промените от индекса"
-#: builtin/pull.c:876
+#: builtin/pull.c:878
msgid "pull with rebase"
msgstr "издърпване с пребазиране"
-#: builtin/pull.c:877
+#: builtin/pull.c:879
msgid "please commit or stash them."
msgstr "трябва да подадете или скатаете промените."
-#: builtin/pull.c:902
+#: builtin/pull.c:904
#, c-format
msgid ""
"fetch updated the current branch head.\n"
@@ -11922,7 +12140,7 @@ msgstr ""
"доставянето обнови върха на текущия клон. Работното\n"
"ви копие бе превъртяно от подаване „%s“."
-#: builtin/pull.c:907
+#: builtin/pull.c:909
#, c-format
msgid ""
"Cannot fast-forward your working tree.\n"
@@ -11939,15 +12157,15 @@ msgstr ""
" $ git reset --hard\n"
"за връщане към нормално състояние."
-#: builtin/pull.c:922
+#: builtin/pull.c:924
msgid "Cannot merge multiple branches into empty head."
msgstr "Не може да сливате множество клони в празен върхов указател."
-#: builtin/pull.c:926
+#: builtin/pull.c:928
msgid "Cannot rebase onto multiple branches."
msgstr "Не може да пребазирате върху повече от един клон."
-#: builtin/pull.c:933
+#: builtin/pull.c:935
msgid "cannot rebase with locally recorded submodule modifications"
msgstr ""
"пребазирането е невъзможно заради локално записаните промени по подмодулите"
@@ -12348,41 +12566,45 @@ msgstr "git rebase--helper [ОПЦИЯ…]"
msgid "keep empty commits"
msgstr "запазване на празните подавания"
-#: builtin/rebase--helper.c:25
+#: builtin/rebase--helper.c:26 builtin/revert.c:123
+msgid "allow commits with empty messages"
+msgstr "позволяване на празни съобщения при подаване"
+
+#: builtin/rebase--helper.c:27
msgid "continue rebase"
msgstr "продължаване на пребазирането"
-#: builtin/rebase--helper.c:27
+#: builtin/rebase--helper.c:29
msgid "abort rebase"
msgstr "преустановяване на пребазирането"
-#: builtin/rebase--helper.c:30
+#: builtin/rebase--helper.c:32
msgid "make rebase script"
msgstr "създаване на скрипт за пребазиране"
-#: builtin/rebase--helper.c:32
+#: builtin/rebase--helper.c:34
msgid "shorten commit ids in the todo list"
msgstr "съкратени идентификатори в списъка за изпълнение"
-#: builtin/rebase--helper.c:34
+#: builtin/rebase--helper.c:36
msgid "expand commit ids in the todo list"
msgstr "пълни идентификатори в списъка за изпълнение"
-#: builtin/rebase--helper.c:36
+#: builtin/rebase--helper.c:38
msgid "check the todo list"
msgstr "проверка на списъка за изпълнение"
-#: builtin/rebase--helper.c:38
+#: builtin/rebase--helper.c:40
msgid "skip unnecessary picks"
msgstr "прескачане на излишните команди за отбиране"
-#: builtin/rebase--helper.c:40
+#: builtin/rebase--helper.c:42
msgid "rearrange fixup/squash lines"
msgstr ""
"преподреждане на редовете за сливане на подаванията със и без смени на "
"съобщението"
-#: builtin/rebase--helper.c:42
+#: builtin/rebase--helper.c:44
msgid "insert exec commands in todo list"
msgstr "вмъкване на командите за изпълнение в списъка за изпълнение"
@@ -12390,7 +12612,7 @@ msgstr "вмъкване на командите за изпълнение в с
msgid "git receive-pack <git-dir>"
msgstr "git receive-pack ДИРЕКТОРИЯ_НА_GIT"
-#: builtin/receive-pack.c:840
+#: builtin/receive-pack.c:841
msgid ""
"By default, updating the current branch in a non-bare repository\n"
"is denied, because it will make the index and work tree inconsistent\n"
@@ -12423,7 +12645,7 @@ msgstr ""
"За да заглушите това съобщение, като запазите стандартното поведение,\n"
"задайте настройката „receive.denyCurrentBranch“ да е „refuse“ (отказ)."
-#: builtin/receive-pack.c:860
+#: builtin/receive-pack.c:861
msgid ""
"By default, deleting the current branch is denied, because the next\n"
"'git clone' won't result in any file checked out, causing confusion.\n"
@@ -12444,15 +12666,15 @@ msgstr ""
"За да заглушите това съобщение, задайте настройката\n"
"„receive.denyDeleteCurrent“ да е „refuse“ (отказ)."
-#: builtin/receive-pack.c:1933
+#: builtin/receive-pack.c:1934
msgid "quiet"
msgstr "без извеждане на информация"
-#: builtin/receive-pack.c:1947
+#: builtin/receive-pack.c:1948
msgid "You must specify a directory."
msgstr "Трябва да укажете директория."
-#: builtin/reflog.c:531 builtin/reflog.c:536
+#: builtin/reflog.c:532 builtin/reflog.c:537
#, c-format
msgid "'%s' is not a valid timestamp"
msgstr "„%s“ не е правилна стойност за време"
@@ -12987,96 +13209,96 @@ msgstr ""
"Ползвайте опцията --no-write-bitmap-index или изключете настройката\n"
"„pack.writebitmaps“."
-#: builtin/repack.c:168
+#: builtin/repack.c:170
msgid "pack everything in a single pack"
msgstr "пакетиране на всичко в пакет"
-#: builtin/repack.c:170
+#: builtin/repack.c:172
msgid "same as -a, and turn unreachable objects loose"
msgstr ""
"същото като опцията „-a“. Допълнително — недостижимите обекти да станат "
"непакетирани"
-#: builtin/repack.c:173
+#: builtin/repack.c:175
msgid "remove redundant packs, and run git-prune-packed"
msgstr ""
"премахване на ненужните пакетирани файлове и изпълнение на командата „git-"
"prune-packed“"
-#: builtin/repack.c:175
+#: builtin/repack.c:177
msgid "pass --no-reuse-delta to git-pack-objects"
msgstr "подаване на опцията „--no-reuse-delta“ на командата „git-pack-objects“"
-#: builtin/repack.c:177
+#: builtin/repack.c:179
msgid "pass --no-reuse-object to git-pack-objects"
msgstr ""
"подаване на опцията „--no-reuse-object“ на командата „git-pack-objects“"
-#: builtin/repack.c:179
+#: builtin/repack.c:181
msgid "do not run git-update-server-info"
msgstr "без изпълнение на командата „git-update-server-info“"
-#: builtin/repack.c:182
+#: builtin/repack.c:184
msgid "pass --local to git-pack-objects"
msgstr "подаване на опцията „--local“ на командата „git-pack-objects“"
-#: builtin/repack.c:184
+#: builtin/repack.c:186
msgid "write bitmap index"
msgstr "създаване и записване на индекси на база битови маски"
-#: builtin/repack.c:185
+#: builtin/repack.c:187
msgid "approxidate"
msgstr "евристична дата"
-#: builtin/repack.c:186
+#: builtin/repack.c:188
msgid "with -A, do not loosen objects older than this"
msgstr ""
"при комбинирането с опцията „-A“ — без разпакетиране на обектите по стари от "
"това"
-#: builtin/repack.c:188
+#: builtin/repack.c:190
msgid "with -a, repack unreachable objects"
msgstr "с „-a“ — препакетиране на недостижимите обекти"
-#: builtin/repack.c:190
+#: builtin/repack.c:192
msgid "size of the window used for delta compression"
msgstr "размер на прозореца за делта компресията"
-#: builtin/repack.c:191 builtin/repack.c:197
+#: builtin/repack.c:193 builtin/repack.c:199
msgid "bytes"
msgstr "байтове"
-#: builtin/repack.c:192
+#: builtin/repack.c:194
msgid "same as the above, but limit memory size instead of entries count"
msgstr ""
"същото като горната опция, но ограничението да е по размер на паметта, а не "
"по броя на обектите"
-#: builtin/repack.c:194
+#: builtin/repack.c:196
msgid "limits the maximum delta depth"
msgstr "ограничаване на максималната дълбочина на делтата"
-#: builtin/repack.c:196
+#: builtin/repack.c:198
msgid "limits the maximum number of threads"
msgstr "ограничаване на максималния брой нишки"
-#: builtin/repack.c:198
+#: builtin/repack.c:200
msgid "maximum size of each packfile"
msgstr "максимален размер на всеки пакет"
-#: builtin/repack.c:200
+#: builtin/repack.c:202
msgid "repack objects in packs marked with .keep"
msgstr "препакетиране на обектите в пакети белязани с „.keep“"
-#: builtin/repack.c:210
+#: builtin/repack.c:212
msgid "cannot delete packs in a precious-objects repo"
msgstr "пакетите в хранилище с важни обекти не може да се трият"
-#: builtin/repack.c:214
+#: builtin/repack.c:216
msgid "--keep-unreachable and -A are incompatible"
msgstr "Опциите „--keep-unreachable“ и „-A“ са несъвместими"
-#: builtin/repack.c:406 builtin/worktree.c:146
+#: builtin/repack.c:410 builtin/worktree.c:148
#, c-format
msgid "failed to remove '%s'"
msgstr "директорията „%s“ не може да бъде изтрита"
@@ -13159,11 +13381,11 @@ msgstr "смяна на родителите на подаване"
msgid "replace the ref if it exists"
msgstr "замяна на указателя, ако съществува"
-#: builtin/replace.c:443
+#: builtin/replace.c:444
msgid "do not pretty-print contents for --edit"
msgstr "без форматирано извеждане на съдържанието — за опцията „--edit“"
-#: builtin/replace.c:444
+#: builtin/replace.c:445
msgid "use this format"
msgstr "използване на този ФОРМАТ"
@@ -13222,103 +13444,107 @@ msgstr "Дървото, сочено от указателя „HEAD“, не м
msgid "Failed to find tree of %s."
msgstr "Дървото, сочено от „%s“, не може да бъде открито."
-#: builtin/reset.c:113
+#: builtin/reset.c:111
#, c-format
msgid "HEAD is now at %s"
msgstr "Указателят „HEAD“ сочи към „%s“"
-#: builtin/reset.c:197
+#: builtin/reset.c:189
#, c-format
msgid "Cannot do a %s reset in the middle of a merge."
msgstr "Не може да се извърши %s зануляване по време на сливане."
-#: builtin/reset.c:297
+#: builtin/reset.c:289
msgid "be quiet, only report errors"
msgstr "по-малко подробности, да се извеждат само грешките"
-#: builtin/reset.c:299
+#: builtin/reset.c:291
msgid "reset HEAD and index"
msgstr "индекса и указателя „HEAD“, без работното дърво"
-#: builtin/reset.c:300
+#: builtin/reset.c:292
msgid "reset only HEAD"
msgstr "само указателя „HEAD“, без индекса и работното дърво"
-#: builtin/reset.c:302 builtin/reset.c:304
+#: builtin/reset.c:294 builtin/reset.c:296
msgid "reset HEAD, index and working tree"
msgstr "указателя „HEAD“, индекса и работното дърво"
-#: builtin/reset.c:306
+#: builtin/reset.c:298
msgid "reset HEAD but keep local changes"
msgstr "зануляване на указателя „HEAD“, но запазване на локалните промени"
-#: builtin/reset.c:312
+#: builtin/reset.c:304
msgid "record only the fact that removed paths will be added later"
msgstr ""
"отбелязване само на факта, че изтритите пътища ще бъдат добавени по-късно"
-#: builtin/reset.c:329
+#: builtin/reset.c:321
#, c-format
msgid "Failed to resolve '%s' as a valid revision."
msgstr "Стойността „%s“ не е разпозната като съществуваща версия."
-#: builtin/reset.c:337
+#: builtin/reset.c:329
#, c-format
msgid "Failed to resolve '%s' as a valid tree."
msgstr "„%s“ не е разпознат като дърво."
-#: builtin/reset.c:346
+#: builtin/reset.c:338
msgid "--patch is incompatible with --{hard,mixed,soft}"
msgstr ""
"опцията „--patch“ е несъвместима с всяка от опциите „--hard/--mixed/--soft“"
-#: builtin/reset.c:355
+#: builtin/reset.c:347
msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
msgstr ""
"опцията „--mixed“ не бива да се използва заедно с пътища. Вместо това "
"изпълнете „git reset -- ПЪТ…“."
-#: builtin/reset.c:357
+#: builtin/reset.c:349
#, c-format
msgid "Cannot do %s reset with paths."
msgstr "Не може да извършите %s зануляване, когато сте задали ПЪТ."
-#: builtin/reset.c:367
+#: builtin/reset.c:359
#, c-format
msgid "%s reset is not allowed in a bare repository"
msgstr "В голо хранилище не може да извършите %s зануляване"
-#: builtin/reset.c:371
+#: builtin/reset.c:363
msgid "-N can only be used with --mixed"
msgstr "Опцията „-N“ е съвместима само с „--mixed“"
-#: builtin/reset.c:388
+#: builtin/reset.c:380
msgid "Unstaged changes after reset:"
msgstr "Промени извън индекса след зануляването:"
-#: builtin/reset.c:394
+#: builtin/reset.c:386
#, c-format
msgid "Could not reset index file to revision '%s'."
msgstr "Индексът не може да бъде занулен към версия „%s“."
-#: builtin/reset.c:398
+#: builtin/reset.c:390
msgid "Could not write new index file."
msgstr "Новият индекс не може да бъде записан."
-#: builtin/rev-list.c:399
+#: builtin/rev-list.c:397
+msgid "cannot combine --exclude-promisor-objects and --missing"
+msgstr "опциите „--exclude-promisor-objects“ и „--missing“ и са несъвместими"
+
+#: builtin/rev-list.c:455
msgid "object filtering requires --objects"
msgstr "филтрирането на обекти изисква опцията „--objects“"
-#: builtin/rev-list.c:402
+#: builtin/rev-list.c:458
#, c-format
msgid "invalid sparse value '%s'"
msgstr "неправилна частична стойност: %s"
-#: builtin/rev-list.c:442
+#: builtin/rev-list.c:499
msgid "rev-list does not support display of notes"
msgstr "командата „rev-list“ не поддържа извеждането на бележки"
-#: builtin/rev-list.c:445
+#: builtin/rev-list.c:502
msgid "cannot combine --use-bitmap-index with object filtering"
msgstr "опцията „--use-bitmap-index“ е несъвместима с филтриране на обектите"
@@ -13422,10 +13648,6 @@ msgstr "добавяне на името на подаването"
msgid "preserve initially empty commits"
msgstr "запазване на първоначално празните подавания"
-#: builtin/revert.c:123
-msgid "allow commits with empty messages"
-msgstr "позволяване на празни съобщения при подаване"
-
#: builtin/revert.c:124
msgid "keep redundant, empty commits"
msgstr "запазване на излишните, празни подавания"
@@ -13783,35 +14005,40 @@ msgstr "пропускане на всички редове, които запо
msgid "prepend comment character and space to each line"
msgstr "добавяне на „# “ в началото на всеки ред"
-#: builtin/submodule--helper.c:34 builtin/submodule--helper.c:1332
+#: builtin/submodule--helper.c:35 builtin/submodule--helper.c:1669
#, c-format
msgid "No such ref: %s"
msgstr "Такъв указател няма: %s"
-#: builtin/submodule--helper.c:41 builtin/submodule--helper.c:1341
+#: builtin/submodule--helper.c:42 builtin/submodule--helper.c:1678
#, c-format
msgid "Expecting a full ref name, got %s"
msgstr "Очаква се пълно име на указател, а не „%s“"
-#: builtin/submodule--helper.c:81
+#: builtin/submodule--helper.c:59
+msgid "submodule--helper print-default-remote takes no arguments"
+msgstr ""
+"командата „print-default-remote“ на „submodule--helper“ не приема аргументи"
+
+#: builtin/submodule--helper.c:96
#, c-format
msgid "cannot strip one component off url '%s'"
msgstr "не може да се махне компонент от адреса „%s“"
-#: builtin/submodule--helper.c:370 builtin/submodule--helper.c:861
+#: builtin/submodule--helper.c:404 builtin/submodule--helper.c:1198
msgid "alternative anchor for relative paths"
msgstr "директория за определянето на относителните пътища"
-#: builtin/submodule--helper.c:375
+#: builtin/submodule--helper.c:409
msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
msgstr "git submodule--helper list [--prefix=ПЪТ] [ПЪТ…]"
-#: builtin/submodule--helper.c:426 builtin/submodule--helper.c:449
+#: builtin/submodule--helper.c:460 builtin/submodule--helper.c:483
#, c-format
msgid "No url found for submodule path '%s' in .gitmodules"
msgstr "Във файла „.gitmodules“ не е открит адрес за пътя към подмодул „%s“"
-#: builtin/submodule--helper.c:464
+#: builtin/submodule--helper.c:498
#, c-format
msgid ""
"could not lookup configuration '%s'. Assuming this repository is its own "
@@ -13820,55 +14047,55 @@ msgstr ""
"настройката „%s“ липсва. Приема се, че това хранилище е правилният източник "
"за себе си."
-#: builtin/submodule--helper.c:475
+#: builtin/submodule--helper.c:509
#, c-format
msgid "Failed to register url for submodule path '%s'"
msgstr "Неуспешно регистриране на адрес за пътя към подмодул „%s“"
-#: builtin/submodule--helper.c:479
+#: builtin/submodule--helper.c:513
#, c-format
msgid "Submodule '%s' (%s) registered for path '%s'\n"
msgstr "Регистриран е подмодул „%s“ (%s) за пътя към подмодул „%s“\n"
-#: builtin/submodule--helper.c:489
+#: builtin/submodule--helper.c:523
#, c-format
msgid "warning: command update mode suggested for submodule '%s'\n"
msgstr "ПРЕДУПРЕЖДЕНИЕ: препоръчва се режим на обновяване за подмодула „%s“\n"
-#: builtin/submodule--helper.c:496
+#: builtin/submodule--helper.c:530
#, c-format
msgid "Failed to register update mode for submodule path '%s'"
msgstr ""
"Неуспешно регистриране на режима на обновяване за пътя към подмодул „%s“"
-#: builtin/submodule--helper.c:518
+#: builtin/submodule--helper.c:552
msgid "Suppress output for initializing a submodule"
msgstr "Без извеждане на информация при инициализирането на подмодул"
-#: builtin/submodule--helper.c:523
+#: builtin/submodule--helper.c:557
msgid "git submodule--helper init [<path>]"
msgstr "git submodule--helper name [ПЪТ]"
-#: builtin/submodule--helper.c:591 builtin/submodule--helper.c:713
+#: builtin/submodule--helper.c:625 builtin/submodule--helper.c:747
#, c-format
msgid "no submodule mapping found in .gitmodules for path '%s'"
msgstr "Във файла „.gitmodules“ липсва информация за пътя „%s“"
-#: builtin/submodule--helper.c:626
+#: builtin/submodule--helper.c:660
#, c-format
msgid "could not resolve HEAD ref inside the submodule '%s'"
msgstr "указателят сочен от „HEAD“ в подмодула „%s“ не може да бъде открит"
-#: builtin/submodule--helper.c:653
+#: builtin/submodule--helper.c:687 builtin/submodule--helper.c:856
#, c-format
msgid "failed to recurse into submodule '%s'"
msgstr "неуспешно рекурсивно обхождане на подмодула „%s“"
-#: builtin/submodule--helper.c:677
+#: builtin/submodule--helper.c:711 builtin/submodule--helper.c:1021
msgid "Suppress submodule status output"
msgstr "Заглушаване на изхода за състоянието на подмодула"
-#: builtin/submodule--helper.c:678
+#: builtin/submodule--helper.c:712
msgid ""
"Use commit stored in the index instead of the one stored in the submodule "
"HEAD"
@@ -13876,55 +14103,145 @@ msgstr ""
"Използване на подаването указано в индекса, а не това от указателя „HEAD“ на "
"подмодула"
-#: builtin/submodule--helper.c:679
+#: builtin/submodule--helper.c:713
msgid "recurse into nested submodules"
msgstr "рекурсивно обхождане на подмодулите"
-#: builtin/submodule--helper.c:684
+#: builtin/submodule--helper.c:718
msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
msgstr "git submodule status [--quiet] [--cached] [--recursive] [ПЪТ…]"
-#: builtin/submodule--helper.c:708
+#: builtin/submodule--helper.c:742
msgid "git submodule--helper name <path>"
msgstr "git submodule--helper name ПЪТ"
-#: builtin/submodule--helper.c:796 builtin/submodule--helper.c:799
+#: builtin/submodule--helper.c:806
+#, c-format
+msgid "Synchronizing submodule url for '%s'\n"
+msgstr "Синхронизиране на адреса на подмодул за „%s“\n"
+
+#: builtin/submodule--helper.c:812
+#, c-format
+msgid "failed to register url for submodule path '%s'"
+msgstr "неуспешно регистриране на адрес за пътя към подмодул „%s“"
+
+#: builtin/submodule--helper.c:826
+#, c-format
+msgid "failed to get the default remote for submodule '%s'"
+msgstr "отдалеченият адрес на подмодула „%s“ не може да бъде получен"
+
+#: builtin/submodule--helper.c:837
+#, c-format
+msgid "failed to update remote for submodule '%s'"
+msgstr "отдалеченият адрес на подмодула „%s“ не може да бъде променен"
+
+#: builtin/submodule--helper.c:885
+msgid "Suppress output of synchronizing submodule url"
+msgstr "Без извеждане на информация при синхронизирането на подмодул"
+
+#: builtin/submodule--helper.c:887
+msgid "Recurse into nested submodules"
+msgstr "Рекурсивно обхождане на подмодулите"
+
+#: builtin/submodule--helper.c:892
+msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
+msgstr "git submodule--helper sync [--quiet] [--recursive] [ПЪТ]"
+
+#: builtin/submodule--helper.c:946
+#, c-format
+msgid ""
+"Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you "
+"really want to remove it including all of its history)"
+msgstr ""
+"Работното дърво на подмодул „%s“ съдържа директория „.git“.\n"
+"(ако искате да ги изтриете заедно с цялата им история, използвайте „rm -rf“)"
+
+#: builtin/submodule--helper.c:958
+#, c-format
+msgid ""
+"Submodule work tree '%s' contains local modifications; use '-f' to discard "
+"them"
+msgstr ""
+"Работното дърво на подмодул „%s“ съдържа локални промени. Можете да ги "
+"отхвърлите с опцията „-f“"
+
+#: builtin/submodule--helper.c:966
+#, c-format
+msgid "Cleared directory '%s'\n"
+msgstr "Директорията „%s“ е изчистена\n"
+
+#: builtin/submodule--helper.c:968
+#, c-format
+msgid "Could not remove submodule work tree '%s'\n"
+msgstr ""
+"Директорията към работното дърво на подмодула „%s“ не може да бъде изтрита\n"
+
+#: builtin/submodule--helper.c:977
+#, c-format
+msgid "could not create empty submodule directory %s"
+msgstr "празната директория за подмодула „%s“ не може да бъде създадена"
+
+#: builtin/submodule--helper.c:993
+#, c-format
+msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
+msgstr "Регистрацията на подмодула „%s“ (%s) за пътя „%s“ е премахната\n"
+
+#: builtin/submodule--helper.c:1022
+msgid "Remove submodule working trees even if they contain local changes"
+msgstr ""
+"Изтриване на работните дървета на подмодулите, дори когато те съдържат "
+"локални промени"
+
+#: builtin/submodule--helper.c:1023
+msgid "Unregister all submodules"
+msgstr "Премахване на регистрациите на всички подмодули"
+
+#: builtin/submodule--helper.c:1028
+msgid ""
+"git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
+msgstr "git submodule deinit [--quiet] [-f | --force] [--all | [--] [ПЪТ…]]"
+
+#: builtin/submodule--helper.c:1042
+msgid "Use '--all' if you really want to deinitialize all submodules"
+msgstr "Използвайте „--all“, за да премахнете всички подмодули"
+
+#: builtin/submodule--helper.c:1133 builtin/submodule--helper.c:1136
#, c-format
msgid "submodule '%s' cannot add alternate: %s"
msgstr "към подмодула „%s“ не може да се добави алтернативен източник: %s"
-#: builtin/submodule--helper.c:835
+#: builtin/submodule--helper.c:1172
#, c-format
msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
msgstr ""
"Непозната стойност „%s“ за настройката „submodule.alternateErrorStrategy“"
-#: builtin/submodule--helper.c:842
+#: builtin/submodule--helper.c:1179
#, c-format
msgid "Value '%s' for submodule.alternateLocation is not recognized"
msgstr "Непозната стойност „%s“ за настройката „submodule.alternateLocation“"
-#: builtin/submodule--helper.c:864
+#: builtin/submodule--helper.c:1201
msgid "where the new submodule will be cloned to"
msgstr "къде да се клонира новият подмодул"
-#: builtin/submodule--helper.c:867
+#: builtin/submodule--helper.c:1204
msgid "name of the new submodule"
msgstr "име на новия подмодул"
-#: builtin/submodule--helper.c:870
+#: builtin/submodule--helper.c:1207
msgid "url where to clone the submodule from"
msgstr "адрес, от който да се клонира новият подмодул"
-#: builtin/submodule--helper.c:876
+#: builtin/submodule--helper.c:1213
msgid "depth for shallow clones"
msgstr "дълбочина на плитките хранилища"
-#: builtin/submodule--helper.c:879 builtin/submodule--helper.c:1250
+#: builtin/submodule--helper.c:1216 builtin/submodule--helper.c:1587
msgid "force cloning progress"
msgstr "извеждане на напредъка на клонирането"
-#: builtin/submodule--helper.c:884
+#: builtin/submodule--helper.c:1221
msgid ""
"git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
"<repository>] [--name <name>] [--depth <depth>] --url <url> --path <path>"
@@ -13932,85 +14249,85 @@ msgstr ""
"git submodule--helper clone [--prefix=ПЪТ] [--quiet] [--reference ХРАНИЛИЩЕ] "
"[--name ИМЕ] [--depth ДЪЛБОЧИНА] --url АДРЕС --path ПЪТ…"
-#: builtin/submodule--helper.c:915
+#: builtin/submodule--helper.c:1252
#, c-format
msgid "clone of '%s' into submodule path '%s' failed"
msgstr "Неуспешно клониране на адреса „%s“ в пътя „%s“ като подмодул"
-#: builtin/submodule--helper.c:930
+#: builtin/submodule--helper.c:1267
#, c-format
msgid "could not get submodule directory for '%s'"
msgstr "директорията на подмодула „%s“ не може да бъде получена"
-#: builtin/submodule--helper.c:995
+#: builtin/submodule--helper.c:1332
#, c-format
msgid "Submodule path '%s' not initialized"
msgstr "Пътят на подмодула „%s“ не е инициализиран"
-#: builtin/submodule--helper.c:999
+#: builtin/submodule--helper.c:1336
msgid "Maybe you want to use 'update --init'?"
msgstr "Вероятно искахте да използвате „update --init“?"
-#: builtin/submodule--helper.c:1028
+#: builtin/submodule--helper.c:1365
#, c-format
msgid "Skipping unmerged submodule %s"
msgstr "Прескачане на неслетия подмодул „%s“"
-#: builtin/submodule--helper.c:1057
+#: builtin/submodule--helper.c:1394
#, c-format
msgid "Skipping submodule '%s'"
msgstr "Прескачане на подмодула „%s“"
-#: builtin/submodule--helper.c:1190
+#: builtin/submodule--helper.c:1527
#, c-format
msgid "Failed to clone '%s'. Retry scheduled"
msgstr "Неуспешен опит за клониране на „%s“. Насрочен е втори опит"
-#: builtin/submodule--helper.c:1201
+#: builtin/submodule--helper.c:1538
#, c-format
msgid "Failed to clone '%s' a second time, aborting"
msgstr ""
"Втори неуспешен опит за клониране на „%s“. Действието се преустановява"
-#: builtin/submodule--helper.c:1231 builtin/submodule--helper.c:1451
+#: builtin/submodule--helper.c:1568 builtin/submodule--helper.c:1788
msgid "path into the working tree"
msgstr "път към работното дърво"
-#: builtin/submodule--helper.c:1234
+#: builtin/submodule--helper.c:1571
msgid "path into the working tree, across nested submodule boundaries"
msgstr "път към работното дърво, през границите на вложените подмодули"
-#: builtin/submodule--helper.c:1238
+#: builtin/submodule--helper.c:1575
msgid "rebase, merge, checkout or none"
msgstr ""
"„rebase“ (пребазиране), „merge“ (сливане), „checkout“ (изтегляне) или "
"„none“ (нищо да не се прави)"
-#: builtin/submodule--helper.c:1242
+#: builtin/submodule--helper.c:1579
msgid "Create a shallow clone truncated to the specified number of revisions"
msgstr "Плитко клониране, отрязано до указания брой версии"
-#: builtin/submodule--helper.c:1245
+#: builtin/submodule--helper.c:1582
msgid "parallel jobs"
msgstr "брой паралелни процеси"
-#: builtin/submodule--helper.c:1247
+#: builtin/submodule--helper.c:1584
msgid "whether the initial clone should follow the shallow recommendation"
msgstr "дали първоначалното клониране да е плитко, както се препоръчва"
-#: builtin/submodule--helper.c:1248
+#: builtin/submodule--helper.c:1585
msgid "don't print cloning progress"
msgstr "без извеждане на напредъка на клонирането"
-#: builtin/submodule--helper.c:1255
+#: builtin/submodule--helper.c:1592
msgid "git submodule--helper update_clone [--prefix=<path>] [<path>...]"
msgstr "git submodule--helper update_clone [--prefix=ПЪТ] [ПЪТ…]"
-#: builtin/submodule--helper.c:1268
+#: builtin/submodule--helper.c:1605
msgid "bad value for update parameter"
msgstr "неправилен параметър към опцията „--update“"
-#: builtin/submodule--helper.c:1336
+#: builtin/submodule--helper.c:1673
#, c-format
msgid ""
"Submodule (%s) branch configured to inherit branch from superproject, but "
@@ -14019,20 +14336,20 @@ msgstr ""
"Клонът на подмодула „%s“ е настроен да наследява клона от обхващащия проект, "
"но той не е на никой клон"
-#: builtin/submodule--helper.c:1452
+#: builtin/submodule--helper.c:1789
msgid "recurse into submodules"
msgstr "рекурсивно обхождане подмодулите"
-#: builtin/submodule--helper.c:1458
+#: builtin/submodule--helper.c:1795
msgid "git submodule--helper embed-git-dir [<path>...]"
msgstr "git submodule--helper name embed-git-dir [ПЪТ…]"
-#: builtin/submodule--helper.c:1517
+#: builtin/submodule--helper.c:1857
#, c-format
msgid "%s doesn't support --super-prefix"
msgstr "„%s“ не поддържа опцията „--super-prefix“"
-#: builtin/submodule--helper.c:1523
+#: builtin/submodule--helper.c:1863
#, c-format
msgid "'%s' is not a valid submodule--helper subcommand"
msgstr "„%s“ не е подкоманда на „submodule--helper“"
@@ -14136,139 +14453,143 @@ msgstr "етикетът не може да бъде подписан"
msgid "unable to write tag file"
msgstr "файлът за етикета не може да бъде запазен"
-#: builtin/tag.c:215
+#: builtin/tag.c:216
msgid "bad object type."
msgstr "неправилен вид обект."
-#: builtin/tag.c:261
+#: builtin/tag.c:265
msgid "no tag message?"
msgstr "липсва съобщение за етикета"
-#: builtin/tag.c:268
+#: builtin/tag.c:272
#, c-format
msgid "The tag message has been left in %s\n"
msgstr "Съобщението за етикета е запазено във файла „%s“\n"
-#: builtin/tag.c:376
+#: builtin/tag.c:381
msgid "list tag names"
msgstr "извеждане на имената на етикетите"
-#: builtin/tag.c:378
+#: builtin/tag.c:383
msgid "print <n> lines of each tag message"
msgstr "извеждане на този БРОЙ редове от всяко съобщение за етикет"
-#: builtin/tag.c:380
+#: builtin/tag.c:385
msgid "delete tags"
msgstr "изтриване на етикети"
-#: builtin/tag.c:381
+#: builtin/tag.c:386
msgid "verify tags"
msgstr "проверка на етикети"
-#: builtin/tag.c:383
+#: builtin/tag.c:388
msgid "Tag creation options"
msgstr "Опции при създаването на етикети"
-#: builtin/tag.c:385
+#: builtin/tag.c:390
msgid "annotated tag, needs a message"
msgstr "анотирането на етикети изисква съобщение"
-#: builtin/tag.c:387
+#: builtin/tag.c:392
msgid "tag message"
msgstr "СЪОБЩЕНИЕ за етикет"
-#: builtin/tag.c:389
+#: builtin/tag.c:394
+msgid "force edit of tag message"
+msgstr "принудително редактиране на съобщение за етикет"
+
+#: builtin/tag.c:395
msgid "annotated and GPG-signed tag"
msgstr "анотиран етикет с подпис по GPG"
-#: builtin/tag.c:393
+#: builtin/tag.c:399
msgid "use another key to sign the tag"
msgstr "използване на друг ключ за подписването на етикет"
-#: builtin/tag.c:394
+#: builtin/tag.c:400
msgid "replace the tag if exists"
msgstr "замяна на етикета, ако съществува"
-#: builtin/tag.c:395 builtin/update-ref.c:368
+#: builtin/tag.c:401 builtin/update-ref.c:368
msgid "create a reflog"
msgstr "създаване на журнал на указателите"
-#: builtin/tag.c:397
+#: builtin/tag.c:403
msgid "Tag listing options"
msgstr "Опции за извеждането на етикети"
-#: builtin/tag.c:398
+#: builtin/tag.c:404
msgid "show tag list in columns"
msgstr "извеждане на списъка на етикетите по колони"
-#: builtin/tag.c:399 builtin/tag.c:401
+#: builtin/tag.c:405 builtin/tag.c:407
msgid "print only tags that contain the commit"
msgstr "извеждане само на етикетите, които съдържат подаването"
-#: builtin/tag.c:400 builtin/tag.c:402
+#: builtin/tag.c:406 builtin/tag.c:408
msgid "print only tags that don't contain the commit"
msgstr "извеждане само на етикетите, които не съдържат подаването"
-#: builtin/tag.c:403
+#: builtin/tag.c:409
msgid "print only tags that are merged"
msgstr "извеждане само на слетите етикети"
-#: builtin/tag.c:404
+#: builtin/tag.c:410
msgid "print only tags that are not merged"
msgstr "извеждане само на неслетите етикети"
-#: builtin/tag.c:409
+#: builtin/tag.c:415
msgid "print only tags of the object"
msgstr "извеждане само на етикетите на ОБЕКТА"
-#: builtin/tag.c:453
+#: builtin/tag.c:459
msgid "--column and -n are incompatible"
msgstr "Опциите „--column“ и „-n“ са несъвместими"
-#: builtin/tag.c:475
+#: builtin/tag.c:481
msgid "-n option is only allowed in list mode"
msgstr "Опцията „-n“ изисква режим на списък."
-#: builtin/tag.c:477
+#: builtin/tag.c:483
msgid "--contains option is only allowed in list mode"
msgstr "Опцията „-contains“ изисква режим на списък."
-#: builtin/tag.c:479
+#: builtin/tag.c:485
msgid "--no-contains option is only allowed in list mode"
msgstr "Опцията „-contains“ изисква режим на списък."
-#: builtin/tag.c:481
+#: builtin/tag.c:487
msgid "--points-at option is only allowed in list mode"
msgstr "Опцията „-points-at“ изисква режим на списък."
-#: builtin/tag.c:483
+#: builtin/tag.c:489
msgid "--merged and --no-merged options are only allowed in list mode"
msgstr "Опциите „--merged“ и „--no-merged“ изискват режим на списък."
-#: builtin/tag.c:494
+#: builtin/tag.c:500
msgid "only one -F or -m option is allowed."
msgstr "Опциите „-F“ и „-m“ са несъвместими."
-#: builtin/tag.c:513
+#: builtin/tag.c:519
msgid "too many params"
msgstr "Прекалено много аргументи"
-#: builtin/tag.c:519
+#: builtin/tag.c:525
#, c-format
msgid "'%s' is not a valid tag name."
msgstr "„%s“ е неправилно име за етикет."
-#: builtin/tag.c:524
+#: builtin/tag.c:530
#, c-format
msgid "tag '%s' already exists"
msgstr "етикетът „%s“ вече съществува"
-#: builtin/tag.c:554
+#: builtin/tag.c:561
#, c-format
msgid "Updated tag '%s' (was %s)\n"
msgstr "Обновен етикет „%s“ (бе „%s“)\n"
-#: builtin/unpack-objects.c:494
+#: builtin/unpack-objects.c:498
msgid "Unpacking objects"
msgstr "Разпакетиране на обектите"
@@ -14621,8 +14942,8 @@ msgid "print tag contents"
msgstr "извеждане на съдържанието на ЕТИКЕТи"
#: builtin/worktree.c:17
-msgid "git worktree add [<options>] <path> [<branch>]"
-msgstr "git worktree add [ОПЦИЯ…] ПЪТ [КЛОН]"
+msgid "git worktree add [<options>] <path> [<commit-ish>]"
+msgstr "git worktree add [ОПЦИЯ…] ПЪТ [УКАЗАТЕЛ_КЪМ_ПОДАВАНЕ]"
#: builtin/worktree.c:18
msgid "git worktree list [<options>]"
@@ -14633,30 +14954,38 @@ msgid "git worktree lock [<options>] <path>"
msgstr "git worktree lock [ОПЦИЯ…] [ПЪТ]"
#: builtin/worktree.c:20
+msgid "git worktree move <worktree> <new-path>"
+msgstr "git worktree move [ДЪРВО] [НОВ_ПЪТ]"
+
+#: builtin/worktree.c:21
msgid "git worktree prune [<options>]"
msgstr "git worktree prune [ОПЦИЯ…]"
-#: builtin/worktree.c:21
+#: builtin/worktree.c:22
+msgid "git worktree remove [<options>] <worktree>"
+msgstr "git worktree remove [ОПЦИЯ…] [ДЪРВО]"
+
+#: builtin/worktree.c:23
msgid "git worktree unlock <path>"
msgstr "git worktree unlock [ПЪТ]"
-#: builtin/worktree.c:58
+#: builtin/worktree.c:60
#, c-format
msgid "Removing worktrees/%s: not a valid directory"
msgstr "Изтриване на „worktrees/%s“: не е правилна поддиректория"
-#: builtin/worktree.c:64
+#: builtin/worktree.c:66
#, c-format
msgid "Removing worktrees/%s: gitdir file does not exist"
msgstr "Изтриване на „worktrees/%s“: файлът „gitdir“ не съществува"
-#: builtin/worktree.c:69 builtin/worktree.c:78
+#: builtin/worktree.c:71 builtin/worktree.c:80
#, c-format
msgid "Removing worktrees/%s: unable to read gitdir file (%s)"
msgstr ""
"Изтриване на „worktrees/%s“: файлът „gitdir“ (%s) не може да бъде прочетен"
-#: builtin/worktree.c:88
+#: builtin/worktree.c:90
#, c-format
msgid ""
"Removing worktrees/%s: short read (expected %<PRIuMAX> bytes, read "
@@ -14665,105 +14994,189 @@ msgstr ""
"Изтриване на „worktrees/%s“: изчитането върна по-малко байтове от очакваното "
"(очаквани: %<PRIuMAX> байта, получени: %<PRIuMAX>)"
-#: builtin/worktree.c:96
+#: builtin/worktree.c:98
#, c-format
msgid "Removing worktrees/%s: invalid gitdir file"
msgstr "Изтриване на „worktrees/%s“: неправилен файл „gitdir“"
-#: builtin/worktree.c:112
+#: builtin/worktree.c:114
#, c-format
msgid "Removing worktrees/%s: gitdir file points to non-existent location"
msgstr ""
"Изтриване на „worktrees/%s“: файлът „gitdir“ сочи несъществуващо "
"местоположение"
-#: builtin/worktree.c:159
+#: builtin/worktree.c:161
msgid "report pruned working trees"
msgstr "докладване на окастрените работни дървета"
-#: builtin/worktree.c:161
+#: builtin/worktree.c:163
msgid "expire working trees older than <time>"
msgstr "обявяване на работните копия по-стари от това ВРЕМЕ за остарели"
-#: builtin/worktree.c:236
+#: builtin/worktree.c:238
#, c-format
msgid "'%s' already exists"
msgstr "„%s“ вече съществува"
-#: builtin/worktree.c:267
+#: builtin/worktree.c:269
#, c-format
msgid "could not create directory of '%s'"
msgstr "директорията „%s“ не може да бъде създадена"
-#: builtin/worktree.c:306
+#: builtin/worktree.c:308
#, c-format
msgid "Preparing %s (identifier %s)"
msgstr "Подготвяне на %s (идентификатор %s)"
-#: builtin/worktree.c:368
+#: builtin/worktree.c:385
msgid "checkout <branch> even if already checked out in other worktree"
msgstr "Изтегляне КЛОНа, дори и да е изтеглен в друго работно дърво"
-#: builtin/worktree.c:370
+#: builtin/worktree.c:388
msgid "create a new branch"
msgstr "създаване на нов клон"
-#: builtin/worktree.c:372
+#: builtin/worktree.c:390
msgid "create or reset a branch"
msgstr "създаване или зануляване на клони"
-#: builtin/worktree.c:374
+#: builtin/worktree.c:392
msgid "populate the new working tree"
msgstr "подготвяне на новото работно дърво"
-#: builtin/worktree.c:375
+#: builtin/worktree.c:393
msgid "keep the new working tree locked"
msgstr "новото работно дърво да остане заключено"
-#: builtin/worktree.c:377
+#: builtin/worktree.c:395
msgid "set up tracking mode (see git-branch(1))"
msgstr "задаване на режима на следене (виж git-branch(1))"
-#: builtin/worktree.c:380
+#: builtin/worktree.c:398
msgid "try to match the new branch name with a remote-tracking branch"
msgstr "опит за напасване на името на новия клон с това на следящ клон"
-#: builtin/worktree.c:388
+#: builtin/worktree.c:406
msgid "-b, -B, and --detach are mutually exclusive"
msgstr "Опциите „-b“, „-B“ и „--detach“ са несъвместими една с друга"
-#: builtin/worktree.c:453
+#: builtin/worktree.c:471
msgid "--[no-]track can only be used if a new branch is created"
msgstr "„--[no-]track“ може да се използва само при създаването на нов клон"
-#: builtin/worktree.c:553
+#: builtin/worktree.c:571
msgid "reason for locking"
msgstr "причина за заключване"
-#: builtin/worktree.c:565 builtin/worktree.c:598
+#: builtin/worktree.c:583 builtin/worktree.c:616 builtin/worktree.c:670
+#: builtin/worktree.c:809
#, c-format
msgid "'%s' is not a working tree"
msgstr "„%s“ не е работно дърво"
-#: builtin/worktree.c:567 builtin/worktree.c:600
+#: builtin/worktree.c:585 builtin/worktree.c:618
msgid "The main working tree cannot be locked or unlocked"
msgstr "Основното дърво не може да се отключи или заключи"
-#: builtin/worktree.c:572
+#: builtin/worktree.c:590
#, c-format
msgid "'%s' is already locked, reason: %s"
msgstr "„%s“ вече е заключено, защото „%s“"
-#: builtin/worktree.c:574
+#: builtin/worktree.c:592
#, c-format
msgid "'%s' is already locked"
msgstr "„%s“ вече е заключено"
-#: builtin/worktree.c:602
+#: builtin/worktree.c:620
#, c-format
msgid "'%s' is not locked"
msgstr "„%s“ не е заключено"
+#: builtin/worktree.c:645
+msgid "working trees containing submodules cannot be moved or removed"
+msgstr ""
+"не може да местите или изтривате работни дървета, в които има подмодули"
+
+#: builtin/worktree.c:672 builtin/worktree.c:811
+#, c-format
+msgid "'%s' is a main working tree"
+msgstr "„%s“ е основно работно дърво"
+
+#: builtin/worktree.c:677
+#, c-format
+msgid "could not figure out destination name from '%s'"
+msgstr "името на целта не може да се определи от „%s“"
+
+#: builtin/worktree.c:683
+#, c-format
+msgid "target '%s' already exists"
+msgstr "целта „%s“ вече съществува"
+
+#: builtin/worktree.c:690
+#, c-format
+msgid "cannot move a locked working tree, lock reason: %s"
+msgstr ""
+"не може да преместите заключено работно дърво, причина за заключването: %s"
+
+#: builtin/worktree.c:692
+msgid "cannot move a locked working tree"
+msgstr "не може да местите заключено работно дърво"
+
+#: builtin/worktree.c:695
+#, c-format
+msgid "validation failed, cannot move working tree: %s"
+msgstr ""
+"проверките са неуспешни, работното дърво не може да бъде преместено: %s"
+
+#: builtin/worktree.c:700
+#, c-format
+msgid "failed to move '%s' to '%s'"
+msgstr "„%s“ не може да се премести в „%s“"
+
+#: builtin/worktree.c:748
+#, c-format
+msgid "failed to run 'git status' on '%s'"
+msgstr "не може да изпълни „git status“ върху „%s“"
+
+#: builtin/worktree.c:752
+#, c-format
+msgid "'%s' is dirty, use --force to delete it"
+msgstr ""
+"работното дърво „%s“ не е чисто, за принудително изтриване е необходима "
+"опцията „--force“ "
+
+#: builtin/worktree.c:757
+#, c-format
+msgid "failed to run 'git status' on '%s', code %d"
+msgstr ""
+"командата „git status“ не може да се изпълни за „%s“, код за грешка: %d"
+
+#: builtin/worktree.c:768 builtin/worktree.c:782
+#, c-format
+msgid "failed to delete '%s'"
+msgstr "неуспешно изтриване на „%s“"
+
+#: builtin/worktree.c:794
+msgid "force removing even if the worktree is dirty"
+msgstr "принудително изтриване, дори работното дърво да не е чисто"
+
+#: builtin/worktree.c:815
+#, c-format
+msgid "cannot remove a locked working tree, lock reason: %s"
+msgstr ""
+"не може да изтриете заключено работно дърво, причина за заключването: %s"
+
+#: builtin/worktree.c:817
+msgid "cannot remove a locked working tree"
+msgstr "не може да изтриете заключено работно дърво"
+
+#: builtin/worktree.c:820
+#, c-format
+msgid "validation failed, cannot remove working tree: %s"
+msgstr "проверките са неуспешни, работното дърво не може да бъде изтрито: %s"
+
#: builtin/write-tree.c:14
msgid "git write-tree [--missing-ok] [--prefix=<prefix>/]"
msgstr "git write-tree [--missing-ok] [--prefix=ПРЕФИКС/]"
@@ -14780,24 +15193,24 @@ msgstr "запис на обект-дърво за поддиректорият
msgid "only useful for debugging"
msgstr "само за изчистване на грешки"
-#: upload-pack.c:24
+#: upload-pack.c:27
msgid "git upload-pack [<options>] <dir>"
msgstr "git upload-repack [ОПЦИЯ…] ДИРЕКТОРИЯ"
-#: upload-pack.c:1041
+#: upload-pack.c:1070
msgid "quit after a single request/response exchange"
msgstr "изход след първоначалната размяна на заявка и отговор"
-#: upload-pack.c:1043
+#: upload-pack.c:1072
msgid "exit immediately after initial ref advertisement"
msgstr "изход след първоначалната обява на указатели"
-#: upload-pack.c:1045
+#: upload-pack.c:1074
msgid "do not try <directory>/.git/ if <directory> is no Git directory"
msgstr ""
"да не се търси „ДИРЕКТОРИЯ/.git/“, ако ДИРЕКТОРИЯта не е под контрола на Git"
-#: upload-pack.c:1047
+#: upload-pack.c:1076
msgid "interrupt transfer after <n> seconds of inactivity"
msgstr "трансферът да се преустанови след този БРОЙ секунди"
@@ -14820,6 +15233,20 @@ msgstr ""
msgid "print debugging messages to stderr"
msgstr "извеждане на съобщенията за трасиране на стандартната грешка"
+#: git.c:8
+msgid ""
+"git [--version] [--help] [-C <path>] [-c <name>=<value>]\n"
+" [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]\n"
+" [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]\n"
+" [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
+" <command> [<args>]"
+msgstr ""
+"git [--version] [--help] [-C ПЪТ] [-c ИМЕ=СТОЙНОСТ]\n"
+" [--exec-path[=ПЪТ]] [--html-path] [--man-path] [--info-path]\n"
+" [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]\n"
+" [--git-dir=ПЪТ] [--work-tree=ПЪТ] [--namespace=ИМЕ]\n"
+" КОМАНДА [АРГ…]"
+
#: git.c:15
msgid ""
"'git help -a' and 'git help -g' list available subcommands and some\n"
@@ -14835,21 +15262,67 @@ msgstr ""
"Български превод на книгата „Pro Git“ от Чакън и Страуб:\n"
"http://i-can.eu/progit2-bg/progit.html"
-#: http.c:339
+#: git.c:95
+#, c-format
+msgid "no directory given for --git-dir\n"
+msgstr "опцията „--git-dir“ изисква директория\n"
+
+#: git.c:109
+#, c-format
+msgid "no namespace given for --namespace\n"
+msgstr "опцията „--namespace“ изисква име\n"
+
+#: git.c:123
+#, c-format
+msgid "no directory given for --work-tree\n"
+msgstr "опцията „--work-tree“ изисква директория\n"
+
+#: git.c:137
+#, c-format
+msgid "no prefix given for --super-prefix\n"
+msgstr "опцията „--super-prefix“ изисква префикс\n"
+
+#: git.c:159
+#, c-format
+msgid "-c expects a configuration string\n"
+msgstr "опцията „-c“ изисква низ за настройка\n"
+
+#: git.c:197
+#, c-format
+msgid "no directory given for -C\n"
+msgstr "опцията „-C“ изисква директория\n"
+
+#: git.c:212
+#, c-format
+msgid "unknown option: %s\n"
+msgstr "непозната опция: „%s“\n"
+
+#: git.c:687
+#, c-format
+msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
+msgstr ""
+"неуспешно заместване на синонима „%s“ — резултатът „%s“ не е команда на git\n"
+
+#: git.c:699
+#, c-format
+msgid "failed to run command '%s': %s\n"
+msgstr "командата „%s“ не може да се изпълни: %s\n"
+
+#: http.c:342
#, c-format
msgid "negative value for http.postbuffer; defaulting to %d"
msgstr ""
"отрицателна стойност за „http.postbuffer“. Ще се ползва стандартната: %d"
-#: http.c:360
+#: http.c:363
msgid "Delegation control is not supported with cURL < 7.22.0"
msgstr "Управлението на делегирането не се поддържа от cURL < 7.22.0"
-#: http.c:369
+#: http.c:372
msgid "Public key pinning not supported with cURL < 7.44.0"
msgstr "Задаването на постоянен публичен ключ не се поддържа от cURL < 7.44.0"
-#: http.c:1791
+#: http.c:1857
#, c-format
msgid ""
"unable to update url base from redirection:\n"
@@ -14860,16 +15333,16 @@ msgstr ""
" ● заявен адрес: %s\n"
" ● пренасочване: %s"
-#: remote-curl.c:324
+#: remote-curl.c:345
#, c-format
msgid "redirecting to %s"
msgstr "пренасочване към „%s“"
-#: list-objects-filter-options.h:54
+#: list-objects-filter-options.h:59
msgid "args"
msgstr "АРГУМЕНТИ"
-#: list-objects-filter-options.h:55
+#: list-objects-filter-options.h:60
msgid "object filtering"
msgstr "филтриране по вид на обекта"
@@ -14978,23 +15451,23 @@ msgstr "Извеждане на състоянието на работното
msgid "Create, list, delete or verify a tag object signed with GPG"
msgstr "Извеждане, създаване, изтриване, проверка на етикети подписани с GPG"
-#: parse-options.h:145
+#: parse-options.h:157
msgid "expiry-date"
msgstr "период на валидност/запазване"
-#: parse-options.h:160
+#: parse-options.h:172
msgid "no-op (backward compatibility)"
msgstr "нулева операция (за съвместимост с предишни версии)"
-#: parse-options.h:238
+#: parse-options.h:250
msgid "be more verbose"
msgstr "повече подробности"
-#: parse-options.h:240
+#: parse-options.h:252
msgid "be more quiet"
msgstr "по-малко подробности"
-#: parse-options.h:246
+#: parse-options.h:258
msgid "use <n> digits to display SHA-1s"
msgstr "да се показват такъв БРОЙ цифри от сумите по SHA1"
@@ -15235,7 +15708,7 @@ msgstr "Опит за просто сливане с „$pretty_name“"
msgid "Simple merge did not work, trying automatic merge."
msgstr "Простото сливане не сработи, пробва се автоматично сливане."
-#: git-rebase.sh:58
+#: git-rebase.sh:60
msgid ""
"Resolve all conflicts manually, mark them as resolved with\n"
"\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -15249,44 +15722,44 @@ msgstr ""
"За да откажете пребазирането и да се върнете към първоначалното състояние,\n"
"изпълнете „git rebase --abort“."
-#: git-rebase.sh:160 git-rebase.sh:402
+#: git-rebase.sh:163 git-rebase.sh:409
#, sh-format
msgid "Could not move back to $head_name"
msgstr "Връщането към „${head_name}“ е невъзможно"
-#: git-rebase.sh:171
+#: git-rebase.sh:174
msgid "Applied autostash."
msgstr "Автоматично скатаното е приложено."
-#: git-rebase.sh:174
+#: git-rebase.sh:177
#, sh-format
msgid "Cannot store $stash_sha1"
msgstr "„${stash_sha1}“ не може да бъде запазен"
-#: git-rebase.sh:214
+#: git-rebase.sh:218
msgid "The pre-rebase hook refused to rebase."
msgstr "Куката за изпълнение преди пребазиране отхвърли пребазирането."
-#: git-rebase.sh:219
+#: git-rebase.sh:223
msgid "It looks like 'git am' is in progress. Cannot rebase."
msgstr ""
"Изглежда, че сега се прилагат кръпки чрез командата „git-am“. Не може да "
"пребазирате в момента."
-#: git-rebase.sh:363
+#: git-rebase.sh:370
msgid "No rebase in progress?"
msgstr "Изглежда в момента не тече пребазиране"
-#: git-rebase.sh:374
+#: git-rebase.sh:381
msgid "The --edit-todo action can only be used during interactive rebase."
msgstr ""
"Опцията „--edit-todo“ е достъпна само по време на интерактивно пребазиране."
-#: git-rebase.sh:381
+#: git-rebase.sh:388
msgid "Cannot read HEAD"
msgstr "Указателят „HEAD“ не може да бъде прочетен"
-#: git-rebase.sh:384
+#: git-rebase.sh:391
msgid ""
"You must edit all merge conflicts and then\n"
"mark them as resolved using git add"
@@ -15294,7 +15767,7 @@ msgstr ""
"Трябва да редактирате всички конфликти при сливането. След това\n"
"отбележете коригирането им чрез командата „git add“"
-#: git-rebase.sh:424
+#: git-rebase.sh:435
#, sh-format
msgid ""
"It seems that there is already a $state_dir_base directory, and\n"
@@ -15315,79 +15788,79 @@ msgstr ""
"за\n"
"да не загубите случайно промени."
-#: git-rebase.sh:480
+#: git-rebase.sh:491
#, sh-format
msgid "invalid upstream '$upstream_name'"
msgstr "неправилна основа за сравнение „${upstream_name}“"
-#: git-rebase.sh:504
+#: git-rebase.sh:515
#, sh-format
msgid "$onto_name: there are more than one merge bases"
msgstr ""
"указателят „${onto_name}“ може да сочи към повече от една основа за "
"пребазирането"
-#: git-rebase.sh:507 git-rebase.sh:511
+#: git-rebase.sh:518 git-rebase.sh:522
#, sh-format
msgid "$onto_name: there is no merge base"
msgstr "указателят „${onto_name}“ не сочи към никаква основа за пребазирането"
-#: git-rebase.sh:516
+#: git-rebase.sh:527
#, sh-format
msgid "Does not point to a valid commit: $onto_name"
msgstr "Указателят „${onto_name}“ не сочи към подаване"
-#: git-rebase.sh:542
+#: git-rebase.sh:553
#, sh-format
msgid "fatal: no such branch/commit '$branch_name'"
msgstr "ФАТАЛНА ГРЕШКА: не съществува клон „${branch_name}“"
-#: git-rebase.sh:575
+#: git-rebase.sh:586
msgid "Cannot autostash"
msgstr "Не може да се скатае автоматично"
-#: git-rebase.sh:580
+#: git-rebase.sh:591
#, sh-format
msgid "Created autostash: $stash_abbrev"
msgstr "Автоматично скатано: „${stash_abbrev}“"
-#: git-rebase.sh:584
+#: git-rebase.sh:595
msgid "Please commit or stash them."
msgstr "Промените трябва или да се подадат, или да се скатаят."
-#: git-rebase.sh:607
+#: git-rebase.sh:618
#, sh-format
msgid "HEAD is up to date."
msgstr "Указателят „HEAD“ е напълно актуален"
-#: git-rebase.sh:609
+#: git-rebase.sh:620
#, sh-format
msgid "Current branch $branch_name is up to date."
msgstr "Текущият клон „${branch_name}“ е напълно актуален."
-#: git-rebase.sh:617
+#: git-rebase.sh:628
#, sh-format
msgid "HEAD is up to date, rebase forced."
msgstr "Указателят „HEAD“ е напълно актуален. Пребазирането е принудително."
-#: git-rebase.sh:619
+#: git-rebase.sh:630
#, sh-format
msgid "Current branch $branch_name is up to date, rebase forced."
msgstr ""
"Текущият клон „${branch_name}“ е напълно актуален. Пребазирането е "
"принудително."
-#: git-rebase.sh:631
+#: git-rebase.sh:642
#, sh-format
msgid "Changes from $mb to $onto:"
msgstr "Промените от „${mb}“ към „${onto}“:"
-#: git-rebase.sh:640
+#: git-rebase.sh:651
msgid "First, rewinding head to replay your work on top of it..."
msgstr ""
"Първо, указателят „HEAD“ започва да сочи към базата, върху която пребазирате…"
-#: git-rebase.sh:650
+#: git-rebase.sh:661
#, sh-format
msgid "Fast-forwarded $branch_name to $onto_name."
msgstr "Превъртане на „${branch_name}“ върху „${onto_name}“."
@@ -15457,88 +15930,88 @@ msgid "Saved working directory and index state $stash_msg"
msgstr ""
"Състоянието на работната директория и индекса са запазени: „$stash_msg“"
-#: git-stash.sh:341
+#: git-stash.sh:340
msgid "Cannot remove worktree changes"
msgstr "Промените в работното дърво не могат да бъдат занулени"
-#: git-stash.sh:489
+#: git-stash.sh:488
#, sh-format
msgid "unknown option: $opt"
msgstr "непозната опция: ${opt}"
-#: git-stash.sh:502
+#: git-stash.sh:501
msgid "No stash entries found."
msgstr "Не е открито нищо скатано."
-#: git-stash.sh:509
+#: git-stash.sh:508
#, sh-format
msgid "Too many revisions specified: $REV"
msgstr "Указани са прекалено много версии: „${REV}“"
-#: git-stash.sh:524
+#: git-stash.sh:523
#, sh-format
msgid "$reference is not a valid reference"
msgstr "Указателят „${reference}“ е грешен"
-#: git-stash.sh:552
+#: git-stash.sh:551
#, sh-format
msgid "'$args' is not a stash-like commit"
msgstr "„${args}“ не е подаване, приличащо на нещо скатано"
-#: git-stash.sh:563
+#: git-stash.sh:562
#, sh-format
msgid "'$args' is not a stash reference"
msgstr "„${args}“ не е указател към нещо скатано"
-#: git-stash.sh:571
+#: git-stash.sh:570
msgid "unable to refresh index"
msgstr "индексът не може да бъде обновен"
-#: git-stash.sh:575
+#: git-stash.sh:574
msgid "Cannot apply a stash in the middle of a merge"
msgstr "По време на сливане не може да приложите нещо скатано"
-#: git-stash.sh:583
+#: git-stash.sh:582
msgid "Conflicts in index. Try without --index."
msgstr ""
"В индекса има конфликти. Пробвайте да изпълните командата без опцията „--"
"index“."
-#: git-stash.sh:585
+#: git-stash.sh:584
msgid "Could not save index tree"
msgstr "Дървото сочено от индекса не може да бъде запазено"
-#: git-stash.sh:594
+#: git-stash.sh:593
msgid "Could not restore untracked files from stash entry"
msgstr "Неследени файлове не могат да се възстановят от скатаното"
-#: git-stash.sh:619
+#: git-stash.sh:618
msgid "Cannot unstage modified files"
msgstr "Променените файлове не могат да бъдат извадени от индекса"
-#: git-stash.sh:634
+#: git-stash.sh:633
msgid "Index was not unstashed."
msgstr "Индексът не е скатан."
-#: git-stash.sh:648
+#: git-stash.sh:647
msgid "The stash entry is kept in case you need it again."
msgstr "Скатаното е запазено в случай, че ви потрябва отново"
-#: git-stash.sh:657
+#: git-stash.sh:656
#, sh-format
msgid "Dropped ${REV} ($s)"
msgstr "Изтрито е скатаното „${REV}“ ($s)"
-#: git-stash.sh:658
+#: git-stash.sh:657
#, sh-format
msgid "${REV}: Could not drop stash entry"
msgstr "Скатаното „${REV}“ не може да бъде изтрито"
-#: git-stash.sh:666
+#: git-stash.sh:665
msgid "No branch name specified"
msgstr "Не е указано име на клон"
-#: git-stash.sh:745
+#: git-stash.sh:744
msgid "(To restore them type \"git stash apply\")"
msgstr "(За да ги възстановите, изпълнете командата „git stash apply“)"
@@ -15641,70 +16114,17 @@ msgid "Stopping at '$displaypath'; script returned non-zero status."
msgstr ""
"Спиране при „${displaypath}“ — изходният код от скрипта бе различен от 0."
-#: git-submodule.sh:433
-#, sh-format
-msgid "pathspec and --all are incompatible"
-msgstr "указването на път е несъвместимо с опцията „--all“"
-
-#: git-submodule.sh:438
-#, sh-format
-msgid "Use '--all' if you really want to deinitialize all submodules"
-msgstr "Използвайте „--all“, за да премахнете всички подмодули"
-
-#: git-submodule.sh:458
-#, sh-format
-msgid ""
-"Submodule work tree '$displaypath' contains a .git directory\n"
-"(use 'rm -rf' if you really want to remove it including all of its history)"
-msgstr ""
-"Работното дърво на подмодул „${displaypath}“ съдържа директория „.git“.\n"
-"(ако искате да ги изтриете заедно с цялата им история, използвайте „rm -rf“)"
-
-#: git-submodule.sh:466
-#, sh-format
-msgid ""
-"Submodule work tree '$displaypath' contains local modifications; use '-f' to "
-"discard them"
-msgstr ""
-"Работното дърво на подмодул „${displaypath}“ съдържа локални промени. "
-"Можете да го отхвърлите с опцията „-f“"
-
-#: git-submodule.sh:469
-#, sh-format
-msgid "Cleared directory '$displaypath'"
-msgstr "Директорията „${displaypath}“ е изчистена"
-
-#: git-submodule.sh:470
-#, sh-format
-msgid "Could not remove submodule work tree '$displaypath'"
-msgstr ""
-"Директорията към работното дърво на подмодула „${displaypath}“ не може да "
-"бъде изтрита"
-
-#: git-submodule.sh:473
-#, sh-format
-msgid "Could not create empty submodule directory '$displaypath'"
-msgstr ""
-"Празната директория за подмодула „${displaypath}“ не може да бъде създадена"
-
-#: git-submodule.sh:482
-#, sh-format
-msgid "Submodule '$name' ($url) unregistered for path '$displaypath'"
-msgstr ""
-"Премахната е регистрацията на подмодул „${name}“, сочещ към адрес „${url}“, "
-"за пътя „${displaypath}“"
-
-#: git-submodule.sh:637
+#: git-submodule.sh:584
#, sh-format
msgid "Unable to find current revision in submodule path '$displaypath'"
msgstr "Текущата версия за подмодула в „${displaypath}“ липсва"
-#: git-submodule.sh:647
+#: git-submodule.sh:594
#, sh-format
msgid "Unable to fetch in submodule path '$sm_path'"
msgstr "Неуспешно доставяне в пътя към подмодул „${sm_path}“"
-#: git-submodule.sh:652
+#: git-submodule.sh:599
#, sh-format
msgid ""
"Unable to find current ${remote_name}/${branch} revision in submodule path "
@@ -15713,12 +16133,12 @@ msgstr ""
"Текущата версия „${remote_name}/${branch}“ в пътя към подмодул „${sm_path}“ "
"липсва"
-#: git-submodule.sh:670
+#: git-submodule.sh:617
#, sh-format
msgid "Unable to fetch in submodule path '$displaypath'"
msgstr "Неуспешно доставяне в пътя към подмодул „${displaypath}“"
-#: git-submodule.sh:676
+#: git-submodule.sh:623
#, sh-format
msgid ""
"Fetched in submodule path '$displaypath', but it did not contain $sha1. "
@@ -15727,91 +16147,86 @@ msgstr ""
"Подмодулът в пътя „$displaypath“ е доставен, но не съдържа обекта със сума\n"
"„$sha1“. Директното доставяне на това подаване е неуспешно."
-#: git-submodule.sh:683
+#: git-submodule.sh:630
#, sh-format
msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
msgstr ""
"Неуспешно изтегляне на версия „${sha1}“ в пътя към подмодул „${displaypath}“'"
-#: git-submodule.sh:684
+#: git-submodule.sh:631
#, sh-format
msgid "Submodule path '$displaypath': checked out '$sha1'"
msgstr "Път към подмодул „${displaypath}“: изтеглена е версия „${sha1}“"
-#: git-submodule.sh:688
+#: git-submodule.sh:635
#, sh-format
msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
msgstr ""
"Неуспешно пребазиране на версия „${sha1}“ в пътя към подмодул "
"„${displaypath}“"
-#: git-submodule.sh:689
+#: git-submodule.sh:636
#, sh-format
msgid "Submodule path '$displaypath': rebased into '$sha1'"
msgstr "Път към подмодул „${displaypath}“: пребазиране върху версия „${sha1}“"
-#: git-submodule.sh:694
+#: git-submodule.sh:641
#, sh-format
msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
msgstr ""
"Неуспешно сливане на версия „${sha1}“ в пътя към подмодул „${displaypath}“"
-#: git-submodule.sh:695
+#: git-submodule.sh:642
#, sh-format
msgid "Submodule path '$displaypath': merged in '$sha1'"
msgstr "Път към подмодул „${displaypath}“: сливане с версия „${sha1}“"
-#: git-submodule.sh:700
+#: git-submodule.sh:647
#, sh-format
msgid "Execution of '$command $sha1' failed in submodule path '$displaypath'"
msgstr ""
"Неуспешно изпълнение на командата „${command} ${sha1}“ в пътя към подмодул "
"„${displaypath}“"
-#: git-submodule.sh:701
+#: git-submodule.sh:648
#, sh-format
msgid "Submodule path '$displaypath': '$command $sha1'"
msgstr "Път към подмодул „${displaypath}“: „${command} ${sha1}“"
-#: git-submodule.sh:732
+#: git-submodule.sh:679
#, sh-format
msgid "Failed to recurse into submodule path '$displaypath'"
msgstr ""
"Неуспешна обработка на поддиректориите в пътя към подмодул „${displaypath}“"
-#: git-submodule.sh:828
+#: git-submodule.sh:775
msgid "The --cached option cannot be used with the --files option"
msgstr "Опциите „--cached“ и „--files“ са несъвместими"
-#: git-submodule.sh:880
+#: git-submodule.sh:827
#, sh-format
msgid "unexpected mode $mod_dst"
msgstr "неочакван режим „${mod_dst}“"
-#: git-submodule.sh:900
+#: git-submodule.sh:847
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_src"
msgstr ""
" ПРЕДУПРЕЖДЕНИЕ: „${display_name}“ не съдържа подаването „${sha1_src}“"
-#: git-submodule.sh:903
+#: git-submodule.sh:850
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_dst"
msgstr ""
" ПРЕДУПРЕЖДЕНИЕ: „${display_name}“ не съдържа подаването „${sha1_dst}“"
-#: git-submodule.sh:906
+#: git-submodule.sh:853
#, sh-format
msgid " Warn: $display_name doesn't contain commits $sha1_src and $sha1_dst"
msgstr ""
" ПРЕДУПРЕЖДЕНИЕ: „${display_name}“ не съдържа никое от подаванията "
"„${sha1_src}“ и „${sha1_dst}“"
-#: git-submodule.sh:1077
-#, sh-format
-msgid "Synchronizing submodule url for '$displaypath'"
-msgstr "Синхронизиране на адреса за пътя към подмодул „${displaypath}“"
-
#: git-parse-remote.sh:89
#, sh-format
msgid "See git-${cmd}(1) for details."
@@ -15867,7 +16282,7 @@ msgstr ""
"\n"
"Ако изтриете ред, съответстващото му подаване ще бъде ИЗТРИТО.\n"
-#: git-rebase--interactive.sh:211
+#: git-rebase--interactive.sh:213
#, sh-format
msgid ""
"You can amend the commit now, with\n"
@@ -15886,84 +16301,84 @@ msgstr ""
"\n"
" git rebase --continue"
-#: git-rebase--interactive.sh:236
+#: git-rebase--interactive.sh:238
#, sh-format
msgid "$sha1: not a commit that can be picked"
msgstr "$sha1: това не е подаване, което може да бъде отбрано"
-#: git-rebase--interactive.sh:275
+#: git-rebase--interactive.sh:277
#, sh-format
msgid "Invalid commit name: $sha1"
msgstr "Неправилно име на подаване: „$sha1“"
-#: git-rebase--interactive.sh:317
+#: git-rebase--interactive.sh:319
msgid "Cannot write current commit's replacement sha1"
msgstr ""
"Заместващата сума по SHA1 за текущото подаване не може да бъде запазена"
-#: git-rebase--interactive.sh:369
+#: git-rebase--interactive.sh:371
#, sh-format
msgid "Fast-forward to $sha1"
msgstr "Превъртане до „$sha1“"
-#: git-rebase--interactive.sh:371
+#: git-rebase--interactive.sh:373
#, sh-format
msgid "Cannot fast-forward to $sha1"
msgstr "Не може да се превърти до „$sha1“"
-#: git-rebase--interactive.sh:380
+#: git-rebase--interactive.sh:382
#, sh-format
msgid "Cannot move HEAD to $first_parent"
msgstr "Указателят „HEAD“ не може да се насочи към „$first_parent“"
-#: git-rebase--interactive.sh:385
+#: git-rebase--interactive.sh:387
#, sh-format
msgid "Refusing to squash a merge: $sha1"
msgstr "Подаването не може да се смачка: „$sha1“"
-#: git-rebase--interactive.sh:400
+#: git-rebase--interactive.sh:405
#, sh-format
msgid "Error redoing merge $sha1"
msgstr "Грешка при повтарянето на сливането на „$sha1“"
-#: git-rebase--interactive.sh:408
+#: git-rebase--interactive.sh:414
#, sh-format
msgid "Could not pick $sha1"
msgstr "„$sha1“ не може да се отбере."
-#: git-rebase--interactive.sh:417
+#: git-rebase--interactive.sh:423
#, sh-format
msgid "This is the commit message #${n}:"
msgstr "Това е съобщение при подаване №${n}:"
-#: git-rebase--interactive.sh:422
+#: git-rebase--interactive.sh:428
#, sh-format
msgid "The commit message #${n} will be skipped:"
msgstr "Съобщение при подаване №${n} ще бъде прескочено."
-#: git-rebase--interactive.sh:433
+#: git-rebase--interactive.sh:439
#, sh-format
msgid "This is a combination of $count commit."
msgid_plural "This is a combination of $count commits."
msgstr[0] "Това е обединение от $count подаване."
msgstr[1] "Това е обединение от $count подавания."
-#: git-rebase--interactive.sh:442
+#: git-rebase--interactive.sh:448
#, sh-format
msgid "Cannot write $fixup_msg"
msgstr "Новото съобщение при подаване „$fixup_msg“ не може да бъде запазено"
-#: git-rebase--interactive.sh:445
+#: git-rebase--interactive.sh:451
msgid "This is a combination of 2 commits."
msgstr "Това е обединение от 2 подавания"
-#: git-rebase--interactive.sh:486 git-rebase--interactive.sh:529
-#: git-rebase--interactive.sh:532
+#: git-rebase--interactive.sh:492 git-rebase--interactive.sh:535
+#: git-rebase--interactive.sh:538
#, sh-format
msgid "Could not apply $sha1... $rest"
msgstr "Не може да се подаде $sha1… $rest"
-#: git-rebase--interactive.sh:560
+#: git-rebase--interactive.sh:567
#, sh-format
msgid ""
"Could not amend commit after successfully picking $sha1... $rest\n"
@@ -15979,31 +16394,31 @@ msgstr ""
"коригирате,\n"
"преди да можете да промените подаването."
-#: git-rebase--interactive.sh:575
+#: git-rebase--interactive.sh:582
#, sh-format
msgid "Stopped at $sha1_abbrev... $rest"
msgstr "Спиране при „$sha1_abbrev…“ $rest"
-#: git-rebase--interactive.sh:590
+#: git-rebase--interactive.sh:597
#, sh-format
msgid "Cannot '$squash_style' without a previous commit"
msgstr "Без предишно подаване не може да се изпълни „$squash_style“"
-#: git-rebase--interactive.sh:632
+#: git-rebase--interactive.sh:639
#, sh-format
msgid "Executing: $rest"
msgstr "В момента се изпълнява: $rest"
-#: git-rebase--interactive.sh:640
+#: git-rebase--interactive.sh:647
#, sh-format
msgid "Execution failed: $rest"
msgstr "Неуспешно изпълнение: $rest"
-#: git-rebase--interactive.sh:642
+#: git-rebase--interactive.sh:649
msgid "and made changes to the index and/or the working tree"
msgstr "и промени индекса и/или работното дърво"
-#: git-rebase--interactive.sh:644
+#: git-rebase--interactive.sh:651
msgid ""
"You can fix the problem, and then run\n"
"\n"
@@ -16014,7 +16429,7 @@ msgstr ""
" git rebase --continue"
#. TRANSLATORS: after these lines is a command to be issued by the user
-#: git-rebase--interactive.sh:657
+#: git-rebase--interactive.sh:664
#, sh-format
msgid ""
"Execution succeeded: $rest\n"
@@ -16029,29 +16444,29 @@ msgstr ""
"\n"
" git rebase --continue"
-#: git-rebase--interactive.sh:668
+#: git-rebase--interactive.sh:675
#, sh-format
msgid "Unknown command: $command $sha1 $rest"
msgstr "Непозната команда: $command $sha1 $rest"