Sync with 2.30.5
* maint-2.30:
Git 2.30.5
setup: tighten ownership checks post CVE-2022-24765
git-compat-util: allow root to access both SUDO_UID and root owned
t0034: add negative tests and allow git init to mostly work under sudo
git-compat-util: avoid failing dir ownership checks if running privileged
t: regression git needs safe.directory when using sudo
diff --git a/.gitattributes b/.gitattributes
index b08a141..b0044cf 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -6,6 +6,7 @@
*.pm eol=lf diff=perl
*.py eol=lf diff=python
*.bat eol=crlf
+CODE_OF_CONDUCT.md -whitespace
/Documentation/**/*.txt eol=lf
/command-list.txt eol=lf
/GIT-VERSION-GEN eol=lf
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index a3fbbe6..5f2f884 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -289,7 +289,7 @@
- jobname: osx-gcc
cc: gcc
pool: macos-latest
- - jobname: GETTEXT_POISON
+ - jobname: linux-gcc-default
cc: gcc
pool: ubuntu-latest
env:
diff --git a/.travis.yml b/.travis.yml
index 05f3e3f..908330a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -16,7 +16,7 @@
matrix:
include:
- - env: jobname=GETTEXT_POISON
+ - env: jobname=linux-gcc-default
os: linux
compiler:
addons:
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index fc4645d..65651be 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -8,73 +8,64 @@
## Our Pledge
-In the interest of fostering an open and welcoming environment, we as
-contributors and maintainers pledge to make participation in our project and
-our community a harassment-free experience for everyone, regardless of age,
-body size, disability, ethnicity, sex characteristics, gender identity and
-expression, level of experience, education, socio-economic status,
-nationality, personal appearance, race, religion, or sexual identity and
-orientation.
+We as members, contributors, and leaders pledge to make participation in our
+community a harassment-free experience for everyone, regardless of age, body
+size, visible or invisible disability, ethnicity, sex characteristics, gender
+identity and expression, level of experience, education, socio-economic status,
+nationality, personal appearance, race, religion, or sexual identity
+and orientation.
+
+We pledge to act and interact in ways that contribute to an open, welcoming,
+diverse, inclusive, and healthy community.
## Our Standards
-Examples of behavior that contributes to creating a positive environment
-include:
+Examples of behavior that contributes to a positive environment for our
+community include:
-* Using welcoming and inclusive language
-* Being respectful of differing viewpoints and experiences
-* Gracefully accepting constructive criticism
-* Focusing on what is best for the community
-* Showing empathy towards other community members
+* Demonstrating empathy and kindness toward other people
+* Being respectful of differing opinions, viewpoints, and experiences
+* Giving and gracefully accepting constructive feedback
+* Accepting responsibility and apologizing to those affected by our mistakes,
+ and learning from the experience
+* Focusing on what is best not just for us as individuals, but for the
+ overall community
-Examples of unacceptable behavior by participants include:
+Examples of unacceptable behavior include:
-* The use of sexualized language or imagery and unwelcome sexual attention or
- advances
-* Trolling, insulting/derogatory comments, and personal or political attacks
+* The use of sexualized language or imagery, and sexual attention or
+ advances of any kind
+* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
-* Publishing others' private information, such as a physical or electronic
- address, without explicit permission
+* Publishing others' private information, such as a physical or email
+ address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
-## Our Responsibilities
+## Enforcement Responsibilities
-Project maintainers are responsible for clarifying the standards of acceptable
-behavior and are expected to take appropriate and fair corrective action in
-response to any instances of unacceptable behavior.
+Community leaders are responsible for clarifying and enforcing our standards of
+acceptable behavior and will take appropriate and fair corrective action in
+response to any behavior that they deem inappropriate, threatening, offensive,
+or harmful.
-Project maintainers have the right and responsibility to remove, edit, or
-reject comments, commits, code, wiki edits, issues, and other contributions
-that are not aligned to this Code of Conduct, or to ban temporarily or
-permanently any contributor for other behaviors that they deem inappropriate,
-threatening, offensive, or harmful.
+Community leaders have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions that are
+not aligned to this Code of Conduct, and will communicate reasons for moderation
+decisions when appropriate.
## Scope
-This Code of Conduct applies within all project spaces, and it also applies
-when an individual is representing the project or its community in public
-spaces. Examples of representing a project or community include using an
-official project e-mail address, posting via an official social media account,
-or acting as an appointed representative at an online or offline event.
-Representation of a project may be further defined and clarified by project
-maintainers.
+This Code of Conduct applies within all community spaces, and also applies when
+an individual is officially representing the community in public spaces.
+Examples of representing our community include using an official e-mail address,
+posting via an official social media account, or acting as an appointed
+representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported by contacting the project team at git@sfconservancy.org. All
-complaints will be reviewed and investigated and will result in a response
-that is deemed necessary and appropriate to the circumstances. The project
-team is obligated to maintain confidentiality with regard to the reporter of
-an incident. Further details of specific enforcement policies may be posted
-separately.
-
-Project maintainers who do not follow or enforce the Code of Conduct in good
-faith may face temporary or permanent repercussions as determined by other
-members of the project's leadership.
-
-The project leadership team can be contacted by email as a whole at
+reported to the community leaders responsible for enforcement at
git@sfconservancy.org, or individually:
- Ævar Arnfjörð Bjarmason <avarab@gmail.com>
@@ -82,12 +73,73 @@
- Jeff King <peff@peff.net>
- Junio C Hamano <gitster@pobox.com>
+All complaints will be reviewed and investigated promptly and fairly.
+
+All community leaders are obligated to respect the privacy and security of the
+reporter of any incident.
+
+## Enforcement Guidelines
+
+Community leaders will follow these Community Impact Guidelines in determining
+the consequences for any action they deem in violation of this Code of Conduct:
+
+### 1. Correction
+
+**Community Impact**: Use of inappropriate language or other behavior deemed
+unprofessional or unwelcome in the community.
+
+**Consequence**: A private, written warning from community leaders, providing
+clarity around the nature of the violation and an explanation of why the
+behavior was inappropriate. A public apology may be requested.
+
+### 2. Warning
+
+**Community Impact**: A violation through a single incident or series
+of actions.
+
+**Consequence**: A warning with consequences for continued behavior. No
+interaction with the people involved, including unsolicited interaction with
+those enforcing the Code of Conduct, for a specified period of time. This
+includes avoiding interactions in community spaces as well as external channels
+like social media. Violating these terms may lead to a temporary or
+permanent ban.
+
+### 3. Temporary Ban
+
+**Community Impact**: A serious violation of community standards, including
+sustained inappropriate behavior.
+
+**Consequence**: A temporary ban from any sort of interaction or public
+communication with the community for a specified period of time. No public or
+private interaction with the people involved, including unsolicited interaction
+with those enforcing the Code of Conduct, is allowed during this period.
+Violating these terms may lead to a permanent ban.
+
+### 4. Permanent Ban
+
+**Community Impact**: Demonstrating a pattern of violation of community
+standards, including sustained inappropriate behavior, harassment of an
+individual, or aggression toward or disparagement of classes of individuals.
+
+**Consequence**: A permanent ban from any sort of public interaction within
+the community.
+
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
-version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+version 2.0, available at
+[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
+
+Community Impact Guidelines were inspired by
+[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
+
+For answers to common questions about this code of conduct, see the FAQ at
+[https://www.contributor-covenant.org/faq][FAQ]. Translations are available
+at [https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
+[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
+[Mozilla CoC]: https://github.com/mozilla/diversity
+[FAQ]: https://www.contributor-covenant.org/faq
+[translations]: https://www.contributor-covenant.org/translations
-For answers to common questions about this code of conduct, see
-https://www.contributor-covenant.org/faq
diff --git a/Documentation/Makefile b/Documentation/Makefile
index b980407..81d1bf7 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -21,6 +21,7 @@
MAN5_TXT += gitattributes.txt
MAN5_TXT += githooks.txt
MAN5_TXT += gitignore.txt
+MAN5_TXT += gitmailmap.txt
MAN5_TXT += gitmodules.txt
MAN5_TXT += gitrepository-layout.txt
MAN5_TXT += gitweb.conf.txt
diff --git a/Documentation/MyFirstContribution.txt b/Documentation/MyFirstContribution.txt
index 7c9a037..af0a9da 100644
--- a/Documentation/MyFirstContribution.txt
+++ b/Documentation/MyFirstContribution.txt
@@ -664,7 +664,7 @@
----
test_expect_success 'runs correctly with no args and good output' '
git psuh >actual &&
- test_i18ngrep Pony actual
+ grep Pony actual
'
----
diff --git a/Documentation/RelNotes/2.31.0.txt b/Documentation/RelNotes/2.31.0.txt
new file mode 100644
index 0000000..cf0c7d8
--- /dev/null
+++ b/Documentation/RelNotes/2.31.0.txt
@@ -0,0 +1,365 @@
+Git 2.31 Release Notes
+======================
+
+Updates since v2.30
+-------------------
+
+Backward incompatible and other important changes
+
+ * The "pack-redundant" command, which has been left stale with almost
+ unusable performance issues, now warns loudly when it gets used, as
+ we no longer want to recommend its use (instead just "repack -d"
+ instead).
+
+ * The development community has adopted Contributor Covenant v2.0 to
+ update from v1.4 that we have been using.
+
+ * The support for deprecated PCRE1 library has been dropped.
+
+ * Fixes for CVE-2021-21300 in Git 2.30.2 (and earlier) is included.
+
+
+UI, Workflows & Features
+
+ * The "--format=%(trailers)" mechanism gets enhanced to make it
+ easier to design output for machine consumption.
+
+ * When a user does not tell "git pull" to use rebase or merge, the
+ command gives a loud message telling a user to choose between
+ rebase or merge but creates a merge anyway, forcing users who would
+ want to rebase to redo the operation. Fix an early part of this
+ problem by tightening the condition to give the message---there is
+ no reason to stop or force the user to choose between rebase or
+ merge if the history fast-forwards.
+
+ * The configuration variable 'core.abbrev' can be set to 'no' to
+ force no abbreviation regardless of the hash algorithm.
+
+ * "git rev-parse" can be explicitly told to give output as absolute
+ or relative path with the `--path-format=(absolute|relative)` option.
+
+ * Bash completion (in contrib/) update to make it easier for
+ end-users to add completion for their custom "git" subcommands.
+
+ * "git maintenance" learned to drive scheduled maintenance on
+ platforms whose native scheduling methods are not 'cron'.
+
+ * After expiring a reflog and making a single commit, the reflog for
+ the branch would record a single entry that knows both @{0} and
+ @{1}, but we failed to answer "what commit were we on?", i.e. @{1}
+
+ * "git bundle" learns "--stdin" option to read its refs from the
+ standard input. Also, it now does not lose refs whey they point
+ at the same object.
+
+ * "git log" learned a new "--diff-merges=<how>" option.
+
+ * "git ls-files" can and does show multiple entries when the index is
+ unmerged, which is a source for confusion unless -s/-u option is in
+ use. A new option --deduplicate has been introduced.
+
+ * `git worktree list` now annotates worktrees as prunable, shows
+ locked and prunable attributes in --porcelain mode, and gained
+ a --verbose option.
+
+ * "git clone" tries to locally check out the branch pointed at by
+ HEAD of the remote repository after it is done, but the protocol
+ did not convey the information necessary to do so when copying an
+ empty repository. The protocol v2 learned how to do so.
+
+ * There are other ways than ".." for a single token to denote a
+ "commit range", namely "<rev>^!" and "<rev>^-<n>", but "git
+ range-diff" did not understand them.
+
+ * The "git range-diff" command learned "--(left|right)-only" option
+ to show only one side of the compared range.
+
+ * "git mergetool" feeds three versions (base, local and remote) of
+ a conflicted path unmodified. The command learned to optionally
+ prepare these files with unconflicted parts already resolved.
+
+ * The .mailmap is documented to be read only from the root level of a
+ working tree, but a stray file in a bare repository also was read
+ by accident, which has been corrected.
+
+ * "git maintenance" tool learned a new "pack-refs" maintenance task.
+
+ * The error message given when a configuration variable that is
+ expected to have a boolean value has been improved.
+
+ * Signed commits and tags now allow verification of objects, whose
+ two object names (one in SHA-1, the other in SHA-256) are both
+ signed.
+
+ * "git rev-list" command learned "--disk-usage" option.
+
+ * "git {diff,log} --{skip,rotate}-to=<path>" allows the user to
+ discard diff output for early paths or move them to the end of the
+ output.
+
+ * "git difftool" learned "--skip-to=<path>" option to restart an
+ interrupted session from an arbitrary path.
+
+ * "git grep" has been tweaked to be limited to the sparse checkout
+ paths.
+
+ * "git rebase --[no-]fork-point" gained a configuration variable
+ rebase.forkPoint so that users do not have to keep specifying a
+ non-default setting.
+
+
+Performance, Internal Implementation, Development Support etc.
+
+ * A 3-year old test that was not testing anything useful has been
+ corrected.
+
+ * Retire more names with "sha1" in it.
+
+ * The topological walk codepath is covered by new trace2 stats.
+
+ * Update the Code-of-conduct to version 2.0 from the upstream (we've
+ been using version 1.4).
+
+ * "git mktag" validates its input using its own rules before writing
+ a tag object---it has been updated to share the logic with "git
+ fsck".
+
+ * Two new ways to feed configuration variable-value pairs via
+ environment variables have been introduced, and the way
+ GIT_CONFIG_PARAMETERS encodes variable/value pairs has been tweaked
+ to make it more robust.
+
+ * Tests have been updated so that they do not to get affected by the
+ name of the default branch "git init" creates.
+
+ * "git fetch" learns to treat ref updates atomically in all-or-none
+ fashion, just like "git push" does, with the new "--atomic" option.
+
+ * The peel_ref() API has been replaced with peel_iterated_oid().
+
+ * The .use_shell flag in struct child_process that is passed to
+ run_command() API has been clarified with a bit more documentation.
+
+ * Document, clean-up and optimize the code around the cache-tree
+ extension in the index.
+
+ * The ls-refs protocol operation has been optimized to narrow the
+ sub-hierarchy of refs/ it walks to produce response.
+
+ * When removing many branches and tags, the code used to do so one
+ ref at a time. There is another API it can use to delete multiple
+ refs, and it makes quite a lot of performance difference when the
+ refs are packed.
+
+ * The "pack-objects" command needs to iterate over all the tags when
+ automatic tag following is enabled, but it actually iterated over
+ all refs and then discarded everything outside "refs/tags/"
+ hierarchy, which was quite wasteful.
+
+ * A perf script was made more portable.
+
+ * Our setting of GitHub CI test jobs were a bit too eager to give up
+ once there is even one failure found. Tweak the knob to allow
+ other jobs keep running even when we see a failure, so that we can
+ find more failures in a single run.
+
+ * We've carried compatibility codepaths for compilers without
+ variadic macros for quite some time, but the world may be ready for
+ them to be removed. Force compilation failure on exotic platforms
+ where variadic macros are not available to find out who screams in
+ such a way that we can easily revert if it turns out that the world
+ is not yet ready.
+
+ * Code clean-up to ensure our use of hashtables using object names as
+ keys use the "struct object_id" objects, not the raw hash values.
+
+ * Lose the debugging aid that may have been useful in the past, but
+ no longer is, in the "grep" codepaths.
+
+ * Some pretty-format specifiers do not need the data in commit object
+ (e.g. "%H"), but we were over-eager to load and parse it, which has
+ been made even lazier.
+
+ * Get rid of "GETTEXT_POISON" support altogether, which may or may
+ not be controversial.
+
+ * Introduce an on-disk file to record revindex for packdata, which
+ traditionally was always created on the fly and only in-core.
+
+ * The commit-graph learned to use corrected commit dates instead of
+ the generation number to help topological revision traversal.
+
+ * Piecemeal of rewrite of "git bisect" in C continues.
+
+ * When a pager spawned by us exited, the trace log did not record its
+ exit status correctly, which has been corrected.
+
+ * Removal of GIT_TEST_GETTEXT_POISON continues.
+
+ * The code to implement "git merge-base --independent" was poorly
+ done and was kept from the very beginning of the feature.
+
+ * Preliminary changes to fsmonitor integration.
+
+ * Performance improvements for rename detection.
+
+ * The common code to deal with "chunked file format" that is shared
+ by the multi-pack-index and commit-graph files have been factored
+ out, to help codepaths for both filetypes to become more robust.
+
+ * The approach to "fsck" the incoming objects in "index-pack" is
+ attractive for performance reasons (we have them already in core,
+ inflated and ready to be inspected), but fundamentally cannot be
+ applied fully when we receive more than one pack stream, as a tree
+ object in one pack may refer to a blob object in another pack as
+ ".gitmodules", when we want to inspect blobs that are used as
+ ".gitmodules" file, for example. Teach "index-pack" to emit
+ objects that must be inspected later and check them in the calling
+ "fetch-pack" process.
+
+ * The logic to handle "trailer" related placeholders in the
+ "--format=" mechanisms in the "log" family and "for-each-ref"
+ family is getting unified.
+
+ * Raise the buffer size used when writing the index file out from
+ (obviously too small) 8kB to (clearly sufficiently large) 128kB.
+
+ * It is reported that open() on some platforms (e.g. macOS Big Sur)
+ can return EINTR even though our timers are set up with SA_RESTART.
+ A workaround has been implemented and enabled for macOS to rerun
+ open() transparently from the caller when this happens.
+
+
+Fixes since v2.30
+-----------------
+
+ * Diagnose command line error of "git rebase" early.
+
+ * Clean up option descriptions in "git cmd --help".
+
+ * "git stash" did not work well in a sparsely checked out working
+ tree.
+
+ * Some tests expect that "ls -l" output has either '-' or 'x' for
+ group executable bit, but setgid bit can be inherited from parent
+ directory and make these fields 'S' or 's' instead, causing test
+ failures.
+
+ * "git for-each-repo --config=<var> <cmd>" should not run <cmd> for
+ any repository when the configuration variable <var> is not defined
+ even once.
+
+ * Fix 2.29 regression where "git mergetool --tool-help" fails to list
+ all the available tools.
+
+ * Fix for procedure to building CI test environment for mac.
+
+ * The implementation of "git branch --sort" wrt the detached HEAD
+ display has always been hacky, which has been cleaned up.
+
+ * Newline characters in the host and path part of git:// URL are
+ now forbidden.
+
+ * "git diff" showed a submodule working tree with untracked cruft as
+ "Submodule commit <objectname>-dirty", but a natural expectation is
+ that the "-dirty" indicator would align with "git describe --dirty",
+ which does not consider having untracked files in the working tree
+ as source of dirtiness. The inconsistency has been fixed.
+
+ * When more than one commit with the same patch ID appears on one
+ side, "git log --cherry-pick A...B" did not exclude them all when a
+ commit with the same patch ID appears on the other side. Now it
+ does.
+
+ * Documentation for "git fsck" lost stale bits that has become
+ incorrect.
+
+ * Doc fix for packfile URI feature.
+
+ * When "git rebase -i" processes "fixup" insn, there is no reason to
+ clean up the commit log message, but we did the usual stripspace
+ processing. This has been corrected.
+ (merge f7d42ceec5 js/rebase-i-commit-cleanup-fix later to maint).
+
+ * Fix in passing custom args from "git clone" to "upload-pack" on the
+ other side.
+ (merge ad6b5fefbd jv/upload-pack-filter-spec-quotefix later to maint).
+
+ * The command line completion (in contrib/) completed "git branch -d"
+ with branch names, but "git branch -D" offered tagnames in addition,
+ which has been corrected. "git branch -M" had the same problem.
+ (merge 27dc071b9a jk/complete-branch-force-delete later to maint).
+
+ * When commands are started from a subdirectory, they may have to
+ compare the path to the subdirectory (called prefix and found out
+ from $(pwd)) with the tracked paths. On macOS, $(pwd) and
+ readdir() yield decomposed path, while the tracked paths are
+ usually normalized to the precomposed form, causing mismatch. This
+ has been fixed by taking the same approach used to normalize the
+ command line arguments.
+ (merge 5c327502db tb/precompose-prefix-too later to maint).
+
+ * Even though invocations of "die()" were logged to the trace2
+ system, "BUG()"s were not, which has been corrected.
+ (merge 0a9dde4a04 jt/trace2-BUG later to maint).
+
+ * "git grep --untracked" is meant to be "let's ALSO find in these
+ files on the filesystem" when looking for matches in the working
+ tree files, and does not make any sense if the primary search is
+ done against the index, or the tree objects. The "--cached" and
+ "--untracked" options have been marked as mutually incompatible.
+ (merge 0c5d83b248 mt/grep-cached-untracked later to maint).
+
+ * Fix "git fsck --name-objects" which apparently has not been used by
+ anybody who is motivated enough to report breakage.
+ (merge e89f89361c js/fsck-name-objects-fix later to maint).
+
+ * Avoid individual tests in t5411 from getting affected by each other
+ by forcing them to use separate output files during the test.
+ (merge 822ee894f6 jx/t5411-unique-filenames later to maint).
+
+ * Test to make sure "git rev-parse one-thing one-thing" gives
+ the same thing twice (when one-thing is --since=X).
+ (merge a5cdca4520 ew/rev-parse-since-test later to maint).
+
+ * When certain features (e.g. grafts) used in the repository are
+ incompatible with the use of the commit-graph, we used to silently
+ turned commit-graph off; we now tell the user what we are doing.
+ (merge c85eec7fc3 js/commit-graph-warning later to maint).
+
+ * Objects that lost references can be pruned away, even when they
+ have notes attached to it (and these notes will become dangling,
+ which in turn can be pruned with "git notes prune"). This has been
+ clarified in the documentation.
+ (merge fa9ab027ba mz/doc-notes-are-not-anchors later to maint).
+
+ * The error codepath around the "--temp/--prefix" feature of "git
+ checkout-index" has been improved.
+ (merge 3f7ba60350 mt/checkout-index-corner-cases later to maint).
+
+ * The "git maintenance register" command had trouble registering bare
+ repositories, which had been corrected.
+
+ * A handful of multi-word configuration variable names in
+ documentation that are spelled in all lowercase have been corrected
+ to use the more canonical camelCase.
+ (merge 7dd0eaa39c dl/doc-config-camelcase later to maint).
+
+ * "git push $there --delete ''" should have been diagnosed as an
+ error, but instead turned into a matching push, which has been
+ corrected.
+ (merge 20e416409f jc/push-delete-nothing later to maint).
+
+ * Test script modernization.
+ (merge 488acf15df sv/t7001-modernize later to maint).
+
+ * An under-allocation for the untracked cache data has been corrected.
+ (merge 6347d649bc jh/untracked-cache-fix later to maint).
+
+ * Other code cleanup, docfix, build fix, etc.
+ (merge e3f5da7e60 sg/t7800-difftool-robustify later to maint).
+ (merge 9d336655ba js/doc-proto-v2-response-end later to maint).
+ (merge 1b5b8cf072 jc/maint-column-doc-typofix later to maint).
+ (merge 3a837b58e3 cw/pack-config-doc later to maint).
+ (merge 01168a9d89 ug/doc-commit-approxidate later to maint).
+ (merge b865734760 js/params-vs-args later to maint).
diff --git a/Documentation/RelNotes/2.31.1.txt b/Documentation/RelNotes/2.31.1.txt
new file mode 100644
index 0000000..f9b06b8
--- /dev/null
+++ b/Documentation/RelNotes/2.31.1.txt
@@ -0,0 +1,27 @@
+Git 2.31.1 Release Notes
+========================
+
+Fixes since v2.31
+-----------------
+
+ * The fsmonitor interface read from its input without making sure
+ there is something to read from. This bug is new in 2.31
+ timeframe.
+
+ * The data structure used by fsmonitor interface was not properly
+ duplicated during an in-core merge, leading to use-after-free etc.
+
+ * "git bisect" reimplemented more in C during 2.30 timeframe did not
+ take an annotated tag as a good/bad endpoint well. This regression
+ has been corrected.
+
+ * Fix macros that can silently inject unintended null-statements.
+
+ * CALLOC_ARRAY() macro replaces many uses of xcalloc().
+
+ * Update insn in Makefile comments to run fuzz-all target.
+
+ * Fix a corner case bug in "git mv" on case insensitive systems,
+ which was introduced in 2.29 timeframe.
+
+Also contains various documentation updates and code clean-ups.
diff --git a/Documentation/RelNotes/2.31.2.txt b/Documentation/RelNotes/2.31.2.txt
new file mode 100644
index 0000000..aa13a5b
--- /dev/null
+++ b/Documentation/RelNotes/2.31.2.txt
@@ -0,0 +1,6 @@
+Git v2.31.2 Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.30.3 to address
+the security issue CVE-2022-24765; see the release notes for that
+version for details.
diff --git a/Documentation/RelNotes/2.31.3.txt b/Documentation/RelNotes/2.31.3.txt
new file mode 100644
index 0000000..ca143ab
--- /dev/null
+++ b/Documentation/RelNotes/2.31.3.txt
@@ -0,0 +1,4 @@
+Git Documentation/RelNotes/2.31.3.txt Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.31.3.
diff --git a/Documentation/blame-options.txt b/Documentation/blame-options.txt
index dc3bceb..117f4cf 100644
--- a/Documentation/blame-options.txt
+++ b/Documentation/blame-options.txt
@@ -1,6 +1,6 @@
-b::
Show blank SHA-1 for boundary commits. This can also
- be controlled via the `blame.blankboundary` config option.
+ be controlled via the `blame.blankBoundary` config option.
--root::
Do not treat root commits as boundaries. This can also be
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 34e6d47..a1efd74 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -46,7 +46,7 @@
newline and the null byte. Doublequote `"` and backslash can be included
by escaping them as `\"` and `\\`, respectively. Backslashes preceding
other characters are dropped when reading; for example, `\t` is read as
-`t` and `\0` is read as `0` Section headers cannot span multiple lines.
+`t` and `\0` is read as `0`. Section headers cannot span multiple lines.
Variables may belong directly to a section or to a given subsection. You
can have `[section]` if you have `[section "subsection"]`, but you don't
need to.
@@ -398,6 +398,8 @@
include::config/log.txt[]
+include::config/lsrefs.txt[]
+
include::config/mailinfo.txt[]
include::config/mailmap.txt[]
diff --git a/Documentation/config/core.txt b/Documentation/config/core.txt
index 160aaca..c04f62a 100644
--- a/Documentation/config/core.txt
+++ b/Documentation/config/core.txt
@@ -625,4 +625,6 @@
computed based on the approximate number of packed objects
in your repository, which hopefully is enough for
abbreviated object names to stay unique for some time.
+ If set to "no", no abbreviation is made and the object names
+ are shown in their full length.
The minimum length is 4.
diff --git a/Documentation/config/diff.txt b/Documentation/config/diff.txt
index c3ae136..2d3331f 100644
--- a/Documentation/config/diff.txt
+++ b/Documentation/config/diff.txt
@@ -85,6 +85,8 @@
and 'git status' when `status.submoduleSummary` is set unless it is
overridden by using the --ignore-submodules command-line option.
The 'git submodule' commands are not affected by this setting.
+ By default this is set to untracked so that any untracked
+ submodules are ignored.
diff.mnemonicPrefix::
If set, 'git diff' uses a prefix pair that is different from the
diff --git a/Documentation/config/init.txt b/Documentation/config/init.txt
index dc77f8c..79c79d6 100644
--- a/Documentation/config/init.txt
+++ b/Documentation/config/init.txt
@@ -4,4 +4,4 @@
init.defaultBranch::
Allows overriding the default branch name e.g. when initializing
- a new repository or when cloning an empty repository.
+ a new repository.
diff --git a/Documentation/config/lsrefs.txt b/Documentation/config/lsrefs.txt
new file mode 100644
index 0000000..adeda0f
--- /dev/null
+++ b/Documentation/config/lsrefs.txt
@@ -0,0 +1,9 @@
+lsrefs.unborn::
+ May be "advertise" (the default), "allow", or "ignore". If "advertise",
+ the server will respond to the client sending "unborn" (as described in
+ protocol-v2.txt) and will advertise support for this feature during the
+ protocol v2 capability advertisement. "allow" is the same as
+ "advertise" except that the server will not advertise support for this
+ feature; this is useful for load-balanced servers that cannot be
+ updated atomically (for example), since the administrator could
+ configure "allow", then after a delay, configure "advertise".
diff --git a/Documentation/config/maintenance.txt b/Documentation/config/maintenance.txt
index a5ead09..18f0562 100644
--- a/Documentation/config/maintenance.txt
+++ b/Documentation/config/maintenance.txt
@@ -15,8 +15,9 @@
* `none`: This default setting implies no task are run at any schedule.
* `incremental`: This setting optimizes for performing small maintenance
activities that do not delete any data. This does not schedule the `gc`
- task, but runs the `prefetch` and `commit-graph` tasks hourly and the
- `loose-objects` and `incremental-repack` tasks daily.
+ task, but runs the `prefetch` and `commit-graph` tasks hourly, the
+ `loose-objects` and `incremental-repack` tasks daily, and the `pack-refs`
+ task weekly.
maintenance.<task>.enabled::
This boolean config option controls whether the maintenance task
diff --git a/Documentation/config/mergetool.txt b/Documentation/config/mergetool.txt
index 16a2744..cafbbef 100644
--- a/Documentation/config/mergetool.txt
+++ b/Documentation/config/mergetool.txt
@@ -13,6 +13,11 @@
merged; 'MERGED' contains the name of the file to which the merge
tool should write the results of a successful merge.
+mergetool.<tool>.hideResolved::
+ Allows the user to override the global `mergetool.hideResolved` value
+ for a specific tool. See `mergetool.hideResolved` for the full
+ description.
+
mergetool.<tool>.trustExitCode::
For a custom merge command, specify whether the exit code of
the merge command can be used to determine whether the merge was
@@ -40,6 +45,16 @@
value of `false` avoids using `--auto-merge` altogether, and is the
default value.
+mergetool.hideResolved::
+ During a merge Git will automatically resolve as many conflicts as
+ possible and write the 'MERGED' file containing conflict markers around
+ any conflicts that it cannot resolve; 'LOCAL' and 'REMOTE' normally
+ represent the versions of the file from before Git's conflict
+ resolution. This flag causes 'LOCAL' and 'REMOTE' to be overwriten so
+ that only the unresolved conflicts are presented to the merge tool. Can
+ be configured per-tool via the `mergetool.<tool>.hideResolved`
+ configuration variable. Defaults to `false`.
+
mergetool.keepBackup::
After performing a merge, the original file with conflict markers
can be saved as a file with a `.orig` extension. If this variable
diff --git a/Documentation/config/pack.txt b/Documentation/config/pack.txt
index 837f1b1..3da4ea9 100644
--- a/Documentation/config/pack.txt
+++ b/Documentation/config/pack.txt
@@ -133,3 +133,10 @@
between an older, bitmapped pack and objects that have been
pushed since the last gc). The downside is that it consumes 4
bytes per object of disk space. Defaults to true.
+
+pack.writeReverseIndex::
+ When true, git will write a corresponding .rev file (see:
+ link:../technical/pack-format.html[Documentation/technical/pack-format.txt])
+ for each new packfile that it writes in all places except for
+ linkgit:git-fast-import[1] and in the bulk checkin mechanism.
+ Defaults to false.
diff --git a/Documentation/config/rebase.txt b/Documentation/config/rebase.txt
index 7f7a07d..214f31b 100644
--- a/Documentation/config/rebase.txt
+++ b/Documentation/config/rebase.txt
@@ -68,3 +68,6 @@
Automatically reschedule `exec` commands that failed. This only makes
sense in interactive mode (or when an `--exec` option was provided).
This is the same as specifying the `--reschedule-failed-exec` option.
+
+rebase.forkPoint::
+ If set to false set `--no-fork-point` option by default.
diff --git a/Documentation/date-formats.txt b/Documentation/date-formats.txt
index f1097fa..99c455f 100644
--- a/Documentation/date-formats.txt
+++ b/Documentation/date-formats.txt
@@ -1,10 +1,7 @@
DATE FORMATS
------------
-The `GIT_AUTHOR_DATE`, `GIT_COMMITTER_DATE` environment variables
-ifdef::git-commit[]
-and the `--date` option
-endif::git-commit[]
+The `GIT_AUTHOR_DATE` and `GIT_COMMITTER_DATE` environment variables
support the following date formats:
Git internal format::
@@ -26,3 +23,9 @@
+
NOTE: In addition, the date part is accepted in the following formats:
`YYYY.MM.DD`, `MM/DD/YYYY` and `DD.MM.YYYY`.
+
+ifdef::git-commit[]
+In addition to recognizing all date formats above, the `--date` option
+will also try to make sense of other, more human-centric date formats,
+such as relative dates like "yesterday" or "last Friday at noon".
+endif::git-commit[]
diff --git a/Documentation/diff-generate-patch.txt b/Documentation/diff-generate-patch.txt
index b10ff4c..2db8eac 100644
--- a/Documentation/diff-generate-patch.txt
+++ b/Documentation/diff-generate-patch.txt
@@ -81,9 +81,9 @@
Any diff-generating command can take the `-c` or `--cc` option to
produce a 'combined diff' when showing a merge. This is the default
format when showing merges with linkgit:git-diff[1] or
-linkgit:git-show[1]. Note also that you can give the `-m` option to any
-of these commands to force generation of diffs with individual parents
-of a merge.
+linkgit:git-show[1]. Note also that you can give suitable
+`--diff-merges` option to any of these commands to force generation of
+diffs in specific format.
A "combined diff" format looks like this:
diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt
index 746b144..aa2b5c1 100644
--- a/Documentation/diff-options.txt
+++ b/Documentation/diff-options.txt
@@ -33,6 +33,57 @@
show the patch by default, or to cancel the effect of `--patch`.
endif::git-format-patch[]
+ifdef::git-log[]
+--diff-merges=(off|none|first-parent|1|separate|m|combined|c|dense-combined|cc)::
+--no-diff-merges::
+ Specify diff format to be used for merge commits. Default is
+ {diff-merges-default} unless `--first-parent` is in use, in which case
+ `first-parent` is the default.
++
+--diff-merges=(off|none):::
+--no-diff-merges:::
+ Disable output of diffs for merge commits. Useful to override
+ implied value.
++
+--diff-merges=first-parent:::
+--diff-merges=1:::
+ This option makes merge commits show the full diff with
+ respect to the first parent only.
++
+--diff-merges=separate:::
+--diff-merges=m:::
+-m:::
+ This makes merge commits show the full diff with respect to
+ each of the parents. Separate log entry and diff is generated
+ for each parent. `-m` doesn't produce any output without `-p`.
++
+--diff-merges=combined:::
+--diff-merges=c:::
+-c:::
+ With this option, diff output for a merge commit shows the
+ differences from each of the parents to the merge result
+ simultaneously instead of showing pairwise diff between a
+ parent and the result one at a time. Furthermore, it lists
+ only files which were modified from all parents. `-c` implies
+ `-p`.
++
+--diff-merges=dense-combined:::
+--diff-merges=cc:::
+--cc:::
+ With this option the output produced by
+ `--diff-merges=combined` is further compressed by omitting
+ uninteresting hunks whose contents in the parents have only
+ two variants and the merge result picks one of them without
+ modification. `--cc` implies `-p`.
+
+--combined-all-paths::
+ This flag causes combined diffs (used for merge commits) to
+ list the name of the file from all parents. It thus only has
+ effect when `--diff-merges=[dense-]combined` is in use, and
+ is likely only useful if filename changes are detected (i.e.
+ when either rename or copy detection have been requested).
+endif::git-log[]
+
-U<n>::
--unified=<n>::
Generate diffs with <n> lines of context instead of
@@ -649,6 +700,14 @@
components matches the pattern. For example, the pattern "`foo*bar`"
matches "`fooasdfbar`" and "`foo/bar/baz/asdf`" but not "`foobarx`".
+--skip-to=<file>::
+--rotate-to=<file>::
+ Discard the files before the named <file> from the output
+ (i.e. 'skip to'), or move them to the end of the output
+ (i.e. 'rotate to'). These were invented primarily for use
+ of the `git difftool` command, and may not be very useful
+ otherwise.
+
ifndef::git-format-patch[]
-R::
Swap two inputs; that is, show differences from index or
diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt
index 2bf77b4..07783de 100644
--- a/Documentation/fetch-options.txt
+++ b/Documentation/fetch-options.txt
@@ -7,6 +7,10 @@
existing contents of `.git/FETCH_HEAD`. Without this
option old data in `.git/FETCH_HEAD` will be overwritten.
+--atomic::
+ Use an atomic transaction to update local refs. Either all refs are
+ updated, or on error, no refs are updated.
+
--depth=<depth>::
Limit fetching to the specified number of commits from the tip of
each remote branch history. If fetching to a 'shallow' repository
diff --git a/Documentation/git-am.txt b/Documentation/git-am.txt
index 06bc063..decd8ae 100644
--- a/Documentation/git-am.txt
+++ b/Documentation/git-am.txt
@@ -79,7 +79,7 @@
Pass `-u` flag to 'git mailinfo' (see linkgit:git-mailinfo[1]).
The proposed commit log message taken from the e-mail
is re-coded into UTF-8 encoding (configuration variable
- `i18n.commitencoding` can be used to specify project's
+ `i18n.commitEncoding` can be used to specify project's
preferred encoding if it is not UTF-8).
+
This was optional in prior versions of git, but now it is the
diff --git a/Documentation/git-blame.txt b/Documentation/git-blame.txt
index 34b496d..3bf5d5d 100644
--- a/Documentation/git-blame.txt
+++ b/Documentation/git-blame.txt
@@ -226,7 +226,7 @@
MAPPING AUTHORS
---------------
-include::mailmap.txt[]
+See linkgit:gitmailmap[5].
SEE ALSO
diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.txt
index adaa178..94dc9a5 100644
--- a/Documentation/git-branch.txt
+++ b/Documentation/git-branch.txt
@@ -78,8 +78,8 @@
to happen.
The `-c` and `-C` options have the exact same semantics as `-m` and
-`-M`, except instead of the branch being renamed it along with its
-config and reflog will be copied to a new name.
+`-M`, except instead of the branch being renamed, it will be copied to a
+new name, along with its config and reflog.
With a `-d` or `-D` option, `<branchname>` will be deleted. You may
specify more than one branch for deletion. If the branch currently
@@ -153,7 +153,7 @@
--column[=<options>]::
--no-column::
Display branch listing in columns. See configuration variable
- column.branch for option syntax.`--column` and `--no-column`
+ `column.branch` for option syntax. `--column` and `--no-column`
without options are equivalent to 'always' and 'never' respectively.
+
This option is only applicable in non-verbose mode.
diff --git a/Documentation/git-check-mailmap.txt b/Documentation/git-check-mailmap.txt
index aa2055d..02f4418 100644
--- a/Documentation/git-check-mailmap.txt
+++ b/Documentation/git-check-mailmap.txt
@@ -36,10 +36,17 @@
printed; otherwise only ``$$<user@host>$$'' is printed.
+CONFIGURATION
+-------------
+
+See `mailmap.file` and `mailmap.blob` in linkgit:git-config[1] for how
+to specify a custom `.mailmap` target file or object.
+
+
MAPPING AUTHORS
---------------
-include::mailmap.txt[]
+See linkgit:gitmailmap[5].
GIT
diff --git a/Documentation/git-config.txt b/Documentation/git-config.txt
index 0e9351d..4b4cc5c 100644
--- a/Documentation/git-config.txt
+++ b/Documentation/git-config.txt
@@ -346,6 +346,22 @@
See also <<FILES>>.
+GIT_CONFIG_COUNT::
+GIT_CONFIG_KEY_<n>::
+GIT_CONFIG_VALUE_<n>::
+ If GIT_CONFIG_COUNT is set to a positive number, all environment pairs
+ GIT_CONFIG_KEY_<n> and GIT_CONFIG_VALUE_<n> up to that number will be
+ added to the process's runtime configuration. The config pairs are
+ zero-indexed. Any missing key or value is treated as an error. An empty
+ GIT_CONFIG_COUNT is treated the same as GIT_CONFIG_COUNT=0, namely no
+ pairs are processed. These environment variables will override values
+ in configuration files, but will be overridden by any explicit options
+ passed via `git -c`.
++
+This is useful for cases where you want to spawn multiple git commands
+with a common configuration but cannot depend on a configuration file,
+for example when writing scripts.
+
[[EXAMPLES]]
EXAMPLES
diff --git a/Documentation/git-difftool.txt b/Documentation/git-difftool.txt
index 484c485..143b0c4 100644
--- a/Documentation/git-difftool.txt
+++ b/Documentation/git-difftool.txt
@@ -34,6 +34,14 @@
This is the default behaviour; the option is provided to
override any configuration settings.
+--rotate-to=<file>::
+ Start showing the diff for the given path,
+ the paths before it will move to end and output.
+
+--skip-to=<file>::
+ Start showing the diff for the given path, skipping all
+ the paths before it.
+
-t <tool>::
--tool=<tool>::
Use the diff tool specified by <tool>. Valid values include
diff --git a/Documentation/git-for-each-ref.txt b/Documentation/git-for-each-ref.txt
index 2962f85..2ae2478 100644
--- a/Documentation/git-for-each-ref.txt
+++ b/Documentation/git-for-each-ref.txt
@@ -260,11 +260,9 @@
The first `N` lines of the message.
Additionally, the trailers as interpreted by linkgit:git-interpret-trailers[1]
-are obtained as `trailers` (or by using the historical alias
-`contents:trailers`). Non-trailer lines from the trailer block can be omitted
-with `trailers:only`. Whitespace-continuations can be removed from trailers so
-that each trailer appears on a line by itself with its full content with
-`trailers:unfold`. Both can be used together as `trailers:unfold,only`.
+are obtained as `trailers[:options]` (or by using the historical alias
+`contents:trailers[:options]`). For valid [:option] values see `trailers`
+section of linkgit:git-log[1].
For sorting purposes, fields with numeric values sort in numeric order
(`objectsize`, `authordate`, `committerdate`, `creatordate`, `taggerdate`).
diff --git a/Documentation/git-gc.txt b/Documentation/git-gc.txt
index 0c114ad..853967d 100644
--- a/Documentation/git-gc.txt
+++ b/Documentation/git-gc.txt
@@ -117,12 +117,14 @@
'git gc' tries very hard not to delete objects that are referenced
anywhere in your repository. In particular, it will keep not only
objects referenced by your current set of branches and tags, but also
-objects referenced by the index, remote-tracking branches, notes saved
-by 'git notes' under refs/notes/, reflogs (which may reference commits
-in branches that were later amended or rewound), and anything else in
-the refs/* namespace. If you are expecting some objects to be deleted
-and they aren't, check all of those locations and decide whether it
-makes sense in your case to remove those references.
+objects referenced by the index, remote-tracking branches, reflogs
+(which may reference commits in branches that were later amended or
+rewound), and anything else in the refs/* namespace. Note that a note
+(of the kind created by 'git notes') attached to an object does not
+contribute in keeping the object alive. If you are expecting some
+objects to be deleted and they aren't, check all of those locations
+and decide whether it makes sense in your case to remove those
+references.
On the other hand, when 'git gc' runs concurrently with another process,
there is a risk of it deleting an object that the other process is using
diff --git a/Documentation/git-http-fetch.txt b/Documentation/git-http-fetch.txt
index 4deb489..9fa17b6 100644
--- a/Documentation/git-http-fetch.txt
+++ b/Documentation/git-http-fetch.txt
@@ -41,11 +41,17 @@
<commit-id>['\t'<filename-as-in--w>]
--packfile=<hash>::
- Instead of a commit id on the command line (which is not expected in
+ For internal use only. Instead of a commit id on the command
+ line (which is not expected in
this case), 'git http-fetch' fetches the packfile directly at the given
URL and uses index-pack to generate corresponding .idx and .keep files.
The hash is used to determine the name of the temporary file and is
- arbitrary. The output of index-pack is printed to stdout.
+ arbitrary. The output of index-pack is printed to stdout. Requires
+ --index-pack-args.
+
+--index-pack-args=<args>::
+ For internal use only. The command to run on the contents of the
+ downloaded pack. Arguments are URL-encoded separated by spaces.
--recover::
Verify that everything reachable from target is fetched. Used after
diff --git a/Documentation/git-index-pack.txt b/Documentation/git-index-pack.txt
index af0c262..7fa74b9 100644
--- a/Documentation/git-index-pack.txt
+++ b/Documentation/git-index-pack.txt
@@ -9,17 +9,18 @@
SYNOPSIS
--------
[verse]
-'git index-pack' [-v] [-o <index-file>] <pack-file>
+'git index-pack' [-v] [-o <index-file>] [--[no-]rev-index] <pack-file>
'git index-pack' --stdin [--fix-thin] [--keep] [-v] [-o <index-file>]
- [<pack-file>]
+ [--[no-]rev-index] [<pack-file>]
DESCRIPTION
-----------
Reads a packed archive (.pack) from the specified file, and
-builds a pack index file (.idx) for it. The packed archive
-together with the pack index can then be placed in the
-objects/pack/ directory of a Git repository.
+builds a pack index file (.idx) for it. Optionally writes a
+reverse-index (.rev) for the specified pack. The packed
+archive together with the pack index can then be placed in
+the objects/pack/ directory of a Git repository.
OPTIONS
@@ -35,6 +36,13 @@
fails if the name of packed archive does not end
with .pack).
+--[no-]rev-index::
+ When this flag is provided, generate a reverse index
+ (a `.rev` file) corresponding to the given pack. If
+ `--verify` is given, ensure that the existing
+ reverse index is correct. Takes precedence over
+ `pack.writeReverseIndex`.
+
--stdin::
When this flag is provided, the pack is read from stdin
instead and a copy is then written to <pack-file>. If
@@ -78,7 +86,12 @@
Die if the pack contains broken links. For internal use only.
--fsck-objects::
- Die if the pack contains broken objects. For internal use only.
+ For internal use only.
++
+Die if the pack contains broken objects. If the pack contains a tree
+pointing to a .gitmodules blob that does not exist, prints the hash of
+that blob (for the caller to check) after the hash that goes into the
+name of the pack/idx file (see "Notes").
--threads=<n>::
Specifies the number of threads to spawn when resolving
diff --git a/Documentation/git-log.txt b/Documentation/git-log.txt
index dd189a3..1bbf865 100644
--- a/Documentation/git-log.txt
+++ b/Documentation/git-log.txt
@@ -107,47 +107,15 @@
By default, `git log` does not generate any diff output. The options
below can be used to show the changes made by each commit.
-Note that unless one of `-c`, `--cc`, or `-m` is given, merge commits
-will never show a diff, even if a diff format like `--patch` is
-selected, nor will they match search options like `-S`. The exception is
-when `--first-parent` is in use, in which merges are treated like normal
-single-parent commits (this can be overridden by providing a
-combined-diff option or with `--no-diff-merges`).
-
--c::
- With this option, diff output for a merge commit
- shows the differences from each of the parents to the merge result
- simultaneously instead of showing pairwise diff between a parent
- and the result one at a time. Furthermore, it lists only files
- which were modified from all parents.
-
---cc::
- This flag implies the `-c` option and further compresses the
- patch output by omitting uninteresting hunks whose contents in
- the parents have only two variants and the merge result picks
- one of them without modification.
-
---combined-all-paths::
- This flag causes combined diffs (used for merge commits) to
- list the name of the file from all parents. It thus only has
- effect when -c or --cc are specified, and is likely only
- useful if filename changes are detected (i.e. when either
- rename or copy detection have been requested).
-
--m::
- This flag makes the merge commits show the full diff like
- regular commits; for each merge parent, a separate log entry
- and diff is generated. An exception is that only diff against
- the first parent is shown when `--first-parent` option is given;
- in that case, the output represents the changes the merge
- brought _into_ the then-current branch.
-
---diff-merges=off::
---no-diff-merges::
- Disable output of diffs for merge commits (default). Useful to
- override `-m`, `-c`, or `--cc`.
+Note that unless one of `--diff-merges` variants (including short
+`-m`, `-c`, and `--cc` options) is explicitly given, merge commits
+will not show a diff, even if a diff format like `--patch` is
+selected, nor will they match search options like `-S`. The exception
+is when `--first-parent` is in use, in which case `first-parent` is
+the default format.
:git-log: 1
+:diff-merges-default: `off`
include::diff-options.txt[]
include::diff-generate-patch.txt[]
diff --git a/Documentation/git-ls-files.txt b/Documentation/git-ls-files.txt
index 0a3b526..6d11ab5 100644
--- a/Documentation/git-ls-files.txt
+++ b/Documentation/git-ls-files.txt
@@ -13,6 +13,7 @@
(--[cached|deleted|others|ignored|stage|unmerged|killed|modified])*
(-[c|d|o|i|s|u|k|m])*
[--eol]
+ [--deduplicate]
[-x <pattern>|--exclude=<pattern>]
[-X <file>|--exclude-from=<file>]
[--exclude-per-directory=<file>]
@@ -80,6 +81,13 @@
\0 line termination on output and do not quote filenames.
See OUTPUT below for more information.
+--deduplicate::
+ When only filenames are shown, suppress duplicates that may
+ come from having multiple stages during a merge, or giving
+ `--deleted` and `--modified` option at the same time.
+ When any of the `-t`, `--unmerged`, or `--stage` option is
+ in use, this option has no effect.
+
-x <pattern>::
--exclude=<pattern>::
Skip untracked files matching pattern.
diff --git a/Documentation/git-mailinfo.txt b/Documentation/git-mailinfo.txt
index 7a6aed0..d343f04 100644
--- a/Documentation/git-mailinfo.txt
+++ b/Documentation/git-mailinfo.txt
@@ -53,7 +53,7 @@
The commit log message, author name and author email are
taken from the e-mail, and after minimally decoding MIME
transfer encoding, re-coded in the charset specified by
- i18n.commitencoding (defaulting to UTF-8) by transliterating
+ `i18n.commitEncoding` (defaulting to UTF-8) by transliterating
them. This used to be optional but now it is the default.
+
Note that the patch is always used as-is without charset
@@ -61,7 +61,7 @@
--encoding=<encoding>::
Similar to -u. But when re-coding, the charset specified here is
- used instead of the one specified by i18n.commitencoding or UTF-8.
+ used instead of the one specified by `i18n.commitEncoding` or UTF-8.
-n::
Disable all charset re-coding of the metadata.
diff --git a/Documentation/git-maintenance.txt b/Documentation/git-maintenance.txt
index 6fe1e5e..80ddd33 100644
--- a/Documentation/git-maintenance.txt
+++ b/Documentation/git-maintenance.txt
@@ -145,6 +145,12 @@
which is a special case that attempts to repack all pack-files
into a single pack-file.
+pack-refs::
+ The `pack-refs` task collects the loose reference files and
+ collects them into a single file. This speeds up operations that
+ need to iterate across many references. See linkgit:git-pack-refs[1]
+ for more information.
+
OPTIONS
-------
--auto::
@@ -218,6 +224,122 @@
but does not take the lock in the same way as `git maintenance run`. If
possible, use `git maintenance run --task=gc` instead of `git gc`.
+The following sections describe the mechanisms put in place to run
+background maintenance by `git maintenance start` and how to customize
+them.
+
+BACKGROUND MAINTENANCE ON POSIX SYSTEMS
+---------------------------------------
+
+The standard mechanism for scheduling background tasks on POSIX systems
+is cron(8). This tool executes commands based on a given schedule. The
+current list of user-scheduled tasks can be found by running `crontab -l`.
+The schedule written by `git maintenance start` is similar to this:
+
+-----------------------------------------------------------------------
+# BEGIN GIT MAINTENANCE SCHEDULE
+# The following schedule was created by Git
+# Any edits made in this region might be
+# replaced in the future by a Git command.
+
+0 1-23 * * * "/<path>/git" --exec-path="/<path>" for-each-repo --config=maintenance.repo maintenance run --schedule=hourly
+0 0 * * 1-6 "/<path>/git" --exec-path="/<path>" for-each-repo --config=maintenance.repo maintenance run --schedule=daily
+0 0 * * 0 "/<path>/git" --exec-path="/<path>" for-each-repo --config=maintenance.repo maintenance run --schedule=weekly
+
+# END GIT MAINTENANCE SCHEDULE
+-----------------------------------------------------------------------
+
+The comments are used as a region to mark the schedule as written by Git.
+Any modifications within this region will be completely deleted by
+`git maintenance stop` or overwritten by `git maintenance start`.
+
+The `crontab` entry specifies the full path of the `git` executable to
+ensure that the executed `git` command is the same one with which
+`git maintenance start` was issued independent of `PATH`. If the same user
+runs `git maintenance start` with multiple Git executables, then only the
+latest executable is used.
+
+These commands use `git for-each-repo --config=maintenance.repo` to run
+`git maintenance run --schedule=<frequency>` on each repository listed in
+the multi-valued `maintenance.repo` config option. These are typically
+loaded from the user-specific global config. The `git maintenance` process
+then determines which maintenance tasks are configured to run on each
+repository with each `<frequency>` using the `maintenance.<task>.schedule`
+config options. These values are loaded from the global or repository
+config values.
+
+If the config values are insufficient to achieve your desired background
+maintenance schedule, then you can create your own schedule. If you run
+`crontab -e`, then an editor will load with your user-specific `cron`
+schedule. In that editor, you can add your own schedule lines. You could
+start by adapting the default schedule listed earlier, or you could read
+the crontab(5) documentation for advanced scheduling techniques. Please
+do use the full path and `--exec-path` techniques from the default
+schedule to ensure you are executing the correct binaries in your
+schedule.
+
+
+BACKGROUND MAINTENANCE ON MACOS SYSTEMS
+---------------------------------------
+
+While macOS technically supports `cron`, using `crontab -e` requires
+elevated privileges and the executed process does not have a full user
+context. Without a full user context, Git and its credential helpers
+cannot access stored credentials, so some maintenance tasks are not
+functional.
+
+Instead, `git maintenance start` interacts with the `launchctl` tool,
+which is the recommended way to schedule timed jobs in macOS. Scheduling
+maintenance through `git maintenance (start|stop)` requires some
+`launchctl` features available only in macOS 10.11 or later.
+
+Your user-specific scheduled tasks are stored as XML-formatted `.plist`
+files in `~/Library/LaunchAgents/`. You can see the currently-registered
+tasks using the following command:
+
+-----------------------------------------------------------------------
+$ ls ~/Library/LaunchAgents/org.git-scm.git*
+org.git-scm.git.daily.plist
+org.git-scm.git.hourly.plist
+org.git-scm.git.weekly.plist
+-----------------------------------------------------------------------
+
+One task is registered for each `--schedule=<frequency>` option. To
+inspect how the XML format describes each schedule, open one of these
+`.plist` files in an editor and inspect the `<array>` element following
+the `<key>StartCalendarInterval</key>` element.
+
+`git maintenance start` will overwrite these files and register the
+tasks again with `launchctl`, so any customizations should be done by
+creating your own `.plist` files with distinct names. Similarly, the
+`git maintenance stop` command will unregister the tasks with `launchctl`
+and delete the `.plist` files.
+
+To create more advanced customizations to your background tasks, see
+launchctl.plist(5) for more information.
+
+
+BACKGROUND MAINTENANCE ON WINDOWS SYSTEMS
+-----------------------------------------
+
+Windows does not support `cron` and instead has its own system for
+scheduling background tasks. The `git maintenance start` command uses
+the `schtasks` command to submit tasks to this system. You can inspect
+all background tasks using the Task Scheduler application. The tasks
+added by Git have names of the form `Git Maintenance (<frequency>)`.
+The Task Scheduler GUI has ways to inspect these tasks, but you can also
+export the tasks to XML files and view the details there.
+
+Note that since Git is a console application, these background tasks
+create a console window visible to the current user. This can be changed
+manually by selecting the "Run whether user is logged in or not" option
+in Task Scheduler. This change requires a password input, which is why
+`git maintenance start` does not select it by default.
+
+If you want to customize the background tasks, please rename the tasks
+so future calls to `git maintenance (start|stop)` do not overwrite your
+custom tasks.
+
GIT
---
diff --git a/Documentation/git-mergetool--lib.txt b/Documentation/git-mergetool--lib.txt
index 4da9d24..3e8f59a 100644
--- a/Documentation/git-mergetool--lib.txt
+++ b/Documentation/git-mergetool--lib.txt
@@ -38,6 +38,10 @@
get_merge_tool_path::
returns the custom path for a merge tool.
+initialize_merge_tool::
+ bring merge tool specific functions into scope so they can be used or
+ overridden.
+
run_merge_tool::
launches a merge tool given the tool name and a true/false
flag to indicate whether a merge base is present.
diff --git a/Documentation/git-mergetool.txt b/Documentation/git-mergetool.txt
index 6b14702..e587c77 100644
--- a/Documentation/git-mergetool.txt
+++ b/Documentation/git-mergetool.txt
@@ -99,6 +99,10 @@
(see linkgit:git-config[1]). To cancel `diff.orderFile`,
use `-O/dev/null`.
+CONFIGURATION
+-------------
+include::config/mergetool.txt[]
+
TEMPORARY FILES
---------------
`git mergetool` creates `*.orig` backup files while resolving merges.
diff --git a/Documentation/git-mktag.txt b/Documentation/git-mktag.txt
index fa6a756..17a2603 100644
--- a/Documentation/git-mktag.txt
+++ b/Documentation/git-mktag.txt
@@ -3,7 +3,7 @@
NAME
----
-git-mktag - Creates a tag object
+git-mktag - Creates a tag object with extra validation
SYNOPSIS
@@ -11,25 +11,52 @@
[verse]
'git mktag'
+OPTIONS
+-------
+
+--strict::
+ By default mktag turns on the equivalent of
+ linkgit:git-fsck[1] `--strict` mode. Use `--no-strict` to
+ disable it.
+
DESCRIPTION
-----------
-Reads a tag contents on standard input and creates a tag object
-that can also be used to sign other objects.
-The output is the new tag's <object> identifier.
+Reads a tag contents on standard input and creates a tag object. The
+output is the new tag's <object> identifier.
+
+This command is mostly equivalent to linkgit:git-hash-object[1]
+invoked with `-t tag -w --stdin`. I.e. both of these will create and
+write a tag found in `my-tag`:
+
+ git mktag <my-tag
+ git hash-object -t tag -w --stdin <my-tag
+
+The difference is that mktag will die before writing the tag if the
+tag doesn't pass a linkgit:git-fsck[1] check.
+
+The "fsck" check done mktag is stricter than what linkgit:git-fsck[1]
+would run by default in that all `fsck.<msg-id>` messages are promoted
+from warnings to errors (so e.g. a missing "tagger" line is an error).
+
+Extra headers in the object are also an error under mktag, but ignored
+by linkgit:git-fsck[1]. This extra check can be turned off by setting
+the appropriate `fsck.<msg-id>` varible:
+
+ git -c fsck.extraHeaderEntry=ignore mktag <my-tag-with-headers
Tag Format
----------
A tag signature file, to be fed to this command's standard input,
has a very simple fixed format: four lines of
- object <sha1>
+ object <hash>
type <typename>
tag <tagname>
tagger <tagger>
followed by some 'optional' free-form message (some tags created
-by older Git may not have `tagger` line). The message, when
+by older Git may not have `tagger` line). The message, when it
exists, is separated by a blank line from the header. The
message part may contain a signature that Git itself doesn't
care about, but that can be verified with gpg.
diff --git a/Documentation/git-pack-objects.txt b/Documentation/git-pack-objects.txt
index 54d715e..f85cb7e 100644
--- a/Documentation/git-pack-objects.txt
+++ b/Documentation/git-pack-objects.txt
@@ -400,6 +400,17 @@
one wins" ordering (which allows repo-specific config to take precedence
over user-wide config, and so forth).
+
+CONFIGURATION
+-------------
+
+Various configuration variables affect packing, see
+linkgit:git-config[1] (search for "pack" and "delta").
+
+Notably, delta compression is not used on objects larger than the
+`core.bigFileThreshold` configuration variable and on files with the
+attribute `delta` set to false.
+
SEE ALSO
--------
linkgit:git-rev-list[1]
diff --git a/Documentation/git-range-diff.txt b/Documentation/git-range-diff.txt
index 9701c1e..fe350d7 100644
--- a/Documentation/git-range-diff.txt
+++ b/Documentation/git-range-diff.txt
@@ -10,6 +10,7 @@
[verse]
'git range-diff' [--color=[<when>]] [--no-color] [<diff-options>]
[--no-dual-color] [--creation-factor=<factor>]
+ [--left-only | --right-only]
( <range1> <range2> | <rev1>...<rev2> | <base> <rev1> <rev2> )
DESCRIPTION
@@ -28,6 +29,17 @@
second commit range, with unmatched commits being inserted just after
all of their ancestors have been shown.
+There are three ways to specify the commit ranges:
+
+- `<range1> <range2>`: Either commit range can be of the form
+ `<base>..<rev>`, `<rev>^!` or `<rev>^-<n>`. See `SPECIFYING RANGES`
+ in linkgit:gitrevisions[7] for more details.
+
+- `<rev1>...<rev2>`. This is equivalent to
+ `<rev2>..<rev1> <rev1>..<rev2>`.
+
+- `<base> <rev1> <rev2>`: This is equivalent to `<base>..<rev1>
+ <base>..<rev2>`.
OPTIONS
-------
@@ -57,6 +69,14 @@
See the ``Algorithm`` section below for an explanation why this is
needed.
+--left-only::
+ Suppress commits that are missing from the first specified range
+ (or the "left range" when using the `<rev1>...<rev2>` format).
+
+--right-only::
+ Suppress commits that are missing from the second specified range
+ (or the "right range" when using the `<rev1>...<rev2>` format).
+
--[no-]notes[=<ref>]::
This flag is passed to the `git log` program
(see linkgit:git-log[1]) that generates the patches.
diff --git a/Documentation/git-repack.txt b/Documentation/git-repack.txt
index 92f146d..fbd4b4a 100644
--- a/Documentation/git-repack.txt
+++ b/Documentation/git-repack.txt
@@ -165,9 +165,12 @@
Pass the `--delta-islands` option to `git-pack-objects`, see
linkgit:git-pack-objects[1].
-Configuration
+CONFIGURATION
-------------
+Various configuration variables affect packing, see
+linkgit:git-config[1] (search for "pack" and "delta").
+
By default, the command passes `--delta-base-offset` option to
'git pack-objects'; this typically results in slightly smaller packs,
but the generated packs are incompatible with versions of Git older than
@@ -178,6 +181,10 @@
is unaffected by this option as the conversion is performed on the fly
as needed in that case.
+Delta compression is not used on objects larger than the
+`core.bigFileThreshold` configuration variable and on files with the
+attribute `delta` set to false.
+
SEE ALSO
--------
linkgit:git-pack-objects[1]
diff --git a/Documentation/git-rev-list.txt b/Documentation/git-rev-list.txt
index 5da6623..20bb8e8 100644
--- a/Documentation/git-rev-list.txt
+++ b/Documentation/git-rev-list.txt
@@ -31,6 +31,99 @@
include::pretty-formats.txt[]
+EXAMPLES
+--------
+
+* Print the list of commits reachable from the current branch.
++
+----------
+git rev-list HEAD
+----------
+
+* Print the list of commits on this branch, but not present in the
+ upstream branch.
++
+----------
+git rev-list @{upstream}..HEAD
+----------
+
+* Format commits with their author and commit message (see also the
+ porcelain linkgit:git-log[1]).
++
+----------
+git rev-list --format=medium HEAD
+----------
+
+* Format commits along with their diffs (see also the porcelain
+ linkgit:git-log[1], which can do this in a single process).
++
+----------
+git rev-list HEAD |
+git diff-tree --stdin --format=medium -p
+----------
+
+* Print the list of commits on the current branch that touched any
+ file in the `Documentation` directory.
++
+----------
+git rev-list HEAD -- Documentation/
+----------
+
+* Print the list of commits authored by you in the past year, on
+ any branch, tag, or other ref.
++
+----------
+git rev-list --author=you@example.com --since=1.year.ago --all
+----------
+
+* Print the list of objects reachable from the current branch (i.e., all
+ commits and the blobs and trees they contain).
++
+----------
+git rev-list --objects HEAD
+----------
+
+* Compare the disk size of all reachable objects, versus those
+ reachable from reflogs, versus the total packed size. This can tell
+ you whether running `git repack -ad` might reduce the repository size
+ (by dropping unreachable objects), and whether expiring reflogs might
+ help.
++
+----------
+# reachable objects
+git rev-list --disk-usage --objects --all
+# plus reflogs
+git rev-list --disk-usage --objects --all --reflog
+# total disk size used
+du -c .git/objects/pack/*.pack .git/objects/??/*
+# alternative to du: add up "size" and "size-pack" fields
+git count-objects -v
+----------
+
+* Report the disk size of each branch, not including objects used by the
+ current branch. This can find outliers that are contributing to a
+ bloated repository size (e.g., because somebody accidentally committed
+ large build artifacts).
++
+----------
+git for-each-ref --format='%(refname)' |
+while read branch
+do
+ size=$(git rev-list --disk-usage --objects HEAD..$branch)
+ echo "$size $branch"
+done |
+sort -n
+----------
+
+* Compare the on-disk size of branches in one group of refs, excluding
+ another. If you co-mingle objects from multiple remotes in a single
+ repository, this can show which remotes are contributing to the
+ repository size (taking the size of `origin` as a baseline).
++
+----------
+git rev-list --disk-usage --objects --remotes=$suspect --not --remotes=origin
+----------
+
GIT
---
Part of the linkgit:git[1] suite
diff --git a/Documentation/git-rev-parse.txt b/Documentation/git-rev-parse.txt
index 5013daa..6b8ca08 100644
--- a/Documentation/git-rev-parse.txt
+++ b/Documentation/git-rev-parse.txt
@@ -212,6 +212,18 @@
Only the names of the variables are listed, not their value,
even if they are set.
+--path-format=(absolute|relative)::
+ Controls the behavior of certain other options. If specified as absolute, the
+ paths printed by those options will be absolute and canonical. If specified as
+ relative, the paths will be relative to the current working directory if that
+ is possible. The default is option specific.
++
+This option may be specified multiple times and affects only the arguments that
+follow it on the command line, either to the end of the command line or the next
+instance of this option.
+
+The following options are modified by `--path-format`:
+
--git-dir::
Show `$GIT_DIR` if defined. Otherwise show the path to
the .git directory. The path shown, when relative, is
@@ -221,13 +233,42 @@
is not detected to lie in a Git repository or work tree
print a message to stderr and exit with nonzero status.
+--git-common-dir::
+ Show `$GIT_COMMON_DIR` if defined, else `$GIT_DIR`.
+
+--resolve-git-dir <path>::
+ Check if <path> is a valid repository or a gitfile that
+ points at a valid repository, and print the location of the
+ repository. If <path> is a gitfile then the resolved path
+ to the real repository is printed.
+
+--git-path <path>::
+ Resolve "$GIT_DIR/<path>" and takes other path relocation
+ variables such as $GIT_OBJECT_DIRECTORY,
+ $GIT_INDEX_FILE... into account. For example, if
+ $GIT_OBJECT_DIRECTORY is set to /foo/bar then "git rev-parse
+ --git-path objects/abc" returns /foo/bar/abc.
+
+--show-toplevel::
+ Show the (by default, absolute) path of the top-level directory
+ of the working tree. If there is no working tree, report an error.
+
+--show-superproject-working-tree::
+ Show the absolute path of the root of the superproject's
+ working tree (if exists) that uses the current repository as
+ its submodule. Outputs nothing if the current repository is
+ not used as a submodule by any project.
+
+--shared-index-path::
+ Show the path to the shared index file in split index mode, or
+ empty if not in split-index mode.
+
+The following options are unaffected by `--path-format`:
+
--absolute-git-dir::
Like `--git-dir`, but its output is always the canonicalized
absolute path.
---git-common-dir::
- Show `$GIT_COMMON_DIR` if defined, else `$GIT_DIR`.
-
--is-inside-git-dir::
When the current working directory is below the repository
directory print "true", otherwise "false".
@@ -242,19 +283,6 @@
--is-shallow-repository::
When the repository is shallow print "true", otherwise "false".
---resolve-git-dir <path>::
- Check if <path> is a valid repository or a gitfile that
- points at a valid repository, and print the location of the
- repository. If <path> is a gitfile then the resolved path
- to the real repository is printed.
-
---git-path <path>::
- Resolve "$GIT_DIR/<path>" and takes other path relocation
- variables such as $GIT_OBJECT_DIRECTORY,
- $GIT_INDEX_FILE... into account. For example, if
- $GIT_OBJECT_DIRECTORY is set to /foo/bar then "git rev-parse
- --git-path objects/abc" returns /foo/bar/abc.
-
--show-cdup::
When the command is invoked from a subdirectory, show the
path of the top-level directory relative to the current
@@ -265,20 +293,6 @@
path of the current directory relative to the top-level
directory.
---show-toplevel::
- Show the absolute path of the top-level directory of the working
- tree. If there is no working tree, report an error.
-
---show-superproject-working-tree::
- Show the absolute path of the root of the superproject's
- working tree (if exists) that uses the current repository as
- its submodule. Outputs nothing if the current repository is
- not used as a submodule by any project.
-
---shared-index-path::
- Show the path to the shared index file in split index mode, or
- empty if not in split-index mode.
-
--show-object-format[=(storage|input|output)]::
Show the object format (hash algorithm) used for the repository
for storage inside the `.git` directory, input, or output. For
diff --git a/Documentation/git-shortlog.txt b/Documentation/git-shortlog.txt
index fd93cd4..c9c7f30 100644
--- a/Documentation/git-shortlog.txt
+++ b/Documentation/git-shortlog.txt
@@ -111,11 +111,11 @@
MAPPING AUTHORS
---------------
-The `.mailmap` feature is used to coalesce together commits by the same
-person in the shortlog, where their name and/or email address was
-spelled differently.
+See linkgit:gitmailmap[5].
-include::mailmap.txt[]
+Note that if `git shortlog` is run outside of a repository (to process
+log contents on standard input), it will look for a `.mailmap` file in
+the current directory.
GIT
---
diff --git a/Documentation/git-show.txt b/Documentation/git-show.txt
index fcf528c..2b1bc72 100644
--- a/Documentation/git-show.txt
+++ b/Documentation/git-show.txt
@@ -45,10 +45,13 @@
include::pretty-formats.txt[]
-COMMON DIFF OPTIONS
--------------------
+DIFF FORMATTING
+---------------
+The options below can be used to change the way `git show` generates
+diff output.
:git-log: 1
+:diff-merges-default: `dense-combined`
include::diff-options.txt[]
include::diff-generate-patch.txt[]
diff --git a/Documentation/git-stash.txt b/Documentation/git-stash.txt
index 31f1beb..f1197d6 100644
--- a/Documentation/git-stash.txt
+++ b/Documentation/git-stash.txt
@@ -8,8 +8,8 @@
SYNOPSIS
--------
[verse]
-'git stash' list [<options>]
-'git stash' show [<options>] [<stash>]
+'git stash' list [<log-options>]
+'git stash' show [<diff-options>] [<stash>]
'git stash' drop [-q|--quiet] [<stash>]
'git stash' ( pop | apply ) [--index] [-q|--quiet] [<stash>]
'git stash' branch <branchname> [<stash>]
@@ -67,7 +67,7 @@
Instead, all non-option arguments are concatenated to form the stash
message.
-list [<options>]::
+list [<log-options>]::
List the stash entries that you currently have. Each 'stash entry' is
listed with its name (e.g. `stash@{0}` is the latest entry, `stash@{1}` is
@@ -83,7 +83,7 @@
The command takes options applicable to the 'git log'
command to control what is shown and how. See linkgit:git-log[1].
-show [<options>] [<stash>]::
+show [<diff-options>] [<stash>]::
Show the changes recorded in the stash entry as a diff between the
stashed contents and the commit back when the stash entry was first
diff --git a/Documentation/git-status.txt b/Documentation/git-status.txt
index c0764e8..83f38e3 100644
--- a/Documentation/git-status.txt
+++ b/Documentation/git-status.txt
@@ -130,7 +130,7 @@
--column[=<options>]::
--no-column::
Display untracked files in columns. See configuration variable
- column.status for option syntax.`--column` and `--no-column`
+ `column.status` for option syntax. `--column` and `--no-column`
without options are equivalent to 'always' and 'never'
respectively.
diff --git a/Documentation/git-tag.txt b/Documentation/git-tag.txt
index 56656d1..31a97a1 100644
--- a/Documentation/git-tag.txt
+++ b/Documentation/git-tag.txt
@@ -134,7 +134,7 @@
--column[=<options>]::
--no-column::
Display tag listing in columns. See configuration variable
- column.tag for option syntax.`--column` and `--no-column`
+ `column.tag` for option syntax. `--column` and `--no-column`
without options are equivalent to 'always' and 'never' respectively.
+
This option is only applicable when listing tags without annotation lines.
diff --git a/Documentation/git-worktree.txt b/Documentation/git-worktree.txt
index af06128..f1bb1fa 100644
--- a/Documentation/git-worktree.txt
+++ b/Documentation/git-worktree.txt
@@ -97,8 +97,9 @@
List details of each working tree. The main working tree is listed first,
followed by each of the linked working trees. The output details include
whether the working tree is bare, the revision currently checked out, the
-branch currently checked out (or "detached HEAD" if none), and "locked" if
-the worktree is locked.
+branch currently checked out (or "detached HEAD" if none), "locked" if
+the worktree is locked, "prunable" if the worktree can be pruned by `prune`
+command.
lock::
@@ -143,6 +144,11 @@
reestablish the connection. If multiple linked working trees are moved,
running `repair` from any working tree with each tree's new `<path>` as
an argument, will reestablish the connection to all the specified paths.
++
+If both the main working tree and linked working trees have been moved
+manually, then running `repair` in the main working tree and specifying the
+new `<path>` of each linked working tree will reestablish all connections
+in both directions.
unlock::
@@ -226,9 +232,14 @@
-v::
--verbose::
With `prune`, report all removals.
++
+With `list`, output additional information about worktrees (see below).
--expire <time>::
With `prune`, only expire unused working trees older than `<time>`.
++
+With `list`, annotate missing working trees as prunable if they are
+older than `<time>`.
--reason <string>::
With `lock`, an explanation why the working tree is locked.
@@ -367,13 +378,46 @@
/path/to/other-linked-worktree 1234abc (detached HEAD)
------------
+The command also shows annotations for each working tree, according to its state.
+These annotations are:
+
+ * `locked`, if the working tree is locked.
+ * `prunable`, if the working tree can be pruned via `git worktree prune`.
+
+------------
+$ git worktree list
+/path/to/linked-worktree abcd1234 [master]
+/path/to/locked-worktreee acbd5678 (brancha) locked
+/path/to/prunable-worktree 5678abc (detached HEAD) prunable
+------------
+
+For these annotations, a reason might also be available and this can be
+seen using the verbose mode. The annotation is then moved to the next line
+indented followed by the additional information.
+
+------------
+$ git worktree list --verbose
+/path/to/linked-worktree abcd1234 [master]
+/path/to/locked-worktree-no-reason abcd5678 (detached HEAD) locked
+/path/to/locked-worktree-with-reason 1234abcd (brancha)
+ locked: working tree path is mounted on a portable device
+/path/to/prunable-worktree 5678abc1 (detached HEAD)
+ prunable: gitdir file points to non-existent location
+------------
+
+Note that the annotation is moved to the next line if the additional
+information is available, otherwise it stays on the same line as the
+working tree itself.
+
Porcelain Format
~~~~~~~~~~~~~~~~
The porcelain format has a line per attribute. Attributes are listed with a
label and value separated by a single space. Boolean attributes (like `bare`
and `detached`) are listed as a label only, and are present only
-if the value is true. The first attribute of a working tree is always
-`worktree`, an empty line indicates the end of the record. For example:
+if the value is true. Some attributes (like `locked`) can be listed as a label
+only or with a value depending upon whether a reason is available. The first
+attribute of a working tree is always `worktree`, an empty line indicates the
+end of the record. For example:
------------
$ git worktree list --porcelain
@@ -388,6 +432,33 @@
HEAD 1234abc1234abc1234abc1234abc1234abc1234a
detached
+worktree /path/to/linked-worktree-locked-no-reason
+HEAD 5678abc5678abc5678abc5678abc5678abc5678c
+branch refs/heads/locked-no-reason
+locked
+
+worktree /path/to/linked-worktree-locked-with-reason
+HEAD 3456def3456def3456def3456def3456def3456b
+branch refs/heads/locked-with-reason
+locked reason why is locked
+
+worktree /path/to/linked-worktree-prunable
+HEAD 1233def1234def1234def1234def1234def1234b
+detached
+prunable gitdir file points to non-existent location
+
+------------
+
+If the lock reason contains "unusual" characters such as newline, they
+are escaped and the entire reason is quoted as explained for the
+configuration variable `core.quotePath` (see linkgit:git-config[1]).
+For Example:
+
+------------
+$ git worktree list --porcelain
+...
+locked "reason\nwhy is locked"
+...
------------
EXAMPLES
diff --git a/Documentation/git.txt b/Documentation/git.txt
index a6d4ad0..3a9c449 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
@@ -13,7 +13,7 @@
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p|--paginate|-P|--no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
- [--super-prefix=<path>]
+ [--super-prefix=<path>] [--config-env <name>=<envvar>]
<command> [<args>]
DESCRIPTION
@@ -80,6 +80,28 @@
foo.bar= ...`) sets `foo.bar` to the empty string which `git config
--type=bool` will convert to `false`.
+--config-env=<name>=<envvar>::
+ Like `-c <name>=<value>`, give configuration variable
+ '<name>' a value, where <envvar> is the name of an
+ environment variable from which to retrieve the value. Unlike
+ `-c` there is no shortcut for directly setting the value to an
+ empty string, instead the environment variable itself must be
+ set to the empty string. It is an error if the `<envvar>` does not exist
+ in the environment. `<envvar>` may not contain an equals sign
+ to avoid ambiguity with `<name>` containing one.
++
+This is useful for cases where you want to pass transitory
+configuration options to git, but are doing so on OS's where
+other processes might be able to read your cmdline
+(e.g. `/proc/self/cmdline`), but not your environ
+(e.g. `/proc/self/environ`). That behavior is the default on
+Linux, but may not be on your system.
++
+Note that this might add security for variables such as
+`http.extraHeader` where the sensitive information is part of
+the value, but not e.g. `url.<base>.insteadOf` where the
+sensitive information can be part of the key.
+
--exec-path[=<path>]::
Path to wherever your core Git programs are installed.
This can also be controlled by setting the GIT_EXEC_PATH
diff --git a/Documentation/gitdiffcore.txt b/Documentation/gitdiffcore.txt
index c970d9f..1c72696 100644
--- a/Documentation/gitdiffcore.txt
+++ b/Documentation/gitdiffcore.txt
@@ -74,6 +74,7 @@
- diffcore-merge-broken
- diffcore-pickaxe
- diffcore-order
+- diffcore-rotate
These are applied in sequence. The set of filepairs 'git diff-{asterisk}'
commands find are used as the input to diffcore-break, and
@@ -168,6 +169,26 @@
number after the "-M" or "-C" option (e.g. "-M8" to tell it to use
8/10 = 80%).
+Note that when rename detection is on but both copy and break
+detection are off, rename detection adds a preliminary step that first
+checks if files are moved across directories while keeping their
+filename the same. If there is a file added to a directory whose
+contents is sufficiently similar to a file with the same name that got
+deleted from a different directory, it will mark them as renames and
+exclude them from the later quadratic step (the one that pairwise
+compares all unmatched files to find the "best" matches, determined by
+the highest content similarity). So, for example, if a deleted
+docs/ext.txt and an added docs/config/ext.txt are similar enough, they
+will be marked as a rename and prevent an added docs/ext.md that may
+be even more similar to the deleted docs/ext.txt from being considered
+as the rename destination in the later step. For this reason, the
+preliminary "match same filename" step uses a bit higher threshold to
+mark a file pair as a rename and stop considering other candidates for
+better matches. At most, one comparison is done per file in this
+preliminary pass; so if there are several remaining ext.txt files
+throughout the directory hierarchy after exact rename detection, this
+preliminary step will be skipped for those files.
+
Note. When the "-C" option is used with `--find-copies-harder`
option, 'git diff-{asterisk}' commands feed unmodified filepairs to
diffcore mechanism as well as modified ones. This lets the copy
@@ -276,6 +297,26 @@
t
------------------------------------------------
+diffcore-rotate: For Changing At Which Path Output Starts
+---------------------------------------------------------
+
+This transformation takes one pathname, and rotates the set of
+filepairs so that the filepair for the given pathname comes first,
+optionally discarding the paths that come before it. This is used
+to implement the `--skip-to` and the `--rotate-to` options. It is
+an error when the specified pathname is not in the set of filepairs,
+but it is not useful to error out when used with "git log" family of
+commands, because it is unreasonable to expect that a given path
+would be modified by each and every commit shown by the "git log"
+command. For this reason, when used with "git log", the filepair
+that sorts the same as, or the first one that sorts after, the given
+pathname is where the output starts.
+
+Use of this transformation combined with diffcore-order will produce
+unexpected results, as the input to this transformation is likely
+not sorted when diffcore-order is in effect.
+
+
SEE ALSO
--------
linkgit:git-diff[1],
diff --git a/Documentation/gitmailmap.txt b/Documentation/gitmailmap.txt
new file mode 100644
index 0000000..3fb39f8
--- /dev/null
+++ b/Documentation/gitmailmap.txt
@@ -0,0 +1,123 @@
+gitmailmap(5)
+=============
+
+NAME
+----
+gitmailmap - Map author/committer names and/or E-Mail addresses
+
+SYNOPSIS
+--------
+$GIT_WORK_TREE/.mailmap
+
+
+DESCRIPTION
+-----------
+
+If the file `.mailmap` exists at the toplevel of the repository, or at
+the location pointed to by the `mailmap.file` or `mailmap.blob`
+configuration options (see linkgit:git-config[1]), it
+is used to map author and committer names and email addresses to
+canonical real names and email addresses.
+
+
+SYNTAX
+------
+
+The '#' character begins a comment to the end of line, blank lines
+are ignored.
+
+In the simple form, each line in the file consists of the canonical
+real name of an author, whitespace, and an email address used in the
+commit (enclosed by '<' and '>') to map to the name. For example:
+--
+ Proper Name <commit@email.xx>
+--
+
+The more complex forms are:
+--
+ <proper@email.xx> <commit@email.xx>
+--
+which allows mailmap to replace only the email part of a commit, and:
+--
+ Proper Name <proper@email.xx> <commit@email.xx>
+--
+which allows mailmap to replace both the name and the email of a
+commit matching the specified commit email address, and:
+--
+ Proper Name <proper@email.xx> Commit Name <commit@email.xx>
+--
+which allows mailmap to replace both the name and the email of a
+commit matching both the specified commit name and email address.
+
+Both E-Mails and names are matched case-insensitively. For example
+this would also match the 'Commit Name <commit@email.xx>' above:
+--
+ Proper Name <proper@email.xx> CoMmIt NaMe <CoMmIt@EmAiL.xX>
+--
+
+EXAMPLES
+--------
+
+Your history contains commits by two authors, Jane
+and Joe, whose names appear in the repository under several forms:
+
+------------
+Joe Developer <joe@example.com>
+Joe R. Developer <joe@example.com>
+Jane Doe <jane@example.com>
+Jane Doe <jane@laptop.(none)>
+Jane D. <jane@desktop.(none)>
+------------
+
+Now suppose that Joe wants his middle name initial used, and Jane
+prefers her family name fully spelled out. A `.mailmap` file to
+correct the names would look like:
+
+------------
+Joe R. Developer <joe@example.com>
+Jane Doe <jane@example.com>
+Jane Doe <jane@desktop.(none)>
+------------
+
+Note that there's no need to map the name for '<jane@laptop.(none)>' to
+only correct the names. However, leaving the obviously broken
+'<jane@laptop.(none)>' and '<jane@desktop.(none)>' E-Mails as-is is
+usually not what you want. A `.mailmap` file which also corrects those
+is:
+
+------------
+Joe R. Developer <joe@example.com>
+Jane Doe <jane@example.com> <jane@laptop.(none)>
+Jane Doe <jane@example.com> <jane@desktop.(none)>
+------------
+
+Finally, let's say that Joe and Jane shared an E-Mail address, but not
+a name, e.g. by having these two commits in the history generated by a
+bug reporting system. I.e. names appearing in history as:
+
+------------
+Joe <bugs@example.com>
+Jane <bugs@example.com>
+------------
+
+A full `.mailmap` file which also handles those cases (an addition of
+two lines to the above example) would be:
+
+------------
+Joe R. Developer <joe@example.com>
+Jane Doe <jane@example.com> <jane@laptop.(none)>
+Jane Doe <jane@example.com> <jane@desktop.(none)>
+Joe R. Developer <joe@example.com> Joe <bugs@example.com>
+Jane Doe <jane@example.com> Jane <bugs@example.com>
+------------
+
+
+
+SEE ALSO
+--------
+linkgit:git-check-mailmap[1]
+
+
+GIT
+---
+Part of the linkgit:git[1] suite
diff --git a/Documentation/i18n.txt b/Documentation/i18n.txt
index 7e36e5b..6c6baee 100644
--- a/Documentation/i18n.txt
+++ b/Documentation/i18n.txt
@@ -38,7 +38,7 @@
a warning if the commit log message given to it does not look
like a valid UTF-8 string, unless you explicitly say your
project uses a legacy encoding. The way to say this is to
- have i18n.commitencoding in `.git/config` file, like this:
+ have `i18n.commitEncoding` in `.git/config` file, like this:
+
------------
[i18n]
diff --git a/Documentation/mailmap.txt b/Documentation/mailmap.txt
deleted file mode 100644
index 4a8c276..0000000
--- a/Documentation/mailmap.txt
+++ /dev/null
@@ -1,75 +0,0 @@
-If the file `.mailmap` exists at the toplevel of the repository, or at
-the location pointed to by the mailmap.file or mailmap.blob
-configuration options, it
-is used to map author and committer names and email addresses to
-canonical real names and email addresses.
-
-In the simple form, each line in the file consists of the canonical
-real name of an author, whitespace, and an email address used in the
-commit (enclosed by '<' and '>') to map to the name. For example:
---
- Proper Name <commit@email.xx>
---
-
-The more complex forms are:
---
- <proper@email.xx> <commit@email.xx>
---
-which allows mailmap to replace only the email part of a commit, and:
---
- Proper Name <proper@email.xx> <commit@email.xx>
---
-which allows mailmap to replace both the name and the email of a
-commit matching the specified commit email address, and:
---
- Proper Name <proper@email.xx> Commit Name <commit@email.xx>
---
-which allows mailmap to replace both the name and the email of a
-commit matching both the specified commit name and email address.
-
-Example 1: Your history contains commits by two authors, Jane
-and Joe, whose names appear in the repository under several forms:
-
-------------
-Joe Developer <joe@example.com>
-Joe R. Developer <joe@example.com>
-Jane Doe <jane@example.com>
-Jane Doe <jane@laptop.(none)>
-Jane D. <jane@desktop.(none)>
-------------
-
-Now suppose that Joe wants his middle name initial used, and Jane
-prefers her family name fully spelled out. A proper `.mailmap` file
-would look like:
-
-------------
-Jane Doe <jane@desktop.(none)>
-Joe R. Developer <joe@example.com>
-------------
-
-Note how there is no need for an entry for `<jane@laptop.(none)>`, because the
-real name of that author is already correct.
-
-Example 2: Your repository contains commits from the following
-authors:
-
-------------
-nick1 <bugs@company.xx>
-nick2 <bugs@company.xx>
-nick2 <nick2@company.xx>
-santa <me@company.xx>
-claus <me@company.xx>
-CTO <cto@coompany.xx>
-------------
-
-Then you might want a `.mailmap` file that looks like:
-------------
-<cto@company.xx> <cto@coompany.xx>
-Some Dude <some@dude.xx> nick1 <bugs@company.xx>
-Other Author <other@author.xx> nick2 <bugs@company.xx>
-Other Author <other@author.xx> <nick2@company.xx>
-Santa Claus <santa.claus@northpole.xx> <me@company.xx>
-------------
-
-Use hash '#' for comments that are either on their own line, or after
-the email address.
diff --git a/Documentation/pretty-formats.txt b/Documentation/pretty-formats.txt
index 84bbc74..6b59e28 100644
--- a/Documentation/pretty-formats.txt
+++ b/Documentation/pretty-formats.txt
@@ -252,7 +252,15 @@
interpreted by
linkgit:git-interpret-trailers[1]. The
`trailers` string may be followed by a colon
- and zero or more comma-separated options:
+ and zero or more comma-separated options.
+ If any option is provided multiple times the
+ last occurance wins.
++
+The boolean options accept an optional value `[=<BOOL>]`. The values
+`true`, `false`, `on`, `off` etc. are all accepted. See the "boolean"
+sub-section in "EXAMPLES" in linkgit:git-config[1]. If a boolean
+option is given with no value, it's enabled.
++
** 'key=<K>': only show trailers with specified key. Matching is done
case-insensitively and trailing colon is optional. If option is
given multiple times trailer lines matching any of the keys are
@@ -261,27 +269,25 @@
desired it can be disabled with `only=false`. E.g.,
`%(trailers:key=Reviewed-by)` shows trailer lines with key
`Reviewed-by`.
-** 'only[=val]': select whether non-trailer lines from the trailer
- block should be included. The `only` keyword may optionally be
- followed by an equal sign and one of `true`, `on`, `yes` to omit or
- `false`, `off`, `no` to show the non-trailer lines. If option is
- given without value it is enabled. If given multiple times the last
- value is used.
+** 'only[=<BOOL>]': select whether non-trailer lines from the trailer
+ block should be included.
** 'separator=<SEP>': specify a separator inserted between trailer
lines. When this option is not given each trailer line is
terminated with a line feed character. The string SEP may contain
the literal formatting codes described above. To use comma as
separator one must use `%x2C` as it would otherwise be parsed as
- next option. If separator option is given multiple times only the
- last one is used. E.g., `%(trailers:key=Ticket,separator=%x2C )`
+ next option. E.g., `%(trailers:key=Ticket,separator=%x2C )`
shows all trailer lines whose key is "Ticket" separated by a comma
and a space.
-** 'unfold[=val]': make it behave as if interpret-trailer's `--unfold`
- option was given. In same way as to for `only` it can be followed
- by an equal sign and explicit value. E.g.,
+** 'unfold[=<BOOL>]': make it behave as if interpret-trailer's `--unfold`
+ option was given. E.g.,
`%(trailers:only,unfold=true)` unfolds and shows all trailer lines.
-** 'valueonly[=val]': skip over the key part of the trailer line and only
- show the value part. Also this optionally allows explicit value.
+** 'keyonly[=<BOOL>]': only show the key part of the trailer.
+** 'valueonly[=<BOOL>]': only show the value part of the trailer.
+** 'key_value_separator=<SEP>': specify a separator inserted between
+ trailer lines. When this option is not given each trailer key-value
+ pair is separated by ": ". Otherwise it shares the same semantics
+ as 'separator=<SEP>' above.
NOTE: Some placeholders may depend on other options given to the
revision traversal engine. For example, the `%g*` reflog options will
diff --git a/Documentation/rev-list-options.txt b/Documentation/rev-list-options.txt
index 0023790..b1c8f86 100644
--- a/Documentation/rev-list-options.txt
+++ b/Documentation/rev-list-options.txt
@@ -129,6 +129,11 @@
adjusting to updated upstream from time to time, and
this option allows you to ignore the individual commits
brought in to your history by such a merge.
+ifdef::git-log[]
++
+This option also changes default diff format for merge commits
+to `first-parent`, see `--diff-merges=first-parent` for details.
+endif::git-log[]
--not::
Reverses the meaning of the '{caret}' prefix (or lack thereof)
@@ -222,6 +227,15 @@
test the exit status to see if a range of objects is fully
connected (or not). It is faster than redirecting stdout
to `/dev/null` as the output does not have to be formatted.
+
+--disk-usage::
+ Suppress normal output; instead, print the sum of the bytes used
+ for on-disk storage by the selected commits or objects. This is
+ equivalent to piping the output into `git cat-file
+ --batch-check='%(objectsize:disk)'`, except that it runs much
+ faster (especially with `--use-bitmap-index`). See the `CAVEATS`
+ section in linkgit:git-cat-file[1] for the limitations of what
+ "on-disk storage" means.
endif::git-rev-list[]
--cherry-mark::
diff --git a/Documentation/technical/chunk-format.txt b/Documentation/technical/chunk-format.txt
new file mode 100644
index 0000000..593614f
--- /dev/null
+++ b/Documentation/technical/chunk-format.txt
@@ -0,0 +1,116 @@
+Chunk-based file formats
+========================
+
+Some file formats in Git use a common concept of "chunks" to describe
+sections of the file. This allows structured access to a large file by
+scanning a small "table of contents" for the remaining data. This common
+format is used by the `commit-graph` and `multi-pack-index` files. See
+link:technical/pack-format.html[the `multi-pack-index` format] and
+link:technical/commit-graph-format.html[the `commit-graph` format] for
+how they use the chunks to describe structured data.
+
+A chunk-based file format begins with some header information custom to
+that format. That header should include enough information to identify
+the file type, format version, and number of chunks in the file. From this
+information, that file can determine the start of the chunk-based region.
+
+The chunk-based region starts with a table of contents describing where
+each chunk starts and ends. This consists of (C+1) rows of 12 bytes each,
+where C is the number of chunks. Consider the following table:
+
+ | Chunk ID (4 bytes) | Chunk Offset (8 bytes) |
+ |--------------------|------------------------|
+ | ID[0] | OFFSET[0] |
+ | ... | ... |
+ | ID[C] | OFFSET[C] |
+ | 0x0000 | OFFSET[C+1] |
+
+Each row consists of a 4-byte chunk identifier (ID) and an 8-byte offset.
+Each integer is stored in network-byte order.
+
+The chunk identifier `ID[i]` is a label for the data stored within this
+fill from `OFFSET[i]` (inclusive) to `OFFSET[i+1]` (exclusive). Thus, the
+size of the `i`th chunk is equal to the difference between `OFFSET[i+1]`
+and `OFFSET[i]`. This requires that the chunk data appears contiguously
+in the same order as the table of contents.
+
+The final entry in the table of contents must be four zero bytes. This
+confirms that the table of contents is ending and provides the offset for
+the end of the chunk-based data.
+
+Note: The chunk-based format expects that the file contains _at least_ a
+trailing hash after `OFFSET[C+1]`.
+
+Functions for working with chunk-based file formats are declared in
+`chunk-format.h`. Using these methods provide extra checks that assist
+developers when creating new file formats.
+
+Writing chunk-based file formats
+--------------------------------
+
+To write a chunk-based file format, create a `struct chunkfile` by
+calling `init_chunkfile()` and pass a `struct hashfile` pointer. The
+caller is responsible for opening the `hashfile` and writing header
+information so the file format is identifiable before the chunk-based
+format begins.
+
+Then, call `add_chunk()` for each chunk that is intended for write. This
+populates the `chunkfile` with information about the order and size of
+each chunk to write. Provide a `chunk_write_fn` function pointer to
+perform the write of the chunk data upon request.
+
+Call `write_chunkfile()` to write the table of contents to the `hashfile`
+followed by each of the chunks. This will verify that each chunk wrote
+the expected amount of data so the table of contents is correct.
+
+Finally, call `free_chunkfile()` to clear the `struct chunkfile` data. The
+caller is responsible for finalizing the `hashfile` by writing the trailing
+hash and closing the file.
+
+Reading chunk-based file formats
+--------------------------------
+
+To read a chunk-based file format, the file must be opened as a
+memory-mapped region. The chunk-format API expects that the entire file
+is mapped as a contiguous memory region.
+
+Initialize a `struct chunkfile` pointer with `init_chunkfile(NULL)`.
+
+After reading the header information from the beginning of the file,
+including the chunk count, call `read_table_of_contents()` to populate
+the `struct chunkfile` with the list of chunks, their offsets, and their
+sizes.
+
+Extract the data information for each chunk using `pair_chunk()` or
+`read_chunk()`:
+
+* `pair_chunk()` assigns a given pointer with the location inside the
+ memory-mapped file corresponding to that chunk's offset. If the chunk
+ does not exist, then the pointer is not modified.
+
+* `read_chunk()` takes a `chunk_read_fn` function pointer and calls it
+ with the appropriate initial pointer and size information. The function
+ is not called if the chunk does not exist. Use this method to read chunks
+ if you need to perform immediate parsing or if you need to execute logic
+ based on the size of the chunk.
+
+After calling these methods, call `free_chunkfile()` to clear the
+`struct chunkfile` data. This will not close the memory-mapped region.
+Callers are expected to own that data for the timeframe the pointers into
+the region are needed.
+
+Examples
+--------
+
+These file formats use the chunk-format API, and can be used as examples
+for future formats:
+
+* *commit-graph:* see `write_commit_graph_file()` and `parse_commit_graph()`
+ in `commit-graph.c` for how the chunk-format API is used to write and
+ parse the commit-graph file format documented in
+ link:technical/commit-graph-format.html[the commit-graph file format].
+
+* *multi-pack-index:* see `write_midx_internal()` and `load_multi_pack_index()`
+ in `midx.c` for how the chunk-format API is used to write and
+ parse the multi-pack-index file format documented in
+ link:technical/pack-format.html[the multi-pack-index file format].
diff --git a/Documentation/technical/commit-graph-format.txt b/Documentation/technical/commit-graph-format.txt
index b3b5888..87971c2 100644
--- a/Documentation/technical/commit-graph-format.txt
+++ b/Documentation/technical/commit-graph-format.txt
@@ -4,11 +4,7 @@
The Git commit graph stores a list of commit OIDs and some associated
metadata, including:
-- The generation number of the commit. Commits with no parents have
- generation number 1; commits with parents have generation number
- one more than the maximum generation number of its parents. We
- reserve zero as special, and can be used to mark a generation
- number invalid or as "not computed".
+- The generation number of the commit.
- The root tree OID.
@@ -65,6 +61,9 @@
the length using the next chunk position if necessary.) Each chunk
ID appears at most once.
+ The CHUNK LOOKUP matches the table of contents from
+ link:technical/chunk-format.html[the chunk-based file format].
+
The remaining data in the body is described one chunk at a time, and
these chunks may be given in any order. Chunks are required unless
otherwise specified.
@@ -86,13 +85,33 @@
position. If there are more than two parents, the second value
has its most-significant bit on and the other bits store an array
position into the Extra Edge List chunk.
- * The next 8 bytes store the generation number of the commit and
+ * The next 8 bytes store the topological level (generation number v1)
+ of the commit and
the commit time in seconds since EPOCH. The generation number
uses the higher 30 bits of the first 4 bytes, while the commit
time uses the 32 bits of the second 4 bytes, along with the lowest
2 bits of the lowest byte, storing the 33rd and 34th bit of the
commit time.
+ Generation Data (ID: {'G', 'D', 'A', 'T' }) (N * 4 bytes) [Optional]
+ * This list of 4-byte values store corrected commit date offsets for the
+ commits, arranged in the same order as commit data chunk.
+ * If the corrected commit date offset cannot be stored within 31 bits,
+ the value has its most-significant bit on and the other bits store
+ the position of corrected commit date into the Generation Data Overflow
+ chunk.
+ * Generation Data chunk is present only when commit-graph file is written
+ by compatible versions of Git and in case of split commit-graph chains,
+ the topmost layer also has Generation Data chunk.
+
+ Generation Data Overflow (ID: {'G', 'D', 'O', 'V' }) [Optional]
+ * This list of 8-byte values stores the corrected commit date offsets
+ for commits with corrected commit date offsets that cannot be
+ stored within 31 bits.
+ * Generation Data Overflow chunk is present only when Generation Data
+ chunk is present and atleast one corrected commit date offset cannot
+ be stored within 31 bits.
+
Extra Edge List (ID: {'E', 'D', 'G', 'E'}) [Optional]
This list of 4-byte values store the second through nth parents for
all octopus merges. The second parent value in the commit data stores
diff --git a/Documentation/technical/commit-graph.txt b/Documentation/technical/commit-graph.txt
index f14a765..f05e7bd 100644
--- a/Documentation/technical/commit-graph.txt
+++ b/Documentation/technical/commit-graph.txt
@@ -38,14 +38,31 @@
Values 1-4 satisfy the requirements of parse_commit_gently().
-Define the "generation number" of a commit recursively as follows:
+There are two definitions of generation number:
+1. Corrected committer dates (generation number v2)
+2. Topological levels (generation nummber v1)
- * A commit with no parents (a root commit) has generation number one.
+Define "corrected committer date" of a commit recursively as follows:
- * A commit with at least one parent has generation number one more than
- the largest generation number among its parents.
+ * A commit with no parents (a root commit) has corrected committer date
+ equal to its committer date.
-Equivalently, the generation number of a commit A is one more than the
+ * A commit with at least one parent has corrected committer date equal to
+ the maximum of its commiter date and one more than the largest corrected
+ committer date among its parents.
+
+ * As a special case, a root commit with timestamp zero has corrected commit
+ date of 1, to be able to distinguish it from GENERATION_NUMBER_ZERO
+ (that is, an uncomputed corrected commit date).
+
+Define the "topological level" of a commit recursively as follows:
+
+ * A commit with no parents (a root commit) has topological level of one.
+
+ * A commit with at least one parent has topological level one more than
+ the largest topological level among its parents.
+
+Equivalently, the topological level of a commit A is one more than the
length of a longest path from A to a root commit. The recursive definition
is easier to use for computation and observing the following property:
@@ -60,6 +77,9 @@
generation numbers, then we always expand the boundary commit with highest
generation number and can easily detect the stopping condition.
+The property applies to both versions of generation number, that is both
+corrected committer dates and topological levels.
+
This property can be used to significantly reduce the time it takes to
walk commits and determine topological relationships. Without generation
numbers, the general heuristic is the following:
@@ -67,7 +87,9 @@
If A and B are commits with commit time X and Y, respectively, and
X < Y, then A _probably_ cannot reach B.
-This heuristic is currently used whenever the computation is allowed to
+In absence of corrected commit dates (for example, old versions of Git or
+mixed generation graph chains),
+this heuristic is currently used whenever the computation is allowed to
violate topological relationships due to clock skew (such as "git log"
with default order), but is not used when the topological order is
required (such as merge base calculations, "git log --graph").
@@ -77,7 +99,7 @@
generation number and walk until reaching commits with known generation
number.
-We use the macro GENERATION_NUMBER_INFINITY = 0xFFFFFFFF to mark commits not
+We use the macro GENERATION_NUMBER_INFINITY to mark commits not
in the commit-graph file. If a commit-graph file was written by a version
of Git that did not compute generation numbers, then those commits will
have generation number represented by the macro GENERATION_NUMBER_ZERO = 0.
@@ -93,12 +115,12 @@
walking a few extra commits, but the simplicity in dealing with commits
with generation number *_INFINITY or *_ZERO is valuable.
-We use the macro GENERATION_NUMBER_MAX = 0x3FFFFFFF to for commits whose
-generation numbers are computed to be at least this value. We limit at
-this value since it is the largest value that can be stored in the
-commit-graph file using the 30 bits available to generation numbers. This
-presents another case where a commit can have generation number equal to
-that of a parent.
+We use the macro GENERATION_NUMBER_V1_MAX = 0x3FFFFFFF for commits whose
+topological levels (generation number v1) are computed to be at least
+this value. We limit at this value since it is the largest value that
+can be stored in the commit-graph file using the 30 bits available
+to topological levels. This presents another case where a commit can
+have generation number equal to that of a parent.
Design Details
--------------
@@ -267,6 +289,35 @@
number of commits) could be extracted into config settings for full
flexibility.
+## Handling Mixed Generation Number Chains
+
+With the introduction of generation number v2 and generation data chunk, the
+following scenario is possible:
+
+1. "New" Git writes a commit-graph with the corrected commit dates.
+2. "Old" Git writes a split commit-graph on top without corrected commit dates.
+
+A naive approach of using the newest available generation number from
+each layer would lead to violated expectations: the lower layer would
+use corrected commit dates which are much larger than the topological
+levels of the higher layer. For this reason, Git inspects the topmost
+layer to see if the layer is missing corrected commit dates. In such a case
+Git only uses topological level for generation numbers.
+
+When writing a new layer in split commit-graph, we write corrected commit
+dates if the topmost layer has corrected commit dates written. This
+guarantees that if a layer has corrected commit dates, all lower layers
+must have corrected commit dates as well.
+
+When merging layers, we do not consider whether the merged layers had corrected
+commit dates. Instead, the new layer will have corrected commit dates if the
+layer below the new layer has corrected commit dates.
+
+While writing or merging layers, if the new layer is the only layer, it will
+have corrected commit dates when written by compatible versions of Git. Thus,
+rewriting split commit-graph as a single file (`--split=replace`) creates a
+single layer with corrected commit dates.
+
## Deleting graph-{hash} files
After a new tip file is written, some `graph-{hash}` files may no longer
diff --git a/Documentation/technical/hash-function-transition.txt b/Documentation/technical/hash-function-transition.txt
index 6fd20eb..7c1630b 100644
--- a/Documentation/technical/hash-function-transition.txt
+++ b/Documentation/technical/hash-function-transition.txt
@@ -33,16 +33,9 @@
Git v2.13.0 and later subsequently moved to a hardened SHA-1
implementation by default, which isn't vulnerable to the SHAttered
-attack.
+attack, but SHA-1 is still weak.
-Thus Git has in effect already migrated to a new hash that isn't SHA-1
-and doesn't share its vulnerabilities, its new hash function just
-happens to produce exactly the same output for all known inputs,
-except two PDFs published by the SHAttered researchers, and the new
-implementation (written by those researchers) claims to detect future
-cryptanalytic collision attacks.
-
-Regardless, it's considered prudent to move past any variant of SHA-1
+Thus it's considered prudent to move past any variant of SHA-1
to a new hash. There's no guarantee that future attacks on SHA-1 won't
be published in the future, and those attacks may not have viable
mitigations.
@@ -57,6 +50,38 @@
and safe error checking, but other hash functions are equally suitable
that are believed to be cryptographically secure.
+Choice of Hash
+--------------
+The hash to replace the hardened SHA-1 should be stronger than SHA-1
+was: we would like it to be trustworthy and useful in practice for at
+least 10 years.
+
+Some other relevant properties:
+
+1. A 256-bit hash (long enough to match common security practice; not
+ excessively long to hurt performance and disk usage).
+
+2. High quality implementations should be widely available (e.g., in
+ OpenSSL and Apple CommonCrypto).
+
+3. The hash function's properties should match Git's needs (e.g. Git
+ requires collision and 2nd preimage resistance and does not require
+ length extension resistance).
+
+4. As a tiebreaker, the hash should be fast to compute (fortunately
+ many contenders are faster than SHA-1).
+
+There were several contenders for a successor hash to SHA-1, including
+SHA-256, SHA-512/256, SHA-256x16, K12, and BLAKE2bp-256.
+
+In late 2018 the project picked SHA-256 as its successor hash.
+
+See 0ed8d8da374 (doc hash-function-transition: pick SHA-256 as
+NewHash, 2018-08-04) and numerous mailing list threads at the time,
+particularly the one starting at
+https://lore.kernel.org/git/20180609224913.GC38834@genre.crustytoothpaste.net/
+for more information.
+
Goals
-----
1. The transition to SHA-256 can be done one local repository at a time.
@@ -94,7 +119,7 @@
--------
We introduce a new repository format extension. Repositories with this
extension enabled use SHA-256 instead of SHA-1 to name their objects.
-This affects both object names and object content --- both the names
+This affects both object names and object content -- both the names
of objects and all references to other objects within an object are
switched to the new hash function.
@@ -107,7 +132,7 @@
interchangeably.
"git cat-file" and "git hash-object" gain options to display an object
-in its sha1 form and write an object given its sha1 form. This
+in its SHA-1 form and write an object given its SHA-1 form. This
requires all objects referenced by that object to be present in the
object database so that they can be named using the appropriate name
(using the bidirectional hash mapping).
@@ -115,7 +140,7 @@
Fetches from a SHA-1 based server convert the fetched objects into
SHA-256 form and record the mapping in the bidirectional mapping table
(see below for details). Pushes to a SHA-1 based server convert the
-objects being pushed into sha1 form so the server does not have to be
+objects being pushed into SHA-1 form so the server does not have to be
aware of the hash function the client is using.
Detailed Design
@@ -151,38 +176,38 @@
Object names
~~~~~~~~~~~~
-Objects can be named by their 40 hexadecimal digit sha1-name or 64
-hexadecimal digit sha256-name, plus names derived from those (see
+Objects can be named by their 40 hexadecimal digit SHA-1 name or 64
+hexadecimal digit SHA-256 name, plus names derived from those (see
gitrevisions(7)).
-The sha1-name of an object is the SHA-1 of the concatenation of its
-type, length, a nul byte, and the object's sha1-content. This is the
+The SHA-1 name of an object is the SHA-1 of the concatenation of its
+type, length, a nul byte, and the object's SHA-1 content. This is the
traditional <sha1> used in Git to name objects.
-The sha256-name of an object is the SHA-256 of the concatenation of its
-type, length, a nul byte, and the object's sha256-content.
+The SHA-256 name of an object is the SHA-256 of the concatenation of its
+type, length, a nul byte, and the object's SHA-256 content.
Object format
~~~~~~~~~~~~~
The content as a byte sequence of a tag, commit, or tree object named
-by sha1 and sha256 differ because an object named by sha256-name refers to
-other objects by their sha256-names and an object named by sha1-name
-refers to other objects by their sha1-names.
+by SHA-1 and SHA-256 differ because an object named by SHA-256 name refers to
+other objects by their SHA-256 names and an object named by SHA-1 name
+refers to other objects by their SHA-1 names.
-The sha256-content of an object is the same as its sha1-content, except
-that objects referenced by the object are named using their sha256-names
-instead of sha1-names. Because a blob object does not refer to any
-other object, its sha1-content and sha256-content are the same.
+The SHA-256 content of an object is the same as its SHA-1 content, except
+that objects referenced by the object are named using their SHA-256 names
+instead of SHA-1 names. Because a blob object does not refer to any
+other object, its SHA-1 content and SHA-256 content are the same.
-The format allows round-trip conversion between sha256-content and
-sha1-content.
+The format allows round-trip conversion between SHA-256 content and
+SHA-1 content.
Object storage
~~~~~~~~~~~~~~
Loose objects use zlib compression and packed objects use the packed
format described in Documentation/technical/pack-format.txt, just like
-today. The content that is compressed and stored uses sha256-content
-instead of sha1-content.
+today. The content that is compressed and stored uses SHA-256 content
+instead of SHA-1 content.
Pack index
~~~~~~~~~~
@@ -191,21 +216,21 @@
network byte order):
- A header appears at the beginning and consists of the following:
- - The 4-byte pack index signature: '\377t0c'
- - 4-byte version number: 3
- - 4-byte length of the header section, including the signature and
+ * The 4-byte pack index signature: '\377t0c'
+ * 4-byte version number: 3
+ * 4-byte length of the header section, including the signature and
version number
- - 4-byte number of objects contained in the pack
- - 4-byte number of object formats in this pack index: 2
- - For each object format:
- - 4-byte format identifier (e.g., 'sha1' for SHA-1)
- - 4-byte length in bytes of shortened object names. This is the
+ * 4-byte number of objects contained in the pack
+ * 4-byte number of object formats in this pack index: 2
+ * For each object format:
+ ** 4-byte format identifier (e.g., 'sha1' for SHA-1)
+ ** 4-byte length in bytes of shortened object names. This is the
shortest possible length needed to make names in the shortened
object name table unambiguous.
- - 4-byte integer, recording where tables relating to this format
+ ** 4-byte integer, recording where tables relating to this format
are stored in this index file, as an offset from the beginning.
- - 4-byte offset to the trailer from the beginning of this file.
- - Zero or more additional key/value pairs (4-byte key, 4-byte
+ * 4-byte offset to the trailer from the beginning of this file.
+ * Zero or more additional key/value pairs (4-byte key, 4-byte
value). Only one key is supported: 'PSRC'. See the "Loose objects
and unreachable objects" section for supported values and how this
is used. All other keys are reserved. Readers must ignore
@@ -213,37 +238,36 @@
- Zero or more NUL bytes. This can optionally be used to improve the
alignment of the full object name table below.
- Tables for the first object format:
- - A sorted table of shortened object names. These are prefixes of
+ * A sorted table of shortened object names. These are prefixes of
the names of all objects in this pack file, packed together
without offset values to reduce the cache footprint of the binary
search for a specific object name.
- - A table of full object names in pack order. This allows resolving
+ * A table of full object names in pack order. This allows resolving
a reference to "the nth object in the pack file" (from a
reachability bitmap or from the next table of another object
format) to its object name.
- - A table of 4-byte values mapping object name order to pack order.
+ * A table of 4-byte values mapping object name order to pack order.
For an object in the table of sorted shortened object names, the
value at the corresponding index in this table is the index in the
previous table for that same object.
-
This can be used to look up the object in reachability bitmaps or
to look up its name in another object format.
- - A table of 4-byte CRC32 values of the packed object data, in the
+ * A table of 4-byte CRC32 values of the packed object data, in the
order that the objects appear in the pack file. This is to allow
compressed data to be copied directly from pack to pack during
repacking without undetected data corruption.
- - A table of 4-byte offset values. For an object in the table of
+ * A table of 4-byte offset values. For an object in the table of
sorted shortened object names, the value at the corresponding
index in this table indicates where that object can be found in
the pack file. These are usually 31-bit pack file offsets, but
large offsets are encoded as an index into the next table with the
most significant bit set.
- - A table of 8-byte offset entries (empty for pack files less than
+ * A table of 8-byte offset entries (empty for pack files less than
2 GiB). Pack files are organized with heavily used objects toward
the front, so most object references should not need to refer to
this table.
@@ -252,10 +276,10 @@
up to and not including the table of CRC32 values.
- Zero or more NUL bytes.
- The trailer consists of the following:
- - A copy of the 20-byte SHA-256 checksum at the end of the
+ * A copy of the 20-byte SHA-256 checksum at the end of the
corresponding packfile.
- - 20-byte SHA-256 checksum of all of the above.
+ * 20-byte SHA-256 checksum of all of the above.
Loose object index
~~~~~~~~~~~~~~~~~~
@@ -288,18 +312,18 @@
Translation table
~~~~~~~~~~~~~~~~~
-The index files support a bidirectional mapping between sha1-names
-and sha256-names. The lookup proceeds similarly to ordinary object
-lookups. For example, to convert a sha1-name to a sha256-name:
+The index files support a bidirectional mapping between SHA-1 names
+and SHA-256 names. The lookup proceeds similarly to ordinary object
+lookups. For example, to convert a SHA-1 name to a SHA-256 name:
1. Look for the object in idx files. If a match is present in the
- idx's sorted list of truncated sha1-names, then:
- a. Read the corresponding entry in the sha1-name order to pack
+ idx's sorted list of truncated SHA-1 names, then:
+ a. Read the corresponding entry in the SHA-1 name order to pack
name order mapping.
- b. Read the corresponding entry in the full sha1-name table to
+ b. Read the corresponding entry in the full SHA-1 name table to
verify we found the right object. If it is, then
- c. Read the corresponding entry in the full sha256-name table.
- That is the object's sha256-name.
+ c. Read the corresponding entry in the full SHA-256 name table.
+ That is the object's SHA-256 name.
2. Check for a loose object. Read lines from loose-object-idx until
we find a match.
@@ -313,10 +337,10 @@
the new objects to the corresponding index, this mapping is possible
for all objects in the object store.
-Reading an object's sha1-content
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-The sha1-content of an object can be read by converting all sha256-names
-its sha256-content references to sha1-names using the translation table.
+Reading an object's SHA-1 content
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+The SHA-1 content of an object can be read by converting all SHA-256 names
+of its SHA-256 content references to SHA-1 names using the translation table.
Fetch
~~~~~
@@ -339,7 +363,7 @@
1. index-pack: inflate each object in the packfile and compute its
SHA-1. Objects can contain deltas in OBJ_REF_DELTA format against
objects the client has locally. These objects can be looked up
- using the translation table and their sha1-content read as
+ using the translation table and their SHA-1 content read as
described above to resolve the deltas.
2. topological sort: starting at the "want"s from the negotiation
phase, walk through objects in the pack and emit a list of them,
@@ -348,12 +372,12 @@
(This list only contains objects reachable from the "wants". If the
pack from the server contained additional extraneous objects, then
they will be discarded.)
-3. convert to sha256: open a new (sha256) packfile. Read the topologically
+3. convert to SHA-256: open a new SHA-256 packfile. Read the topologically
sorted list just generated. For each object, inflate its
- sha1-content, convert to sha256-content, and write it to the sha256
- pack. Record the new sha1<->sha256 mapping entry for use in the idx.
+ SHA-1 content, convert to SHA-256 content, and write it to the SHA-256
+ pack. Record the new SHA-1<-->SHA-256 mapping entry for use in the idx.
4. sort: reorder entries in the new pack to match the order of objects
- in the pack the server generated and include blobs. Write a sha256 idx
+ in the pack the server generated and include blobs. Write a SHA-256 idx
file
5. clean up: remove the SHA-1 based pack file, index, and
topologically sorted list obtained from the server in steps 1
@@ -378,19 +402,20 @@
Push
~~~~
Push is simpler than fetch because the objects referenced by the
-pushed objects are already in the translation table. The sha1-content
+pushed objects are already in the translation table. The SHA-1 content
of each object being pushed can be read as described in the "Reading
-an object's sha1-content" section to generate the pack written by git
+an object's SHA-1 content" section to generate the pack written by git
send-pack.
Signed Commits
~~~~~~~~~~~~~~
We add a new field "gpgsig-sha256" to the commit object format to allow
signing commits without relying on SHA-1. It is similar to the
-existing "gpgsig" field. Its signed payload is the sha256-content of the
+existing "gpgsig" field. Its signed payload is the SHA-256 content of the
commit object with any "gpgsig" and "gpgsig-sha256" fields removed.
This means commits can be signed
+
1. using SHA-1 only, as in existing signed commit objects
2. using both SHA-1 and SHA-256, by using both gpgsig-sha256 and gpgsig
fields.
@@ -404,10 +429,11 @@
~~~~~~~~~~~
We add a new field "gpgsig-sha256" to the tag object format to allow
signing tags without relying on SHA-1. Its signed payload is the
-sha256-content of the tag with its gpgsig-sha256 field and "-----BEGIN PGP
+SHA-256 content of the tag with its gpgsig-sha256 field and "-----BEGIN PGP
SIGNATURE-----" delimited in-body signature removed.
This means tags can be signed
+
1. using SHA-1 only, as in existing signed tag objects
2. using both SHA-1 and SHA-256, by using gpgsig-sha256 and an in-body
signature.
@@ -415,11 +441,11 @@
Mergetag embedding
~~~~~~~~~~~~~~~~~~
-The mergetag field in the sha1-content of a commit contains the
-sha1-content of a tag that was merged by that commit.
+The mergetag field in the SHA-1 content of a commit contains the
+SHA-1 content of a tag that was merged by that commit.
-The mergetag field in the sha256-content of the same commit contains the
-sha256-content of the same tag.
+The mergetag field in the SHA-256 content of the same commit contains the
+SHA-256 content of the same tag.
Submodules
~~~~~~~~~~
@@ -494,7 +520,7 @@
-------
Invalid objects
~~~~~~~~~~~~~~~
-The conversion from sha1-content to sha256-content retains any
+The conversion from SHA-1 content to SHA-256 content retains any
brokenness in the original object (e.g., tree entry modes encoded with
leading 0, tree objects whose paths are not sorted correctly, and
commit objects without an author or committer). This is a deliberate
@@ -513,15 +539,15 @@
Alternates
~~~~~~~~~~
-For the same reason, a sha256 repository cannot borrow objects from a
-sha1 repository using objects/info/alternates or
+For the same reason, a SHA-256 repository cannot borrow objects from a
+SHA-1 repository using objects/info/alternates or
$GIT_ALTERNATE_OBJECT_REPOSITORIES.
git notes
~~~~~~~~~
-The "git notes" tool annotates objects using their sha1-name as key.
+The "git notes" tool annotates objects using their SHA-1 name as key.
This design does not describe a way to migrate notes trees to use
-sha256-names. That migration is expected to happen separately (for
+SHA-256 names. That migration is expected to happen separately (for
example using a file at the root of the notes tree to describe which
hash it uses).
@@ -555,7 +581,7 @@
Git 2.12
-Does this mean Git v2.12.0 is the commit with sha1-name
+Does this mean Git v2.12.0 is the commit with SHA-1 name
e7e07d5a4fcc2a203d9873968ad3e6bd4d7419d7 or the commit with
new-40-digit-hash-name e7e07d5a4fcc2a203d9873968ad3e6bd4d7419d7?
@@ -598,44 +624,12 @@
particular revision specifier and for output, overriding the mode. For
example:
-git --output-format=sha1 log abac87a^{sha1}..f787cac^{sha256}
-
-Choice of Hash
---------------
-In early 2005, around the time that Git was written, Xiaoyun Wang,
-Yiqun Lisa Yin, and Hongbo Yu announced an attack finding SHA-1
-collisions in 2^69 operations. In August they published details.
-Luckily, no practical demonstrations of a collision in full SHA-1 were
-published until 10 years later, in 2017.
-
-Git v2.13.0 and later subsequently moved to a hardened SHA-1
-implementation by default that mitigates the SHAttered attack, but
-SHA-1 is still believed to be weak.
-
-The hash to replace this hardened SHA-1 should be stronger than SHA-1
-was: we would like it to be trustworthy and useful in practice for at
-least 10 years.
-
-Some other relevant properties:
-
-1. A 256-bit hash (long enough to match common security practice; not
- excessively long to hurt performance and disk usage).
-
-2. High quality implementations should be widely available (e.g., in
- OpenSSL and Apple CommonCrypto).
-
-3. The hash function's properties should match Git's needs (e.g. Git
- requires collision and 2nd preimage resistance and does not require
- length extension resistance).
-
-4. As a tiebreaker, the hash should be fast to compute (fortunately
- many contenders are faster than SHA-1).
-
-We choose SHA-256.
+ git --output-format=sha1 log abac87a^{sha1}..f787cac^{sha256}
Transition plan
---------------
Some initial steps can be implemented independently of one another:
+
- adding a hash function API (vtable)
- teaching fsck to tolerate the gpgsig-sha256 field
- excluding gpgsig-* from the fields copied by "git commit --amend"
@@ -647,9 +641,9 @@
- introducing index v3
- adding support for the PSRC field and safer object pruning
-
The first user-visible change is the introduction of the objectFormat
extension (without compatObjectFormat). This requires:
+
- teaching fsck about this mode of operation
- using the hash function API (vtable) when computing object names
- signing objects and verifying signatures
@@ -657,6 +651,7 @@
repository
Next comes introduction of compatObjectFormat:
+
- implementing the loose-object-idx
- translating object names between object formats
- translating object content between object formats
@@ -669,10 +664,11 @@
"Object names on the command line" above)
The next step is supporting fetches and pushes to SHA-1 repositories:
+
- allow pushes to a repository using the compat format
- generate a topologically sorted list of the SHA-1 names of fetched
objects
-- convert the fetched packfile to sha256 format and generate an idx
+- convert the fetched packfile to SHA-256 format and generate an idx
file
- re-sort to match the order of objects in the fetched packfile
@@ -734,6 +730,7 @@
Objects newly created would be addressed by the new hash, but inside
such an object (e.g. commit) it is still possible to address objects
using the old hash function.
+
* You cannot trust its history (needed for bisectability) in the
future without further work
* Maintenance burden as the number of supported hash functions grows
@@ -743,36 +740,38 @@
Signed objects with multiple hashes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Instead of introducing the gpgsig-sha256 field in commit and tag objects
-for sha256-content based signatures, an earlier version of this design
-added "hash sha256 <sha256-name>" fields to strengthen the existing
-sha1-content based signatures.
+for SHA-256 content based signatures, an earlier version of this design
+added "hash sha256 <SHA-256 name>" fields to strengthen the existing
+SHA-1 content based signatures.
In other words, a single signature was used to attest to the object
content using both hash functions. This had some advantages:
+
* Using one signature instead of two speeds up the signing process.
* Having one signed payload with both hashes allows the signer to
- attest to the sha1-name and sha256-name referring to the same object.
+ attest to the SHA-1 name and SHA-256 name referring to the same object.
* All users consume the same signature. Broken signatures are likely
to be detected quickly using current versions of git.
However, it also came with disadvantages:
-* Verifying a signed object requires access to the sha1-names of all
+
+* Verifying a signed object requires access to the SHA-1 names of all
objects it references, even after the transition is complete and
translation table is no longer needed for anything else. To support
- this, the design added fields such as "hash sha1 tree <sha1-name>"
- and "hash sha1 parent <sha1-name>" to the sha256-content of a signed
+ this, the design added fields such as "hash sha1 tree <SHA-1 name>"
+ and "hash sha1 parent <SHA-1 name>" to the SHA-256 content of a signed
commit, complicating the conversion process.
-* Allowing signed objects without a sha1 (for after the transition is
+* Allowing signed objects without a SHA-1 (for after the transition is
complete) complicated the design further, requiring a "nohash sha1"
- field to suppress including "hash sha1" fields in the sha256-content
+ field to suppress including "hash sha1" fields in the SHA-256 content
and signed payload.
Lazily populated translation table
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Some of the work of building the translation table could be deferred to
push time, but that would significantly complicate and slow down pushes.
-Calculating the sha1-name at object creation time at the same time it is
-being streamed to disk and having its sha256-name calculated should be
+Calculating the SHA-1 name at object creation time at the same time it is
+being streamed to disk and having its SHA-256 name calculated should be
an acceptable cost.
Document History
@@ -782,18 +781,19 @@
bmwill@google.com, jonathantanmy@google.com, jrnieder@gmail.com,
sbeller@google.com
-Initial version sent to
-http://lore.kernel.org/git/20170304011251.GA26789@aiede.mtv.corp.google.com
+* Initial version sent to https://lore.kernel.org/git/20170304011251.GA26789@aiede.mtv.corp.google.com
2017-03-03 jrnieder@gmail.com
Incorporated suggestions from jonathantanmy and sbeller:
-* describe purpose of signed objects with each hash type
-* redefine signed object verification using object content under the
+
+* Describe purpose of signed objects with each hash type
+* Redefine signed object verification using object content under the
first hash function
2017-03-06 jrnieder@gmail.com
+
* Use SHA3-256 instead of SHA2 (thanks, Linus and brian m. carlson).[1][2]
-* Make sha3-based signatures a separate field, avoiding the need for
+* Make SHA3-based signatures a separate field, avoiding the need for
"hash" and "nohash" fields (thanks to peff[3]).
* Add a sorting phase to fetch (thanks to Junio for noticing the need
for this).
@@ -805,23 +805,26 @@
especially Junio).
2017-09-27 jrnieder@gmail.com, sbeller@google.com
-* use placeholder NewHash instead of SHA3-256
-* describe criteria for picking a hash function.
-* include a transition plan (thanks especially to Brandon Williams
+
+* Use placeholder NewHash instead of SHA3-256
+* Describe criteria for picking a hash function.
+* Include a transition plan (thanks especially to Brandon Williams
for fleshing these ideas out)
-* define the translation table (thanks, Shawn Pearce[5], Jonathan
+* Define the translation table (thanks, Shawn Pearce[5], Jonathan
Tan, and Masaya Suzuki)
-* avoid loose object overhead by packing more aggressively in
+* Avoid loose object overhead by packing more aggressively in
"git gc --auto"
Later history:
- See the history of this file in git.git for the history of subsequent
- edits. This document history is no longer being maintained as it
- would now be superfluous to the commit log
+* See the history of this file in git.git for the history of subsequent
+ edits. This document history is no longer being maintained as it
+ would now be superfluous to the commit log
-[1] http://lore.kernel.org/git/CA+55aFzJtejiCjV0e43+9oR3QuJK2PiFiLQemytoLpyJWe6P9w@mail.gmail.com/
-[2] http://lore.kernel.org/git/CA+55aFz+gkAsDZ24zmePQuEs1XPS9BP_s8O7Q4wQ7LV7X5-oDA@mail.gmail.com/
-[3] http://lore.kernel.org/git/20170306084353.nrns455dvkdsfgo5@sigill.intra.peff.net/
-[4] http://lore.kernel.org/git/20170304224936.rqqtkdvfjgyezsht@genre.crustytoothpaste.net
-[5] https://lore.kernel.org/git/CAJo=hJtoX9=AyLHHpUJS7fueV9ciZ_MNpnEPHUz8Whui6g9F0A@mail.gmail.com/
+References:
+
+ [1] https://lore.kernel.org/git/CA+55aFzJtejiCjV0e43+9oR3QuJK2PiFiLQemytoLpyJWe6P9w@mail.gmail.com/
+ [2] https://lore.kernel.org/git/CA+55aFz+gkAsDZ24zmePQuEs1XPS9BP_s8O7Q4wQ7LV7X5-oDA@mail.gmail.com/
+ [3] https://lore.kernel.org/git/20170306084353.nrns455dvkdsfgo5@sigill.intra.peff.net/
+ [4] https://lore.kernel.org/git/20170304224936.rqqtkdvfjgyezsht@genre.crustytoothpaste.net
+ [5] https://lore.kernel.org/git/CAJo=hJtoX9=AyLHHpUJS7fueV9ciZ_MNpnEPHUz8Whui6g9F0A@mail.gmail.com/
diff --git a/Documentation/technical/index-format.txt b/Documentation/technical/index-format.txt
index 69edf46..d363a71 100644
--- a/Documentation/technical/index-format.txt
+++ b/Documentation/technical/index-format.txt
@@ -26,7 +26,7 @@
Extensions are identified by signature. Optional extensions can
be ignored if Git does not understand them.
- Git currently supports cached tree and resolve undo extensions.
+ Git currently supports cache tree and resolve undo extensions.
4-byte extension signature. If the first byte is 'A'..'Z' the
extension is optional and can be ignored.
@@ -136,14 +136,35 @@
== Extensions
-=== Cached tree
+=== Cache tree
- Cached tree extension contains pre-computed hashes for trees that can
- be derived from the index. It helps speed up tree object generation
- from index for a new commit.
+ Since the index does not record entries for directories, the cache
+ entries cannot describe tree objects that already exist in the object
+ database for regions of the index that are unchanged from an existing
+ commit. The cache tree extension stores a recursive tree structure that
+ describes the trees that already exist and completely match sections of
+ the cache entries. This speeds up tree object generation from the index
+ for a new commit by only computing the trees that are "new" to that
+ commit. It also assists when comparing the index to another tree, such
+ as `HEAD^{tree}`, since sections of the index can be skipped when a tree
+ comparison demonstrates equality.
- When a path is updated in index, the path must be invalidated and
- removed from tree cache.
+ The recursive tree structure uses nodes that store a number of cache
+ entries, a list of subnodes, and an object ID (OID). The OID references
+ the existing tree for that node, if it is known to exist. The subnodes
+ correspond to subdirectories that themselves have cache tree nodes. The
+ number of cache entries corresponds to the number of cache entries in
+ the index that describe paths within that tree's directory.
+
+ The extension tracks the full directory structure in the cache tree
+ extension, but this is generally smaller than the full cache entry list.
+
+ When a path is updated in index, Git invalidates all nodes of the
+ recursive cache tree corresponding to the parent directories of that
+ path. We store these tree nodes as being "invalid" by using "-1" as the
+ number of cache entries. Invalid nodes still store a span of index
+ entries, allowing Git to focus its efforts when reconstructing a full
+ cache tree.
The signature for this extension is { 'T', 'R', 'E', 'E' }.
@@ -174,7 +195,8 @@
first entry represents the root level of the repository, followed by the
first subtree--let's call this A--of the root level (with its name
relative to the root level), followed by the first subtree of A (with
- its name relative to A), ...
+ its name relative to A), and so on. The specified number of subtrees
+ indicates when the current level of the recursive stack is complete.
=== Resolve undo
@@ -251,14 +273,14 @@
- Stat data of $GIT_DIR/info/exclude. See "Index entry" section from
ctime field until "file size".
- - Stat data of core.excludesfile
+ - Stat data of core.excludesFile
- 32-bit dir_flags (see struct dir_struct)
- Hash of $GIT_DIR/info/exclude. A null hash means the file
does not exist.
- - Hash of core.excludesfile. A null hash means the file does
+ - Hash of core.excludesFile. A null hash means the file does
not exist.
- NUL-terminated string of per-dir exclude file name. This usually
diff --git a/Documentation/technical/pack-format.txt b/Documentation/technical/pack-format.txt
index 96d2fc5..1faa949 100644
--- a/Documentation/technical/pack-format.txt
+++ b/Documentation/technical/pack-format.txt
@@ -274,6 +274,26 @@
Index checksum of all of the above.
+== pack-*.rev files have the format:
+
+ - A 4-byte magic number '0x52494458' ('RIDX').
+
+ - A 4-byte version identifier (= 1).
+
+ - A 4-byte hash function identifier (= 1 for SHA-1, 2 for SHA-256).
+
+ - A table of index positions (one per packed object, num_objects in
+ total, each a 4-byte unsigned integer in network order), sorted by
+ their corresponding offsets in the packfile.
+
+ - A trailer, containing a:
+
+ checksum of the corresponding packfile, and
+
+ a checksum of all of the above.
+
+All 4-byte numbers are in network order.
+
== multi-pack-index (MIDX) files have the following format:
The multi-pack-index files refer to multiple pack-files and loose objects.
@@ -316,6 +336,9 @@
(Chunks are provided in file-order, so you can infer the length
using the next chunk position if necessary.)
+ The CHUNK LOOKUP matches the table of contents from
+ link:technical/chunk-format.html[the chunk-based file format].
+
The remaining data in the body is described one chunk at a time, and
these chunks may be given in any order. Chunks are required unless
otherwise specified.
diff --git a/Documentation/technical/protocol-v2.txt b/Documentation/technical/protocol-v2.txt
index 85daeb5..a7c806a 100644
--- a/Documentation/technical/protocol-v2.txt
+++ b/Documentation/technical/protocol-v2.txt
@@ -33,8 +33,8 @@
* '0000' Flush Packet (flush-pkt) - indicates the end of a message
* '0001' Delimiter Packet (delim-pkt) - separates sections of a message
- * '0002' Message Packet (response-end-pkt) - indicates the end of a response
- for stateless connections
+ * '0002' Response End Packet (response-end-pkt) - indicates the end of a
+ response for stateless connections
Initial Client Request
----------------------
@@ -192,11 +192,20 @@
When specified, only references having a prefix matching one of
the provided prefixes are displayed.
+If the 'unborn' feature is advertised the following argument can be
+included in the client's request.
+
+ unborn
+ The server will send information about HEAD even if it is a symref
+ pointing to an unborn branch in the form "unborn HEAD
+ symref-target:<target>".
+
The output of ls-refs is as follows:
output = *ref
flush-pkt
- ref = PKT-LINE(obj-id SP refname *(SP ref-attribute) LF)
+ obj-id-or-unborn = (obj-id | "unborn")
+ ref = PKT-LINE(obj-id-or-unborn SP refname *(SP ref-attribute) LF)
ref-attribute = (symref | peeled)
symref = "symref-target:" symref-target
peeled = "peeled:" obj-id
diff --git a/Documentation/technical/reftable.txt b/Documentation/technical/reftable.txt
index 8095ab2..3ef169a 100644
--- a/Documentation/technical/reftable.txt
+++ b/Documentation/technical/reftable.txt
@@ -872,17 +872,11 @@
Layout
^^^^^^
-A collection of reftable files are stored in the `$GIT_DIR/reftable/`
-directory:
-
-....
-00000001-00000001.log
-00000002-00000002.ref
-00000003-00000003.ref
-....
-
-where reftable files are named by a unique name such as produced by the
-function `${min_update_index}-${max_update_index}.ref`.
+A collection of reftable files are stored in the `$GIT_DIR/reftable/` directory.
+Their names should have a random element, such that each filename is globally
+unique; this helps avoid spurious failures on Windows, where open files cannot
+be removed or overwritten. It suggested to use
+`${min_update_index}-${max_update_index}-${random}.ref` as a naming convention.
Log-only files use the `.log` extension, while ref-only and mixed ref
and log files use `.ref`. extension.
@@ -893,9 +887,9 @@
....
$ cat .git/reftable/tables.list
-00000001-00000001.log
-00000002-00000002.ref
-00000003-00000003.ref
+00000001-00000001-RANDOM1.log
+00000002-00000002-RANDOM2.ref
+00000003-00000003-RANDOM3.ref
....
Readers must read `$GIT_DIR/reftable/tables.list` to determine which
@@ -940,7 +934,7 @@
3. Select `update_index` to be most recent file's
`max_update_index + 1`.
4. Prepare temp reftable `tmp_XXXXXX`, including log entries.
-5. Rename `tmp_XXXXXX` to `${update_index}-${update_index}.ref`.
+5. Rename `tmp_XXXXXX` to `${update_index}-${update_index}-${random}.ref`.
6. Copy `tables.list` to `tables.list.lock`, appending file from (5).
7. Rename `tables.list.lock` to `tables.list`.
@@ -993,7 +987,7 @@
should always be the case, assuming that other processes are adhering to
the locking protocol.
7. Rename `${min_update_index}-${max_update_index}_XXXXXX` to
-`${min_update_index}-${max_update_index}.ref`.
+`${min_update_index}-${max_update_index}-${random}.ref`.
8. Write the new stack to `tables.list.lock`, replacing `B` and `C`
with the file from (4).
9. Rename `tables.list.lock` to `tables.list`.
@@ -1005,6 +999,22 @@
Each reftable (compacted or not) is uniquely identified by its name, so
open reftables can be cached by their name.
+Windows
+^^^^^^^
+
+On windows, and other systems that do not allow deleting or renaming to open
+files, compaction may succeed, but other readers may prevent obsolete tables
+from being deleted.
+
+On these platforms, the following strategy can be followed: on closing a
+reftable stack, reload `tables.list`, and delete any tables no longer mentioned
+in `tables.list`.
+
+Irregular program exit may still leave about unused files. In this case, a
+cleanup operation can read `tables.list`, note its modification timestamp, and
+delete any unreferenced `*.ref` files that are older.
+
+
Alternatives considered
~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
index 39d0c99..da85367 100755
--- a/GIT-VERSION-GEN
+++ b/GIT-VERSION-GEN
@@ -1,7 +1,7 @@
#!/bin/sh
GVF=GIT-VERSION-FILE
-DEF_VER=v2.30.5
+DEF_VER=v2.31.3
LF='
'
diff --git a/Makefile b/Makefile
index 4128b45..f3dc217 100644
--- a/Makefile
+++ b/Makefile
@@ -22,6 +22,9 @@
# when attempting to read from an fopen'ed directory (or even to fopen
# it at all).
#
+# Define OPEN_RETURNS_EINTR if your open() system call may return EINTR
+# when a signal is received (as opposed to restarting).
+#
# Define NO_OPENSSL environment variable if you do not have OpenSSL.
#
# Define USE_LIBPCRE if you have and want to use libpcre. Various
@@ -29,18 +32,11 @@
# Perl-compatible regular expressions instead of standard or extended
# POSIX regular expressions.
#
-# 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 you want to
-# disable JIT even if supported by your library.
+# Only libpcre version 2 is supported. USE_LIBPCRE2 is a synonym for
+# USE_LIBPCRE, support for the old USE_LIBPCRE1 has been removed.
#
# Define LIBPCREDIR=/foo/bar if your PCRE header and library files are
-# in /foo/bar/include and /foo/bar/lib directories. Which version of
-# PCRE this points to determined by the USE_LIBPCRE1 and USE_LIBPCRE2
-# variables.
+# in /foo/bar/include and /foo/bar/lib directories.
#
# Define HAVE_ALLOCA_H if you have working alloca(3) defined in that header.
#
@@ -722,6 +718,7 @@
TEST_BUILTINS_OBJS += test-parse-options.o
TEST_BUILTINS_OBJS += test-parse-pathspec-file.o
TEST_BUILTINS_OBJS += test-path-utils.o
+TEST_BUILTINS_OBJS += test-pcre2-config.o
TEST_BUILTINS_OBJS += test-pkt-line.o
TEST_BUILTINS_OBJS += test-prio-queue.o
TEST_BUILTINS_OBJS += test-proc-receive.o
@@ -840,6 +837,7 @@
LIB_OBJS += cache-tree.o
LIB_OBJS += chdir-notify.o
LIB_OBJS += checkout.o
+LIB_OBJS += chunk-format.o
LIB_OBJS += color.o
LIB_OBJS += column.o
LIB_OBJS += combine-diff.o
@@ -860,6 +858,7 @@
LIB_OBJS += decorate.o
LIB_OBJS += delta-islands.o
LIB_OBJS += diff-delta.o
+LIB_OBJS += diff-merges.o
LIB_OBJS += diff-lib.o
LIB_OBJS += diff-no-index.o
LIB_OBJS += diff.o
@@ -868,6 +867,7 @@
LIB_OBJS += diffcore-order.o
LIB_OBJS += diffcore-pickaxe.o
LIB_OBJS += diffcore-rename.o
+LIB_OBJS += diffcore-rotate.o
LIB_OBJS += dir-iterator.o
LIB_OBJS += dir.o
LIB_OBJS += editor.o
@@ -887,6 +887,7 @@
LIB_OBJS += gpg-interface.o
LIB_OBJS += graph.o
LIB_OBJS += grep.o
+LIB_OBJS += hash-lookup.o
LIB_OBJS += hashmap.o
LIB_OBJS += help.o
LIB_OBJS += hex.o
@@ -923,6 +924,8 @@
LIB_OBJS += notes-merge.o
LIB_OBJS += notes-utils.o
LIB_OBJS += notes.o
+LIB_OBJS += object-file.o
+LIB_OBJS += object-name.o
LIB_OBJS += object.o
LIB_OBJS += oid-array.o
LIB_OBJS += oidmap.o
@@ -979,9 +982,6 @@
LIB_OBJS += serve.o
LIB_OBJS += server-info.o
LIB_OBJS += setup.o
-LIB_OBJS += sha1-file.o
-LIB_OBJS += sha1-lookup.o
-LIB_OBJS += sha1-name.o
LIB_OBJS += shallow.o
LIB_OBJS += sideband.o
LIB_OBJS += sigchain.o
@@ -1359,26 +1359,17 @@
COMPAT_OBJS += compat/basename.o
endif
+ifdef USE_LIBPCRE1
+$(error The USE_LIBPCRE1 build option has been removed, use version 2 with USE_LIBPCRE)
+endif
+
USE_LIBPCRE2 ?= $(USE_LIBPCRE)
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
-
-ifdef NO_LIBPCRE1_JIT
- BASIC_CFLAGS += -DNO_LIBPCRE1_JIT
-endif
-endif
-
ifdef LIBPCREDIR
BASIC_CFLAGS += -I$(LIBPCREDIR)/include
EXTLIBS += -L$(LIBPCREDIR)/$(lib) $(CC_LD_DYNPATH)$(LIBPCREDIR)/$(lib)
@@ -1551,6 +1542,10 @@
COMPAT_CFLAGS += -DFREAD_READS_DIRECTORIES
COMPAT_OBJS += compat/fopen.o
endif
+ifdef OPEN_RETURNS_EINTR
+ COMPAT_CFLAGS += -DOPEN_RETURNS_EINTR
+ COMPAT_OBJS += compat/open.o
+endif
ifdef NO_SYMLINK_HEAD
BASIC_CFLAGS += -DNO_SYMLINK_HEAD
endif
@@ -2726,9 +2721,7 @@
@echo TAR=\''$(subst ','\'',$(subst ','\'',$(TAR)))'\' >>$@+
@echo NO_CURL=\''$(subst ','\'',$(subst ','\'',$(NO_CURL)))'\' >>$@+
@echo NO_EXPAT=\''$(subst ','\'',$(subst ','\'',$(NO_EXPAT)))'\' >>$@+
- @echo USE_LIBPCRE1=\''$(subst ','\'',$(subst ','\'',$(USE_LIBPCRE1)))'\' >>$@+
@echo USE_LIBPCRE2=\''$(subst ','\'',$(subst ','\'',$(USE_LIBPCRE2)))'\' >>$@+
- @echo NO_LIBPCRE1_JIT=\''$(subst ','\'',$(subst ','\'',$(NO_LIBPCRE1_JIT)))'\' >>$@+
@echo NO_PERL=\''$(subst ','\'',$(subst ','\'',$(NO_PERL)))'\' >>$@+
@echo NO_PTHREADS=\''$(subst ','\'',$(subst ','\'',$(NO_PTHREADS)))'\' >>$@+
@echo NO_PYTHON=\''$(subst ','\'',$(subst ','\'',$(NO_PYTHON)))'\' >>$@+
@@ -3306,11 +3299,11 @@
# are not necessarily appropriate for general builds, and that vary greatly
# depending on the compiler version used.
#
-# An example command to build against libFuzzer from LLVM 4.0.0:
+# An example command to build against libFuzzer from LLVM 11.0.0:
#
# make CC=clang CXX=clang++ \
-# CFLAGS="-fsanitize-coverage=trace-pc-guard -fsanitize=address" \
-# LIB_FUZZING_ENGINE=/usr/lib/llvm-4.0/lib/libFuzzer.a \
+# CFLAGS="-fsanitize=fuzzer-no-link,address" \
+# LIB_FUZZING_ENGINE="-fsanitize=fuzzer" \
# fuzz-all
#
FUZZ_CXXFLAGS ?= $(CFLAGS)
diff --git a/RelNotes b/RelNotes
index 406d238..c3d6893 120000
--- a/RelNotes
+++ b/RelNotes
@@ -1 +1 @@
-Documentation/RelNotes/2.30.5.txt
\ No newline at end of file
+Documentation/RelNotes/2.31.3.txt
\ No newline at end of file
diff --git a/abspath.c b/abspath.c
index 6f15a41..39e06b5 100644
--- a/abspath.c
+++ b/abspath.c
@@ -67,19 +67,15 @@ static void get_root_part(struct strbuf *resolved, struct strbuf *remaining)
#endif
/*
- * Return the real path (i.e., absolute path, with symlinks resolved
- * and extra slashes removed) equivalent to the specified path. (If
- * you want an absolute path but don't mind links, use
- * absolute_path().) Places the resolved realpath in the provided strbuf.
- *
- * The directory part of path (i.e., everything up to the last
- * dir_sep) must denote a valid, existing directory, but the last
- * component need not exist. If die_on_error is set, then die with an
- * informative error message if there is a problem. Otherwise, return
- * NULL on errors (without generating any output).
+ * If set, any number of trailing components may be missing; otherwise, only one
+ * may be.
*/
-char *strbuf_realpath(struct strbuf *resolved, const char *path,
- int die_on_error)
+#define REALPATH_MANY_MISSING (1 << 0)
+/* Should we die if there's an error? */
+#define REALPATH_DIE_ON_ERROR (1 << 1)
+
+static char *strbuf_realpath_1(struct strbuf *resolved, const char *path,
+ int flags)
{
struct strbuf remaining = STRBUF_INIT;
struct strbuf next = STRBUF_INIT;
@@ -89,7 +85,7 @@ char *strbuf_realpath(struct strbuf *resolved, const char *path,
struct stat st;
if (!*path) {
- if (die_on_error)
+ if (flags & REALPATH_DIE_ON_ERROR)
die("The empty string is not a valid path");
else
goto error_out;
@@ -101,7 +97,7 @@ char *strbuf_realpath(struct strbuf *resolved, const char *path,
if (!resolved->len) {
/* relative path; can use CWD as the initial resolved path */
if (strbuf_getcwd(resolved)) {
- if (die_on_error)
+ if (flags & REALPATH_DIE_ON_ERROR)
die_errno("unable to get current working directory");
else
goto error_out;
@@ -129,8 +125,9 @@ char *strbuf_realpath(struct strbuf *resolved, const char *path,
if (lstat(resolved->buf, &st)) {
/* error out unless this was the last component */
- if (errno != ENOENT || remaining.len) {
- if (die_on_error)
+ if (errno != ENOENT ||
+ (!(flags & REALPATH_MANY_MISSING) && remaining.len)) {
+ if (flags & REALPATH_DIE_ON_ERROR)
die_errno("Invalid path '%s'",
resolved->buf);
else
@@ -143,7 +140,7 @@ char *strbuf_realpath(struct strbuf *resolved, const char *path,
if (num_symlinks++ > MAXSYMLINKS) {
errno = ELOOP;
- if (die_on_error)
+ if (flags & REALPATH_DIE_ON_ERROR)
die("More than %d nested symlinks "
"on path '%s'", MAXSYMLINKS, path);
else
@@ -153,7 +150,7 @@ char *strbuf_realpath(struct strbuf *resolved, const char *path,
len = strbuf_readlink(&symlink, resolved->buf,
st.st_size);
if (len < 0) {
- if (die_on_error)
+ if (flags & REALPATH_DIE_ON_ERROR)
die_errno("Invalid symlink '%s'",
resolved->buf);
else
@@ -202,6 +199,37 @@ char *strbuf_realpath(struct strbuf *resolved, const char *path,
return retval;
}
+/*
+ * Return the real path (i.e., absolute path, with symlinks resolved
+ * and extra slashes removed) equivalent to the specified path. (If
+ * you want an absolute path but don't mind links, use
+ * absolute_path().) Places the resolved realpath in the provided strbuf.
+ *
+ * The directory part of path (i.e., everything up to the last
+ * dir_sep) must denote a valid, existing directory, but the last
+ * component need not exist. If die_on_error is set, then die with an
+ * informative error message if there is a problem. Otherwise, return
+ * NULL on errors (without generating any output).
+ */
+char *strbuf_realpath(struct strbuf *resolved, const char *path,
+ int die_on_error)
+{
+ return strbuf_realpath_1(resolved, path,
+ die_on_error ? REALPATH_DIE_ON_ERROR : 0);
+}
+
+/*
+ * Just like strbuf_realpath, but allows an arbitrary number of path
+ * components to be missing.
+ */
+char *strbuf_realpath_forgiving(struct strbuf *resolved, const char *path,
+ int die_on_error)
+{
+ return strbuf_realpath_1(resolved, path,
+ ((die_on_error ? REALPATH_DIE_ON_ERROR : 0) |
+ REALPATH_MANY_MISSING));
+}
+
char *real_pathdup(const char *path, int die_on_error)
{
struct strbuf realpath = STRBUF_INIT;
diff --git a/add-interactive.c b/add-interactive.c
index 9b8cdb4..36ebdbd 100644
--- a/add-interactive.c
+++ b/add-interactive.c
@@ -413,7 +413,7 @@ struct file_item {
static void add_file_item(struct string_list *files, const char *name)
{
- struct file_item *item = xcalloc(sizeof(*item), 1);
+ struct file_item *item = xcalloc(1, sizeof(*item));
string_list_append(files, name)->util = item;
}
@@ -476,7 +476,7 @@ static void collect_changes_cb(struct diff_queue_struct *q,
add_file_item(s->files, name);
- entry = xcalloc(sizeof(*entry), 1);
+ CALLOC_ARRAY(entry, 1);
hashmap_entry_init(&entry->ent, hash);
entry->name = s->files->items[s->files->nr - 1].string;
entry->item = s->files->items[s->files->nr - 1].util;
@@ -1120,7 +1120,7 @@ int run_add_i(struct repository *r, const struct pathspec *ps)
int res = 0;
for (i = 0; i < ARRAY_SIZE(command_list); i++) {
- struct command_item *util = xcalloc(sizeof(*util), 1);
+ struct command_item *util = xcalloc(1, sizeof(*util));
util->command = command_list[i].command;
string_list_append(&commands.items, command_list[i].string)
->util = util;
diff --git a/apply.c b/apply.c
index 668b16e..6695a93 100644
--- a/apply.c
+++ b/apply.c
@@ -1781,7 +1781,7 @@ static int parse_single_patch(struct apply_state *state,
struct fragment *fragment;
int len;
- fragment = xcalloc(1, sizeof(*fragment));
+ CALLOC_ARRAY(fragment, 1);
fragment->linenr = state->linenr;
len = parse_fragment(state, line, size, patch, fragment);
if (len <= 0) {
@@ -1959,7 +1959,7 @@ static struct fragment *parse_binary_hunk(struct apply_state *state,
size -= llen;
}
- frag = xcalloc(1, sizeof(*frag));
+ CALLOC_ARRAY(frag, 1);
frag->patch = inflate_it(data, hunk_size, origlen);
frag->free_patch = 1;
if (!frag->patch)
@@ -4681,7 +4681,7 @@ static int apply_patch(struct apply_state *state,
struct patch *patch;
int nr;
- patch = xcalloc(1, sizeof(*patch));
+ CALLOC_ARRAY(patch, 1);
patch->inaccurate_eof = !!(options & APPLY_OPT_INACCURATE_EOF);
patch->recount = !!(options & APPLY_OPT_RECOUNT);
nr = parse_chunk(state, buf.buf + offset, buf.len - offset, patch);
diff --git a/archive-tar.c b/archive-tar.c
index a971fdc..05d2455 100644
--- a/archive-tar.c
+++ b/archive-tar.c
@@ -371,7 +371,7 @@ static int tar_filter_config(const char *var, const char *value, void *data)
ar = find_tar_filter(name, namelen);
if (!ar) {
- ar = xcalloc(1, sizeof(*ar));
+ CALLOC_ARRAY(ar, 1);
ar->name = xmemdupz(name, namelen);
ar->write_archive = write_tar_filter_archive;
ar->flags = ARCHIVER_WANT_COMPRESSION_LEVELS |
diff --git a/attr.c b/attr.c
index 4ef85d6..59a8d8a 100644
--- a/attr.c
+++ b/attr.c
@@ -569,7 +569,7 @@ struct attr_check *attr_check_initl(const char *one, ...)
check = attr_check_alloc();
check->nr = cnt;
check->alloc = cnt;
- check->items = xcalloc(cnt, sizeof(struct attr_check_item));
+ CALLOC_ARRAY(check->items, cnt);
check->items[0].attr = git_attr(one);
va_start(params, one);
@@ -670,7 +670,7 @@ static struct attr_stack *read_attr_from_array(const char **list)
const char *line;
int lineno = 0;
- res = xcalloc(1, sizeof(*res));
+ CALLOC_ARRAY(res, 1);
while ((line = *(list++)) != NULL)
handle_attr_line(res, line, "[builtin]", ++lineno, 1);
return res;
@@ -707,7 +707,7 @@ static struct attr_stack *read_attr_from_file(const char *path, int macro_ok)
if (!fp)
return NULL;
- res = xcalloc(1, sizeof(*res));
+ CALLOC_ARRAY(res, 1);
while (fgets(buf, sizeof(buf), fp)) {
char *bufp = buf;
if (!lineno)
@@ -733,7 +733,7 @@ static struct attr_stack *read_attr_from_index(const struct index_state *istate,
if (!buf)
return NULL;
- res = xcalloc(1, sizeof(*res));
+ CALLOC_ARRAY(res, 1);
for (sp = buf; *sp; ) {
char *ep;
int more;
@@ -774,7 +774,7 @@ static struct attr_stack *read_attr(const struct index_state *istate,
}
if (!res)
- res = xcalloc(1, sizeof(*res));
+ CALLOC_ARRAY(res, 1);
return res;
}
@@ -874,7 +874,7 @@ static void bootstrap_attr_stack(const struct index_state *istate,
else
e = NULL;
if (!e)
- e = xcalloc(1, sizeof(struct attr_stack));
+ CALLOC_ARRAY(e, 1);
push_stack(stack, e, NULL, 0);
}
diff --git a/bisect.c b/bisect.c
index d8c2c8f..af2863d 100644
--- a/bisect.c
+++ b/bisect.c
@@ -6,7 +6,7 @@
#include "refs.h"
#include "list-objects.h"
#include "quote.h"
-#include "sha1-lookup.h"
+#include "hash-lookup.h"
#include "run-command.h"
#include "log-tree.h"
#include "bisect.h"
@@ -423,7 +423,7 @@ void find_bisection(struct commit_list **commit_list, int *reaches,
show_list("bisection 2 sorted", 0, nr, list);
*all = nr;
- weights = xcalloc(on_list, sizeof(*weights));
+ CALLOC_ARRAY(weights, on_list);
/* Do the real work of finding bisection commit. */
best = do_find_bisection(list, nr, weights, bisect_flags);
@@ -1064,7 +1064,7 @@ enum bisect_error bisect_next_all(struct repository *r, const char *prefix)
if (!all) {
fprintf(stderr, _("No testable commit found.\n"
- "Maybe you started with bad path parameters?\n"));
+ "Maybe you started with bad path arguments?\n"));
return BISECT_NO_TESTABLE_COMMIT;
}
diff --git a/blame.c b/blame.c
index a5044fc..5018bb8 100644
--- a/blame.c
+++ b/blame.c
@@ -951,13 +951,13 @@ static int *fuzzy_find_matching_lines(struct blame_origin *parent,
max_search_distance_b = ((2 * max_search_distance_a + 1) * length_b
- 1) / length_a;
- result = xcalloc(sizeof(int), length_b);
- second_best_result = xcalloc(sizeof(int), length_b);
- certainties = xcalloc(sizeof(int), length_b);
+ CALLOC_ARRAY(result, length_b);
+ CALLOC_ARRAY(second_best_result, length_b);
+ CALLOC_ARRAY(certainties, length_b);
/* See get_similarity() for details of similarities. */
similarity_count = length_b * (max_search_distance_a * 2 + 1);
- similarities = xcalloc(sizeof(int), similarity_count);
+ CALLOC_ARRAY(similarities, similarity_count);
for (i = 0; i < length_b; ++i) {
result[i] = -1;
@@ -995,7 +995,7 @@ static void fill_origin_fingerprints(struct blame_origin *o)
return;
o->num_lines = find_line_starts(&line_starts, o->file.ptr,
o->file.size);
- o->fingerprints = xcalloc(sizeof(struct fingerprint), o->num_lines);
+ CALLOC_ARRAY(o->fingerprints, o->num_lines);
get_line_fingerprints(o->fingerprints, o->file.ptr, line_starts,
0, o->num_lines);
free(line_starts);
@@ -1853,8 +1853,7 @@ static void blame_chunk(struct blame_entry ***dstq, struct blame_entry ***srcq,
diffp = NULL;
if (ignore_diffs && same - tlno > 0) {
- line_blames = xcalloc(sizeof(struct blame_line_tracker),
- same - tlno);
+ CALLOC_ARRAY(line_blames, same - tlno);
guess_line_blames(parent, target, tlno, offset, same,
parent_len, line_blames);
}
@@ -2216,7 +2215,7 @@ static struct blame_list *setup_blame_list(struct blame_entry *unblamed,
for (e = unblamed, num_ents = 0; e; e = e->next)
num_ents++;
if (num_ents) {
- blame_list = xcalloc(num_ents, sizeof(struct blame_list));
+ CALLOC_ARRAY(blame_list, num_ents);
for (e = unblamed, i = 0; e; e = e->next)
blame_list[i++].ent = e;
}
@@ -2428,7 +2427,7 @@ static void pass_blame(struct blame_scoreboard *sb, struct blame_origin *origin,
else if (num_sg < ARRAY_SIZE(sg_buf))
memset(sg_buf, 0, sizeof(sg_buf));
else
- sg_origin = xcalloc(num_sg, sizeof(*sg_origin));
+ CALLOC_ARRAY(sg_origin, num_sg);
/*
* The first pass looks for unrenamed path to optimize for
diff --git a/block-sha1/sha1.c b/block-sha1/sha1.c
index 8681031..1bb6e7c 100644
--- a/block-sha1/sha1.c
+++ b/block-sha1/sha1.c
@@ -70,7 +70,7 @@
* the input data, the next mix it from the 512-bit array.
*/
#define SHA_SRC(t) get_be32((unsigned char *) block + (t)*4)
-#define SHA_MIX(t) SHA_ROL(W((t)+13) ^ W((t)+8) ^ W((t)+2) ^ W(t), 1);
+#define SHA_MIX(t) SHA_ROL(W((t)+13) ^ W((t)+8) ^ W((t)+2) ^ W(t), 1)
#define SHA_ROUND(t, input, fn, constant, A, B, C, D, E) do { \
unsigned int TEMP = input(t); setW(t, TEMP); \
diff --git a/bloom.c b/bloom.c
index b176f28..52b8747 100644
--- a/bloom.c
+++ b/bloom.c
@@ -277,7 +277,7 @@ struct bloom_filter *get_or_compute_bloom_filter(struct repository *r,
*computed |= BLOOM_TRUNC_EMPTY;
filter->len = 1;
}
- filter->data = xcalloc(filter->len, sizeof(unsigned char));
+ CALLOC_ARRAY(filter->data, filter->len);
hashmap_for_each_entry(&pathmap, &iter, e, entry) {
struct bloom_key key;
diff --git a/builtin/add.c b/builtin/add.c
index a825887..ea762a4 100644
--- a/builtin/add.c
+++ b/builtin/add.c
@@ -38,19 +38,27 @@ struct update_callback_data {
int add_errors;
};
-static void chmod_pathspec(struct pathspec *pathspec, char flip)
+static int chmod_pathspec(struct pathspec *pathspec, char flip, int show_only)
{
- int i;
+ int i, ret = 0;
for (i = 0; i < active_nr; i++) {
struct cache_entry *ce = active_cache[i];
+ int err;
if (pathspec && !ce_path_match(&the_index, ce, pathspec, NULL))
continue;
- if (chmod_cache_entry(ce, flip) < 0)
- fprintf(stderr, "cannot chmod %cx '%s'\n", flip, ce->name);
+ if (!show_only)
+ err = chmod_cache_entry(ce, flip);
+ else
+ err = S_ISREG(ce->ce_mode) ? 0 : -1;
+
+ if (err < 0)
+ ret = error(_("cannot chmod %cx '%s'"), flip, ce->name);
}
+
+ return ret;
}
static int fix_unmerged_status(struct diff_filepair *p,
@@ -609,7 +617,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
exit_status |= add_files(&dir, flags);
if (chmod_arg && pathspec.nr)
- chmod_pathspec(&pathspec, chmod_arg[0]);
+ exit_status |= chmod_pathspec(&pathspec, chmod_arg[0], show_only);
unplug_bulk_checkin();
finish:
diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c
index 709eb71..1fdb7d9 100644
--- a/builtin/bisect--helper.c
+++ b/builtin/bisect--helper.c
@@ -21,16 +21,15 @@ static GIT_PATH_FUNC(git_path_bisect_first_parent, "BISECT_FIRST_PARENT")
static const char * const git_bisect_helper_usage[] = {
N_("git bisect--helper --bisect-reset [<commit>]"),
- N_("git bisect--helper --bisect-write [--no-log] <state> <revision> <good_term> <bad_term>"),
- N_("git bisect--helper --bisect-check-and-set-terms <command> <good_term> <bad_term>"),
N_("git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"),
N_("git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --term-new]"),
N_("git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}=<term>]"
" [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] [<paths>...]"),
N_("git bisect--helper --bisect-next"),
- N_("git bisect--helper --bisect-auto-next"),
N_("git bisect--helper --bisect-state (bad|new) [<rev>]"),
N_("git bisect--helper --bisect-state (good|old) [<rev>...]"),
+ N_("git bisect--helper --bisect-replay <filename>"),
+ N_("git bisect--helper --bisect-skip [(<rev>|<range>)...]"),
NULL
};
@@ -875,12 +874,19 @@ static enum bisect_error bisect_state(struct bisect_terms *terms, const char **a
*/
for (; argc; argc--, argv++) {
+ struct commit *commit;
+
if (get_oid(*argv, &oid)){
error(_("Bad rev input: %s"), *argv);
oid_array_clear(&revs);
return BISECT_FAILED;
}
- oid_array_append(&revs, &oid);
+
+ commit = lookup_commit_reference(the_repository, &oid);
+ if (!commit)
+ die(_("Bad rev input (not a commit): %s"), *argv);
+
+ oid_array_append(&revs, &commit->object.oid);
}
if (strbuf_read_file(&buf, git_path_bisect_expected_rev(), 0) < the_hash_algo->hexsz ||
@@ -904,28 +910,148 @@ static enum bisect_error bisect_state(struct bisect_terms *terms, const char **a
return bisect_auto_next(terms, NULL);
}
+static enum bisect_error bisect_log(void)
+{
+ int fd, status;
+ const char* filename = git_path_bisect_log();
+
+ if (is_empty_or_missing_file(filename))
+ return error(_("We are not bisecting."));
+
+ fd = open(filename, O_RDONLY);
+ if (fd < 0)
+ return BISECT_FAILED;
+
+ status = copy_fd(fd, STDOUT_FILENO);
+ close(fd);
+ return status ? BISECT_FAILED : BISECT_OK;
+}
+
+static int process_replay_line(struct bisect_terms *terms, struct strbuf *line)
+{
+ const char *p = line->buf + strspn(line->buf, " \t");
+ char *word_end, *rev;
+
+ if ((!skip_prefix(p, "git bisect", &p) &&
+ !skip_prefix(p, "git-bisect", &p)) || !isspace(*p))
+ return 0;
+ p += strspn(p, " \t");
+
+ word_end = (char *)p + strcspn(p, " \t");
+ rev = word_end + strspn(word_end, " \t");
+ *word_end = '\0'; /* NUL-terminate the word */
+
+ get_terms(terms);
+ if (check_and_set_terms(terms, p))
+ return -1;
+
+ if (!strcmp(p, "start")) {
+ struct strvec argv = STRVEC_INIT;
+ int res;
+ sq_dequote_to_strvec(rev, &argv);
+ res = bisect_start(terms, argv.v, argv.nr);
+ strvec_clear(&argv);
+ return res;
+ }
+
+ if (one_of(p, terms->term_good,
+ terms->term_bad, "skip", NULL))
+ return bisect_write(p, rev, terms, 0);
+
+ if (!strcmp(p, "terms")) {
+ struct strvec argv = STRVEC_INIT;
+ int res;
+ sq_dequote_to_strvec(rev, &argv);
+ res = bisect_terms(terms, argv.nr == 1 ? argv.v[0] : NULL);
+ strvec_clear(&argv);
+ return res;
+ }
+ error(_("'%s'?? what are you talking about?"), p);
+
+ return -1;
+}
+
+static enum bisect_error bisect_replay(struct bisect_terms *terms, const char *filename)
+{
+ FILE *fp = NULL;
+ enum bisect_error res = BISECT_OK;
+ struct strbuf line = STRBUF_INIT;
+
+ if (is_empty_or_missing_file(filename))
+ return error(_("cannot read file '%s' for replaying"), filename);
+
+ if (bisect_reset(NULL))
+ return BISECT_FAILED;
+
+ fp = fopen(filename, "r");
+ if (!fp)
+ return BISECT_FAILED;
+
+ while ((strbuf_getline(&line, fp) != EOF) && !res)
+ res = process_replay_line(terms, &line);
+
+ strbuf_release(&line);
+ fclose(fp);
+
+ if (res)
+ return BISECT_FAILED;
+
+ return bisect_auto_next(terms, NULL);
+}
+
+static enum bisect_error bisect_skip(struct bisect_terms *terms, const char **argv, int argc)
+{
+ int i;
+ enum bisect_error res;
+ struct strvec argv_state = STRVEC_INIT;
+
+ strvec_push(&argv_state, "skip");
+
+ for (i = 0; i < argc; i++) {
+ const char *dotdot = strstr(argv[i], "..");
+
+ if (dotdot) {
+ struct rev_info revs;
+ struct commit *commit;
+
+ init_revisions(&revs, NULL);
+ setup_revisions(2, argv + i - 1, &revs, NULL);
+
+ if (prepare_revision_walk(&revs))
+ die(_("revision walk setup failed\n"));
+ while ((commit = get_revision(&revs)) != NULL)
+ strvec_push(&argv_state,
+ oid_to_hex(&commit->object.oid));
+
+ reset_revision_walk();
+ } else {
+ strvec_push(&argv_state, argv[i]);
+ }
+ }
+ res = bisect_state(terms, argv_state.v, argv_state.nr);
+
+ strvec_clear(&argv_state);
+ return res;
+}
+
int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
{
enum {
BISECT_RESET = 1,
- BISECT_WRITE,
- CHECK_AND_SET_TERMS,
BISECT_NEXT_CHECK,
BISECT_TERMS,
BISECT_START,
BISECT_AUTOSTART,
BISECT_NEXT,
- BISECT_AUTO_NEXT,
- BISECT_STATE
+ BISECT_STATE,
+ BISECT_LOG,
+ BISECT_REPLAY,
+ BISECT_SKIP
} cmdmode = 0;
int res = 0, nolog = 0;
struct option options[] = {
OPT_CMDMODE(0, "bisect-reset", &cmdmode,
N_("reset the bisection state"), BISECT_RESET),
- OPT_CMDMODE(0, "bisect-write", &cmdmode,
- N_("write out the bisection state in BISECT_LOG"), BISECT_WRITE),
- OPT_CMDMODE(0, "check-and-set-terms", &cmdmode,
- N_("check and set terms in a bisection state"), CHECK_AND_SET_TERMS),
OPT_CMDMODE(0, "bisect-next-check", &cmdmode,
N_("check whether bad or good terms exist"), BISECT_NEXT_CHECK),
OPT_CMDMODE(0, "bisect-terms", &cmdmode,
@@ -934,10 +1060,14 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
N_("start the bisect session"), BISECT_START),
OPT_CMDMODE(0, "bisect-next", &cmdmode,
N_("find the next bisection commit"), BISECT_NEXT),
- OPT_CMDMODE(0, "bisect-auto-next", &cmdmode,
- N_("verify the next bisection state then checkout the next bisection commit"), BISECT_AUTO_NEXT),
OPT_CMDMODE(0, "bisect-state", &cmdmode,
N_("mark the state of ref (or refs)"), BISECT_STATE),
+ OPT_CMDMODE(0, "bisect-log", &cmdmode,
+ N_("list the bisection steps so far"), BISECT_LOG),
+ OPT_CMDMODE(0, "bisect-replay", &cmdmode,
+ N_("replay the bisection process from the given file"), BISECT_REPLAY),
+ OPT_CMDMODE(0, "bisect-skip", &cmdmode,
+ N_("skip some commits for checkout"), BISECT_SKIP),
OPT_BOOL(0, "no-log", &nolog,
N_("no log for BISECT_WRITE")),
OPT_END()
@@ -955,18 +1085,7 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
case BISECT_RESET:
if (argc > 1)
return error(_("--bisect-reset requires either no argument or a commit"));
- return !!bisect_reset(argc ? argv[0] : NULL);
- case BISECT_WRITE:
- if (argc != 4 && argc != 5)
- return error(_("--bisect-write requires either 4 or 5 arguments"));
- set_terms(&terms, argv[3], argv[2]);
- res = bisect_write(argv[0], argv[1], &terms, nolog);
- break;
- case CHECK_AND_SET_TERMS:
- if (argc != 3)
- return error(_("--check-and-set-terms requires 3 arguments"));
- set_terms(&terms, argv[2], argv[1]);
- res = check_and_set_terms(&terms, argv[0]);
+ res = bisect_reset(argc ? argv[0] : NULL);
break;
case BISECT_NEXT_CHECK:
if (argc != 2 && argc != 3)
@@ -989,17 +1108,26 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
get_terms(&terms);
res = bisect_next(&terms, prefix);
break;
- case BISECT_AUTO_NEXT:
- if (argc)
- return error(_("--bisect-auto-next requires 0 arguments"));
- get_terms(&terms);
- res = bisect_auto_next(&terms, prefix);
- break;
case BISECT_STATE:
set_terms(&terms, "bad", "good");
get_terms(&terms);
res = bisect_state(&terms, argv, argc);
break;
+ case BISECT_LOG:
+ if (argc)
+ return error(_("--bisect-log requires 0 arguments"));
+ res = bisect_log();
+ break;
+ case BISECT_REPLAY:
+ if (argc != 1)
+ return error(_("no logfile given"));
+ set_terms(&terms, "bad", "good");
+ res = bisect_replay(&terms, argv[0]);
+ break;
+ case BISECT_SKIP:
+ set_terms(&terms, "bad", "good");
+ res = bisect_skip(&terms, argv, argc);
+ break;
default:
BUG("unknown subcommand %d", cmdmode);
}
diff --git a/builtin/blame.c b/builtin/blame.c
index 2c1c02c..641523f 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -425,13 +425,11 @@ static void setup_default_color_by_age(void)
parse_color_fields("blue,12 month ago,white,1 month ago,red");
}
-static void determine_line_heat(struct blame_entry *ent, const char **dest_color)
+static void determine_line_heat(struct commit_info *ci, const char **dest_color)
{
int i = 0;
- struct commit_info ci;
- get_commit_info(ent->suspect->commit, &ci, 1);
- while (i < colorfield_nr && ci.author_time > colorfield[i].hop)
+ while (i < colorfield_nr && ci->author_time > colorfield[i].hop)
i++;
*dest_color = colorfield[i].col;
@@ -453,7 +451,7 @@ static void emit_other(struct blame_scoreboard *sb, struct blame_entry *ent, int
cp = blame_nth_line(sb, ent->lno);
if (opt & OUTPUT_SHOW_AGE_WITH_COLOR) {
- determine_line_heat(ent, &default_color);
+ determine_line_heat(&ci, &default_color);
color = default_color;
reset = GIT_COLOR_RESET;
}
@@ -1151,7 +1149,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
sb.xdl_opts = xdl_opts;
sb.no_whole_file_rename = no_whole_file_rename;
- read_mailmap(&mailmap, NULL);
+ read_mailmap(&mailmap);
sb.found_guilty_entry = &found_guilty_entry;
sb.found_guilty_entry_data = π
diff --git a/builtin/branch.c b/builtin/branch.c
index 8c0b428..bcc00bc 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -202,6 +202,9 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
int remote_branch = 0;
struct strbuf bname = STRBUF_INIT;
unsigned allowed_interpret;
+ struct string_list refs_to_delete = STRING_LIST_INIT_DUP;
+ struct string_list_item *item;
+ int branch_name_pos;
switch (kinds) {
case FILTER_REFS_REMOTES:
@@ -219,6 +222,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
default:
die(_("cannot use -a with -d"));
}
+ branch_name_pos = strcspn(fmt, "%");
if (!force) {
head_rev = lookup_commit_reference(the_repository, &head_oid);
@@ -265,30 +269,35 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
goto next;
}
- if (delete_ref(NULL, name, is_null_oid(&oid) ? NULL : &oid,
- REF_NO_DEREF)) {
- error(remote_branch
- ? _("Error deleting remote-tracking branch '%s'")
- : _("Error deleting branch '%s'"),
- bname.buf);
- ret = 1;
- goto next;
- }
- if (!quiet) {
- printf(remote_branch
- ? _("Deleted remote-tracking branch %s (was %s).\n")
- : _("Deleted branch %s (was %s).\n"),
- bname.buf,
- (flags & REF_ISBROKEN) ? "broken"
- : (flags & REF_ISSYMREF) ? target
- : find_unique_abbrev(&oid, DEFAULT_ABBREV));
- }
- delete_branch_config(bname.buf);
+ item = string_list_append(&refs_to_delete, name);
+ item->util = xstrdup((flags & REF_ISBROKEN) ? "broken"
+ : (flags & REF_ISSYMREF) ? target
+ : find_unique_abbrev(&oid, DEFAULT_ABBREV));
next:
free(target);
}
+ if (delete_refs(NULL, &refs_to_delete, REF_NO_DEREF))
+ ret = 1;
+
+ for_each_string_list_item(item, &refs_to_delete) {
+ char *describe_ref = item->util;
+ char *name = item->string;
+ if (!ref_exists(name)) {
+ char *refname = name + branch_name_pos;
+ if (!quiet)
+ printf(remote_branch
+ ? _("Deleted remote-tracking branch %s (was %s).\n")
+ : _("Deleted branch %s (was %s).\n"),
+ name + branch_name_pos, describe_ref);
+
+ delete_branch_config(refname);
+ }
+ free(describe_ref);
+ }
+ string_list_clear(&refs_to_delete, 0);
+
free(name);
strbuf_release(&bname);
diff --git a/builtin/check-mailmap.c b/builtin/check-mailmap.c
index cdce144..7dc47e4 100644
--- a/builtin/check-mailmap.c
+++ b/builtin/check-mailmap.c
@@ -47,7 +47,7 @@ int cmd_check_mailmap(int argc, const char **argv, const char *prefix)
if (argc == 0 && !use_stdin)
die(_("no contacts specified"));
- read_mailmap(&mailmap, NULL);
+ read_mailmap(&mailmap);
for (i = 0; i < argc; ++i)
check_mailmap(&mailmap, argv[i]);
diff --git a/builtin/checkout-index.c b/builtin/checkout-index.c
index 4bbfc92..023e49e 100644
--- a/builtin/checkout-index.c
+++ b/builtin/checkout-index.c
@@ -23,22 +23,35 @@ static struct checkout state = CHECKOUT_INIT;
static void write_tempfile_record(const char *name, const char *prefix)
{
int i;
+ int have_tempname = 0;
if (CHECKOUT_ALL == checkout_stage) {
- for (i = 1; i < 4; i++) {
- if (i > 1)
- putchar(' ');
- if (topath[i][0])
- fputs(topath[i], stdout);
- else
- putchar('.');
- }
- } else
- fputs(topath[checkout_stage], stdout);
+ for (i = 1; i < 4; i++)
+ if (topath[i][0]) {
+ have_tempname = 1;
+ break;
+ }
- putchar('\t');
- write_name_quoted_relative(name, prefix, stdout,
- nul_term_line ? '\0' : '\n');
+ if (have_tempname) {
+ for (i = 1; i < 4; i++) {
+ if (i > 1)
+ putchar(' ');
+ if (topath[i][0])
+ fputs(topath[i], stdout);
+ else
+ putchar('.');
+ }
+ }
+ } else if (topath[checkout_stage][0]) {
+ have_tempname = 1;
+ fputs(topath[checkout_stage], stdout);
+ }
+
+ if (have_tempname) {
+ putchar('\t');
+ write_name_quoted_relative(name, prefix, stdout,
+ nul_term_line ? '\0' : '\n');
+ }
for (i = 0; i < 4; i++) {
topath[i][0] = 0;
diff --git a/builtin/checkout.c b/builtin/checkout.c
index c9ba23c..2d6550b 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -821,9 +821,6 @@ static int merge_working_tree(const struct checkout_opts *opts,
}
}
- if (!active_cache_tree)
- active_cache_tree = cache_tree();
-
if (!cache_tree_fully_valid(active_cache_tree))
cache_tree_update(&the_index, WRITE_TREE_SILENT | WRITE_TREE_REPAIR);
diff --git a/builtin/clean.c b/builtin/clean.c
index 687ab47..995053b 100644
--- a/builtin/clean.c
+++ b/builtin/clean.c
@@ -623,7 +623,7 @@ static int *list_and_choose(struct menu_opts *opts, struct menu_stuff *stuff)
nr += chosen[i];
}
- result = xcalloc(st_add(nr, 1), sizeof(int));
+ CALLOC_ARRAY(result, st_add(nr, 1));
for (i = 0; i < stuff->nr && j < nr; i++) {
if (chosen[i])
result[j++] = i;
diff --git a/builtin/clone.c b/builtin/clone.c
index e335734..51e844a 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -979,7 +979,8 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
int err = 0, complete_refs_before_fetch = 1;
int submodule_progress;
- struct strvec ref_prefixes = STRVEC_INIT;
+ struct transport_ls_refs_options transport_ls_refs_options =
+ TRANSPORT_LS_REFS_OPTIONS_INIT;
packet_trace_identity("clone");
@@ -1257,14 +1258,17 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
transport->smart_options->check_self_contained_and_connected = 1;
- strvec_push(&ref_prefixes, "HEAD");
- refspec_ref_prefixes(&remote->fetch, &ref_prefixes);
+ strvec_push(&transport_ls_refs_options.ref_prefixes, "HEAD");
+ refspec_ref_prefixes(&remote->fetch,
+ &transport_ls_refs_options.ref_prefixes);
if (option_branch)
- expand_ref_prefix(&ref_prefixes, option_branch);
+ expand_ref_prefix(&transport_ls_refs_options.ref_prefixes,
+ option_branch);
if (!option_no_tags)
- strvec_push(&ref_prefixes, "refs/tags/");
+ strvec_push(&transport_ls_refs_options.ref_prefixes,
+ "refs/tags/");
- refs = transport_get_remote_refs(transport, &ref_prefixes);
+ refs = transport_get_remote_refs(transport, &transport_ls_refs_options);
if (refs) {
int hash_algo = hash_algo_by_ptr(transport_get_hash_algo(transport));
@@ -1326,8 +1330,19 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
remote_head = NULL;
option_no_checkout = 1;
if (!option_bare) {
- const char *branch = git_default_branch_name(0);
- char *ref = xstrfmt("refs/heads/%s", branch);
+ const char *branch;
+ char *ref;
+
+ if (transport_ls_refs_options.unborn_head_target &&
+ skip_prefix(transport_ls_refs_options.unborn_head_target,
+ "refs/heads/", &branch)) {
+ ref = transport_ls_refs_options.unborn_head_target;
+ transport_ls_refs_options.unborn_head_target = NULL;
+ create_symref("HEAD", ref, reflog_msg.buf);
+ } else {
+ branch = git_default_branch_name(0);
+ ref = xstrfmt("refs/heads/%s", branch);
+ }
install_branch_config(0, branch, remote_name, ref);
free(ref);
@@ -1380,6 +1395,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
strbuf_release(&key);
junk_mode = JUNK_LEAVE_ALL;
- strvec_clear(&ref_prefixes);
+ strvec_clear(&transport_ls_refs_options.ref_prefixes);
+ free(transport_ls_refs_options.unborn_head_target);
return err;
}
diff --git a/builtin/commit.c b/builtin/commit.c
index 505fe60..739110c 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -1039,7 +1039,7 @@ static const char *find_author_by_nickname(const char *name)
av[++ac] = NULL;
setup_revisions(ac, av, &revs, NULL);
revs.mailmap = &mailmap;
- read_mailmap(revs.mailmap, NULL);
+ read_mailmap(revs.mailmap);
if (prepare_revision_walk(&revs))
die(_("revision walk setup failed"));
diff --git a/builtin/describe.c b/builtin/describe.c
index 7668591..40482d8 100644
--- a/builtin/describe.c
+++ b/builtin/describe.c
@@ -194,7 +194,7 @@ static int get_name(const char *path, const struct object_id *oid, int flag, voi
}
/* Is it annotated? */
- if (!peel_ref(path, &peeled)) {
+ if (!peel_iterated_oid(oid, &peeled)) {
is_annotated = !oideq(oid, &peeled);
} else {
oidcpy(&peeled, oid);
diff --git a/builtin/diff-files.c b/builtin/diff-files.c
index 1e352dd..70103c4 100644
--- a/builtin/diff-files.c
+++ b/builtin/diff-files.c
@@ -7,6 +7,7 @@
#include "cache.h"
#include "config.h"
#include "diff.h"
+#include "diff-merges.h"
#include "commit.h"
#include "revision.h"
#include "builtin.h"
@@ -35,7 +36,7 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix)
*/
rev.diffopt.ita_invisible_in_index = 1;
- precompose_argv(argc, argv);
+ prefix = precompose_argv_prefix(argc, argv, prefix);
argc = setup_revisions(argc, argv, &rev, NULL);
while (1 < argc && argv[1][0] == '-') {
@@ -53,6 +54,7 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix)
}
if (!rev.diffopt.output_format)
rev.diffopt.output_format = DIFF_FORMAT_RAW;
+ rev.diffopt.rotate_to_strict = 1;
/*
* Make sure there are NO revision (i.e. pending object) parameter,
@@ -69,9 +71,9 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix)
* was not asked to. "diff-files -c -p" should not densify
* (the user should ask with "diff-files --cc" explicitly).
*/
- if (rev.max_count == -1 && !rev.combine_merges &&
+ if (rev.max_count == -1 &&
(rev.diffopt.output_format & DIFF_FORMAT_PATCH))
- rev.combine_merges = rev.dense_combined_merges = 1;
+ diff_merges_set_dense_combined_if_unset(&rev);
if (read_cache_preload(&rev.diffopt.pathspec) < 0) {
perror("read_cache_preload");
diff --git a/builtin/diff-index.c b/builtin/diff-index.c
index 7f5281c..176fe7f 100644
--- a/builtin/diff-index.c
+++ b/builtin/diff-index.c
@@ -25,7 +25,7 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix)
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
repo_init_revisions(the_repository, &rev, prefix);
rev.abbrev = 0;
- precompose_argv(argc, argv);
+ prefix = precompose_argv_prefix(argc, argv, prefix);
argc = setup_revisions(argc, argv, &rev, NULL);
for (i = 1; i < argc; i++) {
@@ -41,6 +41,8 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix)
if (!rev.diffopt.output_format)
rev.diffopt.output_format = DIFF_FORMAT_RAW;
+ rev.diffopt.rotate_to_strict = 1;
+
/*
* Make sure there is one revision (i.e. pending object),
* and there is no revision filtering parameters.
diff --git a/builtin/diff-tree.c b/builtin/diff-tree.c
index 9fc95e9..f33d30d 100644
--- a/builtin/diff-tree.c
+++ b/builtin/diff-tree.c
@@ -126,7 +126,7 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)
memset(&s_r_opt, 0, sizeof(s_r_opt));
s_r_opt.tweak = diff_tree_tweak_rev;
- precompose_argv(argc, argv);
+ prefix = precompose_argv_prefix(argc, argv, prefix);
argc = setup_revisions(argc, argv, opt, &s_r_opt);
memset(&w, 0, sizeof(w));
@@ -156,6 +156,8 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)
if (merge_base && opt->pending.nr != 2)
die(_("--merge-base only works with two commits"));
+ opt->diffopt.rotate_to_strict = 1;
+
/*
* NOTE! We expect "a..b" to expand to "^a b" but it is
* perfectly valid for revision range parser to yield "b ^a",
@@ -192,6 +194,7 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)
int saved_nrl = 0;
int saved_dcctc = 0;
+ opt->diffopt.rotate_to_strict = 0;
if (opt->diffopt.detect_rename) {
if (!the_index.cache)
repo_read_index(the_repository);
diff --git a/builtin/diff.c b/builtin/diff.c
index 780c338..617b9a4 100644
--- a/builtin/diff.c
+++ b/builtin/diff.c
@@ -13,6 +13,7 @@
#include "blob.h"
#include "tag.h"
#include "diff.h"
+#include "diff-merges.h"
#include "diffcore.h"
#include "revision.h"
#include "log-tree.h"
@@ -216,8 +217,8 @@ static int builtin_diff_combined(struct rev_info *revs,
if (argc > 1)
usage(builtin_diff_usage);
- if (!revs->dense_combined_merges && !revs->combine_merges)
- revs->dense_combined_merges = revs->combine_merges = 1;
+ diff_merges_set_dense_combined_if_unset(revs);
+
for (i = 1; i < ents; i++)
oid_array_append(&parents, &ent[i].item->oid);
diff_tree_combined(&ent[0].item->oid, &parents, revs);
@@ -265,9 +266,9 @@ static int builtin_diff_files(struct rev_info *revs, int argc, const char **argv
* dense one, --cc can be explicitly asked for, or just rely
* on the default).
*/
- if (revs->max_count == -1 && !revs->combine_merges &&
+ if (revs->max_count == -1 &&
(revs->diffopt.output_format & DIFF_FORMAT_PATCH))
- revs->combine_merges = revs->dense_combined_merges = 1;
+ diff_merges_set_dense_combined_if_unset(revs);
setup_work_tree();
if (read_cache_preload(&revs->diffopt.pathspec) < 0) {
@@ -452,7 +453,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
init_diff_ui_defaults();
git_config(git_diff_ui_config, NULL);
- precompose_argv(argc, argv);
+ prefix = precompose_argv_prefix(argc, argv, prefix);
repo_init_revisions(the_repository, &rev, prefix);
@@ -490,6 +491,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
}
rev.diffopt.flags.recursive = 1;
+ rev.diffopt.rotate_to_strict = 1;
setup_diff_pager(&rev.diffopt);
diff --git a/builtin/fast-import.c b/builtin/fast-import.c
index dd4d09c..3afa81c 100644
--- a/builtin/fast-import.c
+++ b/builtin/fast-import.c
@@ -3322,7 +3322,7 @@ static void option_rewrite_submodules(const char *arg, struct string_list *list)
die(_("Expected format name:filename for submodule rewrite option"));
*f = '\0';
f++;
- ms = xcalloc(1, sizeof(*ms));
+ CALLOC_ARRAY(ms, 1);
fp = fopen(f, "r");
if (!fp)
@@ -3519,9 +3519,9 @@ int cmd_fast_import(int argc, const char **argv, const char *prefix)
alloc_objects(object_entry_alloc);
strbuf_init(&command_buf, 0);
- atom_table = xcalloc(atom_table_sz, sizeof(struct atom_str*));
- branch_table = xcalloc(branch_table_sz, sizeof(struct branch*));
- avail_tree_table = xcalloc(avail_tree_table_sz, sizeof(struct avail_tree_content*));
+ CALLOC_ARRAY(atom_table, atom_table_sz);
+ CALLOC_ARRAY(branch_table, branch_table_sz);
+ CALLOC_ARRAY(avail_tree_table, avail_tree_table_sz);
marks = mem_pool_calloc(&fi_mem_pool, 1, sizeof(struct mark_set));
hashmap_init(&object_table, object_entry_hashcmp, NULL, 0);
diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c
index 58b7c1f..c2d96f4 100644
--- a/builtin/fetch-pack.c
+++ b/builtin/fetch-pack.c
@@ -220,7 +220,8 @@ int cmd_fetch_pack(int argc, const char **argv, const char *prefix)
version = discover_version(&reader);
switch (version) {
case protocol_v2:
- get_remote_refs(fd[1], &reader, &ref, 0, NULL, NULL, args.stateless_rpc);
+ get_remote_refs(fd[1], &reader, &ref, 0, NULL, NULL,
+ args.stateless_rpc);
break;
case protocol_v1:
case protocol_v0:
diff --git a/builtin/fetch.c b/builtin/fetch.c
index ecf8537..0b90de8 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -63,6 +63,7 @@ static int enable_auto_gc = 1;
static int tags = TAGS_DEFAULT, unshallow, update_shallow, deepen;
static int max_jobs = -1, submodule_fetch_jobs_config = -1;
static int fetch_parallel_config = 1;
+static int atomic_fetch;
static enum transport_family family;
static const char *depth;
static const char *deepen_since;
@@ -144,6 +145,8 @@ static struct option builtin_fetch_options[] = {
N_("set upstream for git pull/fetch")),
OPT_BOOL('a', "append", &append,
N_("append to .git/FETCH_HEAD instead of overwriting")),
+ OPT_BOOL(0, "atomic", &atomic_fetch,
+ N_("use atomic transaction to update references")),
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 reference"), 0),
@@ -583,13 +586,14 @@ static struct ref *get_ref_map(struct remote *remote,
static int s_update_ref(const char *action,
struct ref *ref,
+ struct ref_transaction *transaction,
int check_old)
{
char *msg;
char *rla = getenv("GIT_REFLOG_ACTION");
- struct ref_transaction *transaction;
+ struct ref_transaction *our_transaction = NULL;
struct strbuf err = STRBUF_INIT;
- int ret, df_conflict = 0;
+ int ret;
if (dry_run)
return 0;
@@ -597,31 +601,47 @@ static int s_update_ref(const char *action,
rla = default_rla.buf;
msg = xstrfmt("%s: %s", rla, action);
- transaction = ref_transaction_begin(&err);
- if (!transaction ||
- ref_transaction_update(transaction, ref->name,
- &ref->new_oid,
- check_old ? &ref->old_oid : NULL,
- 0, msg, &err))
- goto fail;
-
- ret = ref_transaction_commit(transaction, &err);
- if (ret) {
- df_conflict = (ret == TRANSACTION_NAME_CONFLICT);
- goto fail;
+ /*
+ * If no transaction was passed to us, we manage the transaction
+ * ourselves. Otherwise, we trust the caller to handle the transaction
+ * lifecycle.
+ */
+ if (!transaction) {
+ transaction = our_transaction = ref_transaction_begin(&err);
+ if (!transaction) {
+ ret = STORE_REF_ERROR_OTHER;
+ goto out;
+ }
}
- ref_transaction_free(transaction);
+ ret = ref_transaction_update(transaction, ref->name, &ref->new_oid,
+ check_old ? &ref->old_oid : NULL,
+ 0, msg, &err);
+ if (ret) {
+ ret = STORE_REF_ERROR_OTHER;
+ goto out;
+ }
+
+ if (our_transaction) {
+ switch (ref_transaction_commit(our_transaction, &err)) {
+ case 0:
+ break;
+ case TRANSACTION_NAME_CONFLICT:
+ ret = STORE_REF_ERROR_DF_CONFLICT;
+ goto out;
+ default:
+ ret = STORE_REF_ERROR_OTHER;
+ goto out;
+ }
+ }
+
+out:
+ ref_transaction_free(our_transaction);
+ if (ret)
+ error("%s", err.buf);
strbuf_release(&err);
free(msg);
- return 0;
-fail:
- ref_transaction_free(transaction);
- error("%s", err.buf);
- strbuf_release(&err);
- free(msg);
- return df_conflict ? STORE_REF_ERROR_DF_CONFLICT
- : STORE_REF_ERROR_OTHER;
+ return ret;
}
static int refcol_width = 10;
@@ -759,6 +779,7 @@ static void format_display(struct strbuf *display, char code,
}
static int update_local_ref(struct ref *ref,
+ struct ref_transaction *transaction,
const char *remote,
const struct ref *remote_ref,
struct strbuf *display,
@@ -799,7 +820,7 @@ static int update_local_ref(struct ref *ref,
starts_with(ref->name, "refs/tags/")) {
if (force || ref->force) {
int r;
- r = s_update_ref("updating tag", ref, 0);
+ r = s_update_ref("updating tag", ref, transaction, 0);
format_display(display, r ? '!' : 't', _("[tag update]"),
r ? _("unable to update local ref") : NULL,
remote, pretty_ref, summary_width);
@@ -836,7 +857,7 @@ static int update_local_ref(struct ref *ref,
what = _("[new ref]");
}
- r = s_update_ref(msg, ref, 0);
+ r = s_update_ref(msg, ref, transaction, 0);
format_display(display, r ? '!' : '*', what,
r ? _("unable to update local ref") : NULL,
remote, pretty_ref, summary_width);
@@ -858,7 +879,7 @@ static int update_local_ref(struct ref *ref,
strbuf_add_unique_abbrev(&quickref, ¤t->object.oid, DEFAULT_ABBREV);
strbuf_addstr(&quickref, "..");
strbuf_add_unique_abbrev(&quickref, &ref->new_oid, DEFAULT_ABBREV);
- r = s_update_ref("fast-forward", ref, 1);
+ r = s_update_ref("fast-forward", ref, transaction, 1);
format_display(display, r ? '!' : ' ', quickref.buf,
r ? _("unable to update local ref") : NULL,
remote, pretty_ref, summary_width);
@@ -870,7 +891,7 @@ static int update_local_ref(struct ref *ref,
strbuf_add_unique_abbrev(&quickref, ¤t->object.oid, DEFAULT_ABBREV);
strbuf_addstr(&quickref, "...");
strbuf_add_unique_abbrev(&quickref, &ref->new_oid, DEFAULT_ABBREV);
- r = s_update_ref("forced-update", ref, 1);
+ r = s_update_ref("forced-update", ref, transaction, 1);
format_display(display, r ? '!' : '+', quickref.buf,
r ? _("unable to update local ref") : _("forced update"),
remote, pretty_ref, summary_width);
@@ -897,6 +918,89 @@ static int iterate_ref_map(void *cb_data, struct object_id *oid)
return 0;
}
+struct fetch_head {
+ FILE *fp;
+ struct strbuf buf;
+};
+
+static int open_fetch_head(struct fetch_head *fetch_head)
+{
+ const char *filename = git_path_fetch_head(the_repository);
+
+ if (write_fetch_head) {
+ fetch_head->fp = fopen(filename, "a");
+ if (!fetch_head->fp)
+ return error_errno(_("cannot open %s"), filename);
+ strbuf_init(&fetch_head->buf, 0);
+ } else {
+ fetch_head->fp = NULL;
+ }
+
+ return 0;
+}
+
+static void append_fetch_head(struct fetch_head *fetch_head,
+ const struct object_id *old_oid,
+ enum fetch_head_status fetch_head_status,
+ const char *note,
+ const char *url, size_t url_len)
+{
+ char old_oid_hex[GIT_MAX_HEXSZ + 1];
+ const char *merge_status_marker;
+ size_t i;
+
+ if (!fetch_head->fp)
+ return;
+
+ switch (fetch_head_status) {
+ case FETCH_HEAD_NOT_FOR_MERGE:
+ merge_status_marker = "not-for-merge";
+ break;
+ case FETCH_HEAD_MERGE:
+ merge_status_marker = "";
+ break;
+ default:
+ /* do not write anything to FETCH_HEAD */
+ return;
+ }
+
+ strbuf_addf(&fetch_head->buf, "%s\t%s\t%s",
+ oid_to_hex_r(old_oid_hex, old_oid), merge_status_marker, note);
+ for (i = 0; i < url_len; ++i)
+ if ('\n' == url[i])
+ strbuf_addstr(&fetch_head->buf, "\\n");
+ else
+ strbuf_addch(&fetch_head->buf, url[i]);
+ strbuf_addch(&fetch_head->buf, '\n');
+
+ /*
+ * When using an atomic fetch, we do not want to update FETCH_HEAD if
+ * any of the reference updates fails. We thus have to write all
+ * updates to a buffer first and only commit it as soon as all
+ * references have been successfully updated.
+ */
+ if (!atomic_fetch) {
+ strbuf_write(&fetch_head->buf, fetch_head->fp);
+ strbuf_reset(&fetch_head->buf);
+ }
+}
+
+static void commit_fetch_head(struct fetch_head *fetch_head)
+{
+ if (!fetch_head->fp || !atomic_fetch)
+ return;
+ strbuf_write(&fetch_head->buf, fetch_head->fp);
+}
+
+static void close_fetch_head(struct fetch_head *fetch_head)
+{
+ if (!fetch_head->fp)
+ return;
+
+ fclose(fetch_head->fp);
+ strbuf_release(&fetch_head->buf);
+}
+
static const char warn_show_forced_updates[] =
N_("Fetch normally indicates which branches had a forced update,\n"
"but that check has been disabled. To re-enable, use '--show-forced-updates'\n"
@@ -909,22 +1013,20 @@ N_("It took %.2f seconds to check forced updates. You can use\n"
static int store_updated_refs(const char *raw_url, const char *remote_name,
int connectivity_checked, struct ref *ref_map)
{
- FILE *fp;
+ struct fetch_head fetch_head;
struct commit *commit;
int url_len, i, rc = 0;
- struct strbuf note = STRBUF_INIT;
+ struct strbuf note = STRBUF_INIT, err = STRBUF_INIT;
+ struct ref_transaction *transaction = NULL;
const char *what, *kind;
struct ref *rm;
char *url;
- const char *filename = (!write_fetch_head
- ? "/dev/null"
- : git_path_fetch_head(the_repository));
int want_status;
int summary_width = transport_summary_width(ref_map);
- fp = fopen(filename, "a");
- if (!fp)
- return error_errno(_("cannot open %s"), filename);
+ rc = open_fetch_head(&fetch_head);
+ if (rc)
+ return -1;
if (raw_url)
url = transport_anonymize_url(raw_url);
@@ -941,6 +1043,14 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
}
}
+ if (atomic_fetch) {
+ transaction = ref_transaction_begin(&err);
+ if (!transaction) {
+ error("%s", err.buf);
+ goto abort;
+ }
+ }
+
prepare_format_display(ref_map);
/*
@@ -953,7 +1063,6 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
want_status++) {
for (rm = ref_map; rm; rm = rm->next) {
struct ref *ref = NULL;
- const char *merge_status_marker = "";
if (rm->status == REF_STATUS_REJECT_SHALLOW) {
if (want_status == FETCH_HEAD_MERGE)
@@ -1011,31 +1120,15 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
strbuf_addf(¬e, "%s ", kind);
strbuf_addf(¬e, "'%s' of ", what);
}
- switch (rm->fetch_head_status) {
- case FETCH_HEAD_NOT_FOR_MERGE:
- merge_status_marker = "not-for-merge";
- /* fall-through */
- case FETCH_HEAD_MERGE:
- fprintf(fp, "%s\t%s\t%s",
- oid_to_hex(&rm->old_oid),
- merge_status_marker,
- note.buf);
- for (i = 0; i < url_len; ++i)
- if ('\n' == url[i])
- fputs("\\n", fp);
- else
- fputc(url[i], fp);
- fputc('\n', fp);
- break;
- default:
- /* do not write anything to FETCH_HEAD */
- break;
- }
+
+ append_fetch_head(&fetch_head, &rm->old_oid,
+ rm->fetch_head_status,
+ note.buf, url, url_len);
strbuf_reset(¬e);
if (ref) {
- rc |= update_local_ref(ref, what, rm, ¬e,
- summary_width);
+ rc |= update_local_ref(ref, transaction, what,
+ rm, ¬e, summary_width);
free(ref);
} else if (write_fetch_head || dry_run) {
/*
@@ -1060,6 +1153,17 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
}
}
+ if (!rc && transaction) {
+ rc = ref_transaction_commit(transaction, &err);
+ if (rc) {
+ error("%s", err.buf);
+ goto abort;
+ }
+ }
+
+ if (!rc)
+ commit_fetch_head(&fetch_head);
+
if (rc & STORE_REF_ERROR_DF_CONFLICT)
error(_("some local refs could not be updated; try running\n"
" 'git remote prune %s' to remove any old, conflicting "
@@ -1076,8 +1180,10 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
abort:
strbuf_release(¬e);
+ strbuf_release(&err);
+ ref_transaction_free(transaction);
free(url);
- fclose(fp);
+ close_fetch_head(&fetch_head);
return rc;
}
@@ -1349,7 +1455,8 @@ static int do_fetch(struct transport *transport,
int autotags = (transport->remote->fetch_tags == 1);
int retcode = 0;
const struct ref *remote_refs;
- struct strvec ref_prefixes = STRVEC_INIT;
+ struct transport_ls_refs_options transport_ls_refs_options =
+ TRANSPORT_LS_REFS_OPTIONS_INIT;
int must_list_refs = 1;
if (tags == TAGS_DEFAULT) {
@@ -1369,7 +1476,7 @@ static int do_fetch(struct transport *transport,
if (rs->nr) {
int i;
- refspec_ref_prefixes(rs, &ref_prefixes);
+ refspec_ref_prefixes(rs, &transport_ls_refs_options.ref_prefixes);
/*
* We can avoid listing refs if all of them are exact
@@ -1383,22 +1490,25 @@ static int do_fetch(struct transport *transport,
}
}
} else if (transport->remote && transport->remote->fetch.nr)
- refspec_ref_prefixes(&transport->remote->fetch, &ref_prefixes);
+ refspec_ref_prefixes(&transport->remote->fetch,
+ &transport_ls_refs_options.ref_prefixes);
if (tags == TAGS_SET || tags == TAGS_DEFAULT) {
must_list_refs = 1;
- if (ref_prefixes.nr)
- strvec_push(&ref_prefixes, "refs/tags/");
+ if (transport_ls_refs_options.ref_prefixes.nr)
+ strvec_push(&transport_ls_refs_options.ref_prefixes,
+ "refs/tags/");
}
if (must_list_refs) {
trace2_region_enter("fetch", "remote_refs", the_repository);
- remote_refs = transport_get_remote_refs(transport, &ref_prefixes);
+ remote_refs = transport_get_remote_refs(transport,
+ &transport_ls_refs_options);
trace2_region_leave("fetch", "remote_refs", the_repository);
} else
remote_refs = NULL;
- strvec_clear(&ref_prefixes);
+ strvec_clear(&transport_ls_refs_options.ref_prefixes);
ref_map = get_ref_map(transport->remote, remote_refs, rs,
tags, &autotags);
@@ -1887,6 +1997,10 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
die(_("--filter can only be used with the remote "
"configured in extensions.partialclone"));
+ if (atomic_fetch)
+ die(_("--atomic can only be used when fetching "
+ "from one remote"));
+
if (stdin_refspecs)
die(_("--stdin can only be used when fetching "
"from one remote"));
diff --git a/builtin/fsck.c b/builtin/fsck.c
index fbf26ca..821e779 100644
--- a/builtin/fsck.c
+++ b/builtin/fsck.c
@@ -73,25 +73,7 @@ static const char *printable_type(const struct object_id *oid,
static int fsck_config(const char *var, const char *value, void *cb)
{
- if (strcmp(var, "fsck.skiplist") == 0) {
- const char *path;
- struct strbuf sb = STRBUF_INIT;
-
- if (git_config_pathname(&path, var, value))
- return 1;
- strbuf_addf(&sb, "skiplist=%s", path);
- free((char *)path);
- fsck_set_msg_types(&fsck_obj_options, sb.buf);
- strbuf_release(&sb);
- return 0;
- }
-
- if (skip_prefix(var, "fsck.", &var)) {
- fsck_set_msg_type(&fsck_obj_options, var, value);
- return 0;
- }
-
- return git_default_config(var, value, cb);
+ return fsck_config_internal(var, value, cb, &fsck_obj_options);
}
static int objerror(struct object *obj, const char *err)
diff --git a/builtin/gc.c b/builtin/gc.c
index 64f2b52..ef7226d 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -54,7 +54,6 @@ static const char *prune_worktrees_expire = "3.months.ago";
static unsigned long big_pack_threshold;
static unsigned long max_delta_cache_size = DEFAULT_DELTA_CACHE_SIZE;
-static struct strvec pack_refs_cmd = STRVEC_INIT;
static struct strvec reflog = STRVEC_INIT;
static struct strvec repack = STRVEC_INIT;
static struct strvec prune = STRVEC_INIT;
@@ -163,6 +162,15 @@ static void gc_config(void)
git_config(git_default_config, NULL);
}
+struct maintenance_run_opts;
+static int maintenance_task_pack_refs(MAYBE_UNUSED struct maintenance_run_opts *opts)
+{
+ struct strvec pack_refs_cmd = STRVEC_INIT;
+ strvec_pushl(&pack_refs_cmd, "pack-refs", "--all", "--prune", NULL);
+
+ return run_command_v_opt(pack_refs_cmd.v, RUN_GIT_CMD);
+}
+
static int too_many_loose_objects(void)
{
/*
@@ -301,7 +309,7 @@ static uint64_t estimate_repack_memory(struct packed_git *pack)
/* and then obj_hash[], underestimated in fact */
heap += sizeof(struct object *) * nr_objects;
/* revindex is used also */
- heap += sizeof(struct revindex_entry) * nr_objects;
+ heap += (sizeof(off_t) + sizeof(uint32_t)) * nr_objects;
/*
* read_sha1_file() (either at delta calculation phase, or
* writing phase) also fills up the delta base cache
@@ -518,8 +526,8 @@ static void gc_before_repack(void)
if (done++)
return;
- if (pack_refs && run_command_v_opt(pack_refs_cmd.v, RUN_GIT_CMD))
- die(FAILED_RUN, pack_refs_cmd.v[0]);
+ if (pack_refs && maintenance_task_pack_refs(NULL))
+ die(FAILED_RUN, "pack-refs");
if (prune_reflogs && run_command_v_opt(reflog.v, RUN_GIT_CMD))
die(FAILED_RUN, reflog.v[0]);
@@ -556,7 +564,6 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
if (argc == 2 && !strcmp(argv[1], "-h"))
usage_with_options(builtin_gc_usage, builtin_gc_options);
- strvec_pushl(&pack_refs_cmd, "pack-refs", "--all", "--prune", NULL);
strvec_pushl(&reflog, "reflog", "expire", "--all", NULL);
strvec_pushl(&repack, "repack", "-d", "-l", NULL);
strvec_pushl(&prune, "prune", "--expire", NULL);
@@ -769,7 +776,7 @@ static int dfs_on_ref(const char *refname,
struct commit_list *stack = NULL;
struct commit *commit;
- if (!peel_ref(refname, &peeled))
+ if (!peel_iterated_oid(oid, &peeled))
oid = &peeled;
if (oid_object_info(the_repository, oid, NULL) != OBJ_COMMIT)
return 0;
@@ -897,6 +904,12 @@ static int maintenance_task_prefetch(struct maintenance_run_opts *opts)
struct string_list_item *item;
struct string_list remotes = STRING_LIST_INIT_DUP;
+ git_config_set_multivar_gently("log.excludedecoration",
+ "refs/prefetch/",
+ "refs/prefetch/",
+ CONFIG_FLAGS_FIXED_VALUE |
+ CONFIG_FLAGS_MULTI_REPLACE);
+
if (for_each_remote(append_remote, &remotes)) {
error(_("failed to fill remotes"));
result = 1;
@@ -1218,6 +1231,7 @@ enum maintenance_task_label {
TASK_INCREMENTAL_REPACK,
TASK_GC,
TASK_COMMIT_GRAPH,
+ TASK_PACK_REFS,
/* Leave as final value */
TASK__COUNT
@@ -1249,6 +1263,11 @@ static struct maintenance_task tasks[] = {
maintenance_task_commit_graph,
should_write_commit_graph,
},
+ [TASK_PACK_REFS] = {
+ "pack-refs",
+ maintenance_task_pack_refs,
+ NULL,
+ },
};
static int compare_tasks_by_selection(const void *a_, const void *b_)
@@ -1333,6 +1352,8 @@ static void initialize_maintenance_strategy(void)
tasks[TASK_INCREMENTAL_REPACK].schedule = SCHEDULE_DAILY;
tasks[TASK_LOOSE_OBJECTS].enabled = 1;
tasks[TASK_LOOSE_OBJECTS].schedule = SCHEDULE_DAILY;
+ tasks[TASK_PACK_REFS].enabled = 1;
+ tasks[TASK_PACK_REFS].schedule = SCHEDULE_WEEKLY;
}
}
@@ -1440,11 +1461,23 @@ static int maintenance_run(int argc, const char **argv, const char *prefix)
return maintenance_run_tasks(&opts);
}
+static char *get_maintpath(void)
+{
+ struct strbuf sb = STRBUF_INIT;
+ const char *p = the_repository->worktree ?
+ the_repository->worktree : the_repository->gitdir;
+
+ strbuf_realpath(&sb, p, 1);
+ return strbuf_detach(&sb, NULL);
+}
+
static int maintenance_register(void)
{
+ int rc;
char *config_value;
struct child_process config_set = CHILD_PROCESS_INIT;
struct child_process config_get = CHILD_PROCESS_INIT;
+ char *maintpath = get_maintpath();
/* Disable foreground maintenance */
git_config_set("maintenance.auto", "false");
@@ -1457,74 +1490,408 @@ static int maintenance_register(void)
config_get.git_cmd = 1;
strvec_pushl(&config_get.args, "config", "--global", "--get",
- "--fixed-value", "maintenance.repo",
- the_repository->worktree ? the_repository->worktree
- : the_repository->gitdir,
- NULL);
+ "--fixed-value", "maintenance.repo", maintpath, NULL);
config_get.out = -1;
- if (start_command(&config_get))
- return error(_("failed to run 'git config'"));
+ if (start_command(&config_get)) {
+ rc = error(_("failed to run 'git config'"));
+ goto done;
+ }
/* We already have this value in our config! */
- if (!finish_command(&config_get))
- return 0;
+ if (!finish_command(&config_get)) {
+ rc = 0;
+ goto done;
+ }
config_set.git_cmd = 1;
strvec_pushl(&config_set.args, "config", "--add", "--global", "maintenance.repo",
- the_repository->worktree ? the_repository->worktree
- : the_repository->gitdir,
- NULL);
+ maintpath, NULL);
- return run_command(&config_set);
+ rc = run_command(&config_set);
+
+done:
+ free(maintpath);
+ return rc;
}
static int maintenance_unregister(void)
{
+ int rc;
struct child_process config_unset = CHILD_PROCESS_INIT;
+ char *maintpath = get_maintpath();
config_unset.git_cmd = 1;
strvec_pushl(&config_unset.args, "config", "--global", "--unset",
- "--fixed-value", "maintenance.repo",
- the_repository->worktree ? the_repository->worktree
- : the_repository->gitdir,
- NULL);
+ "--fixed-value", "maintenance.repo", maintpath, NULL);
- return run_command(&config_unset);
+ rc = run_command(&config_unset);
+ free(maintpath);
+ return rc;
+}
+
+static const char *get_frequency(enum schedule_priority schedule)
+{
+ switch (schedule) {
+ case SCHEDULE_HOURLY:
+ return "hourly";
+ case SCHEDULE_DAILY:
+ return "daily";
+ case SCHEDULE_WEEKLY:
+ return "weekly";
+ default:
+ BUG("invalid schedule %d", schedule);
+ }
+}
+
+static char *launchctl_service_name(const char *frequency)
+{
+ struct strbuf label = STRBUF_INIT;
+ strbuf_addf(&label, "org.git-scm.git.%s", frequency);
+ return strbuf_detach(&label, NULL);
+}
+
+static char *launchctl_service_filename(const char *name)
+{
+ char *expanded;
+ struct strbuf filename = STRBUF_INIT;
+ strbuf_addf(&filename, "~/Library/LaunchAgents/%s.plist", name);
+
+ expanded = expand_user_path(filename.buf, 1);
+ if (!expanded)
+ die(_("failed to expand path '%s'"), filename.buf);
+
+ strbuf_release(&filename);
+ return expanded;
+}
+
+static char *launchctl_get_uid(void)
+{
+ return xstrfmt("gui/%d", getuid());
+}
+
+static int launchctl_boot_plist(int enable, const char *filename, const char *cmd)
+{
+ int result;
+ struct child_process child = CHILD_PROCESS_INIT;
+ char *uid = launchctl_get_uid();
+
+ strvec_split(&child.args, cmd);
+ if (enable)
+ strvec_push(&child.args, "bootstrap");
+ else
+ strvec_push(&child.args, "bootout");
+ strvec_push(&child.args, uid);
+ strvec_push(&child.args, filename);
+
+ child.no_stderr = 1;
+ child.no_stdout = 1;
+
+ if (start_command(&child))
+ die(_("failed to start launchctl"));
+
+ result = finish_command(&child);
+
+ free(uid);
+ return result;
+}
+
+static int launchctl_remove_plist(enum schedule_priority schedule, const char *cmd)
+{
+ const char *frequency = get_frequency(schedule);
+ char *name = launchctl_service_name(frequency);
+ char *filename = launchctl_service_filename(name);
+ int result = launchctl_boot_plist(0, filename, cmd);
+ unlink(filename);
+ free(filename);
+ free(name);
+ return result;
+}
+
+static int launchctl_remove_plists(const char *cmd)
+{
+ return launchctl_remove_plist(SCHEDULE_HOURLY, cmd) ||
+ launchctl_remove_plist(SCHEDULE_DAILY, cmd) ||
+ launchctl_remove_plist(SCHEDULE_WEEKLY, cmd);
+}
+
+static int launchctl_schedule_plist(const char *exec_path, enum schedule_priority schedule, const char *cmd)
+{
+ FILE *plist;
+ int i;
+ const char *preamble, *repeat;
+ const char *frequency = get_frequency(schedule);
+ char *name = launchctl_service_name(frequency);
+ char *filename = launchctl_service_filename(name);
+
+ if (safe_create_leading_directories(filename))
+ die(_("failed to create directories for '%s'"), filename);
+ plist = xfopen(filename, "w");
+
+ preamble = "<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
+ "<plist version=\"1.0\">"
+ "<dict>\n"
+ "<key>Label</key><string>%s</string>\n"
+ "<key>ProgramArguments</key>\n"
+ "<array>\n"
+ "<string>%s/git</string>\n"
+ "<string>--exec-path=%s</string>\n"
+ "<string>for-each-repo</string>\n"
+ "<string>--config=maintenance.repo</string>\n"
+ "<string>maintenance</string>\n"
+ "<string>run</string>\n"
+ "<string>--schedule=%s</string>\n"
+ "</array>\n"
+ "<key>StartCalendarInterval</key>\n"
+ "<array>\n";
+ fprintf(plist, preamble, name, exec_path, exec_path, frequency);
+
+ switch (schedule) {
+ case SCHEDULE_HOURLY:
+ repeat = "<dict>\n"
+ "<key>Hour</key><integer>%d</integer>\n"
+ "<key>Minute</key><integer>0</integer>\n"
+ "</dict>\n";
+ for (i = 1; i <= 23; i++)
+ fprintf(plist, repeat, i);
+ break;
+
+ case SCHEDULE_DAILY:
+ repeat = "<dict>\n"
+ "<key>Day</key><integer>%d</integer>\n"
+ "<key>Hour</key><integer>0</integer>\n"
+ "<key>Minute</key><integer>0</integer>\n"
+ "</dict>\n";
+ for (i = 1; i <= 6; i++)
+ fprintf(plist, repeat, i);
+ break;
+
+ case SCHEDULE_WEEKLY:
+ fprintf(plist,
+ "<dict>\n"
+ "<key>Day</key><integer>0</integer>\n"
+ "<key>Hour</key><integer>0</integer>\n"
+ "<key>Minute</key><integer>0</integer>\n"
+ "</dict>\n");
+ break;
+
+ default:
+ /* unreachable */
+ break;
+ }
+ fprintf(plist, "</array>\n</dict>\n</plist>\n");
+ fclose(plist);
+
+ /* bootout might fail if not already running, so ignore */
+ launchctl_boot_plist(0, filename, cmd);
+ if (launchctl_boot_plist(1, filename, cmd))
+ die(_("failed to bootstrap service %s"), filename);
+
+ free(filename);
+ free(name);
+ return 0;
+}
+
+static int launchctl_add_plists(const char *cmd)
+{
+ const char *exec_path = git_exec_path();
+
+ return launchctl_schedule_plist(exec_path, SCHEDULE_HOURLY, cmd) ||
+ launchctl_schedule_plist(exec_path, SCHEDULE_DAILY, cmd) ||
+ launchctl_schedule_plist(exec_path, SCHEDULE_WEEKLY, cmd);
+}
+
+static int launchctl_update_schedule(int run_maintenance, int fd, const char *cmd)
+{
+ if (run_maintenance)
+ return launchctl_add_plists(cmd);
+ else
+ return launchctl_remove_plists(cmd);
+}
+
+static char *schtasks_task_name(const char *frequency)
+{
+ struct strbuf label = STRBUF_INIT;
+ strbuf_addf(&label, "Git Maintenance (%s)", frequency);
+ return strbuf_detach(&label, NULL);
+}
+
+static int schtasks_remove_task(enum schedule_priority schedule, const char *cmd)
+{
+ int result;
+ struct strvec args = STRVEC_INIT;
+ const char *frequency = get_frequency(schedule);
+ char *name = schtasks_task_name(frequency);
+
+ strvec_split(&args, cmd);
+ strvec_pushl(&args, "/delete", "/tn", name, "/f", NULL);
+
+ result = run_command_v_opt(args.v, 0);
+
+ strvec_clear(&args);
+ free(name);
+ return result;
+}
+
+static int schtasks_remove_tasks(const char *cmd)
+{
+ return schtasks_remove_task(SCHEDULE_HOURLY, cmd) ||
+ schtasks_remove_task(SCHEDULE_DAILY, cmd) ||
+ schtasks_remove_task(SCHEDULE_WEEKLY, cmd);
+}
+
+static int schtasks_schedule_task(const char *exec_path, enum schedule_priority schedule, const char *cmd)
+{
+ int result;
+ struct child_process child = CHILD_PROCESS_INIT;
+ const char *xml;
+ struct tempfile *tfile;
+ const char *frequency = get_frequency(schedule);
+ char *name = schtasks_task_name(frequency);
+ struct strbuf tfilename = STRBUF_INIT;
+
+ strbuf_addf(&tfilename, "%s/schedule_%s_XXXXXX",
+ get_git_common_dir(), frequency);
+ tfile = xmks_tempfile(tfilename.buf);
+ strbuf_release(&tfilename);
+
+ if (!fdopen_tempfile(tfile, "w"))
+ die(_("failed to create temp xml file"));
+
+ xml = "<?xml version=\"1.0\" ?>\n"
+ "<Task version=\"1.4\" xmlns=\"http://schemas.microsoft.com/windows/2004/02/mit/task\">\n"
+ "<Triggers>\n"
+ "<CalendarTrigger>\n";
+ fputs(xml, tfile->fp);
+
+ switch (schedule) {
+ case SCHEDULE_HOURLY:
+ fprintf(tfile->fp,
+ "<StartBoundary>2020-01-01T01:00:00</StartBoundary>\n"
+ "<Enabled>true</Enabled>\n"
+ "<ScheduleByDay>\n"
+ "<DaysInterval>1</DaysInterval>\n"
+ "</ScheduleByDay>\n"
+ "<Repetition>\n"
+ "<Interval>PT1H</Interval>\n"
+ "<Duration>PT23H</Duration>\n"
+ "<StopAtDurationEnd>false</StopAtDurationEnd>\n"
+ "</Repetition>\n");
+ break;
+
+ case SCHEDULE_DAILY:
+ fprintf(tfile->fp,
+ "<StartBoundary>2020-01-01T00:00:00</StartBoundary>\n"
+ "<Enabled>true</Enabled>\n"
+ "<ScheduleByWeek>\n"
+ "<DaysOfWeek>\n"
+ "<Monday />\n"
+ "<Tuesday />\n"
+ "<Wednesday />\n"
+ "<Thursday />\n"
+ "<Friday />\n"
+ "<Saturday />\n"
+ "</DaysOfWeek>\n"
+ "<WeeksInterval>1</WeeksInterval>\n"
+ "</ScheduleByWeek>\n");
+ break;
+
+ case SCHEDULE_WEEKLY:
+ fprintf(tfile->fp,
+ "<StartBoundary>2020-01-01T00:00:00</StartBoundary>\n"
+ "<Enabled>true</Enabled>\n"
+ "<ScheduleByWeek>\n"
+ "<DaysOfWeek>\n"
+ "<Sunday />\n"
+ "</DaysOfWeek>\n"
+ "<WeeksInterval>1</WeeksInterval>\n"
+ "</ScheduleByWeek>\n");
+ break;
+
+ default:
+ break;
+ }
+
+ xml = "</CalendarTrigger>\n"
+ "</Triggers>\n"
+ "<Principals>\n"
+ "<Principal id=\"Author\">\n"
+ "<LogonType>InteractiveToken</LogonType>\n"
+ "<RunLevel>LeastPrivilege</RunLevel>\n"
+ "</Principal>\n"
+ "</Principals>\n"
+ "<Settings>\n"
+ "<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>\n"
+ "<Enabled>true</Enabled>\n"
+ "<Hidden>true</Hidden>\n"
+ "<UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>\n"
+ "<WakeToRun>false</WakeToRun>\n"
+ "<ExecutionTimeLimit>PT72H</ExecutionTimeLimit>\n"
+ "<Priority>7</Priority>\n"
+ "</Settings>\n"
+ "<Actions Context=\"Author\">\n"
+ "<Exec>\n"
+ "<Command>\"%s\\git.exe\"</Command>\n"
+ "<Arguments>--exec-path=\"%s\" for-each-repo --config=maintenance.repo maintenance run --schedule=%s</Arguments>\n"
+ "</Exec>\n"
+ "</Actions>\n"
+ "</Task>\n";
+ fprintf(tfile->fp, xml, exec_path, exec_path, frequency);
+ strvec_split(&child.args, cmd);
+ strvec_pushl(&child.args, "/create", "/tn", name, "/f", "/xml",
+ get_tempfile_path(tfile), NULL);
+ close_tempfile_gently(tfile);
+
+ child.no_stdout = 1;
+ child.no_stderr = 1;
+
+ if (start_command(&child))
+ die(_("failed to start schtasks"));
+ result = finish_command(&child);
+
+ delete_tempfile(&tfile);
+ free(name);
+ return result;
+}
+
+static int schtasks_schedule_tasks(const char *cmd)
+{
+ const char *exec_path = git_exec_path();
+
+ return schtasks_schedule_task(exec_path, SCHEDULE_HOURLY, cmd) ||
+ schtasks_schedule_task(exec_path, SCHEDULE_DAILY, cmd) ||
+ schtasks_schedule_task(exec_path, SCHEDULE_WEEKLY, cmd);
+}
+
+static int schtasks_update_schedule(int run_maintenance, int fd, const char *cmd)
+{
+ if (run_maintenance)
+ return schtasks_schedule_tasks(cmd);
+ else
+ return schtasks_remove_tasks(cmd);
}
#define BEGIN_LINE "# BEGIN GIT MAINTENANCE SCHEDULE"
#define END_LINE "# END GIT MAINTENANCE SCHEDULE"
-static int update_background_schedule(int run_maintenance)
+static int crontab_update_schedule(int run_maintenance, int fd, const char *cmd)
{
int result = 0;
int in_old_region = 0;
struct child_process crontab_list = CHILD_PROCESS_INIT;
struct child_process crontab_edit = CHILD_PROCESS_INIT;
FILE *cron_list, *cron_in;
- const char *crontab_name;
struct strbuf line = STRBUF_INIT;
- struct lock_file lk;
- char *lock_path = xstrfmt("%s/schedule", the_repository->objects->odb->path);
- if (hold_lock_file_for_update(&lk, lock_path, LOCK_NO_DEREF) < 0)
- return error(_("another process is scheduling background maintenance"));
-
- crontab_name = getenv("GIT_TEST_CRONTAB");
- if (!crontab_name)
- crontab_name = "crontab";
-
- strvec_split(&crontab_list.args, crontab_name);
+ strvec_split(&crontab_list.args, cmd);
strvec_push(&crontab_list.args, "-l");
crontab_list.in = -1;
- crontab_list.out = dup(get_lock_file_fd(&lk));
+ crontab_list.out = dup(fd);
crontab_list.git_cmd = 0;
- if (start_command(&crontab_list)) {
- result = error(_("failed to run 'crontab -l'; your system might not support 'cron'"));
- goto cleanup;
- }
+ if (start_command(&crontab_list))
+ return error(_("failed to run 'crontab -l'; your system might not support 'cron'"));
/* Ignore exit code, as an empty crontab will return error. */
finish_command(&crontab_list);
@@ -1533,17 +1900,15 @@ static int update_background_schedule(int run_maintenance)
* Read from the .lock file, filtering out the old
* schedule while appending the new schedule.
*/
- cron_list = fdopen(get_lock_file_fd(&lk), "r");
+ cron_list = fdopen(fd, "r");
rewind(cron_list);
- strvec_split(&crontab_edit.args, crontab_name);
+ strvec_split(&crontab_edit.args, cmd);
crontab_edit.in = -1;
crontab_edit.git_cmd = 0;
- if (start_command(&crontab_edit)) {
- result = error(_("failed to run 'crontab'; your system might not support 'cron'"));
- goto cleanup;
- }
+ if (start_command(&crontab_edit))
+ return error(_("failed to run 'crontab'; your system might not support 'cron'"));
cron_in = fdopen(crontab_edit.in, "w");
if (!cron_in) {
@@ -1587,14 +1952,54 @@ static int update_background_schedule(int run_maintenance)
close(crontab_edit.in);
done_editing:
- if (finish_command(&crontab_edit)) {
+ if (finish_command(&crontab_edit))
result = error(_("'crontab' died"));
- goto cleanup;
- }
- fclose(cron_list);
+ else
+ fclose(cron_list);
+ return result;
+}
-cleanup:
+#if defined(__APPLE__)
+static const char platform_scheduler[] = "launchctl";
+#elif defined(GIT_WINDOWS_NATIVE)
+static const char platform_scheduler[] = "schtasks";
+#else
+static const char platform_scheduler[] = "crontab";
+#endif
+
+static int update_background_schedule(int enable)
+{
+ int result;
+ const char *scheduler = platform_scheduler;
+ const char *cmd = scheduler;
+ char *testing;
+ struct lock_file lk;
+ char *lock_path = xstrfmt("%s/schedule", the_repository->objects->odb->path);
+
+ testing = xstrdup_or_null(getenv("GIT_TEST_MAINT_SCHEDULER"));
+ if (testing) {
+ char *sep = strchr(testing, ':');
+ if (!sep)
+ die("GIT_TEST_MAINT_SCHEDULER unparseable: %s", testing);
+ *sep = '\0';
+ scheduler = testing;
+ cmd = sep + 1;
+ }
+
+ if (hold_lock_file_for_update(&lk, lock_path, LOCK_NO_DEREF) < 0)
+ return error(_("another process is scheduling background maintenance"));
+
+ if (!strcmp(scheduler, "launchctl"))
+ result = launchctl_update_schedule(enable, get_lock_file_fd(&lk), cmd);
+ else if (!strcmp(scheduler, "schtasks"))
+ result = schtasks_update_schedule(enable, get_lock_file_fd(&lk), cmd);
+ else if (!strcmp(scheduler, "crontab"))
+ result = crontab_update_schedule(enable, get_lock_file_fd(&lk), cmd);
+ else
+ die("unknown background scheduler: %s", scheduler);
+
rollback_lock_file(&lk);
+ free(testing);
return result;
}
diff --git a/builtin/grep.c b/builtin/grep.c
index ca259af..ccd8d08 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c
@@ -211,13 +211,11 @@ static void start_threads(struct grep_opt *opt)
strbuf_init(&todo[i].out, 0);
}
- threads = xcalloc(num_threads, sizeof(*threads));
+ CALLOC_ARRAY(threads, num_threads);
for (i = 0; i < num_threads; i++) {
int err;
struct grep_opt *o = grep_opt_dup(opt);
o->output = strbuf_out;
- if (i)
- o->debug = 0;
compile_grep_patterns(o);
err = pthread_create(&threads[i], NULL, run, o);
@@ -508,6 +506,10 @@ static int grep_cache(struct grep_opt *opt,
for (nr = 0; nr < repo->index->cache_nr; nr++) {
const struct cache_entry *ce = repo->index->cache[nr];
+
+ if (!cached && ce_skip_worktree(ce))
+ continue;
+
strbuf_setlen(&name, name_base_len);
strbuf_addstr(&name, ce->name);
@@ -520,8 +522,7 @@ static int grep_cache(struct grep_opt *opt,
* cache entry are identical, even if worktree file has
* been modified, so use cache version instead
*/
- if (cached || (ce->ce_flags & CE_VALID) ||
- ce_skip_worktree(ce)) {
+ if (cached || (ce->ce_flags & CE_VALID)) {
if (ce_stage(ce) || ce_intent_to_add(ce))
continue;
hit |= grep_oid(opt, &ce->oid, name.buf,
@@ -936,9 +937,6 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
N_("indicate hit with exit status without output")),
OPT_BOOL(0, "all-match", &opt.all_match,
N_("show only matches from files that match all patterns")),
- OPT_SET_INT_F(0, "debug", &opt.debug,
- N_("show parse tree for grep expression"),
- 1, PARSE_OPT_HIDDEN),
OPT_GROUP(""),
{ OPTION_STRING, 'O', "open-files-in-pager", &show_in_pager,
N_("pager"), N_("show matching files in the pager"),
@@ -1157,6 +1155,9 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
if (!use_index && (untracked || cached))
die(_("--cached or --untracked cannot be used with --no-index"));
+ if (untracked && cached)
+ die(_("--untracked cannot be used with --cached"));
+
if (!use_index || untracked) {
int use_exclude = (opt_exclude < 0) ? use_index : !!opt_exclude;
hit = grep_directory(&opt, &pathspec, use_exclude, use_index);
diff --git a/builtin/index-pack.c b/builtin/index-pack.c
index 4b8d86e..2189968 100644
--- a/builtin/index-pack.c
+++ b/builtin/index-pack.c
@@ -17,7 +17,7 @@
#include "promisor-remote.h"
static const char index_pack_usage[] =
-"git index-pack [-v] [-o <index-file>] [--keep | --keep=<msg>] [--verify] [--strict] (<pack-file> | --stdin [--fix-thin] [<pack-file>])";
+"git index-pack [-v] [-o <index-file>] [--keep | --keep=<msg>] [--[no-]rev-index] [--verify] [--strict] (<pack-file> | --stdin [--fix-thin] [<pack-file>])";
struct object_entry {
struct pack_idx_entry idx;
@@ -185,7 +185,7 @@ static void init_thread(void)
if (show_stat)
pthread_mutex_init(&deepest_delta_mutex, NULL);
pthread_key_create(&key, NULL);
- thread_data = xcalloc(nr_threads, sizeof(*thread_data));
+ CALLOC_ARRAY(thread_data, nr_threads);
for (i = 0; i < nr_threads; i++) {
thread_data[i].pack_fd = open(curr_pack, O_RDONLY);
if (thread_data[i].pack_fd == -1)
@@ -1436,15 +1436,15 @@ static void fix_unresolved_deltas(struct hashfile *f)
free(sorted_by_pos);
}
-static const char *derive_filename(const char *pack_name, const char *suffix,
- struct strbuf *buf)
+static const char *derive_filename(const char *pack_name, const char *strip,
+ const char *suffix, struct strbuf *buf)
{
size_t len;
- if (!strip_suffix(pack_name, ".pack", &len))
- die(_("packfile name '%s' does not end with '.pack'"),
- pack_name);
+ if (!strip_suffix(pack_name, strip, &len) || !len ||
+ pack_name[len - 1] != '.')
+ die(_("packfile name '%s' does not end with '.%s'"),
+ pack_name, strip);
strbuf_add(buf, pack_name, len);
- strbuf_addch(buf, '.');
strbuf_addstr(buf, suffix);
return buf->buf;
}
@@ -1459,7 +1459,7 @@ static void write_special_file(const char *suffix, const char *msg,
int msg_len = strlen(msg);
if (pack_name)
- filename = derive_filename(pack_name, suffix, &name_buf);
+ filename = derive_filename(pack_name, "pack", suffix, &name_buf);
else
filename = odb_pack_name(&name_buf, hash, suffix);
@@ -1484,12 +1484,14 @@ static void write_special_file(const char *suffix, const char *msg,
static void final(const char *final_pack_name, const char *curr_pack_name,
const char *final_index_name, const char *curr_index_name,
+ const char *final_rev_index_name, const char *curr_rev_index_name,
const char *keep_msg, const char *promisor_msg,
unsigned char *hash)
{
const char *report = "pack";
struct strbuf pack_name = STRBUF_INIT;
struct strbuf index_name = STRBUF_INIT;
+ struct strbuf rev_index_name = STRBUF_INIT;
int err;
if (!from_stdin) {
@@ -1524,6 +1526,16 @@ static void final(const char *final_pack_name, const char *curr_pack_name,
} else
chmod(final_index_name, 0444);
+ if (curr_rev_index_name) {
+ if (final_rev_index_name != curr_rev_index_name) {
+ if (!final_rev_index_name)
+ final_rev_index_name = odb_pack_name(&rev_index_name, hash, "rev");
+ if (finalize_object_file(curr_rev_index_name, final_rev_index_name))
+ die(_("cannot store reverse index file"));
+ } else
+ chmod(final_rev_index_name, 0444);
+ }
+
if (do_fsck_object) {
struct packed_git *p;
p = add_packed_git(final_index_name, strlen(final_index_name), 0);
@@ -1553,6 +1565,7 @@ static void final(const char *final_pack_name, const char *curr_pack_name,
}
}
+ strbuf_release(&rev_index_name);
strbuf_release(&index_name);
strbuf_release(&pack_name);
}
@@ -1578,6 +1591,12 @@ static int git_index_pack_config(const char *k, const char *v, void *cb)
}
return 0;
}
+ if (!strcmp(k, "pack.writereverseindex")) {
+ if (git_config_bool(k, v))
+ opts->flags |= WRITE_REV;
+ else
+ opts->flags &= ~WRITE_REV;
+ }
return git_default_config(k, v, cb);
}
@@ -1641,7 +1660,7 @@ static void read_idx_option(struct pack_idx_option *opts, const char *pack_name)
/*
* Get rid of the idx file as we do not need it anymore.
* NEEDSWORK: extract this bit from free_pack_by_name() in
- * sha1-file.c, perhaps? It shouldn't matter very much as we
+ * object-file.c, perhaps? It shouldn't matter very much as we
* know we haven't installed this pack (hence we never have
* read anything from it).
*/
@@ -1655,7 +1674,7 @@ static void show_pack_info(int stat_only)
unsigned long *chain_histogram = NULL;
if (deepest_delta)
- chain_histogram = xcalloc(deepest_delta, sizeof(unsigned long));
+ CALLOC_ARRAY(chain_histogram, deepest_delta);
for (i = 0; i < nr_objects; i++) {
struct object_entry *obj = &objects[i];
@@ -1693,14 +1712,32 @@ static void show_pack_info(int stat_only)
}
}
+static int print_dangling_gitmodules(struct fsck_options *o,
+ const struct object_id *oid,
+ enum object_type object_type,
+ int msg_type, const char *message)
+{
+ /*
+ * NEEDSWORK: Plumb the MSG_ID (from fsck.c) here and use it
+ * instead of relying on this string check.
+ */
+ if (starts_with(message, "gitmodulesMissing")) {
+ printf("%s\n", oid_to_hex(oid));
+ return 0;
+ }
+ return fsck_error_function(o, oid, object_type, msg_type, message);
+}
+
int cmd_index_pack(int argc, const char **argv, const char *prefix)
{
- int i, fix_thin_pack = 0, verify = 0, stat_only = 0;
+ int i, fix_thin_pack = 0, verify = 0, stat_only = 0, rev_index;
const char *curr_index;
- const char *index_name = NULL, *pack_name = NULL;
+ const char *curr_rev_index = NULL;
+ const char *index_name = NULL, *pack_name = NULL, *rev_index_name = NULL;
const char *keep_msg = NULL;
const char *promisor_msg = NULL;
struct strbuf index_name_buf = STRBUF_INIT;
+ struct strbuf rev_index_name_buf = STRBUF_INIT;
struct pack_idx_entry **idx_objects;
struct pack_idx_option opts;
unsigned char pack_hash[GIT_MAX_RAWSZ];
@@ -1727,6 +1764,11 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
if (prefix && chdir(prefix))
die(_("Cannot come back to cwd"));
+ if (git_env_bool(GIT_TEST_WRITE_REV_INDEX, 0))
+ rev_index = 1;
+ else
+ rev_index = !!(opts.flags & (WRITE_REV_VERIFY | WRITE_REV));
+
for (i = 1; i < argc; i++) {
const char *arg = argv[i];
@@ -1805,6 +1847,10 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
if (hash_algo == GIT_HASH_UNKNOWN)
die(_("unknown hash algorithm '%s'"), arg);
repo_set_hash_algo(the_repository, hash_algo);
+ } else if (!strcmp(arg, "--rev-index")) {
+ rev_index = 1;
+ } else if (!strcmp(arg, "--no-rev-index")) {
+ rev_index = 0;
} else
usage(index_pack_usage);
continue;
@@ -1824,7 +1870,16 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
if (from_stdin && hash_algo)
die(_("--object-format cannot be used with --stdin"));
if (!index_name && pack_name)
- index_name = derive_filename(pack_name, "idx", &index_name_buf);
+ index_name = derive_filename(pack_name, "pack", "idx", &index_name_buf);
+
+ opts.flags &= ~(WRITE_REV | WRITE_REV_VERIFY);
+ if (rev_index) {
+ opts.flags |= verify ? WRITE_REV_VERIFY : WRITE_REV;
+ if (index_name)
+ rev_index_name = derive_filename(index_name,
+ "idx", "rev",
+ &rev_index_name_buf);
+ }
if (verify) {
if (!index_name)
@@ -1857,10 +1912,10 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
curr_pack = open_pack_file(pack_name);
parse_pack_header();
- objects = xcalloc(st_add(nr_objects, 1), sizeof(struct object_entry));
+ CALLOC_ARRAY(objects, st_add(nr_objects, 1));
if (show_stat)
- obj_stat = xcalloc(st_add(nr_objects, 1), sizeof(struct object_stat));
- ofs_deltas = xcalloc(nr_objects, sizeof(struct ofs_delta_entry));
+ CALLOC_ARRAY(obj_stat, st_add(nr_objects, 1));
+ CALLOC_ARRAY(ofs_deltas, nr_objects);
parse_pack_objects(pack_hash);
if (report_end_of_input)
write_in_full(2, "\0", 1);
@@ -1878,25 +1933,38 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
for (i = 0; i < nr_objects; i++)
idx_objects[i] = &objects[i].idx;
curr_index = write_idx_file(index_name, idx_objects, nr_objects, &opts, pack_hash);
+ if (rev_index)
+ curr_rev_index = write_rev_file(rev_index_name, idx_objects,
+ nr_objects, pack_hash,
+ opts.flags);
free(idx_objects);
if (!verify)
final(pack_name, curr_pack,
index_name, curr_index,
+ rev_index_name, curr_rev_index,
keep_msg, promisor_msg,
pack_hash);
else
close(input_fd);
- if (do_fsck_object && fsck_finish(&fsck_options))
- die(_("fsck error in pack objects"));
+ if (do_fsck_object) {
+ struct fsck_options fo = fsck_options;
+
+ fo.error_func = print_dangling_gitmodules;
+ if (fsck_finish(&fo))
+ die(_("fsck error in pack objects"));
+ }
free(objects);
strbuf_release(&index_name_buf);
+ strbuf_release(&rev_index_name_buf);
if (pack_name == NULL)
free((void *) curr_pack);
if (index_name == NULL)
free((void *) curr_index);
+ if (rev_index_name == NULL)
+ free((void *) curr_rev_index);
/*
* Let the caller know this pack is not self contained
diff --git a/builtin/log.c b/builtin/log.c
index f23ccdb..f67b67d 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -12,6 +12,7 @@
#include "color.h"
#include "commit.h"
#include "diff.h"
+#include "diff-merges.h"
#include "revision.h"
#include "log-tree.h"
#include "builtin.h"
@@ -230,7 +231,7 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,
if (mailmap) {
rev->mailmap = xcalloc(1, sizeof(struct string_list));
- read_mailmap(rev->mailmap, NULL);
+ read_mailmap(rev->mailmap);
}
if (rev->pretty_given && rev->commit_format == CMIT_FMT_RAW) {
@@ -306,10 +307,11 @@ static struct itimerval early_output_timer;
static void log_show_early(struct rev_info *revs, struct commit_list *list)
{
- int i = revs->early_output, close_file = revs->diffopt.close_file;
+ int i = revs->early_output;
int show_header = 1;
+ int no_free = revs->diffopt.no_free;
- revs->diffopt.close_file = 0;
+ revs->diffopt.no_free = 0;
sort_in_topological_order(&list, revs->sort_order);
while (list && i) {
struct commit *commit = list->item;
@@ -326,8 +328,8 @@ static void log_show_early(struct rev_info *revs, struct commit_list *list)
case commit_ignore:
break;
case commit_error:
- if (close_file)
- fclose(revs->diffopt.file);
+ revs->diffopt.no_free = no_free;
+ diff_free(&revs->diffopt);
return;
}
list = list->next;
@@ -335,8 +337,8 @@ static void log_show_early(struct rev_info *revs, struct commit_list *list)
/* Did we already get enough commits for the early output? */
if (!i) {
- if (close_file)
- fclose(revs->diffopt.file);
+ revs->diffopt.no_free = 0;
+ diff_free(&revs->diffopt);
return;
}
@@ -400,7 +402,7 @@ static int cmd_log_walk(struct rev_info *rev)
{
struct commit *commit;
int saved_nrl = 0;
- int saved_dcctc = 0, close_file = rev->diffopt.close_file;
+ int saved_dcctc = 0;
if (rev->early_output)
setup_early_output();
@@ -416,7 +418,7 @@ static int cmd_log_walk(struct rev_info *rev)
* and HAS_CHANGES being accumulated in rev->diffopt, so be careful to
* retain that state information if replacing rev->diffopt in this loop
*/
- rev->diffopt.close_file = 0;
+ rev->diffopt.no_free = 1;
while ((commit = get_revision(rev)) != NULL) {
if (!log_tree_commit(rev, commit) && rev->max_count >= 0)
/*
@@ -441,8 +443,8 @@ static int cmd_log_walk(struct rev_info *rev)
}
rev->diffopt.degraded_cc_to_c = saved_dcctc;
rev->diffopt.needed_rename_limit = saved_nrl;
- if (close_file)
- fclose(rev->diffopt.file);
+ rev->diffopt.no_free = 0;
+ diff_free(&rev->diffopt);
if (rev->diffopt.output_format & DIFF_FORMAT_CHECKDIFF &&
rev->diffopt.flags.check_failed) {
@@ -607,15 +609,10 @@ static int show_tree_object(const struct object_id *oid,
static void show_setup_revisions_tweak(struct rev_info *rev,
struct setup_revision_opt *opt)
{
- if (rev->ignore_merges < 0) {
- /* There was no "-m" variant on the command line */
- rev->ignore_merges = 0;
- if (!rev->first_parent_only && !rev->combine_merges) {
- /* No "--first-parent", "-c", or "--cc" */
- rev->combine_merges = 1;
- rev->dense_combined_merges = 1;
- }
- }
+ if (rev->first_parent_only)
+ diff_merges_default_to_first_parent(rev);
+ else
+ diff_merges_default_to_dense_combined(rev);
if (!rev->diffopt.output_format)
rev->diffopt.output_format = DIFF_FORMAT_PATCH;
}
@@ -736,12 +733,8 @@ static void log_setup_revisions_tweak(struct rev_info *rev,
rev->prune_data.nr == 1)
rev->diffopt.flags.follow_renames = 1;
- /* Turn --cc/-c into -p --cc/-c when -p was not given */
- if (!rev->diffopt.output_format && rev->combine_merges)
- rev->diffopt.output_format = DIFF_FORMAT_PATCH;
-
- if (rev->first_parent_only && rev->ignore_merges < 0)
- rev->ignore_merges = 0;
+ if (rev->first_parent_only)
+ diff_merges_default_to_first_parent(rev);
}
int cmd_log(int argc, const char **argv, const char *prefix)
@@ -1231,14 +1224,20 @@ static void make_cover_letter(struct rev_info *rev, int use_separate_file,
*/
struct diff_options opts;
struct strvec other_arg = STRVEC_INIT;
+ struct range_diff_options range_diff_opts = {
+ .creation_factor = rev->creation_factor,
+ .dual_color = 1,
+ .diffopt = &opts,
+ .other_arg = &other_arg
+ };
+
diff_setup(&opts);
opts.file = rev->diffopt.file;
opts.use_color = rev->diffopt.use_color;
diff_setup_done(&opts);
fprintf_ln(rev->diffopt.file, "%s", rev->rdiff_title);
get_notes_args(&other_arg, rev);
- show_range_diff(rev->rdiff1, rev->rdiff2,
- rev->creation_factor, 1, &opts, &other_arg);
+ show_range_diff(rev->rdiff1, rev->rdiff2, &range_diff_opts);
strvec_clear(&other_arg);
}
}
@@ -1680,7 +1679,7 @@ static void infer_range_diff_ranges(struct strbuf *r1,
struct commit *head)
{
const char *head_oid = oid_to_hex(&head->object.oid);
- int prev_is_range = !!strstr(prev, "..");
+ int prev_is_range = is_range_diff_range(prev);
if (prev_is_range)
strbuf_addstr(r1, prev);
@@ -1963,7 +1962,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
* file, but but we must instruct it not to close after each
* diff.
*/
- rev.diffopt.close_file = 0;
+ rev.diffopt.no_free = 1;
} else {
int saved;
diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index c8eae89..f6f9e48 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c
@@ -35,6 +35,7 @@ static int line_terminator = '\n';
static int debug_mode;
static int show_eol;
static int recurse_submodules;
+static int skipping_duplicates;
static const char *prefix;
static int max_prefix_len;
@@ -312,45 +313,59 @@ static void show_files(struct repository *repo, struct dir_struct *dir)
if (show_killed)
show_killed_files(repo->index, dir);
}
- if (show_cached || show_stage) {
- for (i = 0; i < repo->index->cache_nr; i++) {
- const struct cache_entry *ce = repo->index->cache[i];
- construct_fullname(&fullname, repo, ce);
+ if (!(show_cached || show_stage || show_deleted || show_modified))
+ return;
+ for (i = 0; i < repo->index->cache_nr; i++) {
+ const struct cache_entry *ce = repo->index->cache[i];
+ struct stat st;
+ int stat_err;
- if ((dir->flags & DIR_SHOW_IGNORED) &&
- !ce_excluded(dir, repo->index, fullname.buf, ce))
- continue;
- if (show_unmerged && !ce_stage(ce))
- continue;
- if (ce->ce_flags & CE_UPDATE)
- continue;
+ construct_fullname(&fullname, repo, ce);
+
+ if ((dir->flags & DIR_SHOW_IGNORED) &&
+ !ce_excluded(dir, repo->index, fullname.buf, ce))
+ continue;
+ if (ce->ce_flags & CE_UPDATE)
+ continue;
+ if ((show_cached || show_stage) &&
+ (!show_unmerged || ce_stage(ce))) {
show_ce(repo, dir, ce, fullname.buf,
ce_stage(ce) ? tag_unmerged :
(ce_skip_worktree(ce) ? tag_skip_worktree :
tag_cached));
+ if (skipping_duplicates)
+ goto skip_to_next_name;
}
- }
- if (show_deleted || show_modified) {
- for (i = 0; i < repo->index->cache_nr; i++) {
- const struct cache_entry *ce = repo->index->cache[i];
- struct stat st;
- int err;
- construct_fullname(&fullname, repo, ce);
+ if (!(show_deleted || show_modified))
+ continue;
+ if (ce_skip_worktree(ce))
+ continue;
+ stat_err = lstat(fullname.buf, &st);
+ if (stat_err && (errno != ENOENT && errno != ENOTDIR))
+ error_errno("cannot lstat '%s'", fullname.buf);
+ if (stat_err && show_deleted) {
+ show_ce(repo, dir, ce, fullname.buf, tag_removed);
+ if (skipping_duplicates)
+ goto skip_to_next_name;
+ }
+ if (show_modified &&
+ (stat_err || ie_modified(repo->index, ce, &st, 0))) {
+ show_ce(repo, dir, ce, fullname.buf, tag_modified);
+ if (skipping_duplicates)
+ goto skip_to_next_name;
+ }
+ continue;
- if ((dir->flags & DIR_SHOW_IGNORED) &&
- !ce_excluded(dir, repo->index, fullname.buf, ce))
- continue;
- if (ce->ce_flags & CE_UPDATE)
- continue;
- if (ce_skip_worktree(ce))
- continue;
- err = lstat(fullname.buf, &st);
- if (show_deleted && err)
- show_ce(repo, dir, ce, fullname.buf, tag_removed);
- if (show_modified && ie_modified(repo->index, ce, &st, 0))
- show_ce(repo, dir, ce, fullname.buf, tag_modified);
+skip_to_next_name:
+ {
+ int j;
+ struct cache_entry **cache = repo->index->cache;
+ for (j = i + 1; j < repo->index->cache_nr; j++)
+ if (strcmp(ce->name, cache[j]->name))
+ break;
+ i = j - 1; /* compensate for the for loop */
}
}
@@ -578,6 +593,8 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
N_("pretend that paths removed since <tree-ish> are still present")),
OPT__ABBREV(&abbrev),
OPT_BOOL(0, "debug", &debug_mode, N_("show debugging data")),
+ OPT_BOOL(0, "deduplicate", &skipping_duplicates,
+ N_("suppress duplicate entries")),
OPT_END()
};
@@ -617,6 +634,8 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
* you also show the stage information.
*/
show_stage = 1;
+ if (show_tag || show_stage)
+ skipping_duplicates = 0;
if (dir.exclude_per_dir)
exc_given = 1;
diff --git a/builtin/ls-remote.c b/builtin/ls-remote.c
index 092917e..abfa984 100644
--- a/builtin/ls-remote.c
+++ b/builtin/ls-remote.c
@@ -45,7 +45,8 @@ int cmd_ls_remote(int argc, const char **argv, const char *prefix)
int show_symref_target = 0;
const char *uploadpack = NULL;
const char **pattern = NULL;
- struct strvec ref_prefixes = STRVEC_INIT;
+ struct transport_ls_refs_options transport_options =
+ TRANSPORT_LS_REFS_OPTIONS_INIT;
int i;
struct string_list server_options = STRING_LIST_INIT_DUP;
@@ -87,16 +88,16 @@ int cmd_ls_remote(int argc, const char **argv, const char *prefix)
if (argc > 1) {
int i;
- pattern = xcalloc(argc, sizeof(const char *));
+ CALLOC_ARRAY(pattern, argc);
for (i = 1; i < argc; i++) {
pattern[i - 1] = xstrfmt("*/%s", argv[i]);
}
}
if (flags & REF_TAGS)
- strvec_push(&ref_prefixes, "refs/tags/");
+ strvec_push(&transport_options.ref_prefixes, "refs/tags/");
if (flags & REF_HEADS)
- strvec_push(&ref_prefixes, "refs/heads/");
+ strvec_push(&transport_options.ref_prefixes, "refs/heads/");
remote = remote_get(dest);
if (!remote) {
@@ -118,7 +119,7 @@ int cmd_ls_remote(int argc, const char **argv, const char *prefix)
if (server_options.nr)
transport->server_options = &server_options;
- ref = transport_get_remote_refs(transport, &ref_prefixes);
+ ref = transport_get_remote_refs(transport, &transport_options);
if (ref) {
int hash_algo = hash_algo_by_ptr(transport_get_hash_algo(transport));
repo_set_hash_algo(the_repository, hash_algo);
diff --git a/builtin/merge.c b/builtin/merge.c
index 1cff730..3886195 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -14,6 +14,7 @@
#include "lockfile.h"
#include "run-command.h"
#include "diff.h"
+#include "diff-merges.h"
#include "refs.h"
#include "refspec.h"
#include "commit.h"
@@ -209,7 +210,7 @@ static struct strategy *get_strategy(const char *name)
exit(1);
}
- ret = xcalloc(1, sizeof(struct strategy));
+ CALLOC_ARRAY(ret, 1);
ret->name = xstrdup(name);
ret->attr = NO_TRIVIAL;
return ret;
@@ -409,7 +410,7 @@ static void squash_message(struct commit *commit, struct commit_list *remotehead
printf(_("Squash commit -- not updating HEAD\n"));
repo_init_revisions(the_repository, &rev, NULL);
- rev.ignore_merges = 1;
+ diff_merges_suppress(&rev);
rev.commit_format = CMIT_FMT_MEDIUM;
commit->object.flags |= UNINTERESTING;
diff --git a/builtin/mktag.c b/builtin/mktag.c
index 4982d3a..41a399a 100644
--- a/builtin/mktag.c
+++ b/builtin/mktag.c
@@ -1,179 +1,110 @@
#include "builtin.h"
+#include "parse-options.h"
#include "tag.h"
#include "replace-object.h"
#include "object-store.h"
+#include "fsck.h"
+#include "config.h"
-/*
- * A signature file has a very simple fixed format: four lines
- * of "object <sha1>" + "type <typename>" + "tag <tagname>" +
- * "tagger <committer>", followed by a blank line, a free-form tag
- * message and a signature block that git itself doesn't care about,
- * but that can be verified with gpg or similar.
- *
- * The first four lines are guaranteed to be at least 83 bytes:
- * "object <sha1>\n" is 48 bytes, "type tag\n" at 9 bytes is the
- * shortest possible type-line, "tag .\n" at 6 bytes is the shortest
- * single-character-tag line, and "tagger . <> 0 +0000\n" at 20 bytes is
- * the shortest possible tagger-line.
- */
+static char const * const builtin_mktag_usage[] = {
+ N_("git mktag"),
+ NULL
+};
+static int option_strict = 1;
-/*
- * We refuse to tag something we can't verify. Just because.
- */
-static int verify_object(const struct object_id *oid, const char *expected_type)
+static struct fsck_options fsck_options = FSCK_OPTIONS_STRICT;
+
+static int mktag_config(const char *var, const char *value, void *cb)
{
- int ret = -1;
- enum object_type type;
- unsigned long size;
- void *buffer = read_object_file(oid, &type, &size);
- const struct object_id *repl = lookup_replace_object(the_repository, oid);
-
- if (buffer) {
- if (type == type_from_string(expected_type)) {
- ret = check_object_signature(the_repository, repl,
- buffer, size,
- expected_type);
- }
- free(buffer);
- }
- return ret;
+ return fsck_config_internal(var, value, cb, &fsck_options);
}
-static int verify_tag(char *buffer, unsigned long size)
+static int mktag_fsck_error_func(struct fsck_options *o,
+ const struct object_id *oid,
+ enum object_type object_type,
+ int msg_type, const char *message)
{
- int typelen;
- char type[20];
- struct object_id oid;
- const char *object, *type_line, *tag_line, *tagger_line, *lb, *rb, *p;
- size_t len;
+ switch (msg_type) {
+ case FSCK_WARN:
+ if (!option_strict) {
+ fprintf_ln(stderr, _("warning: tag input does not pass fsck: %s"), message);
+ return 0;
- if (size < 84)
- return error("wanna fool me ? you obviously got the size wrong !");
-
- buffer[size] = 0;
-
- /* Verify object line */
- object = buffer;
- if (memcmp(object, "object ", 7))
- return error("char%d: does not start with \"object \"", 0);
-
- if (parse_oid_hex(object + 7, &oid, &p))
- return error("char%d: could not get SHA1 hash", 7);
-
- /* Verify type line */
- type_line = p + 1;
- if (memcmp(type_line - 1, "\ntype ", 6))
- return error("char%d: could not find \"\\ntype \"", 47);
-
- /* Verify tag-line */
- tag_line = strchr(type_line, '\n');
- if (!tag_line)
- return error("char%"PRIuMAX": could not find next \"\\n\"",
- (uintmax_t) (type_line - buffer));
- tag_line++;
- if (memcmp(tag_line, "tag ", 4) || tag_line[4] == '\n')
- return error("char%"PRIuMAX": no \"tag \" found",
- (uintmax_t) (tag_line - buffer));
-
- /* Get the actual type */
- typelen = tag_line - type_line - strlen("type \n");
- if (typelen >= sizeof(type))
- return error("char%"PRIuMAX": type too long",
- (uintmax_t) (type_line+5 - buffer));
-
- memcpy(type, type_line+5, typelen);
- type[typelen] = 0;
-
- /* Verify that the object matches */
- if (verify_object(&oid, type))
- return error("char%d: could not verify object %s", 7, oid_to_hex(&oid));
-
- /* Verify the tag-name: we don't allow control characters or spaces in it */
- tag_line += 4;
- for (;;) {
- unsigned char c = *tag_line++;
- if (c == '\n')
- break;
- if (c > ' ')
- continue;
- return error("char%"PRIuMAX": could not verify tag name",
- (uintmax_t) (tag_line - buffer));
+ }
+ /* fallthrough */
+ case FSCK_ERROR:
+ /*
+ * We treat both warnings and errors as errors, things
+ * like missing "tagger" lines are "only" warnings
+ * under fsck, we've always considered them an error.
+ */
+ fprintf_ln(stderr, _("error: tag input does not pass fsck: %s"), message);
+ return 1;
+ default:
+ BUG(_("%d (FSCK_IGNORE?) should never trigger this callback"),
+ msg_type);
}
+}
- /* Verify the tagger line */
- tagger_line = tag_line;
+static int verify_object_in_tag(struct object_id *tagged_oid, int *tagged_type)
+{
+ int ret;
+ enum object_type type;
+ unsigned long size;
+ void *buffer;
+ const struct object_id *repl;
- if (memcmp(tagger_line, "tagger ", 7))
- return error("char%"PRIuMAX": could not find \"tagger \"",
- (uintmax_t) (tagger_line - buffer));
+ buffer = read_object_file(tagged_oid, &type, &size);
+ if (!buffer)
+ die(_("could not read tagged object '%s'"),
+ oid_to_hex(tagged_oid));
+ if (type != *tagged_type)
+ die(_("object '%s' tagged as '%s', but is a '%s' type"),
+ oid_to_hex(tagged_oid),
+ type_name(*tagged_type), type_name(type));
- /*
- * Check for correct form for name and email
- * i.e. " <" followed by "> " on _this_ line
- * No angle brackets within the name or email address fields.
- * No spaces within the email address field.
- */
- tagger_line += 7;
- if (!(lb = strstr(tagger_line, " <")) || !(rb = strstr(lb+2, "> ")) ||
- strpbrk(tagger_line, "<>\n") != lb+1 ||
- strpbrk(lb+2, "><\n ") != rb)
- return error("char%"PRIuMAX": malformed tagger field",
- (uintmax_t) (tagger_line - buffer));
+ repl = lookup_replace_object(the_repository, tagged_oid);
+ ret = check_object_signature(the_repository, repl,
+ buffer, size, type_name(*tagged_type));
+ free(buffer);
- /* Check for author name, at least one character, space is acceptable */
- if (lb == tagger_line)
- return error("char%"PRIuMAX": missing tagger name",
- (uintmax_t) (tagger_line - buffer));
-
- /* timestamp, 1 or more digits followed by space */
- tagger_line = rb + 2;
- if (!(len = strspn(tagger_line, "0123456789")))
- return error("char%"PRIuMAX": missing tag timestamp",
- (uintmax_t) (tagger_line - buffer));
- tagger_line += len;
- if (*tagger_line != ' ')
- return error("char%"PRIuMAX": malformed tag timestamp",
- (uintmax_t) (tagger_line - buffer));
- tagger_line++;
-
- /* timezone, 5 digits [+-]hhmm, max. 1400 */
- if (!((tagger_line[0] == '+' || tagger_line[0] == '-') &&
- strspn(tagger_line+1, "0123456789") == 4 &&
- tagger_line[5] == '\n' && atoi(tagger_line+1) <= 1400))
- return error("char%"PRIuMAX": malformed tag timezone",
- (uintmax_t) (tagger_line - buffer));
- tagger_line += 6;
-
- /* Verify the blank line separating the header from the body */
- if (*tagger_line != '\n')
- return error("char%"PRIuMAX": trailing garbage in tag header",
- (uintmax_t) (tagger_line - buffer));
-
- /* The actual stuff afterwards we don't care about.. */
- return 0;
+ return ret;
}
int cmd_mktag(int argc, const char **argv, const char *prefix)
{
+ static struct option builtin_mktag_options[] = {
+ OPT_BOOL(0, "strict", &option_strict,
+ N_("enable more strict checking")),
+ OPT_END(),
+ };
struct strbuf buf = STRBUF_INIT;
+ struct object_id tagged_oid;
+ int tagged_type;
struct object_id result;
- if (argc != 1)
- usage("git mktag");
+ argc = parse_options(argc, argv, NULL,
+ builtin_mktag_options,
+ builtin_mktag_usage, 0);
- if (strbuf_read(&buf, 0, 4096) < 0) {
- die_errno("could not read from stdin");
- }
+ if (strbuf_read(&buf, 0, 0) < 0)
+ die_errno(_("could not read from stdin"));
- /* Verify it for some basic sanity: it needs to start with
- "object <sha1>\ntype\ntagger " */
- if (verify_tag(buf.buf, buf.len) < 0)
- die("invalid tag signature file");
+ fsck_options.error_func = mktag_fsck_error_func;
+ fsck_set_msg_type(&fsck_options, "extraheaderentry", "warn");
+ /* config might set fsck.extraHeaderEntry=* again */
+ git_config(mktag_config, NULL);
+ if (fsck_tag_standalone(NULL, buf.buf, buf.len, &fsck_options,
+ &tagged_oid, &tagged_type))
+ die(_("tag on stdin did not pass our strict fsck check"));
+
+ if (verify_object_in_tag(&tagged_oid, &tagged_type))
+ die(_("tag on stdin did not refer to a valid object"));
if (write_object_file(buf.buf, buf.len, tag_type, &result) < 0)
- die("unable to write tag file");
+ die(_("unable to write tag file"));
strbuf_release(&buf);
- printf("%s\n", oid_to_hex(&result));
+ puts(oid_to_hex(&result));
return 0;
}
diff --git a/builtin/mv.c b/builtin/mv.c
index 7dac714..3fccdcb 100644
--- a/builtin/mv.c
+++ b/builtin/mv.c
@@ -221,7 +221,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
}
argc += last - first;
}
- } else if (!(ce = cache_file_exists(src, length, ignore_case))) {
+ } else if (!(ce = cache_file_exists(src, length, 0))) {
bad = _("not under version control");
} else if (ce_stage(ce)) {
bad = _("conflicted");
diff --git a/builtin/name-rev.c b/builtin/name-rev.c
index 725dd04..b221d30 100644
--- a/builtin/name-rev.c
+++ b/builtin/name-rev.c
@@ -7,7 +7,7 @@
#include "refs.h"
#include "parse-options.h"
#include "prio-queue.h"
-#include "sha1-lookup.h"
+#include "hash-lookup.h"
#include "commit-slab.h"
/*
@@ -390,10 +390,10 @@ static void name_tips(void)
}
}
-static const unsigned char *nth_tip_table_ent(size_t ix, void *table_)
+static const struct object_id *nth_tip_table_ent(size_t ix, const void *table_)
{
- struct tip_table_entry *table = table_;
- return table[ix].oid.hash;
+ const struct tip_table_entry *table = table_;
+ return &table[ix].oid;
}
static const char *get_exact_ref_match(const struct object *o)
@@ -408,8 +408,8 @@ static const char *get_exact_ref_match(const struct object *o)
tip_table.sorted = 1;
}
- found = sha1_pos(o->oid.hash, tip_table.table, tip_table.nr,
- nth_tip_table_ent);
+ found = oid_pos(&o->oid, tip_table.table, tip_table.nr,
+ nth_tip_table_ent);
if (0 <= found)
return tip_table.table[found].refname;
return NULL;
diff --git a/builtin/notes.c b/builtin/notes.c
index 2987c08..74bba39 100644
--- a/builtin/notes.c
+++ b/builtin/notes.c
@@ -373,7 +373,7 @@ static int list(int argc, const char **argv, const char *prefix)
git_notes_list_usage, 0);
if (1 < argc) {
- error(_("too many parameters"));
+ error(_("too many arguments"));
usage_with_options(git_notes_list_usage, options);
}
@@ -428,7 +428,7 @@ static int add(int argc, const char **argv, const char *prefix)
PARSE_OPT_KEEP_ARGV0);
if (2 < argc) {
- error(_("too many parameters"));
+ error(_("too many arguments"));
usage_with_options(git_notes_add_usage, options);
}
@@ -506,7 +506,7 @@ static int copy(int argc, const char **argv, const char *prefix)
if (from_stdin || rewrite_cmd) {
if (argc) {
- error(_("too many parameters"));
+ error(_("too many arguments"));
usage_with_options(git_notes_copy_usage, options);
} else {
return notes_copy_from_stdin(force, rewrite_cmd);
@@ -514,11 +514,11 @@ static int copy(int argc, const char **argv, const char *prefix)
}
if (argc < 1) {
- error(_("too few parameters"));
+ error(_("too few arguments"));
usage_with_options(git_notes_copy_usage, options);
}
if (2 < argc) {
- error(_("too many parameters"));
+ error(_("too many arguments"));
usage_with_options(git_notes_copy_usage, options);
}
@@ -595,7 +595,7 @@ static int append_edit(int argc, const char **argv, const char *prefix)
PARSE_OPT_KEEP_ARGV0);
if (2 < argc) {
- error(_("too many parameters"));
+ error(_("too many arguments"));
usage_with_options(usage, options);
}
@@ -662,7 +662,7 @@ static int show(int argc, const char **argv, const char *prefix)
0);
if (1 < argc) {
- error(_("too many parameters"));
+ error(_("too many arguments"));
usage_with_options(git_notes_show_usage, options);
}
@@ -730,7 +730,7 @@ static int merge_commit(struct notes_merge_options *o)
else
oidclr(&parent_oid);
- t = xcalloc(1, sizeof(struct notes_tree));
+ CALLOC_ARRAY(t, 1);
init_notes(t, "NOTES_MERGE_PARTIAL", combine_notes_overwrite, 0);
o->local_ref = local_ref_to_free =
@@ -812,7 +812,7 @@ static int merge(int argc, const char **argv, const char *prefix)
error(_("must specify a notes ref to merge"));
usage_with_options(git_notes_merge_usage, options);
} else if (!do_merge && argc) {
- error(_("too many parameters"));
+ error(_("too many arguments"));
usage_with_options(git_notes_merge_usage, options);
}
@@ -960,7 +960,7 @@ static int prune(int argc, const char **argv, const char *prefix)
0);
if (argc) {
- error(_("too many parameters"));
+ error(_("too many arguments"));
usage_with_options(git_notes_prune_usage, options);
}
@@ -982,7 +982,7 @@ static int get_ref(int argc, const char **argv, const char *prefix)
git_notes_get_ref_usage, 0);
if (argc) {
- error(_("too many parameters"));
+ error(_("too many arguments"));
usage_with_options(git_notes_get_ref_usage, options);
}
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index 5617c01..4bb6026 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -419,7 +419,7 @@ static off_t write_reuse_object(struct hashfile *f, struct object_entry *entry,
{
struct packed_git *p = IN_PACK(entry);
struct pack_window *w_curs = NULL;
- struct revindex_entry *revidx;
+ uint32_t pos;
off_t offset;
enum object_type type = oe_type(entry);
off_t datalen;
@@ -436,10 +436,15 @@ static off_t write_reuse_object(struct hashfile *f, struct object_entry *entry,
type, entry_size);
offset = entry->in_pack_offset;
- revidx = find_pack_revindex(p, offset);
- datalen = revidx[1].offset - offset;
+ if (offset_to_pack_pos(p, offset, &pos) < 0)
+ die(_("write_reuse_object: could not locate %s, expected at "
+ "offset %"PRIuMAX" in pack %s"),
+ oid_to_hex(&entry->idx.oid), (uintmax_t)offset,
+ p->pack_name);
+ datalen = pack_pos_to_offset(p, pos + 1) - offset;
if (!pack_to_stdout && p->index_version > 1 &&
- check_pack_crc(p, &w_curs, offset, datalen, revidx->nr)) {
+ check_pack_crc(p, &w_curs, offset, datalen,
+ pack_pos_to_index(p, pos))) {
error(_("bad packed object CRC for %s"),
oid_to_hex(&entry->idx.oid));
unuse_pack(&w_curs);
@@ -629,7 +634,7 @@ static int mark_tagged(const char *path, const struct object_id *oid, int flag,
if (entry)
entry->tagged = 1;
- if (!peel_ref(path, &peeled)) {
+ if (!peel_iterated_oid(oid, &peeled)) {
entry = packlist_find(&to_pack, &peeled);
if (entry)
entry->tagged = 1;
@@ -863,8 +868,8 @@ static void write_reused_pack_one(size_t pos, struct hashfile *out,
enum object_type type;
unsigned long size;
- offset = reuse_packfile->revindex[pos].offset;
- next = reuse_packfile->revindex[pos + 1].offset;
+ offset = pack_pos_to_offset(reuse_packfile, pos);
+ next = pack_pos_to_offset(reuse_packfile, pos + 1);
record_reused_object(offset, offset - hashfile_total(out));
@@ -884,11 +889,17 @@ static void write_reused_pack_one(size_t pos, struct hashfile *out,
/* Convert to REF_DELTA if we must... */
if (!allow_ofs_delta) {
- int base_pos = find_revindex_position(reuse_packfile, base_offset);
+ uint32_t base_pos;
struct object_id base_oid;
+ if (offset_to_pack_pos(reuse_packfile, base_offset, &base_pos) < 0)
+ die(_("expected object at offset %"PRIuMAX" "
+ "in pack %s"),
+ (uintmax_t)base_offset,
+ reuse_packfile->pack_name);
+
nth_packed_object_id(&base_oid, reuse_packfile,
- reuse_packfile->revindex[base_pos].nr);
+ pack_pos_to_index(reuse_packfile, base_pos));
len = encode_in_pack_object_header(header, sizeof(header),
OBJ_REF_DELTA, size);
@@ -941,7 +952,7 @@ static size_t write_reused_pack_verbatim(struct hashfile *out,
off_t to_write;
written = (pos * BITS_IN_EWORD);
- to_write = reuse_packfile->revindex[written].offset
+ to_write = pack_pos_to_offset(reuse_packfile, written)
- sizeof(struct pack_header);
/* We're recording one chunk, not one object. */
@@ -1104,7 +1115,6 @@ static void write_pack_file(void)
stop_progress(&progress_state);
bitmap_writer_show_progress(progress);
- bitmap_writer_reuse_bitmaps(&to_pack);
bitmap_writer_select_commits(indexed_commits, indexed_commits_nr, -1);
bitmap_writer_build(&to_pack);
bitmap_writer_finish(written_list, nr_written,
@@ -1625,7 +1635,7 @@ static void add_preferred_base(struct object_id *oid)
}
}
- it = xcalloc(1, sizeof(*it));
+ CALLOC_ARRAY(it, 1);
it->next = pbase_tree;
pbase_tree = it;
@@ -1807,11 +1817,11 @@ static void check_object(struct object_entry *entry, uint32_t object_index)
goto give_up;
}
if (reuse_delta && !entry->preferred_base) {
- struct revindex_entry *revidx;
- revidx = find_pack_revindex(p, ofs);
- if (!revidx)
+ uint32_t pos;
+ if (offset_to_pack_pos(p, ofs, &pos) < 0)
goto give_up;
- if (!nth_packed_object_id(&base_ref, p, revidx->nr))
+ if (!nth_packed_object_id(&base_ref, p,
+ pack_pos_to_index(p, pos)))
have_base = 1;
}
entry->in_pack_header_size = used + used_0;
@@ -2086,7 +2096,7 @@ static void get_object_details(void)
progress_state = start_progress(_("Counting objects"),
to_pack.nr_objects);
- sorted_by_offset = xcalloc(to_pack.nr_objects, sizeof(struct object_entry *));
+ CALLOC_ARRAY(sorted_by_offset, to_pack.nr_objects);
for (i = 0; i < to_pack.nr_objects; i++)
sorted_by_offset[i] = to_pack.objects + i;
QSORT(sorted_by_offset, to_pack.nr_objects, pack_offset_sort);
@@ -2418,7 +2428,7 @@ static void find_deltas(struct object_entry **list, unsigned *list_size,
struct unpacked *array;
unsigned long mem_usage = 0;
- array = xcalloc(window, sizeof(struct unpacked));
+ CALLOC_ARRAY(array, window);
for (;;) {
struct object_entry *entry;
@@ -2655,7 +2665,7 @@ static void ll_find_deltas(struct object_entry **list, unsigned list_size,
if (progress > pack_to_stdout)
fprintf_ln(stderr, _("Delta compression using up to %d threads"),
delta_search_threads);
- p = xcalloc(delta_search_threads, sizeof(*p));
+ CALLOC_ARRAY(p, delta_search_threads);
/* Partition the work amongst work threads. */
for (i = 0; i < delta_search_threads; i++) {
@@ -2804,13 +2814,11 @@ static void add_tag_chain(const struct object_id *oid)
}
}
-static int add_ref_tag(const char *path, const struct object_id *oid, int flag, void *cb_data)
+static int add_ref_tag(const char *tag, const struct object_id *oid, int flag, void *cb_data)
{
struct object_id peeled;
- if (starts_with(path, "refs/tags/") && /* is a tag? */
- !peel_ref(path, &peeled) && /* peelable? */
- obj_is_packed(&peeled)) /* object packed? */
+ if (!peel_iterated_oid(oid, &peeled) && obj_is_packed(&peeled))
add_tag_chain(oid);
return 0;
}
@@ -2945,6 +2953,13 @@ static int git_pack_config(const char *k, const char *v, void *cb)
pack_idx_opts.version);
return 0;
}
+ if (!strcmp(k, "pack.writereverseindex")) {
+ if (git_config_bool(k, v))
+ pack_idx_opts.flags |= WRITE_REV;
+ else
+ pack_idx_opts.flags &= ~WRITE_REV;
+ return 0;
+ }
if (!strcmp(k, "uploadpack.blobpackfileuri")) {
struct configured_exclusion *ex = xmalloc(sizeof(*ex));
const char *oid_end, *pack_end;
@@ -3584,6 +3599,8 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
reset_pack_idx_option(&pack_idx_opts);
git_config(git_pack_config, NULL);
+ if (git_env_bool(GIT_TEST_WRITE_REV_INDEX, 0))
+ pack_idx_opts.flags |= WRITE_REV;
progress = isatty(2);
argc = parse_options(argc, argv, prefix, pack_objects_options,
@@ -3741,7 +3758,7 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
}
cleanup_preferred_base();
if (include_tag && nr_result)
- for_each_ref(add_ref_tag, NULL);
+ for_each_tag_ref(add_ref_tag, NULL);
stop_progress(&progress_state);
trace2_region_leave("pack-objects", "enumerate-objects",
the_repository);
diff --git a/builtin/pack-redundant.c b/builtin/pack-redundant.c
index 9fcea3e..7102996 100644
--- a/builtin/pack-redundant.c
+++ b/builtin/pack-redundant.c
@@ -373,7 +373,7 @@ static void sort_pack_list(struct pack_list **pl)
return;
/* prepare an array of packed_list for easier sorting */
- ary = xcalloc(n, sizeof(struct pack_list *));
+ CALLOC_ARRAY(ary, n);
for (n = 0, p = *pl; p; p = p->next)
ary[n++] = p;
@@ -560,6 +560,7 @@ static void load_all(void)
int cmd_pack_redundant(int argc, const char **argv, const char *prefix)
{
int i;
+ int i_still_use_this = 0;
struct pack_list *min = NULL, *red, *pl;
struct llist *ignore;
struct object_id *oid;
@@ -586,12 +587,24 @@ int cmd_pack_redundant(int argc, const char **argv, const char *prefix)
alt_odb = 1;
continue;
}
+ if (!strcmp(arg, "--i-still-use-this")) {
+ i_still_use_this = 1;
+ continue;
+ }
if (*arg == '-')
usage(pack_redundant_usage);
else
break;
}
+ if (!i_still_use_this) {
+ fputs(_("'git pack-redundant' is nominated for removal.\n"
+ "If you still use this command, please add an extra\n"
+ "option, '--i-still-use-this', on the command line\n"
+ "and let us know you still use it by sending an e-mail\n"
+ "to <git@vger.kernel.org>. Thanks.\n"), stderr);
+ }
+
if (load_all_packs)
load_all();
else
diff --git a/builtin/pull.c b/builtin/pull.c
index aa56ebc..e8927fc 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -324,7 +324,7 @@ static const char *config_get_ff(void)
* looks for the value of "pull.rebase". If both configuration keys do not
* exist, returns REBASE_FALSE.
*/
-static enum rebase_type config_get_rebase(void)
+static enum rebase_type config_get_rebase(int *rebase_unspecified)
{
struct branch *curr_branch = branch_get("HEAD");
const char *value;
@@ -344,20 +344,7 @@ static enum rebase_type config_get_rebase(void)
if (!git_config_get_value("pull.rebase", &value))
return parse_config_rebase("pull.rebase", value, 1);
- if (opt_verbosity >= 0 && !opt_ff) {
- advise(_("Pulling without specifying how to reconcile divergent branches is\n"
- "discouraged. You can squelch this message by running one of the following\n"
- "commands sometime before your next pull:\n"
- "\n"
- " git config pull.rebase false # merge (the default strategy)\n"
- " git config pull.rebase true # rebase\n"
- " git config pull.ff only # fast-forward only\n"
- "\n"
- "You can replace \"git config\" with \"git config --global\" to set a default\n"
- "preference for all repositories. You can also pass --rebase, --no-rebase,\n"
- "or --ff-only on the command line to override the configured default per\n"
- "invocation.\n"));
- }
+ *rebase_unspecified = 1;
return REBASE_FALSE;
}
@@ -924,6 +911,36 @@ static int run_rebase(const struct object_id *newbase,
return ret;
}
+static int get_can_ff(struct object_id *orig_head, struct object_id *orig_merge_head)
+{
+ int ret;
+ struct commit_list *list = NULL;
+ struct commit *merge_head, *head;
+
+ head = lookup_commit_reference(the_repository, orig_head);
+ commit_list_insert(head, &list);
+ merge_head = lookup_commit_reference(the_repository, orig_merge_head);
+ ret = repo_is_descendant_of(the_repository, merge_head, list);
+ free_commit_list(list);
+ return ret;
+}
+
+static void show_advice_pull_non_ff(void)
+{
+ advise(_("Pulling without specifying how to reconcile divergent branches is\n"
+ "discouraged. You can squelch this message by running one of the following\n"
+ "commands sometime before your next pull:\n"
+ "\n"
+ " git config pull.rebase false # merge (the default strategy)\n"
+ " git config pull.rebase true # rebase\n"
+ " git config pull.ff only # fast-forward only\n"
+ "\n"
+ "You can replace \"git config\" with \"git config --global\" to set a default\n"
+ "preference for all repositories. You can also pass --rebase, --no-rebase,\n"
+ "or --ff-only on the command line to override the configured default per\n"
+ "invocation.\n"));
+}
+
int cmd_pull(int argc, const char **argv, const char *prefix)
{
const char *repo, **refspecs;
@@ -931,6 +948,8 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
struct object_id orig_head, curr_head;
struct object_id rebase_fork_point;
int autostash;
+ int rebase_unspecified = 0;
+ int can_ff;
if (!getenv("GIT_REFLOG_ACTION"))
set_reflog_message(argc, argv);
@@ -952,7 +971,7 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
opt_ff = xstrdup_or_null(config_get_ff());
if (opt_rebase < 0)
- opt_rebase = config_get_rebase();
+ opt_rebase = config_get_rebase(&rebase_unspecified);
if (read_cache_unmerged())
die_resolve_conflict("pull");
@@ -1026,6 +1045,13 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
if (opt_rebase && merge_heads.nr > 1)
die(_("Cannot rebase onto multiple branches."));
+ can_ff = get_can_ff(&orig_head, &merge_heads.oid[0]);
+
+ if (rebase_unspecified && !opt_ff && !can_ff) {
+ if (opt_verbosity >= 0)
+ show_advice_pull_non_ff();
+ }
+
if (opt_rebase) {
int ret = 0;
int ran_ff = 0;
@@ -1040,22 +1066,12 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
submodule_touches_in_range(the_repository, &upstream, &curr_head))
die(_("cannot rebase with locally recorded submodule modifications"));
if (!autostash) {
- struct commit_list *list = NULL;
- struct commit *merge_head, *head;
-
- head = lookup_commit_reference(the_repository,
- &orig_head);
- commit_list_insert(head, &list);
- merge_head = lookup_commit_reference(the_repository,
- &merge_heads.oid[0]);
- if (repo_is_descendant_of(the_repository,
- merge_head, list)) {
+ if (can_ff) {
/* we can fast-forward this without invoking rebase */
opt_ff = "--ff-only";
ran_ff = 1;
ret = run_merge();
}
- free_commit_list(list);
}
if (!ran_ff)
ret = run_rebase(&newbase, &upstream);
diff --git a/builtin/push.c b/builtin/push.c
index 03adb58..194967e 100644
--- a/builtin/push.c
+++ b/builtin/push.c
@@ -115,7 +115,7 @@ static void set_refspecs(const char **refs, int nr, const char *repo)
else
refspec_appendf(&rs, "refs/tags/%s", ref);
} else if (deleterefs) {
- if (strchr(ref, ':'))
+ if (strchr(ref, ':') || !*ref)
die(_("--delete only accepts plain target ref names"));
refspec_appendf(&rs, ":%s", ref);
} else if (!strchr(ref, ':')) {
diff --git a/builtin/range-diff.c b/builtin/range-diff.c
index 24c4162..78bc9fa 100644
--- a/builtin/range-diff.c
+++ b/builtin/range-diff.c
@@ -3,6 +3,7 @@
#include "parse-options.h"
#include "range-diff.h"
#include "config.h"
+#include "revision.h"
static const char * const builtin_range_diff_usage[] = {
N_("git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"),
@@ -13,18 +14,27 @@ NULL
int cmd_range_diff(int argc, const char **argv, const char *prefix)
{
- int creation_factor = RANGE_DIFF_CREATION_FACTOR_DEFAULT;
struct diff_options diffopt = { NULL };
struct strvec other_arg = STRVEC_INIT;
- int simple_color = -1;
+ struct range_diff_options range_diff_opts = {
+ .creation_factor = RANGE_DIFF_CREATION_FACTOR_DEFAULT,
+ .diffopt = &diffopt,
+ .other_arg = &other_arg
+ };
+ int simple_color = -1, left_only = 0, right_only = 0;
struct option range_diff_options[] = {
- OPT_INTEGER(0, "creation-factor", &creation_factor,
+ OPT_INTEGER(0, "creation-factor",
+ &range_diff_opts.creation_factor,
N_("Percentage by which creation is weighted")),
OPT_BOOL(0, "no-dual-color", &simple_color,
N_("use simple diff colors")),
OPT_PASSTHRU_ARGV(0, "notes", &other_arg,
N_("notes"), N_("passed to 'git log'"),
PARSE_OPT_OPTARG),
+ OPT_BOOL(0, "left-only", &left_only,
+ N_("only emit output related to the first range")),
+ OPT_BOOL(0, "right-only", &right_only,
+ N_("only emit output related to the second range")),
OPT_END()
};
struct option *options;
@@ -46,12 +56,12 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)
diffopt.use_color = 1;
if (argc == 2) {
- if (!strstr(argv[0], ".."))
- die(_("no .. in range: '%s'"), argv[0]);
+ if (!is_range_diff_range(argv[0]))
+ die(_("not a commit range: '%s'"), argv[0]);
strbuf_addstr(&range1, argv[0]);
- if (!strstr(argv[1], ".."))
- die(_("no .. in range: '%s'"), argv[1]);
+ if (!is_range_diff_range(argv[1]))
+ die(_("not a commit range: '%s'"), argv[1]);
strbuf_addstr(&range2, argv[1]);
} else if (argc == 3) {
strbuf_addf(&range1, "%s..%s", argv[0], argv[1]);
@@ -81,8 +91,10 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)
}
FREE_AND_NULL(options);
- res = show_range_diff(range1.buf, range2.buf, creation_factor,
- simple_color < 1, &diffopt, &other_arg);
+ range_diff_opts.dual_color = simple_color < 1;
+ range_diff_opts.left_only = left_only;
+ range_diff_opts.right_only = right_only;
+ res = show_range_diff(range1.buf, range2.buf, &range_diff_opts);
strvec_clear(&other_arg);
strbuf_release(&range1);
diff --git a/builtin/rebase.c b/builtin/rebase.c
index 840dbd7..de400f9 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -102,6 +102,7 @@ struct rebase_options {
int reschedule_failed_exec;
int use_legacy_rebase;
int reapply_cherry_picks;
+ int fork_point;
};
#define REBASE_OPTIONS_INIT { \
@@ -111,7 +112,8 @@ struct rebase_options {
.default_backend = "merge", \
.flags = REBASE_NO_QUIET, \
.git_am_opts = STRVEC_INIT, \
- .git_format_patch_opt = STRBUF_INIT \
+ .git_format_patch_opt = STRBUF_INIT, \
+ .fork_point = -1, \
}
static struct replay_opts get_replay_opts(const struct rebase_options *opts)
@@ -1095,6 +1097,11 @@ static int rebase_config(const char *var, const char *value, void *data)
return 0;
}
+ if (!strcmp(var, "rebase.forkpoint")) {
+ opts->fork_point = git_config_bool(var, value) ? -1 : 0;
+ return 0;
+ }
+
if (!strcmp(var, "rebase.usebuiltin")) {
opts->use_legacy_rebase = !git_config_bool(var, value);
return 0;
@@ -1306,7 +1313,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
const char *gpg_sign = NULL;
struct string_list exec = STRING_LIST_INIT_NODUP;
const char *rebase_merges = NULL;
- int fork_point = -1;
struct string_list strategy_options = STRING_LIST_INIT_NODUP;
struct object_id squash_onto;
char *squash_onto_name = NULL;
@@ -1406,7 +1412,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
N_("mode"),
N_("try to rebase merges instead of skipping them"),
PARSE_OPT_OPTARG, NULL, (intptr_t)""},
- OPT_BOOL(0, "fork-point", &fork_point,
+ OPT_BOOL(0, "fork-point", &options.fork_point,
N_("use 'merge-base --fork-point' to refine upstream")),
OPT_STRING('s', "strategy", &options.strategy,
N_("strategy"), N_("use the given merge strategy")),
@@ -1494,7 +1500,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
die(_("cannot combine '--keep-base' with '--root'"));
}
- if (options.root && fork_point > 0)
+ if (options.root && options.fork_point > 0)
die(_("cannot combine '--root' with '--fork-point'"));
if (action != ACTION_NONE && !in_progress)
@@ -1840,8 +1846,8 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
NULL);
if (!options.upstream_name)
error_on_missing_default_upstream();
- if (fork_point < 0)
- fork_point = 1;
+ if (options.fork_point < 0)
+ options.fork_point = 1;
} else {
options.upstream_name = argv[0];
argc--;
@@ -1945,7 +1951,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
} else
BUG("unexpected number of arguments left to parse");
- if (fork_point > 0) {
+ if (options.fork_point > 0) {
struct commit *head =
lookup_commit_reference(the_repository,
&options.orig_head);
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index d49d050..6bc12c8 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -358,7 +358,7 @@ static void proc_receive_ref_append(const char *prefix)
char *p;
int len;
- ref_pattern = xcalloc(1, sizeof(struct proc_receive_ref));
+ CALLOC_ARRAY(ref_pattern, 1);
p = strchr(prefix, ':');
if (p) {
while (prefix < p) {
@@ -764,7 +764,7 @@ static void prepare_push_cert_sha1(struct child_process *proc)
memset(&sigcheck, '\0', sizeof(sigcheck));
- bogs = parse_signature(push_cert.buf, push_cert.len);
+ bogs = parse_signed_buffer(push_cert.buf, push_cert.len);
check_signature(push_cert.buf, bogs, push_cert.buf + bogs,
push_cert.len - bogs, &sigcheck);
@@ -1024,7 +1024,7 @@ static int read_proc_receive_report(struct packet_reader *reader,
}
if (new_report) {
if (!hint->report) {
- hint->report = xcalloc(1, sizeof(struct ref_push_report));
+ CALLOC_ARRAY(hint->report, 1);
report = hint->report;
} else {
report = hint->report;
@@ -2050,7 +2050,7 @@ static void queue_commands_from_cert(struct command **tail,
die("malformed push certificate %.*s", 100, push_cert->buf);
else
boc += 2;
- eoc = push_cert->buf + parse_signature(push_cert->buf, push_cert->len);
+ eoc = push_cert->buf + parse_signed_buffer(push_cert->buf, push_cert->len);
while (boc < eoc) {
const char *eol = memchr(boc, '\n', eoc - boc);
@@ -2275,7 +2275,7 @@ static const char *unpack(int err_fd, struct shallow_info *si)
status = start_command(&child);
if (status)
return "index-pack fork failed";
- pack_lockfile = index_pack_lockfile(child.out);
+ pack_lockfile = index_pack_lockfile(child.out, NULL);
close(child.out);
status = finish_command(&child);
if (status)
@@ -2313,11 +2313,9 @@ static void prepare_shallow_update(struct shallow_info *si)
ALLOC_ARRAY(si->used_shallow, si->shallow->nr);
assign_shallow_commits_to_refs(si, si->used_shallow, NULL);
- si->need_reachability_test =
- xcalloc(si->shallow->nr, sizeof(*si->need_reachability_test));
- si->reachable =
- xcalloc(si->shallow->nr, sizeof(*si->reachable));
- si->shallow_ref = xcalloc(si->ref->nr, sizeof(*si->shallow_ref));
+ CALLOC_ARRAY(si->need_reachability_test, si->shallow->nr);
+ CALLOC_ARRAY(si->reachable, si->shallow->nr);
+ CALLOC_ARRAY(si->shallow_ref, si->ref->nr);
for (i = 0; i < si->nr_ours; i++)
si->need_reachability_test[si->ours[i]] = 1;
diff --git a/builtin/reflog.c b/builtin/reflog.c
index ca1d807..09541d1 100644
--- a/builtin/reflog.c
+++ b/builtin/reflog.c
@@ -602,6 +602,9 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)
*/
if (cb.cmd.stalefix) {
repo_init_revisions(the_repository, &cb.cmd.revs, prefix);
+ cb.cmd.revs.do_not_die_on_missing_tree = 1;
+ cb.cmd.revs.ignore_missing = 1;
+ cb.cmd.revs.ignore_missing_links = 1;
if (flags & EXPIRE_REFLOGS_VERBOSE)
printf(_("Marking reachable objects..."));
mark_reachable_objects(&cb.cmd.revs, 0, 0, NULL);
diff --git a/builtin/repack.c b/builtin/repack.c
index 279be11..01440de 100644
--- a/builtin/repack.c
+++ b/builtin/repack.c
@@ -14,6 +14,7 @@
#include "object-store.h"
#include "promisor-remote.h"
#include "shallow.h"
+#include "pack.h"
static int delta_base_offset = 1;
static int pack_kept_objects = -1;
@@ -208,6 +209,7 @@ static struct {
} exts[] = {
{".pack"},
{".idx"},
+ {".rev", 1},
{".bitmap", 1},
{".promisor", 1},
};
@@ -263,7 +265,7 @@ static void repack_promisor_objects(const struct pack_objects_args *args,
while (strbuf_getline_lf(&line, out) != EOF) {
struct string_list_item *item;
char *promisor_name;
- int fd;
+
if (line.len != the_hash_algo->hexsz)
die(_("repack: Expecting full hex object ID lines only from pack-objects."));
item = string_list_append(names, line.buf);
@@ -281,10 +283,7 @@ static void repack_promisor_objects(const struct pack_objects_args *args,
*/
promisor_name = mkpathdup("%s-%s.promisor", packtmp,
line.buf);
- fd = open(promisor_name, O_CREAT|O_EXCL|O_WRONLY, 0600);
- if (fd < 0)
- die_errno(_("unable to create '%s'"), promisor_name);
- close(fd);
+ write_promisor_file(promisor_name, NULL, 0);
item->util = (void *)(uintptr_t)populate_pack_exts(item->string);
diff --git a/builtin/rev-list.c b/builtin/rev-list.c
index 25c6c3b..b4d8ea0 100644
--- a/builtin/rev-list.c
+++ b/builtin/rev-list.c
@@ -80,6 +80,19 @@ static int arg_show_object_names = 1;
#define DEFAULT_OIDSET_SIZE (16*1024)
+static int show_disk_usage;
+static off_t total_disk_usage;
+
+static off_t get_object_disk_usage(struct object *obj)
+{
+ off_t size;
+ struct object_info oi = OBJECT_INFO_INIT;
+ oi.disk_sizep = &size;
+ if (oid_object_info_extended(the_repository, &obj->oid, &oi, 0) < 0)
+ die(_("unable to get disk usage of %s"), oid_to_hex(&obj->oid));
+ return size;
+}
+
static void finish_commit(struct commit *commit);
static void show_commit(struct commit *commit, void *data)
{
@@ -88,6 +101,9 @@ static void show_commit(struct commit *commit, void *data)
display_progress(progress, ++progress_counter);
+ if (show_disk_usage)
+ total_disk_usage += get_object_disk_usage(&commit->object);
+
if (info->flags & REV_LIST_QUIET) {
finish_commit(commit);
return;
@@ -258,6 +274,8 @@ static void show_object(struct object *obj, const char *name, void *cb_data)
if (finish_object(obj, name, cb_data))
return;
display_progress(progress, ++progress_counter);
+ if (show_disk_usage)
+ total_disk_usage += get_object_disk_usage(obj);
if (info->flags & REV_LIST_QUIET)
return;
@@ -452,6 +470,23 @@ static int try_bitmap_traversal(struct rev_info *revs,
return 0;
}
+static int try_bitmap_disk_usage(struct rev_info *revs,
+ struct list_objects_filter_options *filter)
+{
+ struct bitmap_index *bitmap_git;
+
+ if (!show_disk_usage)
+ return -1;
+
+ bitmap_git = prepare_bitmap_walk(revs, filter);
+ if (!bitmap_git)
+ return -1;
+
+ printf("%"PRIuMAX"\n",
+ (uintmax_t)get_disk_usage_from_bitmap(bitmap_git, revs));
+ return 0;
+}
+
int cmd_rev_list(int argc, const char **argv, const char *prefix)
{
struct rev_info revs;
@@ -584,6 +619,12 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
continue;
}
+ if (!strcmp(arg, "--disk-usage")) {
+ show_disk_usage = 1;
+ info.flags |= REV_LIST_QUIET;
+ continue;
+ }
+
usage(rev_list_usage);
}
@@ -626,6 +667,8 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
if (use_bitmap_index) {
if (!try_bitmap_count(&revs, &filter_options))
return 0;
+ if (!try_bitmap_disk_usage(&revs, &filter_options))
+ return 0;
if (!try_bitmap_traversal(&revs, &filter_options))
return 0;
}
@@ -690,5 +733,8 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
printf("%d\n", revs.count_left + revs.count_right);
}
+ if (show_disk_usage)
+ printf("%"PRIuMAX"\n", (uintmax_t)total_disk_usage);
+
return 0;
}
diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c
index 69ba732..85bad90 100644
--- a/builtin/rev-parse.c
+++ b/builtin/rev-parse.c
@@ -583,6 +583,75 @@ static void handle_ref_opt(const char *pattern, const char *prefix)
clear_ref_exclusion(&ref_excludes);
}
+enum format_type {
+ /* We would like a relative path. */
+ FORMAT_RELATIVE,
+ /* We would like a canonical absolute path. */
+ FORMAT_CANONICAL,
+ /* We would like the default behavior. */
+ FORMAT_DEFAULT,
+};
+
+enum default_type {
+ /* Our default is a relative path. */
+ DEFAULT_RELATIVE,
+ /* Our default is a relative path if there's a shared root. */
+ DEFAULT_RELATIVE_IF_SHARED,
+ /* Our default is a canonical absolute path. */
+ DEFAULT_CANONICAL,
+ /* Our default is not to modify the item. */
+ DEFAULT_UNMODIFIED,
+};
+
+static void print_path(const char *path, const char *prefix, enum format_type format, enum default_type def)
+{
+ char *cwd = NULL;
+ /*
+ * We don't ever produce a relative path if prefix is NULL, so set the
+ * prefix to the current directory so that we can produce a relative
+ * path whenever possible. If we're using RELATIVE_IF_SHARED mode, then
+ * we want an absolute path unless the two share a common prefix, so don't
+ * set it in that case, since doing so causes a relative path to always
+ * be produced if possible.
+ */
+ if (!prefix && (format != FORMAT_DEFAULT || def != DEFAULT_RELATIVE_IF_SHARED))
+ prefix = cwd = xgetcwd();
+ if (format == FORMAT_DEFAULT && def == DEFAULT_UNMODIFIED) {
+ puts(path);
+ } else if (format == FORMAT_RELATIVE ||
+ (format == FORMAT_DEFAULT && def == DEFAULT_RELATIVE)) {
+ /*
+ * In order for relative_path to work as expected, we need to
+ * make sure that both paths are absolute paths. If we don't,
+ * we can end up with an unexpected absolute path that the user
+ * didn't want.
+ */
+ struct strbuf buf = STRBUF_INIT, realbuf = STRBUF_INIT, prefixbuf = STRBUF_INIT;
+ if (!is_absolute_path(path)) {
+ strbuf_realpath_forgiving(&realbuf, path, 1);
+ path = realbuf.buf;
+ }
+ if (!is_absolute_path(prefix)) {
+ strbuf_realpath_forgiving(&prefixbuf, prefix, 1);
+ prefix = prefixbuf.buf;
+ }
+ puts(relative_path(path, prefix, &buf));
+ strbuf_release(&buf);
+ strbuf_release(&realbuf);
+ strbuf_release(&prefixbuf);
+ } else if (format == FORMAT_DEFAULT && def == DEFAULT_RELATIVE_IF_SHARED) {
+ struct strbuf buf = STRBUF_INIT;
+ puts(relative_path(path, prefix, &buf));
+ strbuf_release(&buf);
+ } else {
+ struct strbuf buf = STRBUF_INIT;
+ strbuf_realpath_forgiving(&buf, path, 1);
+ puts(buf.buf);
+ strbuf_release(&buf);
+ }
+ free(cwd);
+}
+
int cmd_rev_parse(int argc, const char **argv, const char *prefix)
{
int i, as_is = 0, verify = 0, quiet = 0, revs_count = 0, type = 0;
@@ -596,6 +665,7 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
struct strbuf buf = STRBUF_INIT;
const int hexsz = the_hash_algo->hexsz;
int seen_end_of_options = 0;
+ enum format_type format = FORMAT_DEFAULT;
if (argc > 1 && !strcmp("--parseopt", argv[1]))
return cmd_parseopt(argc - 1, argv + 1, prefix);
@@ -668,8 +738,9 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
if (!argv[i + 1])
die("--git-path requires an argument");
strbuf_reset(&buf);
- puts(relative_path(git_path("%s", argv[i + 1]),
- prefix, &buf));
+ print_path(git_path("%s", argv[i + 1]), prefix,
+ format,
+ DEFAULT_RELATIVE_IF_SHARED);
i++;
continue;
}
@@ -687,6 +758,16 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
show(arg);
continue;
}
+ if (opt_with_value(arg, "--path-format", &arg)) {
+ if (!strcmp(arg, "absolute")) {
+ format = FORMAT_CANONICAL;
+ } else if (!strcmp(arg, "relative")) {
+ format = FORMAT_RELATIVE;
+ } else {
+ die("unknown argument to --path-format: %s", arg);
+ }
+ continue;
+ }
if (!strcmp(arg, "--default")) {
def = argv[++i];
if (!def)
@@ -807,7 +888,7 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
if (!strcmp(arg, "--show-toplevel")) {
const char *work_tree = get_git_work_tree();
if (work_tree)
- puts(work_tree);
+ print_path(work_tree, prefix, format, DEFAULT_UNMODIFIED);
else
die("this operation must be run in a work tree");
continue;
@@ -815,7 +896,7 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
if (!strcmp(arg, "--show-superproject-working-tree")) {
struct strbuf superproject = STRBUF_INIT;
if (get_superproject_working_tree(&superproject))
- puts(superproject.buf);
+ print_path(superproject.buf, prefix, format, DEFAULT_UNMODIFIED);
strbuf_release(&superproject);
continue;
}
@@ -850,16 +931,18 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
const char *gitdir = getenv(GIT_DIR_ENVIRONMENT);
char *cwd;
int len;
+ enum format_type wanted = format;
if (arg[2] == 'g') { /* --git-dir */
if (gitdir) {
- puts(gitdir);
+ print_path(gitdir, prefix, format, DEFAULT_UNMODIFIED);
continue;
}
if (!prefix) {
- puts(".git");
+ print_path(".git", prefix, format, DEFAULT_UNMODIFIED);
continue;
}
} else { /* --absolute-git-dir */
+ wanted = FORMAT_CANONICAL;
if (!gitdir && !prefix)
gitdir = ".git";
if (gitdir) {
@@ -872,14 +955,14 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
}
cwd = xgetcwd();
len = strlen(cwd);
- printf("%s%s.git\n", cwd, len && cwd[len-1] != '/' ? "/" : "");
+ strbuf_reset(&buf);
+ strbuf_addf(&buf, "%s%s.git", cwd, len && cwd[len-1] != '/' ? "/" : "");
free(cwd);
+ print_path(buf.buf, prefix, wanted, DEFAULT_CANONICAL);
continue;
}
if (!strcmp(arg, "--git-common-dir")) {
- strbuf_reset(&buf);
- puts(relative_path(get_git_common_dir(),
- prefix, &buf));
+ print_path(get_git_common_dir(), prefix, format, DEFAULT_RELATIVE_IF_SHARED);
continue;
}
if (!strcmp(arg, "--is-inside-git-dir")) {
@@ -909,8 +992,7 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
if (the_index.split_index) {
const struct object_id *oid = &the_index.split_index->base_oid;
const char *path = git_path("sharedindex.%s", oid_to_hex(oid));
- strbuf_reset(&buf);
- puts(relative_path(path, prefix, &buf));
+ print_path(path, prefix, format, DEFAULT_RELATIVE);
}
continue;
}
diff --git a/builtin/shortlog.c b/builtin/shortlog.c
index 1c0b3a9..3e7ab1c 100644
--- a/builtin/shortlog.c
+++ b/builtin/shortlog.c
@@ -61,8 +61,7 @@ static void insert_one_record(struct shortlog *log,
if (log->summary)
item->util = (void *)(UTIL_TO_INT(item) + 1);
else {
- const char *dot3 = log->common_repo_prefix;
- char *buffer, *p;
+ char *buffer;
struct strbuf subject = STRBUF_INIT;
const char *eol;
@@ -82,17 +81,6 @@ static void insert_one_record(struct shortlog *log,
format_subject(&subject, oneline, " ");
buffer = strbuf_detach(&subject, NULL);
- if (dot3) {
- int dot3len = strlen(dot3);
- if (dot3len > 5) {
- while ((p = strstr(buffer, dot3)) != NULL) {
- int taillen = strlen(p) - dot3len;
- memcpy(p, "/.../", 5);
- memmove(p + 5, p + dot3len, taillen + 1);
- }
- }
- }
-
if (item->util == NULL)
item->util = xcalloc(1, sizeof(struct string_list));
string_list_append(item->util, buffer);
@@ -342,7 +330,7 @@ void shortlog_init(struct shortlog *log)
{
memset(log, 0, sizeof(*log));
- read_mailmap(&log->mailmap, &log->common_repo_prefix);
+ read_mailmap(&log->mailmap);
log->list.strdup_strings = 1;
log->wrap = DEFAULT_WRAPLEN;
diff --git a/builtin/show-ref.c b/builtin/show-ref.c
index ae60b4a..7f8a533 100644
--- a/builtin/show-ref.c
+++ b/builtin/show-ref.c
@@ -40,7 +40,7 @@ static void show_one(const char *refname, const struct object_id *oid)
if (!deref_tags)
return;
- if (!peel_ref(refname, &peeled)) {
+ if (!peel_iterated_oid(oid, &peeled)) {
hex = find_unique_abbrev(&peeled, abbrev);
printf("%s %s^{}\n", hex, refname);
}
diff --git a/builtin/sparse-checkout.c b/builtin/sparse-checkout.c
index e3140db..2306a9a 100644
--- a/builtin/sparse-checkout.c
+++ b/builtin/sparse-checkout.c
@@ -22,11 +22,6 @@ static char const * const builtin_sparse_checkout_usage[] = {
NULL
};
-static char *get_sparse_checkout_filename(void)
-{
- return git_pathdup("info/sparse-checkout");
-}
-
static void write_patterns_to_file(FILE *fp, struct pattern_list *pl)
{
int i;
diff --git a/builtin/stash.c b/builtin/stash.c
index 9bc85f9..ba774cc 100644
--- a/builtin/stash.c
+++ b/builtin/stash.c
@@ -87,7 +87,7 @@ static const char * const git_stash_save_usage[] = {
NULL
};
-static const char *ref_stash = "refs/stash";
+static const char ref_stash[] = "refs/stash";
static struct strbuf stash_index_path = STRBUF_INIT;
/*
@@ -222,7 +222,7 @@ static int clear_stash(int argc, const char **argv, const char *prefix)
PARSE_OPT_STOP_AT_NON_OPTION);
if (argc)
- return error(_("git stash clear with parameters is "
+ return error(_("git stash clear with arguments is "
"unimplemented"));
return do_clear_stash();
diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
index c2bd882..9d505a6 100644
--- a/builtin/submodule--helper.c
+++ b/builtin/submodule--helper.c
@@ -1257,7 +1257,7 @@ static int compute_summary_module_list(struct object_id *head_oid,
git_config(git_diff_basic_config, NULL);
init_revisions(&rev, info->prefix);
rev.abbrev = 0;
- precompose_argv(diff_args.nr, diff_args.v);
+ precompose_argv_prefix(diff_args.nr, diff_args.v, NULL);
setup_revisions(diff_args.nr, diff_args.v, &rev, NULL);
rev.diffopt.output_format = DIFF_FORMAT_NO_OUTPUT | DIFF_FORMAT_CALLBACK;
rev.diffopt.format_callback = submodule_summary_callback;
diff --git a/builtin/tag.c b/builtin/tag.c
index 24d35b7..d403417 100644
--- a/builtin/tag.c
+++ b/builtin/tag.c
@@ -72,10 +72,10 @@ static int list_tags(struct ref_filter *filter, struct ref_sorting *sorting,
}
typedef int (*each_tag_name_fn)(const char *name, const char *ref,
- const struct object_id *oid, const void *cb_data);
+ const struct object_id *oid, void *cb_data);
static int for_each_tag_name(const char **argv, each_tag_name_fn fn,
- const void *cb_data)
+ void *cb_data)
{
const char **p;
struct strbuf ref = STRBUF_INIT;
@@ -97,18 +97,42 @@ static int for_each_tag_name(const char **argv, each_tag_name_fn fn,
return had_error;
}
-static int delete_tag(const char *name, const char *ref,
- const struct object_id *oid, const void *cb_data)
+static int collect_tags(const char *name, const char *ref,
+ const struct object_id *oid, void *cb_data)
{
- if (delete_ref(NULL, ref, oid, 0))
- return 1;
- printf(_("Deleted tag '%s' (was %s)\n"), name,
- find_unique_abbrev(oid, DEFAULT_ABBREV));
+ struct string_list *ref_list = cb_data;
+
+ string_list_append(ref_list, ref);
+ ref_list->items[ref_list->nr - 1].util = oiddup(oid);
return 0;
}
+static int delete_tags(const char **argv)
+{
+ int result;
+ struct string_list refs_to_delete = STRING_LIST_INIT_DUP;
+ struct string_list_item *item;
+
+ result = for_each_tag_name(argv, collect_tags, (void *)&refs_to_delete);
+ if (delete_refs(NULL, &refs_to_delete, REF_NO_DEREF))
+ result = 1;
+
+ for_each_string_list_item(item, &refs_to_delete) {
+ const char *name = item->string;
+ struct object_id *oid = item->util;
+ if (!ref_exists(name))
+ printf(_("Deleted tag '%s' (was %s)\n"),
+ item->string + 10,
+ find_unique_abbrev(oid, DEFAULT_ABBREV));
+
+ free(oid);
+ }
+ string_list_clear(&refs_to_delete, 0);
+ return result;
+}
+
static int verify_tag(const char *name, const char *ref,
- const struct object_id *oid, const void *cb_data)
+ const struct object_id *oid, void *cb_data)
{
int flags;
const struct ref_format *format = cb_data;
@@ -174,11 +198,17 @@ static void write_tag_body(int fd, const struct object_id *oid)
{
unsigned long size;
enum object_type type;
- char *buf, *sp;
+ char *buf, *sp, *orig;
+ struct strbuf payload = STRBUF_INIT;
+ struct strbuf signature = STRBUF_INIT;
- buf = read_object_file(oid, &type, &size);
+ orig = buf = read_object_file(oid, &type, &size);
if (!buf)
return;
+ if (parse_signature(buf, size, &payload, &signature)) {
+ buf = payload.buf;
+ size = payload.len;
+ }
/* skip header */
sp = strstr(buf, "\n\n");
@@ -187,9 +217,11 @@ static void write_tag_body(int fd, const struct object_id *oid)
return;
}
sp += 2; /* skip the 2 LFs */
- write_or_die(fd, sp, parse_signature(sp, buf + size - sp));
+ write_or_die(fd, sp, buf + size - sp);
- free(buf);
+ free(orig);
+ strbuf_release(&payload);
+ strbuf_release(&signature);
}
static int build_tag_object(struct strbuf *buf, int sign, struct object_id *result)
@@ -512,7 +544,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
if (filter.reachable_from || filter.unreachable_from)
die(_("--merged and --no-merged options are only allowed in list mode"));
if (cmdmode == 'd')
- return for_each_tag_name(argv, delete_tag, NULL);
+ return delete_tags(argv);
if (cmdmode == 'v') {
if (format.format && verify_ref_format(&format))
usage_with_options(git_tag_usage, options);
@@ -540,7 +572,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
object_ref = argc == 2 ? argv[1] : "HEAD";
if (argc > 2)
- die(_("too many params"));
+ die(_("too many arguments"));
if (get_oid(object_ref, &object))
die(_("Failed to resolve '%s' as a valid ref."), object_ref);
diff --git a/builtin/unpack-objects.c b/builtin/unpack-objects.c
index dd4a75e..a4ba2eb 100644
--- a/builtin/unpack-objects.c
+++ b/builtin/unpack-objects.c
@@ -46,7 +46,7 @@ static struct obj_buffer *lookup_object_buffer(struct object *base)
static void add_object_buffer(struct object *object, char *buffer, unsigned long size)
{
struct obj_buffer *obj;
- obj = xcalloc(1, sizeof(struct obj_buffer));
+ CALLOC_ARRAY(obj, 1);
obj->buffer = buffer;
obj->size = size;
if (add_decoration(&obj_decorate, object, obj))
@@ -500,7 +500,7 @@ static void unpack_all(void)
if (!quiet)
progress = start_progress(_("Unpacking objects"), nr_objects);
- obj_list = xcalloc(nr_objects, sizeof(*obj_list));
+ CALLOC_ARRAY(obj_list, nr_objects);
for (i = 0; i < nr_objects; i++) {
unpack_one(i);
display_progress(progress, i + 1);
diff --git a/builtin/worktree.c b/builtin/worktree.c
index 197fd24..1cd5c20 100644
--- a/builtin/worktree.c
+++ b/builtin/worktree.c
@@ -12,6 +12,7 @@
#include "submodule.h"
#include "utf8.h"
#include "worktree.h"
+#include "quote.h"
static const char * const worktree_usage[] = {
N_("git worktree add [<options>] <path> [<commit-ish>]"),
@@ -67,79 +68,6 @@ static void delete_worktrees_dir_if_empty(void)
rmdir(git_path("worktrees")); /* ignore failed removal */
}
-/*
- * Return true if worktree entry should be pruned, along with the reason for
- * pruning. Otherwise, return false and the worktree's path, or NULL if it
- * cannot be determined. Caller is responsible for freeing returned path.
- */
-static int should_prune_worktree(const char *id, struct strbuf *reason, char **wtpath)
-{
- struct stat st;
- char *path;
- int fd;
- size_t len;
- ssize_t read_result;
-
- *wtpath = NULL;
- if (!is_directory(git_path("worktrees/%s", id))) {
- strbuf_addstr(reason, _("not a valid directory"));
- return 1;
- }
- if (file_exists(git_path("worktrees/%s/locked", id)))
- return 0;
- if (stat(git_path("worktrees/%s/gitdir", id), &st)) {
- strbuf_addstr(reason, _("gitdir file does not exist"));
- return 1;
- }
- fd = open(git_path("worktrees/%s/gitdir", id), O_RDONLY);
- if (fd < 0) {
- strbuf_addf(reason, _("unable to read gitdir file (%s)"),
- strerror(errno));
- return 1;
- }
- len = xsize_t(st.st_size);
- path = xmallocz(len);
-
- read_result = read_in_full(fd, path, len);
- if (read_result < 0) {
- strbuf_addf(reason, _("unable to read gitdir file (%s)"),
- strerror(errno));
- close(fd);
- free(path);
- return 1;
- }
- close(fd);
-
- if (read_result != len) {
- strbuf_addf(reason,
- _("short read (expected %"PRIuMAX" bytes, read %"PRIuMAX")"),
- (uintmax_t)len, (uintmax_t)read_result);
- free(path);
- return 1;
- }
- while (len && (path[len - 1] == '\n' || path[len - 1] == '\r'))
- len--;
- if (!len) {
- strbuf_addstr(reason, _("invalid gitdir file"));
- free(path);
- return 1;
- }
- path[len] = '\0';
- if (!file_exists(path)) {
- if (stat(git_path("worktrees/%s/index", id), &st) ||
- st.st_mtime <= expire) {
- strbuf_addstr(reason, _("gitdir file points to non-existent location"));
- free(path);
- return 1;
- } else {
- *wtpath = path;
- return 0;
- }
- }
- *wtpath = path;
- return 0;
-}
-
static void prune_worktree(const char *id, const char *reason)
{
if (show_only || verbose)
@@ -195,7 +123,7 @@ static void prune_worktrees(void)
if (is_dot_or_dotdot(d->d_name))
continue;
strbuf_reset(&reason);
- if (should_prune_worktree(d->d_name, &reason, &path))
+ if (should_prune_worktree(d->d_name, &reason, &path, expire))
prune_worktree(d->d_name, reason.buf);
else if (path)
string_list_append(&kept, path)->util = xstrdup(d->d_name);
@@ -642,6 +570,8 @@ static int add(int ac, const char **av, const char *prefix)
static void show_worktree_porcelain(struct worktree *wt)
{
+ const char *reason;
+
printf("worktree %s\n", wt->path);
if (wt->is_bare)
printf("bare\n");
@@ -652,6 +582,20 @@ static void show_worktree_porcelain(struct worktree *wt)
else if (wt->head_ref)
printf("branch %s\n", wt->head_ref);
}
+
+ reason = worktree_lock_reason(wt);
+ if (reason && *reason) {
+ struct strbuf sb = STRBUF_INIT;
+ quote_c_style(reason, &sb, NULL, 0);
+ printf("locked %s\n", sb.buf);
+ strbuf_release(&sb);
+ } else if (reason)
+ printf("locked\n");
+
+ reason = worktree_prune_reason(wt, expire);
+ if (reason)
+ printf("prunable %s\n", reason);
+
printf("\n");
}
@@ -660,6 +604,7 @@ static void show_worktree(struct worktree *wt, int path_maxlen, int abbrev_len)
struct strbuf sb = STRBUF_INIT;
int cur_path_len = strlen(wt->path);
int path_adj = cur_path_len - utf8_strwidth(wt->path);
+ const char *reason;
strbuf_addf(&sb, "%-*s ", 1 + path_maxlen + path_adj, wt->path);
if (wt->is_bare)
@@ -677,9 +622,18 @@ static void show_worktree(struct worktree *wt, int path_maxlen, int abbrev_len)
strbuf_addstr(&sb, "(error)");
}
- if (!is_main_worktree(wt) && worktree_lock_reason(wt))
+ reason = worktree_lock_reason(wt);
+ if (verbose && reason && *reason)
+ strbuf_addf(&sb, "\n\tlocked: %s", reason);
+ else if (reason)
strbuf_addstr(&sb, " locked");
+ reason = worktree_prune_reason(wt, expire);
+ if (verbose && reason)
+ strbuf_addf(&sb, "\n\tprunable: %s", reason);
+ else if (reason)
+ strbuf_addstr(&sb, " prunable");
+
printf("%s\n", sb.buf);
strbuf_release(&sb);
}
@@ -723,12 +677,18 @@ static int list(int ac, const char **av, const char *prefix)
struct option options[] = {
OPT_BOOL(0, "porcelain", &porcelain, N_("machine-readable output")),
+ OPT__VERBOSE(&verbose, N_("show extended annotations and reasons, if available")),
+ OPT_EXPIRY_DATE(0, "expire", &expire,
+ N_("add 'prunable' annotation to worktrees older than <time>")),
OPT_END()
};
+ expire = TIME_MAX;
ac = parse_options(ac, av, prefix, options, worktree_usage, 0);
if (ac)
usage_with_options(worktree_usage, options);
+ else if (verbose && porcelain)
+ die(_("--verbose and --porcelain are mutually exclusive"));
else {
struct worktree **worktrees = get_worktrees();
int path_maxlen = 0, abbrev = DEFAULT_ABBREV, i;
@@ -1052,10 +1012,10 @@ static int repair(int ac, const char **av, const char *prefix)
int rc = 0;
ac = parse_options(ac, av, prefix, options, worktree_usage, 0);
- repair_worktrees(report_repair, &rc);
p = ac > 0 ? av : self;
for (; *p; p++)
repair_worktree_at_path(*p, report_repair, &rc);
+ repair_worktrees(report_repair, &rc);
return rc;
}
diff --git a/bulk-checkin.c b/bulk-checkin.c
index 583aacb..6f3c97c 100644
--- a/bulk-checkin.c
+++ b/bulk-checkin.c
@@ -211,7 +211,7 @@ static int deflate_to_pack(struct bulk_checkin_state *state,
/* Note: idx is non-NULL when we are writing */
if ((flags & HASH_WRITE_OBJECT) != 0)
- idx = xcalloc(1, sizeof(*idx));
+ CALLOC_ARRAY(idx, 1);
already_hashed_to = 0;
diff --git a/bundle.c b/bundle.c
index cb0e593..693d619 100644
--- a/bundle.c
+++ b/bundle.c
@@ -338,48 +338,6 @@ static int write_pack_data(int bundle_fd, struct rev_info *revs, struct strvec *
return 0;
}
-static int compute_and_write_prerequisites(int bundle_fd,
- struct rev_info *revs,
- int argc, const char **argv)
-{
- struct child_process rls = CHILD_PROCESS_INIT;
- struct strbuf buf = STRBUF_INIT;
- FILE *rls_fout;
- int i;
-
- strvec_pushl(&rls.args,
- "rev-list", "--boundary", "--pretty=oneline",
- NULL);
- for (i = 1; i < argc; i++)
- strvec_push(&rls.args, argv[i]);
- rls.out = -1;
- rls.git_cmd = 1;
- if (start_command(&rls))
- return -1;
- rls_fout = xfdopen(rls.out, "r");
- while (strbuf_getwholeline(&buf, rls_fout, '\n') != EOF) {
- struct object_id oid;
- if (buf.len > 0 && buf.buf[0] == '-') {
- write_or_die(bundle_fd, buf.buf, buf.len);
- if (!get_oid_hex(buf.buf + 1, &oid)) {
- struct object *object = parse_object_or_die(&oid,
- buf.buf);
- object->flags |= UNINTERESTING;
- add_pending_object(revs, object, buf.buf);
- }
- } else if (!get_oid_hex(buf.buf, &oid)) {
- struct object *object = parse_object_or_die(&oid,
- buf.buf);
- object->flags |= SHOWN;
- }
- }
- strbuf_release(&buf);
- fclose(rls_fout);
- if (finish_command(&rls))
- return error(_("rev-list died"));
- return 0;
-}
-
/*
* Write out bundle refs based on the tips already
* parsed into revs.pending. As a side effect, may
@@ -474,6 +432,38 @@ static int write_bundle_refs(int bundle_fd, struct rev_info *revs)
return ref_count;
}
+struct bundle_prerequisites_info {
+ struct object_array *pending;
+ int fd;
+};
+
+static void write_bundle_prerequisites(struct commit *commit, void *data)
+{
+ struct bundle_prerequisites_info *bpi = data;
+ struct object *object;
+ struct pretty_print_context ctx = { 0 };
+ struct strbuf buf = STRBUF_INIT;
+
+ if (!(commit->object.flags & BOUNDARY))
+ return;
+ strbuf_addf(&buf, "-%s ", oid_to_hex(&commit->object.oid));
+ write_or_die(bpi->fd, buf.buf, buf.len);
+
+ ctx.fmt = CMIT_FMT_ONELINE;
+ ctx.output_encoding = get_log_output_encoding();
+ strbuf_reset(&buf);
+ pretty_print_commit(&ctx, commit, &buf);
+ strbuf_trim(&buf);
+
+ object = (struct object *)commit;
+ object->flags |= UNINTERESTING;
+ add_object_array_with_path(object, buf.buf, bpi->pending, S_IFINVALID,
+ NULL);
+ strbuf_addch(&buf, '\n');
+ write_or_die(bpi->fd, buf.buf, buf.len);
+ strbuf_release(&buf);
+}
+
int create_bundle(struct repository *r, const char *path,
int argc, const char **argv, struct strvec *pack_options, int version)
{
@@ -481,8 +471,10 @@ int create_bundle(struct repository *r, const char *path,
int bundle_fd = -1;
int bundle_to_stdout;
int ref_count = 0;
- struct rev_info revs;
+ struct rev_info revs, revs_copy;
int min_version = the_hash_algo == &hash_algos[GIT_HASH_SHA1] ? 2 : 3;
+ struct bundle_prerequisites_info bpi;
+ int i;
bundle_to_stdout = !strcmp(path, "-");
if (bundle_to_stdout)
@@ -512,10 +504,6 @@ int create_bundle(struct repository *r, const char *path,
save_commit_buffer = 0;
repo_init_revisions(r, &revs, NULL);
- /* write prerequisites */
- if (compute_and_write_prerequisites(bundle_fd, &revs, argc, argv))
- goto err;
-
argc = setup_revisions(argc, argv, &revs, NULL);
if (argc > 1) {
@@ -523,16 +511,37 @@ int create_bundle(struct repository *r, const char *path,
goto err;
}
- object_array_remove_duplicates(&revs.pending);
+ /* save revs.pending in revs_copy for later use */
+ memcpy(&revs_copy, &revs, sizeof(revs));
+ revs_copy.pending.nr = 0;
+ revs_copy.pending.alloc = 0;
+ revs_copy.pending.objects = NULL;
+ for (i = 0; i < revs.pending.nr; i++) {
+ struct object_array_entry *e = revs.pending.objects + i;
+ if (e)
+ add_object_array_with_path(e->item, e->name,
+ &revs_copy.pending,
+ e->mode, e->path);
+ }
- ref_count = write_bundle_refs(bundle_fd, &revs);
+ /* write prerequisites */
+ revs.boundary = 1;
+ if (prepare_revision_walk(&revs))
+ die("revision walk setup failed");
+ bpi.fd = bundle_fd;
+ bpi.pending = &revs_copy.pending;
+ traverse_commit_list(&revs, write_bundle_prerequisites, NULL, &bpi);
+ object_array_remove_duplicates(&revs_copy.pending);
+
+ /* write bundle refs */
+ ref_count = write_bundle_refs(bundle_fd, &revs_copy);
if (!ref_count)
die(_("Refusing to create empty bundle."));
else if (ref_count < 0)
goto err;
/* write pack */
- if (write_pack_data(bundle_fd, &revs, pack_options))
+ if (write_pack_data(bundle_fd, &revs_copy, pack_options))
goto err;
if (!bundle_to_stdout) {
diff --git a/cache-tree.c b/cache-tree.c
index a537a80..add1f07 100644
--- a/cache-tree.c
+++ b/cache-tree.c
@@ -45,7 +45,7 @@ static int subtree_name_cmp(const char *one, int onelen,
return memcmp(one, two, onelen);
}
-static int subtree_pos(struct cache_tree *it, const char *path, int pathlen)
+int cache_tree_subtree_pos(struct cache_tree *it, const char *path, int pathlen)
{
struct cache_tree_sub **down = it->down;
int lo, hi;
@@ -72,7 +72,7 @@ static struct cache_tree_sub *find_subtree(struct cache_tree *it,
int create)
{
struct cache_tree_sub *down;
- int pos = subtree_pos(it, path, pathlen);
+ int pos = cache_tree_subtree_pos(it, path, pathlen);
if (0 <= pos)
return it->down[pos];
if (!create)
@@ -123,7 +123,7 @@ static int do_invalidate_path(struct cache_tree *it, const char *path)
it->entry_count = -1;
if (!*slash) {
int pos;
- pos = subtree_pos(it, path, namelen);
+ pos = cache_tree_subtree_pos(it, path, namelen);
if (0 <= pos) {
cache_tree_free(&it->down[pos]->cache_tree);
free(it->down[pos]);
@@ -151,16 +151,15 @@ void cache_tree_invalidate_path(struct index_state *istate, const char *path)
istate->cache_changed |= CACHE_TREE_CHANGED;
}
-static int verify_cache(struct cache_entry **cache,
- int entries, int flags)
+static int verify_cache(struct index_state *istate, int flags)
{
- int i, funny;
+ unsigned i, funny;
int silent = flags & WRITE_TREE_SILENT;
/* Verify that the tree is merged */
funny = 0;
- for (i = 0; i < entries; i++) {
- const struct cache_entry *ce = cache[i];
+ for (i = 0; i < istate->cache_nr; i++) {
+ const struct cache_entry *ce = istate->cache[i];
if (ce_stage(ce)) {
if (silent)
return -1;
@@ -180,17 +179,19 @@ static int verify_cache(struct cache_entry **cache,
* stage 0 entries.
*/
funny = 0;
- for (i = 0; i < entries - 1; i++) {
+ for (i = 0; i + 1 < istate->cache_nr; i++) {
/* path/file always comes after path because of the way
* the cache is sorted. Also path can appear only once,
* which means conflicting one would immediately follow.
*/
- const char *this_name = cache[i]->name;
- const char *next_name = cache[i+1]->name;
- int this_len = strlen(this_name);
- if (this_len < strlen(next_name) &&
- strncmp(this_name, next_name, this_len) == 0 &&
- next_name[this_len] == '/') {
+ const struct cache_entry *this_ce = istate->cache[i];
+ const struct cache_entry *next_ce = istate->cache[i + 1];
+ const char *this_name = this_ce->name;
+ const char *next_name = next_ce->name;
+ int this_len = ce_namelen(this_ce);
+ if (this_len < ce_namelen(next_ce) &&
+ next_name[this_len] == '/' &&
+ strncmp(this_name, next_name, this_len) == 0) {
if (10 < ++funny) {
fprintf(stderr, "...\n");
break;
@@ -434,15 +435,21 @@ static int update_one(struct cache_tree *it,
int cache_tree_update(struct index_state *istate, int flags)
{
- struct cache_tree *it = istate->cache_tree;
- struct cache_entry **cache = istate->cache;
- int entries = istate->cache_nr;
- int skip, i = verify_cache(cache, entries, flags);
+ int skip, i;
+
+ i = verify_cache(istate, flags);
if (i)
return i;
+
+ if (!istate->cache_tree)
+ istate->cache_tree = cache_tree();
+
trace_performance_enter();
- i = update_one(it, cache, entries, "", 0, &skip, flags);
+ trace2_region_enter("cache_tree", "update", the_repository);
+ i = update_one(istate->cache_tree, istate->cache, istate->cache_nr,
+ "", 0, &skip, flags);
+ trace2_region_leave("cache_tree", "update", the_repository);
trace_performance_leave("cache_tree_update");
if (i < 0)
return i;
@@ -492,7 +499,9 @@ static void write_one(struct strbuf *buffer, struct cache_tree *it,
void cache_tree_write(struct strbuf *sb, struct cache_tree *root)
{
+ trace2_region_enter("cache_tree", "write", the_repository);
write_one(sb, root, "", 0);
+ trace2_region_leave("cache_tree", "write", the_repository);
}
static struct cache_tree *read_one(const char **buffer, unsigned long *size_p)
@@ -555,7 +564,7 @@ static struct cache_tree *read_one(const char **buffer, unsigned long *size_p)
* hence +2.
*/
it->subtree_alloc = subtree_nr + 2;
- it->down = xcalloc(it->subtree_alloc, sizeof(struct cache_tree_sub *));
+ CALLOC_ARRAY(it->down, it->subtree_alloc);
for (i = 0; i < subtree_nr; i++) {
/* read each subtree */
struct cache_tree *sub;
@@ -581,9 +590,16 @@ static struct cache_tree *read_one(const char **buffer, unsigned long *size_p)
struct cache_tree *cache_tree_read(const char *buffer, unsigned long size)
{
+ struct cache_tree *result;
+
if (buffer[0])
return NULL; /* not the whole tree */
- return read_one(&buffer, &size);
+
+ trace2_region_enter("cache_tree", "read", the_repository);
+ result = read_one(&buffer, &size);
+ trace2_region_leave("cache_tree", "read", the_repository);
+
+ return result;
}
static struct cache_tree *cache_tree_find(struct cache_tree *it, const char *path)
@@ -622,9 +638,6 @@ static int write_index_as_tree_internal(struct object_id *oid,
cache_tree_valid = 0;
}
- if (!index_state->cache_tree)
- index_state->cache_tree = cache_tree();
-
if (!cache_tree_valid && cache_tree_update(index_state, flags) < 0)
return WRITE_TREE_UNMERGED_INDEX;
@@ -733,10 +746,13 @@ void prime_cache_tree(struct repository *r,
struct index_state *istate,
struct tree *tree)
{
+ trace2_region_enter("cache-tree", "prime_cache_tree", the_repository);
cache_tree_free(&istate->cache_tree);
istate->cache_tree = cache_tree();
+
prime_cache_tree_rec(r, istate->cache_tree, tree);
istate->cache_changed |= CACHE_TREE_CHANGED;
+ trace2_region_leave("cache-tree", "prime_cache_tree", the_repository);
}
/*
diff --git a/cache-tree.h b/cache-tree.h
index 639bfa5..8efecce 100644
--- a/cache-tree.h
+++ b/cache-tree.h
@@ -27,6 +27,8 @@ void cache_tree_free(struct cache_tree **);
void cache_tree_invalidate_path(struct index_state *, const char *);
struct cache_tree_sub *cache_tree_sub(struct cache_tree *, const char *);
+int cache_tree_subtree_pos(struct cache_tree *it, const char *path, int pathlen);
+
void cache_tree_write(struct strbuf *, struct cache_tree *root);
struct cache_tree *cache_tree_read(const char *buffer, unsigned long size);
diff --git a/cache.h b/cache.h
index 0a0b32f..6fda809 100644
--- a/cache.h
+++ b/cache.h
@@ -328,6 +328,7 @@ struct index_state {
struct ewah_bitmap *fsmonitor_dirty;
struct mem_pool *ce_mem_pool;
struct progress *progress;
+ struct repository *repo;
};
/* Name hashing */
@@ -472,6 +473,7 @@ static inline enum object_type object_type(unsigned int mode)
#define TEMPLATE_DIR_ENVIRONMENT "GIT_TEMPLATE_DIR"
#define CONFIG_ENVIRONMENT "GIT_CONFIG"
#define CONFIG_DATA_ENVIRONMENT "GIT_CONFIG_PARAMETERS"
+#define CONFIG_COUNT_ENVIRONMENT "GIT_CONFIG_COUNT"
#define EXEC_PATH_ENVIRONMENT "GIT_EXEC_PATH"
#define CEILING_DIRECTORIES_ENVIRONMENT "GIT_CEILING_DIRECTORIES"
#define NO_REPLACE_OBJECTS_ENVIRONMENT "GIT_NO_REPLACE_OBJECTS"
@@ -1231,6 +1233,8 @@ static inline int is_absolute_path(const char *path)
int is_directory(const char *);
char *strbuf_realpath(struct strbuf *resolved, const char *path,
int die_on_error);
+char *strbuf_realpath_forgiving(struct strbuf *resolved, const char *path,
+ int die_on_error);
char *real_pathdup(const char *path, int die_on_error);
const char *absolute_path(const char *path);
char *absolute_pathdup(const char *path);
diff --git a/chunk-format.c b/chunk-format.c
new file mode 100644
index 0000000..da191e5
--- /dev/null
+++ b/chunk-format.c
@@ -0,0 +1,179 @@
+#include "cache.h"
+#include "chunk-format.h"
+#include "csum-file.h"
+
+/*
+ * When writing a chunk-based file format, collect the chunks in
+ * an array of chunk_info structs. The size stores the _expected_
+ * amount of data that will be written by write_fn.
+ */
+struct chunk_info {
+ uint32_t id;
+ uint64_t size;
+ chunk_write_fn write_fn;
+
+ const void *start;
+};
+
+struct chunkfile {
+ struct hashfile *f;
+
+ struct chunk_info *chunks;
+ size_t chunks_nr;
+ size_t chunks_alloc;
+};
+
+struct chunkfile *init_chunkfile(struct hashfile *f)
+{
+ struct chunkfile *cf = xcalloc(1, sizeof(*cf));
+ cf->f = f;
+ return cf;
+}
+
+void free_chunkfile(struct chunkfile *cf)
+{
+ if (!cf)
+ return;
+ free(cf->chunks);
+ free(cf);
+}
+
+int get_num_chunks(struct chunkfile *cf)
+{
+ return cf->chunks_nr;
+}
+
+void add_chunk(struct chunkfile *cf,
+ uint32_t id,
+ size_t size,
+ chunk_write_fn fn)
+{
+ ALLOC_GROW(cf->chunks, cf->chunks_nr + 1, cf->chunks_alloc);
+
+ cf->chunks[cf->chunks_nr].id = id;
+ cf->chunks[cf->chunks_nr].write_fn = fn;
+ cf->chunks[cf->chunks_nr].size = size;
+ cf->chunks_nr++;
+}
+
+int write_chunkfile(struct chunkfile *cf, void *data)
+{
+ int i;
+ uint64_t cur_offset = hashfile_total(cf->f);
+
+ /* Add the table of contents to the current offset */
+ cur_offset += (cf->chunks_nr + 1) * CHUNK_TOC_ENTRY_SIZE;
+
+ for (i = 0; i < cf->chunks_nr; i++) {
+ hashwrite_be32(cf->f, cf->chunks[i].id);
+ hashwrite_be64(cf->f, cur_offset);
+
+ cur_offset += cf->chunks[i].size;
+ }
+
+ /* Trailing entry marks the end of the chunks */
+ hashwrite_be32(cf->f, 0);
+ hashwrite_be64(cf->f, cur_offset);
+
+ for (i = 0; i < cf->chunks_nr; i++) {
+ off_t start_offset = hashfile_total(cf->f);
+ int result = cf->chunks[i].write_fn(cf->f, data);
+
+ if (result)
+ return result;
+
+ if (hashfile_total(cf->f) - start_offset != cf->chunks[i].size)
+ BUG("expected to write %"PRId64" bytes to chunk %"PRIx32", but wrote %"PRId64" instead",
+ cf->chunks[i].size, cf->chunks[i].id,
+ hashfile_total(cf->f) - start_offset);
+ }
+
+ return 0;
+}
+
+int read_table_of_contents(struct chunkfile *cf,
+ const unsigned char *mfile,
+ size_t mfile_size,
+ uint64_t toc_offset,
+ int toc_length)
+{
+ int i;
+ uint32_t chunk_id;
+ const unsigned char *table_of_contents = mfile + toc_offset;
+
+ ALLOC_GROW(cf->chunks, toc_length, cf->chunks_alloc);
+
+ while (toc_length--) {
+ uint64_t chunk_offset, next_chunk_offset;
+
+ chunk_id = get_be32(table_of_contents);
+ chunk_offset = get_be64(table_of_contents + 4);
+
+ if (!chunk_id) {
+ error(_("terminating chunk id appears earlier than expected"));
+ return 1;
+ }
+
+ table_of_contents += CHUNK_TOC_ENTRY_SIZE;
+ next_chunk_offset = get_be64(table_of_contents + 4);
+
+ if (next_chunk_offset < chunk_offset ||
+ next_chunk_offset > mfile_size - the_hash_algo->rawsz) {
+ error(_("improper chunk offset(s) %"PRIx64" and %"PRIx64""),
+ chunk_offset, next_chunk_offset);
+ return -1;
+ }
+
+ for (i = 0; i < cf->chunks_nr; i++) {
+ if (cf->chunks[i].id == chunk_id) {
+ error(_("duplicate chunk ID %"PRIx32" found"),
+ chunk_id);
+ return -1;
+ }
+ }
+
+ cf->chunks[cf->chunks_nr].id = chunk_id;
+ cf->chunks[cf->chunks_nr].start = mfile + chunk_offset;
+ cf->chunks[cf->chunks_nr].size = next_chunk_offset - chunk_offset;
+ cf->chunks_nr++;
+ }
+
+ chunk_id = get_be32(table_of_contents);
+ if (chunk_id) {
+ error(_("final chunk has non-zero id %"PRIx32""), chunk_id);
+ return -1;
+ }
+
+ return 0;
+}
+
+static int pair_chunk_fn(const unsigned char *chunk_start,
+ size_t chunk_size,
+ void *data)
+{
+ const unsigned char **p = data;
+ *p = chunk_start;
+ return 0;
+}
+
+int pair_chunk(struct chunkfile *cf,
+ uint32_t chunk_id,
+ const unsigned char **p)
+{
+ return read_chunk(cf, chunk_id, pair_chunk_fn, p);
+}
+
+int read_chunk(struct chunkfile *cf,
+ uint32_t chunk_id,
+ chunk_read_fn fn,
+ void *data)
+{
+ int i;
+
+ for (i = 0; i < cf->chunks_nr; i++) {
+ if (cf->chunks[i].id == chunk_id)
+ return fn(cf->chunks[i].start, cf->chunks[i].size, data);
+ }
+
+ return CHUNK_NOT_FOUND;
+}
diff --git a/chunk-format.h b/chunk-format.h
new file mode 100644
index 0000000..9ccbe00
--- /dev/null
+++ b/chunk-format.h
@@ -0,0 +1,68 @@
+#ifndef CHUNK_FORMAT_H
+#define CHUNK_FORMAT_H
+
+#include "git-compat-util.h"
+
+struct hashfile;
+struct chunkfile;
+
+#define CHUNK_TOC_ENTRY_SIZE (sizeof(uint32_t) + sizeof(uint64_t))
+
+/*
+ * Initialize a 'struct chunkfile' for writing _or_ reading a file
+ * with the chunk format.
+ *
+ * If writing a file, supply a non-NULL 'struct hashfile *' that will
+ * be used to write.
+ *
+ * If reading a file, use a NULL 'struct hashfile *' and then call
+ * read_table_of_contents(). Supply the memory-mapped data to the
+ * pair_chunk() or read_chunk() methods, as appropriate.
+ *
+ * DO NOT MIX THESE MODES. Use different 'struct chunkfile' instances
+ * for reading and writing.
+ */
+struct chunkfile *init_chunkfile(struct hashfile *f);
+void free_chunkfile(struct chunkfile *cf);
+int get_num_chunks(struct chunkfile *cf);
+typedef int (*chunk_write_fn)(struct hashfile *f, void *data);
+void add_chunk(struct chunkfile *cf,
+ uint32_t id,
+ size_t size,
+ chunk_write_fn fn);
+int write_chunkfile(struct chunkfile *cf, void *data);
+
+int read_table_of_contents(struct chunkfile *cf,
+ const unsigned char *mfile,
+ size_t mfile_size,
+ uint64_t toc_offset,
+ int toc_length);
+
+#define CHUNK_NOT_FOUND (-2)
+
+/*
+ * Find 'chunk_id' in the given chunkfile and assign the
+ * given pointer to the position in the mmap'd file where
+ * that chunk begins.
+ *
+ * Returns CHUNK_NOT_FOUND if the chunk does not exist.
+ */
+int pair_chunk(struct chunkfile *cf,
+ uint32_t chunk_id,
+ const unsigned char **p);
+
+typedef int (*chunk_read_fn)(const unsigned char *chunk_start,
+ size_t chunk_size, void *data);
+/*
+ * Find 'chunk_id' in the given chunkfile and call the
+ * given chunk_read_fn method with the information for
+ * that chunk.
+ *
+ * Returns CHUNK_NOT_FOUND if the chunk does not exist.
+ */
+int read_chunk(struct chunkfile *cf,
+ uint32_t chunk_id,
+ chunk_read_fn fn,
+ void *data);
+
+#endif
diff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh
index 0b1184e..67852d0 100755
--- a/ci/install-dependencies.sh
+++ b/ci/install-dependencies.sh
@@ -72,7 +72,7 @@
test -n "$ALREADY_HAVE_ASCIIDOCTOR" ||
sudo gem install --version 1.5.8 asciidoctor
;;
-linux-gcc-4.8|GETTEXT_POISON)
+linux-gcc-default|linux-gcc-4.8)
sudo apt-get -q update
sudo apt-get -q -y install $UBUNTU_COMMON_PKGS
;;
diff --git a/ci/lib.sh b/ci/lib.sh
index 38c0eac..d848c03 100755
--- a/ci/lib.sh
+++ b/ci/lib.sh
@@ -220,8 +220,7 @@
# Travis CI OS X
export GIT_SKIP_TESTS="t9810 t9816"
;;
-GETTEXT_POISON)
- export GIT_TEST_GETTEXT_POISON=true
+linux-gcc-default)
;;
Linux32)
CC=gcc
diff --git a/ci/run-build-and-tests.sh b/ci/run-build-and-tests.sh
index 6c27b88..a66b5e8 100755
--- a/ci/run-build-and-tests.sh
+++ b/ci/run-build-and-tests.sh
@@ -13,6 +13,7 @@
make
case "$jobname" in
linux-gcc)
+ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
make test
export GIT_TEST_SPLIT_INDEX=yes
export GIT_TEST_FULL_IN_PACK_ARRAY=true
@@ -22,6 +23,8 @@
export GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS=1
export GIT_TEST_MULTI_PACK_INDEX=1
export GIT_TEST_ADD_I_USE_BUILTIN=1
+ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=master
+ export GIT_TEST_WRITE_REV_INDEX=1
make test
;;
linux-clang)
diff --git a/combine-diff.c b/combine-diff.c
index 9228aeb..06635f9 100644
--- a/combine-diff.c
+++ b/combine-diff.c
@@ -214,11 +214,11 @@ static struct lline *coalesce_lines(struct lline *base, int *lenbase,
* - Else if we have NEW, insert newend lline into base and
* consume newend
*/
- lcs = xcalloc(st_add(origbaselen, 1), sizeof(int*));
- directions = xcalloc(st_add(origbaselen, 1), sizeof(enum coalesce_direction*));
+ CALLOC_ARRAY(lcs, st_add(origbaselen, 1));
+ CALLOC_ARRAY(directions, st_add(origbaselen, 1));
for (i = 0; i < origbaselen + 1; i++) {
- lcs[i] = xcalloc(st_add(lennew, 1), sizeof(int));
- directions[i] = xcalloc(st_add(lennew, 1), sizeof(enum coalesce_direction));
+ CALLOC_ARRAY(lcs[i], st_add(lennew, 1));
+ CALLOC_ARRAY(directions[i], st_add(lennew, 1));
directions[i][0] = BASE;
}
for (j = 1; j < lennew + 1; j++)
@@ -398,8 +398,8 @@ static void consume_hunk(void *state_,
state->lost_bucket = &state->sline[state->nb-1];
}
if (!state->sline[state->nb-1].p_lno)
- state->sline[state->nb-1].p_lno =
- xcalloc(state->num_parent, sizeof(unsigned long));
+ CALLOC_ARRAY(state->sline[state->nb - 1].p_lno,
+ state->num_parent);
state->sline[state->nb-1].p_lno[state->n] = state->ob;
}
@@ -1159,7 +1159,7 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
if (result_size && result[result_size-1] != '\n')
cnt++; /* incomplete line */
- sline = xcalloc(st_add(cnt, 2), sizeof(*sline));
+ CALLOC_ARRAY(sline, st_add(cnt, 2));
sline[0].bol = result;
for (lno = 0, cp = result; cp < result + result_size; cp++) {
if (*cp == '\n') {
@@ -1178,7 +1178,7 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
/* Even p_lno[cnt+1] is valid -- that is for the end line number
* for deletion hunk at the end.
*/
- sline[0].p_lno = xcalloc(st_mult(st_add(cnt, 2), num_parent), sizeof(unsigned long));
+ CALLOC_ARRAY(sline[0].p_lno, st_mult(st_add(cnt, 2), num_parent));
for (lno = 0; lno <= cnt; lno++)
sline[lno+1].p_lno = sline[lno].p_lno + num_parent;
@@ -1319,7 +1319,7 @@ static struct diff_filepair *combined_pair(struct combine_diff_path *p,
struct diff_filespec *pool;
pair = xmalloc(sizeof(*pair));
- pool = xcalloc(st_add(num_parent, 1), sizeof(struct diff_filespec));
+ CALLOC_ARRAY(pool, st_add(num_parent, 1));
pair->one = pool + 1;
pair->two = pool;
@@ -1348,7 +1348,7 @@ static void handle_combined_callback(struct diff_options *opt,
struct diff_queue_struct q;
int i;
- q.queue = xcalloc(num_paths, sizeof(struct diff_filepair *));
+ CALLOC_ARRAY(q.queue, num_paths);
q.alloc = num_paths;
q.nr = num_paths;
for (i = 0, p = paths; p; p = p->next)
diff --git a/command-list.txt b/command-list.txt
index 9379b02..a289f09 100644
--- a/command-list.txt
+++ b/command-list.txt
@@ -204,6 +204,7 @@
gitglossary guide
githooks guide
gitignore guide
+gitmailmap guide
gitmodules guide
gitnamespaces guide
gitremote-helpers guide
diff --git a/commit-graph.c b/commit-graph.c
index 0316410..e21eeea 100644
--- a/commit-graph.c
+++ b/commit-graph.c
@@ -7,7 +7,7 @@
#include "object.h"
#include "refs.h"
#include "revision.h"
-#include "sha1-lookup.h"
+#include "hash-lookup.h"
#include "commit-graph.h"
#include "object-store.h"
#include "alloc.h"
@@ -19,6 +19,7 @@
#include "shallow.h"
#include "json-writer.h"
#include "trace2.h"
+#include "chunk-format.h"
void git_test_write_commit_graph_or_die(void)
{
@@ -38,11 +39,12 @@ void git_test_write_commit_graph_or_die(void)
#define GRAPH_CHUNKID_OIDFANOUT 0x4f494446 /* "OIDF" */
#define GRAPH_CHUNKID_OIDLOOKUP 0x4f49444c /* "OIDL" */
#define GRAPH_CHUNKID_DATA 0x43444154 /* "CDAT" */
+#define GRAPH_CHUNKID_GENERATION_DATA 0x47444154 /* "GDAT" */
+#define GRAPH_CHUNKID_GENERATION_DATA_OVERFLOW 0x47444f56 /* "GDOV" */
#define GRAPH_CHUNKID_EXTRAEDGES 0x45444745 /* "EDGE" */
#define GRAPH_CHUNKID_BLOOMINDEXES 0x42494458 /* "BIDX" */
#define GRAPH_CHUNKID_BLOOMDATA 0x42444154 /* "BDAT" */
#define GRAPH_CHUNKID_BASE 0x42415345 /* "BASE" */
-#define MAX_NUM_CHUNKS 7
#define GRAPH_DATA_WIDTH (the_hash_algo->rawsz + 16)
@@ -57,13 +59,16 @@ void git_test_write_commit_graph_or_die(void)
#define GRAPH_HEADER_SIZE 8
#define GRAPH_FANOUT_SIZE (4 * 256)
-#define GRAPH_CHUNKLOOKUP_WIDTH 12
-#define GRAPH_MIN_SIZE (GRAPH_HEADER_SIZE + 4 * GRAPH_CHUNKLOOKUP_WIDTH \
+#define GRAPH_MIN_SIZE (GRAPH_HEADER_SIZE + 4 * CHUNK_TOC_ENTRY_SIZE \
+ GRAPH_FANOUT_SIZE + the_hash_algo->rawsz)
+#define CORRECTED_COMMIT_DATE_OFFSET_OVERFLOW (1ULL << 31)
+
/* Remember to update object flag allocation in object.h */
#define REACHABLE (1u<<15)
+define_commit_slab(topo_level_slab, uint32_t);
+
/* Keep track of the order in which commits are added to our list. */
define_commit_slab(commit_pos, int);
static struct commit_pos commit_pos = COMMIT_SLAB_INIT(1, commit_pos);
@@ -99,7 +104,7 @@ uint32_t commit_graph_position(const struct commit *c)
return data ? data->graph_pos : COMMIT_NOT_FROM_GRAPH;
}
-uint32_t commit_graph_generation(const struct commit *c)
+timestamp_t commit_graph_generation(const struct commit *c)
{
struct commit_graph_data *data =
commit_graph_data_slab_peek(&commit_graph_data_slab, c);
@@ -139,13 +144,17 @@ static struct commit_graph_data *commit_graph_data_at(const struct commit *c)
return data;
}
+/*
+ * Should be used only while writing commit-graph as it compares
+ * generation value of commits by directly accessing commit-slab.
+ */
static int commit_gen_cmp(const void *va, const void *vb)
{
const struct commit *a = *(const struct commit **)va;
const struct commit *b = *(const struct commit **)vb;
- uint32_t generation_a = commit_graph_generation(a);
- uint32_t generation_b = commit_graph_generation(b);
+ const timestamp_t generation_a = commit_graph_data_at(a)->generation;
+ const timestamp_t generation_b = commit_graph_data_at(b)->generation;
/* lower generation commits first */
if (generation_a < generation_b)
return -1;
@@ -288,15 +297,43 @@ static int verify_commit_graph_lite(struct commit_graph *g)
return 0;
}
+static int graph_read_oid_lookup(const unsigned char *chunk_start,
+ size_t chunk_size, void *data)
+{
+ struct commit_graph *g = data;
+ g->chunk_oid_lookup = chunk_start;
+ g->num_commits = chunk_size / g->hash_len;
+ return 0;
+}
+
+static int graph_read_bloom_data(const unsigned char *chunk_start,
+ size_t chunk_size, void *data)
+{
+ struct commit_graph *g = data;
+ uint32_t hash_version;
+ g->chunk_bloom_data = chunk_start;
+ hash_version = get_be32(chunk_start);
+
+ if (hash_version != 1)
+ return 0;
+
+ g->bloom_filter_settings = xmalloc(sizeof(struct bloom_filter_settings));
+ g->bloom_filter_settings->hash_version = hash_version;
+ g->bloom_filter_settings->num_hashes = get_be32(chunk_start + 4);
+ g->bloom_filter_settings->bits_per_entry = get_be32(chunk_start + 8);
+ g->bloom_filter_settings->max_changed_paths = DEFAULT_BLOOM_MAX_CHANGES;
+
+ return 0;
+}
+
struct commit_graph *parse_commit_graph(struct repository *r,
void *graph_map, size_t graph_size)
{
- const unsigned char *data, *chunk_lookup;
- uint32_t i;
+ const unsigned char *data;
struct commit_graph *graph;
- uint64_t next_chunk_offset;
uint32_t graph_signature;
unsigned char graph_version, hash_version;
+ struct chunkfile *cf = NULL;
if (!graph_map)
return NULL;
@@ -337,7 +374,7 @@ struct commit_graph *parse_commit_graph(struct repository *r,
graph->data_len = graph_size;
if (graph_size < GRAPH_HEADER_SIZE +
- (graph->num_chunks + 1) * GRAPH_CHUNKLOOKUP_WIDTH +
+ (graph->num_chunks + 1) * CHUNK_TOC_ENTRY_SIZE +
GRAPH_FANOUT_SIZE + the_hash_algo->rawsz) {
error(_("commit-graph file is too small to hold %u chunks"),
graph->num_chunks);
@@ -345,94 +382,28 @@ struct commit_graph *parse_commit_graph(struct repository *r,
return NULL;
}
- chunk_lookup = data + 8;
- next_chunk_offset = get_be64(chunk_lookup + 4);
- for (i = 0; i < graph->num_chunks; i++) {
- uint32_t chunk_id;
- uint64_t chunk_offset = next_chunk_offset;
- int chunk_repeated = 0;
+ cf = init_chunkfile(NULL);
- chunk_id = get_be32(chunk_lookup + 0);
+ if (read_table_of_contents(cf, graph->data, graph_size,
+ GRAPH_HEADER_SIZE, graph->num_chunks))
+ goto free_and_return;
- chunk_lookup += GRAPH_CHUNKLOOKUP_WIDTH;
- next_chunk_offset = get_be64(chunk_lookup + 4);
+ pair_chunk(cf, GRAPH_CHUNKID_OIDFANOUT,
+ (const unsigned char **)&graph->chunk_oid_fanout);
+ read_chunk(cf, GRAPH_CHUNKID_OIDLOOKUP, graph_read_oid_lookup, graph);
+ pair_chunk(cf, GRAPH_CHUNKID_DATA, &graph->chunk_commit_data);
+ pair_chunk(cf, GRAPH_CHUNKID_EXTRAEDGES, &graph->chunk_extra_edges);
+ pair_chunk(cf, GRAPH_CHUNKID_BASE, &graph->chunk_base_graphs);
+ pair_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA,
+ &graph->chunk_generation_data);
+ pair_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA_OVERFLOW,
+ &graph->chunk_generation_data_overflow);
- if (chunk_offset > graph_size - the_hash_algo->rawsz) {
- error(_("commit-graph improper chunk offset %08x%08x"), (uint32_t)(chunk_offset >> 32),
- (uint32_t)chunk_offset);
- goto free_and_return;
- }
-
- switch (chunk_id) {
- case GRAPH_CHUNKID_OIDFANOUT:
- if (graph->chunk_oid_fanout)
- chunk_repeated = 1;
- else
- graph->chunk_oid_fanout = (uint32_t*)(data + chunk_offset);
- break;
-
- case GRAPH_CHUNKID_OIDLOOKUP:
- if (graph->chunk_oid_lookup)
- chunk_repeated = 1;
- else {
- graph->chunk_oid_lookup = data + chunk_offset;
- graph->num_commits = (next_chunk_offset - chunk_offset)
- / graph->hash_len;
- }
- break;
-
- case GRAPH_CHUNKID_DATA:
- if (graph->chunk_commit_data)
- chunk_repeated = 1;
- else
- graph->chunk_commit_data = data + chunk_offset;
- break;
-
- case GRAPH_CHUNKID_EXTRAEDGES:
- if (graph->chunk_extra_edges)
- chunk_repeated = 1;
- else
- graph->chunk_extra_edges = data + chunk_offset;
- break;
-
- case GRAPH_CHUNKID_BASE:
- if (graph->chunk_base_graphs)
- chunk_repeated = 1;
- else
- graph->chunk_base_graphs = data + chunk_offset;
- break;
-
- case GRAPH_CHUNKID_BLOOMINDEXES:
- if (graph->chunk_bloom_indexes)
- chunk_repeated = 1;
- else if (r->settings.commit_graph_read_changed_paths)
- graph->chunk_bloom_indexes = data + chunk_offset;
- break;
-
- case GRAPH_CHUNKID_BLOOMDATA:
- if (graph->chunk_bloom_data)
- chunk_repeated = 1;
- else if (r->settings.commit_graph_read_changed_paths) {
- uint32_t hash_version;
- graph->chunk_bloom_data = data + chunk_offset;
- hash_version = get_be32(data + chunk_offset);
-
- if (hash_version != 1)
- break;
-
- graph->bloom_filter_settings = xmalloc(sizeof(struct bloom_filter_settings));
- graph->bloom_filter_settings->hash_version = hash_version;
- graph->bloom_filter_settings->num_hashes = get_be32(data + chunk_offset + 4);
- graph->bloom_filter_settings->bits_per_entry = get_be32(data + chunk_offset + 8);
- graph->bloom_filter_settings->max_changed_paths = DEFAULT_BLOOM_MAX_CHANGES;
- }
- break;
- }
-
- if (chunk_repeated) {
- error(_("commit-graph chunk id %08x appears multiple times"), chunk_id);
- goto free_and_return;
- }
+ if (r->settings.commit_graph_read_changed_paths) {
+ pair_chunk(cf, GRAPH_CHUNKID_BLOOMINDEXES,
+ &graph->chunk_bloom_indexes);
+ read_chunk(cf, GRAPH_CHUNKID_BLOOMDATA,
+ graph_read_bloom_data, graph);
}
if (graph->chunk_bloom_indexes && graph->chunk_bloom_data) {
@@ -449,9 +420,11 @@ struct commit_graph *parse_commit_graph(struct repository *r,
if (verify_commit_graph_lite(graph))
goto free_and_return;
+ free_chunkfile(cf);
return graph;
free_and_return:
+ free_chunkfile(cf);
free(graph->bloom_filter_settings);
free(graph);
return NULL;
@@ -543,7 +516,7 @@ static struct commit_graph *load_commit_graph_chain(struct repository *r,
return NULL;
count = st.st_size / (the_hash_algo->hexsz + 1);
- oids = xcalloc(count, sizeof(struct object_id));
+ CALLOC_ARRAY(oids, count);
prepare_alt_odb(r);
@@ -590,6 +563,31 @@ static struct commit_graph *load_commit_graph_chain(struct repository *r,
return graph_chain;
}
+/*
+ * returns 1 if and only if all graphs in the chain have
+ * corrected commit dates stored in the generation_data chunk.
+ */
+static int validate_mixed_generation_chain(struct commit_graph *g)
+{
+ int read_generation_data = 1;
+ struct commit_graph *p = g;
+
+ while (read_generation_data && p) {
+ read_generation_data = p->read_generation_data;
+ p = p->base_graph;
+ }
+
+ if (read_generation_data)
+ return 1;
+
+ while (g) {
+ g->read_generation_data = 0;
+ g = g->base_graph;
+ }
+
+ return 0;
+}
+
struct commit_graph *read_commit_graph_one(struct repository *r,
struct object_directory *odb)
{
@@ -598,6 +596,8 @@ struct commit_graph *read_commit_graph_one(struct repository *r,
if (!g)
g = load_commit_graph_chain(r, odb);
+ validate_mixed_generation_chain(g);
+
return g;
}
@@ -673,6 +673,20 @@ int generation_numbers_enabled(struct repository *r)
return !!first_generation;
}
+int corrected_commit_dates_enabled(struct repository *r)
+{
+ struct commit_graph *g;
+ if (!prepare_commit_graph(r))
+ return 0;
+
+ g = r->objects->commit_graph;
+
+ if (!g->num_commits)
+ return 0;
+
+ return g->read_generation_data;
+}
+
struct bloom_filter_settings *get_bloom_filter_settings(struct repository *r)
{
struct commit_graph *g = r->objects->commit_graph;
@@ -748,17 +762,41 @@ static void fill_commit_graph_info(struct commit *item, struct commit_graph *g,
{
const unsigned char *commit_data;
struct commit_graph_data *graph_data;
- uint32_t lex_index;
+ uint32_t lex_index, offset_pos;
+ uint64_t date_high, date_low, offset;
while (pos < g->num_commits_in_base)
g = g->base_graph;
+ if (pos >= g->num_commits + g->num_commits_in_base)
+ die(_("invalid commit position. commit-graph is likely corrupt"));
+
lex_index = pos - g->num_commits_in_base;
commit_data = g->chunk_commit_data + GRAPH_DATA_WIDTH * lex_index;
graph_data = commit_graph_data_at(item);
graph_data->graph_pos = pos;
- graph_data->generation = get_be32(commit_data + g->hash_len + 8) >> 2;
+
+ date_high = get_be32(commit_data + g->hash_len + 8) & 0x3;
+ date_low = get_be32(commit_data + g->hash_len + 12);
+ item->date = (timestamp_t)((date_high << 32) | date_low);
+
+ if (g->read_generation_data) {
+ offset = (timestamp_t)get_be32(g->chunk_generation_data + sizeof(uint32_t) * lex_index);
+
+ if (offset & CORRECTED_COMMIT_DATE_OFFSET_OVERFLOW) {
+ if (!g->chunk_generation_data_overflow)
+ die(_("commit-graph requires overflow generation data but has none"));
+
+ offset_pos = offset ^ CORRECTED_COMMIT_DATE_OFFSET_OVERFLOW;
+ graph_data->generation = get_be64(g->chunk_generation_data_overflow + 8 * offset_pos);
+ } else
+ graph_data->generation = item->date + offset;
+ } else
+ graph_data->generation = get_be32(commit_data + g->hash_len + 8) >> 2;
+
+ if (g->topo_levels)
+ *topo_level_slab_at(g->topo_levels, item) = get_be32(commit_data + g->hash_len + 8) >> 2;
}
static inline void set_commit_tree(struct commit *c, struct tree *t)
@@ -772,38 +810,22 @@ static int fill_commit_in_graph(struct repository *r,
{
uint32_t edge_value;
uint32_t *parent_data_ptr;
- uint64_t date_low, date_high;
struct commit_list **pptr;
- struct commit_graph_data *graph_data;
const unsigned char *commit_data;
uint32_t lex_index;
while (pos < g->num_commits_in_base)
g = g->base_graph;
- if (pos >= g->num_commits + g->num_commits_in_base)
- die(_("invalid commit position. commit-graph is likely corrupt"));
+ fill_commit_graph_info(item, g, pos);
- /*
- * Store the "full" position, but then use the
- * "local" position for the rest of the calculation.
- */
- graph_data = commit_graph_data_at(item);
- graph_data->graph_pos = pos;
lex_index = pos - g->num_commits_in_base;
-
commit_data = g->chunk_commit_data + (g->hash_len + 16) * lex_index;
item->object.parsed = 1;
set_commit_tree(item, NULL);
- date_high = get_be32(commit_data + g->hash_len + 8) & 0x3;
- date_low = get_be32(commit_data + g->hash_len + 12);
- item->date = (timestamp_t)((date_high << 32) | date_low);
-
- graph_data->generation = get_be32(commit_data + g->hash_len + 8) >> 2;
-
pptr = &item->parents;
edge_value = get_be32(commit_data + g->hash_len);
@@ -943,6 +965,7 @@ struct write_commit_graph_context {
struct oid_array oids;
struct packed_commit_list commits;
int num_extra_edges;
+ int num_generation_data_overflows;
unsigned long approx_nr_objects;
struct progress *progress;
int progress_done;
@@ -961,8 +984,11 @@ struct write_commit_graph_context {
report_progress:1,
split:1,
changed_paths:1,
- order_by_pack:1;
+ order_by_pack:1,
+ write_generation_data:1,
+ trust_generation_numbers:1;
+ struct topo_level_slab *topo_levels;
const struct commit_graph_opts *opts;
size_t total_bloom_filter_data_size;
const struct bloom_filter_settings *bloom_settings;
@@ -974,8 +1000,9 @@ struct write_commit_graph_context {
};
static int write_graph_chunk_fanout(struct hashfile *f,
- struct write_commit_graph_context *ctx)
+ void *data)
{
+ struct write_commit_graph_context *ctx = data;
int i, count = 0;
struct commit **list = ctx->commits.list;
@@ -1000,8 +1027,9 @@ static int write_graph_chunk_fanout(struct hashfile *f,
}
static int write_graph_chunk_oids(struct hashfile *f,
- struct write_commit_graph_context *ctx)
+ void *data)
{
+ struct write_commit_graph_context *ctx = data;
struct commit **list = ctx->commits.list;
int count;
for (count = 0; count < ctx->commits.nr; count++, list++) {
@@ -1012,15 +1040,16 @@ static int write_graph_chunk_oids(struct hashfile *f,
return 0;
}
-static const unsigned char *commit_to_sha1(size_t index, void *table)
+static const struct object_id *commit_to_oid(size_t index, const void *table)
{
- struct commit **commits = table;
- return commits[index]->object.oid.hash;
+ const struct commit * const *commits = table;
+ return &commits[index]->object.oid;
}
static int write_graph_chunk_data(struct hashfile *f,
- struct write_commit_graph_context *ctx)
+ void *data)
{
+ struct write_commit_graph_context *ctx = data;
struct commit **list = ctx->commits.list;
struct commit **last = ctx->commits.list + ctx->commits.nr;
uint32_t num_extra_edges = 0;
@@ -1032,7 +1061,7 @@ static int write_graph_chunk_data(struct hashfile *f,
uint32_t packedDate[2];
display_progress(ctx->progress, ++ctx->progress_cnt);
- if (parse_commit_no_graph(*list))
+ if (repo_parse_commit_no_graph(ctx->r, *list))
die(_("unable to parse commit %s"),
oid_to_hex(&(*list)->object.oid));
tree = get_commit_tree_oid(*list);
@@ -1043,10 +1072,10 @@ static int write_graph_chunk_data(struct hashfile *f,
if (!parent)
edge_value = GRAPH_PARENT_NONE;
else {
- edge_value = sha1_pos(parent->item->object.oid.hash,
- ctx->commits.list,
- ctx->commits.nr,
- commit_to_sha1);
+ edge_value = oid_pos(&parent->item->object.oid,
+ ctx->commits.list,
+ ctx->commits.nr,
+ commit_to_oid);
if (edge_value >= 0)
edge_value += ctx->new_num_commits_in_base;
@@ -1074,10 +1103,10 @@ static int write_graph_chunk_data(struct hashfile *f,
else if (parent->next)
edge_value = GRAPH_EXTRA_EDGES_NEEDED | num_extra_edges;
else {
- edge_value = sha1_pos(parent->item->object.oid.hash,
- ctx->commits.list,
- ctx->commits.nr,
- commit_to_sha1);
+ edge_value = oid_pos(&parent->item->object.oid,
+ ctx->commits.list,
+ ctx->commits.nr,
+ commit_to_oid);
if (edge_value >= 0)
edge_value += ctx->new_num_commits_in_base;
@@ -1109,7 +1138,7 @@ static int write_graph_chunk_data(struct hashfile *f,
else
packedDate[0] = 0;
- packedDate[0] |= htonl(commit_graph_data_at(*list)->generation << 2);
+ packedDate[0] |= htonl(*topo_level_slab_at(ctx->topo_levels, *list) << 2);
packedDate[1] = htonl((*list)->date);
hashwrite(f, packedDate, 8);
@@ -1120,9 +1149,53 @@ static int write_graph_chunk_data(struct hashfile *f,
return 0;
}
-static int write_graph_chunk_extra_edges(struct hashfile *f,
- struct write_commit_graph_context *ctx)
+static int write_graph_chunk_generation_data(struct hashfile *f,
+ void *data)
{
+ struct write_commit_graph_context *ctx = data;
+ int i, num_generation_data_overflows = 0;
+
+ for (i = 0; i < ctx->commits.nr; i++) {
+ struct commit *c = ctx->commits.list[i];
+ timestamp_t offset;
+ repo_parse_commit(ctx->r, c);
+ offset = commit_graph_data_at(c)->generation - c->date;
+ display_progress(ctx->progress, ++ctx->progress_cnt);
+
+ if (offset > GENERATION_NUMBER_V2_OFFSET_MAX) {
+ offset = CORRECTED_COMMIT_DATE_OFFSET_OVERFLOW | num_generation_data_overflows;
+ num_generation_data_overflows++;
+ }
+
+ hashwrite_be32(f, offset);
+ }
+
+ return 0;
+}
+
+static int write_graph_chunk_generation_data_overflow(struct hashfile *f,
+ void *data)
+{
+ struct write_commit_graph_context *ctx = data;
+ int i;
+ for (i = 0; i < ctx->commits.nr; i++) {
+ struct commit *c = ctx->commits.list[i];
+ timestamp_t offset = commit_graph_data_at(c)->generation - c->date;
+ display_progress(ctx->progress, ++ctx->progress_cnt);
+
+ if (offset > GENERATION_NUMBER_V2_OFFSET_MAX) {
+ hashwrite_be32(f, offset >> 32);
+ hashwrite_be32(f, (uint32_t) offset);
+ }
+ }
+
+ return 0;
+}
+
+static int write_graph_chunk_extra_edges(struct hashfile *f,
+ void *data)
+{
+ struct write_commit_graph_context *ctx = data;
struct commit **list = ctx->commits.list;
struct commit **last = ctx->commits.list + ctx->commits.nr;
struct commit_list *parent;
@@ -1143,10 +1216,10 @@ static int write_graph_chunk_extra_edges(struct hashfile *f,
/* Since num_parents > 2, this initializer is safe. */
for (parent = (*list)->parents->next; parent; parent = parent->next) {
- int edge_value = sha1_pos(parent->item->object.oid.hash,
- ctx->commits.list,
- ctx->commits.nr,
- commit_to_sha1);
+ int edge_value = oid_pos(&parent->item->object.oid,
+ ctx->commits.list,
+ ctx->commits.nr,
+ commit_to_oid);
if (edge_value >= 0)
edge_value += ctx->new_num_commits_in_base;
@@ -1175,8 +1248,9 @@ static int write_graph_chunk_extra_edges(struct hashfile *f,
}
static int write_graph_chunk_bloom_indexes(struct hashfile *f,
- struct write_commit_graph_context *ctx)
+ void *data)
{
+ struct write_commit_graph_context *ctx = data;
struct commit **list = ctx->commits.list;
struct commit **last = ctx->commits.list + ctx->commits.nr;
uint32_t cur_pos = 0;
@@ -1210,8 +1284,9 @@ static void trace2_bloom_filter_settings(struct write_commit_graph_context *ctx)
}
static int write_graph_chunk_bloom_data(struct hashfile *f,
- struct write_commit_graph_context *ctx)
+ void *data)
{
+ struct write_commit_graph_context *ctx = data;
struct commit **list = ctx->commits.list;
struct commit **last = ctx->commits.list + ctx->commits.nr;
@@ -1306,11 +1381,11 @@ static void close_reachable(struct write_commit_graph_context *ctx)
if (!commit)
continue;
if (ctx->split) {
- if ((!parse_commit(commit) &&
+ if ((!repo_parse_commit(ctx->r, commit) &&
commit_graph_position(commit) == COMMIT_NOT_FROM_GRAPH) ||
flags == COMMIT_GRAPH_SPLIT_REPLACE)
add_missing_parents(ctx, commit);
- } else if (!parse_commit_no_graph(commit))
+ } else if (!repo_parse_commit_no_graph(ctx->r, commit))
add_missing_parents(ctx, commit);
}
stop_progress(&ctx->progress);
@@ -1329,6 +1404,59 @@ static void close_reachable(struct write_commit_graph_context *ctx)
stop_progress(&ctx->progress);
}
+static void compute_topological_levels(struct write_commit_graph_context *ctx)
+{
+ int i;
+ struct commit_list *list = NULL;
+
+ if (ctx->report_progress)
+ ctx->progress = start_delayed_progress(
+ _("Computing commit graph topological levels"),
+ ctx->commits.nr);
+ for (i = 0; i < ctx->commits.nr; i++) {
+ struct commit *c = ctx->commits.list[i];
+ uint32_t level;
+
+ repo_parse_commit(ctx->r, c);
+ level = *topo_level_slab_at(ctx->topo_levels, c);
+
+ display_progress(ctx->progress, i + 1);
+ if (level != GENERATION_NUMBER_ZERO)
+ continue;
+
+ commit_list_insert(c, &list);
+ while (list) {
+ struct commit *current = list->item;
+ struct commit_list *parent;
+ int all_parents_computed = 1;
+ uint32_t max_level = 0;
+
+ for (parent = current->parents; parent; parent = parent->next) {
+ repo_parse_commit(ctx->r, parent->item);
+ level = *topo_level_slab_at(ctx->topo_levels, parent->item);
+
+ if (level == GENERATION_NUMBER_ZERO) {
+ all_parents_computed = 0;
+ commit_list_insert(parent->item, &list);
+ break;
+ }
+
+ if (level > max_level)
+ max_level = level;
+ }
+
+ if (all_parents_computed) {
+ pop_commit(&list);
+
+ if (max_level > GENERATION_NUMBER_V1_MAX - 1)
+ max_level = GENERATION_NUMBER_V1_MAX - 1;
+ *topo_level_slab_at(ctx->topo_levels, current) = max_level + 1;
+ }
+ }
+ }
+ stop_progress(&ctx->progress);
+}
+
static void compute_generation_numbers(struct write_commit_graph_context *ctx)
{
int i;
@@ -1338,42 +1466,56 @@ static void compute_generation_numbers(struct write_commit_graph_context *ctx)
ctx->progress = start_delayed_progress(
_("Computing commit graph generation numbers"),
ctx->commits.nr);
+
+ if (!ctx->trust_generation_numbers) {
+ for (i = 0; i < ctx->commits.nr; i++) {
+ struct commit *c = ctx->commits.list[i];
+ repo_parse_commit(ctx->r, c);
+ commit_graph_data_at(c)->generation = GENERATION_NUMBER_ZERO;
+ }
+ }
+
for (i = 0; i < ctx->commits.nr; i++) {
- uint32_t generation = commit_graph_data_at(ctx->commits.list[i])->generation;
+ struct commit *c = ctx->commits.list[i];
+ timestamp_t corrected_commit_date;
+
+ repo_parse_commit(ctx->r, c);
+ corrected_commit_date = commit_graph_data_at(c)->generation;
display_progress(ctx->progress, i + 1);
- if (generation != GENERATION_NUMBER_INFINITY &&
- generation != GENERATION_NUMBER_ZERO)
+ if (corrected_commit_date != GENERATION_NUMBER_ZERO)
continue;
- commit_list_insert(ctx->commits.list[i], &list);
+ commit_list_insert(c, &list);
while (list) {
struct commit *current = list->item;
struct commit_list *parent;
int all_parents_computed = 1;
- uint32_t max_generation = 0;
+ timestamp_t max_corrected_commit_date = 0;
for (parent = current->parents; parent; parent = parent->next) {
- generation = commit_graph_data_at(parent->item)->generation;
+ repo_parse_commit(ctx->r, parent->item);
+ corrected_commit_date = commit_graph_data_at(parent->item)->generation;
- if (generation == GENERATION_NUMBER_INFINITY ||
- generation == GENERATION_NUMBER_ZERO) {
+ if (corrected_commit_date == GENERATION_NUMBER_ZERO) {
all_parents_computed = 0;
commit_list_insert(parent->item, &list);
break;
- } else if (generation > max_generation) {
- max_generation = generation;
}
+
+ if (corrected_commit_date > max_corrected_commit_date)
+ max_corrected_commit_date = corrected_commit_date;
}
if (all_parents_computed) {
- struct commit_graph_data *data = commit_graph_data_at(current);
-
- data->generation = max_generation + 1;
pop_commit(&list);
- if (data->generation > GENERATION_NUMBER_MAX)
- data->generation = GENERATION_NUMBER_MAX;
+ if (current->date && current->date > max_corrected_commit_date)
+ max_corrected_commit_date = current->date - 1;
+ commit_graph_data_at(current)->generation = max_corrected_commit_date + 1;
+
+ if (commit_graph_data_at(current)->generation - current->date > GENERATION_NUMBER_V2_OFFSET_MAX)
+ ctx->num_generation_data_overflows++;
}
}
}
@@ -1458,7 +1600,7 @@ static int add_ref_to_set(const char *refname,
struct object_id peeled;
struct refs_cb_data *data = (struct refs_cb_data *)cb_data;
- if (!peel_ref(refname, &peeled))
+ if (!peel_iterated_oid(oid, &peeled))
oid = &peeled;
if (oid_object_info(the_repository, oid, NULL) == OBJ_COMMIT)
oidset_insert(data->commits, oid);
@@ -1593,9 +1735,9 @@ static void copy_oids_to_commits(struct write_commit_graph_context *ctx)
continue;
if (ctx->split && flags == COMMIT_GRAPH_SPLIT_REPLACE)
- parse_commit(ctx->commits.list[ctx->commits.nr]);
+ repo_parse_commit(ctx->r, ctx->commits.list[ctx->commits.nr]);
else
- parse_commit_no_graph(ctx->commits.list[ctx->commits.nr]);
+ repo_parse_commit_no_graph(ctx->r, ctx->commits.list[ctx->commits.nr]);
num_parents = commit_list_count(ctx->commits.list[ctx->commits.nr]->parents);
if (num_parents > 2)
@@ -1620,8 +1762,9 @@ static int write_graph_chunk_base_1(struct hashfile *f,
}
static int write_graph_chunk_base(struct hashfile *f,
- struct write_commit_graph_context *ctx)
+ void *data)
{
+ struct write_commit_graph_context *ctx = data;
int num = write_graph_chunk_base_1(f, ctx->new_base_graph);
if (num != ctx->num_commit_graphs_after - 1) {
@@ -1632,27 +1775,16 @@ static int write_graph_chunk_base(struct hashfile *f,
return 0;
}
-typedef int (*chunk_write_fn)(struct hashfile *f,
- struct write_commit_graph_context *ctx);
-
-struct chunk_info {
- uint32_t id;
- uint64_t size;
- chunk_write_fn write_fn;
-};
-
static int write_commit_graph_file(struct write_commit_graph_context *ctx)
{
uint32_t i;
int fd;
struct hashfile *f;
struct lock_file lk = LOCK_INIT;
- struct chunk_info chunks[MAX_NUM_CHUNKS + 1];
const unsigned hashsz = the_hash_algo->rawsz;
struct strbuf progress_title = STRBUF_INIT;
- int num_chunks = 3;
- uint64_t chunk_offset;
struct object_id file_hash;
+ struct chunkfile *cf;
if (ctx->split) {
struct strbuf tmp_file = STRBUF_INIT;
@@ -1698,83 +1830,62 @@ static int write_commit_graph_file(struct write_commit_graph_context *ctx)
f = hashfd(fd, get_lock_file_path(&lk));
}
- chunks[0].id = GRAPH_CHUNKID_OIDFANOUT;
- chunks[0].size = GRAPH_FANOUT_SIZE;
- chunks[0].write_fn = write_graph_chunk_fanout;
- chunks[1].id = GRAPH_CHUNKID_OIDLOOKUP;
- chunks[1].size = hashsz * ctx->commits.nr;
- chunks[1].write_fn = write_graph_chunk_oids;
- chunks[2].id = GRAPH_CHUNKID_DATA;
- chunks[2].size = (hashsz + 16) * ctx->commits.nr;
- chunks[2].write_fn = write_graph_chunk_data;
- if (ctx->num_extra_edges) {
- chunks[num_chunks].id = GRAPH_CHUNKID_EXTRAEDGES;
- chunks[num_chunks].size = 4 * ctx->num_extra_edges;
- chunks[num_chunks].write_fn = write_graph_chunk_extra_edges;
- num_chunks++;
- }
- if (ctx->changed_paths) {
- chunks[num_chunks].id = GRAPH_CHUNKID_BLOOMINDEXES;
- chunks[num_chunks].size = sizeof(uint32_t) * ctx->commits.nr;
- chunks[num_chunks].write_fn = write_graph_chunk_bloom_indexes;
- num_chunks++;
- chunks[num_chunks].id = GRAPH_CHUNKID_BLOOMDATA;
- chunks[num_chunks].size = sizeof(uint32_t) * 3
- + ctx->total_bloom_filter_data_size;
- chunks[num_chunks].write_fn = write_graph_chunk_bloom_data;
- num_chunks++;
- }
- if (ctx->num_commit_graphs_after > 1) {
- chunks[num_chunks].id = GRAPH_CHUNKID_BASE;
- chunks[num_chunks].size = hashsz * (ctx->num_commit_graphs_after - 1);
- chunks[num_chunks].write_fn = write_graph_chunk_base;
- num_chunks++;
- }
+ cf = init_chunkfile(f);
- chunks[num_chunks].id = 0;
- chunks[num_chunks].size = 0;
+ add_chunk(cf, GRAPH_CHUNKID_OIDFANOUT, GRAPH_FANOUT_SIZE,
+ write_graph_chunk_fanout);
+ add_chunk(cf, GRAPH_CHUNKID_OIDLOOKUP, hashsz * ctx->commits.nr,
+ write_graph_chunk_oids);
+ add_chunk(cf, GRAPH_CHUNKID_DATA, (hashsz + 16) * ctx->commits.nr,
+ write_graph_chunk_data);
+
+ if (git_env_bool(GIT_TEST_COMMIT_GRAPH_NO_GDAT, 0))
+ ctx->write_generation_data = 0;
+ if (ctx->write_generation_data)
+ add_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA,
+ sizeof(uint32_t) * ctx->commits.nr,
+ write_graph_chunk_generation_data);
+ if (ctx->num_generation_data_overflows)
+ add_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA_OVERFLOW,
+ sizeof(timestamp_t) * ctx->num_generation_data_overflows,
+ write_graph_chunk_generation_data_overflow);
+ if (ctx->num_extra_edges)
+ add_chunk(cf, GRAPH_CHUNKID_EXTRAEDGES,
+ 4 * ctx->num_extra_edges,
+ write_graph_chunk_extra_edges);
+ if (ctx->changed_paths) {
+ add_chunk(cf, GRAPH_CHUNKID_BLOOMINDEXES,
+ sizeof(uint32_t) * ctx->commits.nr,
+ write_graph_chunk_bloom_indexes);
+ add_chunk(cf, GRAPH_CHUNKID_BLOOMDATA,
+ sizeof(uint32_t) * 3
+ + ctx->total_bloom_filter_data_size,
+ write_graph_chunk_bloom_data);
+ }
+ if (ctx->num_commit_graphs_after > 1)
+ add_chunk(cf, GRAPH_CHUNKID_BASE,
+ hashsz * (ctx->num_commit_graphs_after - 1),
+ write_graph_chunk_base);
hashwrite_be32(f, GRAPH_SIGNATURE);
hashwrite_u8(f, GRAPH_VERSION);
hashwrite_u8(f, oid_version());
- hashwrite_u8(f, num_chunks);
+ hashwrite_u8(f, get_num_chunks(cf));
hashwrite_u8(f, ctx->num_commit_graphs_after - 1);
- chunk_offset = 8 + (num_chunks + 1) * GRAPH_CHUNKLOOKUP_WIDTH;
- for (i = 0; i <= num_chunks; i++) {
- uint32_t chunk_write[3];
-
- chunk_write[0] = htonl(chunks[i].id);
- chunk_write[1] = htonl(chunk_offset >> 32);
- chunk_write[2] = htonl(chunk_offset & 0xffffffff);
- hashwrite(f, chunk_write, 12);
-
- chunk_offset += chunks[i].size;
- }
-
if (ctx->report_progress) {
strbuf_addf(&progress_title,
Q_("Writing out commit graph in %d pass",
"Writing out commit graph in %d passes",
- num_chunks),
- num_chunks);
+ get_num_chunks(cf)),
+ get_num_chunks(cf));
ctx->progress = start_delayed_progress(
progress_title.buf,
- num_chunks * ctx->commits.nr);
+ get_num_chunks(cf) * ctx->commits.nr);
}
- for (i = 0; i < num_chunks; i++) {
- uint64_t start_offset = f->total + f->offset;
-
- if (chunks[i].write_fn(f, ctx))
- return -1;
-
- if (f->total + f->offset != start_offset + chunks[i].size)
- BUG("expected to write %"PRId64" bytes to chunk %"PRIx32", but wrote %"PRId64" instead",
- chunks[i].size, chunks[i].id,
- f->total + f->offset - start_offset);
- }
+ write_chunkfile(cf, ctx);
stop_progress(&ctx->progress);
strbuf_release(&progress_title);
@@ -1791,6 +1902,7 @@ static int write_commit_graph_file(struct write_commit_graph_context *ctx)
close_commit_graph(ctx->r->objects);
finalize_hashfile(f, file_hash.hash, CSUM_HASH_IN_STREAM | CSUM_FSYNC);
+ free_chunkfile(cf);
if (ctx->split) {
FILE *chainf = fdopen_lock_file(&lk, "w");
@@ -1918,6 +2030,13 @@ static void split_graph_merge_strategy(struct write_commit_graph_context *ctx)
if (i < ctx->num_commit_graphs_after)
ctx->commit_graph_hash_after[i] = xstrdup(oid_to_hex(&g->oid));
+ /*
+ * If the topmost remaining layer has generation data chunk, the
+ * resultant layer also has generation data chunk.
+ */
+ if (i == ctx->num_commit_graphs_after - 2)
+ ctx->write_generation_data = !!g->chunk_generation_data;
+
i--;
g = g->base_graph;
}
@@ -2109,6 +2228,7 @@ int write_commit_graph(struct object_directory *odb,
int res = 0;
int replace = 0;
struct bloom_filter_settings bloom_settings = DEFAULT_BLOOM_FILTER_SETTINGS;
+ struct topo_level_slab topo_levels;
prepare_repo_settings(the_repository);
if (!the_repository->settings.core_commit_graph) {
@@ -2118,7 +2238,7 @@ int write_commit_graph(struct object_directory *odb,
if (!commit_graph_compatible(the_repository))
return 0;
- ctx = xcalloc(1, sizeof(struct write_commit_graph_context));
+ CALLOC_ARRAY(ctx, 1);
ctx->r = the_repository;
ctx->odb = odb;
ctx->append = flags & COMMIT_GRAPH_WRITE_APPEND ? 1 : 0;
@@ -2126,6 +2246,8 @@ int write_commit_graph(struct object_directory *odb,
ctx->split = flags & COMMIT_GRAPH_WRITE_SPLIT ? 1 : 0;
ctx->opts = opts;
ctx->total_bloom_filter_data_size = 0;
+ ctx->write_generation_data = 1;
+ ctx->num_generation_data_overflows = 0;
bloom_settings.bits_per_entry = git_env_ulong("GIT_TEST_BLOOM_SETTINGS_BITS_PER_ENTRY",
bloom_settings.bits_per_entry);
@@ -2135,11 +2257,23 @@ int write_commit_graph(struct object_directory *odb,
bloom_settings.max_changed_paths);
ctx->bloom_settings = &bloom_settings;
+ init_topo_level_slab(&topo_levels);
+ ctx->topo_levels = &topo_levels;
+
+ prepare_commit_graph(ctx->r);
+ if (ctx->r->objects->commit_graph) {
+ struct commit_graph *g = ctx->r->objects->commit_graph;
+
+ while (g) {
+ g->topo_levels = &topo_levels;
+ g = g->base_graph;
+ }
+ }
+
if (flags & COMMIT_GRAPH_WRITE_BLOOM_FILTERS)
ctx->changed_paths = 1;
if (!(flags & COMMIT_GRAPH_NO_WRITE_BLOOM_FILTERS)) {
struct commit_graph *g;
- prepare_commit_graph_one(ctx->r, ctx->odb);
g = ctx->r->objects->commit_graph;
@@ -2151,10 +2285,7 @@ int write_commit_graph(struct object_directory *odb,
}
if (ctx->split) {
- struct commit_graph *g;
- prepare_commit_graph(ctx->r);
-
- g = ctx->r->objects->commit_graph;
+ struct commit_graph *g = ctx->r->objects->commit_graph;
while (g) {
ctx->num_commit_graphs_before++;
@@ -2178,9 +2309,6 @@ int write_commit_graph(struct object_directory *odb,
ctx->approx_nr_objects = approximate_object_count();
- if (ctx->append)
- prepare_commit_graph_one(ctx->r, ctx->odb);
-
if (ctx->append && ctx->r->objects->commit_graph) {
struct commit_graph *g = ctx->r->objects->commit_graph;
for (i = 0; i < g->num_commits; i++) {
@@ -2227,7 +2355,11 @@ int write_commit_graph(struct object_directory *odb,
} else
ctx->num_commit_graphs_after = 1;
- compute_generation_numbers(ctx);
+ ctx->trust_generation_numbers = validate_mixed_generation_chain(ctx->r->objects->commit_graph);
+
+ compute_topological_levels(ctx);
+ if (ctx->write_generation_data)
+ compute_generation_numbers(ctx);
if (ctx->changed_paths)
compute_bloom_filters(ctx);
@@ -2243,6 +2375,7 @@ int write_commit_graph(struct object_directory *odb,
free(ctx->graph_name);
free(ctx->commits.list);
oid_array_clear(&ctx->oids);
+ clear_topo_level_slab(&topo_levels);
if (ctx->commit_graph_filenames_after) {
for (i = 0; i < ctx->num_commit_graphs_after; i++) {
@@ -2355,8 +2488,8 @@ int verify_commit_graph(struct repository *r, struct commit_graph *g, int flags)
for (i = 0; i < g->num_commits; i++) {
struct commit *graph_commit, *odb_commit;
struct commit_list *graph_parents, *odb_parents;
- uint32_t max_generation = 0;
- uint32_t generation;
+ timestamp_t max_generation = 0;
+ timestamp_t generation;
display_progress(progress, i + 1);
hashcpy(cur_oid.hash, g->chunk_oid_lookup + g->hash_len * i);
@@ -2420,16 +2553,17 @@ int verify_commit_graph(struct repository *r, struct commit_graph *g, int flags)
continue;
/*
- * If one of our parents has generation GENERATION_NUMBER_MAX, then
- * our generation is also GENERATION_NUMBER_MAX. Decrement to avoid
- * extra logic in the following condition.
+ * If we are using topological level and one of our parents has
+ * generation GENERATION_NUMBER_V1_MAX, then our generation is
+ * also GENERATION_NUMBER_V1_MAX. Decrement to avoid extra logic
+ * in the following condition.
*/
- if (max_generation == GENERATION_NUMBER_MAX)
+ if (!g->read_generation_data && max_generation == GENERATION_NUMBER_V1_MAX)
max_generation--;
generation = commit_graph_generation(graph_commit);
- if (generation != max_generation + 1)
- graph_report(_("commit-graph generation for commit %s is %u != %u"),
+ if (generation < max_generation + 1)
+ graph_report(_("commit-graph generation for commit %s is %"PRItime" < %"PRItime),
oid_to_hex(&cur_oid),
generation,
max_generation + 1);
diff --git a/commit-graph.h b/commit-graph.h
index f8e9250..97f3497 100644
--- a/commit-graph.h
+++ b/commit-graph.h
@@ -6,6 +6,7 @@
#include "oidset.h"
#define GIT_TEST_COMMIT_GRAPH "GIT_TEST_COMMIT_GRAPH"
+#define GIT_TEST_COMMIT_GRAPH_NO_GDAT "GIT_TEST_COMMIT_GRAPH_NO_GDAT"
#define GIT_TEST_COMMIT_GRAPH_DIE_ON_PARSE "GIT_TEST_COMMIT_GRAPH_DIE_ON_PARSE"
#define GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS "GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS"
@@ -63,16 +64,20 @@ struct commit_graph {
struct object_directory *odb;
uint32_t num_commits_in_base;
+ unsigned int read_generation_data;
struct commit_graph *base_graph;
const uint32_t *chunk_oid_fanout;
const unsigned char *chunk_oid_lookup;
const unsigned char *chunk_commit_data;
+ const unsigned char *chunk_generation_data;
+ const unsigned char *chunk_generation_data_overflow;
const unsigned char *chunk_extra_edges;
const unsigned char *chunk_base_graphs;
const unsigned char *chunk_bloom_indexes;
const unsigned char *chunk_bloom_data;
+ struct topo_level_slab *topo_levels;
struct bloom_filter_settings *bloom_filter_settings;
};
@@ -90,6 +95,12 @@ struct commit_graph *parse_commit_graph(struct repository *r,
*/
int generation_numbers_enabled(struct repository *r);
+/*
+ * Return 1 if and only if the repository has a commit-graph
+ * file and generation data chunk has been written for the file.
+ */
+int corrected_commit_dates_enabled(struct repository *r);
+
struct bloom_filter_settings *get_bloom_filter_settings(struct repository *r);
enum commit_graph_write_flags {
@@ -144,12 +155,12 @@ void disable_commit_graph(struct repository *r);
struct commit_graph_data {
uint32_t graph_pos;
- uint32_t generation;
+ timestamp_t generation;
};
/*
* Commits should be parsed before accessing generation, graph positions.
*/
-uint32_t commit_graph_generation(const struct commit *);
+timestamp_t commit_graph_generation(const struct commit *);
uint32_t commit_graph_position(const struct commit *);
#endif
diff --git a/commit-reach.c b/commit-reach.c
index 50175b1..c226ee3 100644
--- a/commit-reach.c
+++ b/commit-reach.c
@@ -17,6 +17,25 @@
static const unsigned all_flags = (PARENT1 | PARENT2 | STALE | RESULT);
+static int compare_commits_by_gen(const void *_a, const void *_b)
+{
+ const struct commit *a = *(const struct commit * const *)_a;
+ const struct commit *b = *(const struct commit * const *)_b;
+
+ timestamp_t generation_a = commit_graph_generation(a);
+ timestamp_t generation_b = commit_graph_generation(b);
+
+ if (generation_a < generation_b)
+ return -1;
+ if (generation_a > generation_b)
+ return 1;
+ if (a->date < b->date)
+ return -1;
+ if (a->date > b->date)
+ return 1;
+ return 0;
+}
+
static int queue_has_nonstale(struct prio_queue *queue)
{
int i;
@@ -32,14 +51,14 @@ static int queue_has_nonstale(struct prio_queue *queue)
static struct commit_list *paint_down_to_common(struct repository *r,
struct commit *one, int n,
struct commit **twos,
- int min_generation)
+ timestamp_t min_generation)
{
struct prio_queue queue = { compare_commits_by_gen_then_commit_date };
struct commit_list *result = NULL;
int i;
- uint32_t last_gen = GENERATION_NUMBER_INFINITY;
+ timestamp_t last_gen = GENERATION_NUMBER_INFINITY;
- if (!min_generation)
+ if (!min_generation && !corrected_commit_dates_enabled(r))
queue.compare = compare_commits_by_commit_date;
one->object.flags |= PARENT1;
@@ -58,10 +77,10 @@ static struct commit_list *paint_down_to_common(struct repository *r,
struct commit *commit = prio_queue_get(&queue);
struct commit_list *parents;
int flags;
- uint32_t generation = commit_graph_generation(commit);
+ timestamp_t generation = commit_graph_generation(commit);
if (min_generation && generation > last_gen)
- BUG("bad generation skip %8x > %8x at %s",
+ BUG("bad generation skip %"PRItime" > %"PRItime" at %s",
generation, last_gen,
oid_to_hex(&commit->object.oid));
last_gen = generation;
@@ -156,20 +175,15 @@ struct commit_list *get_octopus_merge_bases(struct commit_list *in)
return ret;
}
-static int remove_redundant(struct repository *r, struct commit **array, int cnt)
+static int remove_redundant_no_gen(struct repository *r,
+ struct commit **array, int cnt)
{
- /*
- * Some commit in the array may be an ancestor of
- * another commit. Move such commit to the end of
- * the array, and return the number of commits that
- * are independent from each other.
- */
struct commit **work;
unsigned char *redundant;
int *filled_index;
int i, j, filled;
- work = xcalloc(cnt, sizeof(*work));
+ CALLOC_ARRAY(work, cnt);
redundant = xcalloc(cnt, 1);
ALLOC_ARRAY(filled_index, cnt - 1);
@@ -177,12 +191,12 @@ static int remove_redundant(struct repository *r, struct commit **array, int cnt
repo_parse_commit(r, array[i]);
for (i = 0; i < cnt; i++) {
struct commit_list *common;
- uint32_t min_generation = commit_graph_generation(array[i]);
+ timestamp_t min_generation = commit_graph_generation(array[i]);
if (redundant[i])
continue;
for (j = filled = 0; j < cnt; j++) {
- uint32_t curr_generation;
+ timestamp_t curr_generation;
if (i == j || redundant[j])
continue;
filled_index[filled] = j;
@@ -209,15 +223,156 @@ static int remove_redundant(struct repository *r, struct commit **array, int cnt
for (i = filled = 0; i < cnt; i++)
if (!redundant[i])
array[filled++] = work[i];
- for (j = filled, i = 0; i < cnt; i++)
- if (redundant[i])
- array[j++] = work[i];
free(work);
free(redundant);
free(filled_index);
return filled;
}
+static int remove_redundant_with_gen(struct repository *r,
+ struct commit **array, int cnt)
+{
+ int i, count_non_stale = 0, count_still_independent = cnt;
+ timestamp_t min_generation = GENERATION_NUMBER_INFINITY;
+ struct commit **walk_start, **sorted;
+ size_t walk_start_nr = 0, walk_start_alloc = cnt;
+ int min_gen_pos = 0;
+
+ /*
+ * Sort the input by generation number, ascending. This allows
+ * us to increase the "min_generation" limit when we discover
+ * the commit with lowest generation is STALE. The index
+ * min_gen_pos points to the current position within 'array'
+ * that is not yet known to be STALE.
+ */
+ ALLOC_ARRAY(sorted, cnt);
+ COPY_ARRAY(sorted, array, cnt);
+ QSORT(sorted, cnt, compare_commits_by_gen);
+ min_generation = commit_graph_generation(sorted[0]);
+
+ ALLOC_ARRAY(walk_start, walk_start_alloc);
+
+ /* Mark all parents of the input as STALE */
+ for (i = 0; i < cnt; i++) {
+ struct commit_list *parents;
+
+ repo_parse_commit(r, array[i]);
+ array[i]->object.flags |= RESULT;
+ parents = array[i]->parents;
+
+ while (parents) {
+ repo_parse_commit(r, parents->item);
+ if (!(parents->item->object.flags & STALE)) {
+ parents->item->object.flags |= STALE;
+ ALLOC_GROW(walk_start, walk_start_nr + 1, walk_start_alloc);
+ walk_start[walk_start_nr++] = parents->item;
+ }
+ parents = parents->next;
+ }
+ }
+
+ QSORT(walk_start, walk_start_nr, compare_commits_by_gen);
+
+ /* remove STALE bit for now to allow walking through parents */
+ for (i = 0; i < walk_start_nr; i++)
+ walk_start[i]->object.flags &= ~STALE;
+
+ /*
+ * Start walking from the highest generation. Hopefully, it will
+ * find all other items during the first-parent walk, and we can
+ * terminate early. Otherwise, we will do the same amount of work
+ * as before.
+ */
+ for (i = walk_start_nr - 1; i >= 0 && count_still_independent > 1; i--) {
+ /* push the STALE bits up to min generation */
+ struct commit_list *stack = NULL;
+
+ commit_list_insert(walk_start[i], &stack);
+ walk_start[i]->object.flags |= STALE;
+
+ while (stack) {
+ struct commit_list *parents;
+ struct commit *c = stack->item;
+
+ repo_parse_commit(r, c);
+
+ if (c->object.flags & RESULT) {
+ c->object.flags &= ~RESULT;
+ if (--count_still_independent <= 1)
+ break;
+ if (oideq(&c->object.oid, &sorted[min_gen_pos]->object.oid)) {
+ while (min_gen_pos < cnt - 1 &&
+ (sorted[min_gen_pos]->object.flags & STALE))
+ min_gen_pos++;
+ min_generation = commit_graph_generation(sorted[min_gen_pos]);
+ }
+ }
+
+ if (commit_graph_generation(c) < min_generation) {
+ pop_commit(&stack);
+ continue;
+ }
+
+ parents = c->parents;
+ while (parents) {
+ if (!(parents->item->object.flags & STALE)) {
+ parents->item->object.flags |= STALE;
+ commit_list_insert(parents->item, &stack);
+ break;
+ }
+ parents = parents->next;
+ }
+
+ /* pop if all parents have been visited already */
+ if (!parents)
+ pop_commit(&stack);
+ }
+ free_commit_list(stack);
+ }
+ free(sorted);
+
+ /* clear result */
+ for (i = 0; i < cnt; i++)
+ array[i]->object.flags &= ~RESULT;
+
+ /* rearrange array */
+ for (i = count_non_stale = 0; i < cnt; i++) {
+ if (!(array[i]->object.flags & STALE))
+ array[count_non_stale++] = array[i];
+ }
+
+ /* clear marks */
+ clear_commit_marks_many(walk_start_nr, walk_start, STALE);
+ free(walk_start);
+
+ return count_non_stale;
+}
+
+static int remove_redundant(struct repository *r, struct commit **array, int cnt)
+{
+ /*
+ * Some commit in the array may be an ancestor of
+ * another commit. Move the independent commits to the
+ * beginning of 'array' and return their number. Callers
+ * should not rely upon the contents of 'array' after
+ * that number.
+ */
+ if (generation_numbers_enabled(r)) {
+ int i;
+
+ /*
+ * If we have a single commit with finite generation
+ * number, then the _with_gen algorithm is preferred.
+ */
+ for (i = 0; i < cnt; i++) {
+ if (commit_graph_generation(array[i]) < GENERATION_NUMBER_INFINITY)
+ return remove_redundant_with_gen(r, array, cnt);
+ }
+ }
+
+ return remove_redundant_no_gen(r, array, cnt);
+}
+
static struct commit_list *get_merge_bases_many_0(struct repository *r,
struct commit *one,
int n,
@@ -244,7 +399,7 @@ static struct commit_list *get_merge_bases_many_0(struct repository *r,
/* There are more than one */
cnt = commit_list_count(result);
- rslt = xcalloc(cnt, sizeof(*rslt));
+ CALLOC_ARRAY(rslt, cnt);
for (list = result, i = 0; list; list = list->next)
rslt[i++] = list->item;
free_commit_list(result);
@@ -321,7 +476,7 @@ int repo_in_merge_bases_many(struct repository *r, struct commit *commit,
{
struct commit_list *bases;
int ret = 0, i;
- uint32_t generation, max_generation = GENERATION_NUMBER_ZERO;
+ timestamp_t generation, max_generation = GENERATION_NUMBER_ZERO;
if (repo_parse_commit(r, commit))
return ret;
@@ -386,7 +541,7 @@ struct commit_list *reduce_heads(struct commit_list *heads)
p->item->object.flags |= STALE;
num_head++;
}
- array = xcalloc(num_head, sizeof(*array));
+ CALLOC_ARRAY(array, num_head);
for (p = heads, i = 0; p; p = p->next) {
if (p->item->object.flags & STALE) {
array[i++] = p->item;
@@ -470,7 +625,7 @@ static int in_commit_list(const struct commit_list *want, struct commit *c)
static enum contains_result contains_test(struct commit *candidate,
const struct commit_list *want,
struct contains_cache *cache,
- uint32_t cutoff)
+ timestamp_t cutoff)
{
enum contains_result *cached = contains_cache_at(cache, candidate);
@@ -506,11 +661,11 @@ static enum contains_result contains_tag_algo(struct commit *candidate,
{
struct contains_stack contains_stack = { 0, 0, NULL };
enum contains_result result;
- uint32_t cutoff = GENERATION_NUMBER_INFINITY;
+ timestamp_t cutoff = GENERATION_NUMBER_INFINITY;
const struct commit_list *p;
for (p = want; p; p = p->next) {
- uint32_t generation;
+ timestamp_t generation;
struct commit *c = p->item;
load_commit_graph_info(the_repository, c);
generation = commit_graph_generation(c);
@@ -561,26 +716,11 @@ int commit_contains(struct ref_filter *filter, struct commit *commit,
return repo_is_descendant_of(the_repository, commit, list);
}
-static int compare_commits_by_gen(const void *_a, const void *_b)
-{
- const struct commit *a = *(const struct commit * const *)_a;
- const struct commit *b = *(const struct commit * const *)_b;
-
- uint32_t generation_a = commit_graph_generation(a);
- uint32_t generation_b = commit_graph_generation(b);
-
- if (generation_a < generation_b)
- return -1;
- if (generation_a > generation_b)
- return 1;
- return 0;
-}
-
int can_all_from_reach_with_flag(struct object_array *from,
unsigned int with_flag,
unsigned int assign_flag,
time_t min_commit_date,
- uint32_t min_generation)
+ timestamp_t min_generation)
{
struct commit **list = NULL;
int i;
@@ -681,13 +821,13 @@ int can_all_from_reach(struct commit_list *from, struct commit_list *to,
time_t min_commit_date = cutoff_by_min_date ? from->item->date : 0;
struct commit_list *from_iter = from, *to_iter = to;
int result;
- uint32_t min_generation = GENERATION_NUMBER_INFINITY;
+ timestamp_t min_generation = GENERATION_NUMBER_INFINITY;
while (from_iter) {
add_object_array(&from_iter->item->object, NULL, &from_objs);
if (!parse_commit(from_iter->item)) {
- uint32_t generation;
+ timestamp_t generation;
if (from_iter->item->date < min_commit_date)
min_commit_date = from_iter->item->date;
@@ -701,7 +841,7 @@ int can_all_from_reach(struct commit_list *from, struct commit_list *to,
while (to_iter) {
if (!parse_commit(to_iter->item)) {
- uint32_t generation;
+ timestamp_t generation;
if (to_iter->item->date < min_commit_date)
min_commit_date = to_iter->item->date;
@@ -741,13 +881,13 @@ struct commit_list *get_reachable_subset(struct commit **from, int nr_from,
struct commit_list *found_commits = NULL;
struct commit **to_last = to + nr_to;
struct commit **from_last = from + nr_from;
- uint32_t min_generation = GENERATION_NUMBER_INFINITY;
+ timestamp_t min_generation = GENERATION_NUMBER_INFINITY;
int num_to_find = 0;
struct prio_queue queue = { compare_commits_by_gen_then_commit_date };
for (item = to; item < to_last; item++) {
- uint32_t generation;
+ timestamp_t generation;
struct commit *c = *item;
parse_commit(c);
diff --git a/commit-reach.h b/commit-reach.h
index b49ad71..148b56f 100644
--- a/commit-reach.h
+++ b/commit-reach.h
@@ -87,7 +87,7 @@ int can_all_from_reach_with_flag(struct object_array *from,
unsigned int with_flag,
unsigned int assign_flag,
time_t min_commit_date,
- uint32_t min_generation);
+ timestamp_t min_generation);
int can_all_from_reach(struct commit_list *from, struct commit_list *to,
int commit_date_cutoff);
diff --git a/commit.c b/commit.c
index fe1fa3d..42f8117 100644
--- a/commit.c
+++ b/commit.c
@@ -14,7 +14,7 @@
#include "mergesort.h"
#include "commit-slab.h"
#include "prio-queue.h"
-#include "sha1-lookup.h"
+#include "hash-lookup.h"
#include "wt-status.h"
#include "advice.h"
#include "refs.h"
@@ -105,23 +105,23 @@ static timestamp_t parse_commit_date(const char *buf, const char *tail)
return parse_timestamp(dateptr, NULL, 10);
}
-static const unsigned char *commit_graft_sha1_access(size_t index, void *table)
+static const struct object_id *commit_graft_oid_access(size_t index, const void *table)
{
- struct commit_graft **commit_graft_table = table;
- return commit_graft_table[index]->oid.hash;
+ const struct commit_graft * const *commit_graft_table = table;
+ return &commit_graft_table[index]->oid;
}
-int commit_graft_pos(struct repository *r, const unsigned char *sha1)
+int commit_graft_pos(struct repository *r, const struct object_id *oid)
{
- return sha1_pos(sha1, r->parsed_objects->grafts,
- r->parsed_objects->grafts_nr,
- commit_graft_sha1_access);
+ return oid_pos(oid, r->parsed_objects->grafts,
+ r->parsed_objects->grafts_nr,
+ commit_graft_oid_access);
}
int register_commit_graft(struct repository *r, struct commit_graft *graft,
int ignore_dups)
{
- int pos = commit_graft_pos(r, graft->oid.hash);
+ int pos = commit_graft_pos(r, &graft->oid);
if (0 <= pos) {
if (ignore_dups)
@@ -232,7 +232,7 @@ struct commit_graft *lookup_commit_graft(struct repository *r, const struct obje
{
int pos;
prepare_commit_graft(r);
- pos = commit_graft_pos(r, oid->hash);
+ pos = commit_graft_pos(r, oid);
if (pos < 0)
return NULL;
return r->parsed_objects->grafts[pos];
@@ -544,6 +544,17 @@ struct commit_list *commit_list_insert(struct commit *item, struct commit_list *
return new_list;
}
+int commit_list_contains(struct commit *item, struct commit_list *list)
+{
+ while (list) {
+ if (list->item == item)
+ return 1;
+ list = list->next;
+ }
+
+ return 0;
+}
+
unsigned commit_list_count(const struct commit_list *l)
{
unsigned c = 0;
@@ -563,6 +574,17 @@ struct commit_list *copy_commit_list(struct commit_list *list)
return head;
}
+struct commit_list *reverse_commit_list(struct commit_list *list)
+{
+ struct commit_list *next = NULL, *current, *backup;
+ for (current = list; current; current = backup) {
+ backup = current->next;
+ current->next = next;
+ next = current;
+ }
+ return next;
+}
+
void free_commit_list(struct commit_list *list)
{
while (list)
@@ -731,8 +753,8 @@ int compare_commits_by_author_date(const void *a_, const void *b_,
int compare_commits_by_gen_then_commit_date(const void *a_, const void *b_, void *unused)
{
const struct commit *a = a_, *b = b_;
- const uint32_t generation_a = commit_graph_generation(a),
- generation_b = commit_graph_generation(b);
+ const timestamp_t generation_a = commit_graph_generation(a),
+ generation_b = commit_graph_generation(b);
/* newer commits first */
if (generation_a < generation_b)
@@ -973,7 +995,7 @@ static const char *gpg_sig_headers[] = {
"gpgsig-sha256",
};
-static int do_sign_commit(struct strbuf *buf, const char *keyid)
+int sign_with_header(struct strbuf *buf, const char *keyid)
{
struct strbuf sig = STRBUF_INIT;
int inspos, copypos;
@@ -1013,21 +1035,32 @@ static int do_sign_commit(struct strbuf *buf, const char *keyid)
return 0;
}
-int parse_signed_commit(const struct commit *commit,
- struct strbuf *payload, struct strbuf *signature)
-{
+
+int parse_signed_commit(const struct commit *commit,
+ struct strbuf *payload, struct strbuf *signature,
+ const struct git_hash_algo *algop)
+{
unsigned long size;
const char *buffer = get_commit_buffer(commit, &size);
- int in_signature, saw_signature = -1;
- const char *line, *tail;
- const char *gpg_sig_header = gpg_sig_headers[hash_algo_by_ptr(the_hash_algo)];
- int gpg_sig_header_len = strlen(gpg_sig_header);
+ int ret = parse_buffer_signed_by_header(buffer, size, payload, signature, algop);
+
+ unuse_commit_buffer(commit, buffer);
+ return ret;
+}
+
+int parse_buffer_signed_by_header(const char *buffer,
+ unsigned long size,
+ struct strbuf *payload,
+ struct strbuf *signature,
+ const struct git_hash_algo *algop)
+{
+ int in_signature = 0, saw_signature = 0, other_signature = 0;
+ const char *line, *tail, *p;
+ const char *gpg_sig_header = gpg_sig_headers[hash_algo_by_ptr(algop)];
line = buffer;
tail = buffer + size;
- in_signature = 0;
- saw_signature = 0;
while (line < tail) {
const char *sig = NULL;
const char *next = memchr(line, '\n', tail - line);
@@ -1035,9 +1068,15 @@ int parse_signed_commit(const struct commit *commit,
next = next ? next + 1 : tail;
if (in_signature && line[0] == ' ')
sig = line + 1;
- else if (starts_with(line, gpg_sig_header) &&
- line[gpg_sig_header_len] == ' ')
- sig = line + gpg_sig_header_len + 1;
+ else if (skip_prefix(line, gpg_sig_header, &p) &&
+ *p == ' ') {
+ sig = line + strlen(gpg_sig_header) + 1;
+ other_signature = 0;
+ }
+ else if (starts_with(line, "gpgsig"))
+ other_signature = 1;
+ else if (other_signature && line[0] != ' ')
+ other_signature = 0;
if (sig) {
strbuf_add(signature, sig, next - sig);
saw_signature = 1;
@@ -1046,12 +1085,12 @@ int parse_signed_commit(const struct commit *commit,
if (*line == '\n')
/* dump the whole remainder of the buffer */
next = tail;
- strbuf_add(payload, line, next - line);
+ if (!other_signature)
+ strbuf_add(payload, line, next - line);
in_signature = 0;
}
line = next;
}
- unuse_commit_buffer(commit, buffer);
return saw_signature;
}
@@ -1060,23 +1099,29 @@ int remove_signature(struct strbuf *buf)
const char *line = buf->buf;
const char *tail = buf->buf + buf->len;
int in_signature = 0;
- const char *sig_start = NULL;
- const char *sig_end = NULL;
+ struct sigbuf {
+ const char *start;
+ const char *end;
+ } sigs[2], *sigp = &sigs[0];
+ int i;
+ const char *orig_buf = buf->buf;
+
+ memset(sigs, 0, sizeof(sigs));
while (line < tail) {
const char *next = memchr(line, '\n', tail - line);
next = next ? next + 1 : tail;
if (in_signature && line[0] == ' ')
- sig_end = next;
+ sigp->end = next;
else if (starts_with(line, "gpgsig")) {
int i;
for (i = 1; i < GIT_HASH_NALGOS; i++) {
const char *p;
if (skip_prefix(line, gpg_sig_headers[i], &p) &&
*p == ' ') {
- sig_start = line;
- sig_end = next;
+ sigp->start = line;
+ sigp->end = next;
in_signature = 1;
}
}
@@ -1084,15 +1129,18 @@ int remove_signature(struct strbuf *buf)
if (*line == '\n')
/* dump the whole remainder of the buffer */
next = tail;
+ if (in_signature && sigp - sigs != ARRAY_SIZE(sigs))
+ sigp++;
in_signature = 0;
}
line = next;
}
- if (sig_start)
- strbuf_remove(buf, sig_start - buf->buf, sig_end - sig_start);
+ for (i = ARRAY_SIZE(sigs) - 1; i >= 0; i--)
+ if (sigs[i].start)
+ strbuf_remove(buf, sigs[i].start - orig_buf, sigs[i].end - sigs[i].start);
- return sig_start != NULL;
+ return sigs[0].start != NULL;
}
static void handle_signed_tag(struct commit *parent, struct commit_extra_header ***tail)
@@ -1100,8 +1148,10 @@ static void handle_signed_tag(struct commit *parent, struct commit_extra_header
struct merge_remote_desc *desc;
struct commit_extra_header *mergetag;
char *buf;
- unsigned long size, len;
+ unsigned long size;
enum object_type type;
+ struct strbuf payload = STRBUF_INIT;
+ struct strbuf signature = STRBUF_INIT;
desc = merge_remote_util(parent);
if (!desc || !desc->obj)
@@ -1109,8 +1159,7 @@ static void handle_signed_tag(struct commit *parent, struct commit_extra_header
buf = read_object_file(&desc->obj->oid, &type, &size);
if (!buf || type != OBJ_TAG)
goto free_return;
- len = parse_signature(buf, size);
- if (size == len)
+ if (!parse_signature(buf, size, &payload, &signature))
goto free_return;
/*
* We could verify this signature and either omit the tag when
@@ -1122,13 +1171,15 @@ static void handle_signed_tag(struct commit *parent, struct commit_extra_header
* if (verify_signed_buffer(buf, len, buf + len, size - len, ...))
* warn("warning: signed tag unverified.");
*/
- mergetag = xcalloc(1, sizeof(*mergetag));
+ CALLOC_ARRAY(mergetag, 1);
mergetag->key = xstrdup("mergetag");
mergetag->value = buf;
mergetag->len = size;
**tail = mergetag;
*tail = &mergetag->next;
+ strbuf_release(&payload);
+ strbuf_release(&signature);
return;
free_return:
@@ -1143,7 +1194,7 @@ int check_commit_signature(const struct commit *commit, struct signature_check *
sigc->result = 'N';
- if (parse_signed_commit(commit, &payload, &signature) <= 0)
+ if (parse_signed_commit(commit, &payload, &signature, the_hash_algo) <= 0)
goto out;
ret = check_signature(payload.buf, payload.len, signature.buf,
signature.len, sigc);
@@ -1285,7 +1336,7 @@ static struct commit_extra_header *read_commit_extra_header_lines(
excluded_header_field(line, eof - line, exclude))
continue;
- it = xcalloc(1, sizeof(*it));
+ CALLOC_ARRAY(it, 1);
it->key = xmemdupz(line, eof-line);
*tail = it;
tail = &it->next;
@@ -1493,7 +1544,7 @@ int commit_tree_extended(const char *msg, size_t msg_len,
if (encoding_is_utf8 && !verify_utf8(&buffer))
fprintf(stderr, _(commit_utf8_warn));
- if (sign_commit && do_sign_commit(&buffer, sign_commit)) {
+ if (sign_commit && sign_with_header(&buffer, sign_commit)) {
result = -1;
goto out;
}
diff --git a/commit.h b/commit.h
index 5467786..49c0f50 100644
--- a/commit.h
+++ b/commit.h
@@ -11,9 +11,10 @@
#include "commit-slab.h"
#define COMMIT_NOT_FROM_GRAPH 0xFFFFFFFF
-#define GENERATION_NUMBER_INFINITY 0xFFFFFFFF
-#define GENERATION_NUMBER_MAX 0x3FFFFFFF
+#define GENERATION_NUMBER_INFINITY ((1ULL << 63) - 1)
+#define GENERATION_NUMBER_V1_MAX 0x3FFFFFFF
#define GENERATION_NUMBER_ZERO 0
+#define GENERATION_NUMBER_V2_OFFSET_MAX ((1ULL << 31) - 1)
struct commit_list {
struct commit *item;
@@ -88,9 +89,10 @@ static inline int repo_parse_commit(struct repository *r, struct commit *item)
return repo_parse_commit_gently(r, item, 0);
}
-static inline int parse_commit_no_graph(struct commit *commit)
+static inline int repo_parse_commit_no_graph(struct repository *r,
+ struct commit *commit)
{
- return repo_parse_commit_internal(the_repository, commit, 0, 0);
+ return repo_parse_commit_internal(r, commit, 0, 0);
}
#ifndef NO_THE_REPOSITORY_COMPATIBILITY_MACROS
@@ -167,6 +169,8 @@ int find_commit_subject(const char *commit_buffer, const char **subject);
struct commit_list *commit_list_insert(struct commit *item,
struct commit_list **list);
+int commit_list_contains(struct commit *item,
+ struct commit_list *list);
struct commit_list **commit_list_append(struct commit *commit,
struct commit_list **next);
unsigned commit_list_count(const struct commit_list *l);
@@ -177,6 +181,9 @@ void commit_list_sort_by_date(struct commit_list **list);
/* Shallow copy of the input list */
struct commit_list *copy_commit_list(struct commit_list *list);
+/* Modify list in-place to reverse it, returning new head; list will be tail */
+struct commit_list *reverse_commit_list(struct commit_list *list);
+
void free_commit_list(struct commit_list *list);
struct rev_info; /* in revision.h, it circularly uses enum cmit_fmt */
@@ -234,7 +241,7 @@ typedef int (*each_commit_graft_fn)(const struct commit_graft *, void *);
struct commit_graft *read_graft_line(struct strbuf *line);
/* commit_graft_pos returns an index into r->parsed_objects->grafts. */
-int commit_graft_pos(struct repository *r, const unsigned char *sha1);
+int commit_graft_pos(struct repository *r, const struct object_id *oid);
int register_commit_graft(struct repository *r, struct commit_graft *, int);
void prepare_commit_graft(struct repository *r);
struct commit_graft *lookup_commit_graft(struct repository *r, const struct object_id *oid);
@@ -312,7 +319,8 @@ void set_merge_remote_desc(struct commit *commit,
struct commit *get_merge_parent(const char *name);
int parse_signed_commit(const struct commit *commit,
- struct strbuf *message, struct strbuf *signature);
+ struct strbuf *message, struct strbuf *signature,
+ const struct git_hash_algo *algop);
int remove_signature(struct strbuf *buf);
/*
@@ -354,4 +362,13 @@ int compare_commits_by_gen_then_commit_date(const void *a_, const void *b_, void
LAST_ARG_MUST_BE_NULL
int run_commit_hook(int editor_is_used, const char *index_file, const char *name, ...);
+/* Sign a commit or tag buffer, storing the result in a header. */
+int sign_with_header(struct strbuf *buf, const char *keyid);
+/* Parse the signature out of a header. */
+int parse_buffer_signed_by_header(const char *buffer,
+ unsigned long size,
+ struct strbuf *payload,
+ struct strbuf *signature,
+ const struct git_hash_algo *algop);
+
#endif /* COMMIT_H */
diff --git a/compat/mingw.h b/compat/mingw.h
index f6bab54..ffa53a4 100644
--- a/compat/mingw.h
+++ b/compat/mingw.h
@@ -227,6 +227,7 @@ int mingw_rmdir(const char *path);
int mingw_open (const char *filename, int oflags, ...);
#define open mingw_open
+#undef OPEN_RETURNS_EINTR
int mingw_fgetc(FILE *stream);
#define fgetc mingw_fgetc
diff --git a/compat/open.c b/compat/open.c
new file mode 100644
index 0000000..eb3754a
--- /dev/null
+++ b/compat/open.c
@@ -0,0 +1,25 @@
+#include "git-compat-util.h"
+
+#undef open
+int git_open_with_retry(const char *path, int flags, ...)
+{
+ mode_t mode = 0;
+ int ret;
+
+ /*
+ * Also O_TMPFILE would take a mode, but it isn't defined everywhere.
+ * And anyway, we don't use it in our code base.
+ */
+ if (flags & O_CREAT) {
+ va_list ap;
+ va_start(ap, flags);
+ mode = va_arg(ap, int);
+ va_end(ap);
+ }
+
+ do {
+ ret = open(path, flags, mode);
+ } while (ret < 0 && errno == EINTR);
+
+ return ret;
+}
diff --git a/compat/precompose_utf8.c b/compat/precompose_utf8.c
index 136250f..ec56056 100644
--- a/compat/precompose_utf8.c
+++ b/compat/precompose_utf8.c
@@ -60,32 +60,46 @@ void probe_utf8_pathname_composition(void)
strbuf_release(&path);
}
+static inline const char *precompose_string_if_needed(const char *in)
+{
+ size_t inlen;
+ size_t outlen;
+ if (has_non_ascii(in, (size_t)-1, &inlen)) {
+ iconv_t ic_prec;
+ char *out;
+ if (precomposed_unicode < 0)
+ git_config_get_bool("core.precomposeunicode", &precomposed_unicode);
+ if (precomposed_unicode != 1)
+ return in;
+ ic_prec = iconv_open(repo_encoding, path_encoding);
+ if (ic_prec == (iconv_t) -1)
+ return in;
-void precompose_argv(int argc, const char **argv)
+ out = reencode_string_iconv(in, inlen, ic_prec, 0, &outlen);
+ if (out) {
+ if (outlen == inlen && !memcmp(in, out, outlen))
+ free(out); /* no need to return indentical */
+ else
+ in = out;
+ }
+ iconv_close(ic_prec);
+
+ }
+ return in;
+}
+
+const char *precompose_argv_prefix(int argc, const char **argv, const char *prefix)
{
int i = 0;
- const char *oldarg;
- char *newarg;
- iconv_t ic_precompose;
-
- if (precomposed_unicode != 1)
- return;
-
- ic_precompose = iconv_open(repo_encoding, path_encoding);
- if (ic_precompose == (iconv_t) -1)
- return;
while (i < argc) {
- size_t namelen;
- oldarg = argv[i];
- if (has_non_ascii(oldarg, (size_t)-1, &namelen)) {
- newarg = reencode_string_iconv(oldarg, namelen, ic_precompose, 0, NULL);
- if (newarg)
- argv[i] = newarg;
- }
+ argv[i] = precompose_string_if_needed(argv[i]);
i++;
}
- iconv_close(ic_precompose);
+ if (prefix) {
+ prefix = precompose_string_if_needed(prefix);
+ }
+ return prefix;
}
diff --git a/compat/precompose_utf8.h b/compat/precompose_utf8.h
index 6f843d3..d70b846 100644
--- a/compat/precompose_utf8.h
+++ b/compat/precompose_utf8.h
@@ -28,7 +28,7 @@ typedef struct {
struct dirent_prec_psx *dirent_nfc;
} PREC_DIR;
-void precompose_argv(int argc, const char **argv);
+const char *precompose_argv_prefix(int argc, const char **argv, const char *prefix);
void probe_utf8_pathname_composition(void);
PREC_DIR *precompose_utf8_opendir(const char *dirname);
diff --git a/config.c b/config.c
index 1137bd7..6428393 100644
--- a/config.c
+++ b/config.c
@@ -8,6 +8,7 @@
#include "cache.h"
#include "branch.h"
#include "config.h"
+#include "environment.h"
#include "repository.h"
#include "lockfile.h"
#include "exec-cmd.h"
@@ -332,7 +333,7 @@ int git_config_include(const char *var, const char *value, void *data)
return ret;
}
-void git_config_push_parameter(const char *text)
+static void git_config_push_split_parameter(const char *key, const char *value)
{
struct strbuf env = STRBUF_INIT;
const char *old = getenv(CONFIG_DATA_ENVIRONMENT);
@@ -340,11 +341,74 @@ void git_config_push_parameter(const char *text)
strbuf_addstr(&env, old);
strbuf_addch(&env, ' ');
}
- sq_quote_buf(&env, text);
+ sq_quote_buf(&env, key);
+ strbuf_addch(&env, '=');
+ if (value)
+ sq_quote_buf(&env, value);
setenv(CONFIG_DATA_ENVIRONMENT, env.buf, 1);
strbuf_release(&env);
}
+void git_config_push_parameter(const char *text)
+{
+ const char *value;
+
+ /*
+ * When we see:
+ *
+ * section.subsection=with=equals.key=value
+ *
+ * we cannot tell if it means:
+ *
+ * [section "subsection=with=equals"]
+ * key = value
+ *
+ * or:
+ *
+ * [section]
+ * subsection = with=equals.key=value
+ *
+ * We parse left-to-right for the first "=", meaning we'll prefer to
+ * keep the value intact over the subsection. This is historical, but
+ * also sensible since values are more likely to contain odd or
+ * untrusted input than a section name.
+ *
+ * A missing equals is explicitly allowed (as a bool-only entry).
+ */
+ value = strchr(text, '=');
+ if (value) {
+ char *key = xmemdupz(text, value - text);
+ git_config_push_split_parameter(key, value + 1);
+ free(key);
+ } else {
+ git_config_push_split_parameter(text, NULL);
+ }
+}
+
+void git_config_push_env(const char *spec)
+{
+ char *key;
+ const char *env_name;
+ const char *env_value;
+
+ env_name = strrchr(spec, '=');
+ if (!env_name)
+ die(_("invalid config format: %s"), spec);
+ key = xmemdupz(spec, env_name - spec);
+ env_name++;
+ if (!*env_name)
+ die(_("missing environment variable name for configuration '%.*s'"),
+ (int)(env_name - spec - 1), spec);
+
+ env_value = getenv(env_name);
+ if (!env_value)
+ die(_("missing environment variable '%s' for configuration '%.*s'"),
+ env_name, (int)(env_name - spec - 1), spec);
+
+ git_config_push_split_parameter(key, env_value);
+ free(key);
+}
+
static inline int iskeychar(int c)
{
return isalnum(c) || c == '-';
@@ -437,11 +501,26 @@ int git_config_key_is_valid(const char *key)
return !git_config_parse_key_1(key, NULL, NULL, 1);
}
+static int config_parse_pair(const char *key, const char *value,
+ config_fn_t fn, void *data)
+{
+ char *canonical_name;
+ int ret;
+
+ if (!strlen(key))
+ return error(_("empty config key"));
+ if (git_config_parse_key(key, &canonical_name, NULL))
+ return -1;
+
+ ret = (fn(canonical_name, value, data) < 0) ? -1 : 0;
+ free(canonical_name);
+ return ret;
+}
+
int git_config_parse_parameter(const char *text,
config_fn_t fn, void *data)
{
const char *value;
- char *canonical_name;
struct strbuf **pair;
int ret;
@@ -462,51 +541,131 @@ int git_config_parse_parameter(const char *text,
return error(_("bogus config parameter: %s"), text);
}
- if (git_config_parse_key(pair[0]->buf, &canonical_name, NULL)) {
- ret = -1;
- } else {
- ret = (fn(canonical_name, value, data) < 0) ? -1 : 0;
- free(canonical_name);
- }
+ ret = config_parse_pair(pair[0]->buf, value, fn, data);
strbuf_list_free(pair);
return ret;
}
+static int parse_config_env_list(char *env, config_fn_t fn, void *data)
+{
+ char *cur = env;
+ while (cur && *cur) {
+ const char *key = sq_dequote_step(cur, &cur);
+ if (!key)
+ return error(_("bogus format in %s"),
+ CONFIG_DATA_ENVIRONMENT);
+
+ if (!cur || isspace(*cur)) {
+ /* old-style 'key=value' */
+ if (git_config_parse_parameter(key, fn, data) < 0)
+ return -1;
+ }
+ else if (*cur == '=') {
+ /* new-style 'key'='value' */
+ const char *value;
+
+ cur++;
+ if (*cur == '\'') {
+ /* quoted value */
+ value = sq_dequote_step(cur, &cur);
+ if (!value || (cur && !isspace(*cur))) {
+ return error(_("bogus format in %s"),
+ CONFIG_DATA_ENVIRONMENT);
+ }
+ } else if (!*cur || isspace(*cur)) {
+ /* implicit bool: 'key'= */
+ value = NULL;
+ } else {
+ return error(_("bogus format in %s"),
+ CONFIG_DATA_ENVIRONMENT);
+ }
+
+ if (config_parse_pair(key, value, fn, data) < 0)
+ return -1;
+ }
+ else {
+ /* unknown format */
+ return error(_("bogus format in %s"),
+ CONFIG_DATA_ENVIRONMENT);
+ }
+
+ if (cur) {
+ while (isspace(*cur))
+ cur++;
+ }
+ }
+ return 0;
+}
+
int git_config_from_parameters(config_fn_t fn, void *data)
{
- const char *env = getenv(CONFIG_DATA_ENVIRONMENT);
+ const char *env;
+ struct strbuf envvar = STRBUF_INIT;
+ struct strvec to_free = STRVEC_INIT;
int ret = 0;
- char *envw;
- const char **argv = NULL;
- int nr = 0, alloc = 0;
- int i;
+ char *envw = NULL;
struct config_source source;
- if (!env)
- return 0;
-
memset(&source, 0, sizeof(source));
source.prev = cf;
source.origin_type = CONFIG_ORIGIN_CMDLINE;
cf = &source;
- /* sq_dequote will write over it */
- envw = xstrdup(env);
+ env = getenv(CONFIG_COUNT_ENVIRONMENT);
+ if (env) {
+ unsigned long count;
+ char *endp;
+ int i;
- if (sq_dequote_to_argv(envw, &argv, &nr, &alloc) < 0) {
- ret = error(_("bogus format in %s"), CONFIG_DATA_ENVIRONMENT);
- goto out;
+ count = strtoul(env, &endp, 10);
+ if (*endp) {
+ ret = error(_("bogus count in %s"), CONFIG_COUNT_ENVIRONMENT);
+ goto out;
+ }
+ if (count > INT_MAX) {
+ ret = error(_("too many entries in %s"), CONFIG_COUNT_ENVIRONMENT);
+ goto out;
+ }
+
+ for (i = 0; i < count; i++) {
+ const char *key, *value;
+
+ strbuf_addf(&envvar, "GIT_CONFIG_KEY_%d", i);
+ key = getenv_safe(&to_free, envvar.buf);
+ if (!key) {
+ ret = error(_("missing config key %s"), envvar.buf);
+ goto out;
+ }
+ strbuf_reset(&envvar);
+
+ strbuf_addf(&envvar, "GIT_CONFIG_VALUE_%d", i);
+ value = getenv_safe(&to_free, envvar.buf);
+ if (!value) {
+ ret = error(_("missing config value %s"), envvar.buf);
+ goto out;
+ }
+ strbuf_reset(&envvar);
+
+ if (config_parse_pair(key, value, fn, data) < 0) {
+ ret = -1;
+ goto out;
+ }
+ }
}
- for (i = 0; i < nr; i++) {
- if (git_config_parse_parameter(argv[i], fn, data) < 0) {
+ env = getenv(CONFIG_DATA_ENVIRONMENT);
+ if (env) {
+ /* sq_dequote will write over it */
+ envw = xstrdup(env);
+ if (parse_config_env_list(envw, fn, data) < 0) {
ret = -1;
goto out;
}
}
out:
- free(argv);
+ strbuf_release(&envvar);
+ strvec_clear(&to_free);
free(envw);
cf = source.prev;
return ret;
@@ -996,15 +1155,6 @@ static void die_bad_number(const char *name, const char *value)
if (!value)
value = "";
- if (!strcmp(name, "GIT_TEST_GETTEXT_POISON"))
- /*
- * We explicitly *don't* use _() here since it would
- * cause an infinite loop with _() needing to call
- * use_gettext_poison(). This is why marked up
- * translations with N_() above.
- */
- die(bad_numeric, value, name, error_type);
-
if (!(cf && cf->name))
die(_(bad_numeric), value, name, _(error_type));
@@ -1030,6 +1180,20 @@ static void die_bad_number(const char *name, const char *value)
}
}
+NORETURN
+static void die_bad_bool(const char *name, const char *value)
+{
+ if (!strcmp(name, "GIT_TEST_GETTEXT_POISON"))
+ /*
+ * We explicitly *don't* use _() here since it would
+ * cause an infinite loop with _() needing to call
+ * use_gettext_poison().
+ */
+ die("bad boolean config value '%s' for '%s'", value, name);
+ else
+ die(_("bad boolean config value '%s' for '%s'"), value, name);
+}
+
int git_config_int(const char *name, const char *value)
{
int ret;
@@ -1102,8 +1266,10 @@ int git_config_bool_or_int(const char *name, const char *value, int *is_bool)
int git_config_bool(const char *name, const char *value)
{
- int discard;
- return !!git_config_bool_or_int(name, value, &discard);
+ int v = git_parse_maybe_bool(value);
+ if (v < 0)
+ die_bad_bool(name, value);
+ return v;
}
int git_config_string(const char **dest, const char *var, const char *value)
@@ -1217,6 +1383,8 @@ static int git_default_core_config(const char *var, const char *value, void *cb)
return config_error_nonbool(var);
if (!strcasecmp(value, "auto"))
default_abbrev = -1;
+ else if (!git_parse_maybe_bool_text(value))
+ default_abbrev = the_hash_algo->hexsz;
else {
int abbrev = git_config_int(var, value);
if (abbrev < minimum_abbrev || abbrev > the_hash_algo->hexsz)
@@ -2101,7 +2269,7 @@ static void repo_read_config(struct repository *repo)
opts.git_dir = repo->gitdir;
if (!repo->config)
- repo->config = xcalloc(1, sizeof(struct config_set));
+ CALLOC_ARRAY(repo->config, 1);
else
git_configset_clear(repo->config);
diff --git a/config.h b/config.h
index c1449bb..19a9adb 100644
--- a/config.h
+++ b/config.h
@@ -138,6 +138,7 @@ int git_config_from_mem(config_fn_t fn,
int git_config_from_blob_oid(config_fn_t fn, const char *name,
const struct object_id *oid, void *data);
void git_config_push_parameter(const char *text);
+void git_config_push_env(const char *spec);
int git_config_from_parameters(config_fn_t fn, void *data);
void read_early_config(config_fn_t cb, void *data);
void read_very_early_config(config_fn_t cb, void *data);
diff --git a/config.mak.uname b/config.mak.uname
index 198ab1e..d204c20 100644
--- a/config.mak.uname
+++ b/config.mak.uname
@@ -124,6 +124,9 @@
ifeq ($(shell test "`expr "$(uname_R)" : '\([0-9][0-9]*\)\.'`" -ge 11 && echo 1),1)
HAVE_GETDELIM = YesPlease
endif
+ ifeq ($(shell test "`expr "$(uname_R)" : '\([0-9][0-9]*\)\.'`" -ge 20 && echo 1),1)
+ OPEN_RETURNS_EINTR = UnfortunatelyYes
+ endif
NO_MEMMEM = YesPlease
USE_ST_TIMESPEC = YesPlease
HAVE_DEV_TTY = YesPlease
@@ -664,7 +667,6 @@
NO_GETTEXT =
USE_GETTEXT_SCHEME = fallthrough
USE_LIBPCRE= YesPlease
- NO_LIBPCRE1_JIT = UnfortunatelyYes
NO_CURL =
USE_NED_ALLOCATOR = YesPlease
else
diff --git a/configure.ac b/configure.ac
index 66aedb9..031e8d3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -252,16 +252,17 @@
# Define USE_LIBPCRE if you have and want to use libpcre. Various
# commands such as log and grep offer runtime options to use
# Perl-compatible regular expressions instead of standard or extended
-# POSIX regular expressions.
-#
-# 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.
+# POSIX regular expressions. Only libpcre version 2 is supported.
#
# Define LIBPCREDIR=/foo/bar if your PCRE header and library files are in
# /foo/bar/include and /foo/bar/lib directories.
#
+
+AC_ARG_WITH(libpcre1,
+AS_HELP_STRING([--with-libpcre1],[DEPRECATED]),
+ AC_MSG_ERROR([support for --with-libpcre1 has been removed. Use --with-libpcre2!])
+ )
+
AC_ARG_WITH(libpcre,
AS_HELP_STRING([--with-libpcre],[synonym for --with-libpcre2]),
if test "$withval" = "no"; then
@@ -277,22 +278,6 @@
GIT_CONF_SUBST([LIBPCREDIR])
fi)
-AC_ARG_WITH(libpcre1,
-AS_HELP_STRING([--with-libpcre1],[support Perl-compatible regexes via libpcre1 (default is NO)])
-AS_HELP_STRING([], [ARG can be also prefix for libpcre library and headers]),
- if test "$withval" = "no"; then
- USE_LIBPCRE1=
- elif test "$withval" = "yes"; then
- USE_LIBPCRE1=YesPlease
- else
- USE_LIBPCRE1=YesPlease
- LIBPCREDIR=$withval
- AC_MSG_NOTICE([Setting LIBPCREDIR to $LIBPCREDIR])
- dnl USE_LIBPCRE1 can still be modified below, so don't substitute
- dnl it yet.
- GIT_CONF_SUBST([LIBPCREDIR])
- fi)
-
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]),
@@ -300,10 +285,6 @@
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
-
if test "$withval" = "no"; then
USE_LIBPCRE2=
elif test "$withval" = "yes"; then
@@ -554,25 +535,9 @@
GIT_CONF_SUBST([NO_OPENSSL])
#
-# Handle the USE_LIBPCRE1 and USE_LIBPCRE2 options potentially set
-# above.
+# Handle the USE_LIBPCRE options potentially set above.
#
-if test -n "$USE_LIBPCRE1"; then
-
-GIT_STASH_FLAGS($LIBPCREDIR)
-
-AC_CHECK_LIB([pcre], [pcre_version],
-[USE_LIBPCRE1=YesPlease],
-[USE_LIBPCRE1=])
-
-GIT_UNSTASH_FLAGS($LIBPCREDIR)
-
-GIT_CONF_SUBST([USE_LIBPCRE1])
-
-fi
-
-
if test -n "$USE_LIBPCRE2"; then
GIT_STASH_FLAGS($LIBPCREDIR)
diff --git a/connect.c b/connect.c
index 9c97fee..40b5c15 100644
--- a/connect.c
+++ b/connect.c
@@ -376,7 +376,8 @@ struct ref **get_remote_heads(struct packet_reader *reader,
}
/* Returns 1 when a valid ref has been added to `list`, 0 otherwise */
-static int process_ref_v2(struct packet_reader *reader, struct ref ***list)
+static int process_ref_v2(struct packet_reader *reader, struct ref ***list,
+ char **unborn_head_target)
{
int ret = 1;
int i = 0;
@@ -397,6 +398,25 @@ static int process_ref_v2(struct packet_reader *reader, struct ref ***list)
goto out;
}
+ if (!strcmp("unborn", line_sections.items[i].string)) {
+ i++;
+ if (unborn_head_target &&
+ !strcmp("HEAD", line_sections.items[i++].string)) {
+ /*
+ * Look for the symref target (if any). If found,
+ * return it to the caller.
+ */
+ for (; i < line_sections.nr; i++) {
+ const char *arg = line_sections.items[i].string;
+
+ if (skip_prefix(arg, "symref-target:", &arg)) {
+ *unborn_head_target = xstrdup(arg);
+ break;
+ }
+ }
+ }
+ goto out;
+ }
if (parse_oid_hex_algop(line_sections.items[i++].string, &old_oid, &end, reader->hash_algo) ||
*end) {
ret = 0;
@@ -453,12 +473,16 @@ void check_stateless_delimiter(int stateless_rpc,
struct ref **get_remote_refs(int fd_out, struct packet_reader *reader,
struct ref **list, int for_push,
- const struct strvec *ref_prefixes,
+ struct transport_ls_refs_options *transport_options,
const struct string_list *server_options,
int stateless_rpc)
{
int i;
const char *hash_name;
+ struct strvec *ref_prefixes = transport_options ?
+ &transport_options->ref_prefixes : NULL;
+ char **unborn_head_target = transport_options ?
+ &transport_options->unborn_head_target : NULL;
*list = NULL;
if (server_supports_v2("ls-refs", 1))
@@ -488,6 +512,8 @@ struct ref **get_remote_refs(int fd_out, struct packet_reader *reader,
if (!for_push)
packet_write_fmt(fd_out, "peel\n");
packet_write_fmt(fd_out, "symrefs\n");
+ if (server_supports_feature("ls-refs", "unborn", 0))
+ packet_write_fmt(fd_out, "unborn\n");
for (i = 0; ref_prefixes && i < ref_prefixes->nr; i++) {
packet_write_fmt(fd_out, "ref-prefix %s\n",
ref_prefixes->v[i]);
@@ -496,7 +522,7 @@ struct ref **get_remote_refs(int fd_out, struct packet_reader *reader,
/* Process response from server */
while (packet_reader_read(reader) == PACKET_READ_NORMAL) {
- if (!process_ref_v2(reader, &list))
+ if (!process_ref_v2(reader, &list, unborn_head_target))
die(_("invalid ls-refs response: %s"), reader->line);
}
diff --git a/contrib/buildsystems/CMakeLists.txt b/contrib/buildsystems/CMakeLists.txt
index c151dd7..ac3dbc0 100644
--- a/contrib/buildsystems/CMakeLists.txt
+++ b/contrib/buildsystems/CMakeLists.txt
@@ -910,9 +910,7 @@
set(TAR tar)
set(NO_CURL )
set(NO_EXPAT )
-set(USE_LIBPCRE1 )
set(USE_LIBPCRE2 )
-set(NO_LIBPCRE1_JIT )
set(NO_PERL )
set(NO_PTHREADS )
set(NO_PYTHON )
@@ -949,8 +947,6 @@
file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "TAR='${TAR}'\n")
file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_CURL='${NO_CURL}'\n")
file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_EXPAT='${NO_EXPAT}'\n")
-file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "USE_LIBPCRE1='${USE_LIBPCRE1}'\n")
-file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_LIBPCRE1_JIT='${NO_LIBPCRE1_JIT}'\n")
file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_PERL='${NO_PERL}'\n")
file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_PTHREADS='${NO_PTHREADS}'\n")
file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_UNIX_SOCKETS='${NO_UNIX_SOCKETS}'\n")
diff --git a/contrib/coccinelle/array.cocci b/contrib/coccinelle/array.cocci
index 46b8d2e..9a4f00c 100644
--- a/contrib/coccinelle/array.cocci
+++ b/contrib/coccinelle/array.cocci
@@ -88,3 +88,11 @@
@@
- ptr = xmalloc((n) * sizeof(T));
+ ALLOC_ARRAY(ptr, n);
+
+@@
+type T;
+T *ptr;
+expression n != 1;
+@@
+- ptr = xcalloc(n, \( sizeof(*ptr) \| sizeof(T) \) )
++ CALLOC_ARRAY(ptr, n)
diff --git a/contrib/coccinelle/xcalloc.cocci b/contrib/coccinelle/xcalloc.cocci
new file mode 100644
index 0000000..c291011
--- /dev/null
+++ b/contrib/coccinelle/xcalloc.cocci
@@ -0,0 +1,10 @@
+@@
+type T;
+T *ptr;
+expression n;
+@@
+ xcalloc(
++ n,
+ \( sizeof(T) \| sizeof(*ptr) \)
+- , n
+ )
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 463a312..7dc6cd8 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -29,6 +29,15 @@
# tell the completion to use commit completion. This also works with aliases
# of form "!sh -c '...'". For example, "!sh -c ': git commit ; ... '".
#
+# If you have a command that is not part of git, but you would still
+# like completion, you can use __git_complete:
+#
+# __git_complete gl git_log
+#
+# Or if it's a main command (i.e. git or gitk):
+#
+# __git_complete gk gitk
+#
# Compatible with bash 3.2.57.
#
# You can set the following environment variables to influence the behavior of
@@ -1438,8 +1447,10 @@
while [ $c -lt $cword ]; do
i="${words[c]}"
case "$i" in
- -d|--delete|-m|--move) only_local_ref="y" ;;
- -r|--remotes) has_r="y" ;;
+ -d|-D|--delete|-m|-M|--move|-c|-C|--copy)
+ only_local_ref="y" ;;
+ -r|--remotes)
+ has_r="y" ;;
esac
((c++))
done
@@ -3358,15 +3369,19 @@
esac
}
+__git_have_func () {
+ declare -f -- "$1" >/dev/null 2>&1
+}
+
__git_complete_command () {
local command="$1"
local completion_func="_git_${command//-/_}"
- if ! declare -f $completion_func >/dev/null 2>/dev/null &&
- declare -f _completion_loader >/dev/null 2>/dev/null
+ if ! __git_have_func $completion_func &&
+ __git_have_func _completion_loader
then
_completion_loader "git-$command"
fi
- if declare -f $completion_func >/dev/null 2>/dev/null
+ if __git_have_func $completion_func
then
$completion_func
return 0
@@ -3493,10 +3508,7 @@
$1
}
-# Setup completion for certain functions defined above by setting common
-# variables and workarounds.
-# This is NOT a public function; use at your own risk.
-__git_complete ()
+___git_complete ()
{
local wrapper="__git_wrap${2}"
eval "$wrapper () { __git_func_wrap $2 ; }"
@@ -3504,13 +3516,33 @@
|| complete -o default -o nospace -F $wrapper $1
}
-__git_complete git __git_main
-__git_complete gitk __gitk_main
+# Setup the completion for git commands
+# 1: command or alias
+# 2: function to call (e.g. `git`, `gitk`, `git_fetch`)
+__git_complete ()
+{
+ local func
+
+ if __git_have_func $2; then
+ func=$2
+ elif __git_have_func __$2_main; then
+ func=__$2_main
+ elif __git_have_func _$2; then
+ func=_$2
+ else
+ echo "ERROR: could not find function '$2'" 1>&2
+ return 1
+ fi
+ ___git_complete $1 $func
+}
+
+___git_complete git __git_main
+___git_complete gitk __gitk_main
# The following are necessary only for Cygwin, and only are needed
# when the user has tab-completed the executable name and consequently
# included the '.exe' suffix.
#
if [ "$OSTYPE" = cygwin ]; then
- __git_complete git.exe __git_main
+ ___git_complete git.exe __git_main
fi
diff --git a/convert.c b/convert.c
index ee360c2..9ecc1c6 100644
--- a/convert.c
+++ b/convert.c
@@ -1028,7 +1028,7 @@ static int read_convert_config(const char *var, const char *value, void *cb)
if (!strncmp(drv->name, name, namelen) && !drv->name[namelen])
break;
if (!drv) {
- drv = xcalloc(1, sizeof(struct convert_driver));
+ CALLOC_ARRAY(drv, 1);
drv->name = xmemdupz(name, namelen);
*user_convert_tail = drv;
user_convert_tail = &(drv->next);
diff --git a/daemon.c b/daemon.c
index 2ab7ea8..3435319 100644
--- a/daemon.c
+++ b/daemon.c
@@ -840,7 +840,7 @@ static void add_child(struct child_process *cld, struct sockaddr *addr, socklen_
{
struct child *newborn, **cradle;
- newborn = xcalloc(1, sizeof(*newborn));
+ CALLOC_ARRAY(newborn, 1);
live_children++;
memcpy(&newborn->cld, cld, sizeof(*cld));
memcpy(&newborn->address, addr, addrlen);
@@ -1148,7 +1148,7 @@ static int service_loop(struct socketlist *socklist)
struct pollfd *pfd;
int i;
- pfd = xcalloc(socklist->nr, sizeof(struct pollfd));
+ CALLOC_ARRAY(pfd, socklist->nr);
for (i = 0; i < socklist->nr; i++) {
pfd[i].fd = socklist->list[i];
diff --git a/decorate.c b/decorate.c
index a605b1b..2036d15 100644
--- a/decorate.c
+++ b/decorate.c
@@ -39,7 +39,7 @@ static void grow_decoration(struct decoration *n)
struct decoration_entry *old_entries = n->entries;
n->size = (old_size + 1000) * 3 / 2;
- n->entries = xcalloc(n->size, sizeof(struct decoration_entry));
+ CALLOC_ARRAY(n->entries, n->size);
n->nr = 0;
for (i = 0; i < old_size; i++) {
diff --git a/diff-merges.c b/diff-merges.c
new file mode 100644
index 0000000..146bb50
--- /dev/null
+++ b/diff-merges.c
@@ -0,0 +1,146 @@
+#include "diff-merges.h"
+
+#include "revision.h"
+
+static void suppress(struct rev_info *revs)
+{
+ revs->separate_merges = 0;
+ revs->first_parent_merges = 0;
+ revs->combine_merges = 0;
+ revs->dense_combined_merges = 0;
+ revs->combined_all_paths = 0;
+ revs->combined_imply_patch = 0;
+ revs->merges_need_diff = 0;
+}
+
+static void set_separate(struct rev_info *revs)
+{
+ suppress(revs);
+ revs->separate_merges = 1;
+}
+
+static void set_first_parent(struct rev_info *revs)
+{
+ set_separate(revs);
+ revs->first_parent_merges = 1;
+}
+
+static void set_m(struct rev_info *revs)
+{
+ /*
+ * To "diff-index", "-m" means "match missing", and to the "log"
+ * family of commands, it means "show full diff for merges". Set
+ * both fields appropriately.
+ */
+ set_separate(revs);
+ revs->match_missing = 1;
+}
+
+static void set_combined(struct rev_info *revs)
+{
+ suppress(revs);
+ revs->combine_merges = 1;
+ revs->dense_combined_merges = 0;
+}
+
+static void set_dense_combined(struct rev_info *revs)
+{
+ suppress(revs);
+ revs->combine_merges = 1;
+ revs->dense_combined_merges = 1;
+}
+
+static void set_diff_merges(struct rev_info *revs, const char *optarg)
+{
+ if (!strcmp(optarg, "off") || !strcmp(optarg, "none")) {
+ suppress(revs);
+ /* Return early to leave revs->merges_need_diff unset */
+ return;
+ }
+
+ if (!strcmp(optarg, "1") || !strcmp(optarg, "first-parent"))
+ set_first_parent(revs);
+ else if (!strcmp(optarg, "m") || !strcmp(optarg, "separate"))
+ set_separate(revs);
+ else if (!strcmp(optarg, "c") || !strcmp(optarg, "combined"))
+ set_combined(revs);
+ else if (!strcmp(optarg, "cc") || !strcmp(optarg, "dense-combined"))
+ set_dense_combined(revs);
+ else
+ die(_("unknown value for --diff-merges: %s"), optarg);
+
+ /* The flag is cleared by set_xxx() functions, so don't move this up */
+ revs->merges_need_diff = 1;
+}
+
+/*
+ * Public functions. They are in the order they are called.
+ */
+
+int diff_merges_parse_opts(struct rev_info *revs, const char **argv)
+{
+ int argcount = 1;
+ const char *optarg;
+ const char *arg = argv[0];
+
+ if (!strcmp(arg, "-m")) {
+ set_m(revs);
+ } else if (!strcmp(arg, "-c")) {
+ set_combined(revs);
+ revs->combined_imply_patch = 1;
+ } else if (!strcmp(arg, "--cc")) {
+ set_dense_combined(revs);
+ revs->combined_imply_patch = 1;
+ } else if (!strcmp(arg, "--no-diff-merges")) {
+ suppress(revs);
+ } else if (!strcmp(arg, "--combined-all-paths")) {
+ revs->combined_all_paths = 1;
+ } else if ((argcount = parse_long_opt("diff-merges", argv, &optarg))) {
+ set_diff_merges(revs, optarg);
+ } else
+ return 0;
+
+ revs->explicit_diff_merges = 1;
+ return argcount;
+}
+
+void diff_merges_suppress(struct rev_info *revs)
+{
+ suppress(revs);
+}
+
+void diff_merges_default_to_first_parent(struct rev_info *revs)
+{
+ if (!revs->explicit_diff_merges)
+ revs->separate_merges = 1;
+ if (revs->separate_merges)
+ revs->first_parent_merges = 1;
+}
+
+void diff_merges_default_to_dense_combined(struct rev_info *revs)
+{
+ if (!revs->explicit_diff_merges)
+ set_dense_combined(revs);
+}
+
+void diff_merges_set_dense_combined_if_unset(struct rev_info *revs)
+{
+ if (!revs->combine_merges)
+ set_dense_combined(revs);
+}
+
+void diff_merges_setup_revs(struct rev_info *revs)
+{
+ if (revs->combine_merges == 0)
+ revs->dense_combined_merges = 0;
+ if (revs->separate_merges == 0)
+ revs->first_parent_merges = 0;
+ if (revs->combined_all_paths && !revs->combine_merges)
+ die("--combined-all-paths makes no sense without -c or --cc");
+ if (revs->combined_imply_patch)
+ revs->diff = 1;
+ if (revs->combined_imply_patch || revs->merges_need_diff) {
+ if (!revs->diffopt.output_format)
+ revs->diffopt.output_format = DIFF_FORMAT_PATCH;
+ }
+}
diff --git a/diff-merges.h b/diff-merges.h
new file mode 100644
index 0000000..659467c
--- /dev/null
+++ b/diff-merges.h
@@ -0,0 +1,24 @@
+#ifndef DIFF_MERGES_H
+#define DIFF_MERGES_H
+
+/*
+ * diff-merges - utility module to handle command-line options for
+ * selection of particular diff format of merge commits
+ * representation.
+ */
+
+struct rev_info;
+
+int diff_merges_parse_opts(struct rev_info *revs, const char **argv);
+
+void diff_merges_suppress(struct rev_info *revs);
+
+void diff_merges_default_to_first_parent(struct rev_info *revs);
+
+void diff_merges_default_to_dense_combined(struct rev_info *revs);
+
+void diff_merges_set_dense_combined_if_unset(struct rev_info *revs);
+
+void diff_merges_setup_revs(struct rev_info *revs);
+
+#endif
diff --git a/diff.c b/diff.c
index 2253ec8..4acccd9 100644
--- a/diff.c
+++ b/diff.c
@@ -2233,14 +2233,12 @@ static void init_diff_words_data(struct emit_callback *ecbdata,
struct diff_options *o = xmalloc(sizeof(struct diff_options));
memcpy(o, orig_opts, sizeof(struct diff_options));
- ecbdata->diff_words =
- xcalloc(1, sizeof(struct diff_words_data));
+ CALLOC_ARRAY(ecbdata->diff_words, 1);
ecbdata->diff_words->type = o->word_diff;
ecbdata->diff_words->opt = o;
if (orig_opts->emitted_symbols)
- o->emitted_symbols =
- xcalloc(1, sizeof(struct emitted_diff_symbols));
+ CALLOC_ARRAY(o->emitted_symbols, 1);
if (!o->word_regex)
o->word_regex = userdiff_word_regex(one, o->repo->index);
@@ -2509,7 +2507,7 @@ static struct diffstat_file *diffstat_add(struct diffstat_t *diffstat,
const char *name_b)
{
struct diffstat_file *x;
- x = xcalloc(1, sizeof(*x));
+ CALLOC_ARRAY(x, 1);
ALLOC_GROW(diffstat->files, diffstat->nr + 1, diffstat->alloc);
diffstat->files[diffstat->nr++] = x;
if (name_b) {
@@ -4593,6 +4591,9 @@ void repo_diff_setup(struct repository *r, struct diff_options *options)
options->orderfile = diff_order_file_cfg;
+ if (!options->flags.ignore_submodule_set)
+ options->flags.ignore_untracked_in_submodules = 1;
+
if (diff_no_prefix) {
options->a_prefix = options->b_prefix = "";
} else if (!diff_mnemonic_prefix) {
@@ -4915,7 +4916,7 @@ static int diff_opt_find_object(const struct option *option,
return error(_("unable to resolve '%s'"), arg);
if (!opt->objfind)
- opt->objfind = xcalloc(1, sizeof(*opt->objfind));
+ CALLOC_ARRAY(opt->objfind, 1);
opt->pickaxe_opts |= DIFF_PICKAXE_KIND_OBJFIND;
opt->flags.recursive = 1;
@@ -5345,6 +5346,19 @@ static int diff_opt_word_diff_regex(const struct option *opt,
return 0;
}
+static int diff_opt_rotate_to(const struct option *opt, const char *arg, int unset)
+{
+ struct diff_options *options = opt->value;
+
+ BUG_ON_OPT_NEG(unset);
+ if (!strcmp(opt->long_name, "skip-to"))
+ options->skip_instead_of_rotate = 1;
+ else
+ options->skip_instead_of_rotate = 0;
+ options->rotate_to = arg;
+ return 0;
+}
+
static void prep_parse_options(struct diff_options *options)
{
struct option parseopts[] = {
@@ -5596,6 +5610,12 @@ static void prep_parse_options(struct diff_options *options)
DIFF_PICKAXE_REGEX, PARSE_OPT_NONEG),
OPT_FILENAME('O', NULL, &options->orderfile,
N_("control the order in which files appear in the output")),
+ OPT_CALLBACK_F(0, "rotate-to", options, N_("<path>"),
+ N_("show the change in the specified path first"),
+ PARSE_OPT_NONEG, diff_opt_rotate_to),
+ OPT_CALLBACK_F(0, "skip-to", options, N_("<path>"),
+ N_("skip the output to the specified path"),
+ PARSE_OPT_NONEG, diff_opt_rotate_to),
OPT_CALLBACK_F(0, "find-object", options, N_("<object-id>"),
N_("look for differences that change the number of occurrences of the specified object"),
PARSE_OPT_NONEG, diff_opt_find_object),
@@ -6333,6 +6353,32 @@ static void diff_flush_patch_all_file_pairs(struct diff_options *o)
}
}
+static void diff_free_file(struct diff_options *options)
+{
+ if (options->close_file)
+ fclose(options->file);
+}
+
+static void diff_free_ignore_regex(struct diff_options *options)
+{
+ int i;
+
+ for (i = 0; i < options->ignore_regex_nr; i++) {
+ regfree(options->ignore_regex[i]);
+ free(options->ignore_regex[i]);
+ }
+ free(options->ignore_regex);
+}
+
+void diff_free(struct diff_options *options)
+{
+ if (options->no_free)
+ return;
+
+ diff_free_file(options);
+ diff_free_ignore_regex(options);
+}
+
void diff_flush(struct diff_options *options)
{
struct diff_queue_struct *q = &diff_queued_diff;
@@ -6396,8 +6442,7 @@ void diff_flush(struct diff_options *options)
* options->file to /dev/null should be safe, because we
* aren't supposed to produce any output anyway.
*/
- if (options->close_file)
- fclose(options->file);
+ diff_free_file(options);
options->file = xfopen("/dev/null", "w");
options->close_file = 1;
options->color_moved = 0;
@@ -6430,8 +6475,7 @@ void diff_flush(struct diff_options *options)
free_queue:
free(q->queue);
DIFF_QUEUE_CLEAR(q);
- if (options->close_file)
- fclose(options->file);
+ diff_free(options);
/*
* Report the content-level differences with HAS_CHANGES;
@@ -6666,6 +6710,8 @@ void diffcore_std(struct diff_options *options)
diffcore_pickaxe(options);
if (options->orderfile)
diffcore_order(options->orderfile);
+ if (options->rotate_to)
+ diffcore_rotate(options);
if (!options->found_follow)
/* See try_to_follow_renames() in tree-diff.c */
diff_resolve_rename_copy();
diff --git a/diff.h b/diff.h
index 9665e22..c8f3fae 100644
--- a/diff.h
+++ b/diff.h
@@ -49,7 +49,17 @@
* - Once you finish feeding the pairs of files, call `diffcore_std()`.
* This will tell the diffcore library to go ahead and do its work.
*
- * - Calling `diff_flush()` will produce the output.
+ * - Calling `diff_flush()` will produce the output, it will call
+ * `diff_free()` to free any resources, e.g. those allocated in
+ * `diff_opt_parse()`.
+ *
+ * - Set `.no_free = 1` before calling `diff_flush()` to defer the
+ * freeing of allocated memory in diff_options. This is useful when
+ * `diff_flush()` is being called in a loop, rather than as a
+ * one-off. When setting `.no_free = 1` you must ensure that
+ * `diff_free()` is called at the end, either by flipping the flag
+ * before the last `diff_flush()` call, or by flipping it before
+ * calling `diff_free()` yourself.
*/
struct combine_diff_path;
@@ -178,6 +188,7 @@ struct diff_flags {
unsigned diff_from_contents;
unsigned dirty_submodules;
unsigned ignore_untracked_in_submodules;
+ unsigned ignore_submodule_set;
unsigned ignore_dirty_submodules;
unsigned override_submodule_config;
unsigned dirstat_by_line;
@@ -226,6 +237,27 @@ enum diff_submodule_format {
struct diff_options {
const char *orderfile;
+ /*
+ * "--rotate-to=<file>" would start showing at <file> and when
+ * the output reaches the end, wrap around by default.
+ * Setting skip_instead_of_rotate to true stops the output at the
+ * end, effectively discarding the earlier part of the output
+ * before <file>'s diff (this is used to implement the
+ * "--skip-to=<file>" option).
+ *
+ * When rotate_to_strict is set, it is an error if there is no
+ * <file> in the diff. Otherwise, the output starts at the
+ * path that is the same as, or first path that sorts after,
+ * <file>. Because it is unreasonable to require the exact
+ * match for "git log -p --rotate-to=<file>" (i.e. not all
+ * commit would touch that single <file>), "git log" sets it
+ * to false. "git diff" sets it to true to detect an error
+ * in the command line option.
+ */
+ const char *rotate_to;
+ int skip_instead_of_rotate;
+ int rotate_to_strict;
+
/**
* A constant string (can and typically does contain newlines to look for
* a block of text, not just a single line) to filter out the filepairs
@@ -364,6 +396,8 @@ struct diff_options {
struct repository *repo;
struct option *parseopts;
+
+ int no_free;
};
unsigned diff_filter_bit(char status);
@@ -558,6 +592,7 @@ void diffcore_fix_diff_index(void);
int diff_queue_is_empty(void);
void diff_flush(struct diff_options*);
+void diff_free(struct diff_options*);
void diff_warn_rename_limit(const char *varname, int needed, int degraded_cc);
/* diff-raw status letters */
diff --git a/diffcore-rename.c b/diffcore-rename.c
index d367a6d..9c1478c 100644
--- a/diffcore-rename.c
+++ b/diffcore-rename.c
@@ -9,63 +9,36 @@
#include "hashmap.h"
#include "progress.h"
#include "promisor-remote.h"
+#include "strmap.h"
/* Table of rename/copy destinations */
static struct diff_rename_dst {
- struct diff_filespec *two;
- struct diff_filepair *pair;
+ struct diff_filepair *p;
+ struct diff_filespec *filespec_to_free;
+ int is_rename; /* false -> just a create; true -> rename or copy */
} *rename_dst;
static int rename_dst_nr, rename_dst_alloc;
+/* Mapping from break source pathname to break destination index */
+static struct strintmap *break_idx = NULL;
-static int find_rename_dst(struct diff_filespec *two)
+static struct diff_rename_dst *locate_rename_dst(struct diff_filepair *p)
{
- int first, last;
-
- first = 0;
- last = rename_dst_nr;
- while (last > first) {
- int next = first + ((last - first) >> 1);
- struct diff_rename_dst *dst = &(rename_dst[next]);
- int cmp = strcmp(two->path, dst->two->path);
- if (!cmp)
- return next;
- if (cmp < 0) {
- last = next;
- continue;
- }
- first = next+1;
- }
- return -first - 1;
-}
-
-static struct diff_rename_dst *locate_rename_dst(struct diff_filespec *two)
-{
- int ofs = find_rename_dst(two);
- return ofs < 0 ? NULL : &rename_dst[ofs];
+ /* Lookup by p->ONE->path */
+ int idx = break_idx ? strintmap_get(break_idx, p->one->path) : -1;
+ return (idx == -1) ? NULL : &rename_dst[idx];
}
/*
* Returns 0 on success, -1 if we found a duplicate.
*/
-static int add_rename_dst(struct diff_filespec *two)
+static int add_rename_dst(struct diff_filepair *p)
{
- int first = find_rename_dst(two);
-
- if (first >= 0)
- return -1;
- first = -first - 1;
-
- /* insert to make it at "first" */
ALLOC_GROW(rename_dst, rename_dst_nr + 1, rename_dst_alloc);
+ rename_dst[rename_dst_nr].p = p;
+ rename_dst[rename_dst_nr].filespec_to_free = NULL;
+ rename_dst[rename_dst_nr].is_rename = 0;
rename_dst_nr++;
- if (first < rename_dst_nr)
- MOVE_ARRAY(rename_dst + first + 1, rename_dst + first,
- rename_dst_nr - first - 1);
- rename_dst[first].two = alloc_filespec(two->path);
- fill_filespec(rename_dst[first].two, &two->oid, two->oid_valid,
- two->mode);
- rename_dst[first].pair = NULL;
return 0;
}
@@ -76,36 +49,20 @@ static struct diff_rename_src {
} *rename_src;
static int rename_src_nr, rename_src_alloc;
-static struct diff_rename_src *register_rename_src(struct diff_filepair *p)
+static void register_rename_src(struct diff_filepair *p)
{
- int first, last;
- struct diff_filespec *one = p->one;
- unsigned short score = p->score;
-
- first = 0;
- last = rename_src_nr;
- while (last > first) {
- int next = first + ((last - first) >> 1);
- struct diff_rename_src *src = &(rename_src[next]);
- int cmp = strcmp(one->path, src->p->one->path);
- if (!cmp)
- return src;
- if (cmp < 0) {
- last = next;
- continue;
+ if (p->broken_pair) {
+ if (!break_idx) {
+ break_idx = xmalloc(sizeof(*break_idx));
+ strintmap_init(break_idx, -1);
}
- first = next+1;
+ strintmap_set(break_idx, p->one->path, rename_dst_nr);
}
- /* insert to make it at "first" */
ALLOC_GROW(rename_src, rename_src_nr + 1, rename_src_alloc);
+ rename_src[rename_src_nr].p = p;
+ rename_src[rename_src_nr].score = p->score;
rename_src_nr++;
- if (first < rename_src_nr)
- MOVE_ARRAY(rename_src + first + 1, rename_src + first,
- rename_src_nr - first - 1);
- rename_src[first].p = p;
- rename_src[first].score = score;
- return &(rename_src[first]);
}
static int basename_same(struct diff_filespec *src, struct diff_filespec *dst)
@@ -141,14 +98,14 @@ static void prefetch(void *prefetch_options)
struct oid_array to_fetch = OID_ARRAY_INIT;
for (i = 0; i < rename_dst_nr; i++) {
- if (rename_dst[i].pair)
+ if (rename_dst[i].p->renamed_pair)
/*
* The loop in diffcore_rename() will not need these
* blobs, so skip prefetching.
*/
continue; /* already found exact match */
diff_add_if_missing(options->repo, &to_fetch,
- rename_dst[i].two);
+ rename_dst[i].p->two);
}
for (i = 0; i < rename_src_nr; i++) {
if (options->skip_unmodified &&
@@ -258,26 +215,24 @@ static int estimate_similarity(struct repository *r,
static void record_rename_pair(int dst_index, int src_index, int score)
{
- struct diff_filespec *src, *dst;
- struct diff_filepair *dp;
+ struct diff_filepair *src = rename_src[src_index].p;
+ struct diff_filepair *dst = rename_dst[dst_index].p;
- if (rename_dst[dst_index].pair)
+ if (dst->renamed_pair)
die("internal error: dst already matched.");
- src = rename_src[src_index].p->one;
- src->rename_used++;
- src->count++;
+ src->one->rename_used++;
+ src->one->count++;
- dst = rename_dst[dst_index].two;
- dst->count++;
+ rename_dst[dst_index].filespec_to_free = dst->one;
+ rename_dst[dst_index].is_rename = 1;
- dp = diff_queue(NULL, src, dst);
- dp->renamed_pair = 1;
- if (!strcmp(src->path, dst->path))
- dp->score = rename_src[src_index].score;
+ dst->one = src->one;
+ dst->renamed_pair = 1;
+ if (!strcmp(dst->one->path, dst->two->path))
+ dst->score = rename_src[src_index].score;
else
- dp->score = score;
- rename_dst[dst_index].pair = dp;
+ dst->score = score;
}
/*
@@ -323,7 +278,7 @@ static int find_identical_files(struct hashmap *srcs,
struct diff_options *options)
{
int renames = 0;
- struct diff_filespec *target = rename_dst[dst_index].two;
+ struct diff_filespec *target = rename_dst[dst_index].p->two;
struct file_similarity *p, *best = NULL;
int i = 100, best_score = -1;
unsigned int hash = hash_filespec(options->repo, target);
@@ -412,6 +367,144 @@ static int find_exact_renames(struct diff_options *options)
return renames;
}
+static const char *get_basename(const char *filename)
+{
+ /*
+ * gitbasename() has to worry about special drives, multiple
+ * directory separator characters, trailing slashes, NULL or
+ * empty strings, etc. We only work on filenames as stored in
+ * git, and thus get to ignore all those complications.
+ */
+ const char *base = strrchr(filename, '/');
+ return base ? base + 1 : filename;
+}
+
+static int find_basename_matches(struct diff_options *options,
+ int minimum_score)
+{
+ /*
+ * When I checked in early 2020, over 76% of file renames in linux
+ * just moved files to a different directory but kept the same
+ * basename. gcc did that with over 64% of renames, gecko did it
+ * with over 79%, and WebKit did it with over 89%.
+ *
+ * Therefore we can bypass the normal exhaustive NxM matrix
+ * comparison of similarities between all potential rename sources
+ * and destinations by instead using file basename as a hint (i.e.
+ * the portion of the filename after the last '/'), checking for
+ * similarity between files with the same basename, and if we find
+ * a pair that are sufficiently similar, record the rename pair and
+ * exclude those two from the NxM matrix.
+ *
+ * This *might* cause us to find a less than optimal pairing (if
+ * there is another file that we are even more similar to but has a
+ * different basename). Given the huge performance advantage
+ * basename matching provides, and given the frequency with which
+ * people use the same basename in real world projects, that's a
+ * trade-off we are willing to accept when doing just rename
+ * detection.
+ *
+ * If someone wants copy detection that implies they are willing to
+ * spend more cycles to find similarities between files, so it may
+ * be less likely that this heuristic is wanted. If someone is
+ * doing break detection, that means they do not want filename
+ * similarity to imply any form of content similiarity, and thus
+ * this heuristic would definitely be incompatible.
+ */
+
+ int i, renames = 0;
+ struct strintmap sources;
+ struct strintmap dests;
+ struct hashmap_iter iter;
+ struct strmap_entry *entry;
+
+ /*
+ * The prefeteching stuff wants to know if it can skip prefetching
+ * blobs that are unmodified...and will then do a little extra work
+ * to verify that the oids are indeed different before prefetching.
+ * Unmodified blobs are only relevant when doing copy detection;
+ * when limiting to rename detection, diffcore_rename[_extended]()
+ * will never be called with unmodified source paths fed to us, so
+ * the extra work necessary to check if rename_src entries are
+ * unmodified would be a small waste.
+ */
+ int skip_unmodified = 0;
+
+ /*
+ * Create maps of basename -> fullname(s) for remaining sources and
+ * dests.
+ */
+ strintmap_init_with_options(&sources, -1, NULL, 0);
+ strintmap_init_with_options(&dests, -1, NULL, 0);
+ for (i = 0; i < rename_src_nr; ++i) {
+ char *filename = rename_src[i].p->one->path;
+ const char *base;
+
+ /* exact renames removed in remove_unneeded_paths_from_src() */
+ assert(!rename_src[i].p->one->rename_used);
+
+ /* Record index within rename_src (i) if basename is unique */
+ base = get_basename(filename);
+ if (strintmap_contains(&sources, base))
+ strintmap_set(&sources, base, -1);
+ else
+ strintmap_set(&sources, base, i);
+ }
+ for (i = 0; i < rename_dst_nr; ++i) {
+ char *filename = rename_dst[i].p->two->path;
+ const char *base;
+
+ if (rename_dst[i].is_rename)
+ continue; /* involved in exact match already. */
+
+ /* Record index within rename_dst (i) if basename is unique */
+ base = get_basename(filename);
+ if (strintmap_contains(&dests, base))
+ strintmap_set(&dests, base, -1);
+ else
+ strintmap_set(&dests, base, i);
+ }
+
+ /* Now look for basename matchups and do similarity estimation */
+ strintmap_for_each_entry(&sources, &iter, entry) {
+ const char *base = entry->key;
+ intptr_t src_index = (intptr_t)entry->value;
+ intptr_t dst_index;
+ if (src_index == -1)
+ continue;
+
+ if (0 <= (dst_index = strintmap_get(&dests, base))) {
+ struct diff_filespec *one, *two;
+ int score;
+
+ /* Estimate the similarity */
+ one = rename_src[src_index].p->one;
+ two = rename_dst[dst_index].p->two;
+ score = estimate_similarity(options->repo, one, two,
+ minimum_score, skip_unmodified);
+
+ /* If sufficiently similar, record as rename pair */
+ if (score < minimum_score)
+ continue;
+ record_rename_pair(dst_index, src_index, score);
+ renames++;
+
+ /*
+ * Found a rename so don't need text anymore; if we
+ * didn't find a rename, the filespec_blob would get
+ * re-used when doing the matrix of comparisons.
+ */
+ diff_free_filespec_blob(one);
+ diff_free_filespec_blob(two);
+ }
+ }
+
+ strintmap_clear(&sources);
+ strintmap_clear(&dests);
+
+ return renames;
+}
+
#define NUM_CANDIDATE_PER_DST 4
static void record_if_better(struct diff_score m[], struct diff_score *o)
{
@@ -434,12 +527,11 @@ static void record_if_better(struct diff_score m[], struct diff_score *o)
* 1 if we need to disable inexact rename detection;
* 2 if we would be under the limit if we were given -C instead of -C -C.
*/
-static int too_many_rename_candidates(int num_create,
+static int too_many_rename_candidates(int num_destinations, int num_sources,
struct diff_options *options)
{
int rename_limit = options->rename_limit;
- int num_src = rename_src_nr;
- int i;
+ int i, limited_sources;
options->needed_rename_limit = 0;
@@ -447,31 +539,34 @@ static int too_many_rename_candidates(int num_create,
* This basically does a test for the rename matrix not
* growing larger than a "rename_limit" square matrix, ie:
*
- * num_create * num_src > rename_limit * rename_limit
+ * num_destinations * num_sources > rename_limit * rename_limit
+ *
+ * We use st_mult() to check overflow conditions; in the
+ * exceptional circumstance that size_t isn't large enough to hold
+ * the multiplication, the system won't be able to allocate enough
+ * memory for the matrix anyway.
*/
if (rename_limit <= 0)
rename_limit = 32767;
- if ((num_create <= rename_limit || num_src <= rename_limit) &&
- ((uint64_t)num_create * (uint64_t)num_src
- <= (uint64_t)rename_limit * (uint64_t)rename_limit))
+ if (st_mult(num_destinations, num_sources)
+ <= st_mult(rename_limit, rename_limit))
return 0;
options->needed_rename_limit =
- num_src > num_create ? num_src : num_create;
+ num_sources > num_destinations ? num_sources : num_destinations;
/* Are we running under -C -C? */
if (!options->flags.find_copies_harder)
return 1;
/* Would we bust the limit if we were running under -C? */
- for (num_src = i = 0; i < rename_src_nr; i++) {
+ for (limited_sources = i = 0; i < num_sources; i++) {
if (diff_unmodified_pair(rename_src[i].p))
continue;
- num_src++;
+ limited_sources++;
}
- if ((num_create <= rename_limit || num_src <= rename_limit) &&
- ((uint64_t)num_create * (uint64_t)num_src
- <= (uint64_t)rename_limit * (uint64_t)rename_limit))
+ if (st_mult(num_destinations, limited_sources)
+ <= st_mult(rename_limit, rename_limit))
return 2;
return 1;
}
@@ -487,7 +582,7 @@ static int find_renames(struct diff_score *mx, int dst_cnt, int minimum_score, i
(mx[i].score < minimum_score))
break; /* there is no more usable pair. */
dst = &rename_dst[mx[i].dst];
- if (dst->pair)
+ if (dst->is_rename)
continue; /* already done, either exact or fuzzy. */
if (!copies && rename_src[mx[i].src].p->one->rename_used)
continue;
@@ -497,6 +592,54 @@ static int find_renames(struct diff_score *mx, int dst_cnt, int minimum_score, i
return count;
}
+static void remove_unneeded_paths_from_src(int detecting_copies)
+{
+ int i, new_num_src;
+
+ if (detecting_copies)
+ return; /* nothing to remove */
+ if (break_idx)
+ return; /* culling incompatible with break detection */
+
+ /*
+ * Note on reasons why we cull unneeded sources but not destinations:
+ * 1) Pairings are stored in rename_dst (not rename_src), which we
+ * need to keep around. So, we just can't cull rename_dst even
+ * if we wanted to. But doing so wouldn't help because...
+ *
+ * 2) There is a matrix pairwise comparison that follows the
+ * "Performing inexact rename detection" progress message.
+ * Iterating over the destinations is done in the outer loop,
+ * hence we only iterate over each of those once and we can
+ * easily skip the outer loop early if the destination isn't
+ * relevant. That's only one check per destination path to
+ * skip.
+ *
+ * By contrast, the sources are iterated in the inner loop; if
+ * we check whether a source can be skipped, then we'll be
+ * checking it N separate times, once for each destination.
+ * We don't want to have to iterate over known-not-needed
+ * sources N times each, so avoid that by removing the sources
+ * from rename_src here.
+ */
+ for (i = 0, new_num_src = 0; i < rename_src_nr; i++) {
+ /*
+ * renames are stored in rename_dst, so if a rename has
+ * already been detected using this source, we can just
+ * remove the source knowing rename_dst has its info.
+ */
+ if (rename_src[i].p->one->rename_used)
+ continue;
+
+ if (new_num_src < i)
+ memcpy(&rename_src[new_num_src], &rename_src[i],
+ sizeof(struct diff_rename_src));
+ new_num_src++;
+ }
+
+ rename_src_nr = new_num_src;
+}
+
void diffcore_rename(struct diff_options *options)
{
int detect_rename = options->detect_rename;
@@ -505,9 +648,12 @@ void diffcore_rename(struct diff_options *options)
struct diff_queue_struct outq;
struct diff_score *mx;
int i, j, rename_count, skip_unmodified = 0;
- int num_create, dst_cnt;
+ int num_destinations, dst_cnt;
+ int num_sources, want_copies;
struct progress *progress = NULL;
+ trace2_region_enter("diff", "setup", options->repo);
+ want_copies = (detect_rename == DIFF_DETECT_COPY);
if (!minimum_score)
minimum_score = DEFAULT_RENAME_SCORE;
@@ -522,7 +668,7 @@ void diffcore_rename(struct diff_options *options)
else if (!options->flags.rename_empty &&
is_empty_blob_oid(&p->two->oid))
continue;
- else if (add_rename_dst(p->two) < 0) {
+ else if (add_rename_dst(p) < 0) {
warning("skipping rename detection, detected"
" duplicate destination '%s'",
p->two->path);
@@ -544,7 +690,7 @@ void diffcore_rename(struct diff_options *options)
p->one->rename_used++;
register_rename_src(p);
}
- else if (detect_rename == DIFF_DETECT_COPY) {
+ else if (want_copies) {
/*
* Increment the "rename_used" score by
* one, to indicate ourselves as a user.
@@ -553,30 +699,77 @@ void diffcore_rename(struct diff_options *options)
register_rename_src(p);
}
}
+ trace2_region_leave("diff", "setup", options->repo);
if (rename_dst_nr == 0 || rename_src_nr == 0)
goto cleanup; /* nothing to do */
+ trace2_region_enter("diff", "exact renames", options->repo);
/*
* We really want to cull the candidates list early
* with cheap tests in order to avoid doing deltas.
*/
rename_count = find_exact_renames(options);
+ trace2_region_leave("diff", "exact renames", options->repo);
/* Did we only want exact renames? */
if (minimum_score == MAX_SCORE)
goto cleanup;
- /*
- * Calculate how many renames are left (but all the source
- * files still remain as options for rename/copies!)
- */
- num_create = (rename_dst_nr - rename_count);
+ num_sources = rename_src_nr;
+
+ if (want_copies || break_idx) {
+ /*
+ * Cull sources:
+ * - remove ones corresponding to exact renames
+ */
+ trace2_region_enter("diff", "cull after exact", options->repo);
+ remove_unneeded_paths_from_src(want_copies);
+ trace2_region_leave("diff", "cull after exact", options->repo);
+ } else {
+ /* Determine minimum score to match basenames */
+ double factor = 0.5;
+ char *basename_factor = getenv("GIT_BASENAME_FACTOR");
+ int min_basename_score;
+
+ if (basename_factor)
+ factor = strtol(basename_factor, NULL, 10)/100.0;
+ assert(factor >= 0.0 && factor <= 1.0);
+ min_basename_score = minimum_score +
+ (int)(factor * (MAX_SCORE - minimum_score));
+
+ /*
+ * Cull sources:
+ * - remove ones involved in renames (found via exact match)
+ */
+ trace2_region_enter("diff", "cull after exact", options->repo);
+ remove_unneeded_paths_from_src(want_copies);
+ trace2_region_leave("diff", "cull after exact", options->repo);
+
+ /* Utilize file basenames to quickly find renames. */
+ trace2_region_enter("diff", "basename matches", options->repo);
+ rename_count += find_basename_matches(options,
+ min_basename_score);
+ trace2_region_leave("diff", "basename matches", options->repo);
+
+ /*
+ * Cull sources, again:
+ * - remove ones involved in renames (found via basenames)
+ */
+ trace2_region_enter("diff", "cull basename", options->repo);
+ remove_unneeded_paths_from_src(want_copies);
+ trace2_region_leave("diff", "cull basename", options->repo);
+ }
+
+ /* Calculate how many rename destinations are left */
+ num_destinations = (rename_dst_nr - rename_count);
+ num_sources = rename_src_nr; /* rename_src_nr reflects lower number */
/* All done? */
- if (!num_create)
+ if (!num_destinations || !num_sources)
goto cleanup;
- switch (too_many_rename_candidates(num_create, options)) {
+ switch (too_many_rename_candidates(num_destinations, num_sources,
+ options)) {
case 1:
goto cleanup;
case 2:
@@ -587,19 +780,20 @@ void diffcore_rename(struct diff_options *options)
break;
}
+ trace2_region_enter("diff", "inexact renames", options->repo);
if (options->show_rename_progress) {
progress = start_delayed_progress(
_("Performing inexact rename detection"),
- (uint64_t)rename_dst_nr * (uint64_t)rename_src_nr);
+ (uint64_t)num_destinations * (uint64_t)num_sources);
}
- mx = xcalloc(st_mult(NUM_CANDIDATE_PER_DST, num_create), sizeof(*mx));
+ CALLOC_ARRAY(mx, st_mult(NUM_CANDIDATE_PER_DST, num_destinations));
for (dst_cnt = i = 0; i < rename_dst_nr; i++) {
- struct diff_filespec *two = rename_dst[i].two;
+ struct diff_filespec *two = rename_dst[i].p->two;
struct diff_score *m;
- if (rename_dst[i].pair)
- continue; /* dealt with exact match already. */
+ if (rename_dst[i].is_rename)
+ continue; /* exact or basename match already handled */
m = &mx[dst_cnt * NUM_CANDIDATE_PER_DST];
for (j = 0; j < NUM_CANDIDATE_PER_DST; j++)
@@ -609,6 +803,8 @@ void diffcore_rename(struct diff_options *options)
struct diff_filespec *one = rename_src[j].p->one;
struct diff_score this_src;
+ assert(!one->rename_used || want_copies || break_idx);
+
if (skip_unmodified &&
diff_unmodified_pair(rename_src[j].p))
continue;
@@ -629,7 +825,8 @@ void diffcore_rename(struct diff_options *options)
diff_free_filespec_blob(two);
}
dst_cnt++;
- display_progress(progress, (uint64_t)(i+1)*(uint64_t)rename_src_nr);
+ display_progress(progress,
+ (uint64_t)dst_cnt * (uint64_t)num_sources);
}
stop_progress(&progress);
@@ -637,14 +834,16 @@ void diffcore_rename(struct diff_options *options)
STABLE_QSORT(mx, dst_cnt * NUM_CANDIDATE_PER_DST, score_compare);
rename_count += find_renames(mx, dst_cnt, minimum_score, 0);
- if (detect_rename == DIFF_DETECT_COPY)
+ if (want_copies)
rename_count += find_renames(mx, dst_cnt, minimum_score, 1);
free(mx);
+ trace2_region_leave("diff", "inexact renames", options->repo);
cleanup:
/* At this point, we have found some renames and copies and they
* are recorded in rename_dst. The original list is still in *q.
*/
+ trace2_region_enter("diff", "write back to queue", options->repo);
DIFF_QUEUE_CLEAR(&outq);
for (i = 0; i < q->nr; i++) {
struct diff_filepair *p = q->queue[i];
@@ -654,22 +853,8 @@ void diffcore_rename(struct diff_options *options)
diff_q(&outq, p);
}
else if (!DIFF_FILE_VALID(p->one) && DIFF_FILE_VALID(p->two)) {
- /*
- * Creation
- *
- * We would output this create record if it has
- * not been turned into a rename/copy already.
- */
- struct diff_rename_dst *dst = locate_rename_dst(p->two);
- if (dst && dst->pair) {
- diff_q(&outq, dst->pair);
- pair_to_free = p;
- }
- else
- /* no matching rename/copy source, so
- * record this as a creation.
- */
- diff_q(&outq, p);
+ /* Creation */
+ diff_q(&outq, p);
}
else if (DIFF_FILE_VALID(p->one) && !DIFF_FILE_VALID(p->two)) {
/*
@@ -690,8 +875,10 @@ void diffcore_rename(struct diff_options *options)
*/
if (DIFF_PAIR_BROKEN(p)) {
/* broken delete */
- struct diff_rename_dst *dst = locate_rename_dst(p->one);
- if (dst && dst->pair)
+ struct diff_rename_dst *dst = locate_rename_dst(p);
+ if (!dst)
+ BUG("tracking failed somehow; failed to find associated dst for broken pair");
+ if (dst->is_rename)
/* counterpart is now rename/copy */
pair_to_free = p;
}
@@ -701,16 +888,14 @@ void diffcore_rename(struct diff_options *options)
pair_to_free = p;
}
- if (pair_to_free)
- ;
- else
+ if (!pair_to_free)
diff_q(&outq, p);
}
else if (!diff_unmodified_pair(p))
/* all the usual ones need to be kept */
diff_q(&outq, p);
else
- /* no need to keep unmodified pairs */
+ /* no need to keep unmodified pairs; FIXME: remove earlier? */
pair_to_free = p;
if (pair_to_free)
@@ -723,11 +908,17 @@ void diffcore_rename(struct diff_options *options)
diff_debug_queue("done collapsing", q);
for (i = 0; i < rename_dst_nr; i++)
- free_filespec(rename_dst[i].two);
+ if (rename_dst[i].filespec_to_free)
+ free_filespec(rename_dst[i].filespec_to_free);
FREE_AND_NULL(rename_dst);
rename_dst_nr = rename_dst_alloc = 0;
FREE_AND_NULL(rename_src);
rename_src_nr = rename_src_alloc = 0;
+ if (break_idx) {
+ strintmap_clear(break_idx);
+ FREE_AND_NULL(break_idx);
+ }
+ trace2_region_leave("diff", "write back to queue", options->repo);
return;
}
diff --git a/diffcore-rotate.c b/diffcore-rotate.c
new file mode 100644
index 0000000..445f060
--- /dev/null
+++ b/diffcore-rotate.c
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2021, Google LLC.
+ * Based on diffcore-order.c, which is Copyright (C) 2005, Junio C Hamano
+ */
+#include "cache.h"
+#include "diff.h"
+#include "diffcore.h"
+
+void diffcore_rotate(struct diff_options *opt)
+{
+ struct diff_queue_struct *q = &diff_queued_diff;
+ struct diff_queue_struct outq;
+ int rotate_to, i;
+
+ if (!q->nr)
+ return;
+
+ for (i = 0; i < q->nr; i++) {
+ int cmp = strcmp(opt->rotate_to, q->queue[i]->two->path);
+ if (!cmp)
+ break; /* exact match */
+ if (!opt->rotate_to_strict && cmp < 0)
+ break; /* q->queue[i] is now past the target pathname */
+ }
+
+ if (q->nr <= i) {
+ /* we did not find the specified path */
+ if (opt->rotate_to_strict)
+ die(_("No such path '%s' in the diff"), opt->rotate_to);
+ return;
+ }
+
+ DIFF_QUEUE_CLEAR(&outq);
+ rotate_to = i;
+
+ for (i = rotate_to; i < q->nr; i++)
+ diff_q(&outq, q->queue[i]);
+ for (i = 0; i < rotate_to; i++) {
+ if (opt->skip_instead_of_rotate)
+ diff_free_filepair(q->queue[i]);
+ else
+ diff_q(&outq, q->queue[i]);
+ }
+ free(q->queue);
+ *q = outq;
+}
diff --git a/diffcore.h b/diffcore.h
index d2a63c5..c1592bc 100644
--- a/diffcore.h
+++ b/diffcore.h
@@ -164,6 +164,7 @@ void diffcore_rename(struct diff_options *);
void diffcore_merge_broken(void);
void diffcore_pickaxe(struct diff_options *);
void diffcore_order(const char *orderfile);
+void diffcore_rotate(struct diff_options *);
/* low-level interface to diffcore_order */
struct obj_order {
diff --git a/dir.c b/dir.c
index d637461..19c2fa2 100644
--- a/dir.c
+++ b/dir.c
@@ -1488,7 +1488,7 @@ static void prep_exclude(struct dir_struct *dir,
const char *cp;
struct oid_stat oid_stat;
- stk = xcalloc(1, sizeof(*stk));
+ CALLOC_ARRAY(stk, 1);
if (current < 0) {
cp = base;
current = 0;
@@ -2730,11 +2730,8 @@ static struct untracked_cache_dir *validate_untracked_cache(struct dir_struct *d
return NULL;
}
- if (!dir->untracked->root) {
- const int len = sizeof(*dir->untracked->root);
- dir->untracked->root = xmalloc(len);
- memset(dir->untracked->root, 0, len);
- }
+ if (!dir->untracked->root)
+ FLEX_ALLOC_STR(dir->untracked->root, name, "");
/* Validate $GIT_DIR/info/exclude and core.excludesfile */
root = dir->untracked->root;
@@ -2998,6 +2995,23 @@ void setup_standard_excludes(struct dir_struct *dir)
}
}
+char *get_sparse_checkout_filename(void)
+{
+ return git_pathdup("info/sparse-checkout");
+}
+
+int get_sparse_checkout_patterns(struct pattern_list *pl)
+{
+ int res;
+ char *sparse_filename = get_sparse_checkout_filename();
+
+ pl->use_cone_patterns = core_sparse_checkout_cone;
+ res = add_patterns_from_file_to_list(sparse_filename, "", 0, pl, NULL);
+
+ free(sparse_filename);
+ return res;
+}
+
int remove_path(const char *name)
{
char *slash;
@@ -3148,7 +3162,7 @@ void write_untracked_extension(struct strbuf *out, struct untracked_cache *untra
int varint_len;
const unsigned hashsz = the_hash_algo->rawsz;
- ouc = xcalloc(1, sizeof(*ouc));
+ CALLOC_ARRAY(ouc, 1);
stat_data_to_disk(&ouc->info_exclude_stat, &untracked->ss_info_exclude.stat);
stat_data_to_disk(&ouc->excludes_file_stat, &untracked->ss_excludes_file.stat);
ouc->dir_flags = htonl(untracked->dir_flags);
@@ -3359,7 +3373,7 @@ struct untracked_cache *read_untracked_extension(const void *data, unsigned long
if (next + exclude_per_dir_offset + 1 > end)
return NULL;
- uc = xcalloc(1, sizeof(*uc));
+ CALLOC_ARRAY(uc, 1);
strbuf_init(&uc->ident, ident_len);
strbuf_add(&uc->ident, ident, ident_len);
load_oid_stat(&uc->ss_info_exclude,
diff --git a/dir.h b/dir.h
index a3c40de..facfae4 100644
--- a/dir.h
+++ b/dir.h
@@ -448,6 +448,8 @@ int is_empty_dir(const char *dir);
void setup_standard_excludes(struct dir_struct *dir);
+char *get_sparse_checkout_filename(void);
+int get_sparse_checkout_patterns(struct pattern_list *pl);
/* Constants for remove_dir_recursively: */
diff --git a/entry.c b/entry.c
index a0532f1..7b9f437 100644
--- a/entry.c
+++ b/entry.c
@@ -282,7 +282,7 @@ static int write_entry(struct cache_entry *ce,
new_blob = read_blob_entry(ce, &size);
if (!new_blob)
return error("unable to read sha1 file of %s (%s)",
- path, oid_to_hex(&ce->oid));
+ ce->name, oid_to_hex(&ce->oid));
/*
* We can't make a real symlink; write out a regular file entry
@@ -309,7 +309,7 @@ static int write_entry(struct cache_entry *ce,
new_blob = read_blob_entry(ce, &size);
if (!new_blob)
return error("unable to read sha1 file of %s (%s)",
- path, oid_to_hex(&ce->oid));
+ ce->name, oid_to_hex(&ce->oid));
}
/*
@@ -354,7 +354,7 @@ static int write_entry(struct cache_entry *ce,
case S_IFGITLINK:
if (to_tempfile)
- return error("cannot create temporary submodule %s", path);
+ return error("cannot create temporary submodule %s", ce->name);
if (mkdir(path, 0777) < 0)
return error("cannot create submodule directory %s", path);
sub = submodule_from_ce(ce);
@@ -365,7 +365,7 @@ static int write_entry(struct cache_entry *ce,
break;
default:
- return error("unknown file mode for %s in index", path);
+ return error("unknown file mode for %s in index", ce->name);
}
finish:
diff --git a/environment.c b/environment.c
index bb518c6..2f27008 100644
--- a/environment.c
+++ b/environment.c
@@ -9,6 +9,7 @@
*/
#include "cache.h"
#include "branch.h"
+#include "environment.h"
#include "repository.h"
#include "config.h"
#include "refs.h"
@@ -116,6 +117,7 @@ const char * const local_repo_env[] = {
ALTERNATE_DB_ENVIRONMENT,
CONFIG_ENVIRONMENT,
CONFIG_DATA_ENVIRONMENT,
+ CONFIG_COUNT_ENVIRONMENT,
DB_ENVIRONMENT,
GIT_DIR_ENVIRONMENT,
GIT_WORK_TREE_ENVIRONMENT,
@@ -152,11 +154,7 @@ static char *expand_namespace(const char *raw_namespace)
return strbuf_detach(&buf, NULL);
}
-/*
- * Wrapper of getenv() that returns a strdup value. This value is kept
- * in argv to be freed later.
- */
-static const char *getenv_safe(struct strvec *argv, const char *name)
+const char *getenv_safe(struct strvec *argv, const char *name)
{
const char *value = getenv(name);
diff --git a/environment.h b/environment.h
new file mode 100644
index 0000000..d438b5c
--- /dev/null
+++ b/environment.h
@@ -0,0 +1,12 @@
+#ifndef ENVIRONMENT_H
+#define ENVIRONMENT_H
+
+#include "strvec.h"
+
+/*
+ * Wrapper of getenv() that returns a strdup value. This value is kept
+ * in argv to be freed later.
+ */
+const char *getenv_safe(struct strvec *argv, const char *name);
+
+#endif
diff --git a/ewah/bitmap.c b/ewah/bitmap.c
index d8cec58..38a47c4 100644
--- a/ewah/bitmap.c
+++ b/ewah/bitmap.c
@@ -25,7 +25,7 @@
struct bitmap *bitmap_word_alloc(size_t word_alloc)
{
struct bitmap *bitmap = xmalloc(sizeof(struct bitmap));
- bitmap->words = xcalloc(word_alloc, sizeof(eword_t));
+ CALLOC_ARRAY(bitmap->words, word_alloc);
bitmap->word_alloc = word_alloc;
return bitmap;
}
@@ -35,18 +35,26 @@ struct bitmap *bitmap_new(void)
return bitmap_word_alloc(32);
}
+struct bitmap *bitmap_dup(const struct bitmap *src)
+{
+ struct bitmap *dst = bitmap_word_alloc(src->word_alloc);
+ COPY_ARRAY(dst->words, src->words, src->word_alloc);
+ return dst;
+}
+
+static void bitmap_grow(struct bitmap *self, size_t word_alloc)
+{
+ size_t old_size = self->word_alloc;
+ ALLOC_GROW(self->words, word_alloc, self->word_alloc);
+ memset(self->words + old_size, 0x0,
+ (self->word_alloc - old_size) * sizeof(eword_t));
+}
+
void bitmap_set(struct bitmap *self, size_t pos)
{
size_t block = EWAH_BLOCK(pos);
- if (block >= self->word_alloc) {
- size_t old_size = self->word_alloc;
- self->word_alloc = block ? block * 2 : 1;
- REALLOC_ARRAY(self->words, self->word_alloc);
- memset(self->words + old_size, 0x0,
- (self->word_alloc - old_size) * sizeof(eword_t));
- }
-
+ bitmap_grow(self, block + 1);
self->words[block] |= EWAH_MASK(pos);
}
@@ -121,6 +129,15 @@ void bitmap_and_not(struct bitmap *self, struct bitmap *other)
self->words[i] &= ~other->words[i];
}
+void bitmap_or(struct bitmap *self, const struct bitmap *other)
+{
+ size_t i;
+
+ bitmap_grow(self, other->word_alloc);
+ for (i = 0; i < other->word_alloc; i++)
+ self->words[i] |= other->words[i];
+}
+
void bitmap_or_ewah(struct bitmap *self, struct ewah_bitmap *other)
{
size_t original_size = self->word_alloc;
@@ -178,6 +195,27 @@ int bitmap_equals(struct bitmap *self, struct bitmap *other)
return 1;
}
+int bitmap_is_subset(struct bitmap *self, struct bitmap *other)
+{
+ size_t common_size, i;
+
+ if (self->word_alloc < other->word_alloc)
+ common_size = self->word_alloc;
+ else {
+ common_size = other->word_alloc;
+ for (i = common_size; i < self->word_alloc; i++) {
+ if (self->words[i])
+ return 1;
+ }
+ }
+
+ for (i = 0; i < common_size; i++) {
+ if (self->words[i] & ~other->words[i])
+ return 1;
+ }
+ return 0;
+}
+
void bitmap_reset(struct bitmap *bitmap)
{
memset(bitmap->words, 0x0, bitmap->word_alloc * sizeof(eword_t));
diff --git a/ewah/ewah_bitmap.c b/ewah/ewah_bitmap.c
index d59b1af..2a8c7c5 100644
--- a/ewah/ewah_bitmap.c
+++ b/ewah/ewah_bitmap.c
@@ -19,6 +19,7 @@
#include "git-compat-util.h"
#include "ewok.h"
#include "ewok_rlw.h"
+#include "cache.h"
static inline size_t min_size(size_t a, size_t b)
{
@@ -33,20 +34,13 @@ static inline size_t max_size(size_t a, size_t b)
static inline void buffer_grow(struct ewah_bitmap *self, size_t new_size)
{
size_t rlw_offset = (uint8_t *)self->rlw - (uint8_t *)self->buffer;
-
- if (self->alloc_size >= new_size)
- return;
-
- self->alloc_size = new_size;
- REALLOC_ARRAY(self->buffer, self->alloc_size);
+ ALLOC_GROW(self->buffer, new_size, self->alloc_size);
self->rlw = self->buffer + (rlw_offset / sizeof(eword_t));
}
static inline void buffer_push(struct ewah_bitmap *self, eword_t value)
{
- if (self->buffer_size + 1 >= self->alloc_size)
- buffer_grow(self, self->buffer_size * 3 / 2);
-
+ buffer_grow(self, self->buffer_size + 1);
self->buffer[self->buffer_size++] = value;
}
@@ -137,8 +131,7 @@ void ewah_add_dirty_words(
rlw_set_literal_words(self->rlw, literals + can_add);
- if (self->buffer_size + can_add >= self->alloc_size)
- buffer_grow(self, (self->buffer_size + can_add) * 3 / 2);
+ buffer_grow(self, self->buffer_size + can_add);
if (negate) {
size_t i;
diff --git a/ewah/ewok.h b/ewah/ewok.h
index 011852b..6692096 100644
--- a/ewah/ewok.h
+++ b/ewah/ewok.h
@@ -173,13 +173,14 @@ struct bitmap {
struct bitmap *bitmap_new(void);
struct bitmap *bitmap_word_alloc(size_t word_alloc);
+struct bitmap *bitmap_dup(const struct bitmap *src);
void bitmap_set(struct bitmap *self, size_t pos);
void bitmap_unset(struct bitmap *self, size_t pos);
int bitmap_get(struct bitmap *self, size_t pos);
void bitmap_reset(struct bitmap *self);
void bitmap_free(struct bitmap *self);
int bitmap_equals(struct bitmap *self, struct bitmap *other);
-int bitmap_is_subset(struct bitmap *self, struct bitmap *super);
+int bitmap_is_subset(struct bitmap *self, struct bitmap *other);
struct ewah_bitmap * bitmap_to_ewah(struct bitmap *bitmap);
struct bitmap *ewah_to_bitmap(struct ewah_bitmap *ewah);
diff --git a/fetch-pack.c b/fetch-pack.c
index 876f90c..fb04a76 100644
--- a/fetch-pack.c
+++ b/fetch-pack.c
@@ -772,13 +772,11 @@ static int sideband_demux(int in, int out, void *data)
return ret;
}
-static void write_promisor_file(const char *keep_name,
- struct ref **sought, int nr_sought)
+static void create_promisor_file(const char *keep_name,
+ struct ref **sought, int nr_sought)
{
struct strbuf promisor_name = STRBUF_INIT;
int suffix_stripped;
- FILE *output;
- int i;
strbuf_addstr(&promisor_name, keep_name);
suffix_stripped = strbuf_strip_suffix(&promisor_name, ".keep");
@@ -787,23 +785,41 @@ static void write_promisor_file(const char *keep_name,
keep_name);
strbuf_addstr(&promisor_name, ".promisor");
- output = xfopen(promisor_name.buf, "w");
- for (i = 0; i < nr_sought; i++)
- fprintf(output, "%s %s\n", oid_to_hex(&sought[i]->old_oid),
- sought[i]->name);
- fclose(output);
+ write_promisor_file(promisor_name.buf, sought, nr_sought);
strbuf_release(&promisor_name);
}
+static void parse_gitmodules_oids(int fd, struct oidset *gitmodules_oids)
+{
+ int len = the_hash_algo->hexsz + 1; /* hash + NL */
+
+ do {
+ char hex_hash[GIT_MAX_HEXSZ + 1];
+ int read_len = read_in_full(fd, hex_hash, len);
+ struct object_id oid;
+ const char *end;
+
+ if (!read_len)
+ return;
+ if (read_len != len)
+ die("invalid length read %d", read_len);
+ if (parse_oid_hex(hex_hash, &oid, &end) || *end != '\n')
+ die("invalid hash");
+ oidset_insert(gitmodules_oids, &oid);
+ } while (1);
+}
+
/*
- * Pass 1 as "only_packfile" if the pack received is the only pack in this
- * fetch request (that is, if there were no packfile URIs provided).
+ * If packfile URIs were provided, pass a non-NULL pointer to index_pack_args.
+ * The strings to pass as the --index-pack-arg arguments to http-fetch will be
+ * stored there. (It must be freed by the caller.)
*/
static int get_pack(struct fetch_pack_args *args,
int xd[2], struct string_list *pack_lockfiles,
- int only_packfile,
- struct ref **sought, int nr_sought)
+ struct strvec *index_pack_args,
+ struct ref **sought, int nr_sought,
+ struct oidset *gitmodules_oids)
{
struct async demux;
int do_keep = args->keep_pack;
@@ -811,6 +827,7 @@ static int get_pack(struct fetch_pack_args *args,
struct pack_header header;
int pass_header = 0;
struct child_process cmd = CHILD_PROCESS_INIT;
+ int fsck_objects = 0;
int ret;
memset(&demux, 0, sizeof(demux));
@@ -829,7 +846,7 @@ static int get_pack(struct fetch_pack_args *args,
else
demux.out = xd[0];
- if (!args->keep_pack && unpack_limit) {
+ if (!args->keep_pack && unpack_limit && !index_pack_args) {
if (read_pack_header(demux.out, &header))
die(_("protocol error: bad pack header"));
@@ -845,8 +862,15 @@ static int get_pack(struct fetch_pack_args *args,
strvec_push(&cmd.args, alternate_shallow_file);
}
- if (do_keep || args->from_promisor) {
- if (pack_lockfiles)
+ if (fetch_fsck_objects >= 0
+ ? fetch_fsck_objects
+ : transfer_fsck_objects >= 0
+ ? transfer_fsck_objects
+ : 0)
+ fsck_objects = 1;
+
+ if (do_keep || args->from_promisor || index_pack_args || fsck_objects) {
+ if (pack_lockfiles || fsck_objects)
cmd.out = -1;
cmd_name = "index-pack";
strvec_push(&cmd.args, cmd_name);
@@ -855,7 +879,7 @@ static int get_pack(struct fetch_pack_args *args,
strvec_push(&cmd.args, "-v");
if (args->use_thin_pack)
strvec_push(&cmd.args, "--fix-thin");
- if (do_keep && (args->lock_pack || unpack_limit)) {
+ if ((do_keep || index_pack_args) && (args->lock_pack || unpack_limit)) {
char hostname[HOST_NAME_MAX + 1];
if (xgethostname(hostname, sizeof(hostname)))
xsnprintf(hostname, sizeof(hostname), "localhost");
@@ -863,7 +887,7 @@ static int get_pack(struct fetch_pack_args *args,
"--keep=fetch-pack %"PRIuMAX " on %s",
(uintmax_t)getpid(), hostname);
}
- if (only_packfile && args->check_self_contained_and_connected)
+ if (!index_pack_args && args->check_self_contained_and_connected)
strvec_push(&cmd.args, "--check-self-contained-and-connected");
else
/*
@@ -875,7 +899,7 @@ static int get_pack(struct fetch_pack_args *args,
if (args->from_promisor)
/*
- * write_promisor_file() may be called afterwards but
+ * create_promisor_file() may be called afterwards but
* we still need index-pack to know that this is a
* promisor pack. For example, if transfer.fsckobjects
* is true, index-pack needs to know that .gitmodules
@@ -896,12 +920,8 @@ static int get_pack(struct fetch_pack_args *args,
strvec_pushf(&cmd.args, "--pack_header=%"PRIu32",%"PRIu32,
ntohl(header.hdr_version),
ntohl(header.hdr_entries));
- if (fetch_fsck_objects >= 0
- ? fetch_fsck_objects
- : transfer_fsck_objects >= 0
- ? transfer_fsck_objects
- : 0) {
- if (args->from_promisor || !only_packfile)
+ if (fsck_objects) {
+ if (args->from_promisor || index_pack_args)
/*
* We cannot use --strict in index-pack because it
* checks both broken objects and links, but we only
@@ -913,14 +933,26 @@ static int get_pack(struct fetch_pack_args *args,
fsck_msg_types.buf);
}
+ if (index_pack_args) {
+ int i;
+
+ for (i = 0; i < cmd.args.nr; i++)
+ strvec_push(index_pack_args, cmd.args.v[i]);
+ }
+
cmd.in = demux.out;
cmd.git_cmd = 1;
if (start_command(&cmd))
die(_("fetch-pack: unable to fork off %s"), cmd_name);
- if (do_keep && pack_lockfiles) {
- char *pack_lockfile = index_pack_lockfile(cmd.out);
+ if (do_keep && (pack_lockfiles || fsck_objects)) {
+ int is_well_formed;
+ char *pack_lockfile = index_pack_lockfile(cmd.out, &is_well_formed);
+
+ if (!is_well_formed)
+ die(_("fetch-pack: invalid index-pack output"));
if (pack_lockfile)
string_list_append_nodup(pack_lockfiles, pack_lockfile);
+ parse_gitmodules_oids(cmd.out, gitmodules_oids);
close(cmd.out);
}
@@ -943,7 +975,7 @@ static int get_pack(struct fetch_pack_args *args,
* obtained .keep filename if necessary
*/
if (do_keep && pack_lockfiles && pack_lockfiles->nr && args->from_promisor)
- write_promisor_file(pack_lockfiles->items[0].string, sought, nr_sought);
+ create_promisor_file(pack_lockfiles->items[0].string, sought, nr_sought);
return 0;
}
@@ -955,6 +987,22 @@ static int cmp_ref_by_name(const void *a_, const void *b_)
return strcmp(a->name, b->name);
}
+static void fsck_gitmodules_oids(struct oidset *gitmodules_oids)
+{
+ struct oidset_iter iter;
+ const struct object_id *oid;
+ struct fsck_options fo = FSCK_OPTIONS_STRICT;
+
+ if (!oidset_size(gitmodules_oids))
+ return;
+
+ oidset_iter_init(gitmodules_oids, &iter);
+ while ((oid = oidset_iter_next(&iter)))
+ register_found_gitmodules(oid);
+ if (fsck_finish(&fo))
+ die("fsck failed");
+}
+
static struct ref *do_fetch_pack(struct fetch_pack_args *args,
int fd[2],
const struct ref *orig_ref,
@@ -969,6 +1017,7 @@ static struct ref *do_fetch_pack(struct fetch_pack_args *args,
int agent_len;
struct fetch_negotiator negotiator_alloc;
struct fetch_negotiator *negotiator;
+ struct oidset gitmodules_oids = OIDSET_INIT;
negotiator = &negotiator_alloc;
fetch_negotiator_init(r, negotiator);
@@ -1084,8 +1133,10 @@ static struct ref *do_fetch_pack(struct fetch_pack_args *args,
alternate_shallow_file = setup_temporary_shallow(si->shallow);
else
alternate_shallow_file = NULL;
- if (get_pack(args, fd, pack_lockfiles, 1, sought, nr_sought))
+ if (get_pack(args, fd, pack_lockfiles, NULL, sought, nr_sought,
+ &gitmodules_oids))
die(_("git fetch-pack: fetch failed."));
+ fsck_gitmodules_oids(&gitmodules_oids);
all_done:
if (negotiator)
@@ -1535,6 +1586,8 @@ static struct ref *do_fetch_pack_v2(struct fetch_pack_args *args,
int seen_ack = 0;
struct string_list packfile_uris = STRING_LIST_INIT_DUP;
int i;
+ struct strvec index_pack_args = STRVEC_INIT;
+ struct oidset gitmodules_oids = OIDSET_INIT;
negotiator = &negotiator_alloc;
fetch_negotiator_init(r, negotiator);
@@ -1624,7 +1677,8 @@ static struct ref *do_fetch_pack_v2(struct fetch_pack_args *args,
receive_packfile_uris(&reader, &packfile_uris);
process_section_header(&reader, "packfile", 0);
if (get_pack(args, fd, pack_lockfiles,
- !packfile_uris.nr, sought, nr_sought))
+ packfile_uris.nr ? &index_pack_args : NULL,
+ sought, nr_sought, &gitmodules_oids))
die(_("git fetch-pack: fetch failed."));
do_check_stateless_delimiter(args, &reader);
@@ -1636,6 +1690,7 @@ static struct ref *do_fetch_pack_v2(struct fetch_pack_args *args,
}
for (i = 0; i < packfile_uris.nr; i++) {
+ int j;
struct child_process cmd = CHILD_PROCESS_INIT;
char packname[GIT_MAX_HEXSZ + 1];
const char *uri = packfile_uris.items[i].string +
@@ -1645,6 +1700,9 @@ static struct ref *do_fetch_pack_v2(struct fetch_pack_args *args,
strvec_pushf(&cmd.args, "--packfile=%.*s",
(int) the_hash_algo->hexsz,
packfile_uris.items[i].string);
+ for (j = 0; j < index_pack_args.nr; j++)
+ strvec_pushf(&cmd.args, "--index-pack-arg=%s",
+ index_pack_args.v[j]);
strvec_push(&cmd.args, uri);
cmd.git_cmd = 1;
cmd.no_stdin = 1;
@@ -1663,6 +1721,8 @@ static struct ref *do_fetch_pack_v2(struct fetch_pack_args *args,
packname[the_hash_algo->hexsz] = '\0';
+ parse_gitmodules_oids(cmd.out, &gitmodules_oids);
+
close(cmd.out);
if (finish_command(&cmd))
@@ -1680,6 +1740,9 @@ static struct ref *do_fetch_pack_v2(struct fetch_pack_args *args,
packname));
}
string_list_clear(&packfile_uris, 0);
+ strvec_clear(&index_pack_args);
+
+ fsck_gitmodules_oids(&gitmodules_oids);
if (negotiator)
negotiator->release(negotiator);
@@ -1853,7 +1916,7 @@ static void update_shallow(struct fetch_pack_args *args,
* remote is also shallow, check what ref is safe to update
* without updating .git/shallow
*/
- status = xcalloc(nr_sought, sizeof(*status));
+ CALLOC_ARRAY(status, nr_sought);
assign_shallow_commits_to_refs(si, NULL, status);
if (si->nr_ours || si->nr_theirs) {
for (i = 0; i < nr_sought; i++)
diff --git a/fmt-merge-msg.c b/fmt-merge-msg.c
index 9a664a4..0f66818 100644
--- a/fmt-merge-msg.c
+++ b/fmt-merge-msg.c
@@ -2,6 +2,7 @@
#include "refs.h"
#include "object-store.h"
#include "diff.h"
+#include "diff-merges.h"
#include "revision.h"
#include "tag.h"
#include "string-list.h"
@@ -129,7 +130,7 @@ static int handle_line(char *line, struct merge_parents *merge_parents)
if (!find_merge_parent(merge_parents, &oid, NULL))
return 0; /* subsumed by other parents */
- origin_data = xcalloc(1, sizeof(struct origin_data));
+ CALLOC_ARRAY(origin_data, 1);
oidcpy(&origin_data->oid, &oid);
if (line[len - 1] == '\n')
@@ -509,22 +510,28 @@ static void fmt_merge_msg_sigs(struct strbuf *out)
for (i = 0; i < origins.nr; i++) {
struct object_id *oid = origins.items[i].util;
enum object_type type;
- unsigned long size, len;
+ unsigned long size;
char *buf = read_object_file(oid, &type, &size);
+ char *origbuf = buf;
+ unsigned long len = size;
struct signature_check sigc = { NULL };
- struct strbuf sig = STRBUF_INIT;
+ struct strbuf payload = STRBUF_INIT, sig = STRBUF_INIT;
if (!buf || type != OBJ_TAG)
goto next;
- len = parse_signature(buf, size);
- if (size == len)
- ; /* merely annotated */
- else if (check_signature(buf, len, buf + len, size - len, &sigc) &&
- !sigc.gpg_output)
- strbuf_addstr(&sig, "gpg verification failed.\n");
- else
- strbuf_addstr(&sig, sigc.gpg_output);
+ if (!parse_signature(buf, size, &payload, &sig))
+ ;/* merely annotated */
+ else {
+ buf = payload.buf;
+ len = payload.len;
+ if (check_signature(payload.buf, payload.len, sig.buf,
+ sig.len, &sigc) &&
+ !sigc.gpg_output)
+ strbuf_addstr(&sig, "gpg verification failed.\n");
+ else
+ strbuf_addstr(&sig, sigc.gpg_output);
+ }
signature_check_clear(&sigc);
if (!tag_number++) {
@@ -547,9 +554,10 @@ static void fmt_merge_msg_sigs(struct strbuf *out)
strlen(origins.items[i].string));
fmt_tag_signature(&tagbuf, &sig, buf, len);
}
+ strbuf_release(&payload);
strbuf_release(&sig);
next:
- free(buf);
+ free(origbuf);
}
if (tagbuf.len) {
strbuf_addch(out, '\n');
@@ -670,7 +678,7 @@ int fmt_merge_msg(struct strbuf *in, struct strbuf *out,
head = lookup_commit_or_die(&head_oid, "HEAD");
repo_init_revisions(the_repository, &rev, NULL);
rev.commit_format = CMIT_FMT_ONELINE;
- rev.ignore_merges = 1;
+ diff_merges_suppress(&rev);
rev.limited = 1;
strbuf_complete_line(out);
diff --git a/fsck.c b/fsck.c
index 5e282b3..e3030f3 100644
--- a/fsck.c
+++ b/fsck.c
@@ -80,7 +80,9 @@ static struct oidset gitmodules_done = OIDSET_INIT;
/* infos (reported as warnings, but ignored by default) */ \
FUNC(GITMODULES_PARSE, INFO) \
FUNC(BAD_TAG_NAME, INFO) \
- FUNC(MISSING_TAGGER_ENTRY, INFO)
+ FUNC(MISSING_TAGGER_ENTRY, INFO) \
+ /* ignored (elevated when requested) */ \
+ FUNC(EXTRA_HEADER_ENTRY, IGNORE)
#define MSG_ID(id, msg_type) FSCK_MSG_##id,
enum fsck_msg_id {
@@ -461,6 +463,11 @@ static int fsck_walk_commit(struct commit *commit, void *data, struct fsck_optio
generation += power * (name[--len] - '0');
if (power > 1 && len && name[len - 1] == '~')
name_prefix_len = len - 1;
+ else {
+ /* Maybe a non-first parent, e.g. HEAD^2 */
+ generation = 0;
+ name_prefix_len = len;
+ }
}
}
@@ -911,6 +918,16 @@ static int fsck_tag(const struct object_id *oid, const char *buffer,
unsigned long size, struct fsck_options *options)
{
struct object_id tagged_oid;
+ int tagged_type;
+ return fsck_tag_standalone(oid, buffer, size, options, &tagged_oid,
+ &tagged_type);
+}
+
+int fsck_tag_standalone(const struct object_id *oid, const char *buffer,
+ unsigned long size, struct fsck_options *options,
+ struct object_id *tagged_oid,
+ int *tagged_type)
+{
int ret = 0;
char *eol;
struct strbuf sb = STRBUF_INIT;
@@ -924,7 +941,7 @@ static int fsck_tag(const struct object_id *oid, const char *buffer,
ret = report(options, oid, OBJ_TAG, FSCK_MSG_MISSING_OBJECT, "invalid format - expected 'object' line");
goto done;
}
- if (parse_oid_hex(buffer, &tagged_oid, &p) || *p != '\n') {
+ if (parse_oid_hex(buffer, tagged_oid, &p) || *p != '\n') {
ret = report(options, oid, OBJ_TAG, FSCK_MSG_BAD_OBJECT_SHA1, "invalid 'object' line format - bad sha1");
if (ret)
goto done;
@@ -940,7 +957,8 @@ static int fsck_tag(const struct object_id *oid, const char *buffer,
ret = report(options, oid, OBJ_TAG, FSCK_MSG_MISSING_TYPE, "invalid format - unexpected end after 'type' line");
goto done;
}
- if (type_from_string_gently(buffer, eol - buffer, 1) < 0)
+ *tagged_type = type_from_string_gently(buffer, eol - buffer, 1);
+ if (*tagged_type < 0)
ret = report(options, oid, OBJ_TAG, FSCK_MSG_BAD_TYPE, "invalid 'type' value");
if (ret)
goto done;
@@ -974,6 +992,21 @@ static int fsck_tag(const struct object_id *oid, const char *buffer,
}
else
ret = fsck_ident(&buffer, oid, OBJ_TAG, options);
+ if (!*buffer)
+ goto done;
+
+ if (!starts_with(buffer, "\n")) {
+ /*
+ * The verify_headers() check will allow
+ * e.g. "[...]tagger <tagger>\nsome
+ * garbage\n\nmessage" to pass, thinking "some
+ * garbage" could be a custom header. E.g. "mktag"
+ * doesn't want any unknown headers.
+ */
+ ret = report(options, oid, OBJ_TAG, FSCK_MSG_EXTRA_HEADER_ENTRY, "invalid format - extra header(s) after 'tagger'");
+ if (ret)
+ goto done;
+ }
done:
strbuf_release(&sb);
@@ -1243,6 +1276,11 @@ int fsck_error_function(struct fsck_options *o,
return 1;
}
+void register_found_gitmodules(const struct object_id *oid)
+{
+ oidset_insert(&gitmodules_found, oid);
+}
+
int fsck_finish(struct fsck_options *options)
{
int ret = 0;
@@ -1284,3 +1322,27 @@ int fsck_finish(struct fsck_options *options)
oidset_clear(&gitmodules_done);
return ret;
}
+
+int fsck_config_internal(const char *var, const char *value, void *cb,
+ struct fsck_options *options)
+{
+ if (strcmp(var, "fsck.skiplist") == 0) {
+ const char *path;
+ struct strbuf sb = STRBUF_INIT;
+
+ if (git_config_pathname(&path, var, value))
+ return 1;
+ strbuf_addf(&sb, "skiplist=%s", path);
+ free((char *)path);
+ fsck_set_msg_types(options, sb.buf);
+ strbuf_release(&sb);
+ return 0;
+ }
+
+ if (skip_prefix(var, "fsck.", &var)) {
+ fsck_set_msg_type(options, var, value);
+ return 0;
+ }
+
+ return git_default_config(var, value, cb);
+}
diff --git a/fsck.h b/fsck.h
index 69cf715..733378f 100644
--- a/fsck.h
+++ b/fsck.h
@@ -62,6 +62,17 @@ int fsck_walk(struct object *obj, void *data, struct fsck_options *options);
int fsck_object(struct object *obj, void *data, unsigned long size,
struct fsck_options *options);
+void register_found_gitmodules(const struct object_id *oid);
+
+/*
+ * fsck a tag, and pass info about it back to the caller. This is
+ * exposed fsck_object() internals for git-mktag(1).
+ */
+int fsck_tag_standalone(const struct object_id *oid, const char *buffer,
+ unsigned long size, struct fsck_options *options,
+ struct object_id *tagged_oid,
+ int *tag_type);
+
/*
* Some fsck checks are context-dependent, and may end up queued; run this
* after completing all fsck_object() calls in order to resolve any remaining
@@ -94,4 +105,11 @@ void fsck_put_object_name(struct fsck_options *options,
const char *fsck_describe_object(struct fsck_options *options,
const struct object_id *oid);
+/*
+ * git_config() callback for use by fsck-y tools that want to support
+ * fsck.<msg> fsck.skipList etc.
+ */
+int fsck_config_internal(const char *var, const char *value, void *cb,
+ struct fsck_options *options);
+
#endif
diff --git a/fsmonitor.c b/fsmonitor.c
index ca031c3..ab9bfc6 100644
--- a/fsmonitor.c
+++ b/fsmonitor.c
@@ -13,14 +13,19 @@
struct trace_key trace_fsmonitor = TRACE_KEY_INIT(FSMONITOR);
+static void assert_index_minimum(struct index_state *istate, size_t pos)
+{
+ if (pos > istate->cache_nr)
+ BUG("fsmonitor_dirty has more entries than the index (%"PRIuMAX" > %u)",
+ (uintmax_t)pos, istate->cache_nr);
+}
+
static void fsmonitor_ewah_callback(size_t pos, void *is)
{
struct index_state *istate = (struct index_state *)is;
struct cache_entry *ce;
- if (pos >= istate->cache_nr)
- BUG("fsmonitor_dirty has more entries than the index (%"PRIuMAX" >= %u)",
- (uintmax_t)pos, istate->cache_nr);
+ assert_index_minimum(istate, pos + 1);
ce = istate->cache[pos];
ce->ce_flags &= ~CE_FSMONITOR_VALID;
@@ -82,12 +87,14 @@ int read_fsmonitor_extension(struct index_state *istate, const void *data,
}
istate->fsmonitor_dirty = fsmonitor_dirty;
- if (!istate->split_index &&
- istate->fsmonitor_dirty->bit_size > istate->cache_nr)
- BUG("fsmonitor_dirty has more entries than the index (%"PRIuMAX" > %u)",
- (uintmax_t)istate->fsmonitor_dirty->bit_size, istate->cache_nr);
+ if (!istate->split_index)
+ assert_index_minimum(istate, istate->fsmonitor_dirty->bit_size);
- trace_printf_key(&trace_fsmonitor, "read fsmonitor extension successful");
+ trace2_data_string("index", NULL, "extension/fsmn/read/token",
+ istate->fsmonitor_last_update);
+ trace_printf_key(&trace_fsmonitor,
+ "read fsmonitor extension successful '%s'",
+ istate->fsmonitor_last_update);
return 0;
}
@@ -110,10 +117,8 @@ void write_fsmonitor_extension(struct strbuf *sb, struct index_state *istate)
uint32_t ewah_size = 0;
int fixup = 0;
- if (!istate->split_index &&
- istate->fsmonitor_dirty->bit_size > istate->cache_nr)
- BUG("fsmonitor_dirty has more entries than the index (%"PRIuMAX" > %u)",
- (uintmax_t)istate->fsmonitor_dirty->bit_size, istate->cache_nr);
+ if (!istate->split_index)
+ assert_index_minimum(istate, istate->fsmonitor_dirty->bit_size);
put_be32(&hdr_version, INDEX_EXTENSION_VERSION2);
strbuf_add(sb, &hdr_version, sizeof(uint32_t));
@@ -133,7 +138,11 @@ void write_fsmonitor_extension(struct strbuf *sb, struct index_state *istate)
put_be32(&ewah_size, sb->len - ewah_start);
memcpy(sb->buf + fixup, &ewah_size, sizeof(uint32_t));
- trace_printf_key(&trace_fsmonitor, "write fsmonitor extension successful");
+ trace2_data_string("index", NULL, "extension/fsmn/write/token",
+ istate->fsmonitor_last_update);
+ trace_printf_key(&trace_fsmonitor,
+ "write fsmonitor extension successful '%s'",
+ istate->fsmonitor_last_update);
}
/*
@@ -142,6 +151,7 @@ void write_fsmonitor_extension(struct strbuf *sb, struct index_state *istate)
static int query_fsmonitor(int version, const char *last_update, struct strbuf *query_result)
{
struct child_process cp = CHILD_PROCESS_INIT;
+ int result;
if (!core_fsmonitor)
return -1;
@@ -152,16 +162,63 @@ static int query_fsmonitor(int version, const char *last_update, struct strbuf *
cp.use_shell = 1;
cp.dir = get_git_work_tree();
- return capture_command(&cp, query_result, 1024);
+ trace2_region_enter("fsm_hook", "query", NULL);
+
+ result = capture_command(&cp, query_result, 1024);
+
+ if (result)
+ trace2_data_intmax("fsm_hook", NULL, "query/failed", result);
+ else {
+ trace2_data_intmax("fsm_hook", NULL, "query/response-length",
+ query_result->len);
+
+ if (fsmonitor_is_trivial_response(query_result))
+ trace2_data_intmax("fsm_hook", NULL,
+ "query/trivial-response", 1);
+ }
+
+ trace2_region_leave("fsm_hook", "query", NULL);
+
+ return result;
}
-static void fsmonitor_refresh_callback(struct index_state *istate, const char *name)
+int fsmonitor_is_trivial_response(const struct strbuf *query_result)
{
- int pos = index_name_pos(istate, name, strlen(name));
+ static char trivial_response[3] = { '\0', '/', '\0' };
- if (pos >= 0) {
- struct cache_entry *ce = istate->cache[pos];
- ce->ce_flags &= ~CE_FSMONITOR_VALID;
+ return query_result->len >= 3 &&
+ !memcmp(trivial_response,
+ &query_result->buf[query_result->len - 3], 3);
+}
+
+static void fsmonitor_refresh_callback(struct index_state *istate, char *name)
+{
+ int i, len = strlen(name);
+ if (name[len - 1] == '/') {
+
+ /*
+ * TODO We should binary search to find the first path with
+ * TODO this directory prefix. Then linearly update entries
+ * TODO while the prefix matches. Taking care to search without
+ * TODO the trailing slash -- because '/' sorts after a few
+ * TODO interesting special chars, like '.' and ' '.
+ */
+
+ /* Mark all entries for the folder invalid */
+ for (i = 0; i < istate->cache_nr; i++) {
+ if (istate->cache[i]->ce_flags & CE_FSMONITOR_VALID &&
+ starts_with(istate->cache[i]->name, name))
+ istate->cache[i]->ce_flags &= ~CE_FSMONITOR_VALID;
+ }
+ /* Need to remove the / from the path for the untracked cache */
+ name[len - 1] = '\0';
+ } else {
+ int pos = index_name_pos(istate, name, strlen(name));
+
+ if (pos >= 0) {
+ struct cache_entry *ce = istate->cache[pos];
+ ce->ce_flags &= ~CE_FSMONITOR_VALID;
+ }
}
/*
@@ -287,16 +344,45 @@ void refresh_fsmonitor(struct index_state *istate)
istate->fsmonitor_last_update = strbuf_detach(&last_update_token, NULL);
}
+/*
+ * The caller wants to turn on FSMonitor. And when the caller writes
+ * the index to disk, a FSMonitor extension should be included. This
+ * requires that `istate->fsmonitor_last_update` not be NULL. But we
+ * have not actually talked to a FSMonitor process yet, so we don't
+ * have an initial value for this field.
+ *
+ * For a protocol V1 FSMonitor process, this field is a formatted
+ * "nanoseconds since epoch" field. However, for a protocol V2
+ * FSMonitor process, this field is an opaque token.
+ *
+ * Historically, `add_fsmonitor()` has initialized this field to the
+ * current time for protocol V1 processes. There are lots of race
+ * conditions here, but that code has shipped...
+ *
+ * The only true solution is to use a V2 FSMonitor and get a current
+ * or default token value (that it understands), but we cannot do that
+ * until we have actually talked to an instance of the FSMonitor process
+ * (but the protocol requires that we send a token first...).
+ *
+ * For simplicity, just initialize like we have a V1 process and require
+ * that V2 processes adapt.
+ */
+static void initialize_fsmonitor_last_update(struct index_state *istate)
+{
+ struct strbuf last_update = STRBUF_INIT;
+
+ strbuf_addf(&last_update, "%"PRIu64"", getnanotime());
+ istate->fsmonitor_last_update = strbuf_detach(&last_update, NULL);
+}
+
void add_fsmonitor(struct index_state *istate)
{
unsigned int i;
- struct strbuf last_update = STRBUF_INIT;
if (!istate->fsmonitor_last_update) {
trace_printf_key(&trace_fsmonitor, "add fsmonitor");
istate->cache_changed |= FSMONITOR_CHANGED;
- strbuf_addf(&last_update, "%"PRIu64"", getnanotime());
- istate->fsmonitor_last_update = strbuf_detach(&last_update, NULL);
+ initialize_fsmonitor_last_update(istate);
/* reset the fsmonitor state */
for (i = 0; i < istate->cache_nr; i++)
@@ -335,9 +421,7 @@ void tweak_fsmonitor(struct index_state *istate)
}
/* Mark all previously saved entries as dirty */
- if (istate->fsmonitor_dirty->bit_size > istate->cache_nr)
- BUG("fsmonitor_dirty has more entries than the index (%"PRIuMAX" > %u)",
- (uintmax_t)istate->fsmonitor_dirty->bit_size, istate->cache_nr);
+ assert_index_minimum(istate, istate->fsmonitor_dirty->bit_size);
ewah_each_bit(istate->fsmonitor_dirty, fsmonitor_ewah_callback, istate);
refresh_fsmonitor(istate);
diff --git a/fsmonitor.h b/fsmonitor.h
index 739318a..7f1794b 100644
--- a/fsmonitor.h
+++ b/fsmonitor.h
@@ -45,6 +45,11 @@ void tweak_fsmonitor(struct index_state *istate);
void refresh_fsmonitor(struct index_state *istate);
/*
+ * Does the received result contain the "trivial" response?
+ */
+int fsmonitor_is_trivial_response(const struct strbuf *query_result);
+
+/*
* Set the given cache entries CE_FSMONITOR_VALID bit. This should be
* called any time the cache entry has been updated to reflect the
* current state of the file on disk.
diff --git a/gettext.c b/gettext.c
index 1b56421..af2413b 100644
--- a/gettext.c
+++ b/gettext.c
@@ -65,14 +65,6 @@ const char *get_preferred_languages(void)
return NULL;
}
-int use_gettext_poison(void)
-{
- static int poison_requested = -1;
- if (poison_requested == -1)
- poison_requested = git_env_bool("GIT_TEST_GETTEXT_POISON", 0);
- return poison_requested;
-}
-
#ifndef NO_GETTEXT
static int test_vsnprintf(const char *fmt, ...)
{
@@ -117,8 +109,6 @@ void git_setup_gettext(void)
if (!podir)
podir = p = system_path(GIT_LOCALE_PATH);
- use_gettext_poison(); /* getenv() reentrancy paranoia */
-
if (!is_directory(podir)) {
free(p);
return;
diff --git a/gettext.h b/gettext.h
index bee52eb..c8b34fd 100644
--- a/gettext.h
+++ b/gettext.h
@@ -28,15 +28,12 @@
#define FORMAT_PRESERVING(n) __attribute__((format_arg(n)))
-int use_gettext_poison(void);
-
#ifndef NO_GETTEXT
void git_setup_gettext(void);
int gettext_width(const char *s);
#else
static inline void git_setup_gettext(void)
{
- use_gettext_poison(); /* getenv() reentrancy paranoia */
}
static inline int gettext_width(const char *s)
{
@@ -48,14 +45,12 @@ static inline FORMAT_PRESERVING(1) const char *_(const char *msgid)
{
if (!*msgid)
return "";
- return use_gettext_poison() ? "# GETTEXT POISON #" : gettext(msgid);
+ return gettext(msgid);
}
static inline FORMAT_PRESERVING(1) FORMAT_PRESERVING(2)
const char *Q_(const char *msgid, const char *plu, unsigned long n)
{
- if (use_gettext_poison())
- return "# GETTEXT POISON #";
return ngettext(msgid, plu, n);
}
diff --git a/git-bisect.sh b/git-bisect.sh
index 1f3f6e9..6a7afae 100755
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -39,21 +39,6 @@
TERM_BAD=bad
TERM_GOOD=good
-bisect_skip() {
- all=''
- for arg in "$@"
- do
- case "$arg" in
- *..*)
- revs=$(git rev-list "$arg") || die "$(eval_gettext "Bad rev input: \$arg")" ;;
- *)
- revs=$(git rev-parse --sq-quote "$arg") ;;
- esac
- all="$all $revs"
- done
- eval git bisect--helper --bisect-state 'skip' $all
-}
-
bisect_visualize() {
git bisect--helper --bisect-next-check $TERM_GOOD $TERM_BAD fail || exit
@@ -77,38 +62,6 @@
eval '"$@"' --bisect -- $(cat "$GIT_DIR/BISECT_NAMES")
}
-bisect_replay () {
- file="$1"
- test "$#" -eq 1 || die "$(gettext "No logfile given")"
- test -r "$file" || die "$(eval_gettext "cannot read \$file for replaying")"
- git bisect--helper --bisect-reset || exit
- oIFS="$IFS" IFS="$IFS$(printf '\015')"
- while read git bisect command rev tail
- do
- test "$git $bisect" = "git bisect" || test "$git" = "git-bisect" || continue
- if test "$git" = "git-bisect"
- then
- rev="$command"
- command="$bisect"
- fi
- get_terms
- git bisect--helper --check-and-set-terms "$command" "$TERM_GOOD" "$TERM_BAD" || exit
- get_terms
- case "$command" in
- start)
- eval "git bisect--helper --bisect-start $rev $tail" ;;
- "$TERM_GOOD"|"$TERM_BAD"|skip)
- git bisect--helper --bisect-write "$command" "$rev" "$TERM_GOOD" "$TERM_BAD" || exit;;
- terms)
- git bisect--helper --bisect-terms $rev || exit;;
- *)
- die "$(gettext "?? what are you talking about?")" ;;
- esac
- done <"$file"
- IFS="$oIFS"
- git bisect--helper --bisect-auto-next || exit
-}
-
bisect_run () {
git bisect--helper --bisect-next-check $TERM_GOOD $TERM_BAD fail || exit
@@ -169,11 +122,6 @@
done
}
-bisect_log () {
- test -s "$GIT_DIR/BISECT_LOG" || die "$(gettext "We are not bisecting.")"
- cat "$GIT_DIR/BISECT_LOG"
-}
-
get_terms () {
if test -s "$GIT_DIR/BISECT_TERMS"
then
@@ -199,7 +147,7 @@
bad|good|new|old|"$TERM_BAD"|"$TERM_GOOD")
git bisect--helper --bisect-state "$cmd" "$@" ;;
skip)
- bisect_skip "$@" ;;
+ git bisect--helper --bisect-skip "$@" || exit;;
next)
# Not sure we want "next" at the UI level anymore.
git bisect--helper --bisect-next "$@" || exit ;;
@@ -208,9 +156,9 @@
reset)
git bisect--helper --bisect-reset "$@" ;;
replay)
- bisect_replay "$@" ;;
+ git bisect--helper --bisect-replay "$@" || exit;;
log)
- bisect_log ;;
+ git bisect--helper --bisect-log || exit ;;
run)
bisect_run "$@" ;;
terms)
diff --git a/git-compat-util.h b/git-compat-util.h
index f505f81..5ed0f00 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -254,9 +254,9 @@ typedef unsigned long uintptr_t;
#ifdef PRECOMPOSE_UNICODE
#include "compat/precompose_utf8.h"
#else
-static inline void precompose_argv(int argc, const char **argv)
+static inline const char *precompose_argv_prefix(int argc, const char **argv, const char *prefix)
{
- ; /* nothing */
+ return prefix;
}
#define probe_utf8_pathname_composition()
#endif
@@ -863,6 +863,12 @@ int git_vsnprintf(char *str, size_t maxsize,
const char *format, va_list ap);
#endif
+#ifdef OPEN_RETURNS_EINTR
+#undef open
+#define open git_open_with_retry
+int git_open_with_retry(const char *path, int flag, ...);
+#endif
+
#ifdef __GLIBC_PREREQ
#if __GLIBC_PREREQ(2, 1)
#define HAVE_STRCHRNUL
@@ -962,7 +968,7 @@ int xstrncmpz(const char *s, const char *t, size_t len);
#define FREE_AND_NULL(p) do { free(p); (p) = NULL; } while (0)
#define ALLOC_ARRAY(x, alloc) (x) = xmalloc(st_mult(sizeof(*(x)), (alloc)))
-#define CALLOC_ARRAY(x, alloc) (x) = xcalloc((alloc), sizeof(*(x)));
+#define CALLOC_ARRAY(x, alloc) (x) = xcalloc((alloc), sizeof(*(x)))
#define REALLOC_ARRAY(x, alloc) (x) = xrealloc((x), st_mult(sizeof(*(x)), (alloc)))
#define COPY_ARRAY(dst, src, n) copy_array((dst), (src), (n), sizeof(*(dst)) + \
@@ -1251,9 +1257,12 @@ static inline int regexec_buf(const regex_t *preg, const char *buf, size_t size,
#endif
#endif
-#if defined(__GNUC__) || (_MSC_VER >= 1400) || defined(__C99_MACRO_WITH_VA_ARGS)
+/*
+ * This is always defined as a first step towards making the use of variadic
+ * macros unconditional. If it causes compilation problems on your platform,
+ * please report it to the Git mailing list at git@vger.kernel.org.
+ */
#define HAVE_VARIADIC_MACROS 1
-#endif
/* usage.c: only to be used for testing BUG() implementation (see test-tool) */
extern int BUG_exit_code;
diff --git a/git-difftool--helper.sh b/git-difftool--helper.sh
index 46af3e6..992124c 100755
--- a/git-difftool--helper.sh
+++ b/git-difftool--helper.sh
@@ -61,6 +61,9 @@
export BASE
eval $GIT_DIFFTOOL_EXTCMD '"$LOCAL"' '"$REMOTE"'
else
+ initialize_merge_tool "$merge_tool"
+ # ignore the error from the above --- run_merge_tool
+ # will diagnose unusable tool by itself
run_merge_tool "$merge_tool"
fi
}
@@ -79,6 +82,9 @@
then
LOCAL="$1"
REMOTE="$2"
+ initialize_merge_tool "$merge_tool"
+ # ignore the error from the above --- run_merge_tool
+ # will diagnose unusable tool by itself
run_merge_tool "$merge_tool" false
else
# Launch the merge tool on each path provided by 'git diff'
diff --git a/git-gui/po/ru.po b/git-gui/po/ru.po
index 161ee1a..7aebaf8 100644
--- a/git-gui/po/ru.po
+++ b/git-gui/po/ru.po
@@ -331,7 +331,7 @@
#: git-gui.sh:2936
msgid "Unstage From Commit"
-msgstr "Убрать из издекса"
+msgstr "Убрать из индекса"
#: git-gui.sh:2942 lib/index.tcl:521
msgid "Revert Changes"
diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh
index 78f3647..542a6a7 100644
--- a/git-mergetool--lib.sh
+++ b/git-mergetool--lib.sh
@@ -166,6 +166,10 @@
return 1
}
+ hide_resolved_enabled () {
+ return 0
+ }
+
translate_merge_tool_path () {
echo "$1"
}
@@ -250,6 +254,10 @@
fi
}
+initialize_merge_tool () {
+ # Bring tool-specific functions into scope
+ setup_tool "$1" || return 1
+}
# Entry point for running tools
run_merge_tool () {
@@ -261,9 +269,6 @@
merge_tool_path=$(get_merge_tool_path "$1") || exit
base_present="$2"
- # Bring tool-specific functions into scope
- setup_tool "$1" || return 1
-
if merge_mode
then
run_merge_cmd "$1"
diff --git a/git-mergetool.sh b/git-mergetool.sh
index e3f6d54..f751d9c 100755
--- a/git-mergetool.sh
+++ b/git-mergetool.sh
@@ -239,6 +239,13 @@
fi
}
+hide_resolved () {
+ git merge-file --ours -q -p "$LOCAL" "$BASE" "$REMOTE" >"$LCONFL"
+ git merge-file --theirs -q -p "$LOCAL" "$BASE" "$REMOTE" >"$RCONFL"
+ mv -- "$LCONFL" "$LOCAL"
+ mv -- "$RCONFL" "$REMOTE"
+}
+
merge_file () {
MERGED="$1"
@@ -265,6 +272,8 @@
ext=
esac
+ initialize_merge_tool "$merge_tool" || return
+
mergetool_tmpdir_init
if test "$MERGETOOL_TMPDIR" != "."
@@ -276,7 +285,9 @@
BACKUP="$MERGETOOL_TMPDIR/${BASE}_BACKUP_$$$ext"
LOCAL="$MERGETOOL_TMPDIR/${BASE}_LOCAL_$$$ext"
+ LCONFL="$MERGETOOL_TMPDIR/${BASE}_LOCAL_LCONFL_$$$ext"
REMOTE="$MERGETOOL_TMPDIR/${BASE}_REMOTE_$$$ext"
+ RCONFL="$MERGETOOL_TMPDIR/${BASE}_REMOTE_RCONFL_$$$ext"
BASE="$MERGETOOL_TMPDIR/${BASE}_BASE_$$$ext"
base_mode= local_mode= remote_mode=
@@ -322,6 +333,40 @@
checkout_staged_file 2 "$MERGED" "$LOCAL"
checkout_staged_file 3 "$MERGED" "$REMOTE"
+ # hideResolved preferences hierarchy.
+ global_config="mergetool.hideResolved"
+ tool_config="mergetool.${merge_tool}.hideResolved"
+
+ if enabled=$(git config --type=bool "$tool_config")
+ then
+ # The user has a specific preference for a specific tool and no
+ # other preferences should override that.
+ : ;
+ elif enabled=$(git config --type=bool "$global_config")
+ then
+ # The user has a general preference for all tools.
+ #
+ # 'true' means the user likes the feature so we should use it
+ # where possible but tool authors can still override.
+ #
+ # 'false' means the user doesn't like the feature so we should
+ # not use it anywhere.
+ if test "$enabled" = true && hide_resolved_enabled
+ then
+ enabled=true
+ else
+ enabled=false
+ fi
+ else
+ # The user does not have a preference. Default to disabled.
+ enabled=false
+ fi
+
+ if test "$enabled" = true
+ then
+ hide_resolved
+ fi
+
if test -z "$local_mode" || test -z "$remote_mode"
then
echo "Deleted merge conflict for '$MERGED':"
diff --git a/git-sh-i18n.sh b/git-sh-i18n.sh
index 8eef60b..e3d9f48 100644
--- a/git-sh-i18n.sh
+++ b/git-sh-i18n.sh
@@ -17,12 +17,7 @@
# First decide what scheme to use...
GIT_INTERNAL_GETTEXT_SH_SCHEME=fallthrough
-if test -n "$GIT_TEST_GETTEXT_POISON" &&
- git env--helper --type=bool --default=0 --exit-code \
- GIT_TEST_GETTEXT_POISON
-then
- GIT_INTERNAL_GETTEXT_SH_SCHEME=poison
-elif test -n "@@USE_GETTEXT_SCHEME@@"
+if test -n "@@USE_GETTEXT_SCHEME@@"
then
GIT_INTERNAL_GETTEXT_SH_SCHEME="@@USE_GETTEXT_SCHEME@@"
elif test -n "$GIT_INTERNAL_GETTEXT_TEST_FALLBACKS"
@@ -63,21 +58,6 @@
)
}
;;
-poison)
- # Emit garbage so that tests that incorrectly rely on translatable
- # strings will fail.
- gettext () {
- printf "%s" "# GETTEXT POISON #"
- }
-
- eval_gettext () {
- printf "%s" "# GETTEXT POISON #"
- }
-
- eval_ngettext () {
- printf "%s" "# GETTEXT POISON #"
- }
- ;;
*)
gettext () {
printf "%s" "$1"
diff --git a/git.c b/git.c
index a00a0a4..9bc077a 100644
--- a/git.c
+++ b/git.c
@@ -29,6 +29,7 @@ const char git_usage_string[] =
" [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]\n"
" [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]\n"
" [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
+ " [--super-prefix=<path>] [--config-env=<name>=<envvar>]\n"
" <command> [<args>]");
const char git_more_info_string[] =
@@ -254,6 +255,8 @@ static int handle_options(const char ***argv, int *argc, int *envchanged)
git_config_push_parameter((*argv)[1]);
(*argv)++;
(*argc)--;
+ } else if (skip_prefix(cmd, "--config-env=", &cmd)) {
+ git_config_push_env(cmd);
} else if (!strcmp(cmd, "--literal-pathspecs")) {
setenv(GIT_LITERAL_PATHSPECS_ENVIRONMENT, "1", 1);
if (envchanged)
@@ -420,7 +423,7 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv)
int nongit_ok;
prefix = setup_git_directory_gently(&nongit_ok);
}
-
+ prefix = precompose_argv_prefix(argc, argv, prefix);
if (use_pager == -1 && p->option & (RUN_SETUP | RUN_SETUP_GENTLY) &&
!(p->option & DELAY_PAGER_CONFIG))
use_pager = check_pager_config(p->cmd);
diff --git a/gpg-interface.c b/gpg-interface.c
index b499270..127aecf 100644
--- a/gpg-interface.c
+++ b/gpg-interface.c
@@ -1,4 +1,5 @@
#include "cache.h"
+#include "commit.h"
#include "config.h"
#include "run-command.h"
#include "strbuf.h"
@@ -345,7 +346,7 @@ void print_signature_buffer(const struct signature_check *sigc, unsigned flags)
fputs(output, stderr);
}
-size_t parse_signature(const char *buf, size_t size)
+size_t parse_signed_buffer(const char *buf, size_t size)
{
size_t len = 0;
size_t match = size;
@@ -361,6 +362,18 @@ size_t parse_signature(const char *buf, size_t size)
return match;
}
+int parse_signature(const char *buf, size_t size, struct strbuf *payload, struct strbuf *signature)
+{
+ size_t match = parse_signed_buffer(buf, size);
+ if (match != size) {
+ strbuf_add(payload, buf, match);
+ remove_signature(payload);
+ strbuf_add(signature, buf + match, size - match);
+ return 1;
+ }
+ return 0;
+}
+
void set_signing_key(const char *key)
{
free(configured_signing_key);
diff --git a/gpg-interface.h b/gpg-interface.h
index f4e9b4f..80567e4 100644
--- a/gpg-interface.h
+++ b/gpg-interface.h
@@ -38,12 +38,19 @@ struct signature_check {
void signature_check_clear(struct signature_check *sigc);
/*
+ * Look at a GPG signed tag object. If such a signature exists, store it in
+ * signature and the signed content in payload. Return 1 if a signature was
+ * found, and 0 otherwise.
+ */
+int parse_signature(const char *buf, size_t size, struct strbuf *payload, struct strbuf *signature);
+
+/*
* Look at GPG signed content (e.g. a signed tag object), whose
* payload is followed by a detached signature on it. Return the
* offset where the embedded detached signature begins, or the end of
* the data when there is no such signature.
*/
-size_t parse_signature(const char *buf, size_t size);
+size_t parse_signed_buffer(const char *buf, size_t size);
/*
* Create a detached signature for the contents of "buffer" and append
diff --git a/grep.c b/grep.c
index efeb6dc..2230353 100644
--- a/grep.c
+++ b/grep.c
@@ -166,11 +166,6 @@ void grep_init(struct grep_opt *opt, struct repository *repo, const char *prefix
pcre2_malloc, pcre2_free, NULL);
#endif
-#ifdef USE_LIBPCRE1
- pcre_malloc = malloc;
- pcre_free = free;
-#endif
-
*opt = grep_defaults;
opt->repo = repo;
@@ -223,17 +218,7 @@ static void grep_set_pattern_type_option(enum grep_pattern_type pattern_type, st
break;
case GREP_PATTERN_TYPE_PCRE:
-#ifdef USE_LIBPCRE2
opt->pcre2 = 1;
-#else
- /*
- * It's important that pcre1 always be assigned to
- * even when there's no USE_LIBPCRE* defined. We still
- * call the PCRE stub function, it just dies with
- * "cannot use Perl-compatible regexes[...]".
- */
- opt->pcre1 = 1;
-#endif
break;
}
}
@@ -377,92 +362,6 @@ static int is_fixed(const char *s, size_t len)
return 1;
}
-#ifdef USE_LIBPCRE1
-static void compile_pcre1_regexp(struct grep_pat *p, const struct grep_opt *opt)
-{
- const char *error;
- int erroffset;
- int options = PCRE_MULTILINE;
- int study_options = 0;
-
- if (opt->ignore_case) {
- if (!opt->ignore_locale && has_non_ascii(p->pattern))
- p->pcre1_tables = pcre_maketables();
- options |= PCRE_CASELESS;
- }
- if (!opt->ignore_locale && is_utf8_locale() && has_non_ascii(p->pattern))
- options |= PCRE_UTF8;
-
- p->pcre1_regexp = pcre_compile(p->pattern, options, &error, &erroffset,
- p->pcre1_tables);
- if (!p->pcre1_regexp)
- compile_regexp_failed(p, error);
-
-#if defined(PCRE_CONFIG_JIT) && !defined(NO_LIBPCRE1_JIT)
- pcre_config(PCRE_CONFIG_JIT, &p->pcre1_jit_on);
- if (opt->debug)
- fprintf(stderr, "pcre1_jit_on=%d\n", p->pcre1_jit_on);
-
- if (p->pcre1_jit_on)
- study_options = PCRE_STUDY_JIT_COMPILE;
-#endif
-
- p->pcre1_extra_info = pcre_study(p->pcre1_regexp, study_options, &error);
- if (!p->pcre1_extra_info && error)
- die("%s", error);
-}
-
-static int pcre1match(struct grep_pat *p, const char *line, const char *eol,
- regmatch_t *match, int eflags)
-{
- int ovector[30], ret, flags = PCRE_NO_UTF8_CHECK;
-
- if (eflags & REG_NOTBOL)
- flags |= PCRE_NOTBOL;
-
- ret = pcre_exec(p->pcre1_regexp, p->pcre1_extra_info, line,
- eol - line, 0, flags, ovector,
- ARRAY_SIZE(ovector));
-
- if (ret < 0 && ret != PCRE_ERROR_NOMATCH)
- die("pcre_exec failed with error code %d", ret);
- if (ret > 0) {
- ret = 0;
- match->rm_so = ovector[0];
- match->rm_eo = ovector[1];
- }
-
- return ret;
-}
-
-static void free_pcre1_regexp(struct grep_pat *p)
-{
- pcre_free(p->pcre1_regexp);
-#ifdef PCRE_CONFIG_JIT
- if (p->pcre1_jit_on)
- pcre_free_study(p->pcre1_extra_info);
- else
-#endif
- pcre_free(p->pcre1_extra_info);
- pcre_free((void *)p->pcre1_tables);
-}
-#else /* !USE_LIBPCRE1 */
-static void compile_pcre1_regexp(struct grep_pat *p, const struct grep_opt *opt)
-{
- die("cannot use Perl-compatible regexes when not compiled with USE_LIBPCRE");
-}
-
-static int pcre1match(struct grep_pat *p, const char *line, const char *eol,
- regmatch_t *match, int eflags)
-{
- return 1;
-}
-
-static void free_pcre1_regexp(struct grep_pat *p)
-{
-}
-#endif /* !USE_LIBPCRE1 */
-
#ifdef USE_LIBPCRE2
static void compile_pcre2_pattern(struct grep_pat *p, const struct grep_opt *opt)
{
@@ -492,7 +391,23 @@ static void compile_pcre2_pattern(struct grep_pat *p, const struct grep_opt *opt
}
if (!opt->ignore_locale && is_utf8_locale() && has_non_ascii(p->pattern) &&
!(!opt->ignore_case && (p->fixed || p->is_fixed)))
- options |= PCRE2_UTF;
+ options |= (PCRE2_UTF | PCRE2_MATCH_INVALID_UTF);
+
+ /* Work around https://bugs.exim.org/show_bug.cgi?id=2642 fixed in 10.36 */
+ if (PCRE2_MATCH_INVALID_UTF && options & (PCRE2_UTF | PCRE2_CASELESS)) {
+ struct strbuf buf;
+ int len;
+ int err;
+
+ if ((len = pcre2_config(PCRE2_CONFIG_VERSION, NULL)) < 0)
+ BUG("pcre2_config(..., NULL) failed: %d", len);
+ strbuf_init(&buf, len + 1);
+ if ((err = pcre2_config(PCRE2_CONFIG_VERSION, buf.buf)) < 0)
+ BUG("pcre2_config(..., buf.buf) failed: %d", err);
+ if (versioncmp(buf.buf, "10.36") < 0)
+ options |= PCRE2_NO_START_OPTIMIZE;
+ strbuf_release(&buf);
+ }
p->pcre2_pattern = pcre2_compile((PCRE2_SPTR)p->pattern,
p->patternlen, options, &error, &erroffset,
@@ -508,8 +423,6 @@ static void compile_pcre2_pattern(struct grep_pat *p, const struct grep_opt *opt
}
pcre2_config(PCRE2_CONFIG_JIT, &p->pcre2_jit_on);
- if (opt->debug)
- fprintf(stderr, "pcre2_jit_on=%d\n", p->pcre2_jit_on);
if (p->pcre2_jit_on) {
jitret = pcre2_jit_compile(p->pcre2_pattern, PCRE2_JIT_COMPLETE);
if (jitret)
@@ -535,9 +448,6 @@ static void compile_pcre2_pattern(struct grep_pat *p, const struct grep_opt *opt
BUG("pcre2_pattern_info() failed: %d", patinforet);
if (jitsizearg == 0) {
p->pcre2_jit_on = 0;
- if (opt->debug)
- fprintf(stderr, "pcre2_jit_on=%d: (*NO_JIT) in regex\n",
- p->pcre2_jit_on);
return;
}
}
@@ -588,11 +498,6 @@ static void free_pcre2_pattern(struct grep_pat *p)
#else /* !USE_LIBPCRE2 */
static void compile_pcre2_pattern(struct grep_pat *p, const struct grep_opt *opt)
{
- /*
- * Unreachable until USE_LIBPCRE2 becomes synonymous with
- * USE_LIBPCRE. See the sibling comment in
- * grep_set_pattern_type_option().
- */
die("cannot use Perl-compatible regexes when not compiled with USE_LIBPCRE");
}
@@ -616,8 +521,6 @@ static void compile_fixed_regexp(struct grep_pat *p, struct grep_opt *opt)
if (opt->ignore_case)
regflags |= REG_ICASE;
err = regcomp(&p->regexp, sb.buf, regflags);
- if (opt->debug)
- fprintf(stderr, "fixed %s\n", sb.buf);
strbuf_release(&sb);
if (err) {
char errbuf[1024];
@@ -693,11 +596,6 @@ static void compile_regexp(struct grep_pat *p, struct grep_opt *opt)
return;
}
- if (opt->pcre1) {
- compile_pcre1_regexp(p, opt);
- return;
- }
-
if (p->ignore_case)
regflags |= REG_ICASE;
if (opt->extended_regexp_option)
@@ -723,7 +621,7 @@ static struct grep_expr *compile_pattern_atom(struct grep_pat **list)
case GREP_PATTERN: /* atom */
case GREP_PATTERN_HEAD:
case GREP_PATTERN_BODY:
- x = xcalloc(1, sizeof (struct grep_expr));
+ CALLOC_ARRAY(x, 1);
x->node = GREP_NODE_ATOM;
x->u.atom = p;
*list = p->next;
@@ -753,7 +651,7 @@ static struct grep_expr *compile_pattern_not(struct grep_pat **list)
if (!p->next)
die("--not not followed by pattern expression");
*list = p->next;
- x = xcalloc(1, sizeof (struct grep_expr));
+ CALLOC_ARRAY(x, 1);
x->node = GREP_NODE_NOT;
x->u.unary = compile_pattern_not(list);
if (!x->u.unary)
@@ -778,7 +676,7 @@ static struct grep_expr *compile_pattern_and(struct grep_pat **list)
y = compile_pattern_and(list);
if (!y)
die("--and not followed by pattern expression");
- z = xcalloc(1, sizeof (struct grep_expr));
+ CALLOC_ARRAY(z, 1);
z->node = GREP_NODE_AND;
z->u.binary.left = x;
z->u.binary.right = y;
@@ -798,7 +696,7 @@ static struct grep_expr *compile_pattern_or(struct grep_pat **list)
y = compile_pattern_or(list);
if (!y)
die("not a pattern expression %s", p->pattern);
- z = xcalloc(1, sizeof (struct grep_expr));
+ CALLOC_ARRAY(z, 1);
z->node = GREP_NODE_OR;
z->u.binary.left = x;
z->u.binary.right = y;
@@ -812,87 +710,6 @@ static struct grep_expr *compile_pattern_expr(struct grep_pat **list)
return compile_pattern_or(list);
}
-static void indent(int in)
-{
- while (in-- > 0)
- fputc(' ', stderr);
-}
-
-static void dump_grep_pat(struct grep_pat *p)
-{
- switch (p->token) {
- case GREP_AND: fprintf(stderr, "*and*"); break;
- case GREP_OPEN_PAREN: fprintf(stderr, "*(*"); break;
- case GREP_CLOSE_PAREN: fprintf(stderr, "*)*"); break;
- case GREP_NOT: fprintf(stderr, "*not*"); break;
- case GREP_OR: fprintf(stderr, "*or*"); break;
-
- case GREP_PATTERN: fprintf(stderr, "pattern"); break;
- case GREP_PATTERN_HEAD: fprintf(stderr, "pattern_head"); break;
- case GREP_PATTERN_BODY: fprintf(stderr, "pattern_body"); break;
- }
-
- switch (p->token) {
- default: break;
- case GREP_PATTERN_HEAD:
- fprintf(stderr, "<head %d>", p->field); break;
- case GREP_PATTERN_BODY:
- fprintf(stderr, "<body>"); break;
- }
- switch (p->token) {
- default: break;
- case GREP_PATTERN_HEAD:
- case GREP_PATTERN_BODY:
- case GREP_PATTERN:
- fprintf(stderr, "%.*s", (int)p->patternlen, p->pattern);
- break;
- }
- fputc('\n', stderr);
-}
-
-static void dump_grep_expression_1(struct grep_expr *x, int in)
-{
- indent(in);
- switch (x->node) {
- case GREP_NODE_TRUE:
- fprintf(stderr, "true\n");
- break;
- case GREP_NODE_ATOM:
- dump_grep_pat(x->u.atom);
- break;
- case GREP_NODE_NOT:
- fprintf(stderr, "(not\n");
- dump_grep_expression_1(x->u.unary, in+1);
- indent(in);
- fprintf(stderr, ")\n");
- break;
- case GREP_NODE_AND:
- fprintf(stderr, "(and\n");
- dump_grep_expression_1(x->u.binary.left, in+1);
- dump_grep_expression_1(x->u.binary.right, in+1);
- indent(in);
- fprintf(stderr, ")\n");
- break;
- case GREP_NODE_OR:
- fprintf(stderr, "(or\n");
- dump_grep_expression_1(x->u.binary.left, in+1);
- dump_grep_expression_1(x->u.binary.right, in+1);
- indent(in);
- fprintf(stderr, ")\n");
- break;
- }
-}
-
-static void dump_grep_expression(struct grep_opt *opt)
-{
- struct grep_expr *x = opt->pattern_expression;
-
- if (opt->all_match)
- fprintf(stderr, "[all-match]\n");
- dump_grep_expression_1(x, 0);
- fflush(NULL);
-}
-
static struct grep_expr *grep_true_expr(void)
{
struct grep_expr *z = xcalloc(1, sizeof(*z));
@@ -973,7 +790,7 @@ static struct grep_expr *grep_splice_or(struct grep_expr *x, struct grep_expr *y
return z;
}
-static void compile_grep_patterns_real(struct grep_opt *opt)
+void compile_grep_patterns(struct grep_opt *opt)
{
struct grep_pat *p;
struct grep_expr *header_expr = prep_header_patterns(opt);
@@ -993,7 +810,7 @@ static void compile_grep_patterns_real(struct grep_opt *opt)
if (opt->all_match || header_expr)
opt->extended = 1;
- else if (!opt->extended && !opt->debug)
+ else if (!opt->extended)
return;
p = opt->pattern_list;
@@ -1016,13 +833,6 @@ static void compile_grep_patterns_real(struct grep_opt *opt)
opt->all_match = 1;
}
-void compile_grep_patterns(struct grep_opt *opt)
-{
- compile_grep_patterns_real(opt);
- if (opt->debug)
- dump_grep_expression(opt);
-}
-
static void free_pattern_expr(struct grep_expr *x)
{
switch (x->node) {
@@ -1051,9 +861,7 @@ void free_grep_patterns(struct grep_opt *opt)
case GREP_PATTERN: /* atom */
case GREP_PATTERN_HEAD:
case GREP_PATTERN_BODY:
- if (p->pcre1_regexp)
- free_pcre1_regexp(p);
- else if (p->pcre2_pattern)
+ if (p->pcre2_pattern)
free_pcre2_pattern(p);
else
regfree(&p->regexp);
@@ -1116,9 +924,7 @@ static int patmatch(struct grep_pat *p, char *line, char *eol,
{
int hit;
- if (p->pcre1_regexp)
- hit = !pcre1match(p, line, eol, match, eflags);
- else if (p->pcre2_pattern)
+ if (p->pcre2_pattern)
hit = !pcre2match(p, line, eol, match, eflags);
else
hit = !regexec_buf(&p->regexp, line, eol - line, 1, match,
diff --git a/grep.h b/grep.h
index b5c4e22..ae89d62 100644
--- a/grep.h
+++ b/grep.h
@@ -1,15 +1,6 @@
#ifndef GREP_H
#define GREP_H
#include "color.h"
-#ifdef USE_LIBPCRE1
-#include <pcre.h>
-#ifndef PCRE_NO_UTF8_CHECK
-#define PCRE_NO_UTF8_CHECK 0
-#endif
-#else
-typedef int pcre;
-typedef int pcre_extra;
-#endif
#ifdef USE_LIBPCRE2
#define PCRE2_CODE_UNIT_WIDTH 8
#include <pcre2.h>
@@ -18,6 +9,10 @@ typedef int pcre2_code;
typedef int pcre2_match_data;
typedef int pcre2_compile_context;
#endif
+#ifndef PCRE2_MATCH_INVALID_UTF
+/* PCRE2_MATCH_* dummy also with !USE_LIBPCRE2, for test-pcre2-config.c */
+#define PCRE2_MATCH_INVALID_UTF 0
+#endif
#include "thread-utils.h"
#include "userdiff.h"
@@ -71,10 +66,6 @@ struct grep_pat {
size_t patternlen;
enum grep_header_field field;
regex_t regexp;
- pcre *pcre1_regexp;
- pcre_extra *pcre1_extra_info;
- const unsigned char *pcre1_tables;
- int pcre1_jit_on;
pcre2_code *pcre2_pattern;
pcre2_match_data *pcre2_match_data;
pcre2_compile_context *pcre2_compile_context;
@@ -136,7 +127,6 @@ struct grep_opt {
int word_regexp;
int fixed;
int all_match;
- int debug;
#define GREP_BINARY_DEFAULT 0
#define GREP_BINARY_NOMATCH 1
#define GREP_BINARY_TEXT 2
@@ -144,7 +134,6 @@ struct grep_opt {
int allow_textconv;
int extended;
int use_reflog_filter;
- int pcre1;
int pcre2;
int relative;
int pathname;
diff --git a/sha1-lookup.c b/hash-lookup.c
similarity index 79%
rename from sha1-lookup.c
rename to hash-lookup.c
index 2918584..b98ed5e 100644
--- a/sha1-lookup.c
+++ b/hash-lookup.c
@@ -1,9 +1,9 @@
#include "cache.h"
-#include "sha1-lookup.h"
+#include "hash-lookup.h"
-static uint32_t take2(const unsigned char *sha1)
+static uint32_t take2(const struct object_id *oid, size_t ofs)
{
- return ((sha1[0] << 8) | sha1[1]);
+ return ((oid->hash[ofs] << 8) | oid->hash[ofs + 1]);
}
/*
@@ -47,11 +47,11 @@ static uint32_t take2(const unsigned char *sha1)
*/
/*
* The table should contain "nr" elements.
- * The sha1 of element i (between 0 and nr - 1) should be returned
+ * The oid of element i (between 0 and nr - 1) should be returned
* by "fn(i, table)".
*/
-int sha1_pos(const unsigned char *hash, void *table, size_t nr,
- sha1_access_fn fn)
+int oid_pos(const struct object_id *oid, const void *table, size_t nr,
+ oid_access_fn fn)
{
size_t hi = nr;
size_t lo = 0;
@@ -64,9 +64,9 @@ int sha1_pos(const unsigned char *hash, void *table, size_t nr,
size_t lov, hiv, miv, ofs;
for (ofs = 0; ofs < the_hash_algo->rawsz - 2; ofs += 2) {
- lov = take2(fn(0, table) + ofs);
- hiv = take2(fn(nr - 1, table) + ofs);
- miv = take2(hash + ofs);
+ lov = take2(fn(0, table), ofs);
+ hiv = take2(fn(nr - 1, table), ofs);
+ miv = take2(oid, ofs);
if (miv < lov)
return -1;
if (hiv < miv)
@@ -74,7 +74,7 @@ int sha1_pos(const unsigned char *hash, void *table, size_t nr,
if (lov != hiv) {
/*
* At this point miv could be equal
- * to hiv (but sha1 could still be higher);
+ * to hiv (but hash could still be higher);
* the invariant of (mi < hi) should be
* kept.
*/
@@ -88,7 +88,7 @@ int sha1_pos(const unsigned char *hash, void *table, size_t nr,
do {
int cmp;
- cmp = hashcmp(fn(mi, table), hash);
+ cmp = oidcmp(fn(mi, table), oid);
if (!cmp)
return mi;
if (cmp > 0)
@@ -100,17 +100,17 @@ int sha1_pos(const unsigned char *hash, void *table, size_t nr,
return index_pos_to_insert_pos(lo);
}
-int bsearch_hash(const unsigned char *sha1, const uint32_t *fanout_nbo,
+int bsearch_hash(const unsigned char *hash, const uint32_t *fanout_nbo,
const unsigned char *table, size_t stride, uint32_t *result)
{
uint32_t hi, lo;
- hi = ntohl(fanout_nbo[*sha1]);
- lo = ((*sha1 == 0x0) ? 0 : ntohl(fanout_nbo[*sha1 - 1]));
+ hi = ntohl(fanout_nbo[*hash]);
+ lo = ((*hash == 0x0) ? 0 : ntohl(fanout_nbo[*hash - 1]));
while (lo < hi) {
unsigned mi = lo + (hi - lo) / 2;
- int cmp = hashcmp(table + mi * stride, sha1);
+ int cmp = hashcmp(table + mi * stride, hash);
if (!cmp) {
if (result)
diff --git a/sha1-lookup.h b/hash-lookup.h
similarity index 64%
rename from sha1-lookup.h
rename to hash-lookup.h
index 5afcd01..dbd71eb 100644
--- a/sha1-lookup.h
+++ b/hash-lookup.h
@@ -1,20 +1,20 @@
-#ifndef SHA1_LOOKUP_H
-#define SHA1_LOOKUP_H
+#ifndef HASH_LOOKUP_H
+#define HASH_LOOKUP_H
-typedef const unsigned char *sha1_access_fn(size_t index, void *table);
+typedef const struct object_id *oid_access_fn(size_t index, const void *table);
-int sha1_pos(const unsigned char *sha1,
- void *table,
- size_t nr,
- sha1_access_fn fn);
+int oid_pos(const struct object_id *oid,
+ const void *table,
+ size_t nr,
+ oid_access_fn fn);
/*
- * Searches for sha1 in table, using the given fanout table to determine the
+ * Searches for hash in table, using the given fanout table to determine the
* interval to search, then using binary search. Returns 1 if found, 0 if not.
*
* Takes the following parameters:
*
- * - sha1: the hash to search for
+ * - hash: the hash to search for
* - fanout_nbo: a 256-element array of NETWORK-order 32-bit integers; the
* integer at position i represents the number of elements in table whose
* first byte is less than or equal to i
@@ -23,10 +23,10 @@ int sha1_pos(const unsigned char *sha1,
* GIT_MAX_RAWSZ or greater)
* - result: if not NULL, this function stores the element index of the
* position found (if the search is successful) or the index of the least
- * element that is greater than sha1 (if the search is not successful)
+ * element that is greater than hash (if the search is not successful)
*
* This function does not verify the validity of the fanout table.
*/
-int bsearch_hash(const unsigned char *sha1, const uint32_t *fanout_nbo,
+int bsearch_hash(const unsigned char *hash, const uint32_t *fanout_nbo,
const unsigned char *table, size_t stride, uint32_t *result);
#endif
diff --git a/hashmap.c b/hashmap.c
index 5009471..134d2ee 100644
--- a/hashmap.c
+++ b/hashmap.c
@@ -76,7 +76,7 @@ unsigned int memihash_cont(unsigned int hash_seed, const void *buf, size_t len)
static void alloc_table(struct hashmap *map, unsigned int size)
{
map->tablesize = size;
- map->table = xcalloc(size, sizeof(struct hashmap_entry *));
+ CALLOC_ARRAY(map->table, size);
/* calculate resize thresholds for new size */
map->grow_at = (unsigned int) ((uint64_t) size * HASHMAP_LOAD_FACTOR / 100);
diff --git a/http-backend.c b/http-backend.c
index a03b4ba..b329bf6 100644
--- a/http-backend.c
+++ b/http-backend.c
@@ -39,7 +39,7 @@ static struct string_list *get_parameters(void)
if (!query_params) {
const char *query = getenv("QUERY_STRING");
- query_params = xcalloc(1, sizeof(*query_params));
+ CALLOC_ARRAY(query_params, 1);
while (query && *query) {
char *name = url_decode_parameter_name(&query);
char *value = url_decode_parameter_value(&query);
diff --git a/http-fetch.c b/http-fetch.c
index c4ccc5f..fa64246 100644
--- a/http-fetch.c
+++ b/http-fetch.c
@@ -3,6 +3,7 @@
#include "exec-cmd.h"
#include "http.h"
#include "walker.h"
+#include "strvec.h"
static const char http_fetch_usage[] = "git http-fetch "
"[-c] [-t] [-a] [-v] [--recover] [-w ref] [--stdin | --packfile=hash | commit-id] url";
@@ -44,7 +45,8 @@ static int fetch_using_walker(const char *raw_url, int get_verbosely,
}
static void fetch_single_packfile(struct object_id *packfile_hash,
- const char *url) {
+ const char *url,
+ const char **index_pack_args) {
struct http_pack_request *preq;
struct slot_results results;
int ret;
@@ -55,7 +57,8 @@ static void fetch_single_packfile(struct object_id *packfile_hash,
if (preq == NULL)
die("couldn't create http pack request");
preq->slot->results = &results;
- preq->generate_keep = 1;
+ preq->index_pack_args = index_pack_args;
+ preq->preserve_index_pack_stdout = 1;
if (start_active_slot(preq->slot)) {
run_active_slot(preq->slot);
@@ -86,6 +89,7 @@ int cmd_main(int argc, const char **argv)
int packfile = 0;
int nongit;
struct object_id packfile_hash;
+ struct strvec index_pack_args = STRVEC_INIT;
setup_git_directory_gently(&nongit);
@@ -112,6 +116,8 @@ int cmd_main(int argc, const char **argv)
packfile = 1;
if (parse_oid_hex(p, &packfile_hash, &end) || *end)
die(_("argument to --packfile must be a valid hash (got '%s')"), p);
+ } else if (skip_prefix(argv[arg], "--index-pack-arg=", &p)) {
+ strvec_push(&index_pack_args, p);
}
arg++;
}
@@ -124,10 +130,18 @@ int cmd_main(int argc, const char **argv)
git_config(git_default_config, NULL);
if (packfile) {
- fetch_single_packfile(&packfile_hash, argv[arg]);
+ if (!index_pack_args.nr)
+ die(_("--packfile requires --index-pack-args"));
+
+ fetch_single_packfile(&packfile_hash, argv[arg],
+ index_pack_args.v);
+
return 0;
}
+ if (index_pack_args.nr)
+ die(_("--index-pack-args can only be used with --packfile"));
+
if (commits_on_stdin) {
commits = walker_targets_stdin(&commit_id, &write_ref);
} else {
diff --git a/http-push.c b/http-push.c
index 6a4a43e..b60d5fc 100644
--- a/http-push.c
+++ b/http-push.c
@@ -896,7 +896,7 @@ static struct remote_lock *lock_remote(const char *path, long timeout)
curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, dav_headers);
curl_easy_setopt(slot->curl, CURLOPT_FILE, &in_buffer);
- lock = xcalloc(1, sizeof(*lock));
+ CALLOC_ARRAY(lock, 1);
lock->timeout = -1;
if (start_active_slot(slot)) {
@@ -1713,7 +1713,7 @@ int cmd_main(int argc, const char **argv)
int new_refs;
struct ref *ref, *local_refs;
- repo = xcalloc(1, sizeof(*repo));
+ CALLOC_ARRAY(repo, 1);
argv++;
for (i = 1; i < argc; i++, argv++) {
diff --git a/http.c b/http.c
index 8b23a54..0e31fc2 100644
--- a/http.c
+++ b/http.c
@@ -2259,6 +2259,9 @@ void release_http_pack_request(struct http_pack_request *preq)
free(preq);
}
+static const char *default_index_pack_args[] =
+ {"index-pack", "--stdin", NULL};
+
int finish_http_pack_request(struct http_pack_request *preq)
{
struct child_process ip = CHILD_PROCESS_INIT;
@@ -2270,17 +2273,15 @@ int finish_http_pack_request(struct http_pack_request *preq)
tmpfile_fd = xopen(preq->tmpfile.buf, O_RDONLY);
- strvec_push(&ip.args, "index-pack");
- strvec_push(&ip.args, "--stdin");
ip.git_cmd = 1;
ip.in = tmpfile_fd;
- if (preq->generate_keep) {
- strvec_pushf(&ip.args, "--keep=git %"PRIuMAX,
- (uintmax_t)getpid());
+ ip.argv = preq->index_pack_args ? preq->index_pack_args
+ : default_index_pack_args;
+
+ if (preq->preserve_index_pack_stdout)
ip.out = 0;
- } else {
+ else
ip.no_stdout = 1;
- }
if (run_command(&ip)) {
ret = -1;
@@ -2323,7 +2324,7 @@ struct http_pack_request *new_direct_http_pack_request(
off_t prev_posn = 0;
struct http_pack_request *preq;
- preq = xcalloc(1, sizeof(*preq));
+ CALLOC_ARRAY(preq, 1);
strbuf_init(&preq->tmpfile, 0);
preq->url = url;
@@ -2418,7 +2419,7 @@ struct http_object_request *new_http_object_request(const char *base_url,
off_t prev_posn = 0;
struct http_object_request *freq;
- freq = xcalloc(1, sizeof(*freq));
+ CALLOC_ARRAY(freq, 1);
strbuf_init(&freq->tmpfile, 0);
oidcpy(&freq->oid, oid);
freq->localfile = -1;
diff --git a/http.h b/http.h
index 5de792e..bf3d127 100644
--- a/http.h
+++ b/http.h
@@ -218,12 +218,12 @@ struct http_pack_request {
char *url;
/*
- * If this is true, finish_http_pack_request() will pass "--keep" to
- * index-pack, resulting in the creation of a keep file, and will not
- * suppress its stdout (that is, the "keep\t<hash>\n" line will be
- * printed to stdout).
+ * index-pack command to run. Must be terminated by NULL.
+ *
+ * If NULL, defaults to {"index-pack", "--stdin", NULL}.
*/
- unsigned generate_keep : 1;
+ const char **index_pack_args;
+ unsigned preserve_index_pack_stdout : 1;
FILE *packfile;
struct strbuf tmpfile;
diff --git a/imap-send.c b/imap-send.c
index d0b94f9..bb085d6 100644
--- a/imap-send.c
+++ b/imap-send.c
@@ -963,9 +963,9 @@ static struct imap_store *imap_open_store(struct imap_server_conf *srvc, const c
char *arg, *rsp;
int s = -1, preauth;
- ctx = xcalloc(1, sizeof(*ctx));
+ CALLOC_ARRAY(ctx, 1);
- ctx->imap = imap = xcalloc(1, sizeof(*imap));
+ ctx->imap = CALLOC_ARRAY(imap, 1);
imap->buf.sock.fd[0] = imap->buf.sock.fd[1] = -1;
imap->in_progress_append = &imap->in_progress;
diff --git a/line-log.c b/line-log.c
index 75c8b1a..51d9331 100644
--- a/line-log.c
+++ b/line-log.c
@@ -296,7 +296,7 @@ static void line_log_data_insert(struct line_log_data **list,
return;
}
- p = xcalloc(1, sizeof(struct line_log_data));
+ CALLOC_ARRAY(p, 1);
p->path = path;
range_set_append(&p->ranges, begin, end);
if (ip) {
diff --git a/line-range.c b/line-range.c
index 9b50583..955a8a9 100644
--- a/line-range.c
+++ b/line-range.c
@@ -202,7 +202,7 @@ static const char *parse_range_funcname(
drv = userdiff_find_by_path(istate, path);
if (drv && drv->funcname.pattern) {
const struct userdiff_funcname *pe = &drv->funcname;
- xecfg = xcalloc(1, sizeof(*xecfg));
+ CALLOC_ARRAY(xecfg, 1);
xdiff_set_find_func(xecfg, pe->pattern, pe->cflags);
}
diff --git a/list-objects-filter.c b/list-objects-filter.c
index 0a3ef3c..39e2f15 100644
--- a/list-objects-filter.c
+++ b/list-objects-filter.c
@@ -21,7 +21,7 @@
* in the traversal (until we mark it SEEN). This is a way to
* let us silently de-dup calls to show() in the caller. This
* is subtly different from the "revision.h:SHOWN" and the
- * "sha1-name.c:ONELINE_SEEN" bits. And also different from
+ * "object-name.c:ONELINE_SEEN" bits. And also different from
* the non-de-dup usage in pack-bitmap.c
*/
#define FILTER_SHOWN_BUT_REVISIT (1<<21)
@@ -186,7 +186,7 @@ static enum list_objects_filter_result filter_trees_depth(
seen_info = oidmap_get(
&filter_data->seen_at_depth, &obj->oid);
if (!seen_info) {
- seen_info = xcalloc(1, sizeof(*seen_info));
+ CALLOC_ARRAY(seen_info, 1);
oidcpy(&seen_info->base.oid, &obj->oid);
seen_info->depth = filter_data->current_depth;
oidmap_put(&filter_data->seen_at_depth, seen_info);
@@ -626,7 +626,7 @@ static void filter_combine__init(
size_t sub;
d->nr = filter_options->sub_nr;
- d->sub = xcalloc(d->nr, sizeof(*d->sub));
+ CALLOC_ARRAY(d->sub, d->nr);
for (sub = 0; sub < d->nr; sub++)
d->sub[sub].filter = list_objects_filter__init(
filter->omits ? &d->sub[sub].omits : NULL,
@@ -674,7 +674,7 @@ struct filter *list_objects_filter__init(
if (!init_fn)
return NULL;
- filter = xcalloc(1, sizeof(*filter));
+ CALLOC_ARRAY(filter, 1);
filter->omits = omitted;
init_fn(filter_options, filter);
return filter;
diff --git a/ll-merge.c b/ll-merge.c
index 1ec0b95..9a8a2c3 100644
--- a/ll-merge.c
+++ b/ll-merge.c
@@ -268,7 +268,7 @@ static int read_merge_config(const char *var, const char *value, void *cb)
if (!strncmp(fn->name, name, namelen) && !fn->name[namelen])
break;
if (!fn) {
- fn = xcalloc(1, sizeof(struct ll_merge_driver));
+ CALLOC_ARRAY(fn, 1);
fn->name = xmemdupz(name, namelen);
fn->fn = ll_ext_merge;
*ll_user_merge_tail = fn;
diff --git a/log-tree.c b/log-tree.c
index fd0dde9..4531ceb 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -502,7 +502,7 @@ static void show_signature(struct rev_info *opt, struct commit *commit)
struct signature_check sigc = { 0 };
int status;
- if (parse_signed_commit(commit, &payload, &signature) <= 0)
+ if (parse_signed_commit(commit, &payload, &signature, the_hash_algo) <= 0)
goto out;
status = check_signature(payload.buf, payload.len, signature.buf,
@@ -548,7 +548,8 @@ static int show_one_mergetag(struct commit *commit,
struct strbuf verify_message;
struct signature_check sigc = { 0 };
int status, nth;
- size_t payload_size;
+ struct strbuf payload = STRBUF_INIT;
+ struct strbuf signature = STRBUF_INIT;
hash_object_file(the_hash_algo, extra->value, extra->len,
type_name(OBJ_TAG), &oid);
@@ -571,13 +572,11 @@ static int show_one_mergetag(struct commit *commit,
strbuf_addf(&verify_message,
"parent #%d, tagged '%s'\n", nth + 1, tag->tag);
- payload_size = parse_signature(extra->value, extra->len);
status = -1;
- if (extra->len > payload_size) {
+ if (parse_signature(extra->value, extra->len, &payload, &signature)) {
/* could have a good signature */
- status = check_signature(extra->value, payload_size,
- extra->value + payload_size,
- extra->len - payload_size, &sigc);
+ status = check_signature(payload.buf, payload.len,
+ signature.buf, signature.len, &sigc);
if (sigc.gpg_output)
strbuf_addstr(&verify_message, sigc.gpg_output);
else
@@ -588,6 +587,8 @@ static int show_one_mergetag(struct commit *commit,
show_sig_lines(opt, status, verify_message.buf);
strbuf_release(&verify_message);
+ strbuf_release(&payload);
+ strbuf_release(&signature);
return 0;
}
@@ -808,6 +809,11 @@ void show_log(struct rev_info *opt)
if (cmit_fmt_is_mail(ctx.fmt) && opt->rdiff1) {
struct diff_queue_struct dq;
struct diff_options opts;
+ struct range_diff_options range_diff_opts = {
+ .creation_factor = opt->creation_factor,
+ .dual_color = 1,
+ .diffopt = &opts
+ };
memcpy(&dq, &diff_queued_diff, sizeof(diff_queued_diff));
DIFF_QUEUE_CLEAR(&diff_queued_diff);
@@ -822,8 +828,7 @@ void show_log(struct rev_info *opt)
opts.file = opt->diffopt.file;
opts.use_color = opt->diffopt.use_color;
diff_setup_done(&opts);
- show_range_diff(opt->rdiff1, opt->rdiff2,
- opt->creation_factor, 1, &opts, NULL);
+ show_range_diff(opt->rdiff1, opt->rdiff2, &range_diff_opts);
memcpy(&diff_queued_diff, &dq, sizeof(diff_queued_diff));
}
@@ -899,15 +904,21 @@ static int log_tree_diff(struct rev_info *opt, struct commit *commit, struct log
int showed_log;
struct commit_list *parents;
struct object_id *oid;
+ int is_merge;
+ int all_need_diff = opt->diff || opt->diffopt.flags.exit_with_status;
- if (!opt->diff && !opt->diffopt.flags.exit_with_status)
+ if (!all_need_diff && !opt->merges_need_diff)
return 0;
parse_commit_or_die(commit);
oid = get_commit_tree_oid(commit);
- /* Root commit? */
parents = get_saved_parents(opt, commit);
+ is_merge = parents && parents->next;
+ if (!is_merge && !all_need_diff)
+ return 0;
+
+ /* Root commit? */
if (!parents) {
if (opt->show_root_diff) {
diff_root_tree_oid(oid, "", &opt->diffopt);
@@ -916,16 +927,16 @@ static int log_tree_diff(struct rev_info *opt, struct commit *commit, struct log
return !opt->loginfo;
}
- /* More than one parent? */
- if (parents->next) {
- if (opt->ignore_merges)
- return 0;
- else if (opt->combine_merges)
+ if (is_merge) {
+ if (opt->combine_merges)
return do_diff_combined(opt, commit);
- else if (!opt->first_parent_only) {
- /* If we show multiple diffs, show the parent info */
- log->parent = parents->item;
- }
+ if (opt->separate_merges) {
+ if (!opt->first_parent_merges) {
+ /* Show parent info for multiple diffs */
+ log->parent = parents->item;
+ }
+ } else
+ return 0;
}
showed_log = 0;
@@ -941,7 +952,7 @@ static int log_tree_diff(struct rev_info *opt, struct commit *commit, struct log
/* Set up the log info for the next parent, if any.. */
parents = parents->next;
- if (!parents || opt->first_parent_only)
+ if (!parents || opt->first_parent_merges)
break;
log->parent = parents->item;
opt->loginfo = log;
@@ -952,12 +963,14 @@ static int log_tree_diff(struct rev_info *opt, struct commit *commit, struct log
int log_tree_commit(struct rev_info *opt, struct commit *commit)
{
struct log_info log;
- int shown, close_file = opt->diffopt.close_file;
+ int shown;
+ /* maybe called by e.g. cmd_log_walk(), maybe stand-alone */
+ int no_free = opt->diffopt.no_free;
log.commit = commit;
log.parent = NULL;
opt->loginfo = &log;
- opt->diffopt.close_file = 0;
+ opt->diffopt.no_free = 1;
if (opt->line_level_traverse)
return line_log_print(opt, commit);
@@ -974,7 +987,7 @@ int log_tree_commit(struct rev_info *opt, struct commit *commit)
fprintf(opt->diffopt.file, "\n%s\n", opt->break_bar);
opt->loginfo = NULL;
maybe_flush_or_die(opt->diffopt.file, "stdout");
- if (close_file)
- fclose(opt->diffopt.file);
+ opt->diffopt.no_free = no_free;
+ diff_free(&opt->diffopt);
return shown;
}
diff --git a/ls-refs.c b/ls-refs.c
index a1e0b47..88f6c3f 100644
--- a/ls-refs.c
+++ b/ls-refs.c
@@ -7,6 +7,39 @@
#include "pkt-line.h"
#include "config.h"
+static int config_read;
+static int advertise_unborn;
+static int allow_unborn;
+
+static void ensure_config_read(void)
+{
+ const char *str = NULL;
+
+ if (config_read)
+ return;
+
+ if (repo_config_get_string_tmp(the_repository, "lsrefs.unborn", &str)) {
+ /*
+ * If there is no such config, advertise and allow it by
+ * default.
+ */
+ advertise_unborn = 1;
+ allow_unborn = 1;
+ } else {
+ if (!strcmp(str, "advertise")) {
+ advertise_unborn = 1;
+ allow_unborn = 1;
+ } else if (!strcmp(str, "allow")) {
+ allow_unborn = 1;
+ } else if (!strcmp(str, "ignore")) {
+ /* do nothing */
+ } else {
+ die(_("invalid value '%s' for lsrefs.unborn"), str);
+ }
+ }
+ config_read = 1;
+}
+
/*
* Check if one of the prefixes is a prefix of the ref.
* If no prefixes were provided, all refs match.
@@ -32,6 +65,7 @@ struct ls_refs_data {
unsigned peel;
unsigned symrefs;
struct strvec prefixes;
+ unsigned unborn : 1;
};
static int send_ref(const char *refname, const struct object_id *oid,
@@ -47,7 +81,10 @@ static int send_ref(const char *refname, const struct object_id *oid,
if (!ref_match(&data->prefixes, refname_nons))
return 0;
- strbuf_addf(&refline, "%s %s", oid_to_hex(oid), refname_nons);
+ if (oid)
+ strbuf_addf(&refline, "%s %s", oid_to_hex(oid), refname_nons);
+ else
+ strbuf_addf(&refline, "unborn %s", refname_nons);
if (data->symrefs && flag & REF_ISSYMREF) {
struct object_id unused;
const char *symref_target = resolve_ref_unsafe(refname, 0,
@@ -61,9 +98,9 @@ static int send_ref(const char *refname, const struct object_id *oid,
strip_namespace(symref_target));
}
- if (data->peel) {
+ if (data->peel && oid) {
struct object_id peeled;
- if (!peel_ref(refname, &peeled))
+ if (!peel_iterated_oid(oid, &peeled))
strbuf_addf(&refline, " peeled:%s", oid_to_hex(&peeled));
}
@@ -74,6 +111,23 @@ static int send_ref(const char *refname, const struct object_id *oid,
return 0;
}
+static void send_possibly_unborn_head(struct ls_refs_data *data)
+{
+ struct strbuf namespaced = STRBUF_INIT;
+ struct object_id oid;
+ int flag;
+ int oid_is_null;
+
+ strbuf_addf(&namespaced, "%sHEAD", get_git_namespace());
+ if (!resolve_ref_unsafe(namespaced.buf, 0, &oid, &flag))
+ return; /* bad ref */
+ oid_is_null = is_null_oid(&oid);
+ if (!oid_is_null ||
+ (data->unborn && data->symrefs && (flag & REF_ISSYMREF)))
+ send_ref(namespaced.buf, oid_is_null ? NULL : &oid, flag, data);
+ strbuf_release(&namespaced);
+}
+
static int ls_refs_config(const char *var, const char *value, void *data)
{
/*
@@ -90,7 +144,9 @@ int ls_refs(struct repository *r, struct strvec *keys,
struct ls_refs_data data;
memset(&data, 0, sizeof(data));
+ strvec_init(&data.prefixes);
+ ensure_config_read();
git_config(ls_refs_config, NULL);
while (packet_reader_read(request) == PACKET_READ_NORMAL) {
@@ -103,14 +159,30 @@ int ls_refs(struct repository *r, struct strvec *keys,
data.symrefs = 1;
else if (skip_prefix(arg, "ref-prefix ", &out))
strvec_push(&data.prefixes, out);
+ else if (!strcmp("unborn", arg))
+ data.unborn = allow_unborn;
}
if (request->status != PACKET_READ_FLUSH)
die(_("expected flush after ls-refs arguments"));
- head_ref_namespaced(send_ref, &data);
- for_each_namespaced_ref(send_ref, &data);
+ send_possibly_unborn_head(&data);
+ if (!data.prefixes.nr)
+ strvec_push(&data.prefixes, "");
+ for_each_fullref_in_prefixes(get_git_namespace(), data.prefixes.v,
+ send_ref, &data, 0);
packet_flush(1);
strvec_clear(&data.prefixes);
return 0;
}
+
+int ls_refs_advertise(struct repository *r, struct strbuf *value)
+{
+ if (value) {
+ ensure_config_read();
+ if (advertise_unborn)
+ strbuf_addstr(value, "unborn");
+ }
+
+ return 1;
+}
diff --git a/ls-refs.h b/ls-refs.h
index 7b33a7c..a99e4be 100644
--- a/ls-refs.h
+++ b/ls-refs.h
@@ -6,5 +6,6 @@ struct strvec;
struct packet_reader;
int ls_refs(struct repository *r, struct strvec *keys,
struct packet_reader *request);
+int ls_refs_advertise(struct repository *r, struct strbuf *value);
#endif /* LS_REFS_H */
diff --git a/mailmap.c b/mailmap.c
index 962fd86..183a2f6 100644
--- a/mailmap.c
+++ b/mailmap.c
@@ -83,7 +83,7 @@ static void add_mapping(struct string_list *map,
if (item->util) {
me = (struct mailmap_entry *)item->util;
} else {
- me = xcalloc(1, sizeof(struct mailmap_entry));
+ CALLOC_ARRAY(me, 1);
me->namemap.strdup_strings = 1;
me->namemap.cmp = namemap_cmp;
item->util = me;
@@ -143,31 +143,13 @@ static char *parse_name_and_email(char *buffer, char **name,
return (*right == '\0' ? NULL : right);
}
-static void read_mailmap_line(struct string_list *map, char *buffer,
- char **repo_abbrev)
+static void read_mailmap_line(struct string_list *map, char *buffer)
{
char *name1 = NULL, *email1 = NULL, *name2 = NULL, *email2 = NULL;
- if (buffer[0] == '#') {
- static const char abbrev[] = "# repo-abbrev:";
- int abblen = sizeof(abbrev) - 1;
- int len = strlen(buffer);
- if (!repo_abbrev)
- return;
-
- if (len && buffer[len - 1] == '\n')
- buffer[--len] = 0;
- if (!strncmp(buffer, abbrev, abblen)) {
- char *cp;
-
- free(*repo_abbrev);
-
- for (cp = buffer + abblen; isspace(*cp); cp++)
- ; /* nothing */
- *repo_abbrev = xstrdup(cp);
- }
+ if (buffer[0] == '#')
return;
- }
+
if ((name2 = parse_name_and_email(buffer, &name1, &email1, 0)) != NULL)
parse_name_and_email(name2, &name2, &email2, 1);
@@ -175,8 +157,7 @@ static void read_mailmap_line(struct string_list *map, char *buffer,
add_mapping(map, name1, email1, name2, email2);
}
-static int read_mailmap_file(struct string_list *map, const char *filename,
- char **repo_abbrev)
+static int read_mailmap_file(struct string_list *map, const char *filename)
{
char buffer[1024];
FILE *f;
@@ -192,13 +173,12 @@ static int read_mailmap_file(struct string_list *map, const char *filename,
}
while (fgets(buffer, sizeof(buffer), f) != NULL)
- read_mailmap_line(map, buffer, repo_abbrev);
+ read_mailmap_line(map, buffer);
fclose(f);
return 0;
}
-static void read_mailmap_string(struct string_list *map, char *buf,
- char **repo_abbrev)
+static void read_mailmap_string(struct string_list *map, char *buf)
{
while (*buf) {
char *end = strchrnul(buf, '\n');
@@ -206,14 +186,12 @@ static void read_mailmap_string(struct string_list *map, char *buf,
if (*end)
*end++ = '\0';
- read_mailmap_line(map, buf, repo_abbrev);
+ read_mailmap_line(map, buf);
buf = end;
}
}
-static int read_mailmap_blob(struct string_list *map,
- const char *name,
- char **repo_abbrev)
+static int read_mailmap_blob(struct string_list *map, const char *name)
{
struct object_id oid;
char *buf;
@@ -231,13 +209,13 @@ static int read_mailmap_blob(struct string_list *map,
if (type != OBJ_BLOB)
return error("mailmap is not a blob: %s", name);
- read_mailmap_string(map, buf, repo_abbrev);
+ read_mailmap_string(map, buf);
free(buf);
return 0;
}
-int read_mailmap(struct string_list *map, char **repo_abbrev)
+int read_mailmap(struct string_list *map)
{
int err = 0;
@@ -247,10 +225,11 @@ int read_mailmap(struct string_list *map, char **repo_abbrev)
if (!git_mailmap_blob && is_bare_repository())
git_mailmap_blob = "HEAD:.mailmap";
- err |= read_mailmap_file(map, ".mailmap", repo_abbrev);
+ if (!startup_info->have_repository || !is_bare_repository())
+ err |= read_mailmap_file(map, ".mailmap");
if (startup_info->have_repository)
- err |= read_mailmap_blob(map, git_mailmap_blob, repo_abbrev);
- err |= read_mailmap_file(map, git_mailmap_file, repo_abbrev);
+ err |= read_mailmap_blob(map, git_mailmap_blob);
+ err |= read_mailmap_file(map, git_mailmap_file);
return err;
}
diff --git a/mailmap.h b/mailmap.h
index d0e6564..7e99fcc 100644
--- a/mailmap.h
+++ b/mailmap.h
@@ -3,7 +3,7 @@
struct string_list;
-int read_mailmap(struct string_list *map, char **repo_abbrev);
+int read_mailmap(struct string_list *map);
void clear_mailmap(struct string_list *map);
int map_user(struct string_list *map,
diff --git a/mem-pool.c b/mem-pool.c
index 8401761..ccdcad2 100644
--- a/mem-pool.c
+++ b/mem-pool.c
@@ -5,7 +5,7 @@
#include "cache.h"
#include "mem-pool.h"
-#define BLOCK_GROWTH_SIZE 1024*1024 - sizeof(struct mp_block);
+#define BLOCK_GROWTH_SIZE (1024 * 1024 - sizeof(struct mp_block))
/*
* Allocate a new mp_block and insert it after the block specified in
diff --git a/merge-ort.c b/merge-ort.c
index b487901..92dea35 100644
--- a/merge-ort.c
+++ b/merge-ort.c
@@ -17,20 +17,3500 @@
#include "cache.h"
#include "merge-ort.h"
+#include "alloc.h"
+#include "blob.h"
+#include "cache-tree.h"
+#include "commit.h"
+#include "commit-reach.h"
+#include "diff.h"
+#include "diffcore.h"
+#include "dir.h"
+#include "ll-merge.h"
+#include "object-store.h"
+#include "revision.h"
+#include "strmap.h"
+#include "submodule.h"
+#include "tree.h"
+#include "unpack-trees.h"
+#include "xdiff-interface.h"
+
+/*
+ * We have many arrays of size 3. Whenever we have such an array, the
+ * indices refer to one of the sides of the three-way merge. This is so
+ * pervasive that the constants 0, 1, and 2 are used in many places in the
+ * code (especially in arithmetic operations to find the other side's index
+ * or to compute a relevant mask), but sometimes these enum names are used
+ * to aid code clarity.
+ *
+ * See also 'filemask' and 'dirmask' in struct conflict_info; the "ith side"
+ * referred to there is one of these three sides.
+ */
+enum merge_side {
+ MERGE_BASE = 0,
+ MERGE_SIDE1 = 1,
+ MERGE_SIDE2 = 2
+};
+
+struct rename_info {
+ /*
+ * All variables that are arrays of size 3 correspond to data tracked
+ * for the sides in enum merge_side. Index 0 is almost always unused
+ * because we often only need to track information for MERGE_SIDE1 and
+ * MERGE_SIDE2 (MERGE_BASE can't have rename information since renames
+ * are determined relative to what changed since the MERGE_BASE).
+ */
+
+ /*
+ * pairs: pairing of filenames from diffcore_rename()
+ */
+ struct diff_queue_struct pairs[3];
+
+ /*
+ * dirs_removed: directories removed on a given side of history.
+ */
+ struct strset dirs_removed[3];
+
+ /*
+ * dir_rename_count: tracking where parts of a directory were renamed to
+ *
+ * When files in a directory are renamed, they may not all go to the
+ * same location. Each strmap here tracks:
+ * old_dir => {new_dir => int}
+ * That is, dir_rename_count[side] is a strmap to a strintmap.
+ */
+ struct strmap dir_rename_count[3];
+
+ /*
+ * dir_renames: computed directory renames
+ *
+ * This is a map of old_dir => new_dir and is derived in part from
+ * dir_rename_count.
+ */
+ struct strmap dir_renames[3];
+
+ /*
+ * needed_limit: value needed for inexact rename detection to run
+ *
+ * If the current rename limit wasn't high enough for inexact
+ * rename detection to run, this records the limit needed. Otherwise,
+ * this value remains 0.
+ */
+ int needed_limit;
+};
+
+struct merge_options_internal {
+ /*
+ * paths: primary data structure in all of merge ort.
+ *
+ * The keys of paths:
+ * * are full relative paths from the toplevel of the repository
+ * (e.g. "drivers/firmware/raspberrypi.c").
+ * * store all relevant paths in the repo, both directories and
+ * files (e.g. drivers, drivers/firmware would also be included)
+ * * these keys serve to intern all the path strings, which allows
+ * us to do pointer comparison on directory names instead of
+ * strcmp; we just have to be careful to use the interned strings.
+ * (Technically paths_to_free may track some strings that were
+ * removed from froms paths.)
+ *
+ * The values of paths:
+ * * either a pointer to a merged_info, or a conflict_info struct
+ * * merged_info contains all relevant information for a
+ * non-conflicted entry.
+ * * conflict_info contains a merged_info, plus any additional
+ * information about a conflict such as the higher orders stages
+ * involved and the names of the paths those came from (handy
+ * once renames get involved).
+ * * a path may start "conflicted" (i.e. point to a conflict_info)
+ * and then a later step (e.g. three-way content merge) determines
+ * it can be cleanly merged, at which point it'll be marked clean
+ * and the algorithm will ignore any data outside the contained
+ * merged_info for that entry
+ * * If an entry remains conflicted, the merged_info portion of a
+ * conflict_info will later be filled with whatever version of
+ * the file should be placed in the working directory (e.g. an
+ * as-merged-as-possible variation that contains conflict markers).
+ */
+ struct strmap paths;
+
+ /*
+ * conflicted: a subset of keys->values from "paths"
+ *
+ * conflicted is basically an optimization between process_entries()
+ * and record_conflicted_index_entries(); the latter could loop over
+ * ALL the entries in paths AGAIN and look for the ones that are
+ * still conflicted, but since process_entries() has to loop over
+ * all of them, it saves the ones it couldn't resolve in this strmap
+ * so that record_conflicted_index_entries() can iterate just the
+ * relevant entries.
+ */
+ struct strmap conflicted;
+
+ /*
+ * paths_to_free: additional list of strings to free
+ *
+ * If keys are removed from "paths", they are added to paths_to_free
+ * to ensure they are later freed. We avoid free'ing immediately since
+ * other places (e.g. conflict_info.pathnames[]) may still be
+ * referencing these paths.
+ */
+ struct string_list paths_to_free;
+
+ /*
+ * output: special messages and conflict notices for various paths
+ *
+ * This is a map of pathnames (a subset of the keys in "paths" above)
+ * to strbufs. It gathers various warning/conflict/notice messages
+ * for later processing.
+ */
+ struct strmap output;
+
+ /*
+ * renames: various data relating to rename detection
+ */
+ struct rename_info renames;
+
+ /*
+ * current_dir_name, toplevel_dir: temporary vars
+ *
+ * These are used in collect_merge_info_callback(), and will set the
+ * various merged_info.directory_name for the various paths we get;
+ * see documentation for that variable and the requirements placed on
+ * that field.
+ */
+ const char *current_dir_name;
+ const char *toplevel_dir;
+
+ /* call_depth: recursion level counter for merging merge bases */
+ int call_depth;
+};
+
+struct version_info {
+ struct object_id oid;
+ unsigned short mode;
+};
+
+struct merged_info {
+ /* if is_null, ignore result. otherwise result has oid & mode */
+ struct version_info result;
+ unsigned is_null:1;
+
+ /*
+ * clean: whether the path in question is cleanly merged.
+ *
+ * see conflict_info.merged for more details.
+ */
+ unsigned clean:1;
+
+ /*
+ * basename_offset: offset of basename of path.
+ *
+ * perf optimization to avoid recomputing offset of final '/'
+ * character in pathname (0 if no '/' in pathname).
+ */
+ size_t basename_offset;
+
+ /*
+ * directory_name: containing directory name.
+ *
+ * Note that we assume directory_name is constructed such that
+ * strcmp(dir1_name, dir2_name) == 0 iff dir1_name == dir2_name,
+ * i.e. string equality is equivalent to pointer equality. For this
+ * to hold, we have to be careful setting directory_name.
+ */
+ const char *directory_name;
+};
+
+struct conflict_info {
+ /*
+ * merged: the version of the path that will be written to working tree
+ *
+ * WARNING: It is critical to check merged.clean and ensure it is 0
+ * before reading any conflict_info fields outside of merged.
+ * Allocated merge_info structs will always have clean set to 1.
+ * Allocated conflict_info structs will have merged.clean set to 0
+ * initially. The merged.clean field is how we know if it is safe
+ * to access other parts of conflict_info besides merged; if a
+ * conflict_info's merged.clean is changed to 1, the rest of the
+ * algorithm is not allowed to look at anything outside of the
+ * merged member anymore.
+ */
+ struct merged_info merged;
+
+ /* oids & modes from each of the three trees for this path */
+ struct version_info stages[3];
+
+ /* pathnames for each stage; may differ due to rename detection */
+ const char *pathnames[3];
+
+ /* Whether this path is/was involved in a directory/file conflict */
+ unsigned df_conflict:1;
+
+ /*
+ * Whether this path is/was involved in a non-content conflict other
+ * than a directory/file conflict (e.g. rename/rename, rename/delete,
+ * file location based on possible directory rename).
+ */
+ unsigned path_conflict:1;
+
+ /*
+ * For filemask and dirmask, the ith bit corresponds to whether the
+ * ith entry is a file (filemask) or a directory (dirmask). Thus,
+ * filemask & dirmask is always zero, and filemask | dirmask is at
+ * most 7 but can be less when a path does not appear as either a
+ * file or a directory on at least one side of history.
+ *
+ * Note that these masks are related to enum merge_side, as the ith
+ * entry corresponds to side i.
+ *
+ * These values come from a traverse_trees() call; more info may be
+ * found looking at tree-walk.h's struct traverse_info,
+ * particularly the documentation above the "fn" member (note that
+ * filemask = mask & ~dirmask from that documentation).
+ */
+ unsigned filemask:3;
+ unsigned dirmask:3;
+
+ /*
+ * Optimization to track which stages match, to avoid the need to
+ * recompute it in multiple steps. Either 0 or at least 2 bits are
+ * set; if at least 2 bits are set, their corresponding stages match.
+ */
+ unsigned match_mask:3;
+};
+
+/*** Function Grouping: various utility functions ***/
+
+/*
+ * For the next three macros, see warning for conflict_info.merged.
+ *
+ * In each of the below, mi is a struct merged_info*, and ci was defined
+ * as a struct conflict_info* (but we need to verify ci isn't actually
+ * pointed at a struct merged_info*).
+ *
+ * INITIALIZE_CI: Assign ci to mi but only if it's safe; set to NULL otherwise.
+ * VERIFY_CI: Ensure that something we assigned to a conflict_info* is one.
+ * ASSIGN_AND_VERIFY_CI: Similar to VERIFY_CI but do assignment first.
+ */
+#define INITIALIZE_CI(ci, mi) do { \
+ (ci) = (!(mi) || (mi)->clean) ? NULL : (struct conflict_info *)(mi); \
+} while (0)
+#define VERIFY_CI(ci) assert(ci && !ci->merged.clean);
+#define ASSIGN_AND_VERIFY_CI(ci, mi) do { \
+ (ci) = (struct conflict_info *)(mi); \
+ assert((ci) && !(mi)->clean); \
+} while (0)
+
+static void free_strmap_strings(struct strmap *map)
+{
+ struct hashmap_iter iter;
+ struct strmap_entry *entry;
+
+ strmap_for_each_entry(map, &iter, entry) {
+ free((char*)entry->key);
+ }
+}
+
+static void clear_or_reinit_internal_opts(struct merge_options_internal *opti,
+ int reinitialize)
+{
+ struct rename_info *renames = &opti->renames;
+ int i;
+ void (*strmap_func)(struct strmap *, int) =
+ reinitialize ? strmap_partial_clear : strmap_clear;
+ void (*strset_func)(struct strset *) =
+ reinitialize ? strset_partial_clear : strset_clear;
+
+ /*
+ * We marked opti->paths with strdup_strings = 0, so that we
+ * wouldn't have to make another copy of the fullpath created by
+ * make_traverse_path from setup_path_info(). But, now that we've
+ * used it and have no other references to these strings, it is time
+ * to deallocate them.
+ */
+ free_strmap_strings(&opti->paths);
+ strmap_func(&opti->paths, 1);
+
+ /*
+ * All keys and values in opti->conflicted are a subset of those in
+ * opti->paths. We don't want to deallocate anything twice, so we
+ * don't free the keys and we pass 0 for free_values.
+ */
+ strmap_func(&opti->conflicted, 0);
+
+ /*
+ * opti->paths_to_free is similar to opti->paths; we created it with
+ * strdup_strings = 0 to avoid making _another_ copy of the fullpath
+ * but now that we've used it and have no other references to these
+ * strings, it is time to deallocate them. We do so by temporarily
+ * setting strdup_strings to 1.
+ */
+ opti->paths_to_free.strdup_strings = 1;
+ string_list_clear(&opti->paths_to_free, 0);
+ opti->paths_to_free.strdup_strings = 0;
+
+ /* Free memory used by various renames maps */
+ for (i = MERGE_SIDE1; i <= MERGE_SIDE2; ++i) {
+ struct hashmap_iter iter;
+ struct strmap_entry *entry;
+
+ strset_func(&renames->dirs_removed[i]);
+
+ strmap_for_each_entry(&renames->dir_rename_count[i],
+ &iter, entry) {
+ struct strintmap *counts = entry->value;
+ strintmap_clear(counts);
+ }
+ strmap_func(&renames->dir_rename_count[i], 1);
+
+ strmap_func(&renames->dir_renames[i], 0);
+ }
+
+ if (!reinitialize) {
+ struct hashmap_iter iter;
+ struct strmap_entry *e;
+
+ /* Release and free each strbuf found in output */
+ strmap_for_each_entry(&opti->output, &iter, e) {
+ struct strbuf *sb = e->value;
+ strbuf_release(sb);
+ /*
+ * While strictly speaking we don't need to free(sb)
+ * here because we could pass free_values=1 when
+ * calling strmap_clear() on opti->output, that would
+ * require strmap_clear to do another
+ * strmap_for_each_entry() loop, so we just free it
+ * while we're iterating anyway.
+ */
+ free(sb);
+ }
+ strmap_clear(&opti->output, 0);
+ }
+}
+
+static int err(struct merge_options *opt, const char *err, ...)
+{
+ va_list params;
+ struct strbuf sb = STRBUF_INIT;
+
+ strbuf_addstr(&sb, "error: ");
+ va_start(params, err);
+ strbuf_vaddf(&sb, err, params);
+ va_end(params);
+
+ error("%s", sb.buf);
+ strbuf_release(&sb);
+
+ return -1;
+}
+
+static void format_commit(struct strbuf *sb,
+ int indent,
+ struct commit *commit)
+{
+ struct merge_remote_desc *desc;
+ struct pretty_print_context ctx = {0};
+ ctx.abbrev = DEFAULT_ABBREV;
+
+ strbuf_addchars(sb, ' ', indent);
+ desc = merge_remote_util(commit);
+ if (desc) {
+ strbuf_addf(sb, "virtual %s\n", desc->name);
+ return;
+ }
+
+ format_commit_message(commit, "%h %s", sb, &ctx);
+ strbuf_addch(sb, '\n');
+}
+
+__attribute__((format (printf, 4, 5)))
+static void path_msg(struct merge_options *opt,
+ const char *path,
+ int omittable_hint, /* skippable under --remerge-diff */
+ const char *fmt, ...)
+{
+ va_list ap;
+ struct strbuf *sb = strmap_get(&opt->priv->output, path);
+ if (!sb) {
+ sb = xmalloc(sizeof(*sb));
+ strbuf_init(sb, 0);
+ strmap_put(&opt->priv->output, path, sb);
+ }
+
+ va_start(ap, fmt);
+ strbuf_vaddf(sb, fmt, ap);
+ va_end(ap);
+
+ strbuf_addch(sb, '\n');
+}
+
+/* add a string to a strbuf, but converting "/" to "_" */
+static void add_flattened_path(struct strbuf *out, const char *s)
+{
+ size_t i = out->len;
+ strbuf_addstr(out, s);
+ for (; i < out->len; i++)
+ if (out->buf[i] == '/')
+ out->buf[i] = '_';
+}
+
+static char *unique_path(struct strmap *existing_paths,
+ const char *path,
+ const char *branch)
+{
+ struct strbuf newpath = STRBUF_INIT;
+ int suffix = 0;
+ size_t base_len;
+
+ strbuf_addf(&newpath, "%s~", path);
+ add_flattened_path(&newpath, branch);
+
+ base_len = newpath.len;
+ while (strmap_contains(existing_paths, newpath.buf)) {
+ strbuf_setlen(&newpath, base_len);
+ strbuf_addf(&newpath, "_%d", suffix++);
+ }
+
+ return strbuf_detach(&newpath, NULL);
+}
+
+/*** Function Grouping: functions related to collect_merge_info() ***/
+
+static void setup_path_info(struct merge_options *opt,
+ struct string_list_item *result,
+ const char *current_dir_name,
+ int current_dir_name_len,
+ char *fullpath, /* we'll take over ownership */
+ struct name_entry *names,
+ struct name_entry *merged_version,
+ unsigned is_null, /* boolean */
+ unsigned df_conflict, /* boolean */
+ unsigned filemask,
+ unsigned dirmask,
+ int resolved /* boolean */)
+{
+ /* result->util is void*, so mi is a convenience typed variable */
+ struct merged_info *mi;
+
+ assert(!is_null || resolved);
+ assert(!df_conflict || !resolved); /* df_conflict implies !resolved */
+ assert(resolved == (merged_version != NULL));
+
+ mi = xcalloc(1, resolved ? sizeof(struct merged_info) :
+ sizeof(struct conflict_info));
+ mi->directory_name = current_dir_name;
+ mi->basename_offset = current_dir_name_len;
+ mi->clean = !!resolved;
+ if (resolved) {
+ mi->result.mode = merged_version->mode;
+ oidcpy(&mi->result.oid, &merged_version->oid);
+ mi->is_null = !!is_null;
+ } else {
+ int i;
+ struct conflict_info *ci;
+
+ ASSIGN_AND_VERIFY_CI(ci, mi);
+ for (i = MERGE_BASE; i <= MERGE_SIDE2; i++) {
+ ci->pathnames[i] = fullpath;
+ ci->stages[i].mode = names[i].mode;
+ oidcpy(&ci->stages[i].oid, &names[i].oid);
+ }
+ ci->filemask = filemask;
+ ci->dirmask = dirmask;
+ ci->df_conflict = !!df_conflict;
+ if (dirmask)
+ /*
+ * Assume is_null for now, but if we have entries
+ * under the directory then when it is complete in
+ * write_completed_directory() it'll update this.
+ * Also, for D/F conflicts, we have to handle the
+ * directory first, then clear this bit and process
+ * the file to see how it is handled -- that occurs
+ * near the top of process_entry().
+ */
+ mi->is_null = 1;
+ }
+ strmap_put(&opt->priv->paths, fullpath, mi);
+ result->string = fullpath;
+ result->util = mi;
+}
+
+static void add_pair(struct merge_options *opt,
+ struct name_entry *names,
+ const char *pathname,
+ unsigned side,
+ unsigned is_add /* if false, is_delete */)
+{
+ struct diff_filespec *one, *two;
+ struct rename_info *renames = &opt->priv->renames;
+ int names_idx = is_add ? side : 0;
+
+ one = alloc_filespec(pathname);
+ two = alloc_filespec(pathname);
+ fill_filespec(is_add ? two : one,
+ &names[names_idx].oid, 1, names[names_idx].mode);
+ diff_queue(&renames->pairs[side], one, two);
+}
+
+static void collect_rename_info(struct merge_options *opt,
+ struct name_entry *names,
+ const char *dirname,
+ const char *fullname,
+ unsigned filemask,
+ unsigned dirmask,
+ unsigned match_mask)
+{
+ struct rename_info *renames = &opt->priv->renames;
+ unsigned side;
+
+ /* Update dirs_removed, as needed */
+ if (dirmask == 1 || dirmask == 3 || dirmask == 5) {
+ /* absent_mask = 0x07 - dirmask; sides = absent_mask/2 */
+ unsigned sides = (0x07 - dirmask)/2;
+ if (sides & 1)
+ strset_add(&renames->dirs_removed[1], fullname);
+ if (sides & 2)
+ strset_add(&renames->dirs_removed[2], fullname);
+ }
+
+ if (filemask == 0 || filemask == 7)
+ return;
+
+ for (side = MERGE_SIDE1; side <= MERGE_SIDE2; ++side) {
+ unsigned side_mask = (1 << side);
+
+ /* Check for deletion on side */
+ if ((filemask & 1) && !(filemask & side_mask))
+ add_pair(opt, names, fullname, side, 0 /* delete */);
+
+ /* Check for addition on side */
+ if (!(filemask & 1) && (filemask & side_mask))
+ add_pair(opt, names, fullname, side, 1 /* add */);
+ }
+}
+
+static int collect_merge_info_callback(int n,
+ unsigned long mask,
+ unsigned long dirmask,
+ struct name_entry *names,
+ struct traverse_info *info)
+{
+ /*
+ * n is 3. Always.
+ * common ancestor (mbase) has mask 1, and stored in index 0 of names
+ * head of side 1 (side1) has mask 2, and stored in index 1 of names
+ * head of side 2 (side2) has mask 4, and stored in index 2 of names
+ */
+ struct merge_options *opt = info->data;
+ struct merge_options_internal *opti = opt->priv;
+ struct string_list_item pi; /* Path Info */
+ struct conflict_info *ci; /* typed alias to pi.util (which is void*) */
+ struct name_entry *p;
+ size_t len;
+ char *fullpath;
+ const char *dirname = opti->current_dir_name;
+ unsigned filemask = mask & ~dirmask;
+ unsigned match_mask = 0; /* will be updated below */
+ unsigned mbase_null = !(mask & 1);
+ unsigned side1_null = !(mask & 2);
+ unsigned side2_null = !(mask & 4);
+ unsigned side1_matches_mbase = (!side1_null && !mbase_null &&
+ names[0].mode == names[1].mode &&
+ oideq(&names[0].oid, &names[1].oid));
+ unsigned side2_matches_mbase = (!side2_null && !mbase_null &&
+ names[0].mode == names[2].mode &&
+ oideq(&names[0].oid, &names[2].oid));
+ unsigned sides_match = (!side1_null && !side2_null &&
+ names[1].mode == names[2].mode &&
+ oideq(&names[1].oid, &names[2].oid));
+
+ /*
+ * Note: When a path is a file on one side of history and a directory
+ * in another, we have a directory/file conflict. In such cases, if
+ * the conflict doesn't resolve from renames and deletions, then we
+ * always leave directories where they are and move files out of the
+ * way. Thus, while struct conflict_info has a df_conflict field to
+ * track such conflicts, we ignore that field for any directories at
+ * a path and only pay attention to it for files at the given path.
+ * The fact that we leave directories were they are also means that
+ * we do not need to worry about getting additional df_conflict
+ * information propagated from parent directories down to children
+ * (unlike, say traverse_trees_recursive() in unpack-trees.c, which
+ * sets a newinfo.df_conflicts field specifically to propagate it).
+ */
+ unsigned df_conflict = (filemask != 0) && (dirmask != 0);
+
+ /* n = 3 is a fundamental assumption. */
+ if (n != 3)
+ BUG("Called collect_merge_info_callback wrong");
+
+ /*
+ * A bunch of sanity checks verifying that traverse_trees() calls
+ * us the way I expect. Could just remove these at some point,
+ * though maybe they are helpful to future code readers.
+ */
+ assert(mbase_null == is_null_oid(&names[0].oid));
+ assert(side1_null == is_null_oid(&names[1].oid));
+ assert(side2_null == is_null_oid(&names[2].oid));
+ assert(!mbase_null || !side1_null || !side2_null);
+ assert(mask > 0 && mask < 8);
+
+ /* Determine match_mask */
+ if (side1_matches_mbase)
+ match_mask = (side2_matches_mbase ? 7 : 3);
+ else if (side2_matches_mbase)
+ match_mask = 5;
+ else if (sides_match)
+ match_mask = 6;
+
+ /*
+ * Get the name of the relevant filepath, which we'll pass to
+ * setup_path_info() for tracking.
+ */
+ p = names;
+ while (!p->mode)
+ p++;
+ len = traverse_path_len(info, p->pathlen);
+
+ /* +1 in both of the following lines to include the NUL byte */
+ fullpath = xmalloc(len + 1);
+ make_traverse_path(fullpath, len + 1, info, p->path, p->pathlen);
+
+ /*
+ * If mbase, side1, and side2 all match, we can resolve early. Even
+ * if these are trees, there will be no renames or anything
+ * underneath.
+ */
+ if (side1_matches_mbase && side2_matches_mbase) {
+ /* mbase, side1, & side2 all match; use mbase as resolution */
+ setup_path_info(opt, &pi, dirname, info->pathlen, fullpath,
+ names, names+0, mbase_null, 0,
+ filemask, dirmask, 1);
+ return mask;
+ }
+
+ /*
+ * Gather additional information used in rename detection.
+ */
+ collect_rename_info(opt, names, dirname, fullpath,
+ filemask, dirmask, match_mask);
+
+ /*
+ * Record information about the path so we can resolve later in
+ * process_entries.
+ */
+ setup_path_info(opt, &pi, dirname, info->pathlen, fullpath,
+ names, NULL, 0, df_conflict, filemask, dirmask, 0);
+
+ ci = pi.util;
+ VERIFY_CI(ci);
+ ci->match_mask = match_mask;
+
+ /* If dirmask, recurse into subdirectories */
+ if (dirmask) {
+ struct traverse_info newinfo;
+ struct tree_desc t[3];
+ void *buf[3] = {NULL, NULL, NULL};
+ const char *original_dir_name;
+ int i, ret;
+
+ ci->match_mask &= filemask;
+ newinfo = *info;
+ newinfo.prev = info;
+ newinfo.name = p->path;
+ newinfo.namelen = p->pathlen;
+ newinfo.pathlen = st_add3(newinfo.pathlen, p->pathlen, 1);
+ /*
+ * If this directory we are about to recurse into cared about
+ * its parent directory (the current directory) having a D/F
+ * conflict, then we'd propagate the masks in this way:
+ * newinfo.df_conflicts |= (mask & ~dirmask);
+ * But we don't worry about propagating D/F conflicts. (See
+ * comment near setting of local df_conflict variable near
+ * the beginning of this function).
+ */
+
+ for (i = MERGE_BASE; i <= MERGE_SIDE2; i++) {
+ if (i == 1 && side1_matches_mbase)
+ t[1] = t[0];
+ else if (i == 2 && side2_matches_mbase)
+ t[2] = t[0];
+ else if (i == 2 && sides_match)
+ t[2] = t[1];
+ else {
+ const struct object_id *oid = NULL;
+ if (dirmask & 1)
+ oid = &names[i].oid;
+ buf[i] = fill_tree_descriptor(opt->repo,
+ t + i, oid);
+ }
+ dirmask >>= 1;
+ }
+
+ original_dir_name = opti->current_dir_name;
+ opti->current_dir_name = pi.string;
+ ret = traverse_trees(NULL, 3, t, &newinfo);
+ opti->current_dir_name = original_dir_name;
+
+ for (i = MERGE_BASE; i <= MERGE_SIDE2; i++)
+ free(buf[i]);
+
+ if (ret < 0)
+ return -1;
+ }
+
+ return mask;
+}
+
+static int collect_merge_info(struct merge_options *opt,
+ struct tree *merge_base,
+ struct tree *side1,
+ struct tree *side2)
+{
+ int ret;
+ struct tree_desc t[3];
+ struct traverse_info info;
+
+ opt->priv->toplevel_dir = "";
+ opt->priv->current_dir_name = opt->priv->toplevel_dir;
+ setup_traverse_info(&info, opt->priv->toplevel_dir);
+ info.fn = collect_merge_info_callback;
+ info.data = opt;
+ info.show_all_errors = 1;
+
+ parse_tree(merge_base);
+ parse_tree(side1);
+ parse_tree(side2);
+ init_tree_desc(t + 0, merge_base->buffer, merge_base->size);
+ init_tree_desc(t + 1, side1->buffer, side1->size);
+ init_tree_desc(t + 2, side2->buffer, side2->size);
+
+ trace2_region_enter("merge", "traverse_trees", opt->repo);
+ ret = traverse_trees(NULL, 3, t, &info);
+ trace2_region_leave("merge", "traverse_trees", opt->repo);
+
+ return ret;
+}
+
+/*** Function Grouping: functions related to threeway content merges ***/
+
+static int find_first_merges(struct repository *repo,
+ const char *path,
+ struct commit *a,
+ struct commit *b,
+ struct object_array *result)
+{
+ int i, j;
+ struct object_array merges = OBJECT_ARRAY_INIT;
+ struct commit *commit;
+ int contains_another;
+
+ char merged_revision[GIT_MAX_HEXSZ + 2];
+ const char *rev_args[] = { "rev-list", "--merges", "--ancestry-path",
+ "--all", merged_revision, NULL };
+ struct rev_info revs;
+ struct setup_revision_opt rev_opts;
+
+ memset(result, 0, sizeof(struct object_array));
+ memset(&rev_opts, 0, sizeof(rev_opts));
+
+ /* get all revisions that merge commit a */
+ xsnprintf(merged_revision, sizeof(merged_revision), "^%s",
+ oid_to_hex(&a->object.oid));
+ repo_init_revisions(repo, &revs, NULL);
+ rev_opts.submodule = path;
+ /* FIXME: can't handle linked worktrees in submodules yet */
+ revs.single_worktree = path != NULL;
+ setup_revisions(ARRAY_SIZE(rev_args)-1, rev_args, &revs, &rev_opts);
+
+ /* save all revisions from the above list that contain b */
+ if (prepare_revision_walk(&revs))
+ die("revision walk setup failed");
+ while ((commit = get_revision(&revs)) != NULL) {
+ struct object *o = &(commit->object);
+ if (in_merge_bases(b, commit))
+ add_object_array(o, NULL, &merges);
+ }
+ reset_revision_walk();
+
+ /* Now we've got all merges that contain a and b. Prune all
+ * merges that contain another found merge and save them in
+ * result.
+ */
+ for (i = 0; i < merges.nr; i++) {
+ struct commit *m1 = (struct commit *) merges.objects[i].item;
+
+ contains_another = 0;
+ for (j = 0; j < merges.nr; j++) {
+ struct commit *m2 = (struct commit *) merges.objects[j].item;
+ if (i != j && in_merge_bases(m2, m1)) {
+ contains_another = 1;
+ break;
+ }
+ }
+
+ if (!contains_another)
+ add_object_array(merges.objects[i].item, NULL, result);
+ }
+
+ object_array_clear(&merges);
+ return result->nr;
+}
+
+static int merge_submodule(struct merge_options *opt,
+ const char *path,
+ const struct object_id *o,
+ const struct object_id *a,
+ const struct object_id *b,
+ struct object_id *result)
+{
+ struct commit *commit_o, *commit_a, *commit_b;
+ int parent_count;
+ struct object_array merges;
+ struct strbuf sb = STRBUF_INIT;
+
+ int i;
+ int search = !opt->priv->call_depth;
+
+ /* store fallback answer in result in case we fail */
+ oidcpy(result, opt->priv->call_depth ? o : a);
+
+ /* we can not handle deletion conflicts */
+ if (is_null_oid(o))
+ return 0;
+ if (is_null_oid(a))
+ return 0;
+ if (is_null_oid(b))
+ return 0;
+
+ if (add_submodule_odb(path)) {
+ path_msg(opt, path, 0,
+ _("Failed to merge submodule %s (not checked out)"),
+ path);
+ return 0;
+ }
+
+ if (!(commit_o = lookup_commit_reference(opt->repo, o)) ||
+ !(commit_a = lookup_commit_reference(opt->repo, a)) ||
+ !(commit_b = lookup_commit_reference(opt->repo, b))) {
+ path_msg(opt, path, 0,
+ _("Failed to merge submodule %s (commits not present)"),
+ path);
+ return 0;
+ }
+
+ /* check whether both changes are forward */
+ if (!in_merge_bases(commit_o, commit_a) ||
+ !in_merge_bases(commit_o, commit_b)) {
+ path_msg(opt, path, 0,
+ _("Failed to merge submodule %s "
+ "(commits don't follow merge-base)"),
+ path);
+ return 0;
+ }
+
+ /* Case #1: a is contained in b or vice versa */
+ if (in_merge_bases(commit_a, commit_b)) {
+ oidcpy(result, b);
+ path_msg(opt, path, 1,
+ _("Note: Fast-forwarding submodule %s to %s"),
+ path, oid_to_hex(b));
+ return 1;
+ }
+ if (in_merge_bases(commit_b, commit_a)) {
+ oidcpy(result, a);
+ path_msg(opt, path, 1,
+ _("Note: Fast-forwarding submodule %s to %s"),
+ path, oid_to_hex(a));
+ return 1;
+ }
+
+ /*
+ * Case #2: There are one or more merges that contain a and b in
+ * the submodule. If there is only one, then present it as a
+ * suggestion to the user, but leave it marked unmerged so the
+ * user needs to confirm the resolution.
+ */
+
+ /* Skip the search if makes no sense to the calling context. */
+ if (!search)
+ return 0;
+
+ /* find commit which merges them */
+ parent_count = find_first_merges(opt->repo, path, commit_a, commit_b,
+ &merges);
+ switch (parent_count) {
+ case 0:
+ path_msg(opt, path, 0, _("Failed to merge submodule %s"), path);
+ break;
+
+ case 1:
+ format_commit(&sb, 4,
+ (struct commit *)merges.objects[0].item);
+ path_msg(opt, path, 0,
+ _("Failed to merge submodule %s, but a possible merge "
+ "resolution exists:\n%s\n"),
+ path, sb.buf);
+ path_msg(opt, path, 1,
+ _("If this is correct simply add it to the index "
+ "for example\n"
+ "by using:\n\n"
+ " git update-index --cacheinfo 160000 %s \"%s\"\n\n"
+ "which will accept this suggestion.\n"),
+ oid_to_hex(&merges.objects[0].item->oid), path);
+ strbuf_release(&sb);
+ break;
+ default:
+ for (i = 0; i < merges.nr; i++)
+ format_commit(&sb, 4,
+ (struct commit *)merges.objects[i].item);
+ path_msg(opt, path, 0,
+ _("Failed to merge submodule %s, but multiple "
+ "possible merges exist:\n%s"), path, sb.buf);
+ strbuf_release(&sb);
+ }
+
+ object_array_clear(&merges);
+ return 0;
+}
+
+static int merge_3way(struct merge_options *opt,
+ const char *path,
+ const struct object_id *o,
+ const struct object_id *a,
+ const struct object_id *b,
+ const char *pathnames[3],
+ const int extra_marker_size,
+ mmbuffer_t *result_buf)
+{
+ mmfile_t orig, src1, src2;
+ struct ll_merge_options ll_opts = {0};
+ char *base, *name1, *name2;
+ int merge_status;
+
+ ll_opts.renormalize = opt->renormalize;
+ ll_opts.extra_marker_size = extra_marker_size;
+ ll_opts.xdl_opts = opt->xdl_opts;
+
+ if (opt->priv->call_depth) {
+ ll_opts.virtual_ancestor = 1;
+ ll_opts.variant = 0;
+ } else {
+ switch (opt->recursive_variant) {
+ case MERGE_VARIANT_OURS:
+ ll_opts.variant = XDL_MERGE_FAVOR_OURS;
+ break;
+ case MERGE_VARIANT_THEIRS:
+ ll_opts.variant = XDL_MERGE_FAVOR_THEIRS;
+ break;
+ default:
+ ll_opts.variant = 0;
+ break;
+ }
+ }
+
+ assert(pathnames[0] && pathnames[1] && pathnames[2] && opt->ancestor);
+ if (pathnames[0] == pathnames[1] && pathnames[1] == pathnames[2]) {
+ base = mkpathdup("%s", opt->ancestor);
+ name1 = mkpathdup("%s", opt->branch1);
+ name2 = mkpathdup("%s", opt->branch2);
+ } else {
+ base = mkpathdup("%s:%s", opt->ancestor, pathnames[0]);
+ name1 = mkpathdup("%s:%s", opt->branch1, pathnames[1]);
+ name2 = mkpathdup("%s:%s", opt->branch2, pathnames[2]);
+ }
+
+ read_mmblob(&orig, o);
+ read_mmblob(&src1, a);
+ read_mmblob(&src2, b);
+
+ merge_status = ll_merge(result_buf, path, &orig, base,
+ &src1, name1, &src2, name2,
+ opt->repo->index, &ll_opts);
+
+ free(base);
+ free(name1);
+ free(name2);
+ free(orig.ptr);
+ free(src1.ptr);
+ free(src2.ptr);
+ return merge_status;
+}
+
+static int handle_content_merge(struct merge_options *opt,
+ const char *path,
+ const struct version_info *o,
+ const struct version_info *a,
+ const struct version_info *b,
+ const char *pathnames[3],
+ const int extra_marker_size,
+ struct version_info *result)
+{
+ /*
+ * path is the target location where we want to put the file, and
+ * is used to determine any normalization rules in ll_merge.
+ *
+ * The normal case is that path and all entries in pathnames are
+ * identical, though renames can affect which path we got one of
+ * the three blobs to merge on various sides of history.
+ *
+ * extra_marker_size is the amount to extend conflict markers in
+ * ll_merge; this is neeed if we have content merges of content
+ * merges, which happens for example with rename/rename(2to1) and
+ * rename/add conflicts.
+ */
+ unsigned clean = 1;
+
+ /*
+ * handle_content_merge() needs both files to be of the same type, i.e.
+ * both files OR both submodules OR both symlinks. Conflicting types
+ * needs to be handled elsewhere.
+ */
+ assert((S_IFMT & a->mode) == (S_IFMT & b->mode));
+
+ /* Merge modes */
+ if (a->mode == b->mode || a->mode == o->mode)
+ result->mode = b->mode;
+ else {
+ /* must be the 100644/100755 case */
+ assert(S_ISREG(a->mode));
+ result->mode = a->mode;
+ clean = (b->mode == o->mode);
+ /*
+ * FIXME: If opt->priv->call_depth && !clean, then we really
+ * should not make result->mode match either a->mode or
+ * b->mode; that causes t6036 "check conflicting mode for
+ * regular file" to fail. It would be best to use some other
+ * mode, but we'll confuse all kinds of stuff if we use one
+ * where S_ISREG(result->mode) isn't true, and if we use
+ * something like 0100666, then tree-walk.c's calls to
+ * canon_mode() will just normalize that to 100644 for us and
+ * thus not solve anything.
+ *
+ * Figure out if there's some kind of way we can work around
+ * this...
+ */
+ }
+
+ /*
+ * Trivial oid merge.
+ *
+ * Note: While one might assume that the next four lines would
+ * be unnecessary due to the fact that match_mask is often
+ * setup and already handled, renames don't always take care
+ * of that.
+ */
+ if (oideq(&a->oid, &b->oid) || oideq(&a->oid, &o->oid))
+ oidcpy(&result->oid, &b->oid);
+ else if (oideq(&b->oid, &o->oid))
+ oidcpy(&result->oid, &a->oid);
+
+ /* Remaining rules depend on file vs. submodule vs. symlink. */
+ else if (S_ISREG(a->mode)) {
+ mmbuffer_t result_buf;
+ int ret = 0, merge_status;
+ int two_way;
+
+ /*
+ * If 'o' is different type, treat it as null so we do a
+ * two-way merge.
+ */
+ two_way = ((S_IFMT & o->mode) != (S_IFMT & a->mode));
+
+ merge_status = merge_3way(opt, path,
+ two_way ? &null_oid : &o->oid,
+ &a->oid, &b->oid,
+ pathnames, extra_marker_size,
+ &result_buf);
+
+ if ((merge_status < 0) || !result_buf.ptr)
+ ret = err(opt, _("Failed to execute internal merge"));
+
+ if (!ret &&
+ write_object_file(result_buf.ptr, result_buf.size,
+ blob_type, &result->oid))
+ ret = err(opt, _("Unable to add %s to database"),
+ path);
+
+ free(result_buf.ptr);
+ if (ret)
+ return -1;
+ clean &= (merge_status == 0);
+ path_msg(opt, path, 1, _("Auto-merging %s"), path);
+ } else if (S_ISGITLINK(a->mode)) {
+ int two_way = ((S_IFMT & o->mode) != (S_IFMT & a->mode));
+ clean = merge_submodule(opt, pathnames[0],
+ two_way ? &null_oid : &o->oid,
+ &a->oid, &b->oid, &result->oid);
+ if (opt->priv->call_depth && two_way && !clean) {
+ result->mode = o->mode;
+ oidcpy(&result->oid, &o->oid);
+ }
+ } else if (S_ISLNK(a->mode)) {
+ if (opt->priv->call_depth) {
+ clean = 0;
+ result->mode = o->mode;
+ oidcpy(&result->oid, &o->oid);
+ } else {
+ switch (opt->recursive_variant) {
+ case MERGE_VARIANT_NORMAL:
+ clean = 0;
+ oidcpy(&result->oid, &a->oid);
+ break;
+ case MERGE_VARIANT_OURS:
+ oidcpy(&result->oid, &a->oid);
+ break;
+ case MERGE_VARIANT_THEIRS:
+ oidcpy(&result->oid, &b->oid);
+ break;
+ }
+ }
+ } else
+ BUG("unsupported object type in the tree: %06o for %s",
+ a->mode, path);
+
+ return clean;
+}
+
+/*** Function Grouping: functions related to detect_and_process_renames(), ***
+ *** which are split into directory and regular rename detection sections. ***/
+
+/*** Function Grouping: functions related to directory rename detection ***/
+
+struct collision_info {
+ struct string_list source_files;
+ unsigned reported_already:1;
+};
+
+/*
+ * Return a new string that replaces the beginning portion (which matches
+ * rename_info->key), with rename_info->util.new_dir. In perl-speak:
+ * new_path_name = (old_path =~ s/rename_info->key/rename_info->value/);
+ * NOTE:
+ * Caller must ensure that old_path starts with rename_info->key + '/'.
+ */
+static char *apply_dir_rename(struct strmap_entry *rename_info,
+ const char *old_path)
+{
+ struct strbuf new_path = STRBUF_INIT;
+ const char *old_dir = rename_info->key;
+ const char *new_dir = rename_info->value;
+ int oldlen, newlen, new_dir_len;
+
+ oldlen = strlen(old_dir);
+ if (*new_dir == '\0')
+ /*
+ * If someone renamed/merged a subdirectory into the root
+ * directory (e.g. 'some/subdir' -> ''), then we want to
+ * avoid returning
+ * '' + '/filename'
+ * as the rename; we need to make old_path + oldlen advance
+ * past the '/' character.
+ */
+ oldlen++;
+ new_dir_len = strlen(new_dir);
+ newlen = new_dir_len + (strlen(old_path) - oldlen) + 1;
+ strbuf_grow(&new_path, newlen);
+ strbuf_add(&new_path, new_dir, new_dir_len);
+ strbuf_addstr(&new_path, &old_path[oldlen]);
+
+ return strbuf_detach(&new_path, NULL);
+}
+
+static int path_in_way(struct strmap *paths, const char *path, unsigned side_mask)
+{
+ struct merged_info *mi = strmap_get(paths, path);
+ struct conflict_info *ci;
+ if (!mi)
+ return 0;
+ INITIALIZE_CI(ci, mi);
+ return mi->clean || (side_mask & (ci->filemask | ci->dirmask));
+}
+
+/*
+ * See if there is a directory rename for path, and if there are any file
+ * level conflicts on the given side 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 *opt,
+ const char *path,
+ unsigned side_index,
+ struct strmap_entry *rename_info,
+ struct strmap *collisions)
+{
+ char *new_path = NULL;
+ struct collision_info *c_info;
+ 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(rename_info, path);
+ if (!new_path)
+ BUG("Failed to apply directory rename!");
+
+ /*
+ * 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.
+ */
+ c_info = strmap_get(collisions, new_path);
+ if (c_info == NULL)
+ BUG("c_info 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 (c_info->reported_already) {
+ clean = 0;
+ } else if (path_in_way(&opt->priv->paths, new_path, 1 << side_index)) {
+ c_info->reported_already = 1;
+ strbuf_add_separated_string_list(&collision_paths, ", ",
+ &c_info->source_files);
+ path_msg(opt, new_path, 0,
+ _("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 (c_info->source_files.nr > 1) {
+ c_info->reported_already = 1;
+ strbuf_add_separated_string_list(&collision_paths, ", ",
+ &c_info->source_files);
+ path_msg(opt, new_path, 0,
+ _("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;
+}
+
+static void dirname_munge(char *filename)
+{
+ char *slash = strrchr(filename, '/');
+ if (!slash)
+ slash = filename;
+ *slash = '\0';
+}
+
+static void increment_count(struct strmap *dir_rename_count,
+ char *old_dir,
+ char *new_dir)
+{
+ struct strintmap *counts;
+ struct strmap_entry *e;
+
+ /* Get the {new_dirs -> counts} mapping using old_dir */
+ e = strmap_get_entry(dir_rename_count, old_dir);
+ if (e) {
+ counts = e->value;
+ } else {
+ counts = xmalloc(sizeof(*counts));
+ strintmap_init_with_options(counts, 0, NULL, 1);
+ strmap_put(dir_rename_count, old_dir, counts);
+ }
+
+ /* Increment the count for new_dir */
+ strintmap_incr(counts, new_dir, 1);
+}
+
+static void update_dir_rename_counts(struct strmap *dir_rename_count,
+ struct strset *dirs_removed,
+ const char *oldname,
+ const char *newname)
+{
+ char *old_dir = xstrdup(oldname);
+ char *new_dir = xstrdup(newname);
+ char new_dir_first_char = new_dir[0];
+ int first_time_in_loop = 1;
+
+ while (1) {
+ dirname_munge(old_dir);
+ dirname_munge(new_dir);
+
+ /*
+ * When renaming
+ * "a/b/c/d/e/foo.c" -> "a/b/some/thing/else/e/foo.c"
+ * then this suggests that both
+ * a/b/c/d/e/ => a/b/some/thing/else/e/
+ * a/b/c/d/ => a/b/some/thing/else/
+ * so we want to increment counters for both. We do NOT,
+ * however, also want to suggest that there was the following
+ * rename:
+ * a/b/c/ => a/b/some/thing/
+ * so we need to quit at that point.
+ *
+ * Note the when first_time_in_loop, we only strip off the
+ * basename, and we don't care if that's different.
+ */
+ if (!first_time_in_loop) {
+ char *old_sub_dir = strchr(old_dir, '\0')+1;
+ char *new_sub_dir = strchr(new_dir, '\0')+1;
+ if (!*new_dir) {
+ /*
+ * Special case when renaming to root directory,
+ * i.e. when new_dir == "". In this case, we had
+ * something like
+ * a/b/subdir => subdir
+ * and so dirname_munge() sets things up so that
+ * old_dir = "a/b\0subdir\0"
+ * new_dir = "\0ubdir\0"
+ * We didn't have a '/' to overwrite a '\0' onto
+ * in new_dir, so we have to compare differently.
+ */
+ if (new_dir_first_char != old_sub_dir[0] ||
+ strcmp(old_sub_dir+1, new_sub_dir))
+ break;
+ } else {
+ if (strcmp(old_sub_dir, new_sub_dir))
+ break;
+ }
+ }
+
+ if (strset_contains(dirs_removed, old_dir))
+ increment_count(dir_rename_count, old_dir, new_dir);
+ else
+ break;
+
+ /* If we hit toplevel directory ("") for old or new dir, quit */
+ if (!*old_dir || !*new_dir)
+ break;
+
+ first_time_in_loop = 0;
+ }
+
+ /* Free resources we don't need anymore */
+ free(old_dir);
+ free(new_dir);
+}
+
+static void compute_rename_counts(struct diff_queue_struct *pairs,
+ struct strmap *dir_rename_count,
+ struct strset *dirs_removed)
+{
+ int i;
+
+ for (i = 0; i < pairs->nr; ++i) {
+ struct diff_filepair *pair = pairs->queue[i];
+
+ /* File not part of directory rename if it wasn't renamed */
+ if (pair->status != 'R')
+ continue;
+
+ /*
+ * Make dir_rename_count contain a map of a map:
+ * old_directory -> {new_directory -> count}
+ * In other words, for every pair look at the directories for
+ * the old filename and the new filename and count how many
+ * times that pairing occurs.
+ */
+ update_dir_rename_counts(dir_rename_count, dirs_removed,
+ pair->one->path,
+ pair->two->path);
+ }
+}
+
+static void get_provisional_directory_renames(struct merge_options *opt,
+ unsigned side,
+ int *clean)
+{
+ struct hashmap_iter iter;
+ struct strmap_entry *entry;
+ struct rename_info *renames = &opt->priv->renames;
+
+ compute_rename_counts(&renames->pairs[side],
+ &renames->dir_rename_count[side],
+ &renames->dirs_removed[side]);
+ /*
+ * Collapse
+ * dir_rename_count: old_directory -> {new_directory -> count}
+ * down to
+ * dir_renames: old_directory -> best_new_directory
+ * where best_new_directory is the one with the unique highest count.
+ */
+ strmap_for_each_entry(&renames->dir_rename_count[side], &iter, entry) {
+ const char *source_dir = entry->key;
+ struct strintmap *counts = entry->value;
+ struct hashmap_iter count_iter;
+ struct strmap_entry *count_entry;
+ int max = 0;
+ int bad_max = 0;
+ const char *best = NULL;
+
+ strintmap_for_each_entry(counts, &count_iter, count_entry) {
+ const char *target_dir = count_entry->key;
+ intptr_t count = (intptr_t)count_entry->value;
+
+ if (count == max)
+ bad_max = max;
+ else if (count > max) {
+ max = count;
+ best = target_dir;
+ }
+ }
+
+ if (bad_max == max) {
+ path_msg(opt, source_dir, 0,
+ _("CONFLICT (directory rename split): "
+ "Unclear where to rename %s to; it was "
+ "renamed to multiple other directories, with "
+ "no destination getting a majority of the "
+ "files."),
+ source_dir);
+ /*
+ * We should mark this as unclean IF something attempts
+ * to use this rename. We do not yet have the logic
+ * in place to detect if this directory rename is being
+ * used, and optimizations that reduce the number of
+ * renames cause this to falsely trigger. For now,
+ * just disable it, causing t6423 testcase 2a to break.
+ * We'll later fix the detection, and when we do we
+ * will re-enable setting *clean to 0 (and thereby fix
+ * t6423 testcase 2a).
+ */
+ /* *clean = 0; */
+ } else {
+ strmap_put(&renames->dir_renames[side],
+ source_dir, (void*)best);
+ }
+ }
+}
+
+static void handle_directory_level_conflicts(struct merge_options *opt)
+{
+ struct hashmap_iter iter;
+ struct strmap_entry *entry;
+ struct string_list duplicated = STRING_LIST_INIT_NODUP;
+ struct rename_info *renames = &opt->priv->renames;
+ struct strmap *side1_dir_renames = &renames->dir_renames[MERGE_SIDE1];
+ struct strmap *side2_dir_renames = &renames->dir_renames[MERGE_SIDE2];
+ int i;
+
+ strmap_for_each_entry(side1_dir_renames, &iter, entry) {
+ if (strmap_contains(side2_dir_renames, entry->key))
+ string_list_append(&duplicated, entry->key);
+ }
+
+ for (i = 0; i < duplicated.nr; i++) {
+ strmap_remove(side1_dir_renames, duplicated.items[i].string, 0);
+ strmap_remove(side2_dir_renames, duplicated.items[i].string, 0);
+ }
+ string_list_clear(&duplicated, 0);
+}
+
+static struct strmap_entry *check_dir_renamed(const char *path,
+ struct strmap *dir_renames)
+{
+ char *temp = xstrdup(path);
+ char *end;
+ struct strmap_entry *e = NULL;
+
+ while ((end = strrchr(temp, '/'))) {
+ *end = '\0';
+ e = strmap_get_entry(dir_renames, temp);
+ if (e)
+ break;
+ }
+ free(temp);
+ return e;
+}
+
+static void compute_collisions(struct strmap *collisions,
+ struct strmap *dir_renames,
+ struct diff_queue_struct *pairs)
+{
+ int i;
+
+ strmap_init_with_options(collisions, NULL, 0);
+ if (strmap_empty(dir_renames))
+ return;
+
+ /*
+ * 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.
+ */
+ for (i = 0; i < pairs->nr; ++i) {
+ struct strmap_entry *rename_info;
+ struct collision_info *collision_info;
+ char *new_path;
+ struct diff_filepair *pair = pairs->queue[i];
+
+ if (pair->status != 'A' && pair->status != 'R')
+ continue;
+ rename_info = check_dir_renamed(pair->two->path, dir_renames);
+ if (!rename_info)
+ continue;
+
+ new_path = apply_dir_rename(rename_info, pair->two->path);
+ assert(new_path);
+ collision_info = strmap_get(collisions, new_path);
+ if (collision_info) {
+ free(new_path);
+ } else {
+ CALLOC_ARRAY(collision_info, 1);
+ string_list_init(&collision_info->source_files, 0);
+ strmap_put(collisions, new_path, collision_info);
+ }
+ string_list_insert(&collision_info->source_files,
+ pair->two->path);
+ }
+}
+
+static char *check_for_directory_rename(struct merge_options *opt,
+ const char *path,
+ unsigned side_index,
+ struct strmap *dir_renames,
+ struct strmap *dir_rename_exclusions,
+ struct strmap *collisions,
+ int *clean_merge)
+{
+ char *new_path = NULL;
+ struct strmap_entry *rename_info;
+ struct strmap_entry *otherinfo = NULL;
+ const char *new_dir;
+
+ if (strmap_empty(dir_renames))
+ return new_path;
+ rename_info = check_dir_renamed(path, dir_renames);
+ if (!rename_info)
+ return new_path;
+ /* old_dir = rename_info->key; */
+ new_dir = rename_info->value;
+
+ /*
+ * 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 otherinfo 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.
+ */
+ otherinfo = strmap_get_entry(dir_rename_exclusions, new_dir);
+ if (otherinfo) {
+ path_msg(opt, rename_info->key, 1,
+ _("WARNING: Avoiding applying %s -> %s rename "
+ "to %s, because %s itself was renamed."),
+ rename_info->key, new_dir, path, new_dir);
+ return NULL;
+ }
+
+ new_path = handle_path_level_conflicts(opt, path, side_index,
+ rename_info, collisions);
+ *clean_merge &= (new_path != NULL);
+
+ return new_path;
+}
+
+static void apply_directory_rename_modifications(struct merge_options *opt,
+ struct diff_filepair *pair,
+ char *new_path)
+{
+ /*
+ * The basic idea is to get the conflict_info from opt->priv->paths
+ * at old path, and insert it into new_path; basically just this:
+ * ci = strmap_get(&opt->priv->paths, old_path);
+ * strmap_remove(&opt->priv->paths, old_path, 0);
+ * strmap_put(&opt->priv->paths, new_path, ci);
+ * However, there are some factors complicating this:
+ * - opt->priv->paths may already have an entry at new_path
+ * - Each ci tracks its containing directory, so we need to
+ * update that
+ * - If another ci has the same containing directory, then
+ * the two char*'s MUST point to the same location. See the
+ * comment in struct merged_info. strcmp equality is not
+ * enough; we need pointer equality.
+ * - opt->priv->paths must hold the parent directories of any
+ * entries that are added. So, if this directory rename
+ * causes entirely new directories, we must recursively add
+ * parent directories.
+ * - For each parent directory added to opt->priv->paths, we
+ * also need to get its parent directory stored in its
+ * conflict_info->merged.directory_name with all the same
+ * requirements about pointer equality.
+ */
+ struct string_list dirs_to_insert = STRING_LIST_INIT_NODUP;
+ struct conflict_info *ci, *new_ci;
+ struct strmap_entry *entry;
+ const char *branch_with_new_path, *branch_with_dir_rename;
+ const char *old_path = pair->two->path;
+ const char *parent_name;
+ const char *cur_path;
+ int i, len;
+
+ entry = strmap_get_entry(&opt->priv->paths, old_path);
+ old_path = entry->key;
+ ci = entry->value;
+ VERIFY_CI(ci);
+
+ /* Find parent directories missing from opt->priv->paths */
+ cur_path = new_path;
+ while (1) {
+ /* Find the parent directory of cur_path */
+ char *last_slash = strrchr(cur_path, '/');
+ if (last_slash) {
+ parent_name = xstrndup(cur_path, last_slash - cur_path);
+ } else {
+ parent_name = opt->priv->toplevel_dir;
+ break;
+ }
+
+ /* Look it up in opt->priv->paths */
+ entry = strmap_get_entry(&opt->priv->paths, parent_name);
+ if (entry) {
+ free((char*)parent_name);
+ parent_name = entry->key; /* reuse known pointer */
+ break;
+ }
+
+ /* Record this is one of the directories we need to insert */
+ string_list_append(&dirs_to_insert, parent_name);
+ cur_path = parent_name;
+ }
+
+ /* Traverse dirs_to_insert and insert them into opt->priv->paths */
+ for (i = dirs_to_insert.nr-1; i >= 0; --i) {
+ struct conflict_info *dir_ci;
+ char *cur_dir = dirs_to_insert.items[i].string;
+
+ CALLOC_ARRAY(dir_ci, 1);
+
+ dir_ci->merged.directory_name = parent_name;
+ len = strlen(parent_name);
+ /* len+1 because of trailing '/' character */
+ dir_ci->merged.basename_offset = (len > 0 ? len+1 : len);
+ dir_ci->dirmask = ci->filemask;
+ strmap_put(&opt->priv->paths, cur_dir, dir_ci);
+
+ parent_name = cur_dir;
+ }
+
+ /*
+ * We are removing old_path from opt->priv->paths. old_path also will
+ * eventually need to be freed, but it may still be used by e.g.
+ * ci->pathnames. So, store it in another string-list for now.
+ */
+ string_list_append(&opt->priv->paths_to_free, old_path);
+
+ assert(ci->filemask == 2 || ci->filemask == 4);
+ assert(ci->dirmask == 0);
+ strmap_remove(&opt->priv->paths, old_path, 0);
+
+ branch_with_new_path = (ci->filemask == 2) ? opt->branch1 : opt->branch2;
+ branch_with_dir_rename = (ci->filemask == 2) ? opt->branch2 : opt->branch1;
+
+ /* Now, finally update ci and stick it into opt->priv->paths */
+ ci->merged.directory_name = parent_name;
+ len = strlen(parent_name);
+ ci->merged.basename_offset = (len > 0 ? len+1 : len);
+ new_ci = strmap_get(&opt->priv->paths, new_path);
+ if (!new_ci) {
+ /* Place ci back into opt->priv->paths, but at new_path */
+ strmap_put(&opt->priv->paths, new_path, ci);
+ } else {
+ int index;
+
+ /* A few sanity checks */
+ VERIFY_CI(new_ci);
+ assert(ci->filemask == 2 || ci->filemask == 4);
+ assert((new_ci->filemask & ci->filemask) == 0);
+ assert(!new_ci->merged.clean);
+
+ /* Copy stuff from ci into new_ci */
+ new_ci->filemask |= ci->filemask;
+ if (new_ci->dirmask)
+ new_ci->df_conflict = 1;
+ index = (ci->filemask >> 1);
+ new_ci->pathnames[index] = ci->pathnames[index];
+ new_ci->stages[index].mode = ci->stages[index].mode;
+ oidcpy(&new_ci->stages[index].oid, &ci->stages[index].oid);
+
+ free(ci);
+ ci = new_ci;
+ }
+
+ if (opt->detect_directory_renames == MERGE_DIRECTORY_RENAMES_TRUE) {
+ /* Notify user of updated path */
+ if (pair->status == 'A')
+ path_msg(opt, new_path, 1,
+ _("Path updated: %s added in %s inside a "
+ "directory that was renamed in %s; moving "
+ "it to %s."),
+ old_path, branch_with_new_path,
+ branch_with_dir_rename, new_path);
+ else
+ path_msg(opt, new_path, 1,
+ _("Path updated: %s renamed to %s in %s, "
+ "inside a directory that was renamed in %s; "
+ "moving it to %s."),
+ pair->one->path, old_path, branch_with_new_path,
+ branch_with_dir_rename, new_path);
+ } else {
+ /*
+ * opt->detect_directory_renames has the value
+ * MERGE_DIRECTORY_RENAMES_CONFLICT, so mark these as conflicts.
+ */
+ ci->path_conflict = 1;
+ if (pair->status == 'A')
+ path_msg(opt, new_path, 0,
+ _("CONFLICT (file location): %s added in %s "
+ "inside a directory that was renamed in %s, "
+ "suggesting it should perhaps be moved to "
+ "%s."),
+ old_path, branch_with_new_path,
+ branch_with_dir_rename, new_path);
+ else
+ path_msg(opt, new_path, 0,
+ _("CONFLICT (file location): %s renamed to %s "
+ "in %s, inside a directory that was renamed "
+ "in %s, suggesting it should perhaps be "
+ "moved to %s."),
+ pair->one->path, old_path, branch_with_new_path,
+ branch_with_dir_rename, new_path);
+ }
+
+ /*
+ * Finally, record the new location.
+ */
+ pair->two->path = new_path;
+}
+
+/*** Function Grouping: functions related to regular rename detection ***/
+
+static int process_renames(struct merge_options *opt,
+ struct diff_queue_struct *renames)
+{
+ int clean_merge = 1, i;
+
+ for (i = 0; i < renames->nr; ++i) {
+ const char *oldpath = NULL, *newpath;
+ struct diff_filepair *pair = renames->queue[i];
+ struct conflict_info *oldinfo = NULL, *newinfo = NULL;
+ struct strmap_entry *old_ent, *new_ent;
+ unsigned int old_sidemask;
+ int target_index, other_source_index;
+ int source_deleted, collision, type_changed;
+ const char *rename_branch = NULL, *delete_branch = NULL;
+
+ old_ent = strmap_get_entry(&opt->priv->paths, pair->one->path);
+ new_ent = strmap_get_entry(&opt->priv->paths, pair->two->path);
+ if (old_ent) {
+ oldpath = old_ent->key;
+ oldinfo = old_ent->value;
+ }
+ newpath = pair->two->path;
+ if (new_ent) {
+ newpath = new_ent->key;
+ newinfo = new_ent->value;
+ }
+
+ /*
+ * If pair->one->path isn't in opt->priv->paths, that means
+ * that either directory rename detection removed that
+ * path, or a parent directory of oldpath was resolved and
+ * we don't even need the rename; in either case, we can
+ * skip it. If oldinfo->merged.clean, then the other side
+ * of history had no changes to oldpath and we don't need
+ * the rename and can skip it.
+ */
+ if (!oldinfo || oldinfo->merged.clean)
+ continue;
+
+ /*
+ * diff_filepairs have copies of pathnames, thus we have to
+ * use standard 'strcmp()' (negated) instead of '=='.
+ */
+ if (i + 1 < renames->nr &&
+ !strcmp(oldpath, renames->queue[i+1]->one->path)) {
+ /* Handle rename/rename(1to2) or rename/rename(1to1) */
+ const char *pathnames[3];
+ struct version_info merged;
+ struct conflict_info *base, *side1, *side2;
+ unsigned was_binary_blob = 0;
+
+ pathnames[0] = oldpath;
+ pathnames[1] = newpath;
+ pathnames[2] = renames->queue[i+1]->two->path;
+
+ base = strmap_get(&opt->priv->paths, pathnames[0]);
+ side1 = strmap_get(&opt->priv->paths, pathnames[1]);
+ side2 = strmap_get(&opt->priv->paths, pathnames[2]);
+
+ VERIFY_CI(base);
+ VERIFY_CI(side1);
+ VERIFY_CI(side2);
+
+ if (!strcmp(pathnames[1], pathnames[2])) {
+ /* Both sides renamed the same way */
+ assert(side1 == side2);
+ memcpy(&side1->stages[0], &base->stages[0],
+ sizeof(merged));
+ side1->filemask |= (1 << MERGE_BASE);
+ /* Mark base as resolved by removal */
+ base->merged.is_null = 1;
+ base->merged.clean = 1;
+
+ /* We handled both renames, i.e. i+1 handled */
+ i++;
+ /* Move to next rename */
+ continue;
+ }
+
+ /* This is a rename/rename(1to2) */
+ clean_merge = handle_content_merge(opt,
+ pair->one->path,
+ &base->stages[0],
+ &side1->stages[1],
+ &side2->stages[2],
+ pathnames,
+ 1 + 2 * opt->priv->call_depth,
+ &merged);
+ if (!clean_merge &&
+ merged.mode == side1->stages[1].mode &&
+ oideq(&merged.oid, &side1->stages[1].oid))
+ was_binary_blob = 1;
+ memcpy(&side1->stages[1], &merged, sizeof(merged));
+ if (was_binary_blob) {
+ /*
+ * Getting here means we were attempting to
+ * merge a binary blob.
+ *
+ * Since we can't merge binaries,
+ * handle_content_merge() just takes one
+ * side. But we don't want to copy the
+ * contents of one side to both paths. We
+ * used the contents of side1 above for
+ * side1->stages, let's use the contents of
+ * side2 for side2->stages below.
+ */
+ oidcpy(&merged.oid, &side2->stages[2].oid);
+ merged.mode = side2->stages[2].mode;
+ }
+ memcpy(&side2->stages[2], &merged, sizeof(merged));
+
+ side1->path_conflict = 1;
+ side2->path_conflict = 1;
+ /*
+ * TODO: For renames we normally remove the path at the
+ * old name. It would thus seem consistent to do the
+ * same for rename/rename(1to2) cases, but we haven't
+ * done so traditionally and a number of the regression
+ * tests now encode an expectation that the file is
+ * left there at stage 1. If we ever decide to change
+ * this, add the following two lines here:
+ * base->merged.is_null = 1;
+ * base->merged.clean = 1;
+ * and remove the setting of base->path_conflict to 1.
+ */
+ base->path_conflict = 1;
+ path_msg(opt, oldpath, 0,
+ _("CONFLICT (rename/rename): %s renamed to "
+ "%s in %s and to %s in %s."),
+ pathnames[0],
+ pathnames[1], opt->branch1,
+ pathnames[2], opt->branch2);
+
+ i++; /* We handled both renames, i.e. i+1 handled */
+ continue;
+ }
+
+ VERIFY_CI(oldinfo);
+ VERIFY_CI(newinfo);
+ target_index = pair->score; /* from collect_renames() */
+ assert(target_index == 1 || target_index == 2);
+ other_source_index = 3 - target_index;
+ old_sidemask = (1 << other_source_index); /* 2 or 4 */
+ source_deleted = (oldinfo->filemask == 1);
+ collision = ((newinfo->filemask & old_sidemask) != 0);
+ type_changed = !source_deleted &&
+ (S_ISREG(oldinfo->stages[other_source_index].mode) !=
+ S_ISREG(newinfo->stages[target_index].mode));
+ if (type_changed && collision) {
+ /*
+ * special handling so later blocks can handle this...
+ *
+ * if type_changed && collision are both true, then this
+ * was really a double rename, but one side wasn't
+ * detected due to lack of break detection. I.e.
+ * something like
+ * orig: has normal file 'foo'
+ * side1: renames 'foo' to 'bar', adds 'foo' symlink
+ * side2: renames 'foo' to 'bar'
+ * In this case, the foo->bar rename on side1 won't be
+ * detected because the new symlink named 'foo' is
+ * there and we don't do break detection. But we detect
+ * this here because we don't want to merge the content
+ * of the foo symlink with the foo->bar file, so we
+ * have some logic to handle this special case. The
+ * easiest way to do that is make 'bar' on side1 not
+ * be considered a colliding file but the other part
+ * of a normal rename. If the file is very different,
+ * well we're going to get content merge conflicts
+ * anyway so it doesn't hurt. And if the colliding
+ * file also has a different type, that'll be handled
+ * by the content merge logic in process_entry() too.
+ *
+ * See also t6430, 'rename vs. rename/symlink'
+ */
+ collision = 0;
+ }
+ if (source_deleted) {
+ if (target_index == 1) {
+ rename_branch = opt->branch1;
+ delete_branch = opt->branch2;
+ } else {
+ rename_branch = opt->branch2;
+ delete_branch = opt->branch1;
+ }
+ }
+
+ assert(source_deleted || oldinfo->filemask & old_sidemask);
+
+ /* Need to check for special types of rename conflicts... */
+ if (collision && !source_deleted) {
+ /* collision: rename/add or rename/rename(2to1) */
+ const char *pathnames[3];
+ struct version_info merged;
+
+ struct conflict_info *base, *side1, *side2;
+ unsigned clean;
+
+ pathnames[0] = oldpath;
+ pathnames[other_source_index] = oldpath;
+ pathnames[target_index] = newpath;
+
+ base = strmap_get(&opt->priv->paths, pathnames[0]);
+ side1 = strmap_get(&opt->priv->paths, pathnames[1]);
+ side2 = strmap_get(&opt->priv->paths, pathnames[2]);
+
+ VERIFY_CI(base);
+ VERIFY_CI(side1);
+ VERIFY_CI(side2);
+
+ clean = handle_content_merge(opt, pair->one->path,
+ &base->stages[0],
+ &side1->stages[1],
+ &side2->stages[2],
+ pathnames,
+ 1 + 2 * opt->priv->call_depth,
+ &merged);
+
+ memcpy(&newinfo->stages[target_index], &merged,
+ sizeof(merged));
+ if (!clean) {
+ path_msg(opt, newpath, 0,
+ _("CONFLICT (rename involved in "
+ "collision): rename of %s -> %s has "
+ "content conflicts AND collides "
+ "with another path; this may result "
+ "in nested conflict markers."),
+ oldpath, newpath);
+ }
+ } else if (collision && source_deleted) {
+ /*
+ * rename/add/delete or rename/rename(2to1)/delete:
+ * since oldpath was deleted on the side that didn't
+ * do the rename, there's not much of a content merge
+ * we can do for the rename. oldinfo->merged.is_null
+ * was already set, so we just leave things as-is so
+ * they look like an add/add conflict.
+ */
+
+ newinfo->path_conflict = 1;
+ path_msg(opt, newpath, 0,
+ _("CONFLICT (rename/delete): %s renamed "
+ "to %s in %s, but deleted in %s."),
+ oldpath, newpath, rename_branch, delete_branch);
+ } else {
+ /*
+ * a few different cases...start by copying the
+ * existing stage(s) from oldinfo over the newinfo
+ * and update the pathname(s).
+ */
+ memcpy(&newinfo->stages[0], &oldinfo->stages[0],
+ sizeof(newinfo->stages[0]));
+ newinfo->filemask |= (1 << MERGE_BASE);
+ newinfo->pathnames[0] = oldpath;
+ if (type_changed) {
+ /* rename vs. typechange */
+ /* Mark the original as resolved by removal */
+ memcpy(&oldinfo->stages[0].oid, &null_oid,
+ sizeof(oldinfo->stages[0].oid));
+ oldinfo->stages[0].mode = 0;
+ oldinfo->filemask &= 0x06;
+ } else if (source_deleted) {
+ /* rename/delete */
+ newinfo->path_conflict = 1;
+ path_msg(opt, newpath, 0,
+ _("CONFLICT (rename/delete): %s renamed"
+ " to %s in %s, but deleted in %s."),
+ oldpath, newpath,
+ rename_branch, delete_branch);
+ } else {
+ /* normal rename */
+ memcpy(&newinfo->stages[other_source_index],
+ &oldinfo->stages[other_source_index],
+ sizeof(newinfo->stages[0]));
+ newinfo->filemask |= (1 << other_source_index);
+ newinfo->pathnames[other_source_index] = oldpath;
+ }
+ }
+
+ if (!type_changed) {
+ /* Mark the original as resolved by removal */
+ oldinfo->merged.is_null = 1;
+ oldinfo->merged.clean = 1;
+ }
+
+ }
+
+ return clean_merge;
+}
+
+static void resolve_diffpair_statuses(struct diff_queue_struct *q)
+{
+ /*
+ * A simplified version of diff_resolve_rename_copy(); would probably
+ * just use that function but it's static...
+ */
+ int i;
+ struct diff_filepair *p;
+
+ for (i = 0; i < q->nr; ++i) {
+ p = q->queue[i];
+ p->status = 0; /* undecided */
+ if (!DIFF_FILE_VALID(p->one))
+ p->status = DIFF_STATUS_ADDED;
+ else if (!DIFF_FILE_VALID(p->two))
+ p->status = DIFF_STATUS_DELETED;
+ else if (DIFF_PAIR_RENAME(p))
+ p->status = DIFF_STATUS_RENAMED;
+ }
+}
+
+static int compare_pairs(const void *a_, const void *b_)
+{
+ const struct diff_filepair *a = *((const struct diff_filepair **)a_);
+ const struct diff_filepair *b = *((const struct diff_filepair **)b_);
+
+ return strcmp(a->one->path, b->one->path);
+}
+
+/* Call diffcore_rename() to compute which files have changed on given side */
+static void detect_regular_renames(struct merge_options *opt,
+ unsigned side_index)
+{
+ struct diff_options diff_opts;
+ struct rename_info *renames = &opt->priv->renames;
+
+ repo_diff_setup(opt->repo, &diff_opts);
+ diff_opts.flags.recursive = 1;
+ diff_opts.flags.rename_empty = 0;
+ diff_opts.detect_rename = DIFF_DETECT_RENAME;
+ diff_opts.rename_limit = opt->rename_limit;
+ if (opt->rename_limit <= 0)
+ diff_opts.rename_limit = 1000;
+ diff_opts.rename_score = opt->rename_score;
+ diff_opts.show_rename_progress = opt->show_rename_progress;
+ diff_opts.output_format = DIFF_FORMAT_NO_OUTPUT;
+ diff_setup_done(&diff_opts);
+
+ diff_queued_diff = renames->pairs[side_index];
+ trace2_region_enter("diff", "diffcore_rename", opt->repo);
+ diffcore_rename(&diff_opts);
+ trace2_region_leave("diff", "diffcore_rename", opt->repo);
+ resolve_diffpair_statuses(&diff_queued_diff);
+
+ if (diff_opts.needed_rename_limit > renames->needed_limit)
+ renames->needed_limit = diff_opts.needed_rename_limit;
+
+ renames->pairs[side_index] = diff_queued_diff;
+
+ diff_opts.output_format = DIFF_FORMAT_NO_OUTPUT;
+ diff_queued_diff.nr = 0;
+ diff_queued_diff.queue = NULL;
+ diff_flush(&diff_opts);
+}
+
+/*
+ * Get information of all renames which occurred in 'side_pairs', discarding
+ * non-renames.
+ */
+static int collect_renames(struct merge_options *opt,
+ struct diff_queue_struct *result,
+ unsigned side_index,
+ struct strmap *dir_renames_for_side,
+ struct strmap *rename_exclusions)
+{
+ int i, clean = 1;
+ struct strmap collisions;
+ struct diff_queue_struct *side_pairs;
+ struct hashmap_iter iter;
+ struct strmap_entry *entry;
+ struct rename_info *renames = &opt->priv->renames;
+
+ side_pairs = &renames->pairs[side_index];
+ compute_collisions(&collisions, dir_renames_for_side, side_pairs);
+
+ for (i = 0; i < side_pairs->nr; ++i) {
+ struct diff_filepair *p = side_pairs->queue[i];
+ char *new_path; /* non-NULL only with directory renames */
+
+ if (p->status != 'A' && p->status != 'R') {
+ diff_free_filepair(p);
+ continue;
+ }
+
+ new_path = check_for_directory_rename(opt, p->two->path,
+ side_index,
+ dir_renames_for_side,
+ rename_exclusions,
+ &collisions,
+ &clean);
+
+ if (p->status != 'R' && !new_path) {
+ diff_free_filepair(p);
+ continue;
+ }
+
+ if (new_path)
+ apply_directory_rename_modifications(opt, p, new_path);
+
+ /*
+ * p->score comes back from diffcore_rename_extended() with
+ * the similarity of the renamed file. The similarity is
+ * was used to determine that the two files were related
+ * and are a rename, which we have already used, but beyond
+ * that we have no use for the similarity. So p->score is
+ * now irrelevant. However, process_renames() will need to
+ * know which side of the merge this rename was associated
+ * with, so overwrite p->score with that value.
+ */
+ p->score = side_index;
+ result->queue[result->nr++] = p;
+ }
+
+ /* Free each value in the collisions map */
+ strmap_for_each_entry(&collisions, &iter, entry) {
+ struct collision_info *info = entry->value;
+ string_list_clear(&info->source_files, 0);
+ }
+ /*
+ * In compute_collisions(), we set collisions.strdup_strings to 0
+ * so that we wouldn't have to make another copy of the new_path
+ * allocated by apply_dir_rename(). But now that we've used them
+ * and have no other references to these strings, it is time to
+ * deallocate them.
+ */
+ free_strmap_strings(&collisions);
+ strmap_clear(&collisions, 1);
+ return clean;
+}
+
+static int detect_and_process_renames(struct merge_options *opt,
+ struct tree *merge_base,
+ struct tree *side1,
+ struct tree *side2)
+{
+ struct diff_queue_struct combined;
+ struct rename_info *renames = &opt->priv->renames;
+ int need_dir_renames, s, clean = 1;
+
+ memset(&combined, 0, sizeof(combined));
+
+ trace2_region_enter("merge", "regular renames", opt->repo);
+ detect_regular_renames(opt, MERGE_SIDE1);
+ detect_regular_renames(opt, MERGE_SIDE2);
+ trace2_region_leave("merge", "regular renames", opt->repo);
+
+ trace2_region_enter("merge", "directory renames", opt->repo);
+ need_dir_renames =
+ !opt->priv->call_depth &&
+ (opt->detect_directory_renames == MERGE_DIRECTORY_RENAMES_TRUE ||
+ opt->detect_directory_renames == MERGE_DIRECTORY_RENAMES_CONFLICT);
+
+ if (need_dir_renames) {
+ get_provisional_directory_renames(opt, MERGE_SIDE1, &clean);
+ get_provisional_directory_renames(opt, MERGE_SIDE2, &clean);
+ handle_directory_level_conflicts(opt);
+ }
+
+ ALLOC_GROW(combined.queue,
+ renames->pairs[1].nr + renames->pairs[2].nr,
+ combined.alloc);
+ clean &= collect_renames(opt, &combined, MERGE_SIDE1,
+ &renames->dir_renames[2],
+ &renames->dir_renames[1]);
+ clean &= collect_renames(opt, &combined, MERGE_SIDE2,
+ &renames->dir_renames[1],
+ &renames->dir_renames[2]);
+ QSORT(combined.queue, combined.nr, compare_pairs);
+ trace2_region_leave("merge", "directory renames", opt->repo);
+
+ trace2_region_enter("merge", "process renames", opt->repo);
+ clean &= process_renames(opt, &combined);
+ trace2_region_leave("merge", "process renames", opt->repo);
+
+ /* Free memory for renames->pairs[] and combined */
+ for (s = MERGE_SIDE1; s <= MERGE_SIDE2; s++) {
+ free(renames->pairs[s].queue);
+ DIFF_QUEUE_CLEAR(&renames->pairs[s]);
+ }
+ if (combined.nr) {
+ int i;
+ for (i = 0; i < combined.nr; i++)
+ diff_free_filepair(combined.queue[i]);
+ free(combined.queue);
+ }
+
+ return clean;
+}
+
+/*** Function Grouping: functions related to process_entries() ***/
+
+static int string_list_df_name_compare(const char *one, const char *two)
+{
+ int onelen = strlen(one);
+ int twolen = strlen(two);
+ /*
+ * Here we only care that entries for D/F conflicts are
+ * adjacent, in particular with the file of the D/F conflict
+ * appearing before files below the corresponding directory.
+ * The order of the rest of the list is irrelevant for us.
+ *
+ * To achieve this, we sort with df_name_compare and provide
+ * the mode S_IFDIR so that D/F conflicts will sort correctly.
+ * We use the mode S_IFDIR for everything else for simplicity,
+ * since in other cases any changes in their order due to
+ * sorting cause no problems for us.
+ */
+ int cmp = df_name_compare(one, onelen, S_IFDIR,
+ two, twolen, S_IFDIR);
+ /*
+ * Now that 'foo' and 'foo/bar' compare equal, we have to make sure
+ * that 'foo' comes before 'foo/bar'.
+ */
+ if (cmp)
+ return cmp;
+ return onelen - twolen;
+}
+
+struct directory_versions {
+ /*
+ * versions: list of (basename -> version_info)
+ *
+ * The basenames are in reverse lexicographic order of full pathnames,
+ * as processed in process_entries(). This puts all entries within
+ * a directory together, and covers the directory itself after
+ * everything within it, allowing us to write subtrees before needing
+ * to record information for the tree itself.
+ */
+ struct string_list versions;
+
+ /*
+ * offsets: list of (full relative path directories -> integer offsets)
+ *
+ * Since versions contains basenames from files in multiple different
+ * directories, we need to know which entries in versions correspond
+ * to which directories. Values of e.g.
+ * "" 0
+ * src 2
+ * src/moduleA 5
+ * Would mean that entries 0-1 of versions are files in the toplevel
+ * directory, entries 2-4 are files under src/, and the remaining
+ * entries starting at index 5 are files under src/moduleA/.
+ */
+ struct string_list offsets;
+
+ /*
+ * last_directory: directory that previously processed file found in
+ *
+ * last_directory starts NULL, but records the directory in which the
+ * previous file was found within. As soon as
+ * directory(current_file) != last_directory
+ * then we need to start updating accounting in versions & offsets.
+ * Note that last_directory is always the last path in "offsets" (or
+ * NULL if "offsets" is empty) so this exists just for quick access.
+ */
+ const char *last_directory;
+
+ /* last_directory_len: cached computation of strlen(last_directory) */
+ unsigned last_directory_len;
+};
+
+static int tree_entry_order(const void *a_, const void *b_)
+{
+ const struct string_list_item *a = a_;
+ const struct string_list_item *b = b_;
+
+ const struct merged_info *ami = a->util;
+ const struct merged_info *bmi = b->util;
+ return base_name_compare(a->string, strlen(a->string), ami->result.mode,
+ b->string, strlen(b->string), bmi->result.mode);
+}
+
+static void write_tree(struct object_id *result_oid,
+ struct string_list *versions,
+ unsigned int offset,
+ size_t hash_size)
+{
+ size_t maxlen = 0, extra;
+ unsigned int nr = versions->nr - offset;
+ struct strbuf buf = STRBUF_INIT;
+ struct string_list relevant_entries = STRING_LIST_INIT_NODUP;
+ int i;
+
+ /*
+ * We want to sort the last (versions->nr-offset) entries in versions.
+ * Do so by abusing the string_list API a bit: make another string_list
+ * that contains just those entries and then sort them.
+ *
+ * We won't use relevant_entries again and will let it just pop off the
+ * stack, so there won't be allocation worries or anything.
+ */
+ relevant_entries.items = versions->items + offset;
+ relevant_entries.nr = versions->nr - offset;
+ QSORT(relevant_entries.items, relevant_entries.nr, tree_entry_order);
+
+ /* Pre-allocate some space in buf */
+ extra = hash_size + 8; /* 8: 6 for mode, 1 for space, 1 for NUL char */
+ for (i = 0; i < nr; i++) {
+ maxlen += strlen(versions->items[offset+i].string) + extra;
+ }
+ strbuf_grow(&buf, maxlen);
+
+ /* Write each entry out to buf */
+ for (i = 0; i < nr; i++) {
+ struct merged_info *mi = versions->items[offset+i].util;
+ struct version_info *ri = &mi->result;
+ strbuf_addf(&buf, "%o %s%c",
+ ri->mode,
+ versions->items[offset+i].string, '\0');
+ strbuf_add(&buf, ri->oid.hash, hash_size);
+ }
+
+ /* Write this object file out, and record in result_oid */
+ write_object_file(buf.buf, buf.len, tree_type, result_oid);
+ strbuf_release(&buf);
+}
+
+static void record_entry_for_tree(struct directory_versions *dir_metadata,
+ const char *path,
+ struct merged_info *mi)
+{
+ const char *basename;
+
+ if (mi->is_null)
+ /* nothing to record */
+ return;
+
+ basename = path + mi->basename_offset;
+ assert(strchr(basename, '/') == NULL);
+ string_list_append(&dir_metadata->versions,
+ basename)->util = &mi->result;
+}
+
+static void write_completed_directory(struct merge_options *opt,
+ const char *new_directory_name,
+ struct directory_versions *info)
+{
+ const char *prev_dir;
+ struct merged_info *dir_info = NULL;
+ unsigned int offset;
+
+ /*
+ * Some explanation of info->versions and info->offsets...
+ *
+ * process_entries() iterates over all relevant files AND
+ * directories in reverse lexicographic order, and calls this
+ * function. Thus, an example of the paths that process_entries()
+ * could operate on (along with the directories for those paths
+ * being shown) is:
+ *
+ * xtract.c ""
+ * tokens.txt ""
+ * src/moduleB/umm.c src/moduleB
+ * src/moduleB/stuff.h src/moduleB
+ * src/moduleB/baz.c src/moduleB
+ * src/moduleB src
+ * src/moduleA/foo.c src/moduleA
+ * src/moduleA/bar.c src/moduleA
+ * src/moduleA src
+ * src ""
+ * Makefile ""
+ *
+ * info->versions:
+ *
+ * always contains the unprocessed entries and their
+ * version_info information. For example, after the first five
+ * entries above, info->versions would be:
+ *
+ * xtract.c <xtract.c's version_info>
+ * token.txt <token.txt's version_info>
+ * umm.c <src/moduleB/umm.c's version_info>
+ * stuff.h <src/moduleB/stuff.h's version_info>
+ * baz.c <src/moduleB/baz.c's version_info>
+ *
+ * Once a subdirectory is completed we remove the entries in
+ * that subdirectory from info->versions, writing it as a tree
+ * (write_tree()). Thus, as soon as we get to src/moduleB,
+ * info->versions would be updated to
+ *
+ * xtract.c <xtract.c's version_info>
+ * token.txt <token.txt's version_info>
+ * moduleB <src/moduleB's version_info>
+ *
+ * info->offsets:
+ *
+ * helps us track which entries in info->versions correspond to
+ * which directories. When we are N directories deep (e.g. 4
+ * for src/modA/submod/subdir/), we have up to N+1 unprocessed
+ * directories (+1 because of toplevel dir). Corresponding to
+ * the info->versions example above, after processing five entries
+ * info->offsets will be:
+ *
+ * "" 0
+ * src/moduleB 2
+ *
+ * which is used to know that xtract.c & token.txt are from the
+ * toplevel dirctory, while umm.c & stuff.h & baz.c are from the
+ * src/moduleB directory. Again, following the example above,
+ * once we need to process src/moduleB, then info->offsets is
+ * updated to
+ *
+ * "" 0
+ * src 2
+ *
+ * which says that moduleB (and only moduleB so far) is in the
+ * src directory.
+ *
+ * One unique thing to note about info->offsets here is that
+ * "src" was not added to info->offsets until there was a path
+ * (a file OR directory) immediately below src/ that got
+ * processed.
+ *
+ * Since process_entry() just appends new entries to info->versions,
+ * write_completed_directory() only needs to do work if the next path
+ * is in a directory that is different than the last directory found
+ * in info->offsets.
+ */
+
+ /*
+ * If we are working with the same directory as the last entry, there
+ * is no work to do. (See comments above the directory_name member of
+ * struct merged_info for why we can use pointer comparison instead of
+ * strcmp here.)
+ */
+ if (new_directory_name == info->last_directory)
+ return;
+
+ /*
+ * If we are just starting (last_directory is NULL), or last_directory
+ * is a prefix of the current directory, then we can just update
+ * info->offsets to record the offset where we started this directory
+ * and update last_directory to have quick access to it.
+ */
+ if (info->last_directory == NULL ||
+ !strncmp(new_directory_name, info->last_directory,
+ info->last_directory_len)) {
+ uintptr_t offset = info->versions.nr;
+
+ info->last_directory = new_directory_name;
+ info->last_directory_len = strlen(info->last_directory);
+ /*
+ * Record the offset into info->versions where we will
+ * start recording basenames of paths found within
+ * new_directory_name.
+ */
+ string_list_append(&info->offsets,
+ info->last_directory)->util = (void*)offset;
+ return;
+ }
+
+ /*
+ * The next entry that will be processed will be within
+ * new_directory_name. Since at this point we know that
+ * new_directory_name is within a different directory than
+ * info->last_directory, we have all entries for info->last_directory
+ * in info->versions and we need to create a tree object for them.
+ */
+ dir_info = strmap_get(&opt->priv->paths, info->last_directory);
+ assert(dir_info);
+ offset = (uintptr_t)info->offsets.items[info->offsets.nr-1].util;
+ if (offset == info->versions.nr) {
+ /*
+ * Actually, we don't need to create a tree object in this
+ * case. Whenever all files within a directory disappear
+ * during the merge (e.g. unmodified on one side and
+ * deleted on the other, or files were renamed elsewhere),
+ * then we get here and the directory itself needs to be
+ * omitted from its parent tree as well.
+ */
+ dir_info->is_null = 1;
+ } else {
+ /*
+ * Write out the tree to the git object directory, and also
+ * record the mode and oid in dir_info->result.
+ */
+ dir_info->is_null = 0;
+ dir_info->result.mode = S_IFDIR;
+ write_tree(&dir_info->result.oid, &info->versions, offset,
+ opt->repo->hash_algo->rawsz);
+ }
+
+ /*
+ * We've now used several entries from info->versions and one entry
+ * from info->offsets, so we get rid of those values.
+ */
+ info->offsets.nr--;
+ info->versions.nr = offset;
+
+ /*
+ * Now we've taken care of the completed directory, but we need to
+ * prepare things since future entries will be in
+ * new_directory_name. (In particular, process_entry() will be
+ * appending new entries to info->versions.) So, we need to make
+ * sure new_directory_name is the last entry in info->offsets.
+ */
+ prev_dir = info->offsets.nr == 0 ? NULL :
+ info->offsets.items[info->offsets.nr-1].string;
+ if (new_directory_name != prev_dir) {
+ uintptr_t c = info->versions.nr;
+ string_list_append(&info->offsets,
+ new_directory_name)->util = (void*)c;
+ }
+
+ /* And, of course, we need to update last_directory to match. */
+ info->last_directory = new_directory_name;
+ info->last_directory_len = strlen(info->last_directory);
+}
+
+/* Per entry merge function */
+static void process_entry(struct merge_options *opt,
+ const char *path,
+ struct conflict_info *ci,
+ struct directory_versions *dir_metadata)
+{
+ int df_file_index = 0;
+
+ VERIFY_CI(ci);
+ assert(ci->filemask >= 0 && ci->filemask <= 7);
+ /* ci->match_mask == 7 was handled in collect_merge_info_callback() */
+ assert(ci->match_mask == 0 || ci->match_mask == 3 ||
+ ci->match_mask == 5 || ci->match_mask == 6);
+
+ if (ci->dirmask) {
+ record_entry_for_tree(dir_metadata, path, &ci->merged);
+ if (ci->filemask == 0)
+ /* nothing else to handle */
+ return;
+ assert(ci->df_conflict);
+ }
+
+ if (ci->df_conflict && ci->merged.result.mode == 0) {
+ int i;
+
+ /*
+ * directory no longer in the way, but we do have a file we
+ * need to place here so we need to clean away the "directory
+ * merges to nothing" result.
+ */
+ ci->df_conflict = 0;
+ assert(ci->filemask != 0);
+ ci->merged.clean = 0;
+ ci->merged.is_null = 0;
+ /* and we want to zero out any directory-related entries */
+ ci->match_mask = (ci->match_mask & ~ci->dirmask);
+ ci->dirmask = 0;
+ for (i = MERGE_BASE; i <= MERGE_SIDE2; i++) {
+ if (ci->filemask & (1 << i))
+ continue;
+ ci->stages[i].mode = 0;
+ oidcpy(&ci->stages[i].oid, &null_oid);
+ }
+ } else if (ci->df_conflict && ci->merged.result.mode != 0) {
+ /*
+ * This started out as a D/F conflict, and the entries in
+ * the competing directory were not removed by the merge as
+ * evidenced by write_completed_directory() writing a value
+ * to ci->merged.result.mode.
+ */
+ struct conflict_info *new_ci;
+ const char *branch;
+ const char *old_path = path;
+ int i;
+
+ assert(ci->merged.result.mode == S_IFDIR);
+
+ /*
+ * If filemask is 1, we can just ignore the file as having
+ * been deleted on both sides. We do not want to overwrite
+ * ci->merged.result, since it stores the tree for all the
+ * files under it.
+ */
+ if (ci->filemask == 1) {
+ ci->filemask = 0;
+ return;
+ }
+
+ /*
+ * This file still exists on at least one side, and we want
+ * the directory to remain here, so we need to move this
+ * path to some new location.
+ */
+ CALLOC_ARRAY(new_ci, 1);
+ /* We don't really want new_ci->merged.result copied, but it'll
+ * be overwritten below so it doesn't matter. We also don't
+ * want any directory mode/oid values copied, but we'll zero
+ * those out immediately. We do want the rest of ci copied.
+ */
+ memcpy(new_ci, ci, sizeof(*ci));
+ new_ci->match_mask = (new_ci->match_mask & ~new_ci->dirmask);
+ new_ci->dirmask = 0;
+ for (i = MERGE_BASE; i <= MERGE_SIDE2; i++) {
+ if (new_ci->filemask & (1 << i))
+ continue;
+ /* zero out any entries related to directories */
+ new_ci->stages[i].mode = 0;
+ oidcpy(&new_ci->stages[i].oid, &null_oid);
+ }
+
+ /*
+ * Find out which side this file came from; note that we
+ * cannot just use ci->filemask, because renames could cause
+ * the filemask to go back to 7. So we use dirmask, then
+ * pick the opposite side's index.
+ */
+ df_file_index = (ci->dirmask & (1 << 1)) ? 2 : 1;
+ branch = (df_file_index == 1) ? opt->branch1 : opt->branch2;
+ path = unique_path(&opt->priv->paths, path, branch);
+ strmap_put(&opt->priv->paths, path, new_ci);
+
+ path_msg(opt, path, 0,
+ _("CONFLICT (file/directory): directory in the way "
+ "of %s from %s; moving it to %s instead."),
+ old_path, branch, path);
+
+ /*
+ * Zero out the filemask for the old ci. At this point, ci
+ * was just an entry for a directory, so we don't need to
+ * do anything more with it.
+ */
+ ci->filemask = 0;
+
+ /*
+ * Now note that we're working on the new entry (path was
+ * updated above.
+ */
+ ci = new_ci;
+ }
+
+ /*
+ * NOTE: Below there is a long switch-like if-elseif-elseif... block
+ * which the code goes through even for the df_conflict cases
+ * above.
+ */
+ if (ci->match_mask) {
+ ci->merged.clean = 1;
+ if (ci->match_mask == 6) {
+ /* stages[1] == stages[2] */
+ ci->merged.result.mode = ci->stages[1].mode;
+ oidcpy(&ci->merged.result.oid, &ci->stages[1].oid);
+ } else {
+ /* determine the mask of the side that didn't match */
+ unsigned int othermask = 7 & ~ci->match_mask;
+ int side = (othermask == 4) ? 2 : 1;
+
+ ci->merged.result.mode = ci->stages[side].mode;
+ ci->merged.is_null = !ci->merged.result.mode;
+ oidcpy(&ci->merged.result.oid, &ci->stages[side].oid);
+
+ assert(othermask == 2 || othermask == 4);
+ assert(ci->merged.is_null ==
+ (ci->filemask == ci->match_mask));
+ }
+ } else if (ci->filemask >= 6 &&
+ (S_IFMT & ci->stages[1].mode) !=
+ (S_IFMT & ci->stages[2].mode)) {
+ /* Two different items from (file/submodule/symlink) */
+ if (opt->priv->call_depth) {
+ /* Just use the version from the merge base */
+ ci->merged.clean = 0;
+ oidcpy(&ci->merged.result.oid, &ci->stages[0].oid);
+ ci->merged.result.mode = ci->stages[0].mode;
+ ci->merged.is_null = (ci->merged.result.mode == 0);
+ } else {
+ /* Handle by renaming one or both to separate paths. */
+ unsigned o_mode = ci->stages[0].mode;
+ unsigned a_mode = ci->stages[1].mode;
+ unsigned b_mode = ci->stages[2].mode;
+ struct conflict_info *new_ci;
+ const char *a_path = NULL, *b_path = NULL;
+ int rename_a = 0, rename_b = 0;
+
+ new_ci = xmalloc(sizeof(*new_ci));
+
+ if (S_ISREG(a_mode))
+ rename_a = 1;
+ else if (S_ISREG(b_mode))
+ rename_b = 1;
+ else {
+ rename_a = 1;
+ rename_b = 1;
+ }
+
+ path_msg(opt, path, 0,
+ _("CONFLICT (distinct types): %s had different "
+ "types on each side; renamed %s of them so "
+ "each can be recorded somewhere."),
+ path,
+ (rename_a && rename_b) ? _("both") : _("one"));
+
+ ci->merged.clean = 0;
+ memcpy(new_ci, ci, sizeof(*new_ci));
+
+ /* Put b into new_ci, removing a from stages */
+ new_ci->merged.result.mode = ci->stages[2].mode;
+ oidcpy(&new_ci->merged.result.oid, &ci->stages[2].oid);
+ new_ci->stages[1].mode = 0;
+ oidcpy(&new_ci->stages[1].oid, &null_oid);
+ new_ci->filemask = 5;
+ if ((S_IFMT & b_mode) != (S_IFMT & o_mode)) {
+ new_ci->stages[0].mode = 0;
+ oidcpy(&new_ci->stages[0].oid, &null_oid);
+ new_ci->filemask = 4;
+ }
+
+ /* Leave only a in ci, fixing stages. */
+ ci->merged.result.mode = ci->stages[1].mode;
+ oidcpy(&ci->merged.result.oid, &ci->stages[1].oid);
+ ci->stages[2].mode = 0;
+ oidcpy(&ci->stages[2].oid, &null_oid);
+ ci->filemask = 3;
+ if ((S_IFMT & a_mode) != (S_IFMT & o_mode)) {
+ ci->stages[0].mode = 0;
+ oidcpy(&ci->stages[0].oid, &null_oid);
+ ci->filemask = 2;
+ }
+
+ /* Insert entries into opt->priv_paths */
+ assert(rename_a || rename_b);
+ if (rename_a) {
+ a_path = unique_path(&opt->priv->paths,
+ path, opt->branch1);
+ strmap_put(&opt->priv->paths, a_path, ci);
+ }
+
+ if (rename_b)
+ b_path = unique_path(&opt->priv->paths,
+ path, opt->branch2);
+ else
+ b_path = path;
+ strmap_put(&opt->priv->paths, b_path, new_ci);
+
+ if (rename_a && rename_b) {
+ strmap_remove(&opt->priv->paths, path, 0);
+ /*
+ * We removed path from opt->priv->paths. path
+ * will also eventually need to be freed, but
+ * it may still be used by e.g. ci->pathnames.
+ * So, store it in another string-list for now.
+ */
+ string_list_append(&opt->priv->paths_to_free,
+ path);
+ }
+
+ /*
+ * Do special handling for b_path since process_entry()
+ * won't be called on it specially.
+ */
+ strmap_put(&opt->priv->conflicted, b_path, new_ci);
+ record_entry_for_tree(dir_metadata, b_path,
+ &new_ci->merged);
+
+ /*
+ * Remaining code for processing this entry should
+ * think in terms of processing a_path.
+ */
+ if (a_path)
+ path = a_path;
+ }
+ } else if (ci->filemask >= 6) {
+ /* Need a two-way or three-way content merge */
+ struct version_info merged_file;
+ unsigned clean_merge;
+ struct version_info *o = &ci->stages[0];
+ struct version_info *a = &ci->stages[1];
+ struct version_info *b = &ci->stages[2];
+
+ clean_merge = handle_content_merge(opt, path, o, a, b,
+ ci->pathnames,
+ opt->priv->call_depth * 2,
+ &merged_file);
+ ci->merged.clean = clean_merge &&
+ !ci->df_conflict && !ci->path_conflict;
+ ci->merged.result.mode = merged_file.mode;
+ ci->merged.is_null = (merged_file.mode == 0);
+ oidcpy(&ci->merged.result.oid, &merged_file.oid);
+ if (clean_merge && ci->df_conflict) {
+ assert(df_file_index == 1 || df_file_index == 2);
+ ci->filemask = 1 << df_file_index;
+ ci->stages[df_file_index].mode = merged_file.mode;
+ oidcpy(&ci->stages[df_file_index].oid, &merged_file.oid);
+ }
+ if (!clean_merge) {
+ const char *reason = _("content");
+ if (ci->filemask == 6)
+ reason = _("add/add");
+ if (S_ISGITLINK(merged_file.mode))
+ reason = _("submodule");
+ path_msg(opt, path, 0,
+ _("CONFLICT (%s): Merge conflict in %s"),
+ reason, path);
+ }
+ } else if (ci->filemask == 3 || ci->filemask == 5) {
+ /* Modify/delete */
+ const char *modify_branch, *delete_branch;
+ int side = (ci->filemask == 5) ? 2 : 1;
+ int index = opt->priv->call_depth ? 0 : side;
+
+ ci->merged.result.mode = ci->stages[index].mode;
+ oidcpy(&ci->merged.result.oid, &ci->stages[index].oid);
+ ci->merged.clean = 0;
+
+ modify_branch = (side == 1) ? opt->branch1 : opt->branch2;
+ delete_branch = (side == 1) ? opt->branch2 : opt->branch1;
+
+ if (ci->path_conflict &&
+ oideq(&ci->stages[0].oid, &ci->stages[side].oid)) {
+ /*
+ * This came from a rename/delete; no action to take,
+ * but avoid printing "modify/delete" conflict notice
+ * since the contents were not modified.
+ */
+ } else {
+ path_msg(opt, path, 0,
+ _("CONFLICT (modify/delete): %s deleted in %s "
+ "and modified in %s. Version %s of %s left "
+ "in tree."),
+ path, delete_branch, modify_branch,
+ modify_branch, path);
+ }
+ } else if (ci->filemask == 2 || ci->filemask == 4) {
+ /* Added on one side */
+ int side = (ci->filemask == 4) ? 2 : 1;
+ ci->merged.result.mode = ci->stages[side].mode;
+ oidcpy(&ci->merged.result.oid, &ci->stages[side].oid);
+ ci->merged.clean = !ci->df_conflict && !ci->path_conflict;
+ } else if (ci->filemask == 1) {
+ /* Deleted on both sides */
+ ci->merged.is_null = 1;
+ ci->merged.result.mode = 0;
+ oidcpy(&ci->merged.result.oid, &null_oid);
+ ci->merged.clean = !ci->path_conflict;
+ }
+
+ /*
+ * If still conflicted, record it separately. This allows us to later
+ * iterate over just conflicted entries when updating the index instead
+ * of iterating over all entries.
+ */
+ if (!ci->merged.clean)
+ strmap_put(&opt->priv->conflicted, path, ci);
+ record_entry_for_tree(dir_metadata, path, &ci->merged);
+}
+
+static void process_entries(struct merge_options *opt,
+ struct object_id *result_oid)
+{
+ struct hashmap_iter iter;
+ struct strmap_entry *e;
+ struct string_list plist = STRING_LIST_INIT_NODUP;
+ struct string_list_item *entry;
+ struct directory_versions dir_metadata = { STRING_LIST_INIT_NODUP,
+ STRING_LIST_INIT_NODUP,
+ NULL, 0 };
+
+ trace2_region_enter("merge", "process_entries setup", opt->repo);
+ if (strmap_empty(&opt->priv->paths)) {
+ oidcpy(result_oid, opt->repo->hash_algo->empty_tree);
+ return;
+ }
+
+ /* Hack to pre-allocate plist to the desired size */
+ trace2_region_enter("merge", "plist grow", opt->repo);
+ ALLOC_GROW(plist.items, strmap_get_size(&opt->priv->paths), plist.alloc);
+ trace2_region_leave("merge", "plist grow", opt->repo);
+
+ /* Put every entry from paths into plist, then sort */
+ trace2_region_enter("merge", "plist copy", opt->repo);
+ strmap_for_each_entry(&opt->priv->paths, &iter, e) {
+ string_list_append(&plist, e->key)->util = e->value;
+ }
+ trace2_region_leave("merge", "plist copy", opt->repo);
+
+ trace2_region_enter("merge", "plist special sort", opt->repo);
+ plist.cmp = string_list_df_name_compare;
+ string_list_sort(&plist);
+ trace2_region_leave("merge", "plist special sort", opt->repo);
+
+ trace2_region_leave("merge", "process_entries setup", opt->repo);
+
+ /*
+ * Iterate over the items in reverse order, so we can handle paths
+ * below a directory before needing to handle the directory itself.
+ *
+ * This allows us to write subtrees before we need to write trees,
+ * and it also enables sane handling of directory/file conflicts
+ * (because it allows us to know whether the directory is still in
+ * the way when it is time to process the file at the same path).
+ */
+ trace2_region_enter("merge", "processing", opt->repo);
+ for (entry = &plist.items[plist.nr-1]; entry >= plist.items; --entry) {
+ char *path = entry->string;
+ /*
+ * NOTE: mi may actually be a pointer to a conflict_info, but
+ * we have to check mi->clean first to see if it's safe to
+ * reassign to such a pointer type.
+ */
+ struct merged_info *mi = entry->util;
+
+ write_completed_directory(opt, mi->directory_name,
+ &dir_metadata);
+ if (mi->clean)
+ record_entry_for_tree(&dir_metadata, path, mi);
+ else {
+ struct conflict_info *ci = (struct conflict_info *)mi;
+ process_entry(opt, path, ci, &dir_metadata);
+ }
+ }
+ trace2_region_leave("merge", "processing", opt->repo);
+
+ trace2_region_enter("merge", "process_entries cleanup", opt->repo);
+ if (dir_metadata.offsets.nr != 1 ||
+ (uintptr_t)dir_metadata.offsets.items[0].util != 0) {
+ printf("dir_metadata.offsets.nr = %d (should be 1)\n",
+ dir_metadata.offsets.nr);
+ printf("dir_metadata.offsets.items[0].util = %u (should be 0)\n",
+ (unsigned)(uintptr_t)dir_metadata.offsets.items[0].util);
+ fflush(stdout);
+ BUG("dir_metadata accounting completely off; shouldn't happen");
+ }
+ write_tree(result_oid, &dir_metadata.versions, 0,
+ opt->repo->hash_algo->rawsz);
+ string_list_clear(&plist, 0);
+ string_list_clear(&dir_metadata.versions, 0);
+ string_list_clear(&dir_metadata.offsets, 0);
+ trace2_region_leave("merge", "process_entries cleanup", opt->repo);
+}
+
+/*** Function Grouping: functions related to merge_switch_to_result() ***/
+
+static int checkout(struct merge_options *opt,
+ struct tree *prev,
+ struct tree *next)
+{
+ /* Switch the index/working copy from old to new */
+ int ret;
+ struct tree_desc trees[2];
+ struct unpack_trees_options unpack_opts;
+
+ memset(&unpack_opts, 0, sizeof(unpack_opts));
+ unpack_opts.head_idx = -1;
+ unpack_opts.src_index = opt->repo->index;
+ unpack_opts.dst_index = opt->repo->index;
+
+ setup_unpack_trees_porcelain(&unpack_opts, "merge");
+
+ /*
+ * NOTE: if this were just "git checkout" code, we would probably
+ * read or refresh the cache and check for a conflicted index, but
+ * builtin/merge.c or sequencer.c really needs to read the index
+ * and check for conflicted entries before starting merging for a
+ * good user experience (no sense waiting for merges/rebases before
+ * erroring out), so there's no reason to duplicate that work here.
+ */
+
+ /* 2-way merge to the new branch */
+ unpack_opts.update = 1;
+ unpack_opts.merge = 1;
+ unpack_opts.quiet = 0; /* FIXME: sequencer might want quiet? */
+ unpack_opts.verbose_update = (opt->verbosity > 2);
+ unpack_opts.fn = twoway_merge;
+ if (1/* FIXME: opts->overwrite_ignore*/) {
+ CALLOC_ARRAY(unpack_opts.dir, 1);
+ unpack_opts.dir->flags |= DIR_SHOW_IGNORED;
+ setup_standard_excludes(unpack_opts.dir);
+ }
+ parse_tree(prev);
+ init_tree_desc(&trees[0], prev->buffer, prev->size);
+ parse_tree(next);
+ init_tree_desc(&trees[1], next->buffer, next->size);
+
+ ret = unpack_trees(2, trees, &unpack_opts);
+ clear_unpack_trees_porcelain(&unpack_opts);
+ dir_clear(unpack_opts.dir);
+ FREE_AND_NULL(unpack_opts.dir);
+ return ret;
+}
+
+static int record_conflicted_index_entries(struct merge_options *opt,
+ struct index_state *index,
+ struct strmap *paths,
+ struct strmap *conflicted)
+{
+ struct hashmap_iter iter;
+ struct strmap_entry *e;
+ int errs = 0;
+ int original_cache_nr;
+
+ if (strmap_empty(conflicted))
+ return 0;
+
+ original_cache_nr = index->cache_nr;
+
+ /* Put every entry from paths into plist, then sort */
+ strmap_for_each_entry(conflicted, &iter, e) {
+ const char *path = e->key;
+ struct conflict_info *ci = e->value;
+ int pos;
+ struct cache_entry *ce;
+ int i;
+
+ VERIFY_CI(ci);
+
+ /*
+ * The index will already have a stage=0 entry for this path,
+ * because we created an as-merged-as-possible version of the
+ * file and checkout() moved the working copy and index over
+ * to that version.
+ *
+ * However, previous iterations through this loop will have
+ * added unstaged entries to the end of the cache which
+ * ignore the standard alphabetical ordering of cache
+ * entries and break invariants needed for index_name_pos()
+ * to work. However, we know the entry we want is before
+ * those appended cache entries, so do a temporary swap on
+ * cache_nr to only look through entries of interest.
+ */
+ SWAP(index->cache_nr, original_cache_nr);
+ pos = index_name_pos(index, path, strlen(path));
+ SWAP(index->cache_nr, original_cache_nr);
+ if (pos < 0) {
+ if (ci->filemask != 1)
+ BUG("Conflicted %s but nothing in basic working tree or index; this shouldn't happen", path);
+ cache_tree_invalidate_path(index, path);
+ } else {
+ ce = index->cache[pos];
+
+ /*
+ * Clean paths with CE_SKIP_WORKTREE set will not be
+ * written to the working tree by the unpack_trees()
+ * call in checkout(). Our conflicted entries would
+ * have appeared clean to that code since we ignored
+ * the higher order stages. Thus, we need override
+ * the CE_SKIP_WORKTREE bit and manually write those
+ * files to the working disk here.
+ *
+ * TODO: Implement this CE_SKIP_WORKTREE fixup.
+ */
+
+ /*
+ * Mark this cache entry for removal and instead add
+ * new stage>0 entries corresponding to the
+ * conflicts. If there are many conflicted entries, we
+ * want to avoid memmove'ing O(NM) entries by
+ * inserting the new entries one at a time. So,
+ * instead, we just add the new cache entries to the
+ * end (ignoring normal index requirements on sort
+ * order) and sort the index once we're all done.
+ */
+ ce->ce_flags |= CE_REMOVE;
+ }
+
+ for (i = MERGE_BASE; i <= MERGE_SIDE2; i++) {
+ struct version_info *vi;
+ if (!(ci->filemask & (1ul << i)))
+ continue;
+ vi = &ci->stages[i];
+ ce = make_cache_entry(index, vi->mode, &vi->oid,
+ path, i+1, 0);
+ add_index_entry(index, ce, ADD_CACHE_JUST_APPEND);
+ }
+ }
+
+ /*
+ * Remove the unused cache entries (and invalidate the relevant
+ * cache-trees), then sort the index entries to get the conflicted
+ * entries we added to the end into their right locations.
+ */
+ remove_marked_cache_entries(index, 1);
+ QSORT(index->cache, index->cache_nr, cmp_cache_name_compare);
+
+ return errs;
+}
+
void merge_switch_to_result(struct merge_options *opt,
struct tree *head,
struct merge_result *result,
int update_worktree_and_index,
int display_update_msgs)
{
- die("Not yet implemented");
+ assert(opt->priv == NULL);
+ if (result->clean >= 0 && update_worktree_and_index) {
+ struct merge_options_internal *opti = result->priv;
+
+ trace2_region_enter("merge", "checkout", opt->repo);
+ if (checkout(opt, head, result->tree)) {
+ /* failure to function */
+ result->clean = -1;
+ return;
+ }
+ trace2_region_leave("merge", "checkout", opt->repo);
+
+ trace2_region_enter("merge", "record_conflicted", opt->repo);
+ if (record_conflicted_index_entries(opt, opt->repo->index,
+ &opti->paths,
+ &opti->conflicted)) {
+ /* failure to function */
+ result->clean = -1;
+ return;
+ }
+ trace2_region_leave("merge", "record_conflicted", opt->repo);
+ }
+
+ if (display_update_msgs) {
+ struct merge_options_internal *opti = result->priv;
+ struct hashmap_iter iter;
+ struct strmap_entry *e;
+ struct string_list olist = STRING_LIST_INIT_NODUP;
+ int i;
+
+ trace2_region_enter("merge", "display messages", opt->repo);
+
+ /* Hack to pre-allocate olist to the desired size */
+ ALLOC_GROW(olist.items, strmap_get_size(&opti->output),
+ olist.alloc);
+
+ /* Put every entry from output into olist, then sort */
+ strmap_for_each_entry(&opti->output, &iter, e) {
+ string_list_append(&olist, e->key)->util = e->value;
+ }
+ string_list_sort(&olist);
+
+ /* Iterate over the items, printing them */
+ for (i = 0; i < olist.nr; ++i) {
+ struct strbuf *sb = olist.items[i].util;
+
+ printf("%s", sb->buf);
+ }
+ string_list_clear(&olist, 0);
+
+ /* Also include needed rename limit adjustment now */
+ diff_warn_rename_limit("merge.renamelimit",
+ opti->renames.needed_limit, 0);
+
+ trace2_region_leave("merge", "display messages", opt->repo);
+ }
+
merge_finalize(opt, result);
}
void merge_finalize(struct merge_options *opt,
struct merge_result *result)
{
- die("Not yet implemented");
+ struct merge_options_internal *opti = result->priv;
+
+ assert(opt->priv == NULL);
+
+ clear_or_reinit_internal_opts(opti, 0);
+ FREE_AND_NULL(opti);
+}
+
+/*** Function Grouping: helper functions for merge_incore_*() ***/
+
+static inline void set_commit_tree(struct commit *c, struct tree *t)
+{
+ c->maybe_tree = t;
+}
+
+static struct commit *make_virtual_commit(struct repository *repo,
+ struct tree *tree,
+ const char *comment)
+{
+ struct commit *commit = alloc_commit_node(repo);
+
+ set_merge_remote_desc(commit, comment, (struct object *)commit);
+ set_commit_tree(commit, tree);
+ commit->object.parsed = 1;
+ return commit;
+}
+
+static void merge_start(struct merge_options *opt, struct merge_result *result)
+{
+ struct rename_info *renames;
+ int i;
+
+ /* Sanity checks on opt */
+ trace2_region_enter("merge", "sanity checks", opt->repo);
+ assert(opt->repo);
+
+ assert(opt->branch1 && opt->branch2);
+
+ assert(opt->detect_directory_renames >= MERGE_DIRECTORY_RENAMES_NONE &&
+ opt->detect_directory_renames <= MERGE_DIRECTORY_RENAMES_TRUE);
+ assert(opt->rename_limit >= -1);
+ assert(opt->rename_score >= 0 && opt->rename_score <= MAX_SCORE);
+ assert(opt->show_rename_progress >= 0 && opt->show_rename_progress <= 1);
+
+ assert(opt->xdl_opts >= 0);
+ assert(opt->recursive_variant >= MERGE_VARIANT_NORMAL &&
+ opt->recursive_variant <= MERGE_VARIANT_THEIRS);
+
+ /*
+ * detect_renames, verbosity, buffer_output, and obuf are ignored
+ * fields that were used by "recursive" rather than "ort" -- but
+ * sanity check them anyway.
+ */
+ assert(opt->detect_renames >= -1 &&
+ opt->detect_renames <= DIFF_DETECT_COPY);
+ assert(opt->verbosity >= 0 && opt->verbosity <= 5);
+ assert(opt->buffer_output <= 2);
+ assert(opt->obuf.len == 0);
+
+ assert(opt->priv == NULL);
+ if (result->priv) {
+ opt->priv = result->priv;
+ result->priv = NULL;
+ /*
+ * opt->priv non-NULL means we had results from a previous
+ * run; do a few sanity checks that user didn't mess with
+ * it in an obvious fashion.
+ */
+ assert(opt->priv->call_depth == 0);
+ assert(!opt->priv->toplevel_dir ||
+ 0 == strlen(opt->priv->toplevel_dir));
+ }
+ trace2_region_leave("merge", "sanity checks", opt->repo);
+
+ /* Default to histogram diff. Actually, just hardcode it...for now. */
+ opt->xdl_opts = DIFF_WITH_ALG(opt, HISTOGRAM_DIFF);
+
+ /* Initialization of opt->priv, our internal merge data */
+ trace2_region_enter("merge", "allocate/init", opt->repo);
+ if (opt->priv) {
+ clear_or_reinit_internal_opts(opt->priv, 1);
+ trace2_region_leave("merge", "allocate/init", opt->repo);
+ return;
+ }
+ opt->priv = xcalloc(1, sizeof(*opt->priv));
+
+ /* Initialization of various renames fields */
+ renames = &opt->priv->renames;
+ for (i = MERGE_SIDE1; i <= MERGE_SIDE2; i++) {
+ strset_init_with_options(&renames->dirs_removed[i],
+ NULL, 0);
+ strmap_init_with_options(&renames->dir_rename_count[i],
+ NULL, 1);
+ strmap_init_with_options(&renames->dir_renames[i],
+ NULL, 0);
+ }
+
+ /*
+ * Although we initialize opt->priv->paths with strdup_strings=0,
+ * that's just to avoid making yet another copy of an allocated
+ * string. Putting the entry into paths means we are taking
+ * ownership, so we will later free it. paths_to_free is similar.
+ *
+ * In contrast, conflicted just has a subset of keys from paths, so
+ * we don't want to free those (it'd be a duplicate free).
+ */
+ strmap_init_with_options(&opt->priv->paths, NULL, 0);
+ strmap_init_with_options(&opt->priv->conflicted, NULL, 0);
+ string_list_init(&opt->priv->paths_to_free, 0);
+
+ /*
+ * keys & strbufs in output will sometimes need to outlive "paths",
+ * so it will have a copy of relevant keys. It's probably a small
+ * subset of the overall paths that have special output.
+ */
+ strmap_init(&opt->priv->output);
+
+ trace2_region_leave("merge", "allocate/init", opt->repo);
+}
+
+/*** Function Grouping: merge_incore_*() and their internal variants ***/
+
+/*
+ * Originally from merge_trees_internal(); heavily adapted, though.
+ */
+static void merge_ort_nonrecursive_internal(struct merge_options *opt,
+ struct tree *merge_base,
+ struct tree *side1,
+ struct tree *side2,
+ struct merge_result *result)
+{
+ struct object_id working_tree_oid;
+
+ trace2_region_enter("merge", "collect_merge_info", opt->repo);
+ if (collect_merge_info(opt, merge_base, side1, side2) != 0) {
+ /*
+ * TRANSLATORS: The %s arguments are: 1) tree hash of a merge
+ * base, and 2-3) the trees for the two trees we're merging.
+ */
+ err(opt, _("collecting merge info failed for trees %s, %s, %s"),
+ oid_to_hex(&merge_base->object.oid),
+ oid_to_hex(&side1->object.oid),
+ oid_to_hex(&side2->object.oid));
+ result->clean = -1;
+ return;
+ }
+ trace2_region_leave("merge", "collect_merge_info", opt->repo);
+
+ trace2_region_enter("merge", "renames", opt->repo);
+ result->clean = detect_and_process_renames(opt, merge_base,
+ side1, side2);
+ trace2_region_leave("merge", "renames", opt->repo);
+
+ trace2_region_enter("merge", "process_entries", opt->repo);
+ process_entries(opt, &working_tree_oid);
+ trace2_region_leave("merge", "process_entries", opt->repo);
+
+ /* Set return values */
+ result->tree = parse_tree_indirect(&working_tree_oid);
+ /* existence of conflicted entries implies unclean */
+ result->clean &= strmap_empty(&opt->priv->conflicted);
+ if (!opt->priv->call_depth) {
+ result->priv = opt->priv;
+ opt->priv = NULL;
+ }
+}
+
+/*
+ * Originally from merge_recursive_internal(); somewhat adapted, though.
+ */
+static void merge_ort_internal(struct merge_options *opt,
+ struct commit_list *merge_bases,
+ struct commit *h1,
+ struct commit *h2,
+ struct merge_result *result)
+{
+ struct commit_list *iter;
+ struct commit *merged_merge_bases;
+ const char *ancestor_name;
+ struct strbuf merge_base_abbrev = STRBUF_INIT;
+
+ if (!merge_bases) {
+ merge_bases = get_merge_bases(h1, h2);
+ /* See merge-ort.h:merge_incore_recursive() declaration NOTE */
+ merge_bases = reverse_commit_list(merge_bases);
+ }
+
+ merged_merge_bases = pop_commit(&merge_bases);
+ if (merged_merge_bases == NULL) {
+ /* if there is no common ancestor, use an empty tree */
+ struct tree *tree;
+
+ tree = lookup_tree(opt->repo, opt->repo->hash_algo->empty_tree);
+ merged_merge_bases = make_virtual_commit(opt->repo, tree,
+ "ancestor");
+ ancestor_name = "empty tree";
+ } else if (merge_bases) {
+ ancestor_name = "merged common ancestors";
+ } else {
+ strbuf_add_unique_abbrev(&merge_base_abbrev,
+ &merged_merge_bases->object.oid,
+ DEFAULT_ABBREV);
+ ancestor_name = merge_base_abbrev.buf;
+ }
+
+ for (iter = merge_bases; iter; iter = iter->next) {
+ const char *saved_b1, *saved_b2;
+ struct commit *prev = merged_merge_bases;
+
+ opt->priv->call_depth++;
+ /*
+ * When the merge fails, the result contains files
+ * with conflict markers. The cleanness flag is
+ * ignored (unless indicating an error), it was never
+ * actually used, as result of merge_trees has always
+ * overwritten it: the committed "conflicts" were
+ * already resolved.
+ */
+ saved_b1 = opt->branch1;
+ saved_b2 = opt->branch2;
+ opt->branch1 = "Temporary merge branch 1";
+ opt->branch2 = "Temporary merge branch 2";
+ merge_ort_internal(opt, NULL, prev, iter->item, result);
+ if (result->clean < 0)
+ return;
+ opt->branch1 = saved_b1;
+ opt->branch2 = saved_b2;
+ opt->priv->call_depth--;
+
+ merged_merge_bases = make_virtual_commit(opt->repo,
+ result->tree,
+ "merged tree");
+ commit_list_insert(prev, &merged_merge_bases->parents);
+ commit_list_insert(iter->item,
+ &merged_merge_bases->parents->next);
+
+ clear_or_reinit_internal_opts(opt->priv, 1);
+ }
+
+ opt->ancestor = ancestor_name;
+ merge_ort_nonrecursive_internal(opt,
+ repo_get_commit_tree(opt->repo,
+ merged_merge_bases),
+ repo_get_commit_tree(opt->repo, h1),
+ repo_get_commit_tree(opt->repo, h2),
+ result);
+ strbuf_release(&merge_base_abbrev);
+ opt->ancestor = NULL; /* avoid accidental re-use of opt->ancestor */
}
void merge_incore_nonrecursive(struct merge_options *opt,
@@ -39,7 +3519,15 @@ void merge_incore_nonrecursive(struct merge_options *opt,
struct tree *side2,
struct merge_result *result)
{
- die("Not yet implemented");
+ trace2_region_enter("merge", "incore_nonrecursive", opt->repo);
+
+ trace2_region_enter("merge", "merge_start", opt->repo);
+ assert(opt->ancestor != NULL);
+ merge_start(opt, result);
+ trace2_region_leave("merge", "merge_start", opt->repo);
+
+ merge_ort_nonrecursive_internal(opt, merge_base, side1, side2, result);
+ trace2_region_leave("merge", "incore_nonrecursive", opt->repo);
}
void merge_incore_recursive(struct merge_options *opt,
@@ -48,5 +3536,15 @@ void merge_incore_recursive(struct merge_options *opt,
struct commit *side2,
struct merge_result *result)
{
- die("Not yet implemented");
+ trace2_region_enter("merge", "incore_recursive", opt->repo);
+
+ /* We set the ancestor label based on the merge_bases */
+ assert(opt->ancestor == NULL);
+
+ trace2_region_enter("merge", "merge_start", opt->repo);
+ merge_start(opt, result);
+ trace2_region_leave("merge", "merge_start", opt->repo);
+
+ merge_ort_internal(opt, merge_bases, side1, side2, result);
+ trace2_region_leave("merge", "incore_recursive", opt->repo);
}
diff --git a/merge-ort.h b/merge-ort.h
index 74adcca..d53a0a3 100644
--- a/merge-ort.h
+++ b/merge-ort.h
@@ -7,7 +7,14 @@ struct commit;
struct tree;
struct merge_result {
- /* Whether the merge is clean */
+ /*
+ * Whether the merge is clean; possible values:
+ * 1: clean
+ * 0: not clean (merge conflicts)
+ * <0: operation aborted prematurely. (object database
+ * unreadable, disk full, etc.) Worktree may be left in an
+ * inconsistent state if operation failed near the end.
+ */
int clean;
/*
@@ -27,6 +34,16 @@ struct merge_result {
/*
* rename-detecting three-way merge with recursive ancestor consolidation.
* working tree and index are untouched.
+ *
+ * merge_bases will be consumed (emptied) so make a copy if you need it.
+ *
+ * NOTE: empirically, the recursive algorithm will perform better if you
+ * pass the merge_bases in the order of oldest commit to the
+ * newest[1][2].
+ *
+ * [1] https://lore.kernel.org/git/nycvar.QRO.7.76.6.1907252055500.21907@tvgsbejvaqbjf.bet/
+ * [2] commit 8918b0c9c2 ("merge-recur: try to merge older merge bases
+ * first", 2006-08-09)
*/
void merge_incore_recursive(struct merge_options *opt,
struct commit_list *merge_bases,
diff --git a/merge-recursive.c b/merge-recursive.c
index f736a0f..b69e694 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -303,7 +303,7 @@ static inline void setup_rename_conflict_info(enum rename_type rename_type,
return;
}
- ci = xcalloc(1, sizeof(struct rename_conflict_info));
+ CALLOC_ARRAY(ci, 1);
ci->rename_type = rename_type;
ci->ren1 = ren1;
ci->ren2 = ren2;
@@ -2389,8 +2389,7 @@ static void compute_collisions(struct hashmap *collisions,
continue;
collision_ent = collision_find_entry(collisions, new_path);
if (!collision_ent) {
- collision_ent = xcalloc(1,
- sizeof(struct collision_entry));
+ CALLOC_ARRAY(collision_ent, 1);
hashmap_entry_init(&collision_ent->ent,
strhash(new_path));
hashmap_put(collisions, &collision_ent->ent);
@@ -2594,7 +2593,7 @@ static struct string_list *get_renames(struct merge_options *opt,
struct string_list *renames;
compute_collisions(&collisions, dir_renames, pairs);
- renames = xcalloc(1, sizeof(struct string_list));
+ CALLOC_ARRAY(renames, 1);
for (i = 0; i < pairs->nr; ++i) {
struct string_list_item *item;
@@ -3517,17 +3516,6 @@ static int merge_trees_internal(struct merge_options *opt,
return clean;
}
-static struct commit_list *reverse_commit_list(struct commit_list *list)
-{
- struct commit_list *next = NULL, *current, *backup;
- for (current = list; current; current = backup) {
- backup = current->next;
- current->next = next;
- next = current;
- }
- return next;
-}
-
/*
* Merge the commits h1 and h2, returning a flag (int) indicating the
* cleanness of the merge. Also, if opt->priv->call_depth, create a
@@ -3675,7 +3663,7 @@ static int merge_start(struct merge_options *opt, struct tree *head)
return -1;
}
- opt->priv = xcalloc(1, sizeof(*opt->priv));
+ CALLOC_ARRAY(opt->priv, 1);
string_list_init(&opt->priv->df_conflict_file_set, 1);
return 0;
}
diff --git a/mergetools/vimdiff b/mergetools/vimdiff
index abc8ce4..96f6209 100644
--- a/mergetools/vimdiff
+++ b/mergetools/vimdiff
@@ -15,6 +15,17 @@
"$LOCAL" "$MERGED" "$REMOTE"
fi
;;
+ *vimdiff1)
+ "$merge_tool_path" -f -d \
+ -c 'echon "Resolve conflicts leftward then save. Use :cq to abort."' \
+ "$LOCAL" "$REMOTE"
+ ret="$?"
+ if test "$ret" -eq 0
+ then
+ cp -- "$LOCAL" "$MERGED"
+ fi
+ return "$ret"
+ ;;
*vimdiff2)
"$merge_tool_path" -f -d -c 'wincmd l' \
"$LOCAL" "$MERGED" "$REMOTE"
@@ -52,7 +63,7 @@
list_tool_variants () {
for prefix in '' g n; do
- for suffix in '' 2 3; do
+ for suffix in '' 1 2 3; do
echo "${prefix}vimdiff${suffix}"
done
done
diff --git a/midx.c b/midx.c
index 9d41b9c..becfafe 100644
--- a/midx.c
+++ b/midx.c
@@ -5,12 +5,13 @@
#include "lockfile.h"
#include "packfile.h"
#include "object-store.h"
-#include "sha1-lookup.h"
+#include "hash-lookup.h"
#include "midx.h"
#include "progress.h"
#include "trace2.h"
#include "run-command.h"
#include "repository.h"
+#include "chunk-format.h"
#define MIDX_SIGNATURE 0x4d494458 /* "MIDX" */
#define MIDX_VERSION 1
@@ -21,14 +22,12 @@
#define MIDX_HEADER_SIZE 12
#define MIDX_MIN_SIZE (MIDX_HEADER_SIZE + the_hash_algo->rawsz)
-#define MIDX_MAX_CHUNKS 5
#define MIDX_CHUNK_ALIGNMENT 4
#define MIDX_CHUNKID_PACKNAMES 0x504e414d /* "PNAM" */
#define MIDX_CHUNKID_OIDFANOUT 0x4f494446 /* "OIDF" */
#define MIDX_CHUNKID_OIDLOOKUP 0x4f49444c /* "OIDL" */
#define MIDX_CHUNKID_OBJECTOFFSETS 0x4f4f4646 /* "OOFF" */
#define MIDX_CHUNKID_LARGEOFFSETS 0x4c4f4646 /* "LOFF" */
-#define MIDX_CHUNKLOOKUP_WIDTH (sizeof(uint32_t) + sizeof(uint64_t))
#define MIDX_CHUNK_FANOUT_SIZE (sizeof(uint32_t) * 256)
#define MIDX_CHUNK_OFFSET_WIDTH (2 * sizeof(uint32_t))
#define MIDX_CHUNK_LARGE_OFFSET_WIDTH (sizeof(uint64_t))
@@ -53,6 +52,19 @@ static char *get_midx_filename(const char *object_dir)
return xstrfmt("%s/pack/multi-pack-index", object_dir);
}
+static int midx_read_oid_fanout(const unsigned char *chunk_start,
+ size_t chunk_size, void *data)
+{
+ struct multi_pack_index *m = data;
+ m->chunk_oid_fanout = (uint32_t *)chunk_start;
+
+ if (chunk_size != 4 * 256) {
+ error(_("multi-pack-index OID fanout is of the wrong size"));
+ return 1;
+ }
+ return 0;
+}
+
struct multi_pack_index *load_multi_pack_index(const char *object_dir, int local)
{
struct multi_pack_index *m = NULL;
@@ -64,6 +76,7 @@ struct multi_pack_index *load_multi_pack_index(const char *object_dir, int local
char *midx_name = get_midx_filename(object_dir);
uint32_t i;
const char *cur_pack_name;
+ struct chunkfile *cf = NULL;
fd = git_open(midx_name);
@@ -113,62 +126,27 @@ struct multi_pack_index *load_multi_pack_index(const char *object_dir, int local
m->num_packs = get_be32(m->data + MIDX_BYTE_NUM_PACKS);
- for (i = 0; i < m->num_chunks; i++) {
- uint32_t chunk_id = get_be32(m->data + MIDX_HEADER_SIZE +
- MIDX_CHUNKLOOKUP_WIDTH * i);
- uint64_t chunk_offset = get_be64(m->data + MIDX_HEADER_SIZE + 4 +
- MIDX_CHUNKLOOKUP_WIDTH * i);
+ cf = init_chunkfile(NULL);
- if (chunk_offset >= m->data_len)
- die(_("invalid chunk offset (too large)"));
+ if (read_table_of_contents(cf, m->data, midx_size,
+ MIDX_HEADER_SIZE, m->num_chunks))
+ goto cleanup_fail;
- switch (chunk_id) {
- case MIDX_CHUNKID_PACKNAMES:
- m->chunk_pack_names = m->data + chunk_offset;
- break;
-
- case MIDX_CHUNKID_OIDFANOUT:
- m->chunk_oid_fanout = (uint32_t *)(m->data + chunk_offset);
- break;
-
- case MIDX_CHUNKID_OIDLOOKUP:
- m->chunk_oid_lookup = m->data + chunk_offset;
- break;
-
- case MIDX_CHUNKID_OBJECTOFFSETS:
- m->chunk_object_offsets = m->data + chunk_offset;
- break;
-
- case MIDX_CHUNKID_LARGEOFFSETS:
- m->chunk_large_offsets = m->data + chunk_offset;
- break;
-
- case 0:
- die(_("terminating multi-pack-index chunk id appears earlier than expected"));
- break;
-
- default:
- /*
- * Do nothing on unrecognized chunks, allowing future
- * extensions to add optional chunks.
- */
- break;
- }
- }
-
- if (!m->chunk_pack_names)
+ if (pair_chunk(cf, MIDX_CHUNKID_PACKNAMES, &m->chunk_pack_names) == CHUNK_NOT_FOUND)
die(_("multi-pack-index missing required pack-name chunk"));
- if (!m->chunk_oid_fanout)
+ if (read_chunk(cf, MIDX_CHUNKID_OIDFANOUT, midx_read_oid_fanout, m) == CHUNK_NOT_FOUND)
die(_("multi-pack-index missing required OID fanout chunk"));
- if (!m->chunk_oid_lookup)
+ if (pair_chunk(cf, MIDX_CHUNKID_OIDLOOKUP, &m->chunk_oid_lookup) == CHUNK_NOT_FOUND)
die(_("multi-pack-index missing required OID lookup chunk"));
- if (!m->chunk_object_offsets)
+ if (pair_chunk(cf, MIDX_CHUNKID_OBJECTOFFSETS, &m->chunk_object_offsets) == CHUNK_NOT_FOUND)
die(_("multi-pack-index missing required object offsets chunk"));
+ pair_chunk(cf, MIDX_CHUNKID_LARGEOFFSETS, &m->chunk_large_offsets);
+
m->num_objects = ntohl(m->chunk_oid_fanout[255]);
- m->pack_names = xcalloc(m->num_packs, sizeof(*m->pack_names));
- m->packs = xcalloc(m->num_packs, sizeof(*m->packs));
+ CALLOC_ARRAY(m->pack_names, m->num_packs);
+ CALLOC_ARRAY(m->packs, m->num_packs);
cur_pack_name = (const char *)m->chunk_pack_names;
for (i = 0; i < m->num_packs; i++) {
@@ -190,6 +168,7 @@ struct multi_pack_index *load_multi_pack_index(const char *object_dir, int local
cleanup_fail:
free(m);
free(midx_name);
+ free(cf);
if (midx_map)
munmap(midx_map, midx_size);
if (0 <= fd)
@@ -265,7 +244,7 @@ static off_t nth_midxed_offset(struct multi_pack_index *m, uint32_t pos)
const unsigned char *offset_data;
uint32_t offset32;
- offset_data = m->chunk_object_offsets + pos * MIDX_CHUNK_OFFSET_WIDTH;
+ offset_data = m->chunk_object_offsets + (off_t)pos * MIDX_CHUNK_OFFSET_WIDTH;
offset32 = get_be32(offset_data + sizeof(uint32_t));
if (m->chunk_large_offsets && offset32 & MIDX_LARGE_OFFSET_NEEDED) {
@@ -281,7 +260,8 @@ static off_t nth_midxed_offset(struct multi_pack_index *m, uint32_t pos)
static uint32_t nth_midxed_pack_int_id(struct multi_pack_index *m, uint32_t pos)
{
- return get_be32(m->chunk_object_offsets + pos * MIDX_CHUNK_OFFSET_WIDTH);
+ return get_be32(m->chunk_object_offsets +
+ (off_t)pos * MIDX_CHUNK_OFFSET_WIDTH);
}
static int nth_midxed_pack_entry(struct repository *r,
@@ -451,49 +431,56 @@ static int pack_info_compare(const void *_a, const void *_b)
return strcmp(a->pack_name, b->pack_name);
}
-struct pack_list {
+struct write_midx_context {
struct pack_info *info;
uint32_t nr;
uint32_t alloc;
struct multi_pack_index *m;
struct progress *progress;
unsigned pack_paths_checked;
+
+ struct pack_midx_entry *entries;
+ uint32_t entries_nr;
+
+ uint32_t *pack_perm;
+ unsigned large_offsets_needed:1;
+ uint32_t num_large_offsets;
};
static void add_pack_to_midx(const char *full_path, size_t full_path_len,
const char *file_name, void *data)
{
- struct pack_list *packs = (struct pack_list *)data;
+ struct write_midx_context *ctx = data;
if (ends_with(file_name, ".idx")) {
- display_progress(packs->progress, ++packs->pack_paths_checked);
- if (packs->m && midx_contains_pack(packs->m, file_name))
+ display_progress(ctx->progress, ++ctx->pack_paths_checked);
+ if (ctx->m && midx_contains_pack(ctx->m, file_name))
return;
- ALLOC_GROW(packs->info, packs->nr + 1, packs->alloc);
+ ALLOC_GROW(ctx->info, ctx->nr + 1, ctx->alloc);
- packs->info[packs->nr].p = add_packed_git(full_path,
- full_path_len,
- 0);
+ ctx->info[ctx->nr].p = add_packed_git(full_path,
+ full_path_len,
+ 0);
- if (!packs->info[packs->nr].p) {
+ if (!ctx->info[ctx->nr].p) {
warning(_("failed to add packfile '%s'"),
full_path);
return;
}
- if (open_pack_index(packs->info[packs->nr].p)) {
+ if (open_pack_index(ctx->info[ctx->nr].p)) {
warning(_("failed to open pack-index '%s'"),
full_path);
- close_pack(packs->info[packs->nr].p);
- FREE_AND_NULL(packs->info[packs->nr].p);
+ close_pack(ctx->info[ctx->nr].p);
+ FREE_AND_NULL(ctx->info[ctx->nr].p);
return;
}
- packs->info[packs->nr].pack_name = xstrdup(file_name);
- packs->info[packs->nr].orig_pack_int_id = packs->nr;
- packs->info[packs->nr].expired = 0;
- packs->nr++;
+ ctx->info[ctx->nr].pack_name = xstrdup(file_name);
+ ctx->info[ctx->nr].orig_pack_int_id = ctx->nr;
+ ctx->info[ctx->nr].expired = 0;
+ ctx->nr++;
}
}
@@ -643,27 +630,26 @@ static struct pack_midx_entry *get_sorted_entries(struct multi_pack_index *m,
return deduplicated_entries;
}
-static size_t write_midx_pack_names(struct hashfile *f,
- struct pack_info *info,
- uint32_t num_packs)
+static int write_midx_pack_names(struct hashfile *f, void *data)
{
+ struct write_midx_context *ctx = data;
uint32_t i;
unsigned char padding[MIDX_CHUNK_ALIGNMENT];
size_t written = 0;
- for (i = 0; i < num_packs; i++) {
+ for (i = 0; i < ctx->nr; i++) {
size_t writelen;
- if (info[i].expired)
+ if (ctx->info[i].expired)
continue;
- if (i && strcmp(info[i].pack_name, info[i - 1].pack_name) <= 0)
+ if (i && strcmp(ctx->info[i].pack_name, ctx->info[i - 1].pack_name) <= 0)
BUG("incorrect pack-file order: %s before %s",
- info[i - 1].pack_name,
- info[i].pack_name);
+ ctx->info[i - 1].pack_name,
+ ctx->info[i].pack_name);
- writelen = strlen(info[i].pack_name) + 1;
- hashwrite(f, info[i].pack_name, writelen);
+ writelen = strlen(ctx->info[i].pack_name) + 1;
+ hashwrite(f, ctx->info[i].pack_name, writelen);
written += writelen;
}
@@ -672,18 +658,17 @@ static size_t write_midx_pack_names(struct hashfile *f,
if (i < MIDX_CHUNK_ALIGNMENT) {
memset(padding, 0, sizeof(padding));
hashwrite(f, padding, i);
- written += i;
}
- return written;
+ return 0;
}
-static size_t write_midx_oid_fanout(struct hashfile *f,
- struct pack_midx_entry *objects,
- uint32_t nr_objects)
+static int write_midx_oid_fanout(struct hashfile *f,
+ void *data)
{
- struct pack_midx_entry *list = objects;
- struct pack_midx_entry *last = objects + nr_objects;
+ struct write_midx_context *ctx = data;
+ struct pack_midx_entry *list = ctx->entries;
+ struct pack_midx_entry *last = ctx->entries + ctx->entries_nr;
uint32_t count = 0;
uint32_t i;
@@ -704,21 +689,21 @@ static size_t write_midx_oid_fanout(struct hashfile *f,
list = next;
}
- return MIDX_CHUNK_FANOUT_SIZE;
+ return 0;
}
-static size_t write_midx_oid_lookup(struct hashfile *f, unsigned char hash_len,
- struct pack_midx_entry *objects,
- uint32_t nr_objects)
+static int write_midx_oid_lookup(struct hashfile *f,
+ void *data)
{
- struct pack_midx_entry *list = objects;
+ struct write_midx_context *ctx = data;
+ unsigned char hash_len = the_hash_algo->rawsz;
+ struct pack_midx_entry *list = ctx->entries;
uint32_t i;
- size_t written = 0;
- for (i = 0; i < nr_objects; i++) {
+ for (i = 0; i < ctx->entries_nr; i++) {
struct pack_midx_entry *obj = list++;
- if (i < nr_objects - 1) {
+ if (i < ctx->entries_nr - 1) {
struct pack_midx_entry *next = list;
if (oidcmp(&obj->oid, &next->oid) >= 0)
BUG("OIDs not in order: %s >= %s",
@@ -727,50 +712,48 @@ static size_t write_midx_oid_lookup(struct hashfile *f, unsigned char hash_len,
}
hashwrite(f, obj->oid.hash, (int)hash_len);
- written += hash_len;
}
- return written;
+ return 0;
}
-static size_t write_midx_object_offsets(struct hashfile *f, int large_offset_needed,
- uint32_t *perm,
- struct pack_midx_entry *objects, uint32_t nr_objects)
+static int write_midx_object_offsets(struct hashfile *f,
+ void *data)
{
- struct pack_midx_entry *list = objects;
+ struct write_midx_context *ctx = data;
+ struct pack_midx_entry *list = ctx->entries;
uint32_t i, nr_large_offset = 0;
- size_t written = 0;
- for (i = 0; i < nr_objects; i++) {
+ for (i = 0; i < ctx->entries_nr; i++) {
struct pack_midx_entry *obj = list++;
- if (perm[obj->pack_int_id] == PACK_EXPIRED)
+ if (ctx->pack_perm[obj->pack_int_id] == PACK_EXPIRED)
BUG("object %s is in an expired pack with int-id %d",
oid_to_hex(&obj->oid),
obj->pack_int_id);
- hashwrite_be32(f, perm[obj->pack_int_id]);
+ hashwrite_be32(f, ctx->pack_perm[obj->pack_int_id]);
- if (large_offset_needed && obj->offset >> 31)
+ if (ctx->large_offsets_needed && obj->offset >> 31)
hashwrite_be32(f, MIDX_LARGE_OFFSET_NEEDED | nr_large_offset++);
- else if (!large_offset_needed && obj->offset >> 32)
+ else if (!ctx->large_offsets_needed && obj->offset >> 32)
BUG("object %s requires a large offset (%"PRIx64") but the MIDX is not writing large offsets!",
oid_to_hex(&obj->oid),
obj->offset);
else
hashwrite_be32(f, (uint32_t)obj->offset);
-
- written += MIDX_CHUNK_OFFSET_WIDTH;
}
- return written;
+ return 0;
}
-static size_t write_midx_large_offsets(struct hashfile *f, uint32_t nr_large_offset,
- struct pack_midx_entry *objects, uint32_t nr_objects)
+static int write_midx_large_offsets(struct hashfile *f,
+ void *data)
{
- struct pack_midx_entry *list = objects, *end = objects + nr_objects;
- size_t written = 0;
+ struct write_midx_context *ctx = data;
+ struct pack_midx_entry *list = ctx->entries;
+ struct pack_midx_entry *end = ctx->entries + ctx->entries_nr;
+ uint32_t nr_large_offset = ctx->num_large_offsets;
while (nr_large_offset) {
struct pack_midx_entry *obj;
@@ -785,34 +768,26 @@ static size_t write_midx_large_offsets(struct hashfile *f, uint32_t nr_large_off
if (!(offset >> 31))
continue;
- written += hashwrite_be64(f, offset);
+ hashwrite_be64(f, offset);
nr_large_offset--;
}
- return written;
+ return 0;
}
static int write_midx_internal(const char *object_dir, struct multi_pack_index *m,
struct string_list *packs_to_drop, unsigned flags)
{
- unsigned char cur_chunk, num_chunks = 0;
char *midx_name;
uint32_t i;
struct hashfile *f = NULL;
struct lock_file lk;
- struct pack_list packs;
- uint32_t *pack_perm = NULL;
- uint64_t written = 0;
- uint32_t chunk_ids[MIDX_MAX_CHUNKS + 1];
- uint64_t chunk_offsets[MIDX_MAX_CHUNKS + 1];
- uint32_t nr_entries, num_large_offsets = 0;
- struct pack_midx_entry *entries = NULL;
- struct progress *progress = NULL;
- int large_offsets_needed = 0;
+ struct write_midx_context ctx = { 0 };
int pack_name_concat_len = 0;
int dropped_packs = 0;
int result = 0;
+ struct chunkfile *cf;
midx_name = get_midx_filename(object_dir);
if (safe_create_leading_directories(midx_name))
@@ -820,61 +795,62 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
midx_name);
if (m)
- packs.m = m;
+ ctx.m = m;
else
- packs.m = load_multi_pack_index(object_dir, 1);
+ ctx.m = load_multi_pack_index(object_dir, 1);
- packs.nr = 0;
- packs.alloc = packs.m ? packs.m->num_packs : 16;
- packs.info = NULL;
- ALLOC_ARRAY(packs.info, packs.alloc);
+ ctx.nr = 0;
+ ctx.alloc = ctx.m ? ctx.m->num_packs : 16;
+ ctx.info = NULL;
+ ALLOC_ARRAY(ctx.info, ctx.alloc);
- if (packs.m) {
- for (i = 0; i < packs.m->num_packs; i++) {
- ALLOC_GROW(packs.info, packs.nr + 1, packs.alloc);
+ if (ctx.m) {
+ for (i = 0; i < ctx.m->num_packs; i++) {
+ ALLOC_GROW(ctx.info, ctx.nr + 1, ctx.alloc);
- packs.info[packs.nr].orig_pack_int_id = i;
- packs.info[packs.nr].pack_name = xstrdup(packs.m->pack_names[i]);
- packs.info[packs.nr].p = NULL;
- packs.info[packs.nr].expired = 0;
- packs.nr++;
+ ctx.info[ctx.nr].orig_pack_int_id = i;
+ ctx.info[ctx.nr].pack_name = xstrdup(ctx.m->pack_names[i]);
+ ctx.info[ctx.nr].p = NULL;
+ ctx.info[ctx.nr].expired = 0;
+ ctx.nr++;
}
}
- packs.pack_paths_checked = 0;
+ ctx.pack_paths_checked = 0;
if (flags & MIDX_PROGRESS)
- packs.progress = start_delayed_progress(_("Adding packfiles to multi-pack-index"), 0);
+ ctx.progress = start_delayed_progress(_("Adding packfiles to multi-pack-index"), 0);
else
- packs.progress = NULL;
+ ctx.progress = NULL;
- for_each_file_in_pack_dir(object_dir, add_pack_to_midx, &packs);
- stop_progress(&packs.progress);
+ for_each_file_in_pack_dir(object_dir, add_pack_to_midx, &ctx);
+ stop_progress(&ctx.progress);
- if (packs.m && packs.nr == packs.m->num_packs && !packs_to_drop)
+ if (ctx.m && ctx.nr == ctx.m->num_packs && !packs_to_drop)
goto cleanup;
- entries = get_sorted_entries(packs.m, packs.info, packs.nr, &nr_entries);
+ ctx.entries = get_sorted_entries(ctx.m, ctx.info, ctx.nr, &ctx.entries_nr);
- for (i = 0; i < nr_entries; i++) {
- if (entries[i].offset > 0x7fffffff)
- num_large_offsets++;
- if (entries[i].offset > 0xffffffff)
- large_offsets_needed = 1;
+ ctx.large_offsets_needed = 0;
+ for (i = 0; i < ctx.entries_nr; i++) {
+ if (ctx.entries[i].offset > 0x7fffffff)
+ ctx.num_large_offsets++;
+ if (ctx.entries[i].offset > 0xffffffff)
+ ctx.large_offsets_needed = 1;
}
- QSORT(packs.info, packs.nr, pack_info_compare);
+ QSORT(ctx.info, ctx.nr, pack_info_compare);
if (packs_to_drop && packs_to_drop->nr) {
int drop_index = 0;
int missing_drops = 0;
- for (i = 0; i < packs.nr && drop_index < packs_to_drop->nr; i++) {
- int cmp = strcmp(packs.info[i].pack_name,
+ for (i = 0; i < ctx.nr && drop_index < packs_to_drop->nr; i++) {
+ int cmp = strcmp(ctx.info[i].pack_name,
packs_to_drop->items[drop_index].string);
if (!cmp) {
drop_index++;
- packs.info[i].expired = 1;
+ ctx.info[i].expired = 1;
} else if (cmp > 0) {
error(_("did not see pack-file %s to drop"),
packs_to_drop->items[drop_index].string);
@@ -882,7 +858,7 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
missing_drops++;
i--;
} else {
- packs.info[i].expired = 0;
+ ctx.info[i].expired = 0;
}
}
@@ -898,19 +874,19 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
*
* pack_perm[old_id] = new_id
*/
- ALLOC_ARRAY(pack_perm, packs.nr);
- for (i = 0; i < packs.nr; i++) {
- if (packs.info[i].expired) {
+ ALLOC_ARRAY(ctx.pack_perm, ctx.nr);
+ for (i = 0; i < ctx.nr; i++) {
+ if (ctx.info[i].expired) {
dropped_packs++;
- pack_perm[packs.info[i].orig_pack_int_id] = PACK_EXPIRED;
+ ctx.pack_perm[ctx.info[i].orig_pack_int_id] = PACK_EXPIRED;
} else {
- pack_perm[packs.info[i].orig_pack_int_id] = i - dropped_packs;
+ ctx.pack_perm[ctx.info[i].orig_pack_int_id] = i - dropped_packs;
}
}
- for (i = 0; i < packs.nr; i++) {
- if (!packs.info[i].expired)
- pack_name_concat_len += strlen(packs.info[i].pack_name) + 1;
+ for (i = 0; i < ctx.nr; i++) {
+ if (!ctx.info[i].expired)
+ pack_name_concat_len += strlen(ctx.info[i].pack_name) + 1;
}
if (pack_name_concat_len % MIDX_CHUNK_ALIGNMENT)
@@ -921,123 +897,52 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
f = hashfd(get_lock_file_fd(&lk), get_lock_file_path(&lk));
FREE_AND_NULL(midx_name);
- if (packs.m)
- close_midx(packs.m);
+ if (ctx.m)
+ close_midx(ctx.m);
- cur_chunk = 0;
- num_chunks = large_offsets_needed ? 5 : 4;
-
- if (packs.nr - dropped_packs == 0) {
+ if (ctx.nr - dropped_packs == 0) {
error(_("no pack files to index."));
result = 1;
goto cleanup;
}
- written = write_midx_header(f, num_chunks, packs.nr - dropped_packs);
+ cf = init_chunkfile(f);
- chunk_ids[cur_chunk] = MIDX_CHUNKID_PACKNAMES;
- chunk_offsets[cur_chunk] = written + (num_chunks + 1) * MIDX_CHUNKLOOKUP_WIDTH;
+ add_chunk(cf, MIDX_CHUNKID_PACKNAMES, pack_name_concat_len,
+ write_midx_pack_names);
+ add_chunk(cf, MIDX_CHUNKID_OIDFANOUT, MIDX_CHUNK_FANOUT_SIZE,
+ write_midx_oid_fanout);
+ add_chunk(cf, MIDX_CHUNKID_OIDLOOKUP,
+ (size_t)ctx.entries_nr * the_hash_algo->rawsz,
+ write_midx_oid_lookup);
+ add_chunk(cf, MIDX_CHUNKID_OBJECTOFFSETS,
+ (size_t)ctx.entries_nr * MIDX_CHUNK_OFFSET_WIDTH,
+ write_midx_object_offsets);
- cur_chunk++;
- chunk_ids[cur_chunk] = MIDX_CHUNKID_OIDFANOUT;
- chunk_offsets[cur_chunk] = chunk_offsets[cur_chunk - 1] + pack_name_concat_len;
+ if (ctx.large_offsets_needed)
+ add_chunk(cf, MIDX_CHUNKID_LARGEOFFSETS,
+ (size_t)ctx.num_large_offsets * MIDX_CHUNK_LARGE_OFFSET_WIDTH,
+ write_midx_large_offsets);
- cur_chunk++;
- chunk_ids[cur_chunk] = MIDX_CHUNKID_OIDLOOKUP;
- chunk_offsets[cur_chunk] = chunk_offsets[cur_chunk - 1] + MIDX_CHUNK_FANOUT_SIZE;
-
- cur_chunk++;
- chunk_ids[cur_chunk] = MIDX_CHUNKID_OBJECTOFFSETS;
- chunk_offsets[cur_chunk] = chunk_offsets[cur_chunk - 1] + nr_entries * the_hash_algo->rawsz;
-
- cur_chunk++;
- chunk_offsets[cur_chunk] = chunk_offsets[cur_chunk - 1] + nr_entries * MIDX_CHUNK_OFFSET_WIDTH;
- if (large_offsets_needed) {
- chunk_ids[cur_chunk] = MIDX_CHUNKID_LARGEOFFSETS;
-
- cur_chunk++;
- chunk_offsets[cur_chunk] = chunk_offsets[cur_chunk - 1] +
- num_large_offsets * MIDX_CHUNK_LARGE_OFFSET_WIDTH;
- }
-
- chunk_ids[cur_chunk] = 0;
-
- for (i = 0; i <= num_chunks; i++) {
- if (i && chunk_offsets[i] < chunk_offsets[i - 1])
- BUG("incorrect chunk offsets: %"PRIu64" before %"PRIu64,
- chunk_offsets[i - 1],
- chunk_offsets[i]);
-
- if (chunk_offsets[i] % MIDX_CHUNK_ALIGNMENT)
- BUG("chunk offset %"PRIu64" is not properly aligned",
- chunk_offsets[i]);
-
- hashwrite_be32(f, chunk_ids[i]);
- hashwrite_be64(f, chunk_offsets[i]);
-
- written += MIDX_CHUNKLOOKUP_WIDTH;
- }
-
- if (flags & MIDX_PROGRESS)
- progress = start_delayed_progress(_("Writing chunks to multi-pack-index"),
- num_chunks);
- for (i = 0; i < num_chunks; i++) {
- if (written != chunk_offsets[i])
- BUG("incorrect chunk offset (%"PRIu64" != %"PRIu64") for chunk id %"PRIx32,
- chunk_offsets[i],
- written,
- chunk_ids[i]);
-
- switch (chunk_ids[i]) {
- case MIDX_CHUNKID_PACKNAMES:
- written += write_midx_pack_names(f, packs.info, packs.nr);
- break;
-
- case MIDX_CHUNKID_OIDFANOUT:
- written += write_midx_oid_fanout(f, entries, nr_entries);
- break;
-
- case MIDX_CHUNKID_OIDLOOKUP:
- written += write_midx_oid_lookup(f, the_hash_algo->rawsz, entries, nr_entries);
- break;
-
- case MIDX_CHUNKID_OBJECTOFFSETS:
- written += write_midx_object_offsets(f, large_offsets_needed, pack_perm, entries, nr_entries);
- break;
-
- case MIDX_CHUNKID_LARGEOFFSETS:
- written += write_midx_large_offsets(f, num_large_offsets, entries, nr_entries);
- break;
-
- default:
- BUG("trying to write unknown chunk id %"PRIx32,
- chunk_ids[i]);
- }
-
- display_progress(progress, i + 1);
- }
- stop_progress(&progress);
-
- if (written != chunk_offsets[num_chunks])
- BUG("incorrect final offset %"PRIu64" != %"PRIu64,
- written,
- chunk_offsets[num_chunks]);
+ write_midx_header(f, get_num_chunks(cf), ctx.nr - dropped_packs);
+ write_chunkfile(cf, &ctx);
finalize_hashfile(f, NULL, CSUM_FSYNC | CSUM_HASH_IN_STREAM);
+ free_chunkfile(cf);
commit_lock_file(&lk);
cleanup:
- for (i = 0; i < packs.nr; i++) {
- if (packs.info[i].p) {
- close_pack(packs.info[i].p);
- free(packs.info[i].p);
+ for (i = 0; i < ctx.nr; i++) {
+ if (ctx.info[i].p) {
+ close_pack(ctx.info[i].p);
+ free(ctx.info[i].p);
}
- free(packs.info[i].pack_name);
+ free(ctx.info[i].pack_name);
}
- free(packs.info);
- free(entries);
- free(pack_perm);
+ free(ctx.info);
+ free(ctx.entries);
+ free(ctx.pack_perm);
free(midx_name);
return result;
}
@@ -1239,7 +1144,7 @@ int expire_midx_packs(struct repository *r, const char *object_dir, unsigned fla
if (!m)
return 0;
- count = xcalloc(m->num_packs, sizeof(uint32_t));
+ CALLOC_ARRAY(count, m->num_packs);
if (flags & MIDX_PROGRESS)
progress = start_delayed_progress(_("Counting referenced objects"),
@@ -1410,7 +1315,7 @@ int midx_repack(struct repository *r, const char *object_dir, size_t batch_size,
if (!m)
return 0;
- include_pack = xcalloc(m->num_packs, sizeof(unsigned char));
+ CALLOC_ARRAY(include_pack, m->num_packs);
if (batch_size) {
if (fill_included_packs_batch(r, m, include_pack, batch_size))
diff --git a/name-hash.c b/name-hash.c
index 5d3c7b1..ce28f3f 100644
--- a/name-hash.c
+++ b/name-hash.c
@@ -7,6 +7,7 @@
*/
#include "cache.h"
#include "thread-utils.h"
+#include "trace2.h"
struct dir_entry {
struct hashmap_entry ent;
@@ -224,7 +225,7 @@ static void init_dir_mutex(void)
{
int j;
- lazy_dir_mutex_array = xcalloc(LAZY_MAX_MUTEX, sizeof(pthread_mutex_t));
+ CALLOC_ARRAY(lazy_dir_mutex_array, LAZY_MAX_MUTEX);
for (j = 0; j < LAZY_MAX_MUTEX; j++)
init_recursive_mutex(&lazy_dir_mutex_array[j]);
@@ -513,9 +514,9 @@ static void threaded_lazy_init_name_hash(
k_start = 0;
nr_each = DIV_ROUND_UP(istate->cache_nr, lazy_nr_dir_threads);
- lazy_entries = xcalloc(istate->cache_nr, sizeof(struct lazy_entry));
- td_dir = xcalloc(lazy_nr_dir_threads, sizeof(struct lazy_dir_thread_data));
- td_name = xcalloc(1, sizeof(struct lazy_name_thread_data));
+ CALLOC_ARRAY(lazy_entries, istate->cache_nr);
+ CALLOC_ARRAY(td_dir, lazy_nr_dir_threads);
+ CALLOC_ARRAY(td_name, 1);
init_dir_mutex();
@@ -577,6 +578,7 @@ static void lazy_init_name_hash(struct index_state *istate)
if (istate->name_hash_initialized)
return;
trace_performance_enter();
+ trace2_region_enter("index", "name-hash-init", istate->repo);
hashmap_init(&istate->name_hash, cache_entry_cmp, NULL, istate->cache_nr);
hashmap_init(&istate->dir_hash, dir_entry_cmp, NULL, istate->cache_nr);
@@ -597,6 +599,7 @@ static void lazy_init_name_hash(struct index_state *istate)
}
istate->name_hash_initialized = 1;
+ trace2_region_leave("index", "name-hash-init", istate->repo);
trace_performance_leave("initialize name hash");
}
diff --git a/negotiator/default.c b/negotiator/default.c
index 4b78f6b..434189a 100644
--- a/negotiator/default.c
+++ b/negotiator/default.c
@@ -167,7 +167,7 @@ void default_negotiator_init(struct fetch_negotiator *negotiator)
negotiator->next = next;
negotiator->ack = ack;
negotiator->release = release;
- negotiator->data = ns = xcalloc(1, sizeof(*ns));
+ negotiator->data = CALLOC_ARRAY(ns, 1);
ns->rev_list.compare = compare_commits_by_commit_date;
if (marked)
diff --git a/negotiator/skipping.c b/negotiator/skipping.c
index dffbc76..1236e79 100644
--- a/negotiator/skipping.c
+++ b/negotiator/skipping.c
@@ -62,7 +62,7 @@ static struct entry *rev_list_push(struct data *data, struct commit *commit, int
struct entry *entry;
commit->object.flags |= mark | SEEN;
- entry = xcalloc(1, sizeof(*entry));
+ CALLOC_ARRAY(entry, 1);
entry->commit = commit;
prio_queue_put(&data->rev_list, entry);
@@ -241,7 +241,7 @@ void skipping_negotiator_init(struct fetch_negotiator *negotiator)
negotiator->next = next;
negotiator->ack = ack;
negotiator->release = release;
- negotiator->data = data = xcalloc(1, sizeof(*data));
+ negotiator->data = CALLOC_ARRAY(data, 1);
data->rev_list.compare = compare;
if (marked)
diff --git a/notes-merge.c b/notes-merge.c
index 2fe724f..d2771fa 100644
--- a/notes-merge.c
+++ b/notes-merge.c
@@ -136,7 +136,7 @@ static struct notes_merge_pair *diff_tree_remote(struct notes_merge_options *o,
diff_tree_oid(base, remote, "", &opt);
diffcore_std(&opt);
- changes = xcalloc(diff_queued_diff.nr, sizeof(struct notes_merge_pair));
+ CALLOC_ARRAY(changes, diff_queued_diff.nr);
for (i = 0; i < diff_queued_diff.nr; i++) {
struct diff_filepair *p = diff_queued_diff.queue[i];
diff --git a/notes-utils.c b/notes-utils.c
index 4bf4888..d7d18e3 100644
--- a/notes-utils.c
+++ b/notes-utils.c
@@ -129,7 +129,7 @@ struct notes_rewrite_cfg *init_copy_notes_for_rewrite(const char *cmd)
c->cmd = cmd;
c->enabled = 1;
c->combine = combine_notes_concatenate;
- c->refs = xcalloc(1, sizeof(struct string_list));
+ CALLOC_ARRAY(c->refs, 1);
c->refs->strdup_strings = 1;
c->refs_from_env = 0;
c->mode_from_env = 0;
diff --git a/notes.c b/notes.c
index d5ac081..a19e4ad 100644
--- a/notes.c
+++ b/notes.c
@@ -452,7 +452,7 @@ static void load_subtree(struct notes_tree *t, struct leaf_node *subtree,
goto handle_non_note;
}
- l = xcalloc(1, sizeof(*l));
+ CALLOC_ARRAY(l, 1);
oidcpy(&l->key_oid, &object_oid);
oidcpy(&l->val_oid, &entry.oid);
if (note_tree_insert(t, node, n, l, type,
diff --git a/sha1-file.c b/object-file.c
similarity index 99%
rename from sha1-file.c
rename to object-file.c
index c3c49d2..624af40 100644
--- a/sha1-file.c
+++ b/object-file.c
@@ -3,7 +3,7 @@
*
* Copyright (C) Linus Torvalds, 2005
*
- * This handles basic git sha1 object files - packing, unpacking,
+ * This handles basic git object files - packing, unpacking,
* creation etc.
*/
#include "cache.h"
@@ -20,7 +20,7 @@
#include "tree-walk.h"
#include "refs.h"
#include "pack-revindex.h"
-#include "sha1-lookup.h"
+#include "hash-lookup.h"
#include "bulk-checkin.h"
#include "repository.h"
#include "replace-object.h"
@@ -508,9 +508,9 @@ static int alt_odb_usable(struct raw_object_store *o,
* LF separated. Its base points at a statically allocated buffer that
* contains "/the/directory/corresponding/to/.git/objects/...", while
* its name points just after the slash at the end of ".git/objects/"
- * in the example above, and has enough space to hold 40-byte hex
- * SHA1, an extra slash for the first level indirection, and the
- * terminating NUL.
+ * in the example above, and has enough space to hold all hex characters
+ * of the object ID, an extra slash for the first level indirection, and
+ * the terminating NUL.
*/
static void read_info_alternates(struct repository *r,
const char *relative_base,
@@ -546,7 +546,7 @@ static int link_alt_odb_entry(struct repository *r, const char *entry,
return -1;
}
- ent = xcalloc(1, sizeof(*ent));
+ CALLOC_ARRAY(ent, 1);
ent->path = xstrdup(pathbuf.buf);
/* add the alternate entry */
diff --git a/sha1-name.c b/object-name.c
similarity index 98%
rename from sha1-name.c
rename to object-name.c
index 0b23b86..64202de 100644
--- a/sha1-name.c
+++ b/object-name.c
@@ -85,7 +85,7 @@ static void update_candidates(struct disambiguate_state *ds, const struct object
/* otherwise, current can be discarded and candidate is still good */
}
-static int match_sha(unsigned, const unsigned char *, const unsigned char *);
+static int match_hash(unsigned, const unsigned char *, const unsigned char *);
static void find_short_object_filename(struct disambiguate_state *ds)
{
@@ -102,7 +102,7 @@ static void find_short_object_filename(struct disambiguate_state *ds)
while (!ds->ambiguous && pos < loose_objects->nr) {
const struct object_id *oid;
oid = loose_objects->oid + pos;
- if (!match_sha(ds->len, ds->bin_pfx.hash, oid->hash))
+ if (!match_hash(ds->len, ds->bin_pfx.hash, oid->hash))
break;
update_candidates(ds, oid);
pos++;
@@ -110,7 +110,7 @@ static void find_short_object_filename(struct disambiguate_state *ds)
}
}
-static int match_sha(unsigned len, const unsigned char *a, const unsigned char *b)
+static int match_hash(unsigned len, const unsigned char *a, const unsigned char *b)
{
do {
if (*a != *b)
@@ -145,7 +145,7 @@ static void unique_in_midx(struct multi_pack_index *m,
for (i = first; i < num && !ds->ambiguous; i++) {
struct object_id oid;
current = nth_midxed_object_oid(&oid, m, i);
- if (!match_sha(ds->len, ds->bin_pfx.hash, current->hash))
+ if (!match_hash(ds->len, ds->bin_pfx.hash, current->hash))
break;
update_candidates(ds, current);
}
@@ -173,7 +173,7 @@ static void unique_in_pack(struct packed_git *p,
for (i = first; i < num && !ds->ambiguous; i++) {
struct object_id oid;
nth_packed_object_id(&oid, p, i);
- if (!match_sha(ds->len, ds->bin_pfx.hash, oid.hash))
+ if (!match_hash(ds->len, ds->bin_pfx.hash, oid.hash))
break;
update_candidates(ds, &oid);
}
@@ -483,7 +483,7 @@ static enum get_oid_result get_short_oid(struct repository *r,
if (!quietly && (status == SHORT_NAME_AMBIGUOUS)) {
struct oid_array collect = OID_ARRAY_INIT;
- error(_("short SHA1 %s is ambiguous"), ds.hex_pfx);
+ error(_("short object ID %s is ambiguous"), ds.hex_pfx);
/*
* We may still have ambiguity if we simply saw a series of
@@ -1811,7 +1811,7 @@ static enum get_oid_result get_oid_with_context_1(struct repository *repo,
if (!ret)
return ret;
/*
- * sha1:path --> object name of path in ent sha1
+ * tree:path --> object name of path in tree
* :path -> object name of absolute path in index
* :./path -> object name of path relative to cwd in index
* :[0-3]:path -> object name of path in index at stage
@@ -1949,6 +1949,6 @@ enum get_oid_result get_oid_with_context(struct repository *repo,
struct object_context *oc)
{
if (flags & GET_OID_FOLLOW_SYMLINKS && flags & GET_OID_ONLY_TO_DIE)
- BUG("incompatible flags for get_sha1_with_context");
+ BUG("incompatible flags for get_oid_with_context");
return get_oid_with_context_1(repo, str, flags, NULL, oid, oc);
}
diff --git a/object-store.h b/object-store.h
index c4fc9dd..541dab0 100644
--- a/object-store.h
+++ b/object-store.h
@@ -85,6 +85,9 @@ struct packed_git {
multi_pack_index:1;
unsigned char hash[GIT_MAX_RAWSZ];
struct revindex_entry *revindex;
+ const uint32_t *revindex_data;
+ const uint32_t *revindex_map;
+ size_t revindex_size;
/* something like ".git/objects/pack/xxxxx.pack" */
char pack_name[FLEX_ARRAY]; /* more */
};
diff --git a/object.c b/object.c
index 68f80b0..7834378 100644
--- a/object.c
+++ b/object.c
@@ -127,7 +127,7 @@ static void grow_object_hash(struct repository *r)
int new_hash_size = r->parsed_objects->obj_hash_size < 32 ? 32 : 2 * r->parsed_objects->obj_hash_size;
struct object **new_hash;
- new_hash = xcalloc(new_hash_size, sizeof(struct object *));
+ CALLOC_ARRAY(new_hash, new_hash_size);
for (i = 0; i < r->parsed_objects->obj_hash_size; i++) {
struct object *obj = r->parsed_objects->obj_hash[i];
@@ -412,15 +412,16 @@ void object_array_clear(struct object_array *array)
}
/*
- * Return true iff array already contains an entry with name.
+ * Return true if array already contains an entry.
*/
-static int contains_name(struct object_array *array, const char *name)
+static int contains_object(struct object_array *array,
+ const struct object *item, const char *name)
{
unsigned nr = array->nr, i;
struct object_array_entry *object = array->objects;
for (i = 0; i < nr; i++, object++)
- if (!strcmp(object->name, name))
+ if (item == object->item && !strcmp(object->name, name))
return 1;
return 0;
}
@@ -432,7 +433,8 @@ void object_array_remove_duplicates(struct object_array *array)
array->nr = 0;
for (src = 0; src < nr; src++) {
- if (!contains_name(array, objects[src].name)) {
+ if (!contains_object(array, objects[src].item,
+ objects[src].name)) {
if (src != array->nr)
objects[array->nr] = objects[src];
array->nr++;
@@ -476,7 +478,7 @@ struct parsed_object_pool *parsed_object_pool_new(void)
o->object_state = allocate_alloc_state();
o->is_shallow = -1;
- o->shallow_stat = xcalloc(1, sizeof(*o->shallow_stat));
+ CALLOC_ARRAY(o->shallow_stat, 1);
o->buffer_slab = allocate_commit_buffer_slab();
diff --git a/oid-array.c b/oid-array.c
index 8e1bced..73ba76e 100644
--- a/oid-array.c
+++ b/oid-array.c
@@ -1,6 +1,6 @@
#include "cache.h"
#include "oid-array.h"
-#include "sha1-lookup.h"
+#include "hash-lookup.h"
void oid_array_append(struct oid_array *array, const struct object_id *oid)
{
@@ -22,16 +22,16 @@ void oid_array_sort(struct oid_array *array)
array->sorted = 1;
}
-static const unsigned char *sha1_access(size_t index, void *table)
+static const struct object_id *oid_access(size_t index, const void *table)
{
- struct object_id *array = table;
- return array[index].hash;
+ const struct object_id *array = table;
+ return &array[index];
}
int oid_array_lookup(struct oid_array *array, const struct object_id *oid)
{
oid_array_sort(array);
- return sha1_pos(oid->hash, array->oid, array->nr, sha1_access);
+ return oid_pos(oid, array->oid, array->nr, oid_access);
}
void oid_array_clear(struct oid_array *array)
diff --git a/pack-bitmap-write.c b/pack-bitmap-write.c
index 5e998bd..88d9e69 100644
--- a/pack-bitmap-write.c
+++ b/pack-bitmap-write.c
@@ -9,9 +9,10 @@
#include "pack-revindex.h"
#include "pack.h"
#include "pack-bitmap.h"
-#include "sha1-lookup.h"
+#include "hash-lookup.h"
#include "pack-objects.h"
#include "commit-reach.h"
+#include "prio-queue.h"
struct bitmapped_commit {
struct commit *commit;
@@ -29,7 +30,6 @@ struct bitmap_writer {
struct ewah_bitmap *tags;
kh_oid_map_t *bitmaps;
- kh_oid_map_t *reused;
struct packing_data *to_pack;
struct bitmapped_commit *selected;
@@ -110,10 +110,8 @@ void bitmap_writer_build_type_index(struct packing_data *to_pack,
/**
* Compute the actual bitmaps
*/
-static struct object **seen_objects;
-static unsigned int seen_objects_nr, seen_objects_alloc;
-static inline void push_bitmapped_commit(struct commit *commit, struct ewah_bitmap *reused)
+static inline void push_bitmapped_commit(struct commit *commit)
{
if (writer.selected_nr >= writer.selected_alloc) {
writer.selected_alloc = (writer.selected_alloc + 32) * 2;
@@ -121,27 +119,12 @@ static inline void push_bitmapped_commit(struct commit *commit, struct ewah_bitm
}
writer.selected[writer.selected_nr].commit = commit;
- writer.selected[writer.selected_nr].bitmap = reused;
+ writer.selected[writer.selected_nr].bitmap = NULL;
writer.selected[writer.selected_nr].flags = 0;
writer.selected_nr++;
}
-static inline void mark_as_seen(struct object *object)
-{
- ALLOC_GROW(seen_objects, seen_objects_nr + 1, seen_objects_alloc);
- seen_objects[seen_objects_nr++] = object;
-}
-
-static inline void reset_all_seen(void)
-{
- unsigned int i;
- for (i = 0; i < seen_objects_nr; ++i) {
- seen_objects[i]->flags &= ~(SEEN | ADDED | SHOWN);
- }
- seen_objects_nr = 0;
-}
-
static uint32_t find_object_pos(const struct object_id *oid)
{
struct object_entry *entry = packlist_find(writer.to_pack, oid);
@@ -154,60 +137,6 @@ static uint32_t find_object_pos(const struct object_id *oid)
return oe_in_pack_pos(writer.to_pack, entry);
}
-static void show_object(struct object *object, const char *name, void *data)
-{
- struct bitmap *base = data;
- bitmap_set(base, find_object_pos(&object->oid));
- mark_as_seen(object);
-}
-
-static void show_commit(struct commit *commit, void *data)
-{
- mark_as_seen((struct object *)commit);
-}
-
-static int
-add_to_include_set(struct bitmap *base, struct commit *commit)
-{
- khiter_t hash_pos;
- uint32_t bitmap_pos = find_object_pos(&commit->object.oid);
-
- if (bitmap_get(base, bitmap_pos))
- return 0;
-
- hash_pos = kh_get_oid_map(writer.bitmaps, commit->object.oid);
- if (hash_pos < kh_end(writer.bitmaps)) {
- struct bitmapped_commit *bc = kh_value(writer.bitmaps, hash_pos);
- bitmap_or_ewah(base, bc->bitmap);
- return 0;
- }
-
- bitmap_set(base, bitmap_pos);
- return 1;
-}
-
-static int
-should_include(struct commit *commit, void *_data)
-{
- struct bitmap *base = _data;
-
- if (!add_to_include_set(base, commit)) {
- struct commit_list *parent = commit->parents;
-
- mark_as_seen((struct object *)commit);
-
- while (parent) {
- parent->item->object.flags |= SEEN;
- mark_as_seen((struct object *)parent->item);
- parent = parent->next;
- }
-
- return 0;
- }
-
- return 1;
-}
-
static void compute_xor_offsets(void)
{
static const int MAX_XOR_OFFSET_SEARCH = 10;
@@ -248,79 +177,326 @@ static void compute_xor_offsets(void)
}
}
+struct bb_commit {
+ struct commit_list *reverse_edges;
+ struct bitmap *commit_mask;
+ struct bitmap *bitmap;
+ unsigned selected:1,
+ maximal:1;
+ unsigned idx; /* within selected array */
+};
+
+define_commit_slab(bb_data, struct bb_commit);
+
+struct bitmap_builder {
+ struct bb_data data;
+ struct commit **commits;
+ size_t commits_nr, commits_alloc;
+};
+
+static void bitmap_builder_init(struct bitmap_builder *bb,
+ struct bitmap_writer *writer,
+ struct bitmap_index *old_bitmap)
+{
+ struct rev_info revs;
+ struct commit *commit;
+ struct commit_list *reusable = NULL;
+ struct commit_list *r;
+ unsigned int i, num_maximal = 0;
+
+ memset(bb, 0, sizeof(*bb));
+ init_bb_data(&bb->data);
+
+ reset_revision_walk();
+ repo_init_revisions(writer->to_pack->repo, &revs, NULL);
+ revs.topo_order = 1;
+ revs.first_parent_only = 1;
+
+ for (i = 0; i < writer->selected_nr; i++) {
+ struct commit *c = writer->selected[i].commit;
+ struct bb_commit *ent = bb_data_at(&bb->data, c);
+
+ ent->selected = 1;
+ ent->maximal = 1;
+ ent->idx = i;
+
+ ent->commit_mask = bitmap_new();
+ bitmap_set(ent->commit_mask, i);
+
+ add_pending_object(&revs, &c->object, "");
+ }
+
+ if (prepare_revision_walk(&revs))
+ die("revision walk setup failed");
+
+ while ((commit = get_revision(&revs))) {
+ struct commit_list *p = commit->parents;
+ struct bb_commit *c_ent;
+
+ parse_commit_or_die(commit);
+
+ c_ent = bb_data_at(&bb->data, commit);
+
+ /*
+ * If there is no commit_mask, there is no reason to iterate
+ * over this commit; it is not selected (if it were, it would
+ * not have a blank commit mask) and all its children have
+ * existing bitmaps (see the comment starting with "This commit
+ * has an existing bitmap" below), so it does not contribute
+ * anything to the final bitmap file or its descendants.
+ */
+ if (!c_ent->commit_mask)
+ continue;
+
+ if (old_bitmap && bitmap_for_commit(old_bitmap, commit)) {
+ /*
+ * This commit has an existing bitmap, so we can
+ * get its bits immediately without an object
+ * walk. That is, it is reusable as-is and there is no
+ * need to continue walking beyond it.
+ *
+ * Mark it as such and add it to bb->commits separately
+ * to avoid allocating a position in the commit mask.
+ */
+ commit_list_insert(commit, &reusable);
+ goto next;
+ }
+
+ if (c_ent->maximal) {
+ num_maximal++;
+ ALLOC_GROW(bb->commits, bb->commits_nr + 1, bb->commits_alloc);
+ bb->commits[bb->commits_nr++] = commit;
+ }
+
+ if (p) {
+ struct bb_commit *p_ent = bb_data_at(&bb->data, p->item);
+ int c_not_p, p_not_c;
+
+ if (!p_ent->commit_mask) {
+ p_ent->commit_mask = bitmap_new();
+ c_not_p = 1;
+ p_not_c = 0;
+ } else {
+ c_not_p = bitmap_is_subset(c_ent->commit_mask, p_ent->commit_mask);
+ p_not_c = bitmap_is_subset(p_ent->commit_mask, c_ent->commit_mask);
+ }
+
+ if (!c_not_p)
+ continue;
+
+ bitmap_or(p_ent->commit_mask, c_ent->commit_mask);
+
+ if (p_not_c)
+ p_ent->maximal = 1;
+ else {
+ p_ent->maximal = 0;
+ free_commit_list(p_ent->reverse_edges);
+ p_ent->reverse_edges = NULL;
+ }
+
+ if (c_ent->maximal) {
+ commit_list_insert(commit, &p_ent->reverse_edges);
+ } else {
+ struct commit_list *cc = c_ent->reverse_edges;
+
+ for (; cc; cc = cc->next) {
+ if (!commit_list_contains(cc->item, p_ent->reverse_edges))
+ commit_list_insert(cc->item, &p_ent->reverse_edges);
+ }
+ }
+ }
+
+next:
+ bitmap_free(c_ent->commit_mask);
+ c_ent->commit_mask = NULL;
+ }
+
+ for (r = reusable; r; r = r->next) {
+ ALLOC_GROW(bb->commits, bb->commits_nr + 1, bb->commits_alloc);
+ bb->commits[bb->commits_nr++] = r->item;
+ }
+
+ trace2_data_intmax("pack-bitmap-write", the_repository,
+ "num_selected_commits", writer->selected_nr);
+ trace2_data_intmax("pack-bitmap-write", the_repository,
+ "num_maximal_commits", num_maximal);
+
+ free_commit_list(reusable);
+}
+
+static void bitmap_builder_clear(struct bitmap_builder *bb)
+{
+ clear_bb_data(&bb->data);
+ free(bb->commits);
+ bb->commits_nr = bb->commits_alloc = 0;
+}
+
+static void fill_bitmap_tree(struct bitmap *bitmap,
+ struct tree *tree)
+{
+ uint32_t pos;
+ struct tree_desc desc;
+ struct name_entry entry;
+
+ /*
+ * If our bit is already set, then there is nothing to do. Both this
+ * tree and all of its children will be set.
+ */
+ pos = find_object_pos(&tree->object.oid);
+ if (bitmap_get(bitmap, pos))
+ return;
+ bitmap_set(bitmap, pos);
+
+ if (parse_tree(tree) < 0)
+ die("unable to load tree object %s",
+ oid_to_hex(&tree->object.oid));
+ init_tree_desc(&desc, tree->buffer, tree->size);
+
+ while (tree_entry(&desc, &entry)) {
+ switch (object_type(entry.mode)) {
+ case OBJ_TREE:
+ fill_bitmap_tree(bitmap,
+ lookup_tree(the_repository, &entry.oid));
+ break;
+ case OBJ_BLOB:
+ bitmap_set(bitmap, find_object_pos(&entry.oid));
+ break;
+ default:
+ /* Gitlink, etc; not reachable */
+ break;
+ }
+ }
+
+ free_tree_buffer(tree);
+}
+
+static void fill_bitmap_commit(struct bb_commit *ent,
+ struct commit *commit,
+ struct prio_queue *queue,
+ struct prio_queue *tree_queue,
+ struct bitmap_index *old_bitmap,
+ const uint32_t *mapping)
+{
+ if (!ent->bitmap)
+ ent->bitmap = bitmap_new();
+
+ prio_queue_put(queue, commit);
+
+ while (queue->nr) {
+ struct commit_list *p;
+ struct commit *c = prio_queue_get(queue);
+
+ if (old_bitmap && mapping) {
+ struct ewah_bitmap *old = bitmap_for_commit(old_bitmap, c);
+ /*
+ * If this commit has an old bitmap, then translate that
+ * bitmap and add its bits to this one. No need to walk
+ * parents or the tree for this commit.
+ */
+ if (old && !rebuild_bitmap(mapping, old, ent->bitmap))
+ continue;
+ }
+
+ /*
+ * Mark ourselves and queue our tree. The commit
+ * walk ensures we cover all parents.
+ */
+ bitmap_set(ent->bitmap, find_object_pos(&c->object.oid));
+ prio_queue_put(tree_queue, get_commit_tree(c));
+
+ for (p = c->parents; p; p = p->next) {
+ int pos = find_object_pos(&p->item->object.oid);
+ if (!bitmap_get(ent->bitmap, pos)) {
+ bitmap_set(ent->bitmap, pos);
+ prio_queue_put(queue, p->item);
+ }
+ }
+ }
+
+ while (tree_queue->nr)
+ fill_bitmap_tree(ent->bitmap, prio_queue_get(tree_queue));
+}
+
+static void store_selected(struct bb_commit *ent, struct commit *commit)
+{
+ struct bitmapped_commit *stored = &writer.selected[ent->idx];
+ khiter_t hash_pos;
+ int hash_ret;
+
+ stored->bitmap = bitmap_to_ewah(ent->bitmap);
+
+ hash_pos = kh_put_oid_map(writer.bitmaps, commit->object.oid, &hash_ret);
+ if (hash_ret == 0)
+ die("Duplicate entry when writing index: %s",
+ oid_to_hex(&commit->object.oid));
+ kh_value(writer.bitmaps, hash_pos) = stored;
+}
+
void bitmap_writer_build(struct packing_data *to_pack)
{
- static const double REUSE_BITMAP_THRESHOLD = 0.2;
-
- int i, reuse_after, need_reset;
- struct bitmap *base = bitmap_new();
- struct rev_info revs;
+ struct bitmap_builder bb;
+ size_t i;
+ int nr_stored = 0; /* for progress */
+ struct prio_queue queue = { compare_commits_by_gen_then_commit_date };
+ struct prio_queue tree_queue = { NULL };
+ struct bitmap_index *old_bitmap;
+ uint32_t *mapping;
writer.bitmaps = kh_init_oid_map();
writer.to_pack = to_pack;
if (writer.show_progress)
writer.progress = start_progress("Building bitmaps", writer.selected_nr);
+ trace2_region_enter("pack-bitmap-write", "building_bitmaps_total",
+ the_repository);
- repo_init_revisions(to_pack->repo, &revs, NULL);
- revs.tag_objects = 1;
- revs.tree_objects = 1;
- revs.blob_objects = 1;
- revs.no_walk = 0;
+ old_bitmap = prepare_bitmap_git(to_pack->repo);
+ if (old_bitmap)
+ mapping = create_bitmap_mapping(old_bitmap, to_pack);
+ else
+ mapping = NULL;
- revs.include_check = should_include;
- reset_revision_walk();
+ bitmap_builder_init(&bb, &writer, old_bitmap);
+ for (i = bb.commits_nr; i > 0; i--) {
+ struct commit *commit = bb.commits[i-1];
+ struct bb_commit *ent = bb_data_at(&bb.data, commit);
+ struct commit *child;
+ int reused = 0;
- reuse_after = writer.selected_nr * REUSE_BITMAP_THRESHOLD;
- need_reset = 0;
+ fill_bitmap_commit(ent, commit, &queue, &tree_queue,
+ old_bitmap, mapping);
- for (i = writer.selected_nr - 1; i >= 0; --i) {
- struct bitmapped_commit *stored;
- struct object *object;
+ if (ent->selected) {
+ store_selected(ent, commit);
+ nr_stored++;
+ display_progress(writer.progress, nr_stored);
+ }
- khiter_t hash_pos;
- int hash_ret;
+ while ((child = pop_commit(&ent->reverse_edges))) {
+ struct bb_commit *child_ent =
+ bb_data_at(&bb.data, child);
- stored = &writer.selected[i];
- object = (struct object *)stored->commit;
-
- if (stored->bitmap == NULL) {
- if (i < writer.selected_nr - 1 &&
- (need_reset ||
- !in_merge_bases(writer.selected[i + 1].commit,
- stored->commit))) {
- bitmap_reset(base);
- reset_all_seen();
+ if (child_ent->bitmap)
+ bitmap_or(child_ent->bitmap, ent->bitmap);
+ else if (reused)
+ child_ent->bitmap = bitmap_dup(ent->bitmap);
+ else {
+ child_ent->bitmap = ent->bitmap;
+ reused = 1;
}
-
- add_pending_object(&revs, object, "");
- revs.include_check_data = base;
-
- if (prepare_revision_walk(&revs))
- die("revision walk setup failed");
-
- traverse_commit_list(&revs, show_commit, show_object, base);
-
- object_array_clear(&revs.pending);
-
- stored->bitmap = bitmap_to_ewah(base);
- need_reset = 0;
- } else
- need_reset = 1;
-
- if (i >= reuse_after)
- stored->flags |= BITMAP_FLAG_REUSE;
-
- hash_pos = kh_put_oid_map(writer.bitmaps, object->oid, &hash_ret);
- if (hash_ret == 0)
- die("Duplicate entry when writing index: %s",
- oid_to_hex(&object->oid));
-
- kh_value(writer.bitmaps, hash_pos) = stored;
- display_progress(writer.progress, writer.selected_nr - i);
+ }
+ if (!reused)
+ bitmap_free(ent->bitmap);
+ ent->bitmap = NULL;
}
+ clear_prio_queue(&queue);
+ clear_prio_queue(&tree_queue);
+ bitmap_builder_clear(&bb);
+ free(mapping);
- bitmap_free(base);
+ trace2_region_leave("pack-bitmap-write", "building_bitmaps_total",
+ the_repository);
+
stop_progress(&writer.progress);
compute_xor_offsets();
@@ -360,35 +536,6 @@ static int date_compare(const void *_a, const void *_b)
return (long)b->date - (long)a->date;
}
-void bitmap_writer_reuse_bitmaps(struct packing_data *to_pack)
-{
- struct bitmap_index *bitmap_git;
- if (!(bitmap_git = prepare_bitmap_git(to_pack->repo)))
- return;
-
- writer.reused = kh_init_oid_map();
- rebuild_existing_bitmaps(bitmap_git, to_pack, writer.reused,
- writer.show_progress);
- /*
- * NEEDSWORK: rebuild_existing_bitmaps() makes writer.reused reference
- * some bitmaps in bitmap_git, so we can't free the latter.
- */
-}
-
-static struct ewah_bitmap *find_reused_bitmap(const struct object_id *oid)
-{
- khiter_t hash_pos;
-
- if (!writer.reused)
- return NULL;
-
- hash_pos = kh_get_oid_map(writer.reused, *oid);
- if (hash_pos >= kh_end(writer.reused))
- return NULL;
-
- return kh_value(writer.reused, hash_pos);
-}
-
void bitmap_writer_select_commits(struct commit **indexed_commits,
unsigned int indexed_commits_nr,
int max_bitmaps)
@@ -402,12 +549,11 @@ void bitmap_writer_select_commits(struct commit **indexed_commits,
if (indexed_commits_nr < 100) {
for (i = 0; i < indexed_commits_nr; ++i)
- push_bitmapped_commit(indexed_commits[i], NULL);
+ push_bitmapped_commit(indexed_commits[i]);
return;
}
for (;;) {
- struct ewah_bitmap *reused_bitmap = NULL;
struct commit *chosen = NULL;
next = next_commit_index(i);
@@ -422,15 +568,13 @@ void bitmap_writer_select_commits(struct commit **indexed_commits,
if (next == 0) {
chosen = indexed_commits[i];
- reused_bitmap = find_reused_bitmap(&chosen->object.oid);
} else {
chosen = indexed_commits[i + next];
for (j = 0; j <= next; ++j) {
struct commit *cm = indexed_commits[i + j];
- reused_bitmap = find_reused_bitmap(&cm->object.oid);
- if (reused_bitmap || (cm->object.flags & NEEDS_BITMAP) != 0) {
+ if ((cm->object.flags & NEEDS_BITMAP) != 0) {
chosen = cm;
break;
}
@@ -440,7 +584,7 @@ void bitmap_writer_select_commits(struct commit **indexed_commits,
}
}
- push_bitmapped_commit(chosen, reused_bitmap);
+ push_bitmapped_commit(chosen);
i += next + 1;
display_progress(writer.progress, i);
@@ -466,10 +610,10 @@ static inline void dump_bitmap(struct hashfile *f, struct ewah_bitmap *bitmap)
die("Failed to write bitmap index");
}
-static const unsigned char *sha1_access(size_t pos, void *table)
+static const struct object_id *oid_access(size_t pos, const void *table)
{
- struct pack_idx_entry **index = table;
- return index[pos]->oid.hash;
+ const struct pack_idx_entry * const *index = table;
+ return &index[pos]->oid;
}
static void write_selected_commits_v1(struct hashfile *f,
@@ -482,7 +626,7 @@ static void write_selected_commits_v1(struct hashfile *f,
struct bitmapped_commit *stored = &writer.selected[i];
int commit_pos =
- sha1_pos(stored->commit->object.oid.hash, index, index_nr, sha1_access);
+ oid_pos(&stored->commit->object.oid, index, index_nr, oid_access);
if (commit_pos < 0)
BUG("trying to write commit not in index");
diff --git a/pack-bitmap.c b/pack-bitmap.c
index 4077e73..1ebe0c8 100644
--- a/pack-bitmap.c
+++ b/pack-bitmap.c
@@ -138,9 +138,10 @@ static struct ewah_bitmap *read_bitmap_1(struct bitmap_index *index)
static int load_bitmap_header(struct bitmap_index *index)
{
struct bitmap_disk_header *header = (void *)index->map;
+ size_t header_size = sizeof(*header) - GIT_MAX_RAWSZ + the_hash_algo->rawsz;
- if (index->map_size < sizeof(*header) + the_hash_algo->rawsz)
- return error("Corrupted bitmap index (missing header data)");
+ if (index->map_size < header_size + the_hash_algo->rawsz)
+ return error("Corrupted bitmap index (too small)");
if (memcmp(header->magic, BITMAP_IDX_SIGNATURE, sizeof(BITMAP_IDX_SIGNATURE)) != 0)
return error("Corrupted bitmap index file (wrong header)");
@@ -152,19 +153,23 @@ static int load_bitmap_header(struct bitmap_index *index)
/* Parse known bitmap format options */
{
uint32_t flags = ntohs(header->options);
+ size_t cache_size = st_mult(index->pack->num_objects, sizeof(uint32_t));
+ unsigned char *index_end = index->map + index->map_size - the_hash_algo->rawsz;
if ((flags & BITMAP_OPT_FULL_DAG) == 0)
return error("Unsupported options for bitmap index file "
"(Git requires BITMAP_OPT_FULL_DAG)");
if (flags & BITMAP_OPT_HASH_CACHE) {
- unsigned char *end = index->map + index->map_size - the_hash_algo->rawsz;
- index->hashes = ((uint32_t *)end) - index->pack->num_objects;
+ if (cache_size > index_end - index->map - header_size)
+ return error("corrupted bitmap index file (too short to fit hash cache)");
+ index->hashes = (void *)(index_end - cache_size);
+ index_end -= cache_size;
}
}
index->entry_count = ntohl(header->entry_count);
- index->map_pos += sizeof(*header) - GIT_MAX_RAWSZ + the_hash_algo->rawsz;
+ index->map_pos += header_size;
return 0;
}
@@ -224,11 +229,16 @@ static int load_bitmap_entries_v1(struct bitmap_index *index)
uint32_t commit_idx_pos;
struct object_id oid;
+ if (index->map_size - index->map_pos < 6)
+ return error("corrupt ewah bitmap: truncated header for entry %d", i);
+
commit_idx_pos = read_be32(index->map, &index->map_pos);
xor_offset = read_u8(index->map, &index->map_pos);
flags = read_u8(index->map, &index->map_pos);
- nth_packed_object_id(&oid, index->pack, commit_idx_pos);
+ if (nth_packed_object_id(&oid, index->pack, commit_idx_pos) < 0)
+ return error("corrupt ewah bitmap: commit index %u out of range",
+ (unsigned)commit_idx_pos);
bitmap = read_bitmap_1(index);
if (!bitmap)
@@ -370,6 +380,16 @@ struct include_data {
struct bitmap *seen;
};
+struct ewah_bitmap *bitmap_for_commit(struct bitmap_index *bitmap_git,
+ struct commit *commit)
+{
+ khiter_t hash_pos = kh_get_oid_map(bitmap_git->bitmaps,
+ commit->object.oid);
+ if (hash_pos >= kh_end(bitmap_git->bitmaps))
+ return NULL;
+ return lookup_stored_bitmap(kh_value(bitmap_git->bitmaps, hash_pos));
+}
+
static inline int bitmap_position_extended(struct bitmap_index *bitmap_git,
const struct object_id *oid)
{
@@ -387,11 +407,14 @@ static inline int bitmap_position_extended(struct bitmap_index *bitmap_git,
static inline int bitmap_position_packfile(struct bitmap_index *bitmap_git,
const struct object_id *oid)
{
+ uint32_t pos;
off_t offset = find_pack_entry_one(oid->hash, bitmap_git->pack);
if (!offset)
return -1;
- return find_revindex_position(bitmap_git->pack, offset);
+ if (offset_to_pack_pos(bitmap_git->pack, offset, &pos) < 0)
+ return -1;
+ return pos;
}
static int bitmap_position(struct bitmap_index *bitmap_git,
@@ -455,10 +478,10 @@ static void show_commit(struct commit *commit, void *data)
static int add_to_include_set(struct bitmap_index *bitmap_git,
struct include_data *data,
- const struct object_id *oid,
+ struct commit *commit,
int bitmap_pos)
{
- khiter_t hash_pos;
+ struct ewah_bitmap *partial;
if (data->seen && bitmap_get(data->seen, bitmap_pos))
return 0;
@@ -466,10 +489,9 @@ static int add_to_include_set(struct bitmap_index *bitmap_git,
if (bitmap_get(data->base, bitmap_pos))
return 0;
- hash_pos = kh_get_oid_map(bitmap_git->bitmaps, *oid);
- if (hash_pos < kh_end(bitmap_git->bitmaps)) {
- struct stored_bitmap *st = kh_value(bitmap_git->bitmaps, hash_pos);
- bitmap_or_ewah(data->base, lookup_stored_bitmap(st));
+ partial = bitmap_for_commit(bitmap_git, commit);
+ if (partial) {
+ bitmap_or_ewah(data->base, partial);
return 0;
}
@@ -488,8 +510,7 @@ static int should_include(struct commit *commit, void *_data)
(struct object *)commit,
NULL);
- if (!add_to_include_set(data->bitmap_git, data, &commit->object.oid,
- bitmap_pos)) {
+ if (!add_to_include_set(data->bitmap_git, data, commit, bitmap_pos)) {
struct commit_list *parent = commit->parents;
while (parent) {
@@ -503,6 +524,23 @@ static int should_include(struct commit *commit, void *_data)
return 1;
}
+static int add_commit_to_bitmap(struct bitmap_index *bitmap_git,
+ struct bitmap **base,
+ struct commit *commit)
+{
+ struct ewah_bitmap *or_with = bitmap_for_commit(bitmap_git, commit);
+
+ if (!or_with)
+ return 0;
+
+ if (*base == NULL)
+ *base = ewah_to_bitmap(or_with);
+ else
+ bitmap_or_ewah(*base, or_with);
+
+ return 1;
+}
+
static struct bitmap *find_objects(struct bitmap_index *bitmap_git,
struct rev_info *revs,
struct object_list *roots,
@@ -526,21 +564,10 @@ static struct bitmap *find_objects(struct bitmap_index *bitmap_git,
struct object *object = roots->item;
roots = roots->next;
- if (object->type == OBJ_COMMIT) {
- khiter_t pos = kh_get_oid_map(bitmap_git->bitmaps, object->oid);
-
- if (pos < kh_end(bitmap_git->bitmaps)) {
- struct stored_bitmap *st = kh_value(bitmap_git->bitmaps, pos);
- struct ewah_bitmap *or_with = lookup_stored_bitmap(st);
-
- if (base == NULL)
- base = ewah_to_bitmap(or_with);
- else
- bitmap_or_ewah(base, or_with);
-
- object->flags |= SEEN;
- continue;
- }
+ if (object->type == OBJ_COMMIT &&
+ add_commit_to_bitmap(bitmap_git, &base, (struct commit *)object)) {
+ object->flags |= SEEN;
+ continue;
}
object_list_insert(object, ¬_mapped);
@@ -684,21 +711,22 @@ static void show_objects_for_type(
for (offset = 0; offset < BITS_IN_EWORD; ++offset) {
struct object_id oid;
- struct revindex_entry *entry;
- uint32_t hash = 0;
+ uint32_t hash = 0, index_pos;
+ off_t ofs;
if ((word >> offset) == 0)
break;
offset += ewah_bit_ctz64(word >> offset);
- entry = &bitmap_git->pack->revindex[pos + offset];
- nth_packed_object_id(&oid, bitmap_git->pack, entry->nr);
+ index_pos = pack_pos_to_index(bitmap_git->pack, pos + offset);
+ ofs = pack_pos_to_offset(bitmap_git->pack, pos + offset);
+ nth_packed_object_id(&oid, bitmap_git->pack, index_pos);
if (bitmap_git->hashes)
- hash = get_be32(bitmap_git->hashes + entry->nr);
+ hash = get_be32(bitmap_git->hashes + index_pos);
- show_reach(&oid, object_type, 0, hash, bitmap_git->pack, entry->offset);
+ show_reach(&oid, object_type, 0, hash, bitmap_git->pack, ofs);
}
}
}
@@ -807,11 +835,11 @@ static unsigned long get_size_by_pos(struct bitmap_index *bitmap_git,
oi.sizep = &size;
if (pos < pack->num_objects) {
- struct revindex_entry *entry = &pack->revindex[pos];
- if (packed_object_info(the_repository, pack,
- entry->offset, &oi) < 0) {
+ off_t ofs = pack_pos_to_offset(pack, pos);
+ if (packed_object_info(the_repository, pack, ofs, &oi) < 0) {
struct object_id oid;
- nth_packed_object_id(&oid, pack, entry->nr);
+ nth_packed_object_id(&oid, pack,
+ pack_pos_to_index(pack, pos));
die(_("unable to get size of %s"), oid_to_hex(&oid));
}
} else {
@@ -950,7 +978,7 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
/* try to open a bitmapped pack, but don't parse it yet
* because we may not need to use it */
- bitmap_git = xcalloc(1, sizeof(*bitmap_git));
+ CALLOC_ARRAY(bitmap_git, 1);
if (open_pack_bitmap(revs->repo, bitmap_git) < 0)
goto cleanup;
@@ -1041,23 +1069,21 @@ static void try_partial_reuse(struct bitmap_index *bitmap_git,
struct bitmap *reuse,
struct pack_window **w_curs)
{
- struct revindex_entry *revidx;
- off_t offset;
+ off_t offset, header;
enum object_type type;
unsigned long size;
if (pos >= bitmap_git->pack->num_objects)
return; /* not actually in the pack */
- revidx = &bitmap_git->pack->revindex[pos];
- offset = revidx->offset;
+ offset = header = pack_pos_to_offset(bitmap_git->pack, pos);
type = unpack_object_header(bitmap_git->pack, w_curs, &offset, &size);
if (type < 0)
return; /* broken packfile, punt */
if (type == OBJ_REF_DELTA || type == OBJ_OFS_DELTA) {
off_t base_offset;
- int base_pos;
+ uint32_t base_pos;
/*
* Find the position of the base object so we can look it up
@@ -1068,11 +1094,10 @@ static void try_partial_reuse(struct bitmap_index *bitmap_git,
* more detail.
*/
base_offset = get_delta_base(bitmap_git->pack, w_curs,
- &offset, type, revidx->offset);
+ &offset, type, header);
if (!base_offset)
return;
- base_pos = find_revindex_position(bitmap_git->pack, base_offset);
- if (base_pos < 0)
+ if (offset_to_pack_pos(bitmap_git->pack, base_offset, &base_pos) < 0)
return;
/*
@@ -1272,10 +1297,10 @@ void test_bitmap_walk(struct rev_info *revs)
{
struct object *root;
struct bitmap *result = NULL;
- khiter_t pos;
size_t result_popcnt;
struct bitmap_test_data tdata;
struct bitmap_index *bitmap_git;
+ struct ewah_bitmap *bm;
if (!(bitmap_git = prepare_bitmap_git(revs->repo)))
die("failed to load bitmap indexes");
@@ -1287,12 +1312,9 @@ void test_bitmap_walk(struct rev_info *revs)
bitmap_git->version, bitmap_git->entry_count);
root = revs->pending.objects[0].item;
- pos = kh_get_oid_map(bitmap_git->bitmaps, root->oid);
+ bm = bitmap_for_commit(bitmap_git, (struct commit *)root);
- if (pos < kh_end(bitmap_git->bitmaps)) {
- struct stored_bitmap *st = kh_value(bitmap_git->bitmaps, pos);
- struct ewah_bitmap *bm = lookup_stored_bitmap(st);
-
+ if (bm) {
fprintf(stderr, "Found bitmap for %s. %d bits / %08x checksum\n",
oid_to_hex(&root->oid), (int)bm->bit_size, ewah_checksum(bm));
@@ -1323,14 +1345,14 @@ void test_bitmap_walk(struct rev_info *revs)
if (bitmap_equals(result, tdata.base))
fprintf(stderr, "OK!\n");
else
- fprintf(stderr, "Mismatch!\n");
+ die("mismatch in bitmap results");
free_bitmap_index(bitmap_git);
}
-static int rebuild_bitmap(uint32_t *reposition,
- struct ewah_bitmap *source,
- struct bitmap *dest)
+int rebuild_bitmap(const uint32_t *reposition,
+ struct ewah_bitmap *source,
+ struct bitmap *dest)
{
uint32_t pos = 0;
struct ewah_iterator it;
@@ -1359,63 +1381,28 @@ static int rebuild_bitmap(uint32_t *reposition,
return 0;
}
-int rebuild_existing_bitmaps(struct bitmap_index *bitmap_git,
- struct packing_data *mapping,
- kh_oid_map_t *reused_bitmaps,
- int show_progress)
+uint32_t *create_bitmap_mapping(struct bitmap_index *bitmap_git,
+ struct packing_data *mapping)
{
uint32_t i, num_objects;
uint32_t *reposition;
- struct bitmap *rebuild;
- struct stored_bitmap *stored;
- struct progress *progress = NULL;
-
- khiter_t hash_pos;
- int hash_ret;
num_objects = bitmap_git->pack->num_objects;
- reposition = xcalloc(num_objects, sizeof(uint32_t));
+ CALLOC_ARRAY(reposition, num_objects);
for (i = 0; i < num_objects; ++i) {
struct object_id oid;
- struct revindex_entry *entry;
struct object_entry *oe;
- entry = &bitmap_git->pack->revindex[i];
- nth_packed_object_id(&oid, bitmap_git->pack, entry->nr);
+ nth_packed_object_id(&oid, bitmap_git->pack,
+ pack_pos_to_index(bitmap_git->pack, i));
oe = packlist_find(mapping, &oid);
if (oe)
reposition[i] = oe_in_pack_pos(mapping, oe) + 1;
}
- rebuild = bitmap_new();
- i = 0;
-
- if (show_progress)
- progress = start_progress("Reusing bitmaps", 0);
-
- kh_foreach_value(bitmap_git->bitmaps, stored, {
- if (stored->flags & BITMAP_FLAG_REUSE) {
- if (!rebuild_bitmap(reposition,
- lookup_stored_bitmap(stored),
- rebuild)) {
- hash_pos = kh_put_oid_map(reused_bitmaps,
- stored->oid,
- &hash_ret);
- kh_value(reused_bitmaps, hash_pos) =
- bitmap_to_ewah(rebuild);
- }
- bitmap_reset(rebuild);
- display_progress(progress, ++i);
- }
- });
-
- stop_progress(&progress);
-
- free(reposition);
- bitmap_free(rebuild);
- return 0;
+ return reposition;
}
void free_bitmap_index(struct bitmap_index *b)
@@ -1443,3 +1430,84 @@ int bitmap_has_oid_in_uninteresting(struct bitmap_index *bitmap_git,
return bitmap_git &&
bitmap_walk_contains(bitmap_git, bitmap_git->haves, oid);
}
+
+static off_t get_disk_usage_for_type(struct bitmap_index *bitmap_git,
+ enum object_type object_type)
+{
+ struct bitmap *result = bitmap_git->result;
+ struct packed_git *pack = bitmap_git->pack;
+ off_t total = 0;
+ struct ewah_iterator it;
+ eword_t filter;
+ size_t i;
+
+ init_type_iterator(&it, bitmap_git, object_type);
+ for (i = 0; i < result->word_alloc &&
+ ewah_iterator_next(&filter, &it); i++) {
+ eword_t word = result->words[i] & filter;
+ size_t base = (i * BITS_IN_EWORD);
+ unsigned offset;
+
+ if (!word)
+ continue;
+
+ for (offset = 0; offset < BITS_IN_EWORD; offset++) {
+ size_t pos;
+
+ if ((word >> offset) == 0)
+ break;
+
+ offset += ewah_bit_ctz64(word >> offset);
+ pos = base + offset;
+ total += pack_pos_to_offset(pack, pos + 1) -
+ pack_pos_to_offset(pack, pos);
+ }
+ }
+
+ return total;
+}
+
+static off_t get_disk_usage_for_extended(struct bitmap_index *bitmap_git)
+{
+ struct bitmap *result = bitmap_git->result;
+ struct packed_git *pack = bitmap_git->pack;
+ struct eindex *eindex = &bitmap_git->ext_index;
+ off_t total = 0;
+ struct object_info oi = OBJECT_INFO_INIT;
+ off_t object_size;
+ size_t i;
+
+ oi.disk_sizep = &object_size;
+
+ for (i = 0; i < eindex->count; i++) {
+ struct object *obj = eindex->objects[i];
+
+ if (!bitmap_get(result, pack->num_objects + i))
+ continue;
+
+ if (oid_object_info_extended(the_repository, &obj->oid, &oi, 0) < 0)
+ die(_("unable to get disk usage of %s"),
+ oid_to_hex(&obj->oid));
+
+ total += object_size;
+ }
+ return total;
+}
+
+off_t get_disk_usage_from_bitmap(struct bitmap_index *bitmap_git,
+ struct rev_info *revs)
+{
+ off_t total = 0;
+
+ total += get_disk_usage_for_type(bitmap_git, OBJ_COMMIT);
+ if (revs->tree_objects)
+ total += get_disk_usage_for_type(bitmap_git, OBJ_TREE);
+ if (revs->blob_objects)
+ total += get_disk_usage_for_type(bitmap_git, OBJ_BLOB);
+ if (revs->tag_objects)
+ total += get_disk_usage_for_type(bitmap_git, OBJ_TAG);
+
+ total += get_disk_usage_for_extended(bitmap_git);
+
+ return total;
+}
diff --git a/pack-bitmap.h b/pack-bitmap.h
index 1203120..36d9993 100644
--- a/pack-bitmap.h
+++ b/pack-bitmap.h
@@ -68,12 +68,20 @@ int bitmap_walk_contains(struct bitmap_index *,
*/
int bitmap_has_oid_in_uninteresting(struct bitmap_index *, const struct object_id *oid);
+off_t get_disk_usage_from_bitmap(struct bitmap_index *, struct rev_info *);
+
void bitmap_writer_show_progress(int show);
void bitmap_writer_set_checksum(unsigned char *sha1);
void bitmap_writer_build_type_index(struct packing_data *to_pack,
struct pack_idx_entry **index,
uint32_t index_nr);
-void bitmap_writer_reuse_bitmaps(struct packing_data *to_pack);
+uint32_t *create_bitmap_mapping(struct bitmap_index *bitmap_git,
+ struct packing_data *mapping);
+int rebuild_bitmap(const uint32_t *reposition,
+ struct ewah_bitmap *source,
+ struct bitmap *dest);
+struct ewah_bitmap *bitmap_for_commit(struct bitmap_index *bitmap_git,
+ struct commit *commit);
void bitmap_writer_select_commits(struct commit **indexed_commits,
unsigned int indexed_commits_nr, int max_bitmaps);
void bitmap_writer_build(struct packing_data *to_pack);
diff --git a/pack-objects.c b/pack-objects.c
index f2a4338..fe2a4ea 100644
--- a/pack-objects.c
+++ b/pack-objects.c
@@ -49,7 +49,7 @@ static void rehash_objects(struct packing_data *pdata)
pdata->index_size = 1024;
free(pdata->index);
- pdata->index = xcalloc(pdata->index_size, sizeof(*pdata->index));
+ CALLOC_ARRAY(pdata->index, pdata->index_size);
entry = pdata->objects;
diff --git a/pack-revindex.c b/pack-revindex.c
index ecdde39..4262530 100644
--- a/pack-revindex.c
+++ b/pack-revindex.c
@@ -2,6 +2,12 @@
#include "pack-revindex.h"
#include "object-store.h"
#include "packfile.h"
+#include "config.h"
+
+struct revindex_entry {
+ off_t offset;
+ unsigned int nr;
+};
/*
* Pack index for existing packs give us easy access to the offsets into
@@ -159,27 +165,152 @@ static void create_pack_revindex(struct packed_git *p)
sort_revindex(p->revindex, num_ent, p->pack_size);
}
-int load_pack_revindex(struct packed_git *p)
+static int create_pack_revindex_in_memory(struct packed_git *p)
{
- if (!p->revindex) {
- if (open_pack_index(p))
- return -1;
- create_pack_revindex(p);
- }
+ if (git_env_bool(GIT_TEST_REV_INDEX_DIE_IN_MEMORY, 0))
+ die("dying as requested by '%s'",
+ GIT_TEST_REV_INDEX_DIE_IN_MEMORY);
+ if (open_pack_index(p))
+ return -1;
+ create_pack_revindex(p);
return 0;
}
-int find_revindex_position(struct packed_git *p, off_t ofs)
+static char *pack_revindex_filename(struct packed_git *p)
{
- int lo = 0;
- int hi = p->num_objects + 1;
- const struct revindex_entry *revindex = p->revindex;
+ size_t len;
+ if (!strip_suffix(p->pack_name, ".pack", &len))
+ BUG("pack_name does not end in .pack");
+ return xstrfmt("%.*s.rev", (int)len, p->pack_name);
+}
+
+#define RIDX_HEADER_SIZE (12)
+#define RIDX_MIN_SIZE (RIDX_HEADER_SIZE + (2 * the_hash_algo->rawsz))
+
+struct revindex_header {
+ uint32_t signature;
+ uint32_t version;
+ uint32_t hash_id;
+};
+
+static int load_revindex_from_disk(char *revindex_name,
+ uint32_t num_objects,
+ const uint32_t **data_p, size_t *len_p)
+{
+ int fd, ret = 0;
+ struct stat st;
+ void *data = NULL;
+ size_t revindex_size;
+ struct revindex_header *hdr;
+
+ fd = git_open(revindex_name);
+
+ if (fd < 0) {
+ ret = -1;
+ goto cleanup;
+ }
+ if (fstat(fd, &st)) {
+ ret = error_errno(_("failed to read %s"), revindex_name);
+ goto cleanup;
+ }
+
+ revindex_size = xsize_t(st.st_size);
+
+ if (revindex_size < RIDX_MIN_SIZE) {
+ ret = error(_("reverse-index file %s is too small"), revindex_name);
+ goto cleanup;
+ }
+
+ if (revindex_size - RIDX_MIN_SIZE != st_mult(sizeof(uint32_t), num_objects)) {
+ ret = error(_("reverse-index file %s is corrupt"), revindex_name);
+ goto cleanup;
+ }
+
+ data = xmmap(NULL, revindex_size, PROT_READ, MAP_PRIVATE, fd, 0);
+ hdr = data;
+
+ if (ntohl(hdr->signature) != RIDX_SIGNATURE) {
+ ret = error(_("reverse-index file %s has unknown signature"), revindex_name);
+ goto cleanup;
+ }
+ if (ntohl(hdr->version) != 1) {
+ ret = error(_("reverse-index file %s has unsupported version %"PRIu32),
+ revindex_name, ntohl(hdr->version));
+ goto cleanup;
+ }
+ if (!(ntohl(hdr->hash_id) == 1 || ntohl(hdr->hash_id) == 2)) {
+ ret = error(_("reverse-index file %s has unsupported hash id %"PRIu32),
+ revindex_name, ntohl(hdr->hash_id));
+ goto cleanup;
+ }
+
+cleanup:
+ if (ret) {
+ if (data)
+ munmap(data, revindex_size);
+ } else {
+ *len_p = revindex_size;
+ *data_p = (const uint32_t *)data;
+ }
+
+ if (fd >= 0)
+ close(fd);
+ return ret;
+}
+
+static int load_pack_revindex_from_disk(struct packed_git *p)
+{
+ char *revindex_name;
+ int ret;
+ if (open_pack_index(p))
+ return -1;
+
+ revindex_name = pack_revindex_filename(p);
+
+ ret = load_revindex_from_disk(revindex_name,
+ p->num_objects,
+ &p->revindex_map,
+ &p->revindex_size);
+ if (ret)
+ goto cleanup;
+
+ p->revindex_data = (const uint32_t *)((const char *)p->revindex_map + RIDX_HEADER_SIZE);
+
+cleanup:
+ free(revindex_name);
+ return ret;
+}
+
+int load_pack_revindex(struct packed_git *p)
+{
+ if (p->revindex || p->revindex_data)
+ return 0;
+
+ if (!load_pack_revindex_from_disk(p))
+ return 0;
+ else if (!create_pack_revindex_in_memory(p))
+ return 0;
+ return -1;
+}
+
+int offset_to_pack_pos(struct packed_git *p, off_t ofs, uint32_t *pos)
+{
+ unsigned lo, hi;
+
+ if (load_pack_revindex(p) < 0)
+ return -1;
+
+ lo = 0;
+ hi = p->num_objects + 1;
do {
const unsigned mi = lo + (hi - lo) / 2;
- if (revindex[mi].offset == ofs) {
- return mi;
- } else if (ofs < revindex[mi].offset)
+ off_t got = pack_pos_to_offset(p, mi);
+
+ if (got == ofs) {
+ *pos = mi;
+ return 0;
+ } else if (ofs < got)
hi = mi;
else
lo = mi + 1;
@@ -189,17 +320,30 @@ int find_revindex_position(struct packed_git *p, off_t ofs)
return -1;
}
-struct revindex_entry *find_pack_revindex(struct packed_git *p, off_t ofs)
+uint32_t pack_pos_to_index(struct packed_git *p, uint32_t pos)
{
- int pos;
+ if (!(p->revindex || p->revindex_data))
+ BUG("pack_pos_to_index: reverse index not yet loaded");
+ if (p->num_objects <= pos)
+ BUG("pack_pos_to_index: out-of-bounds object at %"PRIu32, pos);
- if (load_pack_revindex(p))
- return NULL;
+ if (p->revindex)
+ return p->revindex[pos].nr;
+ else
+ return get_be32(p->revindex_data + pos);
+}
- pos = find_revindex_position(p, ofs);
+off_t pack_pos_to_offset(struct packed_git *p, uint32_t pos)
+{
+ if (!(p->revindex || p->revindex_data))
+ BUG("pack_pos_to_index: reverse index not yet loaded");
+ if (p->num_objects < pos)
+ BUG("pack_pos_to_offset: out-of-bounds object at %"PRIu32, pos);
- if (pos < 0)
- return NULL;
-
- return p->revindex + pos;
+ if (p->revindex)
+ return p->revindex[pos].offset;
+ else if (pos == p->num_objects)
+ return p->pack_size - the_hash_algo->rawsz;
+ else
+ return nth_packed_object_offset(p, pack_pos_to_index(p, pos));
}
diff --git a/pack-revindex.h b/pack-revindex.h
index 848331d..ba7c82c 100644
--- a/pack-revindex.h
+++ b/pack-revindex.h
@@ -1,16 +1,74 @@
#ifndef PACK_REVINDEX_H
#define PACK_REVINDEX_H
+/**
+ * A revindex allows converting efficiently between three properties
+ * of an object within a pack:
+ *
+ * - index position: the numeric position within the list of sorted object ids
+ * found in the .idx file
+ *
+ * - pack position: the numeric position within the list of objects in their
+ * order within the actual .pack file (i.e., 0 is the first object in the
+ * .pack, 1 is the second, and so on)
+ *
+ * - offset: the byte offset within the .pack file at which the object contents
+ * can be found
+ */
+
+
+#define RIDX_SIGNATURE 0x52494458 /* "RIDX" */
+#define RIDX_VERSION 1
+
+#define GIT_TEST_WRITE_REV_INDEX "GIT_TEST_WRITE_REV_INDEX"
+#define GIT_TEST_REV_INDEX_DIE_IN_MEMORY "GIT_TEST_REV_INDEX_DIE_IN_MEMORY"
+
struct packed_git;
-struct revindex_entry {
- off_t offset;
- unsigned int nr;
-};
-
+/*
+ * load_pack_revindex populates the revindex's internal data-structures for the
+ * given pack, returning zero on success and a negative value otherwise.
+ *
+ * If a '.rev' file is present it is mmap'd, and pointers are assigned into it
+ * (instead of using the in-memory variant).
+ */
int load_pack_revindex(struct packed_git *p);
-int find_revindex_position(struct packed_git *p, off_t ofs);
-struct revindex_entry *find_pack_revindex(struct packed_git *p, off_t ofs);
+/*
+ * offset_to_pack_pos converts an object offset to a pack position. This
+ * function returns zero on success, and a negative number otherwise. The
+ * parameter 'pos' is usable only on success.
+ *
+ * If the reverse index has not yet been loaded, this function loads it lazily,
+ * and returns an negative number if an error was encountered.
+ *
+ * This function runs in time O(log N) with the number of objects in the pack.
+ */
+int offset_to_pack_pos(struct packed_git *p, off_t ofs, uint32_t *pos);
+
+/*
+ * pack_pos_to_index converts the given pack-relative position 'pos' by
+ * returning an index-relative position.
+ *
+ * If the reverse index has not yet been loaded, or the position is out of
+ * bounds, this function aborts.
+ *
+ * This function runs in constant time.
+ */
+uint32_t pack_pos_to_index(struct packed_git *p, uint32_t pos);
+
+/*
+ * pack_pos_to_offset converts the given pack-relative position 'pos' into a
+ * pack offset. For a pack with 'N' objects, asking for position 'N' will return
+ * the total size (in bytes) of the pack.
+ *
+ * If the reverse index has not yet been loaded, or the position is out of
+ * bounds, this function aborts.
+ *
+ * This function runs in constant time under both in-memory and on-disk reverse
+ * indexes, but an additional step is taken to consult the corresponding .idx
+ * file when using the on-disk format.
+ */
+off_t pack_pos_to_offset(struct packed_git *p, uint32_t pos);
#endif
diff --git a/pack-write.c b/pack-write.c
index 3513665..2ca85a9 100644
--- a/pack-write.c
+++ b/pack-write.c
@@ -1,6 +1,7 @@
#include "cache.h"
#include "pack.h"
#include "csum-file.h"
+#include "remote.h"
void reset_pack_idx_option(struct pack_idx_option *opts)
{
@@ -166,6 +167,113 @@ const char *write_idx_file(const char *index_name, struct pack_idx_entry **objec
return index_name;
}
+static int pack_order_cmp(const void *va, const void *vb, void *ctx)
+{
+ struct pack_idx_entry **objects = ctx;
+
+ off_t oa = objects[*(uint32_t*)va]->offset;
+ off_t ob = objects[*(uint32_t*)vb]->offset;
+
+ if (oa < ob)
+ return -1;
+ if (oa > ob)
+ return 1;
+ return 0;
+}
+
+static void write_rev_header(struct hashfile *f)
+{
+ uint32_t oid_version;
+ switch (hash_algo_by_ptr(the_hash_algo)) {
+ case GIT_HASH_SHA1:
+ oid_version = 1;
+ break;
+ case GIT_HASH_SHA256:
+ oid_version = 2;
+ break;
+ default:
+ die("write_rev_header: unknown hash version");
+ }
+
+ hashwrite_be32(f, RIDX_SIGNATURE);
+ hashwrite_be32(f, RIDX_VERSION);
+ hashwrite_be32(f, oid_version);
+}
+
+static void write_rev_index_positions(struct hashfile *f,
+ struct pack_idx_entry **objects,
+ uint32_t nr_objects)
+{
+ uint32_t *pack_order;
+ uint32_t i;
+
+ ALLOC_ARRAY(pack_order, nr_objects);
+ for (i = 0; i < nr_objects; i++)
+ pack_order[i] = i;
+ QSORT_S(pack_order, nr_objects, pack_order_cmp, objects);
+
+ for (i = 0; i < nr_objects; i++)
+ hashwrite_be32(f, pack_order[i]);
+
+ free(pack_order);
+}
+
+static void write_rev_trailer(struct hashfile *f, const unsigned char *hash)
+{
+ hashwrite(f, hash, the_hash_algo->rawsz);
+}
+
+const char *write_rev_file(const char *rev_name,
+ struct pack_idx_entry **objects,
+ uint32_t nr_objects,
+ const unsigned char *hash,
+ unsigned flags)
+{
+ struct hashfile *f;
+ int fd;
+
+ if ((flags & WRITE_REV) && (flags & WRITE_REV_VERIFY))
+ die(_("cannot both write and verify reverse index"));
+
+ if (flags & WRITE_REV) {
+ if (!rev_name) {
+ struct strbuf tmp_file = STRBUF_INIT;
+ fd = odb_mkstemp(&tmp_file, "pack/tmp_rev_XXXXXX");
+ rev_name = strbuf_detach(&tmp_file, NULL);
+ } else {
+ unlink(rev_name);
+ fd = open(rev_name, O_CREAT|O_EXCL|O_WRONLY, 0600);
+ if (fd < 0)
+ die_errno("unable to create '%s'", rev_name);
+ }
+ f = hashfd(fd, rev_name);
+ } else if (flags & WRITE_REV_VERIFY) {
+ struct stat statbuf;
+ if (stat(rev_name, &statbuf)) {
+ if (errno == ENOENT) {
+ /* .rev files are optional */
+ return NULL;
+ } else
+ die_errno(_("could not stat: %s"), rev_name);
+ }
+ f = hashfd_check(rev_name);
+ } else
+ return NULL;
+
+ write_rev_header(f);
+
+ write_rev_index_positions(f, objects, nr_objects);
+ write_rev_trailer(f, hash);
+
+ if (rev_name && adjust_shared_perm(rev_name) < 0)
+ die(_("failed to make %s readable"), rev_name);
+
+ finalize_hashfile(f, NULL, CSUM_HASH_IN_STREAM | CSUM_CLOSE |
+ ((flags & WRITE_IDX_VERIFY) ? 0 : CSUM_FSYNC));
+
+ return rev_name;
+}
+
off_t write_pack_header(struct hashfile *f, uint32_t nr_entries)
{
struct pack_header hdr;
@@ -272,7 +380,7 @@ void fixup_pack_header_footer(int pack_fd,
fsync_or_die(pack_fd, pack_name);
}
-char *index_pack_lockfile(int ip_out)
+char *index_pack_lockfile(int ip_out, int *is_well_formed)
{
char packname[GIT_MAX_HEXSZ + 6];
const int len = the_hash_algo->hexsz + 6;
@@ -286,11 +394,17 @@ char *index_pack_lockfile(int ip_out)
*/
if (read_in_full(ip_out, packname, len) == len && packname[len-1] == '\n') {
const char *name;
+
+ if (is_well_formed)
+ *is_well_formed = 1;
packname[len-1] = 0;
if (skip_prefix(packname, "keep\t", &name))
return xstrfmt("%s/pack/pack-%s.keep",
get_object_directory(), name);
+ return NULL;
}
+ if (is_well_formed)
+ *is_well_formed = 0;
return NULL;
}
@@ -341,7 +455,7 @@ void finish_tmp_packfile(struct strbuf *name_buffer,
struct pack_idx_option *pack_idx_opts,
unsigned char hash[])
{
- const char *idx_tmp_name;
+ const char *idx_tmp_name, *rev_tmp_name = NULL;
int basename_len = name_buffer->len;
if (adjust_shared_perm(pack_tmp_name))
@@ -352,6 +466,9 @@ void finish_tmp_packfile(struct strbuf *name_buffer,
if (adjust_shared_perm(idx_tmp_name))
die_errno("unable to make temporary index file readable");
+ rev_tmp_name = write_rev_file(NULL, written_list, nr_written, hash,
+ pack_idx_opts->flags);
+
strbuf_addf(name_buffer, "%s.pack", hash_to_hex(hash));
if (rename(pack_tmp_name, name_buffer->buf))
@@ -365,5 +482,28 @@ void finish_tmp_packfile(struct strbuf *name_buffer,
strbuf_setlen(name_buffer, basename_len);
+ if (rev_tmp_name) {
+ strbuf_addf(name_buffer, "%s.rev", hash_to_hex(hash));
+ if (rename(rev_tmp_name, name_buffer->buf))
+ die_errno("unable to rename temporary reverse-index file");
+ }
+
+ strbuf_setlen(name_buffer, basename_len);
+
free((void *)idx_tmp_name);
}
+
+void write_promisor_file(const char *promisor_name, struct ref **sought, int nr_sought)
+{
+ int i, err;
+ FILE *output = xfopen(promisor_name, "w");
+
+ for (i = 0; i < nr_sought; i++)
+ fprintf(output, "%s %s\n", oid_to_hex(&sought[i]->old_oid),
+ sought[i]->name);
+
+ err = ferror(output);
+ err |= fclose(output);
+ if (err)
+ die(_("could not write '%s' promisor file"), promisor_name);
+}
diff --git a/pack.h b/pack.h
index 9fc0945..857cbd5 100644
--- a/pack.h
+++ b/pack.h
@@ -42,6 +42,8 @@ struct pack_idx_option {
/* flag bits */
#define WRITE_IDX_VERIFY 01 /* verify only, do not write the idx file */
#define WRITE_IDX_STRICT 02
+#define WRITE_REV 04
+#define WRITE_REV_VERIFY 010
uint32_t version;
uint32_t off32_limit;
@@ -85,7 +87,13 @@ int verify_pack_index(struct packed_git *);
int verify_pack(struct repository *, struct packed_git *, verify_fn fn, struct progress *, uint32_t);
off_t write_pack_header(struct hashfile *f, uint32_t);
void fixup_pack_header_footer(int, unsigned char *, const char *, uint32_t, unsigned char *, off_t);
-char *index_pack_lockfile(int fd);
+char *index_pack_lockfile(int fd, int *is_well_formed);
+
+struct ref;
+
+void write_promisor_file(const char *promisor_name, struct ref **sought, int nr_sought);
+
+const char *write_rev_file(const char *rev_name, struct pack_idx_entry **objects, uint32_t nr_objects, const unsigned char *hash, unsigned flags);
/*
* The "hdr" output buffer should be at least this big, which will handle sizes
diff --git a/packfile.c b/packfile.c
index 86f5c8d..ea29f4b 100644
--- a/packfile.c
+++ b/packfile.c
@@ -7,7 +7,7 @@
#include "packfile.h"
#include "delta.h"
#include "streaming.h"
-#include "sha1-lookup.h"
+#include "hash-lookup.h"
#include "commit.h"
#include "object.h"
#include "tag.h"
@@ -324,11 +324,21 @@ void close_pack_index(struct packed_git *p)
}
}
+void close_pack_revindex(struct packed_git *p) {
+ if (!p->revindex_map)
+ return;
+
+ munmap((void *)p->revindex_map, p->revindex_size);
+ p->revindex_map = NULL;
+ p->revindex_data = NULL;
+}
+
void close_pack(struct packed_git *p)
{
close_pack_windows(p);
close_pack_fd(p);
close_pack_index(p);
+ close_pack_revindex(p);
}
void close_object_store(struct raw_object_store *o)
@@ -351,7 +361,7 @@ void close_object_store(struct raw_object_store *o)
void unlink_pack_path(const char *pack_name, int force_delete)
{
- static const char *exts[] = {".pack", ".idx", ".keep", ".bitmap", ".promisor"};
+ static const char *exts[] = {".pack", ".idx", ".rev", ".keep", ".bitmap", ".promisor"};
int i;
struct strbuf buf = STRBUF_INIT;
size_t plen;
@@ -628,7 +638,7 @@ unsigned char *use_pack(struct packed_git *p,
if (p->pack_fd == -1 && open_packed_git(p))
die("packfile %s cannot be accessed", p->pack_name);
- win = xcalloc(1, sizeof(*win));
+ CALLOC_ARRAY(win, 1);
win->offset = (offset / window_align) * window_align;
len = p->pack_size - win->offset;
if (len > packed_git_window_size)
@@ -853,6 +863,7 @@ static void prepare_pack(const char *full_name, size_t full_name_len,
if (!strcmp(file_name, "multi-pack-index"))
return;
if (ends_with(file_name, ".idx") ||
+ ends_with(file_name, ".rev") ||
ends_with(file_name, ".pack") ||
ends_with(file_name, ".bitmap") ||
ends_with(file_name, ".keep") ||
@@ -1235,18 +1246,18 @@ static int get_delta_base_oid(struct packed_git *p,
oidread(oid, base);
return 0;
} else if (type == OBJ_OFS_DELTA) {
- struct revindex_entry *revidx;
+ uint32_t base_pos;
off_t base_offset = get_delta_base(p, w_curs, &curpos,
type, delta_obj_offset);
if (!base_offset)
return -1;
- revidx = find_pack_revindex(p, base_offset);
- if (!revidx)
+ if (offset_to_pack_pos(p, base_offset, &base_pos) < 0)
return -1;
- return nth_packed_object_id(oid, p, revidx->nr);
+ return nth_packed_object_id(oid, p,
+ pack_pos_to_index(p, base_pos));
} else
return -1;
}
@@ -1256,12 +1267,11 @@ static int retry_bad_packed_offset(struct repository *r,
off_t obj_offset)
{
int type;
- struct revindex_entry *revidx;
+ uint32_t pos;
struct object_id oid;
- revidx = find_pack_revindex(p, obj_offset);
- if (!revidx)
+ if (offset_to_pack_pos(p, obj_offset, &pos) < 0)
return OBJ_BAD;
- nth_packed_object_id(&oid, p, revidx->nr);
+ nth_packed_object_id(&oid, p, pack_pos_to_index(p, pos));
mark_bad_packed_object(p, oid.hash);
type = oid_object_info(r, &oid, NULL);
if (type <= OBJ_NONE)
@@ -1538,8 +1548,15 @@ int packed_object_info(struct repository *r, struct packed_git *p,
}
if (oi->disk_sizep) {
- struct revindex_entry *revidx = find_pack_revindex(p, obj_offset);
- *oi->disk_sizep = revidx[1].offset - obj_offset;
+ uint32_t pos;
+ if (offset_to_pack_pos(p, obj_offset, &pos) < 0) {
+ error("could not find object at offset %"PRIuMAX" "
+ "in pack %s", (uintmax_t)obj_offset, p->pack_name);
+ type = OBJ_BAD;
+ goto out;
+ }
+
+ *oi->disk_sizep = pack_pos_to_offset(p, pos + 1) - obj_offset;
}
if (oi->typep || oi->type_name) {
@@ -1688,11 +1705,21 @@ void *unpack_entry(struct repository *r, struct packed_git *p, off_t obj_offset,
}
if (do_check_packed_object_crc && p->index_version > 1) {
- struct revindex_entry *revidx = find_pack_revindex(p, obj_offset);
- off_t len = revidx[1].offset - obj_offset;
- if (check_pack_crc(p, &w_curs, obj_offset, len, revidx->nr)) {
+ uint32_t pack_pos, index_pos;
+ off_t len;
+
+ if (offset_to_pack_pos(p, obj_offset, &pack_pos) < 0) {
+ error("could not find object at offset %"PRIuMAX" in pack %s",
+ (uintmax_t)obj_offset, p->pack_name);
+ data = NULL;
+ goto out;
+ }
+
+ len = pack_pos_to_offset(p, pack_pos + 1) - obj_offset;
+ index_pos = pack_pos_to_index(p, pack_pos);
+ if (check_pack_crc(p, &w_curs, obj_offset, len, index_pos)) {
struct object_id oid;
- nth_packed_object_id(&oid, p, revidx->nr);
+ nth_packed_object_id(&oid, p, index_pos);
error("bad packed object CRC for %s",
oid_to_hex(&oid));
mark_bad_packed_object(p, oid.hash);
@@ -1775,11 +1802,11 @@ void *unpack_entry(struct repository *r, struct packed_git *p, off_t obj_offset,
* This is costly but should happen only in the presence
* of a corrupted pack, and is better than failing outright.
*/
- struct revindex_entry *revidx;
+ uint32_t pos;
struct object_id base_oid;
- revidx = find_pack_revindex(p, obj_offset);
- if (revidx) {
- nth_packed_object_id(&base_oid, p, revidx->nr);
+ if (!(offset_to_pack_pos(p, obj_offset, &pos))) {
+ nth_packed_object_id(&base_oid, p,
+ pack_pos_to_index(p, pos));
error("failed to read delta base object %s"
" at offset %"PRIuMAX" from %s",
oid_to_hex(&base_oid), (uintmax_t)obj_offset,
@@ -2066,19 +2093,31 @@ int for_each_object_in_pack(struct packed_git *p,
}
for (i = 0; i < p->num_objects; i++) {
- uint32_t pos;
+ uint32_t index_pos;
struct object_id oid;
+ /*
+ * We are iterating "i" from 0 up to num_objects, but its
+ * meaning may be different, depending on the requested output
+ * order:
+ *
+ * - in object-name order, it is the same as the index order
+ * used by nth_packed_object_id(), so we can pass it
+ * directly
+ *
+ * - in pack-order, it is pack position, which we must
+ * convert to an index position in order to get the oid.
+ */
if (flags & FOR_EACH_OBJECT_PACK_ORDER)
- pos = p->revindex[i].nr;
+ index_pos = pack_pos_to_index(p, i);
else
- pos = i;
+ index_pos = i;
- if (nth_packed_object_id(&oid, p, pos) < 0)
+ if (nth_packed_object_id(&oid, p, index_pos) < 0)
return error("unable to get sha1 of object %u in %s",
- pos, p->pack_name);
+ index_pos, p->pack_name);
- r = cb(&oid, p, pos, data);
+ r = cb(&oid, p, index_pos, data);
if (r)
break;
}
diff --git a/packfile.h b/packfile.h
index a58fc73..4cfec9e 100644
--- a/packfile.h
+++ b/packfile.h
@@ -90,6 +90,7 @@ uint32_t get_pack_fanout(struct packed_git *p, uint32_t value);
unsigned char *use_pack(struct packed_git *, struct pack_window **, off_t, unsigned long *);
void close_pack_windows(struct packed_git *);
+void close_pack_revindex(struct packed_git *);
void close_pack(struct packed_git *);
void close_object_store(struct raw_object_store *o);
void unuse_pack(struct pack_window **);
diff --git a/pager.c b/pager.c
index ee435de..3d37dd7 100644
--- a/pager.c
+++ b/pager.c
@@ -11,29 +11,25 @@
static struct child_process pager_process = CHILD_PROCESS_INIT;
static const char *pager_program;
-static void wait_for_pager(int in_signal)
+static void close_pager_fds(void)
{
- if (!in_signal) {
- fflush(stdout);
- fflush(stderr);
- }
/* signal EOF to pager */
close(1);
close(2);
- if (in_signal)
- finish_command_in_signal(&pager_process);
- else
- finish_command(&pager_process);
}
static void wait_for_pager_atexit(void)
{
- wait_for_pager(0);
+ fflush(stdout);
+ fflush(stderr);
+ close_pager_fds();
+ finish_command(&pager_process);
}
static void wait_for_pager_signal(int signo)
{
- wait_for_pager(1);
+ close_pager_fds();
+ finish_command_in_signal(&pager_process);
sigchain_pop(signo);
raise(signo);
}
diff --git a/parse-options.c b/parse-options.c
index f050743..fbea16e 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -869,7 +869,7 @@ int parse_options(int argc, const char **argv, const char *prefix,
usage_with_options(usagestr, options);
}
- precompose_argv(argc, argv);
+ precompose_argv_prefix(argc, argv, NULL);
free(real_options);
free(ctx.alias_groups);
return parse_options_end(&ctx);
diff --git a/patch-ids.c b/patch-ids.c
index f51021a..8bf4255 100644
--- a/patch-ids.c
+++ b/patch-ids.c
@@ -1,7 +1,7 @@
#include "cache.h"
#include "diff.h"
#include "commit.h"
-#include "sha1-lookup.h"
+#include "hash-lookup.h"
#include "patch-ids.h"
static int patch_id_defined(struct commit *commit)
@@ -124,7 +124,7 @@ struct patch_id *add_commit_patch_id(struct commit *commit,
if (!patch_id_defined(commit))
return NULL;
- key = xcalloc(1, sizeof(*key));
+ CALLOC_ARRAY(key, 1);
if (init_patch_id_entry(key, commit, ids)) {
free(key);
return NULL;
diff --git a/pathspec.c b/pathspec.c
index 7a229d8..18b3be3 100644
--- a/pathspec.c
+++ b/pathspec.c
@@ -154,7 +154,7 @@ static void parse_pathspec_attr_match(struct pathspec_item *item, const char *va
string_list_remove_empty_items(&list, 0);
item->attr_check = attr_check_alloc();
- item->attr_match = xcalloc(list.nr, sizeof(struct attr_match));
+ CALLOC_ARRAY(item->attr_match, list.nr);
for_each_string_list_item(si, &list) {
size_t attr_len;
@@ -561,7 +561,7 @@ void parse_pathspec(struct pathspec *pathspec,
if (!(flags & PATHSPEC_PREFER_CWD))
BUG("PATHSPEC_PREFER_CWD requires arguments");
- pathspec->items = item = xcalloc(1, sizeof(*item));
+ pathspec->items = CALLOC_ARRAY(item, 1);
item->match = xstrdup(prefix);
item->original = xstrdup(prefix);
item->nowildcard_len = item->len = strlen(prefix);
diff --git a/po/README b/po/README
index 07595d3..efd5baa 100644
--- a/po/README
+++ b/po/README
@@ -284,23 +284,5 @@
Testing marked strings
----------------------
-Even if you've correctly marked porcelain strings for translation
-something in the test suite might still depend on the US English
-version of the strings, e.g. to grep some error message or other
-output.
-
-To smoke out issues like these, Git tested with a translation mode that
-emits gibberish on every call to gettext. To use it run the test suite
-with it, e.g.:
-
- cd t && GIT_TEST_GETTEXT_POISON=true prove -j 9 ./t[0-9]*.sh
-
-If tests break with it you should inspect them manually and see if
-what you're translating is sane, i.e. that you're not translating
-plumbing output.
-
-If not you should replace calls to grep with test_i18ngrep, or
-test_cmp calls with test_i18ncmp. If that's not enough you can skip
-the whole test by making it depend on the C_LOCALE_OUTPUT
-prerequisite. See existing test files with this prerequisite for
-examples.
+Git's tests are run under LANG=C LC_ALL=C. So the tests do not need be
+changed to account for translations as they're added.
diff --git a/po/TEAMS b/po/TEAMS
index 677cece..a32beb6 100644
--- a/po/TEAMS
+++ b/po/TEAMS
@@ -29,6 +29,10 @@
Leader: Jean-Noël Avila <jn.avila@free.fr>
Members: Sébastien Helleu <flashcode@flashtux.org>
+Language: id (Indonesian)
+Repository: https://github.com/bagasme/git-po
+Leader: Bagas Sanjaya <bagasdotme@gmail.com>
+
Language: is (Icelandic)
Leader: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
diff --git a/po/bg.po b/po/bg.po
index d73e84c..529ea97 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -1,7 +1,7 @@
# Bulgarian translation of git po-file.
-# Copyright (C) 2014, 2015, 2016, 2017, 2018, 2019, 2020 Alexander Shopov <ash@kambanaria.org>.
+# Copyright (C) 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Alexander Shopov <ash@kambanaria.org>.
# This file is distributed under the same license as the git package.
-# Alexander Shopov <ash@kambanaria.org>, 2014, 2015, 2016, 2017, 2018, 2019, 2020.
+# Alexander Shopov <ash@kambanaria.org>, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021.
#
# ========================
# DICTIONARY TO MERGE IN GIT GUI
@@ -38,6 +38,7 @@
# graft присадка
# grafted repository хранилище с присаждане
# replace refs заместващи указатели
+# replace objects заместващи обекти
# embedded repository вградено/вътрешно хранилище (добавянето му е грешка)
# thin pack съкратен пакет
# pack file пакетен файл
@@ -149,6 +150,8 @@
# identity самоличност, информация за
# boundary commit гранично подаване
# integrate (changes) внасяне (на промени)
+# overflow data данни за отместването
+# reverse index обратен индекс (а не обърнат, за да не се бърка с reverse key index)
# ------------------------
# „$var“ - може да не сработва за shell има gettext и eval_gettext - проверка - намират се лесно по „$
# ------------------------
@@ -165,10 +168,10 @@
# for i in `sort -u FILES`; do cnt=`grep $i FILES | wc -l`; echo $cnt $i ;done | sort -n
msgid ""
msgstr ""
-"Project-Id-Version: git 2.30\n"
+"Project-Id-Version: git 2.31\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2020-12-21 07:10+0800\n"
-"PO-Revision-Date: 2020-12-22 17:48+0100\n"
+"POT-Creation-Date: 2021-03-04 22:41+0800\n"
+"PO-Revision-Date: 2021-03-05 12:11+0100\n"
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
"Language: bg\n"
@@ -182,9 +185,9 @@
msgid "Huh (%s)?"
msgstr "Неуспешен анализ — „%s“."
-#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3284
-#: sequencer.c:3735 sequencer.c:3890 builtin/rebase.c:1532
-#: builtin/rebase.c:1955
+#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3292
+#: sequencer.c:3743 sequencer.c:3898 builtin/rebase.c:1538
+#: builtin/rebase.c:1963
msgid "could not read index"
msgstr "индексът не може да бъде прочетен"
@@ -212,7 +215,7 @@
msgid "could not stage '%s'"
msgstr "неуспешно добавяне в индекса на „%s“"
-#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3478
+#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3486
msgid "could not write index"
msgstr "индексът не може да бъде записан"
@@ -370,7 +373,7 @@
#: add-interactive.c:1144 apply.c:4987 apply.c:4990 builtin/am.c:2257
#: builtin/am.c:2260 builtin/bugreport.c:134 builtin/clone.c:124
-#: builtin/fetch.c:147 builtin/merge.c:284 builtin/pull.c:190
+#: builtin/fetch.c:150 builtin/merge.c:285 builtin/pull.c:190
#: builtin/submodule--helper.c:409 builtin/submodule--helper.c:1818
#: builtin/submodule--helper.c:1821 builtin/submodule--helper.c:2326
#: builtin/submodule--helper.c:2329 builtin/submodule--helper.c:2572
@@ -969,7 +972,7 @@
msgid "Exiting because of an unresolved conflict."
msgstr "Изход от програмата заради некоригиран конфликт."
-#: advice.c:281 builtin/merge.c:1369
+#: advice.c:281 builtin/merge.c:1370
msgid "You have not concluded your merge (MERGE_HEAD exists)."
msgstr "Не сте завършили сливане. (Указателят „MERGE_HEAD“ съществува)."
@@ -1285,7 +1288,8 @@
msgid "cannot checkout %s"
msgstr "„%s“ не може да се изтегли"
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:73 setup.c:308
+#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:86 pack-revindex.c:213
+#: setup.c:308
#, c-format
msgid "failed to read %s"
msgstr "файлът „%s“ не може да бъде прочетен"
@@ -1450,7 +1454,7 @@
msgid "unable to add cache entry for %s"
msgstr "не може да се добави запис в кеша за „%s“"
-#: apply.c:4374 builtin/bisect--helper.c:524
+#: apply.c:4374 builtin/bisect--helper.c:523
#, c-format
msgid "failed to write to '%s'"
msgstr "в „%s“ не може да се пише"
@@ -1486,7 +1490,7 @@
msgid "truncating .rej filename to %.*s.rej"
msgstr "съкращаване на името на файла с отхвърлените парчета на „ %.*s.rej“"
-#: apply.c:4576 builtin/fetch.c:927 builtin/fetch.c:1228
+#: apply.c:4576 builtin/fetch.c:933 builtin/fetch.c:1334
#, c-format
msgid "cannot open %s"
msgstr "„%s“ не може да бъде отворен"
@@ -1542,7 +1546,7 @@
msgstr[1] ""
"Добавени са %d реда след корекцията на грешките в знаците за интервали."
-#: apply.c:4960 builtin/add.c:618 builtin/mv.c:304 builtin/rm.c:406
+#: apply.c:4960 builtin/add.c:626 builtin/mv.c:304 builtin/rm.c:406
msgid "Unable to write new index file"
msgstr "Новият индекс не може да бъде записан"
@@ -1613,7 +1617,7 @@
msgstr ""
"създаване на временен индекс на база на включената информация за индекса"
-#: apply.c:5025 builtin/checkout-index.c:182 builtin/ls-files.c:525
+#: apply.c:5025 builtin/checkout-index.c:195 builtin/ls-files.c:540
msgid "paths are separated with NUL character"
msgstr "разделяне на пътищата с нулевия знак „NUL“"
@@ -1623,7 +1627,7 @@
#: apply.c:5028 builtin/am.c:2245 builtin/interpret-trailers.c:98
#: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3562 builtin/rebase.c:1346
+#: builtin/pack-objects.c:3577 builtin/rebase.c:1352
msgid "action"
msgstr "действие"
@@ -1652,9 +1656,9 @@
msgid "allow overlapping hunks"
msgstr "позволяване на застъпващи се парчета"
-#: apply.c:5045 builtin/add.c:329 builtin/check-ignore.c:22
-#: builtin/commit.c:1364 builtin/count-objects.c:98 builtin/fsck.c:775
-#: builtin/log.c:2287 builtin/mv.c:123 builtin/read-tree.c:128
+#: apply.c:5045 builtin/add.c:337 builtin/check-ignore.c:22
+#: builtin/commit.c:1364 builtin/count-objects.c:98 builtin/fsck.c:757
+#: builtin/log.c:2286 builtin/mv.c:123 builtin/read-tree.c:128
msgid "be verbose"
msgstr "повече подробности"
@@ -1742,14 +1746,14 @@
msgid "cannot read %s"
msgstr "обектът „%s“ не може да бъде прочетен"
-#: archive.c:345 sequencer.c:459 sequencer.c:1736 sequencer.c:2886
-#: sequencer.c:3327 sequencer.c:3436 builtin/am.c:249 builtin/commit.c:786
-#: builtin/merge.c:1138
+#: archive.c:345 sequencer.c:459 sequencer.c:1744 sequencer.c:2894
+#: sequencer.c:3335 sequencer.c:3444 builtin/am.c:249 builtin/commit.c:786
+#: builtin/merge.c:1139
#, c-format
msgid "could not read '%s'"
msgstr "файлът „%s“ не може да бъде прочетен"
-#: archive.c:430 builtin/add.c:181 builtin/add.c:594 builtin/rm.c:315
+#: archive.c:430 builtin/add.c:189 builtin/add.c:602 builtin/rm.c:315
#, c-format
msgid "pathspec '%s' did not match any files"
msgstr "пътят „%s“ не съвпада с никой файл"
@@ -1791,7 +1795,7 @@
msgid "archive format"
msgstr "ФОРМАТ на архива"
-#: archive.c:556 builtin/log.c:1765
+#: archive.c:556 builtin/log.c:1764
msgid "prefix"
msgstr "ПРЕФИКС"
@@ -1799,11 +1803,11 @@
msgid "prepend prefix to each pathname in the archive"
msgstr "добавяне на този ПРЕФИКС към всеки път в архива"
-#: archive.c:558 archive.c:561 builtin/blame.c:886 builtin/blame.c:890
-#: builtin/blame.c:891 builtin/commit-tree.c:117 builtin/config.c:135
+#: archive.c:558 archive.c:561 builtin/blame.c:884 builtin/blame.c:888
+#: builtin/blame.c:889 builtin/commit-tree.c:117 builtin/config.c:135
#: builtin/fast-export.c:1207 builtin/fast-export.c:1209
-#: builtin/fast-export.c:1213 builtin/grep.c:919 builtin/hash-object.c:105
-#: builtin/ls-files.c:561 builtin/ls-files.c:564 builtin/notes.c:412
+#: builtin/fast-export.c:1213 builtin/grep.c:920 builtin/hash-object.c:105
+#: builtin/ls-files.c:576 builtin/ls-files.c:579 builtin/notes.c:412
#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:190
msgid "file"
msgstr "ФАЙЛ"
@@ -1968,12 +1972,12 @@
msgid "a %s revision is needed"
msgstr "необходима е версия „%s“"
-#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:255
+#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:287
#, c-format
msgid "could not create file '%s'"
msgstr "файлът „%s“ не може да бъде създаден"
-#: bisect.c:987 builtin/merge.c:152
+#: bisect.c:987 builtin/merge.c:153
#, c-format
msgid "could not read file '%s'"
msgstr "файлът „%s“ не може да бъде прочетен"
@@ -1991,7 +1995,7 @@
#, c-format
msgid ""
"No testable commit found.\n"
-"Maybe you started with bad path parameters?\n"
+"Maybe you started with bad path arguments?\n"
msgstr ""
"Липсва подходящо за тестване подаване.\n"
"Проверете параметрите за пътищата.\n"
@@ -2027,11 +2031,11 @@
"Едновременното задаване на опциите „--reverse“ и „--first-parent“ изисква "
"указването на крайно подаване"
-#: blame.c:2821 bundle.c:213 ref-filter.c:2272 remote.c:2031 sequencer.c:2138
-#: sequencer.c:4633 submodule.c:855 builtin/commit.c:1045 builtin/log.c:409
-#: builtin/log.c:1023 builtin/log.c:1625 builtin/log.c:2046 builtin/log.c:2336
-#: builtin/merge.c:423 builtin/pack-objects.c:3380 builtin/pack-objects.c:3395
-#: builtin/shortlog.c:267
+#: blame.c:2821 bundle.c:213 ref-filter.c:2206 remote.c:2041 sequencer.c:2146
+#: sequencer.c:4641 submodule.c:856 builtin/commit.c:1045 builtin/log.c:411
+#: builtin/log.c:1016 builtin/log.c:1624 builtin/log.c:2045 builtin/log.c:2335
+#: builtin/merge.c:424 builtin/pack-objects.c:3395 builtin/pack-objects.c:3410
+#: builtin/shortlog.c:255
msgid "revision walk setup failed"
msgstr "неуспешно настройване на обхождането на версиите"
@@ -2210,7 +2214,7 @@
msgid "unrecognized header: %s%s (%d)"
msgstr "непозната заглавна част: %s%s (%d)"
-#: bundle.c:136 rerere.c:480 rerere.c:690 sequencer.c:2390 sequencer.c:3176
+#: bundle.c:136 rerere.c:464 rerere.c:674 sequencer.c:2398 sequencer.c:3184
#: builtin/commit.c:814
#, c-format
msgid "could not open '%s'"
@@ -2254,286 +2258,301 @@
msgid "pack-objects died"
msgstr "Командата „git pack-objects“ не завърши успешно"
-#: bundle.c:379
-msgid "rev-list died"
-msgstr "Командата „git rev-list“ не завърши успешно"
-
-#: bundle.c:428
+#: bundle.c:386
#, c-format
msgid "ref '%s' is excluded by the rev-list options"
msgstr ""
"указателят „%s“ не е бил включен поради опциите зададени на „git rev-list“"
-#: bundle.c:498
+#: bundle.c:490
#, c-format
msgid "unsupported bundle version %d"
msgstr "неподдържана версия на индекса %d"
-#: bundle.c:500
+#: bundle.c:492
#, c-format
msgid "cannot write bundle version %d with algorithm %s"
msgstr "пратка %d не може да се запише с алгоритъм %s"
-#: bundle.c:522 builtin/log.c:209 builtin/log.c:1927 builtin/shortlog.c:408
+#: bundle.c:510 builtin/log.c:210 builtin/log.c:1926 builtin/shortlog.c:396
#, c-format
msgid "unrecognized argument: %s"
msgstr "непознат аргумент: %s"
-#: bundle.c:530
+#: bundle.c:539
msgid "Refusing to create empty bundle."
msgstr "Създаването на празна пратка е невъзможно."
-#: bundle.c:540
+#: bundle.c:549
#, c-format
msgid "cannot create '%s'"
-msgstr "Файлът „%s“ не може да бъде създаден"
+msgstr "файлът „%s“ не може да бъде създаден"
-#: bundle.c:565
+#: bundle.c:574
msgid "index-pack died"
-msgstr "Командата „git index-pack“ не завърши успешно"
+msgstr "командата „git index-pack“ не завърши успешно"
+
+#: chunk-format.c:113
+msgid "terminating chunk id appears earlier than expected"
+msgstr "идентификаторът за краен откъс се явява по-рано от очакваното"
+
+#: chunk-format.c:122
+#, c-format
+msgid "improper chunk offset(s) %<PRIx64> and %<PRIx64>"
+msgstr "неправилно отместване на откъс/и %<PRIx64> и %<PRIx64>"
+
+#: chunk-format.c:129
+#, c-format
+msgid "duplicate chunk ID %<PRIx32> found"
+msgstr "повтарящ се идентификатор на откъс %<PRIx32>"
+
+#: chunk-format.c:143
+#, c-format
+msgid "final chunk has non-zero id %<PRIx32>"
+msgstr "ненулев идентификатор за краен откъс %<PRIx32>"
#: color.c:329
#, c-format
msgid "invalid color value: %.*s"
msgstr "неправилна стойност за цвят: %.*s"
-#: commit-graph.c:188 midx.c:47
+#: commit-graph.c:197 midx.c:46
msgid "invalid hash version"
msgstr "неправилна версия на контролна сума"
-#: commit-graph.c:246
+#: commit-graph.c:255
msgid "commit-graph file is too small"
-msgstr "файлът с гра̀фа на подаванията е твърде малък"
+msgstr "файлът за гра̀фа с подаванията е твърде малък"
-#: commit-graph.c:311
+#: commit-graph.c:348
#, c-format
msgid "commit-graph signature %X does not match signature %X"
msgstr "отпечатъкът на гра̀фа с подаванията %X не съвпада с %X"
-#: commit-graph.c:318
+#: commit-graph.c:355
#, c-format
msgid "commit-graph version %X does not match version %X"
msgstr "версията на гра̀фа с подаванията %X не съвпада с %X"
-#: commit-graph.c:325
+#: commit-graph.c:362
#, c-format
msgid "commit-graph hash version %X does not match version %X"
msgstr "версията на контролната сума на гра̀фа с подаванията %X не съвпада с %X"
-#: commit-graph.c:342
+#: commit-graph.c:379
#, c-format
msgid "commit-graph file is too small to hold %u chunks"
msgstr "файлът с гра̀фа на подаванията е твърде малък, за да съдържа %u откъси"
-#: commit-graph.c:361
-#, c-format
-msgid "commit-graph improper chunk offset %08x%08x"
-msgstr "неправилно отместване на откъс: %08x%08x"
-
-#: commit-graph.c:433
-#, c-format
-msgid "commit-graph chunk id %08x appears multiple times"
-msgstr "откъсът %08x се явява многократно"
-
-#: commit-graph.c:499
+#: commit-graph.c:472
msgid "commit-graph has no base graphs chunk"
msgstr "базовият откъс липсва в гра̀фа с подаванията"
-#: commit-graph.c:509
+#: commit-graph.c:482
msgid "commit-graph chain does not match"
msgstr "веригата на гра̀фа с подаванията не съвпада"
-#: commit-graph.c:557
+#: commit-graph.c:530
#, c-format
msgid "invalid commit-graph chain: line '%s' not a hash"
msgstr ""
"грешка във веригата на гра̀фа с подаванията: ред „%s“ не е контролна сума"
-#: commit-graph.c:581
+#: commit-graph.c:554
msgid "unable to find all commit-graph files"
msgstr "някои файлове на гра̀фа с подаванията не могат да бъдат открити"
-#: commit-graph.c:721 commit-graph.c:785
+#: commit-graph.c:735 commit-graph.c:772
msgid "invalid commit position. commit-graph is likely corrupt"
msgstr ""
"неправилна позиция на подаването. Вероятно графът с подаванията е повреден"
-#: commit-graph.c:742
+#: commit-graph.c:756
#, c-format
msgid "could not find commit %s"
msgstr "подаването „%s“ не може да бъде открито"
-#: commit-graph.c:1036 builtin/am.c:1292
+#: commit-graph.c:789
+msgid "commit-graph requires overflow generation data but has none"
+msgstr ""
+"графът с подаванията изисква генериране на данни за отместването, но такива "
+"липсват"
+
+#: commit-graph.c:1065 builtin/am.c:1292
#, c-format
msgid "unable to parse commit %s"
msgstr "подаването не може да бъде анализирано: %s"
-#: commit-graph.c:1252 builtin/pack-objects.c:2864
+#: commit-graph.c:1327 builtin/pack-objects.c:2872
#, c-format
msgid "unable to get type of object %s"
msgstr "видът на обекта „%s“ не може да бъде определен"
-#: commit-graph.c:1283
+#: commit-graph.c:1358
msgid "Loading known commits in commit graph"
msgstr "Зареждане на познатите подавания в гра̀фа с подаванията"
-#: commit-graph.c:1300
+#: commit-graph.c:1375
msgid "Expanding reachable commits in commit graph"
msgstr "Разширяване на достижимите подавания в гра̀фа"
-#: commit-graph.c:1320
+#: commit-graph.c:1395
msgid "Clearing commit marks in commit graph"
msgstr "Изчистване на отбелязванията на подаванията в гра̀фа с подаванията"
-#: commit-graph.c:1339
+#: commit-graph.c:1414
+msgid "Computing commit graph topological levels"
+msgstr "Изчисляване на топологичните нива в гра̀фа с подаванията"
+
+#: commit-graph.c:1467
msgid "Computing commit graph generation numbers"
msgstr "Изчисляване на номерата на поколенията в гра̀фа с подаванията"
-#: commit-graph.c:1406
+#: commit-graph.c:1548
msgid "Computing commit changed paths Bloom filters"
msgstr "Изчисляване на филтрите на Блум на пътищата с промяна при подаването"
-#: commit-graph.c:1483
+#: commit-graph.c:1625
msgid "Collecting referenced commits"
msgstr "Събиране на свързаните подавания"
-#: commit-graph.c:1508
+#: commit-graph.c:1650
#, c-format
msgid "Finding commits for commit graph in %d pack"
msgid_plural "Finding commits for commit graph in %d packs"
msgstr[0] "Откриване на подаванията в гра̀фа в %d пакетен файл"
msgstr[1] "Откриване на подаванията в гра̀фа в %d пакетни файла"
-#: commit-graph.c:1521
+#: commit-graph.c:1663
#, c-format
msgid "error adding pack %s"
msgstr "грешка при добавяне на пакетен файл „%s“"
-#: commit-graph.c:1525
+#: commit-graph.c:1667
#, c-format
msgid "error opening index for %s"
msgstr "грешка при отваряне на индекса на „%s“"
-#: commit-graph.c:1562
+#: commit-graph.c:1704
msgid "Finding commits for commit graph among packed objects"
msgstr "Откриване на подаванията в гра̀фа измежду пакетираните обекти"
-#: commit-graph.c:1580
+#: commit-graph.c:1722
msgid "Finding extra edges in commit graph"
msgstr "Откриване на още върхове в гра̀фа с подаванията"
-#: commit-graph.c:1628
+#: commit-graph.c:1771
msgid "failed to write correct number of base graph ids"
msgstr "правилният брой на базовите идентификатори не може да се запише"
-#: commit-graph.c:1670 midx.c:819
+#: commit-graph.c:1802 midx.c:794
#, c-format
msgid "unable to create leading directories of %s"
msgstr "родителските директории на „%s“ не могат да бъдат създадени"
-#: commit-graph.c:1683
+#: commit-graph.c:1815
msgid "unable to create temporary graph layer"
msgstr "не може да бъде създаден временен слой за гра̀фа с подаванията"
-#: commit-graph.c:1688
+#: commit-graph.c:1820
#, c-format
msgid "unable to adjust shared permissions for '%s'"
msgstr "правата за споделен достъп до „%s“ не могат да бъдат зададени"
-#: commit-graph.c:1758
+#: commit-graph.c:1879
#, c-format
msgid "Writing out commit graph in %d pass"
msgid_plural "Writing out commit graph in %d passes"
msgstr[0] "Запазване на гра̀фа с подаванията в %d пас"
msgstr[1] "Запазване на гра̀фа с подаванията в %d паса"
-#: commit-graph.c:1803
+#: commit-graph.c:1915
msgid "unable to open commit-graph chain file"
msgstr "файлът с веригата на гра̀фа с подаванията не може да се отвори"
-#: commit-graph.c:1819
+#: commit-graph.c:1931
msgid "failed to rename base commit-graph file"
msgstr "основният файл на гра̀фа с подаванията не може да бъде преименуван"
-#: commit-graph.c:1839
+#: commit-graph.c:1951
msgid "failed to rename temporary commit-graph file"
msgstr "временният файл на гра̀фа с подаванията не може да бъде преименуван"
-#: commit-graph.c:1965
+#: commit-graph.c:2084
msgid "Scanning merged commits"
msgstr "Търсене на подаванията със сливания"
-#: commit-graph.c:2009
+#: commit-graph.c:2128
msgid "Merging commit-graph"
msgstr "Сливане на гра̀фа с подаванията"
-#: commit-graph.c:2115
+#: commit-graph.c:2235
msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
msgstr ""
"опит за запис на гра̀фа с подаванията, но настройката „core.commitGraph“ е "
"изключена"
-#: commit-graph.c:2214
+#: commit-graph.c:2342
msgid "too many commits to write graph"
msgstr "прекалено много подавания за записване на гра̀фа"
-#: commit-graph.c:2307
+#: commit-graph.c:2440
msgid "the commit-graph file has incorrect checksum and is likely corrupt"
msgstr "графът с подаванията е с грешна сума за проверка — вероятно е повреден"
-#: commit-graph.c:2317
+#: commit-graph.c:2450
#, c-format
msgid "commit-graph has incorrect OID order: %s then %s"
msgstr ""
"неправилна подредба на обектите по идентификатор в гра̀фа с подаванията: „%s“ "
"е преди „%s“, а не трябва"
-#: commit-graph.c:2327 commit-graph.c:2342
+#: commit-graph.c:2460 commit-graph.c:2475
#, c-format
msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
msgstr ""
"неправилна стойност за откъс в гра̀фа с подаванията: fanout[%d] = %u, а "
"трябва да е %u"
-#: commit-graph.c:2334
+#: commit-graph.c:2467
#, c-format
msgid "failed to parse commit %s from commit-graph"
msgstr "подаване „%s“ в гра̀фа с подаванията не може да се анализира"
-#: commit-graph.c:2352
+#: commit-graph.c:2485
msgid "Verifying commits in commit graph"
msgstr "Проверка на подаванията в гра̀фа"
-#: commit-graph.c:2367
+#: commit-graph.c:2500
#, c-format
msgid "failed to parse commit %s from object database for commit-graph"
msgstr ""
"подаване „%s“ в базата от данни към гра̀фа с подаванията не може да се "
"анализира"
-#: commit-graph.c:2374
+#: commit-graph.c:2507
#, c-format
msgid "root tree OID for commit %s in commit-graph is %s != %s"
msgstr ""
"идентификаторът на обект за кореновото дърво за подаване „%s“ в гра̀фа с "
"подаванията е „%s“, а трябва да е „%s“"
-#: commit-graph.c:2384
+#: commit-graph.c:2517
#, c-format
msgid "commit-graph parent list for commit %s is too long"
msgstr "списъкът с родители на „%s“ в гра̀фа с подаванията е прекалено дълъг"
-#: commit-graph.c:2393
+#: commit-graph.c:2526
#, c-format
msgid "commit-graph parent for %s is %s != %s"
msgstr "родителят на „%s“ в гра̀фа с подаванията е „%s“, а трябва да е „%s“"
-#: commit-graph.c:2407
+#: commit-graph.c:2540
#, c-format
msgid "commit-graph parent list for commit %s terminates early"
msgstr "списъкът с родители на „%s“ в гра̀фа с подаванията е прекалено къс"
-#: commit-graph.c:2412
+#: commit-graph.c:2545
#, c-format
msgid ""
"commit-graph has generation number zero for commit %s, but non-zero elsewhere"
@@ -2541,7 +2560,7 @@
"номерът на поколението на подаване „%s“ в гра̀фа с подаванията е 0, а другаде "
"не е"
-#: commit-graph.c:2416
+#: commit-graph.c:2549
#, c-format
msgid ""
"commit-graph has non-zero generation number for commit %s, but zero elsewhere"
@@ -2549,21 +2568,21 @@
"номерът на поколението на подаване „%s“ в гра̀фа с подаванията не е 0, а "
"другаде е"
-#: commit-graph.c:2432
+#: commit-graph.c:2566
#, c-format
-msgid "commit-graph generation for commit %s is %u != %u"
+msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
msgstr ""
-"номерът на поколението на подаване „%s“ в гра̀фа с подаванията е %u, а "
-"другаде е %u"
+"номерът на поколението на подаване „%s“ в гра̀фа с подаванията е %<PRIuMAX> < "
+"%<PRIuMAX>"
-#: commit-graph.c:2438
+#: commit-graph.c:2572
#, c-format
msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
msgstr ""
"датата на подаване на „%s“ в гра̀фа с подаванията е %<PRIuMAX>, а трябва да е "
"%<PRIuMAX>"
-#: commit.c:52 sequencer.c:2879 builtin/am.c:359 builtin/am.c:403
+#: commit.c:52 sequencer.c:2887 builtin/am.c:359 builtin/am.c:403
#: builtin/am.c:1371 builtin/am.c:2018 builtin/replace.c:457
#, c-format
msgid "could not parse %s"
@@ -2597,29 +2616,29 @@
"\n"
" git config advice.graftFileDeprecated false"
-#: commit.c:1172
+#: commit.c:1223
#, c-format
msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
msgstr ""
"Подаването „%s“ е с недоверен подпис от GPG, който твърди, че е на „%s“."
-#: commit.c:1176
+#: commit.c:1227
#, c-format
msgid "Commit %s has a bad GPG signature allegedly by %s."
msgstr ""
"Подаването „%s“ е с неправилен подпис от GPG, който твърди, че е на „%s“."
-#: commit.c:1179
+#: commit.c:1230
#, c-format
msgid "Commit %s does not have a GPG signature."
msgstr "Подаването „%s“ е без подпис от GPG."
-#: commit.c:1182
+#: commit.c:1233
#, c-format
msgid "Commit %s has a good GPG signature by %s\n"
msgstr "Подаването „%s“ е с коректен подпис от GPG на „%s“.\n"
-#: commit.c:1436
+#: commit.c:1487
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"
@@ -2633,7 +2652,7 @@
msgid "memory exhausted"
msgstr "паметта свърши"
-#: config.c:125
+#: config.c:126
#, c-format
msgid ""
"exceeded maximum include depth (%d) while including\n"
@@ -2648,162 +2667,206 @@
" %s\n"
"Това може да се дължи на зацикляне при вмъкването."
-#: config.c:141
+#: config.c:142
#, c-format
msgid "could not expand include path '%s'"
msgstr "пътят за вмъкване „%s“не може да бъде разширен"
-#: config.c:152
+#: config.c:153
msgid "relative config includes must come from files"
msgstr "относителните вмъквания на конфигурации трябва да идват от файлове"
-#: config.c:198
+#: config.c:199
msgid "relative config include conditionals must come from files"
msgstr "относителните условни изрази за вмъкване трябва да идват от файлове"
-#: config.c:378
+#: config.c:396
+#, c-format
+msgid "invalid config format: %s"
+msgstr "неправилен формат на настройка: %s"
+
+#: config.c:400
+#, c-format
+msgid "missing environment variable name for configuration '%.*s'"
+msgstr "липсва име на променлива на средата за настройката „%.*s“"
+
+#: config.c:405
+#, c-format
+msgid "missing environment variable '%s' for configuration '%.*s'"
+msgstr "липсва променлива на средата „%s“ за настройката „%.*s“"
+
+#: config.c:442
#, c-format
msgid "key does not contain a section: %s"
msgstr "ключът не съдържа раздел: „%s“"
-#: config.c:384
+#: config.c:448
#, c-format
msgid "key does not contain variable name: %s"
msgstr "ключът не съдържа име на променлива: „%s“"
-#: config.c:408 sequencer.c:2580
+#: config.c:472 sequencer.c:2588
#, c-format
msgid "invalid key: %s"
msgstr "неправилен ключ: „%s“"
-#: config.c:414
+#: config.c:478
#, c-format
msgid "invalid key (newline): %s"
msgstr "неправилен ключ (нов ред): „%s“"
-#: config.c:450 config.c:462
+#: config.c:511
+msgid "empty config key"
+msgstr "празен ключ за настройка"
+
+#: config.c:529 config.c:541
#, c-format
msgid "bogus config parameter: %s"
msgstr "неправилен конфигурационен параметър: „%s“"
-#: config.c:497
+#: config.c:555 config.c:572 config.c:579 config.c:588
#, c-format
msgid "bogus format in %s"
msgstr "неправилен формат в „%s“"
-#: config.c:836
+#: config.c:622
+#, c-format
+msgid "bogus count in %s"
+msgstr "неправилен брой в „%s“"
+
+#: config.c:626
+#, c-format
+msgid "too many entries in %s"
+msgstr "прекалено много записи в „%s“"
+
+#: config.c:636
+#, c-format
+msgid "missing config key %s"
+msgstr "ключът за настройка „%s“ липсва"
+
+#: config.c:644
+#, c-format
+msgid "missing config value %s"
+msgstr "стойността за настройка „%s“ липсва"
+
+#: config.c:995
#, c-format
msgid "bad config line %d in blob %s"
msgstr "неправилен ред за настройки %d в BLOB „%s“"
-#: config.c:840
+#: config.c:999
#, c-format
msgid "bad config line %d in file %s"
msgstr "неправилен ред за настройки %d във файла „%s“"
-#: config.c:844
+#: config.c:1003
#, c-format
msgid "bad config line %d in standard input"
msgstr "неправилен ред за настройки %d на стандартния вход"
-#: config.c:848
+#: config.c:1007
#, c-format
msgid "bad config line %d in submodule-blob %s"
msgstr "неправилен ред за настройки %d в BLOB за подмодул „%s“"
-#: config.c:852
+#: config.c:1011
#, c-format
msgid "bad config line %d in command line %s"
msgstr "неправилен ред за настройки %d на командния ред „%s“"
-#: config.c:856
+#: config.c:1015
#, c-format
msgid "bad config line %d in %s"
msgstr "неправилен ред за настройки %d в „%s“"
-#: config.c:993
+#: config.c:1152
msgid "out of range"
msgstr "извън диапазона"
-#: config.c:993
+#: config.c:1152
msgid "invalid unit"
msgstr "неправилна мерна единица"
-#: config.c:994
+#: config.c:1153
#, c-format
msgid "bad numeric config value '%s' for '%s': %s"
msgstr "неправилна числова стойност „%s“ за „%s“: %s"
-#: config.c:1013
+#: config.c:1163
#, c-format
msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
msgstr "неправилна числова стойност „%s“ за „%s“ в BLOB „%s“: %s"
-#: config.c:1016
+#: config.c:1166
#, c-format
msgid "bad numeric config value '%s' for '%s' in file %s: %s"
msgstr "неправилна числова стойност „%s“ за „%s“ във файла „%s“: %s"
-#: config.c:1019
+#: config.c:1169
#, c-format
msgid "bad numeric config value '%s' for '%s' in standard input: %s"
msgstr "неправилна числова стойност „%s“ за „%s“ на стандартния вход: %s"
-#: config.c:1022
+#: config.c:1172
#, c-format
msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
msgstr "неправилна числова стойност „%s“ за „%s“ в BLOB от подмодул „%s“: %s"
-#: config.c:1025
+#: config.c:1175
#, c-format
msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
msgstr "неправилна числова стойност „%s“ за „%s“ на командния ред „%s“: %s"
-#: config.c:1028
+#: config.c:1178
#, c-format
msgid "bad numeric config value '%s' for '%s' in %s: %s"
msgstr "неправилна числова стойност „%s“ за „%s“ в %s: %s"
-#: config.c:1123
+#: config.c:1194
+#, c-format
+msgid "bad boolean config value '%s' for '%s'"
+msgstr "неправилна булева стойност „%s“ за „%s“"
+
+#: config.c:1289
#, c-format
msgid "failed to expand user dir in: '%s'"
msgstr "домашната папка на потребителя не може да бъде открита: „%s“"
-#: config.c:1132
+#: config.c:1298
#, c-format
msgid "'%s' for '%s' is not a valid timestamp"
msgstr "„%s“ не е правилна стойност за време за „%s“"
-#: config.c:1223
+#: config.c:1391
#, c-format
msgid "abbrev length out of range: %d"
msgstr "дължината на съкращаване е извън интервала ([4; 40]): %d"
-#: config.c:1237 config.c:1248
+#: config.c:1405 config.c:1416
#, c-format
msgid "bad zlib compression level %d"
msgstr "неправилно ниво на компресиране: %d"
-#: config.c:1340
+#: config.c:1508
msgid "core.commentChar should only be one character"
msgstr "настройката „core.commentChar“ трябва да е само един знак"
-#: config.c:1373
+#: config.c:1541
#, c-format
msgid "invalid mode for object creation: %s"
msgstr "неправилен режим за създаването на обекти: %s"
-#: config.c:1445
+#: config.c:1613
#, c-format
msgid "malformed value for %s"
msgstr "неправилна стойност за „%s“"
-#: config.c:1471
+#: config.c:1639
#, c-format
msgid "malformed value for %s: %s"
msgstr "неправилна стойност за „%s“: „%s“"
-#: config.c:1472
+#: config.c:1640
msgid "must be one of nothing, matching, simple, upstream or current"
msgstr ""
"трябва да е една от следните стойности: „nothing“ (без изтласкване при липса "
@@ -2811,132 +2874,132 @@
"„simple“ (клонът със същото име, от който се издърпва), „upstream“ (клонът, "
"от който се издърпва) или „current“ (клонът със същото име)"
-#: config.c:1533 builtin/pack-objects.c:3649
+#: config.c:1701 builtin/pack-objects.c:3666
#, c-format
msgid "bad pack compression level %d"
msgstr "неправилно ниво на компресиране при пакетиране: %d"
-#: config.c:1655
+#: config.c:1823
#, c-format
msgid "unable to load config blob object '%s'"
msgstr "обектът-BLOB „%s“ с конфигурации не може да се зареди"
-#: config.c:1658
+#: config.c:1826
#, c-format
msgid "reference '%s' does not point to a blob"
msgstr "указателят „%s“ не сочи към обект-BLOB"
-#: config.c:1675
+#: config.c:1843
#, c-format
msgid "unable to resolve config blob '%s'"
msgstr "обектът-BLOB „%s“ с конфигурации не може да бъде открит"
-#: config.c:1705
+#: config.c:1873
#, c-format
msgid "failed to parse %s"
msgstr "„%s“ не може да бъде анализиран"
-#: config.c:1759
+#: config.c:1927
msgid "unable to parse command-line config"
msgstr "неправилни настройки от командния ред"
-#: config.c:2122
+#: config.c:2290
msgid "unknown error occurred while reading the configuration files"
msgstr "неочаквана грешка при изчитането на конфигурационните файлове"
-#: config.c:2296
+#: config.c:2464
#, c-format
msgid "Invalid %s: '%s'"
msgstr "Неправилен %s: „%s“"
-#: config.c:2341
+#: config.c:2509
#, c-format
msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
msgstr ""
"стойността на „splitIndex.maxPercentChange“ трябва да е между 1 и 100, а не "
"%d"
-#: config.c:2387
+#: config.c:2555
#, c-format
msgid "unable to parse '%s' from command-line config"
msgstr "неразпозната стойност „%s“ от командния ред"
-#: config.c:2389
+#: config.c:2557
#, c-format
msgid "bad config variable '%s' in file '%s' at line %d"
msgstr "неправилна настройка „%s“ във файла „%s“ на ред №%d"
-#: config.c:2473
+#: config.c:2641
#, c-format
msgid "invalid section name '%s'"
msgstr "неправилно име на раздел: „%s“"
-#: config.c:2505
+#: config.c:2673
#, c-format
msgid "%s has multiple values"
msgstr "зададени са няколко стойности за „%s“"
-#: config.c:2534
+#: config.c:2702
#, c-format
msgid "failed to write new configuration file %s"
msgstr "новият конфигурационен файл „%s“ не може да бъде запазен"
-#: config.c:2786 config.c:3112
+#: config.c:2954 config.c:3280
#, c-format
msgid "could not lock config file %s"
msgstr "конфигурационният файл „%s“ не може да бъде заключен"
-#: config.c:2797
+#: config.c:2965
#, c-format
msgid "opening %s"
msgstr "отваряне на „%s“"
-#: config.c:2834 builtin/config.c:361
+#: config.c:3002 builtin/config.c:361
#, c-format
msgid "invalid pattern: %s"
msgstr "неправилен шаблон: %s"
-#: config.c:2859
+#: config.c:3027
#, c-format
msgid "invalid config file %s"
msgstr "неправилен конфигурационен файл: „%s“"
-#: config.c:2872 config.c:3125
+#: config.c:3040 config.c:3293
#, c-format
msgid "fstat on %s failed"
msgstr "неуспешно изпълнение на „fstat“ върху „%s“"
-#: config.c:2883
+#: config.c:3051
#, c-format
msgid "unable to mmap '%s'"
msgstr "неуспешно изпълнение на „mmap“ върху „%s“"
-#: config.c:2892 config.c:3130
+#: config.c:3060 config.c:3298
#, c-format
msgid "chmod on %s failed"
msgstr "неуспешна смяна на права с „chmod“ върху „%s“"
-#: config.c:2977 config.c:3227
+#: config.c:3145 config.c:3395
#, c-format
msgid "could not write config file %s"
msgstr "конфигурационният файл „%s“ не може да бъде записан"
-#: config.c:3011
+#: config.c:3179
#, c-format
msgid "could not set '%s' to '%s'"
msgstr "„%s“ не може да се зададе да е „%s“"
-#: config.c:3013 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
+#: config.c:3181 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
#, c-format
msgid "could not unset '%s'"
msgstr "„%s“ не може да се премахне"
-#: config.c:3103
+#: config.c:3271
#, c-format
msgid "invalid section name: %s"
msgstr "неправилно име на раздел: %s"
-#: config.c:3270
+#: config.c:3438
#, c-format
msgid "missing value for '%s'"
msgstr "липсва стойност за „%s“"
@@ -2999,45 +3062,45 @@
msgid "protocol error: unexpected '%s'"
msgstr "протоколна грешка: неочаквано „%s“"
-#: connect.c:473
+#: connect.c:497
#, c-format
msgid "unknown object format '%s' specified by server"
msgstr "сървърът указа непознат формат на обект: „%s“"
-#: connect.c:500
+#: connect.c:526
#, c-format
msgid "invalid ls-refs response: %s"
msgstr "неправилен отговор на „ls-refs“: „%s“"
-#: connect.c:504
+#: connect.c:530
msgid "expected flush after ref listing"
msgstr "след изброяването на указателите се очаква изчистване на буферите"
-#: connect.c:507
+#: connect.c:533
msgid "expected response end packet after ref listing"
msgstr "след изброяването на указателите се очаква пакет за край"
-#: connect.c:640
+#: connect.c:666
#, c-format
msgid "protocol '%s' is not supported"
msgstr "протокол „%s“ не се поддържа"
-#: connect.c:691
+#: connect.c:717
msgid "unable to set SO_KEEPALIVE on socket"
msgstr "неуспешно задаване на „SO_KEEPALIVE“ на гнездо"
-#: connect.c:731 connect.c:794
+#: connect.c:757 connect.c:820
#, c-format
msgid "Looking up %s ... "
msgstr "Търсене на „%s“… "
-#: connect.c:735
+#: connect.c:761
#, c-format
msgid "unable to look up %s (port %s) (%s)"
msgstr "„%s“ (порт %s) не може да се открие („%s“)"
#. TRANSLATORS: this is the end of "Looking up %s ... "
-#: connect.c:739 connect.c:810
+#: connect.c:765 connect.c:836
#, c-format
msgid ""
"done.\n"
@@ -3046,7 +3109,7 @@
"готово.\n"
"Свързване към „%s“ (порт %s)…"
-#: connect.c:761 connect.c:838
+#: connect.c:787 connect.c:864
#, c-format
msgid ""
"unable to connect to %s:\n"
@@ -3056,65 +3119,71 @@
"%s"
#. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:767 connect.c:844
+#: connect.c:793 connect.c:870
msgid "done."
msgstr "действието завърши."
-#: connect.c:798
+#: connect.c:824
#, c-format
msgid "unable to look up %s (%s)"
msgstr "„%s“ не може да се открие (%s)"
-#: connect.c:804
+#: connect.c:830
#, c-format
msgid "unknown port %s"
msgstr "непознат порт „%s“"
-#: connect.c:941 connect.c:1271
+#: connect.c:967 connect.c:1299
#, c-format
msgid "strange hostname '%s' blocked"
msgstr "необичайното име на хост „%s“ е блокирано"
-#: connect.c:943
+#: connect.c:969
#, c-format
msgid "strange port '%s' blocked"
msgstr "необичайният порт „%s“ е блокиран"
-#: connect.c:953
+#: connect.c:979
#, c-format
msgid "cannot start proxy %s"
msgstr "посредникът „%s“ не може да се стартира"
-#: connect.c:1024
+#: connect.c:1050
msgid "no path specified; see 'git help pull' for valid url syntax"
msgstr ""
"не е указан път. Проверете синтаксиса с командата:\n"
"\n"
" git help pull"
-#: connect.c:1219
+#: connect.c:1190
+msgid "newline is forbidden in git:// hosts and repo paths"
+msgstr ""
+"знакът за нов ред не е позволен в адресите и в пътищата до хранилищата "
+"„git://“"
+
+#: connect.c:1247
msgid "ssh variant 'simple' does not support -4"
msgstr "вариантът за „ssh“ — „simple“ (опростен), не поддържа опцията „-4“"
-#: connect.c:1231
+#: connect.c:1259
msgid "ssh variant 'simple' does not support -6"
msgstr "вариантът за „ssh“ — „simple“ (опростен), не поддържа опцията „-6“"
-#: connect.c:1248
+#: connect.c:1276
msgid "ssh variant 'simple' does not support setting port"
msgstr ""
"вариантът за „ssh“ — „simple“ (опростен), не поддържа задаването на порт"
-#: connect.c:1360
+#: connect.c:1388
#, c-format
msgid "strange pathname '%s' blocked"
msgstr "необичайният път „%s“ е блокиран"
-#: connect.c:1408
+#: connect.c:1436
msgid "unable to fork"
msgstr "неуспешно създаване на процес"
-#: connected.c:108 builtin/fsck.c:209 builtin/prune.c:45
+#: connected.c:108 builtin/fsck.c:191 builtin/prune.c:45
msgid "Checking connectivity"
msgstr "Проверка на свързаността"
@@ -3389,6 +3458,11 @@
msgid "Marked %d islands, done.\n"
msgstr "Отбелязани са %d групи, работата приключи.\n"
+#: diff-merges.c:70
+#, c-format
+msgid "unknown value for --diff-merges: %s"
+msgstr "непозната стойност за опцията „--diff-merges“: „%s“"
+
#: diff-lib.c:534
msgid "--merge-base does not work with ranges"
msgstr "опцията „--merge-base“ не работи с диапазони"
@@ -3483,32 +3557,32 @@
msgstr ""
"външната програма за разлики завърши неуспешно. Спиране на работата при „%s“"
-#: diff.c:4625
+#: diff.c:4628
msgid "--name-only, --name-status, --check and -s are mutually exclusive"
msgstr ""
"Опциите „--name-only“, „--name-status“, „--check“ и „-s“ са несъвместими "
"една с друга"
-#: diff.c:4628
+#: diff.c:4631
msgid "-G, -S and --find-object are mutually exclusive"
msgstr "Опциите „-G“, „-S“ и „--find-object“ са несъвместими една с друга"
-#: diff.c:4707
+#: diff.c:4710
msgid "--follow requires exactly one pathspec"
msgstr "Опцията „--follow“ изисква точно един път"
-#: diff.c:4755
+#: diff.c:4758
#, c-format
msgid "invalid --stat value: %s"
msgstr "неправилна стойност за „--stat“: %s"
-#: diff.c:4760 diff.c:4765 diff.c:4770 diff.c:4775 diff.c:5303
+#: diff.c:4763 diff.c:4768 diff.c:4773 diff.c:4778 diff.c:5306
#: parse-options.c:197 parse-options.c:201 builtin/commit-graph.c:180
#, c-format
msgid "%s expects a numerical value"
msgstr "опцията „%s“ очаква число за аргумент"
-#: diff.c:4792
+#: diff.c:4795
#, c-format
msgid ""
"Failed to parse --dirstat/-X option parameter:\n"
@@ -3517,44 +3591,44 @@
"Неразпознат параметър към опцията „--dirstat/-X“:\n"
"%s"
-#: diff.c:4877
+#: diff.c:4880
#, c-format
msgid "unknown change class '%c' in --diff-filter=%s"
msgstr "непознат вид промяна: „%c“ в „--diff-filter=%s“"
-#: diff.c:4901
+#: diff.c:4904
#, c-format
msgid "unknown value after ws-error-highlight=%.*s"
msgstr "непозната стойност след „ws-error-highlight=%.*s“"
-#: diff.c:4915
+#: diff.c:4918
#, c-format
msgid "unable to resolve '%s'"
msgstr "„%s“ не може да се открие"
-#: diff.c:4965 diff.c:4971
+#: diff.c:4968 diff.c:4974
#, c-format
msgid "%s expects <n>/<m> form"
msgstr ""
"опцията „%s“ изисква стойности за МИНИМАЛЕН_%%_ПРОМЯНА_ЗА_ИЗТОЧНИК_/"
"МАКСИМАЛЕН_%%_ПРОМЯНА_ЗА_ЗАМЯНА от"
-#: diff.c:4983
+#: diff.c:4986
#, c-format
msgid "%s expects a character, got '%s'"
msgstr "опцията „%s“ изисква знак, а не: „%s“"
-#: diff.c:5004
+#: diff.c:5007
#, c-format
msgid "bad --color-moved argument: %s"
msgstr "неправилен аргумент за „--color-moved“: „%s“"
-#: diff.c:5023
+#: diff.c:5026
#, c-format
msgid "invalid mode '%s' in --color-moved-ws"
msgstr "неправилен режим „%s“ за „ --color-moved-ws“"
-#: diff.c:5063
+#: diff.c:5066
msgid ""
"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
"\"histogram\""
@@ -3563,158 +3637,158 @@
"Майерс), „minimal“ (минимизиране на разликите), „patience“ (пасианс) и "
"„histogram“ (хистограмен)"
-#: diff.c:5099 diff.c:5119
+#: diff.c:5102 diff.c:5122
#, c-format
msgid "invalid argument to %s"
msgstr "неправилен аргумент към „%s“"
-#: diff.c:5223
+#: diff.c:5226
#, c-format
msgid "invalid regex given to -I: '%s'"
msgstr "неправилен регулярен израз подаден към „-I“: „%s“"
-#: diff.c:5272
+#: diff.c:5275
#, c-format
msgid "failed to parse --submodule option parameter: '%s'"
msgstr "неразпознат параметър към опцията „--submodule“: „%s“"
-#: diff.c:5328
+#: diff.c:5331
#, c-format
msgid "bad --word-diff argument: %s"
msgstr "неправилен аргумент към „--word-diff“: „%s“"
-#: diff.c:5351
+#: diff.c:5367
msgid "Diff output format options"
msgstr "Формат на изхода за разликите"
-#: diff.c:5353 diff.c:5359
+#: diff.c:5369 diff.c:5375
msgid "generate patch"
msgstr "създаване на кръпки"
-#: diff.c:5356 builtin/log.c:178
+#: diff.c:5372 builtin/log.c:179
msgid "suppress diff output"
msgstr "без извеждане на разликите"
-#: diff.c:5361 diff.c:5475 diff.c:5482
+#: diff.c:5377 diff.c:5491 diff.c:5498
msgid "<n>"
msgstr "БРОЙ"
-#: diff.c:5362 diff.c:5365
+#: diff.c:5378 diff.c:5381
msgid "generate diffs with <n> lines context"
msgstr "файловете с разлики да са с контекст с такъв БРОЙ редове"
-#: diff.c:5367
+#: diff.c:5383
msgid "generate the diff in raw format"
msgstr "файловете с разлики да са в суров формат"
-#: diff.c:5370
+#: diff.c:5386
msgid "synonym for '-p --raw'"
msgstr "псевдоним на „-p --stat“"
-#: diff.c:5374
+#: diff.c:5390
msgid "synonym for '-p --stat'"
msgstr "псевдоним на „-p --stat“"
-#: diff.c:5378
+#: diff.c:5394
msgid "machine friendly --stat"
msgstr "„--stat“ във формат за четене от програма"
-#: diff.c:5381
+#: diff.c:5397
msgid "output only the last line of --stat"
msgstr "извеждане само на последния ред на „--stat“"
-#: diff.c:5383 diff.c:5391
+#: diff.c:5399 diff.c:5407
msgid "<param1,param2>..."
msgstr "ПАРАМЕТЪР_1, ПАРАМЕТЪР_2, …"
-#: diff.c:5384
+#: diff.c:5400
msgid ""
"output the distribution of relative amount of changes for each sub-directory"
msgstr "извеждане на разпределението на промените за всяка поддиректория"
-#: diff.c:5388
+#: diff.c:5404
msgid "synonym for --dirstat=cumulative"
msgstr "псевдоним на „--dirstat=cumulative“"
-#: diff.c:5392
+#: diff.c:5408
msgid "synonym for --dirstat=files,param1,param2..."
msgstr "псевдоним на „--dirstat=ФАЙЛОВЕ,ПАРАМЕТЪР_1,ПАРАМЕТЪР_2,…“"
-#: diff.c:5396
+#: diff.c:5412
msgid "warn if changes introduce conflict markers or whitespace errors"
msgstr ""
"предупреждаване, ако промените водят до маркери за конфликт или грешки в "
"празните знаци"
-#: diff.c:5399
+#: diff.c:5415
msgid "condensed summary such as creations, renames and mode changes"
msgstr ""
"съкратено резюме на създадените, преименуваните и файловете с промяна на "
"режима на достъп"
-#: diff.c:5402
+#: diff.c:5418
msgid "show only names of changed files"
msgstr "извеждане само на имената на променените файлове"
-#: diff.c:5405
+#: diff.c:5421
msgid "show only names and status of changed files"
msgstr "извеждане само на имената и статистиката за променените файлове"
-#: diff.c:5407
+#: diff.c:5423
msgid "<width>[,<name-width>[,<count>]]"
msgstr "ШИРОЧИНА[,ИМЕ-ШИРОЧИНА[,БРОЙ]]"
-#: diff.c:5408
+#: diff.c:5424
msgid "generate diffstat"
msgstr "извеждане на статистика за промените"
-#: diff.c:5410 diff.c:5413 diff.c:5416
+#: diff.c:5426 diff.c:5429 diff.c:5432
msgid "<width>"
msgstr "ШИРОЧИНА"
-#: diff.c:5411
+#: diff.c:5427
msgid "generate diffstat with a given width"
msgstr "статистика с такава ШИРОЧИНА за промените"
-#: diff.c:5414
+#: diff.c:5430
msgid "generate diffstat with a given name width"
msgstr "статистика за промените с такава ШИРОЧИНА на имената"
-#: diff.c:5417
+#: diff.c:5433
msgid "generate diffstat with a given graph width"
msgstr "статистика за промените с такава ШИРОЧИНА на гра̀фа"
-#: diff.c:5419
+#: diff.c:5435
msgid "<count>"
msgstr "БРОЙ"
-#: diff.c:5420
+#: diff.c:5436
msgid "generate diffstat with limited lines"
msgstr "ограничаване на БРОя на редовете в статистиката за промените"
-#: diff.c:5423
+#: diff.c:5439
msgid "generate compact summary in diffstat"
msgstr "кратко резюме в статистиката за промените"
-#: diff.c:5426
+#: diff.c:5442
msgid "output a binary diff that can be applied"
msgstr "извеждане на двоична разлика във вид за прилагане"
-#: diff.c:5429
+#: diff.c:5445
msgid "show full pre- and post-image object names on the \"index\" lines"
msgstr ""
"показване на пълните имена на обекти в редовете за индекса при вариантите "
"преди и след промяната"
-#: diff.c:5431
+#: diff.c:5447
msgid "show colored diff"
msgstr "разлики в цвят"
-#: diff.c:5432
+#: diff.c:5448
msgid "<kind>"
msgstr "ВИД"
-#: diff.c:5433
+#: diff.c:5449
msgid ""
"highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
"diff"
@@ -3722,7 +3796,7 @@
"грешките в празните знаци да се указват в редовете за контекста, вариантите "
"преди и след разликата,"
-#: diff.c:5436
+#: diff.c:5452
msgid ""
"do not munge pathnames and use NULs as output field terminators in --raw or "
"--numstat"
@@ -3730,261 +3804,261 @@
"без преименуване на пътищата. Да се използват нулеви байтове за разделители "
"на полета в изхода при ползване на опцията „--raw“ или „--numstat“"
-#: diff.c:5439 diff.c:5442 diff.c:5445 diff.c:5554
+#: diff.c:5455 diff.c:5458 diff.c:5461 diff.c:5570
msgid "<prefix>"
msgstr "ПРЕФИКС"
-#: diff.c:5440
+#: diff.c:5456
msgid "show the given source prefix instead of \"a/\""
msgstr "префикс вместо „a/“ за източник"
-#: diff.c:5443
+#: diff.c:5459
msgid "show the given destination prefix instead of \"b/\""
msgstr "префикс вместо „b/“ за цел"
-#: diff.c:5446
+#: diff.c:5462
msgid "prepend an additional prefix to every line of output"
msgstr "добавяне на допълнителен префикс за всеки ред на изхода"
-#: diff.c:5449
+#: diff.c:5465
msgid "do not show any source or destination prefix"
msgstr "без префикс за източника и целта"
-#: diff.c:5452
+#: diff.c:5468
msgid "show context between diff hunks up to the specified number of lines"
msgstr ""
"извеждане на контекст между последователните парчета с разлики от указания "
"БРОЙ редове"
-#: diff.c:5456 diff.c:5461 diff.c:5466
+#: diff.c:5472 diff.c:5477 diff.c:5482
msgid "<char>"
msgstr "ЗНАК"
-#: diff.c:5457
+#: diff.c:5473
msgid "specify the character to indicate a new line instead of '+'"
msgstr "знак вместо „+“ за нов вариант на ред"
-#: diff.c:5462
+#: diff.c:5478
msgid "specify the character to indicate an old line instead of '-'"
msgstr "знак вместо „-“ за стар вариант на ред"
-#: diff.c:5467
+#: diff.c:5483
msgid "specify the character to indicate a context instead of ' '"
msgstr "знак вместо „ “ за контекст"
-#: diff.c:5470
+#: diff.c:5486
msgid "Diff rename options"
msgstr "Настройки за разлики с преименуване"
-#: diff.c:5471
+#: diff.c:5487
msgid "<n>[/<m>]"
msgstr "МИНИМАЛЕН_%_ПРОМЯНА_ЗА_ИЗТОЧНИК[/МАКСИМАЛEН_%_ПРОМЯНА_ЗА_ЗАМЯНА]"
-#: diff.c:5472
+#: diff.c:5488
msgid "break complete rewrite changes into pairs of delete and create"
msgstr ""
"заместване на пълните промени с последователност от изтриване и създаване"
-#: diff.c:5476
+#: diff.c:5492
msgid "detect renames"
msgstr "засичане на преименуванията"
-#: diff.c:5480
+#: diff.c:5496
msgid "omit the preimage for deletes"
msgstr "без предварителен вариант при изтриване"
-#: diff.c:5483
+#: diff.c:5499
msgid "detect copies"
msgstr "засичане на копиранията"
-#: diff.c:5487
+#: diff.c:5503
msgid "use unmodified files as source to find copies"
msgstr "търсене на копирано и от непроменените файлове"
-#: diff.c:5489
+#: diff.c:5505
msgid "disable rename detection"
msgstr "без търсене на преименувания"
-#: diff.c:5492
+#: diff.c:5508
msgid "use empty blobs as rename source"
msgstr "празни обекти като източник при преименувания"
-#: diff.c:5494
+#: diff.c:5510
msgid "continue listing the history of a file beyond renames"
msgstr ""
"продължаване на извеждането на историята — без отрязването при преименувания "
"на файл"
-#: diff.c:5497
+#: diff.c:5513
msgid ""
"prevent rename/copy detection if the number of rename/copy targets exceeds "
"given limit"
msgstr ""
"без засичане на преименувания/копирания, ако броят им надвишава тази стойност"
-#: diff.c:5499
+#: diff.c:5515
msgid "Diff algorithm options"
msgstr "Опции към алгоритъма за разлики"
-#: diff.c:5501
+#: diff.c:5517
msgid "produce the smallest possible diff"
msgstr "търсене на възможно най-малка разлика"
-#: diff.c:5504
+#: diff.c:5520
msgid "ignore whitespace when comparing lines"
msgstr "без промени в празните знаци при сравняване на редове"
-#: diff.c:5507
+#: diff.c:5523
msgid "ignore changes in amount of whitespace"
msgstr "без промени в празните знаци"
-#: diff.c:5510
+#: diff.c:5526
msgid "ignore changes in whitespace at EOL"
msgstr "без промени в празните знаци в края на редовете"
-#: diff.c:5513
+#: diff.c:5529
msgid "ignore carrier-return at the end of line"
msgstr "без промени в знаците за край на ред"
-#: diff.c:5516
+#: diff.c:5532
msgid "ignore changes whose lines are all blank"
msgstr "без промени в редовете, които са изцяло от празни знаци"
-#: diff.c:5518 diff.c:5540 diff.c:5543 diff.c:5588
+#: diff.c:5534 diff.c:5556 diff.c:5559 diff.c:5604
msgid "<regex>"
msgstr "РЕГУЛЯРЕН_ИЗРАЗ"
-#: diff.c:5519
+#: diff.c:5535
msgid "ignore changes whose all lines match <regex>"
msgstr "без промени в редовете, които напасват РЕГУЛЯРНия_ИЗРАЗ"
-#: diff.c:5522
+#: diff.c:5538
msgid "heuristic to shift diff hunk boundaries for easy reading"
msgstr ""
"евристика за преместване на границите на парчетата за улесняване на четенето"
-#: diff.c:5525
+#: diff.c:5541
msgid "generate diff using the \"patience diff\" algorithm"
msgstr "разлика чрез алгоритъм за подредба като пасианс"
-#: diff.c:5529
+#: diff.c:5545
msgid "generate diff using the \"histogram diff\" algorithm"
msgstr "разлика по хистограмния алгоритъм"
-#: diff.c:5531
+#: diff.c:5547
msgid "<algorithm>"
msgstr "АЛГОРИТЪМ"
-#: diff.c:5532
+#: diff.c:5548
msgid "choose a diff algorithm"
msgstr "избор на АЛГОРИТЪМа за разлики"
-#: diff.c:5534
+#: diff.c:5550
msgid "<text>"
msgstr "ТЕКСТ"
-#: diff.c:5535
+#: diff.c:5551
msgid "generate diff using the \"anchored diff\" algorithm"
msgstr "разлика чрез алгоритъма със закотвяне"
-#: diff.c:5537 diff.c:5546 diff.c:5549
+#: diff.c:5553 diff.c:5562 diff.c:5565
msgid "<mode>"
msgstr "РЕЖИМ"
-#: diff.c:5538
+#: diff.c:5554
msgid "show word diff, using <mode> to delimit changed words"
msgstr ""
"разлика по думи, като се ползва този РЕЖИМ за отделянето на променените думи"
-#: diff.c:5541
+#: diff.c:5557
msgid "use <regex> to decide what a word is"
msgstr "РЕГУЛЯРЕН_ИЗРАЗ за разделяне по думи"
-#: diff.c:5544
+#: diff.c:5560
msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
msgstr "псевдоним на „--word-diff=color --word-diff-regex=РЕГУЛЯРЕН_ИЗРАЗ“"
-#: diff.c:5547
+#: diff.c:5563
msgid "moved lines of code are colored differently"
msgstr "различен цвят за извеждане на преместените редове"
-#: diff.c:5550
+#: diff.c:5566
msgid "how white spaces are ignored in --color-moved"
msgstr ""
"режим за прескачането на празните знаци при задаването на „--color-moved“"
-#: diff.c:5553
+#: diff.c:5569
msgid "Other diff options"
msgstr "Други опции за разлики"
-#: diff.c:5555
+#: diff.c:5571
msgid "when run from subdir, exclude changes outside and show relative paths"
msgstr ""
"при изпълнение от поддиректория да се пренебрегват разликите извън нея и да "
"се ползват относителни пътища"
-#: diff.c:5559
+#: diff.c:5575
msgid "treat all files as text"
msgstr "обработка на всички файлове като текстови"
-#: diff.c:5561
+#: diff.c:5577
msgid "swap two inputs, reverse the diff"
msgstr "размяна на двата входа — обръщане на разликата"
-#: diff.c:5563
+#: diff.c:5579
msgid "exit with 1 if there were differences, 0 otherwise"
msgstr ""
"завършване с код за състояние 1 при наличието на разлики, а в противен "
"случай — с 0"
-#: diff.c:5565
+#: diff.c:5581
msgid "disable all output of the program"
msgstr "без всякакъв изход от програмата"
-#: diff.c:5567
+#: diff.c:5583
msgid "allow an external diff helper to be executed"
msgstr "позволяване на изпълнение на външна помощна програма за разлики"
-#: diff.c:5569
+#: diff.c:5585
msgid "run external text conversion filters when comparing binary files"
msgstr ""
"изпълнение на външни програми-филтри при сравнението на двоични файлове"
-#: diff.c:5571
+#: diff.c:5587
msgid "<when>"
msgstr "КОГА"
-#: diff.c:5572
+#: diff.c:5588
msgid "ignore changes to submodules in the diff generation"
msgstr "игнориране на промените в подмодулите при извеждането на разликите"
-#: diff.c:5575
+#: diff.c:5591
msgid "<format>"
msgstr "ФОРМАТ"
-#: diff.c:5576
+#: diff.c:5592
msgid "specify how differences in submodules are shown"
msgstr "начин за извеждане на промените в подмодулите"
-#: diff.c:5580
+#: diff.c:5596
msgid "hide 'git add -N' entries from the index"
msgstr "без включване в индекса на записите, добавени с „git add -N“"
-#: diff.c:5583
+#: diff.c:5599
msgid "treat 'git add -N' entries as real in the index"
msgstr "включване в индекса на записите, добавени с „git add -N“"
-#: diff.c:5585
+#: diff.c:5601
msgid "<string>"
msgstr "НИЗ"
-#: diff.c:5586
+#: diff.c:5602
msgid ""
"look for differences that change the number of occurrences of the specified "
"string"
msgstr "търсене на разлики, които променят броя на поява на указаните низове"
-#: diff.c:5589
+#: diff.c:5605
msgid ""
"look for differences that change the number of occurrences of the specified "
"regex"
@@ -3992,57 +4066,69 @@
"търсене на разлики, които променят броя на поява на низовете, които напасват "
"на регулярния израз"
-#: diff.c:5592
+#: diff.c:5608
msgid "show all changes in the changeset with -S or -G"
msgstr "извеждане на всички промени с „-G“/„-S“"
-#: diff.c:5595
+#: diff.c:5611
msgid "treat <string> in -S as extended POSIX regular expression"
msgstr "НИЗът към „-S“ да се тълкува като разширен регулярен израз по POSIX"
-#: diff.c:5598
+#: diff.c:5614
msgid "control the order in which files appear in the output"
msgstr "управление на подредбата на файловете в изхода"
-#: diff.c:5599
+#: diff.c:5615 diff.c:5618
+msgid "<path>"
+msgstr "ПЪТ"
+
+#: diff.c:5616
+msgid "show the change in the specified path first"
+msgstr "първо извеждане на промяната в указания път"
+
+#: diff.c:5619
+msgid "skip the output to the specified path"
+msgstr "прескачане на изхода към указания път"
+
+#: diff.c:5621
msgid "<object-id>"
msgstr "ИДЕНТИФИКАТОР_НА_ОБЕКТ"
-#: diff.c:5600
+#: diff.c:5622
msgid ""
"look for differences that change the number of occurrences of the specified "
"object"
msgstr "търсене на разлики, които променят броя на поява на указания обект"
-#: diff.c:5602
+#: diff.c:5624
msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
msgstr "[(A|C|D|M|R|T|U|X|B)…[*]]"
-#: diff.c:5603
+#: diff.c:5625
msgid "select files by diff type"
msgstr "избор на файловете по вид разлика"
-#: diff.c:5605
+#: diff.c:5627
msgid "<file>"
msgstr "ФАЙЛ"
-#: diff.c:5606
+#: diff.c:5628
msgid "Output to a specific file"
msgstr "Изход към указания файл"
-#: diff.c:6263
+#: diff.c:6285
msgid "inexact rename detection was skipped due to too many files."
msgstr ""
"търсенето на преименувания на обекти съчетани с промени се прескача поради "
"многото файлове."
-#: diff.c:6266
+#: diff.c:6288
msgid "only found copies from modified paths due to too many files."
msgstr ""
"установени са само точните копия на променените пътища поради многото "
"файлове."
-#: diff.c:6269
+#: diff.c:6291
#, c-format
msgid ""
"you may want to set your %s variable to at least %d and retry the command."
@@ -4053,10 +4139,15 @@
msgid "failed to read orderfile '%s'"
msgstr "файлът с подредбата на съответствията „%s“ не може да бъде прочетен"
-#: diffcore-rename.c:592
+#: diffcore-rename.c:786
msgid "Performing inexact rename detection"
msgstr "Търсене на преименувания на обекти съчетани с промени"
+#: diffcore-rotate.c:29
+#, c-format
+msgid "No such path '%s' in the diff"
+msgstr "Няма път на име „%s“ в разликата"
+
#: dir.c:578
#, c-format
msgid "pathspec '%s' did not match any file(s) known to git"
@@ -4102,17 +4193,17 @@
msgstr ""
"кешът за неследените файлове е изключен на тази система или местоположение"
-#: dir.c:3520
+#: dir.c:3534
#, c-format
msgid "index file corrupt in repo %s"
msgstr "файлът с индекса е повреден в хранилището „%s“"
-#: dir.c:3565 dir.c:3570
+#: dir.c:3579 dir.c:3584
#, c-format
msgid "could not create directories for %s"
msgstr "директориите за „%s“ не може да бъдат създадени"
-#: dir.c:3599
+#: dir.c:3613
#, c-format
msgid "could not migrate git directory from '%s' to '%s'"
msgstr "директорията на git не може да се мигрира от „%s“ до „%s“"
@@ -4131,12 +4222,12 @@
msgid "could not stat file '%s'"
msgstr "неуспешно изпълнение на „stat“ върху файла „%s“"
-#: environment.c:150
+#: environment.c:152
#, c-format
msgid "bad git namespace path \"%s\""
msgstr "неправилен път към пространства от имена „%s“"
-#: environment.c:337
+#: environment.c:335
#, c-format
msgid "could not set GIT_DIR to '%s'"
msgstr "GIT_DIR не може да се зададе да е „%s“"
@@ -4172,32 +4263,32 @@
msgid "--stateless-rpc requires multi_ack_detailed"
msgstr "опцията „--stateless-rpc“ изисква „multi_ack_detailed“"
-#: fetch-pack.c:378 fetch-pack.c:1406
+#: fetch-pack.c:378 fetch-pack.c:1457
#, c-format
msgid "invalid shallow line: %s"
msgstr "неправилен плитък ред: „%s“"
-#: fetch-pack.c:384 fetch-pack.c:1412
+#: fetch-pack.c:384 fetch-pack.c:1463
#, c-format
msgid "invalid unshallow line: %s"
msgstr "неправилен неплитък ред: „%s“"
-#: fetch-pack.c:386 fetch-pack.c:1414
+#: fetch-pack.c:386 fetch-pack.c:1465
#, c-format
msgid "object not found: %s"
msgstr "обектът „%s“ липсва"
-#: fetch-pack.c:389 fetch-pack.c:1417
+#: fetch-pack.c:389 fetch-pack.c:1468
#, c-format
msgid "error in object: %s"
msgstr "грешка в обекта: „%s“"
-#: fetch-pack.c:391 fetch-pack.c:1419
+#: fetch-pack.c:391 fetch-pack.c:1470
#, c-format
msgid "no shallow found: %s"
msgstr "не е открит плитък обект: %s"
-#: fetch-pack.c:394 fetch-pack.c:1423
+#: fetch-pack.c:394 fetch-pack.c:1474
#, c-format
msgid "expected shallow/unshallow, got %s"
msgstr "очаква се плитък или не обект, а бе получено: „%s“"
@@ -4235,174 +4326,178 @@
msgid "already have %s (%s)"
msgstr "вече има „%s“ (%s)"
-#: fetch-pack.c:827
+#: fetch-pack.c:844
msgid "fetch-pack: unable to fork off sideband demultiplexer"
msgstr "fetch-pack: не може да се създаде процес за демултиплексора"
-#: fetch-pack.c:835
+#: fetch-pack.c:852
msgid "protocol error: bad pack header"
msgstr "протоколна грешка: неправилна заглавна част на пакет"
-#: fetch-pack.c:919
+#: fetch-pack.c:946
#, c-format
msgid "fetch-pack: unable to fork off %s"
msgstr "fetch-pack: не може да се създаде процес за „%s“"
-#: fetch-pack.c:937
+#: fetch-pack.c:952
+msgid "fetch-pack: invalid index-pack output"
+msgstr "fetch-pack: неправилен изход от командата „index-pack“"
+
+#: fetch-pack.c:969
#, c-format
msgid "%s failed"
msgstr "неуспешно изпълнение на „%s“"
-#: fetch-pack.c:939
+#: fetch-pack.c:971
msgid "error in sideband demultiplexer"
msgstr "грешка в демултиплексора"
-#: fetch-pack.c:982
+#: fetch-pack.c:1031
#, c-format
msgid "Server version is %.*s"
msgstr "Версията на сървъра е: %.*s"
-#: fetch-pack.c:990 fetch-pack.c:996 fetch-pack.c:999 fetch-pack.c:1005
-#: fetch-pack.c:1009 fetch-pack.c:1013 fetch-pack.c:1017 fetch-pack.c:1021
-#: fetch-pack.c:1025 fetch-pack.c:1029 fetch-pack.c:1033 fetch-pack.c:1037
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1054 fetch-pack.c:1059
+#: fetch-pack.c:1039 fetch-pack.c:1045 fetch-pack.c:1048 fetch-pack.c:1054
+#: fetch-pack.c:1058 fetch-pack.c:1062 fetch-pack.c:1066 fetch-pack.c:1070
+#: fetch-pack.c:1074 fetch-pack.c:1078 fetch-pack.c:1082 fetch-pack.c:1086
+#: fetch-pack.c:1092 fetch-pack.c:1098 fetch-pack.c:1103 fetch-pack.c:1108
#, c-format
msgid "Server supports %s"
msgstr "Сървърът поддържа „%s“"
-#: fetch-pack.c:992
+#: fetch-pack.c:1041
msgid "Server does not support shallow clients"
msgstr "Сървърът не поддържа плитки клиенти"
-#: fetch-pack.c:1052
+#: fetch-pack.c:1101
msgid "Server does not support --shallow-since"
msgstr "Сървърът не поддържа опцията „--shallow-since“"
-#: fetch-pack.c:1057
+#: fetch-pack.c:1106
msgid "Server does not support --shallow-exclude"
msgstr "Сървърът не поддържа опцията „--shallow-exclude“"
-#: fetch-pack.c:1061
+#: fetch-pack.c:1110
msgid "Server does not support --deepen"
msgstr "Сървърът не поддържа опцията „--deepen“"
-#: fetch-pack.c:1063
+#: fetch-pack.c:1112
msgid "Server does not support this repository's object format"
msgstr "Сървърът не поддържа форма̀та на обектите на това хранилище"
-#: fetch-pack.c:1076
+#: fetch-pack.c:1125
msgid "no common commits"
msgstr "няма общи подавания"
-#: fetch-pack.c:1088 fetch-pack.c:1628
+#: fetch-pack.c:1138 fetch-pack.c:1682
msgid "git fetch-pack: fetch failed."
msgstr "git fetch-pack: неуспешно доставяне."
-#: fetch-pack.c:1214
+#: fetch-pack.c:1265
#, c-format
msgid "mismatched algorithms: client %s; server %s"
msgstr "различни алгоритми — на клиента: „%s“, на сървъра: „%s“"
-#: fetch-pack.c:1218
+#: fetch-pack.c:1269
#, c-format
msgid "the server does not support algorithm '%s'"
msgstr "сървърът не поддържа алгоритъм „%s“"
-#: fetch-pack.c:1238
+#: fetch-pack.c:1289
msgid "Server does not support shallow requests"
msgstr "Сървърът не поддържа плитки заявки"
-#: fetch-pack.c:1245
+#: fetch-pack.c:1296
msgid "Server supports filter"
msgstr "Сървърът поддържа филтри"
-#: fetch-pack.c:1284
+#: fetch-pack.c:1335
msgid "unable to write request to remote"
msgstr "невъзможно писане към отдалечено хранилище"
-#: fetch-pack.c:1302
+#: fetch-pack.c:1353
#, c-format
msgid "error reading section header '%s'"
msgstr "грешка при прочитане на заглавната част на раздел „%s“"
-#: fetch-pack.c:1308
+#: fetch-pack.c:1359
#, c-format
msgid "expected '%s', received '%s'"
msgstr "очаква се „%s“, а бе получено „%s“"
-#: fetch-pack.c:1369
+#: fetch-pack.c:1420
#, c-format
msgid "unexpected acknowledgment line: '%s'"
msgstr "неочакван ред за потвърждение: „%s“"
-#: fetch-pack.c:1374
+#: fetch-pack.c:1425
#, c-format
msgid "error processing acks: %d"
msgstr "грешка при обработка на потвържденията: %d"
-#: fetch-pack.c:1384
+#: fetch-pack.c:1435
msgid "expected packfile to be sent after 'ready'"
msgstr ""
"очакваше се пакетният файл да бъде изпратен след отговор за готовност (ready)"
-#: fetch-pack.c:1386
+#: fetch-pack.c:1437
msgid "expected no other sections to be sent after no 'ready'"
msgstr ""
"очакваше се след липса на отговор за готовност (ready) да не се се пращат "
"други раздели"
-#: fetch-pack.c:1428
+#: fetch-pack.c:1479
#, c-format
msgid "error processing shallow info: %d"
msgstr "грешка при обработка на информация за дълбочината/плиткостта: %d"
-#: fetch-pack.c:1475
+#: fetch-pack.c:1526
#, c-format
msgid "expected wanted-ref, got '%s'"
msgstr "очаква се искан указател, а бе получено: „%s“"
-#: fetch-pack.c:1480
+#: fetch-pack.c:1531
#, c-format
msgid "unexpected wanted-ref: '%s'"
msgstr "неочакван искан указател: „%s“"
-#: fetch-pack.c:1485
+#: fetch-pack.c:1536
#, c-format
msgid "error processing wanted refs: %d"
msgstr "грешка при обработката на исканите указатели: %d"
-#: fetch-pack.c:1515
+#: fetch-pack.c:1566
msgid "git fetch-pack: expected response end packet"
msgstr "git fetch-pack: очаква се пакет за край на отговора"
-#: fetch-pack.c:1897
+#: fetch-pack.c:1960
msgid "no matching remote head"
msgstr "не може да бъде открит подходящ връх от отдалеченото хранилище"
-#: fetch-pack.c:1920 builtin/clone.c:693
+#: fetch-pack.c:1983 builtin/clone.c:693
msgid "remote did not send all necessary objects"
msgstr "отдалеченото хранилище не изпрати всички необходими обекти."
-#: fetch-pack.c:1947
+#: fetch-pack.c:2010
#, c-format
msgid "no such remote ref %s"
msgstr "такъв отдалечен указател няма: %s"
-#: fetch-pack.c:1950
+#: fetch-pack.c:2013
#, c-format
msgid "Server does not allow request for unadvertised object %s"
msgstr "Сървърът не позволява заявка за необявен обект „%s“"
-#: gpg-interface.c:272
+#: gpg-interface.c:273
msgid "could not create temporary file"
msgstr "не може да се създаде временен файл"
-#: gpg-interface.c:275
+#: gpg-interface.c:276
#, c-format
msgid "failed writing detached signature to '%s'"
msgstr "Програмата не успя да запише самостоятелния подпис в „%s“"
-#: gpg-interface.c:457
+#: gpg-interface.c:470
msgid "gpg failed to sign the data"
msgstr "Програмата „gpg“ не подписа данните."
@@ -4411,7 +4506,7 @@
msgid "ignore invalid color '%.*s' in log.graphColors"
msgstr "прескачане на неправилния цвят „%.*s“ в „log.graphColors“"
-#: grep.c:640
+#: grep.c:543
msgid ""
"given pattern contains NULL byte (via -f <file>). This is only supported "
"with -P under PCRE v2"
@@ -4419,18 +4514,18 @@
"зададеният шаблон съдържа нулев знак (идва от -f „ФАЙЛ“). Това се поддържа "
"в комбинация с „-P“ само при ползването на „PCRE v2“"
-#: grep.c:2100
+#: grep.c:1906
#, c-format
msgid "'%s': unable to read %s"
msgstr "„%s“: файлът сочен от „%s“ не може да бъде прочетен"
-#: grep.c:2117 setup.c:176 builtin/clone.c:412 builtin/diff.c:89
+#: grep.c:1923 setup.c:176 builtin/clone.c:412 builtin/diff.c:90
#: builtin/rm.c:135
#, c-format
msgid "failed to stat '%s'"
msgstr "не може да бъде получена информация чрез „stat“ за „%s“"
-#: grep.c:2128
+#: grep.c:1934
#, c-format
msgid "'%s': short read"
msgstr "„%s“: изчитането върна по-малко байтове от очакваното"
@@ -4500,7 +4595,7 @@
msgid "These are common Git commands used in various situations:"
msgstr "Това са най-често използваните команди на Git:"
-#: help.c:365 git.c:99
+#: help.c:365 git.c:100
#, c-format
msgid "unsupported command listing type '%s'"
msgstr "неподдържан списък от команди „%s“"
@@ -4748,11 +4843,252 @@
msgid "Unable to create '%s.lock': %s"
msgstr "Файлът-ключалка „%s.lock“ не може да бъде създаден: %s"
-#: ls-refs.c:109
+#: ls-refs.c:37
+#, c-format
+msgid "invalid value '%s' for lsrefs.unborn"
+msgstr "неправилна стойност „%s“ за „lsrefs.unborn“"
+
+#: ls-refs.c:167
msgid "expected flush after ls-refs arguments"
msgstr "след аргументите към „ls-refs“ се очаква изчистване на буферите"
-#: merge-ort-wrappers.c:13 merge-recursive.c:3672
+#: merge-ort.c:888 merge-recursive.c:1191
+#, c-format
+msgid "Failed to merge submodule %s (not checked out)"
+msgstr "Неуспешно сливане на подмодула „%s“ (не е изтеглен)"
+
+#: merge-ort.c:897 merge-recursive.c:1198
+#, c-format
+msgid "Failed to merge submodule %s (commits not present)"
+msgstr "Неуспешно сливане на подмодула „%s“ (няма подавания)"
+
+#: merge-ort.c:906 merge-recursive.c:1205
+#, c-format
+msgid "Failed to merge submodule %s (commits don't follow merge-base)"
+msgstr ""
+"Подмодулът „%s“ не може да бъде слят (базата за сливане не предшества "
+"подаванията)"
+
+#: merge-ort.c:916 merge-ort.c:923
+#, c-format
+msgid "Note: Fast-forwarding submodule %s to %s"
+msgstr "Бележка: Превъртане на подмодула „%s“ към „%s“"
+
+#: merge-ort.c:944
+#, c-format
+msgid "Failed to merge submodule %s"
+msgstr "Неуспешно сливане на подмодула „%s“"
+
+#: merge-ort.c:951
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but a possible merge resolution exists:\n"
+"%s\n"
+msgstr ""
+"Неуспешно сливане на подмодула „%s“, но е открито възможно решение:\n"
+"%s\n"
+
+#: merge-ort.c:955 merge-recursive.c:1259
+#, c-format
+msgid ""
+"If this is correct simply add it to the index for example\n"
+"by using:\n"
+"\n"
+" git update-index --cacheinfo 160000 %s \"%s\"\n"
+"\n"
+"which will accept this suggestion.\n"
+msgstr ""
+"Ако това е така, добавете го към индекса с команда като следната:\n"
+"\n"
+" git update-index --cacheinfo 160000 %s \"%s\"\n"
+"\n"
+"Това приема предложеното.\n"
+
+#: merge-ort.c:968
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but multiple possible merges exist:\n"
+"%s"
+msgstr ""
+"Неуспешно сливане на подмодула „%s“, но са открити множество решения:\n"
+"%s"
+
+#: merge-ort.c:1127 merge-recursive.c:1341
+msgid "Failed to execute internal merge"
+msgstr "Неуспешно вътрешно сливане"
+
+#: merge-ort.c:1132 merge-recursive.c:1346
+#, c-format
+msgid "Unable to add %s to database"
+msgstr "„%s“ не може да се добави в базата с данни"
+
+#: merge-ort.c:1139 merge-recursive.c:1378
+#, c-format
+msgid "Auto-merging %s"
+msgstr "Автоматично сливане на „%s“"
+
+#: merge-ort.c:1278 merge-recursive.c:2100
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
+"implicit directory rename(s) putting the following path(s) there: %s."
+msgstr ""
+"КОНФЛИКТ (косвено преименуване на директория): следният файл или директория "
+"„%s“ не позволяват косвеното преименуване на следния път/ища: %s."
+
+#: merge-ort.c:1288 merge-recursive.c:2110
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
+"implicit directory renames tried to put these paths there: %s"
+msgstr ""
+"КОНФЛИКТ (косвено преименуване на директория): повече от един път "
+"съответства на „%s“. Косвено преименуване на директория води до поставянето "
+"на тези пътища там: %s."
+
+#: merge-ort.c:1471
+#, c-format
+msgid ""
+"CONFLICT (directory rename split): Unclear where to rename %s to; it was "
+"renamed to multiple other directories, with no destination getting a "
+"majority of the files."
+msgstr ""
+"КОНФЛИКТ (раздвояване при преименуване на директория): Не е ясно как и къде "
+"да се преименува „%s“, защото е преместен в няколко нови директории, без "
+"никоя от тях да е по-честа цел."
+
+#: merge-ort.c:1637 merge-recursive.c:2447
+#, c-format
+msgid ""
+"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
+"renamed."
+msgstr ""
+"ПРЕДУПРЕЖДЕНИЕ: прескачане на преименуването на „%s“ на „%s“ в „%s“, защото "
+"„%s“ също е с променено име."
+
+#: merge-ort.c:1781 merge-recursive.c:3215
+#, c-format
+msgid ""
+"Path updated: %s added in %s inside a directory that was renamed in %s; "
+"moving it to %s."
+msgstr ""
+"Обновен път: „%s“ е добавен в „%s“ в директория, която е преименувана в "
+"„%s“. Обектът се мести в „%s“."
+
+#: merge-ort.c:1788 merge-recursive.c:3222
+#, c-format
+msgid ""
+"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
+"%s; moving it to %s."
+msgstr ""
+"Обновен път: „%s“ е преименуван на „%s“ в „%s“ в директория, която е "
+"преименувана в „%s“. Обектът се мести в „%s“."
+
+#: merge-ort.c:1801 merge-recursive.c:3218
+#, c-format
+msgid ""
+"CONFLICT (file location): %s added in %s inside a directory that was renamed "
+"in %s, suggesting it should perhaps be moved to %s."
+msgstr ""
+"КОНФЛИКТ (места на файлове): „%s“ е добавен в „%s“ в директория, която е "
+"преименувана в „%s“. Предложението е да преместите обекта в „%s“."
+
+#: merge-ort.c:1809 merge-recursive.c:3225
+#, c-format
+msgid ""
+"CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
+"was renamed in %s, suggesting it should perhaps be moved to %s."
+msgstr ""
+"КОНФЛИКТ (места на файлове): „%s“ е преименуван на „%s“ в „%s“ в директория, "
+"която е преименувана в „%s“. Предложението е да преместите обекта в „%s“."
+
+#: merge-ort.c:1952
+#, c-format
+msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
+msgstr ""
+"КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон „%s“ "
+"и на „%s“ в „%s“."
+
+#: merge-ort.c:2047
+#, c-format
+msgid ""
+"CONFLICT (rename involved in collision): rename of %s -> %s has content "
+"conflicts AND collides with another path; this may result in nested conflict "
+"markers."
+msgstr ""
+"КОНФЛИКТ (има и преименуване в промените): „%s“ е преименуван на „%s“, но "
+"има и промени в съдържанието, а и има съвпадение на пътя. Може да се "
+"получат вложени маркери за конфликт."
+
+#: merge-ort.c:2066 merge-ort.c:2090
+#, c-format
+msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
+msgstr ""
+"КОНФЛИКТ (преименуване/добавяне): „%s“ е преименуван на „%s“ в клон „%s“, а "
+"е изтрит в „%s“."
+
+#: merge-ort.c:2735
+#, c-format
+msgid ""
+"CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
+"%s instead."
+msgstr ""
+"КОНФЛИКТ (файл/директория): директория на мястото на „%s“ от „%s“, вместо "
+"това се извършва преместване в „%s“."
+
+#: merge-ort.c:2808
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed %s "
+"of them so each can be recorded somewhere."
+msgstr ""
+"КОНФЛИКТ (различни обекти): „%s“ е различен вид обект в двата варианта, "
+"затова се извършва преименуване на %s, за да може и двата варианта да са "
+"отразени."
+
+#: merge-ort.c:2812
+msgid "both"
+msgstr "двата"
+
+#: merge-ort.c:2812
+msgid "one"
+msgstr "единия"
+
+#: merge-ort.c:2907 merge-recursive.c:3052
+msgid "content"
+msgstr "съдържание"
+
+#: merge-ort.c:2909 merge-recursive.c:3056
+msgid "add/add"
+msgstr "добавяне/добавяне"
+
+#: merge-ort.c:2911 merge-recursive.c:3101
+msgid "submodule"
+msgstr "ПОДМОДУЛ"
+
+#: merge-ort.c:2913 merge-recursive.c:3102
+#, c-format
+msgid "CONFLICT (%s): Merge conflict in %s"
+msgstr "КОНФЛИКТ (%s): Конфликт при сливане на „%s“"
+
+#: merge-ort.c:2938
+#, c-format
+msgid ""
+"CONFLICT (modify/delete): %s deleted in %s and modified in %s. Version %s "
+"of %s left in tree."
+msgstr ""
+"КОНФЛИКТ (промяна/изтриване): „%s“ е изтрит в %s, а е променен в %s. Версия "
+"%s на „%s“ е оставена в дървото."
+
+#. TRANSLATORS: The %s arguments are: 1) tree hash of a merge
+#. base, and 2-3) the trees for the two trees we're merging.
+#.
+#: merge-ort.c:3406
+#, c-format
+msgid "collecting merge info failed for trees %s, %s, %s"
+msgstr "неуспешно събиране на информацията за сливането на „%s“, „%s“ и „%s“"
+
+#: merge-ort-wrappers.c:13 merge-recursive.c:3661
#, c-format
msgid ""
"Your local changes to the following files would be overwritten by merge:\n"
@@ -4830,23 +5166,6 @@
msgstr ""
"не е ясно какво да се прави с обекта „%2$s“ (%3$s) с права за достъп „%1$06o“"
-#: merge-recursive.c:1191
-#, c-format
-msgid "Failed to merge submodule %s (not checked out)"
-msgstr "Неуспешно сливане на подмодула „%s“ (не е изтеглен)"
-
-#: merge-recursive.c:1198
-#, c-format
-msgid "Failed to merge submodule %s (commits not present)"
-msgstr "Неуспешно сливане на подмодула „%s“ (няма подавания)"
-
-#: merge-recursive.c:1205
-#, c-format
-msgid "Failed to merge submodule %s (commits don't follow merge-base)"
-msgstr ""
-"Подмодулът „%s“ не може да бъде слят (базата за сливане не предшества "
-"подаванията)"
-
#: merge-recursive.c:1213 merge-recursive.c:1225
#, c-format
msgid "Fast-forwarding submodule %s to the following commit:"
@@ -4875,41 +5194,11 @@
"Открито е сливане, което може да решава проблема със сливането на "
"подмодула:\n"
-#: merge-recursive.c:1259
-#, c-format
-msgid ""
-"If this is correct simply add it to the index for example\n"
-"by using:\n"
-"\n"
-" git update-index --cacheinfo 160000 %s \"%s\"\n"
-"\n"
-"which will accept this suggestion.\n"
-msgstr ""
-"Ако това е така, добавете го към индекса с команда като следната:\n"
-"\n"
-" git update-index --cacheinfo 160000 %s \"%s\"\n"
-"\n"
-"Това приема предложеното.\n"
-
#: merge-recursive.c:1268
#, c-format
msgid "Failed to merge submodule %s (multiple merges found)"
msgstr "Неуспешно сливане на подмодула „%s“ (открити са множество сливания)"
-#: merge-recursive.c:1341
-msgid "Failed to execute internal merge"
-msgstr "Неуспешно вътрешно сливане"
-
-#: merge-recursive.c:1346
-#, c-format
-msgid "Unable to add %s to database"
-msgstr "„%s“ не може да се добави в базата с данни"
-
-#: merge-recursive.c:1378
-#, c-format
-msgid "Auto-merging %s"
-msgstr "Автоматично сливане на „%s“"
-
#: merge-recursive.c:1402
#, c-format
msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
@@ -5020,25 +5309,6 @@
"постави „%s“, защото няколко нови директории поделят съдържанието на "
"директория „%s“, като никоя не съдържа мнозинство от файловете ѝ."
-#: merge-recursive.c:2100
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
-"implicit directory rename(s) putting the following path(s) there: %s."
-msgstr ""
-"КОНФЛИКТ (косвено преименуване на директория): следният файл или директория "
-"„%s“ не позволяват косвеното преименуване на следния път/ища: %s."
-
-#: merge-recursive.c:2110
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
-"implicit directory renames tried to put these paths there: %s"
-msgstr ""
-"КОНФЛИКТ (косвено преименуване на директория): повече от един път "
-"съответства на „%s“. Косвено преименуване на директория води до поставянето "
-"на тези пътища там: %s."
-
#: merge-recursive.c:2202
#, c-format
msgid ""
@@ -5048,15 +5318,6 @@
"КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон "
"„%s“, а „%s“ е преименуван на „%s“ в „%s“"
-#: merge-recursive.c:2447
-#, c-format
-msgid ""
-"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
-"renamed."
-msgstr ""
-"ПРЕДУПРЕЖДЕНИЕ: прескачане на преименуването на „%s“ на „%s“ в „%s“, защото "
-"„%s“ също е с променено име."
-
#: merge-recursive.c:2973
#, c-format
msgid "cannot read object %s"
@@ -5075,69 +5336,16 @@
msgid "modified"
msgstr "променен"
-#: merge-recursive.c:3052
-msgid "content"
-msgstr "съдържание"
-
-#: merge-recursive.c:3056
-msgid "add/add"
-msgstr "добавяне/добавяне"
-
#: merge-recursive.c:3079
#, c-format
msgid "Skipped %s (merged same as existing)"
msgstr "Прескачане на „%s“ (слетият резултат е идентичен със сегашния)"
-#: merge-recursive.c:3101
-msgid "submodule"
-msgstr "ПОДМОДУЛ"
-
-#: merge-recursive.c:3102
-#, c-format
-msgid "CONFLICT (%s): Merge conflict in %s"
-msgstr "КОНФЛИКТ (%s): Конфликт при сливане на „%s“"
-
#: merge-recursive.c:3132
#, c-format
msgid "Adding as %s instead"
msgstr "Добавяне като „%s“"
-#: merge-recursive.c:3215
-#, c-format
-msgid ""
-"Path updated: %s added in %s inside a directory that was renamed in %s; "
-"moving it to %s."
-msgstr ""
-"Обновен път: „%s“ е добавен в „%s“ в директория, която е преименувана в "
-"„%s“. Обектът се мести в „%s“."
-
-#: merge-recursive.c:3218
-#, c-format
-msgid ""
-"CONFLICT (file location): %s added in %s inside a directory that was renamed "
-"in %s, suggesting it should perhaps be moved to %s."
-msgstr ""
-"КОНФЛИКТ (места на файлове): „%s“ е добавен в „%s“ в директория, която е "
-"преименувана в „%s“. Предложението е да преместите обекта в „%s“."
-
-#: merge-recursive.c:3222
-#, c-format
-msgid ""
-"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
-"%s; moving it to %s."
-msgstr ""
-"Обновен път: „%s“ е преименуван на „%s“ в „%s“ в директория, която е "
-"преименувана в „%s“. Обектът се мести в „%s“."
-
-#: merge-recursive.c:3225
-#, c-format
-msgid ""
-"CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
-"was renamed in %s, suggesting it should perhaps be moved to %s."
-msgstr ""
-"КОНФЛИКТ (места на файлове): „%s“ е преименуван на „%s“ в „%s“ в директория, "
-"която е преименувана в „%s“. Предложението е да преместите обекта в „%s“."
-
#: merge-recursive.c:3339
#, c-format
msgid "Removing %s"
@@ -5173,27 +5381,28 @@
msgid "merging of trees %s and %s failed"
msgstr "неуспешно сливане на дърветата „%s“ и „%s“"
-#: merge-recursive.c:3550
+#: merge-recursive.c:3539
msgid "Merging:"
msgstr "Сливане:"
-#: merge-recursive.c:3563
+#: merge-recursive.c:3552
#, c-format
msgid "found %u common ancestor:"
msgid_plural "found %u common ancestors:"
msgstr[0] "открит е %u общ предшественик:"
msgstr[1] "открити са %u общи предшественици:"
-#: merge-recursive.c:3613
+#: merge-recursive.c:3602
msgid "merge returned no commit"
msgstr "сливането не върна подаване"
-#: merge-recursive.c:3769
+#: merge-recursive.c:3758
#, c-format
msgid "Could not parse object '%s'"
msgstr "Неуспешен анализ на обекта „%s“"
-#: merge-recursive.c:3787 builtin/merge.c:711 builtin/merge.c:895
+#: merge-recursive.c:3776 builtin/merge.c:712 builtin/merge.c:896
+#: builtin/stash.c:471
msgid "Unable to write index."
msgstr "Индексът не може да бъде прочетен"
@@ -5201,125 +5410,115 @@
msgid "failed to read the cache"
msgstr "кешът не може да бъде прочетен"
-#: merge.c:109 rerere.c:720 builtin/am.c:1883 builtin/am.c:1917
-#: builtin/checkout.c:573 builtin/checkout.c:829 builtin/clone.c:817
+#: merge.c:109 rerere.c:704 builtin/am.c:1883 builtin/am.c:1917
+#: builtin/checkout.c:575 builtin/checkout.c:828 builtin/clone.c:817
#: builtin/stash.c:265
msgid "unable to write new index file"
msgstr "неуспешно записване на новия индекс"
-#: midx.c:80
+#: midx.c:62
+msgid "multi-pack-index OID fanout is of the wrong size"
+msgstr "неправилен размер на откъс (OID fanout) на индекса за множество пакети"
+
+#: midx.c:93
#, c-format
msgid "multi-pack-index file %s is too small"
msgstr "файлът с индекса за множество пакети „%s“ е твърде малък"
-#: midx.c:96
+#: midx.c:109
#, c-format
msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
msgstr "отпечатъкът на индекса за множество пакети 0x%08x не съвпада с 0x%08x"
-#: midx.c:101
+#: midx.c:114
#, c-format
msgid "multi-pack-index version %d not recognized"
msgstr "непозната версия на индекс за множество пакети — %d"
-#: midx.c:106
+#: midx.c:119
#, c-format
msgid "multi-pack-index hash version %u does not match version %u"
msgstr ""
"версията на контролната сума на индекса за множество пакети %u не съвпада с "
"%u"
-#: midx.c:123
-msgid "invalid chunk offset (too large)"
-msgstr "неправилно (прекалено голямо) отместване на откъс"
-
-#: midx.c:147
-msgid "terminating multi-pack-index chunk id appears earlier than expected"
-msgstr ""
-"идентификаторът за краен откъс на индекс за множество пакети се явява по-"
-"рано от очакваното"
-
-#: midx.c:160
+#: midx.c:136
msgid "multi-pack-index missing required pack-name chunk"
msgstr "липсва откъс (pack-name) от индекс за множество пакети"
-#: midx.c:162
+#: midx.c:138
msgid "multi-pack-index missing required OID fanout chunk"
msgstr "липсва откъс (OID fanout) от индекс за множество пакети"
-#: midx.c:164
+#: midx.c:140
msgid "multi-pack-index missing required OID lookup chunk"
msgstr "липсва откъс (OID lookup) от индекс за множество пакети"
-#: midx.c:166
+#: midx.c:142
msgid "multi-pack-index missing required object offsets chunk"
msgstr "липсва откъс за отместванията на обекти от индекс за множество пакети"
-#: midx.c:180
+#: midx.c:158
#, c-format
msgid "multi-pack-index pack names out of order: '%s' before '%s'"
msgstr ""
"неправилна подредба на имената в индекс за множество пакети: „%s“ се появи "
"преди „%s“"
-#: midx.c:223
+#: midx.c:202
#, c-format
msgid "bad pack-int-id: %u (%u total packs)"
msgstr ""
"неправилен идентификатор на пакет (pack-int-id): %u (от общо %u пакети)"
-#: midx.c:273
+#: midx.c:252
msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
msgstr ""
"индексът за множество пакети съдържа 64-битови отмествания, но размерът на "
"„off_t“ е недостатъчен"
-#: midx.c:480
+#: midx.c:467
#, c-format
msgid "failed to add packfile '%s'"
msgstr "пакетният файл „%s“ не може да бъде добавен"
-#: midx.c:486
+#: midx.c:473
#, c-format
msgid "failed to open pack-index '%s'"
msgstr "индексът за пакети „%s“ не може да бъде отворен"
-#: midx.c:546
+#: midx.c:533
#, c-format
msgid "failed to locate object %d in packfile"
msgstr "обект %d в пакетния файл липсва"
-#: midx.c:846
+#: midx.c:821
msgid "Adding packfiles to multi-pack-index"
msgstr "Добавяне на пакетни файлове към индекс за множество пакети"
-#: midx.c:879
+#: midx.c:855
#, c-format
msgid "did not see pack-file %s to drop"
msgstr "пакетният файл за триене „%s“ не може да се открие"
-#: midx.c:931
+#: midx.c:904
msgid "no pack files to index."
msgstr "няма пакетни файлове за индексиране"
-#: midx.c:982
-msgid "Writing chunks to multi-pack-index"
-msgstr "Запис на откъси към индекс за множество пакети"
-
-#: midx.c:1060
+#: midx.c:965
#, c-format
msgid "failed to clear multi-pack-index at %s"
msgstr "индексът за множество пакети не може да бъде изчистен при „%s“"
-#: midx.c:1116
+#: midx.c:1021
msgid "multi-pack-index file exists, but failed to parse"
msgstr "файлът с индекса за множество пакети, но не може да бъде анализиран"
-#: midx.c:1124
+#: midx.c:1029
msgid "Looking for referenced packfiles"
msgstr "Търсене на указаните пакетни файлове"
-#: midx.c:1139
+#: midx.c:1044
#, c-format
msgid ""
"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
@@ -5327,72 +5526,72 @@
"неправилна подредба на откъси (OID fanout): fanout[%d] = %<PRIx32> > "
"%<PRIx32> = fanout[%d]"
-#: midx.c:1144
+#: midx.c:1049
msgid "the midx contains no oid"
msgstr "във файла с индекса за множество пакети няма идентификатори на обекти"
-#: midx.c:1153
+#: midx.c:1058
msgid "Verifying OID order in multi-pack-index"
msgstr ""
"Проверка на подредбата на идентификатори на обекти във файл с индекс към "
"множество пакетни файлове"
-#: midx.c:1162
+#: midx.c:1067
#, c-format
msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
msgstr ""
"неправилна подредба на откъси (OID lookup): oid[%d] = %s >= %s = oid[%d]"
-#: midx.c:1182
+#: midx.c:1087
msgid "Sorting objects by packfile"
msgstr "Подредба на обектите по пакетни файлове"
-#: midx.c:1189
+#: midx.c:1094
msgid "Verifying object offsets"
msgstr "Проверка на отместването на обекти"
-#: midx.c:1205
+#: midx.c:1110
#, c-format
msgid "failed to load pack entry for oid[%d] = %s"
msgstr "записът в пакета за обекта oid[%d] = %s не може да бъде зареден"
-#: midx.c:1211
+#: midx.c:1116
#, c-format
msgid "failed to load pack-index for packfile %s"
msgstr "индексът на пакета „%s“ не може да бъде зареден"
-#: midx.c:1220
+#: midx.c:1125
#, c-format
msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
msgstr "неправилно отместване на обект за oid[%d] = %s: %<PRIx64> != %<PRIx64>"
-#: midx.c:1245
+#: midx.c:1150
msgid "Counting referenced objects"
msgstr "Преброяване на свързаните обекти"
-#: midx.c:1255
+#: midx.c:1160
msgid "Finding and deleting unreferenced packfiles"
msgstr "Търсене и изтриване на несвързаните пакетни файлове"
-#: midx.c:1446
+#: midx.c:1351
msgid "could not start pack-objects"
msgstr "командата „pack-objects“ не може да бъде стартирана"
-#: midx.c:1466
+#: midx.c:1371
msgid "could not finish pack-objects"
msgstr "командата „pack-objects“ не може да бъде завършена"
-#: name-hash.c:537
+#: name-hash.c:538
#, c-format
msgid "unable to create lazy_dir thread: %s"
msgstr "не може да се създаде нишка за директории: %s"
-#: name-hash.c:559
+#: name-hash.c:560
#, c-format
msgid "unable to create lazy_name thread: %s"
msgstr "не може да се създаде нишка за имена: %s"
-#: name-hash.c:565
+#: name-hash.c:566
#, c-format
msgid "unable to join lazy_name thread: %s"
msgstr "не може да се изчака нишка за имена: %s"
@@ -5445,6 +5644,368 @@
msgid "Bad %s value: '%s'"
msgstr "Зададена е лоша стойност на променливата „%s“: „%s“"
+#: object-file.c:480
+#, c-format
+msgid "object directory %s does not exist; check .git/objects/info/alternates"
+msgstr ""
+"директорията за обекти „%s“ не съществува, проверете „.git/objects/info/"
+"alternates“"
+
+#: object-file.c:531
+#, c-format
+msgid "unable to normalize alternate object path: %s"
+msgstr "алтернативният път към обекти не може да бъде нормализиран: „%s“"
+
+#: object-file.c:603
+#, c-format
+msgid "%s: ignoring alternate object stores, nesting too deep"
+msgstr ""
+"%s: алтернативните хранилища за обекти се пренебрегват поради прекалено "
+"дълбоко влагане"
+
+#: object-file.c:610
+#, c-format
+msgid "unable to normalize object directory: %s"
+msgstr "директорията за обекти „%s“ не може да бъде нормализирана"
+
+#: object-file.c:653
+msgid "unable to fdopen alternates lockfile"
+msgstr "заключващият файл за алтернативите не може да се отвори с „fdopen“"
+
+#: object-file.c:671
+msgid "unable to read alternates file"
+msgstr "файлът с алтернативите не може да бъде прочетен"
+
+#: object-file.c:678
+msgid "unable to move new alternates file into place"
+msgstr "новият файл с алтернативите не може да бъде преместен на мястото му"
+
+#: object-file.c:713
+#, c-format
+msgid "path '%s' does not exist"
+msgstr "пътят „%s“ не съществува."
+
+#: object-file.c:734
+#, c-format
+msgid "reference repository '%s' as a linked checkout is not supported yet."
+msgstr "все още не се поддържа еталонно хранилище „%s“ като свързано."
+
+#: object-file.c:740
+#, c-format
+msgid "reference repository '%s' is not a local repository."
+msgstr "еталонното хранилище „%s“ не е локално"
+
+#: object-file.c:746
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr "еталонното хранилище „%s“ е плитко"
+
+#: object-file.c:754
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr "еталонното хранилище „%s“ е с присаждане"
+
+#: object-file.c:814
+#, c-format
+msgid "invalid line while parsing alternate refs: %s"
+msgstr "неправилен ред при анализа на алтернативните указатели: „%s“"
+
+#: object-file.c:964
+#, c-format
+msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
+msgstr ""
+"неуспешен опит за „mmap“ %<PRIuMAX>, което е над позволеното %<PRIuMAX>"
+
+#: object-file.c:985
+msgid "mmap failed"
+msgstr "неуспешно изпълнение на „mmap“"
+
+#: object-file.c:1149
+#, c-format
+msgid "object file %s is empty"
+msgstr "файлът с обектите „%s“ е празен"
+
+#: object-file.c:1284 object-file.c:2477
+#, c-format
+msgid "corrupt loose object '%s'"
+msgstr "непакетираният обект „%s“ е повреден"
+
+#: object-file.c:1286 object-file.c:2481
+#, c-format
+msgid "garbage at end of loose object '%s'"
+msgstr "грешни данни в края на непакетирания обект „%s“"
+
+#: object-file.c:1328
+msgid "invalid object type"
+msgstr "неправилен вид обект"
+
+#: object-file.c:1412
+#, c-format
+msgid "unable to unpack %s header with --allow-unknown-type"
+msgstr ""
+"заглавната част „%s“ не може да се разпакетира с опцията „--allow-unknown-"
+"type“"
+
+#: object-file.c:1415
+#, c-format
+msgid "unable to unpack %s header"
+msgstr "заглавната част на „%s“ не може да бъде разпакетирана"
+
+#: object-file.c:1421
+#, c-format
+msgid "unable to parse %s header with --allow-unknown-type"
+msgstr ""
+"заглавната част „%s“ не може да се анализира с опцията „--allow-unknown-type“"
+
+#: object-file.c:1424
+#, c-format
+msgid "unable to parse %s header"
+msgstr "заглавната част на „%s“ не може да бъде анализирана"
+
+#: object-file.c:1651
+#, c-format
+msgid "failed to read object %s"
+msgstr "обектът „%s“ не може да бъде прочетен"
+
+#: object-file.c:1655
+#, c-format
+msgid "replacement %s not found for %s"
+msgstr "заместителят „%s“ на „%s“ не може да бъде открит"
+
+#: object-file.c:1659
+#, c-format
+msgid "loose object %s (stored in %s) is corrupt"
+msgstr "непакетираният обект „%s“ (в „%s“) е повреден"
+
+#: object-file.c:1663
+#, c-format
+msgid "packed object %s (stored in %s) is corrupt"
+msgstr "пакетираният обект „%s“ (в „%s“) е повреден"
+
+#: object-file.c:1768
+#, c-format
+msgid "unable to write file %s"
+msgstr "файлът „%s“ не може да бъде записан"
+
+#: object-file.c:1775
+#, c-format
+msgid "unable to set permission to '%s'"
+msgstr "правата за достъп до „%s“ не могат да бъдат зададени"
+
+#: object-file.c:1782
+msgid "file write error"
+msgstr "грешка при запис на файл"
+
+#: object-file.c:1802
+msgid "error when closing loose object file"
+msgstr "грешка при затварянето на файла с непакетиран обект"
+
+#: object-file.c:1867
+#, c-format
+msgid "insufficient permission for adding an object to repository database %s"
+msgstr ""
+"няма права за добавяне на обект към базата от данни на хранилището „%s“"
+
+#: object-file.c:1869
+msgid "unable to create temporary file"
+msgstr "не може да бъде създаден временен файл"
+
+#: object-file.c:1893
+msgid "unable to write loose object file"
+msgstr "грешка при записа на файла с непакетиран обект"
+
+#: object-file.c:1899
+#, c-format
+msgid "unable to deflate new object %s (%d)"
+msgstr "новият обект „%s“ не може да се компресира с „deflate“: %d"
+
+#: object-file.c:1903
+#, c-format
+msgid "deflateEnd on object %s failed (%d)"
+msgstr "неуспешно приключване на „deflate“ върху „%s“: %d"
+
+#: object-file.c:1907
+#, c-format
+msgid "confused by unstable object source data for %s"
+msgstr "грешка поради нестабилния източник данни за обектите „%s“"
+
+#: object-file.c:1917 builtin/pack-objects.c:1097
+#, c-format
+msgid "failed utime() on %s"
+msgstr "неуспешно задаване на време на достъп/създаване чрез „utime“ на „%s“"
+
+#: object-file.c:1994
+#, c-format
+msgid "cannot read object for %s"
+msgstr "обектът за „%s“ не може да се прочете"
+
+#: object-file.c:2045
+msgid "corrupt commit"
+msgstr "повредено подаване"
+
+#: object-file.c:2053
+msgid "corrupt tag"
+msgstr "повреден етикет"
+
+#: object-file.c:2153
+#, c-format
+msgid "read error while indexing %s"
+msgstr "грешка при четене по време на индексиране на „%s“"
+
+#: object-file.c:2156
+#, c-format
+msgid "short read while indexing %s"
+msgstr "непълно прочитане по време на индексиране на „%s“"
+
+#: object-file.c:2229 object-file.c:2239
+#, c-format
+msgid "%s: failed to insert into database"
+msgstr "„%s“ не може да се вмъкне в базата от данни"
+
+#: object-file.c:2245
+#, c-format
+msgid "%s: unsupported file type"
+msgstr "неподдържан вид файл: „%s“"
+
+#: object-file.c:2269
+#, c-format
+msgid "%s is not a valid object"
+msgstr "„%s“ е неправилен обект"
+
+#: object-file.c:2271
+#, c-format
+msgid "%s is not a valid '%s' object"
+msgstr "„%s“ е неправилен обект от вид „%s“"
+
+#: object-file.c:2298 builtin/index-pack.c:192
+#, c-format
+msgid "unable to open %s"
+msgstr "обектът „%s“ не може да бъде отворен"
+
+#: object-file.c:2488 object-file.c:2541
+#, c-format
+msgid "hash mismatch for %s (expected %s)"
+msgstr "неправилна контролна сума за „%s“ (трябва да е %s)"
+
+#: object-file.c:2512
+#, c-format
+msgid "unable to mmap %s"
+msgstr "неуспешно изпълнение на „mmap“ върху „%s“"
+
+#: object-file.c:2517
+#, c-format
+msgid "unable to unpack header of %s"
+msgstr "заглавната част на „%s“ не може да бъде разпакетирана"
+
+#: object-file.c:2523
+#, c-format
+msgid "unable to parse header of %s"
+msgstr "заглавната част на „%s“ не може да бъде анализирана"
+
+#: object-file.c:2534
+#, c-format
+msgid "unable to unpack contents of %s"
+msgstr "съдържанието на „%s“ не може да бъде разпакетирано"
+
+#: object-name.c:486
+#, c-format
+msgid "short object ID %s is ambiguous"
+msgstr "късият идентификатор на обект „%s“ не е еднозначен"
+
+#: object-name.c:497
+msgid "The candidates are:"
+msgstr "Възможностите са:"
+
+#: object-name.c:796
+msgid ""
+"Git normally never creates a ref that ends with 40 hex characters\n"
+"because it will be ignored when you just specify 40-hex. These refs\n"
+"may be created by mistake. For example,\n"
+"\n"
+" git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
+"examine these refs and maybe delete them. Turn this message off by\n"
+"running \"git config advice.objectNameWarning false\""
+msgstr ""
+"При нормална работа Git никога не създава указатели, които завършват\n"
+"с 40 шестнадесетични знака, защото стандартно те ще бъдат прескачани.\n"
+"Възможно е такива указатели да са създадени случайно. Например:\n"
+"\n"
+" git switch -c $BRANCH $(git rev-parse …)\n"
+"\n"
+"където стойността на променливата на средата BRANCH е празна, при което\n"
+"се създава подобен указател. Прегледайте тези указатели и ги изтрийте.\n"
+"За да изключите това съобщение, изпълнете:\n"
+"\n"
+" git config advice.objectNameWarning false"
+
+#: object-name.c:916
+#, c-format
+msgid "log for '%.*s' only goes back to %s"
+msgstr "журналът за „%.*s“ стига само до „%s“"
+
+#: object-name.c:924
+#, c-format
+msgid "log for '%.*s' only has %d entries"
+msgstr "журналът за „%.*s“ съдържа само %d записа"
+
+#: object-name.c:1702
+#, c-format
+msgid "path '%s' exists on disk, but not in '%.*s'"
+msgstr "пътят „%s“ съществува на диска, но не и в „%.*s“"
+
+#: object-name.c:1708
+#, c-format
+msgid ""
+"path '%s' exists, but not '%s'\n"
+"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
+msgstr ""
+"пътят „%s“ съществува на диска, но не е в „%s“\n"
+"Пробвайте с „%.*s:%s“, което е същото като „%.*s:./%s“."
+
+#: object-name.c:1717
+#, c-format
+msgid "path '%s' does not exist in '%.*s'"
+msgstr "пътят „%s“ не съществува в „%.*s“"
+
+#: object-name.c:1745
+#, c-format
+msgid ""
+"path '%s' is in the index, but not at stage %d\n"
+"hint: Did you mean ':%d:%s'?"
+msgstr ""
+"пътят „%s“ е в индекса, но не версия %d\n"
+"Пробвайте с „%d:%s“."
+
+#: object-name.c:1761
+#, c-format
+msgid ""
+"path '%s' is in the index, but not '%s'\n"
+"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
+msgstr ""
+"пътят „%s“ е в индекса, но не в „%s“\n"
+"Пробвайте с „%d:%s“, което е същото като „%d:./%s“."
+
+#: object-name.c:1769
+#, c-format
+msgid "path '%s' exists on disk, but not in the index"
+msgstr "пътят „%s“ съществува на диска, но не е в индекса"
+
+#: object-name.c:1771
+#, c-format
+msgid "path '%s' does not exist (neither on disk nor in the index)"
+msgstr "пътят „%s“ не съществува нито на диска, нито в индекса"
+
+#: object-name.c:1784
+msgid "relative path syntax can't be used outside working tree"
+msgstr "относителен път не може да се ползва извън работното дърво"
+
+#: object-name.c:1922
+#, c-format
+msgid "invalid object name '%.*s'."
+msgstr "неправилно име на обект: „%.*s“"
+
#: object.c:53
#, c-format
msgid "invalid object type \"%s\""
@@ -5470,24 +6031,75 @@
msgid "hash mismatch %s"
msgstr "разлика в контролната сума: „%s“"
-#: pack-bitmap.c:815 pack-bitmap.c:821 builtin/pack-objects.c:2216
+#: pack-bitmap.c:843 pack-bitmap.c:849 builtin/pack-objects.c:2226
#, c-format
msgid "unable to get size of %s"
msgstr "размерът на „%s“ не може да бъде получен"
-#: packfile.c:615
+#: pack-bitmap.c:1489 builtin/rev-list.c:92
+#, c-format
+msgid "unable to get disk usage of %s"
+msgstr "използваното място за „%s“ не може да бъде получено"
+
+#: pack-revindex.c:220
+#, c-format
+msgid "reverse-index file %s is too small"
+msgstr "файлът с обратния индекс „%s“ е твърде малък"
+
+#: pack-revindex.c:225
+#, c-format
+msgid "reverse-index file %s is corrupt"
+msgstr "файлът с обратния индекс „%s“ е повреден"
+
+#: pack-revindex.c:233
+#, c-format
+msgid "reverse-index file %s has unknown signature"
+msgstr "непознат подпис за файла на обратния индекс „%s“"
+
+#: pack-revindex.c:237
+#, c-format
+msgid "reverse-index file %s has unsupported version %<PRIu32>"
+msgstr "версия %2$<PRIu32> на файла с обратен индекс „%1$s“ не се поддържа"
+
+#: pack-revindex.c:242
+#, c-format
+msgid "reverse-index file %s has unsupported hash id %<PRIu32>"
+msgstr ""
+"идентификатор на контролна сума %2$<PRIu32> на файла с обратен индекс „%1$s“ "
+"не се поддържа"
+
+#: pack-write.c:236
+msgid "cannot both write and verify reverse index"
+msgstr "обратният индекс не може едновременно да се записва и да се проверява"
+
+#: pack-write.c:257
+#, c-format
+msgid "could not stat: %s"
+msgstr "не може да се получи информация чрез „stat“ за „%s“"
+
+#: pack-write.c:269
+#, c-format
+msgid "failed to make %s readable"
+msgstr "не може да се дадат права за четене на „%s“"
+
+#: pack-write.c:508
+#, c-format
+msgid "could not write '%s' promisor file"
+msgstr "гарантиращият файл „%s“ не може да се запише"
+
+#: packfile.c:625
msgid "offset before end of packfile (broken .idx?)"
msgstr ""
"отместване преди края на пакетния файл (възможно е индексът да е повреден)"
-#: packfile.c:1907
+#: packfile.c:1934
#, c-format
msgid "offset before start of pack index for %s (corrupt index?)"
msgstr ""
"отместване преди началото на индекса на пакетния файл „%s“ (възможно е "
"индексът да е повреден)"
-#: packfile.c:1911
+#: packfile.c:1938
#, c-format
msgid "offset beyond end of pack index for %s (truncated index?)"
msgstr ""
@@ -5744,16 +6356,16 @@
msgid "remote error: %s"
msgstr "отдалечена грешка: %s"
-#: preload-index.c:119
+#: preload-index.c:125
msgid "Refreshing index"
msgstr "Обновяване на индекса"
-#: preload-index.c:138
+#: preload-index.c:144
#, c-format
msgid "unable to create threaded lstat: %s"
msgstr "не може да се създаде нишка за изпълнението на „lstat“: %s"
-#: pretty.c:983
+#: pretty.c:984
msgid "unable to parse --pretty format"
msgstr "аргументът към опцията „--pretty“ не може да се анализира"
@@ -5781,21 +6393,21 @@
msgid "Removing duplicate objects"
msgstr "Изтриване на повтарящите се обекти"
-#: range-diff.c:77
+#: range-diff.c:78
msgid "could not start `log`"
msgstr "командата за журнала с подавания „log“ не може да се стартира"
-#: range-diff.c:79
+#: range-diff.c:80
msgid "could not read `log` output"
msgstr ""
"изходът от командата за журнала с подавания „log“ не може да се прочете"
-#: range-diff.c:98 sequencer.c:5310
+#: range-diff.c:101 sequencer.c:5318
#, c-format
msgid "could not parse commit '%s'"
msgstr "подаването „%s“ не може да бъде анализирано"
-#: range-diff.c:112
+#: range-diff.c:115
#, c-format
msgid ""
"could not parse first line of `log` output: did not start with 'commit ': "
@@ -5804,16 +6416,20 @@
"първият ред от изхода на командата „log“ не може да се анализира, защото не "
"започва с „commit “: „%s“"
-#: range-diff.c:137
+#: range-diff.c:140
#, c-format
msgid "could not parse git header '%.*s'"
msgstr "заглавната част на git „%.*s“ не може да се анализира"
-#: range-diff.c:299
+#: range-diff.c:306
msgid "failed to generate diff"
msgstr "неуспешно търсене на разлика"
-#: range-diff.c:532 range-diff.c:534
+#: range-diff.c:558
+msgid "--left-only and --right-only are mutually exclusive"
+msgstr "опциите „--left-only“ и „--right-only“ са несъвместими"
+
+#: range-diff.c:561 range-diff.c:563
#, c-format
msgid "could not parse log for '%s'"
msgstr "журналът с подаванията на „%s“ не може да бъде анализиран"
@@ -5860,11 +6476,11 @@
msgid "'%s' appears as both a file and as a directory"
msgstr "„%s“ съществува и като файл, и като директория"
-#: read-cache.c:1524
+#: read-cache.c:1532
msgid "Refresh index"
msgstr "Обновяване на индекса"
-#: read-cache.c:1639
+#: read-cache.c:1657
#, c-format
msgid ""
"index.version set, but the value is invalid.\n"
@@ -5873,7 +6489,7 @@
"Зададена е неправилна стойност на настройката „index.version“.\n"
"Ще се ползва версия %i"
-#: read-cache.c:1649
+#: read-cache.c:1667
#, c-format
msgid ""
"GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -5883,142 +6499,142 @@
"„GIT_INDEX_VERSION“.\n"
"Ще се ползва версия %i"
-#: read-cache.c:1705
+#: read-cache.c:1723
#, c-format
msgid "bad signature 0x%08x"
msgstr "неправилен подпис: „0x%08x“"
-#: read-cache.c:1708
+#: read-cache.c:1726
#, c-format
msgid "bad index version %d"
msgstr "неправилна версия на индекса %d"
-#: read-cache.c:1717
+#: read-cache.c:1735
msgid "bad index file sha1 signature"
msgstr "неправилен подпис за контролна сума по SHA1 на файла на индекса"
-#: read-cache.c:1747
+#: read-cache.c:1765
#, c-format
msgid "index uses %.4s extension, which we do not understand"
msgstr ""
"индексът ползва разширение „%.4s“, което не се поддържа от тази версия на git"
-#: read-cache.c:1749
+#: read-cache.c:1767
#, c-format
msgid "ignoring %.4s extension"
msgstr "игнориране на разширението „%.4s“"
-#: read-cache.c:1786
+#: read-cache.c:1804
#, c-format
msgid "unknown index entry format 0x%08x"
msgstr "непознат формат на запис в индекса: „0x%08x“"
-#: read-cache.c:1802
+#: read-cache.c:1820
#, c-format
msgid "malformed name field in the index, near path '%s'"
msgstr "неправилно име на поле в индекса близо до пътя „%s“"
-#: read-cache.c:1859
+#: read-cache.c:1877
msgid "unordered stage entries in index"
msgstr "неподредени записи в индекса"
-#: read-cache.c:1862
+#: read-cache.c:1880
#, c-format
msgid "multiple stage entries for merged file '%s'"
msgstr "множество записи за слетия файл „%s“"
-#: read-cache.c:1865
+#: read-cache.c:1883
#, c-format
msgid "unordered stage entries for '%s'"
msgstr "неподредени записи за „%s“"
-#: read-cache.c:1971 read-cache.c:2262 rerere.c:565 rerere.c:599 rerere.c:1111
-#: submodule.c:1628 builtin/add.c:538 builtin/check-ignore.c:181
-#: builtin/checkout.c:502 builtin/checkout.c:688 builtin/clean.c:991
-#: builtin/commit.c:364 builtin/diff-tree.c:122 builtin/grep.c:507
+#: read-cache.c:1989 read-cache.c:2280 rerere.c:549 rerere.c:583 rerere.c:1095
+#: submodule.c:1634 builtin/add.c:546 builtin/check-ignore.c:181
+#: builtin/checkout.c:504 builtin/checkout.c:690 builtin/clean.c:991
+#: builtin/commit.c:364 builtin/diff-tree.c:122 builtin/grep.c:505
#: builtin/mv.c:146 builtin/reset.c:247 builtin/rm.c:290
#: builtin/submodule--helper.c:332
msgid "index file corrupt"
msgstr "файлът с индекса е повреден"
-#: read-cache.c:2115
+#: read-cache.c:2133
#, c-format
msgid "unable to create load_cache_entries thread: %s"
msgstr "не може да се създаде нишка за зареждане на обектите от кеша: %s"
-#: read-cache.c:2128
+#: read-cache.c:2146
#, c-format
msgid "unable to join load_cache_entries thread: %s"
msgstr "не може да се изчака нишка за зареждане на обектите от кеша: %s"
-#: read-cache.c:2161
+#: read-cache.c:2179
#, c-format
msgid "%s: index file open failed"
msgstr "%s: неуспешно отваряне на файла на индекса"
-#: read-cache.c:2165
+#: read-cache.c:2183
#, c-format
msgid "%s: cannot stat the open index"
msgstr "%s: не може да се получи информация за отворения индекс със „stat“"
-#: read-cache.c:2169
+#: read-cache.c:2187
#, c-format
msgid "%s: index file smaller than expected"
msgstr "%s: файлът на индекса е по-малък от очакваното"
-#: read-cache.c:2173
+#: read-cache.c:2191
#, c-format
msgid "%s: unable to map index file"
msgstr "%s: неуспешно заделяне на съответстваща памет чрез „mmap“ на индекса"
-#: read-cache.c:2215
+#: read-cache.c:2233
#, c-format
msgid "unable to create load_index_extensions thread: %s"
msgstr ""
"не може да се създаде нишка за зареждане на разширенията на индекса: %s"
-#: read-cache.c:2242
+#: read-cache.c:2260
#, c-format
msgid "unable to join load_index_extensions thread: %s"
msgstr ""
"не може да се създаде нишка за зареждане на разширенията на индекса: %s"
-#: read-cache.c:2274
+#: read-cache.c:2292
#, c-format
msgid "could not freshen shared index '%s'"
msgstr "споделеният индекс „%s“ не може да се обнови"
-#: read-cache.c:2321
+#: read-cache.c:2339
#, c-format
msgid "broken index, expect %s in %s, got %s"
msgstr "грешки в индекса — в „%2$s“ се очаква „%1$s“, а бе получено „%3$s“"
-#: read-cache.c:3017 strbuf.c:1171 wrapper.c:633 builtin/merge.c:1140
+#: read-cache.c:3035 strbuf.c:1171 wrapper.c:633 builtin/merge.c:1141
#, c-format
msgid "could not close '%s'"
msgstr "„%s“ не може да се затвори"
-#: read-cache.c:3120 sequencer.c:2479 sequencer.c:4231
+#: read-cache.c:3138 sequencer.c:2487 sequencer.c:4239
#, c-format
msgid "could not stat '%s'"
msgstr "неуспешно изпълнение на „stat“ върху „%s“"
-#: read-cache.c:3133
+#: read-cache.c:3151
#, c-format
msgid "unable to open git dir: %s"
msgstr "не може да се отвори директорията на git: %s"
-#: read-cache.c:3145
+#: read-cache.c:3163
#, c-format
msgid "unable to unlink: %s"
msgstr "неуспешно изтриване на „%s“"
-#: read-cache.c:3170
+#: read-cache.c:3188
#, c-format
msgid "cannot fix permission bits on '%s'"
msgstr "правата за достъп до „%s“ не могат да бъдат поправени"
-#: read-cache.c:3319
+#: read-cache.c:3337
#, c-format
msgid "%s: cannot drop to stage #0"
msgstr "%s: не може да се премине към етап №0"
@@ -6137,14 +6753,14 @@
"Ако изтриете всичко, пребазирането ще бъде преустановено.\n"
"\n"
-#: rebase-interactive.c:110 rerere.c:485 rerere.c:692 sequencer.c:3607
-#: sequencer.c:3633 sequencer.c:5416 builtin/fsck.c:347 builtin/rebase.c:270
+#: rebase-interactive.c:110 rerere.c:469 rerere.c:676 sequencer.c:3615
+#: sequencer.c:3641 sequencer.c:5424 builtin/fsck.c:329 builtin/rebase.c:272
#, c-format
msgid "could not write '%s'"
msgstr "„%s“ не може да се запише"
-#: rebase-interactive.c:116 builtin/rebase.c:202 builtin/rebase.c:228
-#: builtin/rebase.c:252
+#: rebase-interactive.c:116 builtin/rebase.c:204 builtin/rebase.c:230
+#: builtin/rebase.c:254
#, c-format
msgid "could not write '%s'."
msgstr "„%s“ не може да се запише."
@@ -6175,14 +6791,14 @@
"предупреждение)\n"
"или „error“ (считане за грешка).\n"
-#: rebase-interactive.c:233 rebase-interactive.c:238 sequencer.c:2394
-#: builtin/rebase.c:188 builtin/rebase.c:213 builtin/rebase.c:239
-#: builtin/rebase.c:264
+#: rebase-interactive.c:233 rebase-interactive.c:238 sequencer.c:2402
+#: builtin/rebase.c:190 builtin/rebase.c:215 builtin/rebase.c:241
+#: builtin/rebase.c:266
#, c-format
msgid "could not read '%s'."
msgstr "от „%s“ не може да се чете."
-#: ref-filter.c:42 wt-status.c:1973
+#: ref-filter.c:42 wt-status.c:1975
msgid "gone"
msgstr "изтрит"
@@ -6201,232 +6817,247 @@
msgid "ahead %d, behind %d"
msgstr "напред с %d, назад с %d"
-#: ref-filter.c:169
+#: ref-filter.c:175
#, c-format
msgid "expected format: %%(color:<color>)"
msgstr "очакван формат: %%(color:ЦВЯТ)"
-#: ref-filter.c:171
+#: ref-filter.c:177
#, c-format
msgid "unrecognized color: %%(color:%s)"
msgstr "непознат цвят: %%(color:%s)"
-#: ref-filter.c:193
+#: ref-filter.c:199
#, c-format
msgid "Integer value expected refname:lstrip=%s"
msgstr "очаква се цяло число за „refname:lstrip=%s“"
-#: ref-filter.c:197
+#: ref-filter.c:203
#, c-format
msgid "Integer value expected refname:rstrip=%s"
msgstr "очаква се цяло число за „refname:rstrip=%s“"
-#: ref-filter.c:199
+#: ref-filter.c:205
#, c-format
msgid "unrecognized %%(%s) argument: %s"
msgstr "непознат аргумент за „%%(%s)“: %s"
-#: ref-filter.c:254
+#: ref-filter.c:260
#, c-format
msgid "%%(objecttype) does not take arguments"
msgstr "%%(objecttype) не приема аргументи"
-#: ref-filter.c:276
+#: ref-filter.c:282
#, c-format
msgid "unrecognized %%(objectsize) argument: %s"
msgstr "непознат аргумент за %%(objectsize): %s"
-#: ref-filter.c:284
+#: ref-filter.c:290
#, c-format
msgid "%%(deltabase) does not take arguments"
msgstr "%%(deltabase) не приема аргументи"
-#: ref-filter.c:296
+#: ref-filter.c:302
#, c-format
msgid "%%(body) does not take arguments"
msgstr "%%(body) не приема аргументи"
-#: ref-filter.c:309
+#: ref-filter.c:315
#, c-format
msgid "unrecognized %%(subject) argument: %s"
msgstr "непознат аргумент за %%(subject): %s"
-#: ref-filter.c:330
+#: ref-filter.c:334
+#, c-format
+msgid "expected %%(trailers:key=<value>)"
+msgstr "очаква се %%(trailers:КЛЮЧ=СТОЙНОСТ)"
+
+#: ref-filter.c:336
#, c-format
msgid "unknown %%(trailers) argument: %s"
msgstr "непознат аргумент „%%(trailers)“: %s"
-#: ref-filter.c:363
+#: ref-filter.c:367
#, c-format
msgid "positive value expected contents:lines=%s"
msgstr "очаква се положителна стойност за „contents:lines=%s“"
-#: ref-filter.c:365
+#: ref-filter.c:369
#, c-format
msgid "unrecognized %%(contents) argument: %s"
msgstr "непознат аргумент за %%(contents): %s"
-#: ref-filter.c:380
+#: ref-filter.c:384
#, c-format
msgid "positive value expected '%s' in %%(%s)"
msgstr "очаква се положителна стойност за „%s“ в %%(%s)"
-#: ref-filter.c:384
+#: ref-filter.c:388
#, c-format
msgid "unrecognized argument '%s' in %%(%s)"
msgstr "непознат аргумент „%s“ в %%(%s)"
-#: ref-filter.c:398
+#: ref-filter.c:402
#, c-format
msgid "unrecognized email option: %s"
msgstr "непозната опция за е-поща: %s"
-#: ref-filter.c:428
+#: ref-filter.c:432
#, c-format
msgid "expected format: %%(align:<width>,<position>)"
msgstr "очакван формат: %%(align:ШИРОЧИНА,ПОЗИЦИЯ)"
-#: ref-filter.c:440
+#: ref-filter.c:444
#, c-format
msgid "unrecognized position:%s"
msgstr "непозната позиция: %s"
-#: ref-filter.c:447
+#: ref-filter.c:451
#, c-format
msgid "unrecognized width:%s"
msgstr "непозната широчина: %s"
-#: ref-filter.c:456
+#: ref-filter.c:460
#, c-format
msgid "unrecognized %%(align) argument: %s"
msgstr "непознат аргумент за %%(align): %s"
-#: ref-filter.c:464
+#: ref-filter.c:468
#, c-format
msgid "positive width expected with the %%(align) atom"
msgstr "очаква се положителна широчина с лексемата „%%(align)“"
-#: ref-filter.c:482
+#: ref-filter.c:486
#, c-format
msgid "unrecognized %%(if) argument: %s"
msgstr "непознат аргумент за „%%(if)“: %s"
-#: ref-filter.c:584
+#: ref-filter.c:588
#, c-format
msgid "malformed field name: %.*s"
msgstr "неправилно име на обект: „%.*s“"
-#: ref-filter.c:611
+#: ref-filter.c:615
#, c-format
msgid "unknown field name: %.*s"
msgstr "непознато име на обект: „%.*s“"
-#: ref-filter.c:615
+#: ref-filter.c:619
#, c-format
msgid ""
"not a git repository, but the field '%.*s' requires access to object data"
msgstr "не е хранилище на git, а полето „%.*s“ изисква достъп данни на обектни"
-#: ref-filter.c:739
+#: ref-filter.c:743
#, c-format
msgid "format: %%(if) atom used without a %%(then) atom"
msgstr "формат: лексемата %%(if) е използвана без съответната ѝ %%(then)"
-#: ref-filter.c:802
+#: ref-filter.c:806
#, c-format
msgid "format: %%(then) atom used without an %%(if) atom"
msgstr "формат: лексемата %%(then) е използвана без съответната ѝ %%(if)"
-#: ref-filter.c:804
+#: ref-filter.c:808
#, c-format
msgid "format: %%(then) atom used more than once"
msgstr "формат: лексемата %%(then) е използвана повече от един път"
-#: ref-filter.c:806
+#: ref-filter.c:810
#, c-format
msgid "format: %%(then) atom used after %%(else)"
msgstr "формат: лексемата %%(then) е използвана след %%(else)"
-#: ref-filter.c:834
+#: ref-filter.c:838
#, c-format
msgid "format: %%(else) atom used without an %%(if) atom"
msgstr "формат: лексемата %%(else) е използвана без съответната ѝ %%(if)"
-#: ref-filter.c:836
+#: ref-filter.c:840
#, c-format
msgid "format: %%(else) atom used without a %%(then) atom"
msgstr "формат: лексемата %%(else) е използвана без съответната ѝ %%(then)"
-#: ref-filter.c:838
+#: ref-filter.c:842
#, c-format
msgid "format: %%(else) atom used more than once"
msgstr "формат: лексемата %%(else) е използвана повече от един път"
-#: ref-filter.c:853
+#: ref-filter.c:857
#, c-format
msgid "format: %%(end) atom used without corresponding atom"
msgstr "формат: лексемата %%(end) е използвана без съответната ѝ"
-#: ref-filter.c:910
+#: ref-filter.c:914
#, c-format
msgid "malformed format string %s"
msgstr "неправилен форматиращ низ „%s“"
-#: ref-filter.c:1549
-#, c-format
-msgid "no branch, rebasing %s"
-msgstr "извън клон, пребазиране на „%s“"
-
-#: ref-filter.c:1552
-#, c-format
-msgid "no branch, rebasing detached HEAD %s"
-msgstr "извън клон, пребазиране на несвързан указател „HEAD“ при „%s“"
-
#: ref-filter.c:1555
#, c-format
-msgid "no branch, bisect started on %s"
-msgstr "извън клон, двоично търсене от „%s“"
+msgid "(no branch, rebasing %s)"
+msgstr "(извън клон, пребазиране на „%s“)"
+
+#: ref-filter.c:1558
+#, c-format
+msgid "(no branch, rebasing detached HEAD %s)"
+msgstr "(извън клон, пребазиране на несвързан указател „HEAD“ при „%s“)"
+
+#: ref-filter.c:1561
+#, c-format
+msgid "(no branch, bisect started on %s)"
+msgstr "(извън клон, двоично търсене от „%s“)"
#: ref-filter.c:1565
-msgid "no branch"
-msgstr "извън клон"
+#, c-format
+msgid "(HEAD detached at %s)"
+msgstr "(указателят „HEAD“ не е свързан и е при „%s“)"
-#: ref-filter.c:1599 ref-filter.c:1808
+#: ref-filter.c:1568
+#, c-format
+msgid "(HEAD detached from %s)"
+msgstr "(указателят „HEAD“ не е свързан и е отделѐн от „%s“)"
+
+#: ref-filter.c:1571
+msgid "(no branch)"
+msgstr "(извън клон)"
+
+#: ref-filter.c:1603 ref-filter.c:1812
#, c-format
msgid "missing object %s for %s"
msgstr "обектът „%s“ липсва за „%s“"
-#: ref-filter.c:1609
+#: ref-filter.c:1613
#, c-format
msgid "parse_object_buffer failed on %s for %s"
msgstr "неуспешно анализиране чрез „parse_object_buffer“ на „%s“ за „%s“"
-#: ref-filter.c:2062
+#: ref-filter.c:1996
#, c-format
msgid "malformed object at '%s'"
msgstr "обект със сгрешен формат при „%s“"
-#: ref-filter.c:2151
+#: ref-filter.c:2085
#, c-format
msgid "ignoring ref with broken name %s"
msgstr "игнориране на указателя с грешно име „%s“"
-#: ref-filter.c:2156 refs.c:676
+#: ref-filter.c:2090 refs.c:676
#, c-format
msgid "ignoring broken ref %s"
msgstr "игнориране на повредения указател „%s“"
-#: ref-filter.c:2472
+#: ref-filter.c:2430
#, c-format
msgid "format: %%(end) atom missing"
msgstr "грешка във форма̀та: липсва лексемата %%(end)"
-#: ref-filter.c:2571
+#: ref-filter.c:2529
#, c-format
msgid "malformed object name %s"
msgstr "неправилно име на обект „%s“"
-#: ref-filter.c:2576
+#: ref-filter.c:2534
#, c-format
msgid "option `%s' must point to a commit"
msgstr "опцията „%s“ не сочи към подаване"
@@ -6476,50 +7107,50 @@
msgid "ignoring dangling symref %s"
msgstr "игнориране на указател на обект извън клон „%s“"
-#: refs.c:911
+#: refs.c:922
#, c-format
msgid "log for ref %s has gap after %s"
msgstr "има пропуски в журнала с подаванията за указателя „%s“ след „%s“"
-#: refs.c:917
+#: refs.c:929
#, c-format
msgid "log for ref %s unexpectedly ended on %s"
msgstr "журналът с подаванията за указателя „%s“ свършва неочаквано след „%s“"
-#: refs.c:976
+#: refs.c:994
#, c-format
msgid "log for %s is empty"
msgstr "журналът с подаванията за указателя „%s“ е празен"
-#: refs.c:1068
+#: refs.c:1086
#, c-format
msgid "refusing to update ref with bad name '%s'"
msgstr "указател не може да се обнови с грешно име „%s“"
-#: refs.c:1139
+#: refs.c:1157
#, c-format
msgid "update_ref failed for ref '%s': %s"
msgstr "неуспешно обновяване на указателя „%s“: %s"
-#: refs.c:1963
+#: refs.c:2051
#, c-format
msgid "multiple updates for ref '%s' not allowed"
msgstr "не са позволени повече от една промени на указателя „%s“"
-#: refs.c:2043
+#: refs.c:2131
msgid "ref updates forbidden inside quarantine environment"
msgstr "обновяванията на указатели са забранени в среди под карантина"
-#: refs.c:2054
+#: refs.c:2142
msgid "ref updates aborted by hook"
msgstr "обновяванията на указатели са преустановени от кука"
-#: refs.c:2154 refs.c:2184
+#: refs.c:2242 refs.c:2272
#, c-format
msgid "'%s' exists; cannot create '%s'"
msgstr "„%s“ съществува, не може да се създаде „%s“"
-#: refs.c:2160 refs.c:2195
+#: refs.c:2248 refs.c:2283
#, c-format
msgid "cannot process '%s' and '%s' at the same time"
msgstr "невъзможно е едновременно да се обработват „%s“ и „%s“"
@@ -6584,12 +7215,12 @@
msgid "value '%s' of pattern has no '*'"
msgstr "стойност „%s“ на шаблона не съдържа „*“"
-#: remote.c:1073
+#: remote.c:1083
#, c-format
msgid "src refspec %s does not match any"
msgstr "указателят на версия-източник „%s“ не съвпада с никой обект"
-#: remote.c:1078
+#: remote.c:1088
#, c-format
msgid "src refspec %s matches more than one"
msgstr "указателят на версия-източник „%s“ съвпада с повече от един обект"
@@ -6598,7 +7229,7 @@
#. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
#. the <src>.
#.
-#: remote.c:1093
+#: remote.c:1103
#, c-format
msgid ""
"The destination you provided is not a full refname (i.e.,\n"
@@ -6622,7 +7253,7 @@
"Никой от вариантите не сработи. Трябва сами да укажете пълното име на\n"
"указателя."
-#: remote.c:1113
+#: remote.c:1123
#, c-format
msgid ""
"The <src> part of the refspec is a commit object.\n"
@@ -6633,7 +7264,7 @@
"като\n"
"изтласкате към „%s:refs/heads/%s“?"
-#: remote.c:1118
+#: remote.c:1128
#, c-format
msgid ""
"The <src> part of the refspec is a tag object.\n"
@@ -6644,7 +7275,7 @@
"като\n"
"изтласкате към „%s:refs/tags/%s“?"
-#: remote.c:1123
+#: remote.c:1133
#, c-format
msgid ""
"The <src> part of the refspec is a tree object.\n"
@@ -6654,7 +7285,7 @@
"ИЗТОЧНИКът е обект-дърво. Не целите ли всъщност да създадете нов клон като\n"
"изтласкате към „%s:refs/tags/%s“?"
-#: remote.c:1128
+#: remote.c:1138
#, c-format
msgid ""
"The <src> part of the refspec is a blob object.\n"
@@ -6664,118 +7295,118 @@
"ИЗТОЧНИКът е обект-BLOB. Не целите ли всъщност да създадете нов клон като\n"
"изтласкате към „%s:refs/tags/%s“?"
-#: remote.c:1164
+#: remote.c:1174
#, c-format
msgid "%s cannot be resolved to branch"
msgstr "не е открит клон съответстващ на „%s“"
-#: remote.c:1175
+#: remote.c:1185
#, c-format
msgid "unable to delete '%s': remote ref does not exist"
msgstr "„%s“ не може да се изтрие: отдалечения указател не съществува"
-#: remote.c:1187
+#: remote.c:1197
#, c-format
msgid "dst refspec %s matches more than one"
msgstr "указателят на версия-цел „%s“ съвпада с повече от един обект"
-#: remote.c:1194
+#: remote.c:1204
#, c-format
msgid "dst ref %s receives from more than one src"
msgstr ""
"указателят на версия-цел „%s“ съответства и ще получава от повече от един "
"източник"
-#: remote.c:1714 remote.c:1815
+#: remote.c:1724 remote.c:1825
msgid "HEAD does not point to a branch"
msgstr "Указателят „HEAD“ не сочи към клон"
-#: remote.c:1723
+#: remote.c:1733
#, c-format
msgid "no such branch: '%s'"
msgstr "няма клон на име „%s“"
-#: remote.c:1726
+#: remote.c:1736
#, c-format
msgid "no upstream configured for branch '%s'"
msgstr "не е зададен клон-източник за клона „%s“"
-#: remote.c:1732
+#: remote.c:1742
#, c-format
msgid "upstream branch '%s' not stored as a remote-tracking branch"
msgstr "клонът-източник „%s“ не е съхранен като следящ клон"
-#: remote.c:1747
+#: remote.c:1757
#, c-format
msgid "push destination '%s' on remote '%s' has no local tracking branch"
msgstr ""
"липсва локален следящ клон за местоположението за изтласкване „%s“ в "
"хранилището „%s“"
-#: remote.c:1759
+#: remote.c:1769
#, c-format
msgid "branch '%s' has no remote for pushing"
msgstr "няма информация клонът „%s“ да следи някой друг"
-#: remote.c:1769
+#: remote.c:1779
#, c-format
msgid "push refspecs for '%s' do not include '%s'"
msgstr "указателят за изтласкване на „%s“ не включва „%s“"
-#: remote.c:1782
+#: remote.c:1792
msgid "push has no destination (push.default is 'nothing')"
msgstr "указателят за изтласкване не включва цел („push.default“ е „nothing“)"
-#: remote.c:1804
+#: remote.c:1814
msgid "cannot resolve 'simple' push to a single destination"
msgstr "простото (simple) изтласкване не съответства на една цел"
-#: remote.c:1933
+#: remote.c:1943
#, c-format
msgid "couldn't find remote ref %s"
msgstr "отдалеченият указател „%s“ не може да бъде открит"
-#: remote.c:1946
+#: remote.c:1956
#, c-format
msgid "* Ignoring funny ref '%s' locally"
msgstr "• прескачане на неочаквания локален указател „%s“"
-#: remote.c:2109
+#: remote.c:2119
#, c-format
msgid "Your branch is based on '%s', but the upstream is gone.\n"
msgstr "Този клон следи „%s“, но следеният клон е изтрит.\n"
-#: remote.c:2113
+#: remote.c:2123
msgid " (use \"git branch --unset-upstream\" to fixup)\n"
msgstr " (за да коригирате това, използвайте „git branch --unset-upstream“)\n"
-#: remote.c:2116
+#: remote.c:2126
#, c-format
msgid "Your branch is up to date with '%s'.\n"
msgstr "Клонът е обновен към „%s“.\n"
-#: remote.c:2120
+#: remote.c:2130
#, c-format
msgid "Your branch and '%s' refer to different commits.\n"
msgstr "Клонът ви и „%s“ сочат към различни подавания.\n"
-#: remote.c:2123
+#: remote.c:2133
#, c-format
msgid " (use \"%s\" for details)\n"
msgstr " (за повече информация ползвайте „%s“)\n"
-#: remote.c:2127
+#: remote.c:2137
#, 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:2133
+#: remote.c:2143
msgid " (use \"git push\" to publish your local commits)\n"
msgstr " (публикувайте локалните си промени чрез „git push“)\n"
-#: remote.c:2136
+#: remote.c:2146
#, c-format
msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
msgid_plural ""
@@ -6783,11 +7414,11 @@
msgstr[0] "Клонът ви е с %2$d подаване зад „%1$s“ и може да бъде превъртян.\n"
msgstr[1] "Клонът ви е с %2$d подавания зад „%1$s“ и може да бъде превъртян.\n"
-#: remote.c:2144
+#: remote.c:2154
msgid " (use \"git pull\" to update your local branch)\n"
msgstr " (обновете локалния си клон чрез „git pull“)\n"
-#: remote.c:2147
+#: remote.c:2157
#, c-format
msgid ""
"Your branch and '%s' have diverged,\n"
@@ -6802,11 +7433,11 @@
"Текущият клон се е отделил от „%s“,\n"
"двата имат съответно по %d и %d несъвпадащи подавания.\n"
-#: remote.c:2157
+#: remote.c:2167
msgid " (use \"git pull\" to merge the remote branch into yours)\n"
msgstr " (слейте отдалечения клон в локалния чрез „git pull“)\n"
-#: remote.c:2349
+#: remote.c:2359
#, c-format
msgid "cannot parse expected object name '%s'"
msgstr "очакваното име на обект „%s“ не може да бъде анализирано"
@@ -6826,99 +7457,99 @@
msgid "replace depth too high for object %s"
msgstr "дълбочината на замяна е прекалено голяма за обекта: „%s“"
-#: rerere.c:217 rerere.c:226 rerere.c:229
+#: rerere.c:201 rerere.c:210 rerere.c:213
msgid "corrupt MERGE_RR"
msgstr "повреден „MERGE_RR“ (запис за коригиране на конфликт)"
-#: rerere.c:264 rerere.c:269
+#: rerere.c:248 rerere.c:253
msgid "unable to write rerere record"
msgstr "приложеното коригиране на конфликт не може да бъде записано"
-#: rerere.c:495
+#: rerere.c:479
#, c-format
msgid "there were errors while writing '%s' (%s)"
msgstr "грешки при записването на „%s“ (%s)"
-#: rerere.c:498
+#: rerere.c:482
#, c-format
msgid "failed to flush '%s'"
msgstr "грешка при изчистването на буферите при записването на „%s“"
-#: rerere.c:503 rerere.c:1039
+#: rerere.c:487 rerere.c:1023
#, c-format
msgid "could not parse conflict hunks in '%s'"
msgstr "парчетата с конфликти в „%s“ не може да се анализират"
-#: rerere.c:684
+#: rerere.c:668
#, c-format
msgid "failed utime() on '%s'"
msgstr "неуспешно задаване на време на достъп/създаване чрез „utime“ на „%s“"
-#: rerere.c:694
+#: rerere.c:678
#, c-format
msgid "writing '%s' failed"
msgstr "неуспешен запис на „%s“"
-#: rerere.c:714
+#: rerere.c:698
#, c-format
msgid "Staged '%s' using previous resolution."
msgstr ""
"„%s“ е добавен към индекса с преизползване на запазена корекция при сливане"
-#: rerere.c:753
+#: rerere.c:737
#, c-format
msgid "Recorded resolution for '%s'."
msgstr "Корекцията на конфликта при сливане на „%s“ е запазена."
-#: rerere.c:788
+#: rerere.c:772
#, c-format
msgid "Resolved '%s' using previous resolution."
msgstr ""
"Конфликтът при сливане на „%s“ е коригиран с преизползване на предишна "
"корекция."
-#: rerere.c:803
+#: rerere.c:787
#, c-format
msgid "cannot unlink stray '%s'"
msgstr "излишният обект „%s“ не може да се изтрие"
-#: rerere.c:807
+#: rerere.c:791
#, c-format
msgid "Recorded preimage for '%s'"
msgstr "Предварителният вариант на „%s“ е запазен"
-#: rerere.c:881 submodule.c:2082 builtin/log.c:1992
+#: rerere.c:865 submodule.c:2088 builtin/log.c:1991
#: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:1890
#, c-format
msgid "could not create directory '%s'"
msgstr "Директорията „%s“ не може да бъде създадена"
-#: rerere.c:1057
+#: rerere.c:1041
#, c-format
msgid "failed to update conflicted state in '%s'"
msgstr "конфликтът в „%s“ не може да се обнови"
-#: rerere.c:1068 rerere.c:1075
+#: rerere.c:1052 rerere.c:1059
#, c-format
msgid "no remembered resolution for '%s'"
msgstr "липсва запазена корекция на конфликт при „%s“"
-#: rerere.c:1077
+#: rerere.c:1061
#, c-format
msgid "cannot unlink '%s'"
msgstr "„%s“ не може да се изтрие"
-#: rerere.c:1087
+#: rerere.c:1071
#, c-format
msgid "Updated preimage for '%s'"
msgstr "Предварителният вариант на „%s“ е обновен"
-#: rerere.c:1096
+#: rerere.c:1080
#, c-format
msgid "Forgot resolution for '%s'\n"
msgstr "Запазената корекция на конфликт при „%s“ е премахната\n"
-#: rerere.c:1199
+#: rerere.c:1191
msgid "unable to open rr-cache directory"
msgstr "директорията „rr-cache“ не може да се отвори"
@@ -6926,45 +7557,40 @@
msgid "could not determine HEAD revision"
msgstr "не може да се определи към какво да сочи указателят „HEAD“"
-#: reset.c:70 reset.c:76 sequencer.c:3460
+#: reset.c:70 reset.c:76 sequencer.c:3468
#, c-format
msgid "failed to find tree of %s"
msgstr "дървото, сочено от „%s“, не може да бъде открито"
-#: revision.c:2336
+#: revision.c:2338
msgid "--unpacked=<packfile> no longer supported"
msgstr "опцията „--unpacked=ПАКЕТЕН_ФАЙЛ“ вече не се поддържа"
-#: revision.c:2356
-#, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr "непозната стойност за опцията „--diff-merges“: „%s“"
-
-#: revision.c:2694
+#: revision.c:2668
msgid "your current branch appears to be broken"
msgstr "Текущият клон е повреден"
-#: revision.c:2697
+#: revision.c:2671
#, c-format
msgid "your current branch '%s' does not have any commits yet"
msgstr "Текущият клон „%s“ е без подавания "
-#: revision.c:2907
+#: revision.c:2877
msgid "-L does not yet support diff formats besides -p and -s"
msgstr ""
"опцията „-L“ поддържа единствено форматирането на разликите според опциите „-"
"p“ и „-s“"
-#: run-command.c:764
+#: run-command.c:767
msgid "open /dev/null failed"
msgstr "неуспешно отваряне на „/dev/null“"
-#: run-command.c:1271
+#: run-command.c:1274
#, c-format
msgid "cannot create async thread: %s"
msgstr "не може да се създаде асинхронна нишка: %s"
-#: run-command.c:1335
+#: run-command.c:1338
#, c-format
msgid ""
"The '%s' hook was ignored because it's not set as executable.\n"
@@ -7030,7 +7656,7 @@
msgid "could not delete '%s'"
msgstr "„%s“ не може да бъде изтрит"
-#: sequencer.c:343 builtin/rebase.c:755 builtin/rebase.c:1596 builtin/rm.c:385
+#: sequencer.c:343 builtin/rebase.c:757 builtin/rebase.c:1602 builtin/rm.c:385
#, c-format
msgid "could not remove '%s'"
msgstr "„%s“ не може да бъде изтрит"
@@ -7070,13 +7696,13 @@
"пътища с „git add ПЪТ…“ или „git rm ПЪТ…“, след което\n"
"подайте резултата с командата „git commit'“."
-#: sequencer.c:434 sequencer.c:3062
+#: sequencer.c:434 sequencer.c:3070
#, c-format
msgid "could not lock '%s'"
msgstr "„%s“ не може да се заключи"
-#: sequencer.c:436 sequencer.c:2861 sequencer.c:3066 sequencer.c:3080
-#: sequencer.c:3337 sequencer.c:5326 strbuf.c:1168 wrapper.c:631
+#: sequencer.c:436 sequencer.c:2869 sequencer.c:3074 sequencer.c:3088
+#: sequencer.c:3345 sequencer.c:5334 strbuf.c:1168 wrapper.c:631
#, c-format
msgid "could not write to '%s'"
msgstr "в „%s“ не може да се пише"
@@ -7086,8 +7712,8 @@
msgid "could not write eol to '%s'"
msgstr "краят на ред не може да се запише в „%s“"
-#: sequencer.c:446 sequencer.c:2866 sequencer.c:3068 sequencer.c:3082
-#: sequencer.c:3345
+#: sequencer.c:446 sequencer.c:2874 sequencer.c:3076 sequencer.c:3090
+#: sequencer.c:3353
#, c-format
msgid "failed to finalize '%s'"
msgstr "„%s“ не може да се завърши"
@@ -7106,7 +7732,7 @@
msgid "%s: fast-forward"
msgstr "%s: превъртане"
-#: sequencer.c:560 builtin/tag.c:566
+#: sequencer.c:560 builtin/tag.c:598
#, c-format
msgid "Invalid cleanup mode %s"
msgstr "Несъществуващ режим на изчистване „%s“"
@@ -7119,60 +7745,60 @@
msgid "%s: Unable to write new index file"
msgstr "%s: новият индекс не може да бъде запазен"
-#: sequencer.c:687
+#: sequencer.c:684
msgid "unable to update cache tree"
msgstr "дървото на кеша не може да бъде обновено"
-#: sequencer.c:701
+#: sequencer.c:698
msgid "could not resolve HEAD commit"
msgstr "подаването, сочено от указателя „HEAD“, не може да бъде открито"
-#: sequencer.c:781
+#: sequencer.c:778
#, c-format
msgid "no key present in '%.*s'"
msgstr "в „%.*s“ няма ключове"
-#: sequencer.c:792
+#: sequencer.c:789
#, c-format
msgid "unable to dequote value of '%s'"
msgstr "цитирането на стойността на „%s“ не може да бъде изчистено"
-#: sequencer.c:829 wrapper.c:201 wrapper.c:371 builtin/am.c:710
-#: builtin/am.c:802 builtin/merge.c:1135 builtin/rebase.c:908
+#: sequencer.c:826 wrapper.c:201 wrapper.c:371 builtin/am.c:710
+#: builtin/am.c:802 builtin/merge.c:1136 builtin/rebase.c:910
#, c-format
msgid "could not open '%s' for reading"
msgstr "файлът не може да бъде прочетен: „%s“"
-#: sequencer.c:839
+#: sequencer.c:836
msgid "'GIT_AUTHOR_NAME' already given"
msgstr "настройката за автор „GIT_AUTHOR_NAME“ вече е зададена"
-#: sequencer.c:844
+#: sequencer.c:841
msgid "'GIT_AUTHOR_EMAIL' already given"
msgstr "настройката за е-поща „GIT_AUTHOR_EMAIL“ вече е зададена"
-#: sequencer.c:849
+#: sequencer.c:846
msgid "'GIT_AUTHOR_DATE' already given"
msgstr "настройката за дата „GIT_AUTHOR_DATE“ вече е зададена"
-#: sequencer.c:853
+#: sequencer.c:850
#, c-format
msgid "unknown variable '%s'"
msgstr "непозната променлива „%s“"
-#: sequencer.c:858
+#: sequencer.c:855
msgid "missing 'GIT_AUTHOR_NAME'"
msgstr "настройката за автор „GIT_AUTHOR_NAME“ липсва"
-#: sequencer.c:860
+#: sequencer.c:857
msgid "missing 'GIT_AUTHOR_EMAIL'"
msgstr "настройката за е-поща „GIT_AUTHOR_EMAIL“ липсва"
-#: sequencer.c:862
+#: sequencer.c:859
msgid "missing 'GIT_AUTHOR_DATE'"
msgstr "настройката за дата „GIT_AUTHOR_DATE“ липсва"
-#: sequencer.c:927
+#: sequencer.c:924
#, c-format
msgid ""
"you have staged changes in your working tree\n"
@@ -7201,13 +7827,13 @@
"\n"
" git rebase --continue\n"
-#: sequencer.c:1208
+#: sequencer.c:1211
msgid "'prepare-commit-msg' hook failed"
msgstr ""
"неуспешно изпълнение на куката при промяна на съобщението при подаване "
"(prepare-commit-msg)"
-#: sequencer.c:1214
+#: sequencer.c:1217
msgid ""
"Your name and email address were configured automatically based\n"
"on your username and hostname. Please check that they are accurate.\n"
@@ -7236,7 +7862,7 @@
"\n"
" git commit --amend --reset-author\n"
-#: sequencer.c:1227
+#: sequencer.c:1230
msgid ""
"Your name and email address were configured automatically based\n"
"on your username and hostname. Please check that they are accurate.\n"
@@ -7262,351 +7888,351 @@
"\n"
" git commit --amend --reset-author\n"
-#: sequencer.c:1269
+#: sequencer.c:1272
msgid "couldn't look up newly created commit"
msgstr "току що създаденото подаване не може да бъде открито"
-#: sequencer.c:1271
+#: sequencer.c:1274
msgid "could not parse newly created commit"
msgstr "току що създаденото подаване не може да бъде анализирано"
-#: sequencer.c:1317
+#: sequencer.c:1320
msgid "unable to resolve HEAD after creating commit"
msgstr ""
"състоянието сочено от указателя „HEAD“ не може да бъде открито след "
"подаването"
-#: sequencer.c:1319
+#: sequencer.c:1322
msgid "detached HEAD"
msgstr "несвързан връх „HEAD“"
-#: sequencer.c:1323
+#: sequencer.c:1326
msgid " (root-commit)"
msgstr " (начално подаване)"
-#: sequencer.c:1344
+#: sequencer.c:1347
msgid "could not parse HEAD"
msgstr "указателят „HEAD“ не може да бъде анализиран"
-#: sequencer.c:1346
+#: sequencer.c:1349
#, c-format
msgid "HEAD %s is not a commit!"
msgstr "указателят „HEAD“ „%s“ сочи към нещо, което не е подаване!"
-#: sequencer.c:1350 sequencer.c:1425 builtin/commit.c:1577
+#: sequencer.c:1353 sequencer.c:1431 builtin/commit.c:1577
msgid "could not parse HEAD commit"
msgstr "върховото подаване „HEAD“ не може да бъде прочетено"
-#: sequencer.c:1403 sequencer.c:2100
+#: sequencer.c:1409 sequencer.c:2108
msgid "unable to parse commit author"
msgstr "авторът на подаването не може да бъде анализиран"
-#: sequencer.c:1414 builtin/am.c:1566 builtin/merge.c:701
+#: sequencer.c:1420 builtin/am.c:1566 builtin/merge.c:702
msgid "git write-tree failed to write a tree"
msgstr "Командата „git write-tree“ не успя да запише обект-дърво"
-#: sequencer.c:1447 sequencer.c:1565
+#: sequencer.c:1453 sequencer.c:1573
#, c-format
msgid "unable to read commit message from '%s'"
msgstr "съобщението за подаване не може да бъде прочетено от „%s“"
-#: sequencer.c:1476 sequencer.c:1508
+#: sequencer.c:1484 sequencer.c:1516
#, c-format
msgid "invalid author identity '%s'"
msgstr "неправилна самоличност за автор: „%s“"
-#: sequencer.c:1482
+#: sequencer.c:1490
msgid "corrupt author: missing date information"
msgstr "повредена информация за автор: липсва дата"
-#: sequencer.c:1521 builtin/am.c:1593 builtin/commit.c:1678 builtin/merge.c:904
-#: builtin/merge.c:929 t/helper/test-fast-rebase.c:78
+#: sequencer.c:1529 builtin/am.c:1593 builtin/commit.c:1678 builtin/merge.c:905
+#: builtin/merge.c:930 t/helper/test-fast-rebase.c:78
msgid "failed to write commit object"
msgstr "обектът за подаването не може да бъде записан"
-#: sequencer.c:1548 sequencer.c:4283 t/helper/test-fast-rebase.c:198
+#: sequencer.c:1556 sequencer.c:4291 t/helper/test-fast-rebase.c:198
#, c-format
msgid "could not update %s"
msgstr "„%s“ не може да се обнови"
-#: sequencer.c:1597
+#: sequencer.c:1605
#, c-format
msgid "could not parse commit %s"
msgstr "подаването „%s“ не може да бъде анализирано"
-#: sequencer.c:1602
+#: sequencer.c:1610
#, c-format
msgid "could not parse parent commit %s"
msgstr "родителското подаване „%s“ не може да бъде анализирано"
-#: sequencer.c:1685 sequencer.c:1796
+#: sequencer.c:1693 sequencer.c:1804
#, c-format
msgid "unknown command: %d"
msgstr "непозната команда: %d"
-#: sequencer.c:1743 sequencer.c:1768
+#: sequencer.c:1751 sequencer.c:1776
#, c-format
msgid "This is a combination of %d commits."
msgstr "Това е обединение от %d подавания"
-#: sequencer.c:1753
+#: sequencer.c:1761
msgid "need a HEAD to fixup"
msgstr "За вкарване в предходното подаване ви трябва указател „HEAD“"
-#: sequencer.c:1755 sequencer.c:3372
+#: sequencer.c:1763 sequencer.c:3380
msgid "could not read HEAD"
msgstr "указателят „HEAD“ не може да се прочете"
-#: sequencer.c:1757
+#: sequencer.c:1765
msgid "could not read HEAD's commit message"
msgstr ""
"съобщението за подаване към указателя „HEAD“ не може да бъде прочетено: %s"
-#: sequencer.c:1763
+#: sequencer.c:1771
#, c-format
msgid "cannot write '%s'"
msgstr "„%s“ не може да се запази"
-#: sequencer.c:1770 git-rebase--preserve-merges.sh:486
+#: sequencer.c:1778 git-rebase--preserve-merges.sh:486
msgid "This is the 1st commit message:"
msgstr "Това е 1-то съобщение при подаване:"
-#: sequencer.c:1778
+#: sequencer.c:1786
#, c-format
msgid "could not read commit message of %s"
msgstr "съобщението за подаване към „%s“ не може да бъде прочетено"
-#: sequencer.c:1785
+#: sequencer.c:1793
#, c-format
msgid "This is the commit message #%d:"
msgstr "Това е съобщение при подаване №%d:"
-#: sequencer.c:1791
+#: sequencer.c:1799
#, c-format
msgid "The commit message #%d will be skipped:"
msgstr "Съобщение при подаване №%d ще бъде прескочено:"
-#: sequencer.c:1879
+#: sequencer.c:1887
msgid "your index file is unmerged."
msgstr "индексът не е слят."
-#: sequencer.c:1886
+#: sequencer.c:1894
msgid "cannot fixup root commit"
msgstr "началното подаване не може да се вкара в предходното му"
-#: sequencer.c:1905
+#: sequencer.c:1913
#, c-format
msgid "commit %s is a merge but no -m option was given."
msgstr "подаването „%s“ е сливане, но не е дадена опцията „-m“"
-#: sequencer.c:1913 sequencer.c:1921
+#: sequencer.c:1921 sequencer.c:1929
#, c-format
msgid "commit %s does not have parent %d"
msgstr "подаването „%s“ няма родител %d"
-#: sequencer.c:1927
+#: sequencer.c:1935
#, 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:1946
+#: sequencer.c:1954
#, c-format
msgid "%s: cannot parse parent commit %s"
msgstr "%s: неразпозната стойност за родителското подаване „%s“"
-#: sequencer.c:2011
+#: sequencer.c:2019
#, c-format
msgid "could not rename '%s' to '%s'"
msgstr "„%s“ не може да се преименува на „%s“"
-#: sequencer.c:2071
+#: sequencer.c:2079
#, c-format
msgid "could not revert %s... %s"
msgstr "подаването „%s“… не може да бъде отменено: „%s“"
-#: sequencer.c:2072
+#: sequencer.c:2080
#, c-format
msgid "could not apply %s... %s"
msgstr "подаването „%s“… не може да бъде приложено: „%s“"
-#: sequencer.c:2092
+#: sequencer.c:2100
#, c-format
msgid "dropping %s %s -- patch contents already upstream\n"
msgstr "прескачане на %s %s — кръпката вече е приложена\n"
-#: sequencer.c:2150
+#: sequencer.c:2158
#, c-format
msgid "git %s: failed to read the index"
msgstr "git %s: неуспешно изчитане на индекса"
-#: sequencer.c:2157
+#: sequencer.c:2165
#, c-format
msgid "git %s: failed to refresh the index"
msgstr "git %s: неуспешно обновяване на индекса"
-#: sequencer.c:2234
+#: sequencer.c:2242
#, c-format
msgid "%s does not accept arguments: '%s'"
msgstr "„%s“ не приема аргументи: „%s“"
-#: sequencer.c:2243
+#: sequencer.c:2251
#, c-format
msgid "missing arguments for %s"
msgstr "„%s“ изисква аргументи"
-#: sequencer.c:2274
+#: sequencer.c:2282
#, c-format
msgid "could not parse '%s'"
msgstr "„%s“ не може да се анализира"
-#: sequencer.c:2335
+#: sequencer.c:2343
#, c-format
msgid "invalid line %d: %.*s"
msgstr "неправилен ред %d: %.*s"
-#: sequencer.c:2346
+#: sequencer.c:2354
#, c-format
msgid "cannot '%s' without a previous commit"
msgstr "Без предишно подаване не може да се изпълни „%s“"
-#: sequencer.c:2432
+#: sequencer.c:2440
msgid "cancelling a cherry picking in progress"
msgstr "преустановяване на извършваното в момента отбиране на подавания"
-#: sequencer.c:2441
+#: sequencer.c:2449
msgid "cancelling a revert in progress"
msgstr "преустановяване на извършваното в момента отмяна на подаване"
-#: sequencer.c:2485
+#: sequencer.c:2493
msgid "please fix this using 'git rebase --edit-todo'."
msgstr "коригирайте това чрез „git rebase --edit-todo“."
-#: sequencer.c:2487
+#: sequencer.c:2495
#, c-format
msgid "unusable instruction sheet: '%s'"
msgstr "неизползваем файл с описание на предстоящите действия: „%s“"
-#: sequencer.c:2492
+#: sequencer.c:2500
msgid "no commits parsed."
msgstr "никое от подаванията не може да се разпознае."
-#: sequencer.c:2503
+#: sequencer.c:2511
msgid "cannot cherry-pick during a revert."
msgstr ""
"по време на отмяна на подаване не може да се извърши отбиране на подаване."
-#: sequencer.c:2505
+#: sequencer.c:2513
msgid "cannot revert during a cherry-pick."
msgstr "по време на отбиране не може да се извърши отмяна на подаване."
-#: sequencer.c:2583
+#: sequencer.c:2591
#, c-format
msgid "invalid value for %s: %s"
msgstr "неправилна стойност за „%s“: „%s“"
-#: sequencer.c:2690
+#: sequencer.c:2698
msgid "unusable squash-onto"
msgstr "подаването, в което другите да се вкарат, не може да се използва"
-#: sequencer.c:2710
+#: sequencer.c:2718
#, c-format
msgid "malformed options sheet: '%s'"
msgstr "неправилен файл с опции: „%s“"
-#: sequencer.c:2803 sequencer.c:4636
+#: sequencer.c:2811 sequencer.c:4644
msgid "empty commit set passed"
msgstr "зададено е празно множество от подавания"
-#: sequencer.c:2820
+#: sequencer.c:2828
msgid "revert is already in progress"
msgstr "в момента вече се извършва отмяна на подавания"
-#: sequencer.c:2822
+#: sequencer.c:2830
#, c-format
msgid "try \"git revert (--continue | %s--abort | --quit)\""
msgstr "използвайте „git cherry-pick (--continue | %s--abort | --quit)“"
-#: sequencer.c:2825
+#: sequencer.c:2833
msgid "cherry-pick is already in progress"
msgstr "в момента вече се извършва отбиране на подавания"
-#: sequencer.c:2827
+#: sequencer.c:2835
#, c-format
msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
msgstr "използвайте „git cherry-pick (--continue | %s--abort | --quit)“"
-#: sequencer.c:2841
+#: sequencer.c:2849
#, c-format
msgid "could not create sequencer directory '%s'"
msgstr ""
"директорията за определянето на последователността „%s“ не може да бъде "
"създадена"
-#: sequencer.c:2856
+#: sequencer.c:2864
msgid "could not lock HEAD"
msgstr "указателят „HEAD“ не може да се заключи"
-#: sequencer.c:2916 sequencer.c:4371
+#: sequencer.c:2924 sequencer.c:4379
msgid "no cherry-pick or revert in progress"
msgstr ""
"в момента не се извършва отбиране на подавания или пребазиране на клона"
-#: sequencer.c:2918 sequencer.c:2929
+#: sequencer.c:2926 sequencer.c:2937
msgid "cannot resolve HEAD"
msgstr "Подаването сочено от указателя „HEAD“ не може да бъде открито"
-#: sequencer.c:2920 sequencer.c:2964
+#: sequencer.c:2928 sequencer.c:2972
msgid "cannot abort from a branch yet to be born"
msgstr ""
"действието не може да бъде преустановено, когато сте на клон, който тепърва "
"предстои да бъде създаден"
-#: sequencer.c:2950 builtin/grep.c:756
+#: sequencer.c:2958 builtin/grep.c:757
#, c-format
msgid "cannot open '%s'"
msgstr "„%s“ не може да бъде отворен"
-#: sequencer.c:2952
+#: sequencer.c:2960
#, c-format
msgid "cannot read '%s': %s"
msgstr "„%s“ не може да бъде прочетен: %s"
-#: sequencer.c:2953
+#: sequencer.c:2961
msgid "unexpected end of file"
msgstr "неочакван край на файл"
-#: sequencer.c:2959
+#: sequencer.c:2967
#, c-format
msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
msgstr ""
"запазеният преди започването на отбирането файл за указателя „HEAD“ — „%s“ е "
"повреден"
-#: sequencer.c:2970
+#: sequencer.c:2978
msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
msgstr ""
"Изглежда указателят „HEAD“ е променен. Проверете към какво сочи.\n"
"Не се правят промени."
-#: sequencer.c:3011
+#: sequencer.c:3019
msgid "no revert in progress"
msgstr "в момента не тече пребазиране"
-#: sequencer.c:3020
+#: sequencer.c:3028
msgid "no cherry-pick in progress"
msgstr "в момента не се извършва отбиране на подавания"
-#: sequencer.c:3030
+#: sequencer.c:3038
msgid "failed to skip the commit"
msgstr "неуспешно прескачане на подаването"
-#: sequencer.c:3037
+#: sequencer.c:3045
msgid "there is nothing to skip"
msgstr "няма какво да се прескочи"
-#: sequencer.c:3040
+#: sequencer.c:3048
#, c-format
msgid ""
"have you committed already?\n"
@@ -7616,16 +8242,16 @@
"\n"
" git %s --continue"
-#: sequencer.c:3202 sequencer.c:4263
+#: sequencer.c:3210 sequencer.c:4271
msgid "cannot read HEAD"
msgstr "указателят „HEAD“ не може да бъде прочетен"
-#: sequencer.c:3219
+#: sequencer.c:3227
#, c-format
msgid "unable to copy '%s' to '%s'"
msgstr "„%s“ не може да се копира като „%s“"
-#: sequencer.c:3227
+#: sequencer.c:3235
#, c-format
msgid ""
"You can amend the commit now, with\n"
@@ -7644,27 +8270,27 @@
"\n"
" git rebase --continue\n"
-#: sequencer.c:3237
+#: sequencer.c:3245
#, c-format
msgid "Could not apply %s... %.*s"
msgstr "Подаването „%s“… не може да бъде приложено: „%.*s“"
-#: sequencer.c:3244
+#: sequencer.c:3252
#, c-format
msgid "Could not merge %.*s"
msgstr "Невъзможно сливане на „%.*s“"
-#: sequencer.c:3258 sequencer.c:3262 builtin/difftool.c:640
+#: sequencer.c:3266 sequencer.c:3270 builtin/difftool.c:640
#, c-format
msgid "could not copy '%s' to '%s'"
msgstr "„%s“ не може да се копира като „%s“"
-#: sequencer.c:3274
+#: sequencer.c:3282
#, c-format
msgid "Executing: %s\n"
msgstr "В момента се изпълнява: %s\n"
-#: sequencer.c:3289
+#: sequencer.c:3297
#, c-format
msgid ""
"execution failed: %s\n"
@@ -7679,11 +8305,11 @@
" git rebase --continue\n"
"\n"
-#: sequencer.c:3295
+#: sequencer.c:3303
msgid "and made changes to the index and/or the working tree\n"
msgstr "и променѝ индекса и/или работното дърво\n"
-#: sequencer.c:3301
+#: sequencer.c:3309
#, c-format
msgid ""
"execution succeeded: %s\n"
@@ -7700,90 +8326,90 @@
" git rebase --continue\n"
"\n"
-#: sequencer.c:3362
+#: sequencer.c:3370
#, c-format
msgid "illegal label name: '%.*s'"
msgstr "неправилно име на етикет: „%.*s“"
-#: sequencer.c:3416
+#: sequencer.c:3424
msgid "writing fake root commit"
msgstr "запазване на фалшиво начално подаване"
-#: sequencer.c:3421
+#: sequencer.c:3429
msgid "writing squash-onto"
msgstr "запазване на подаването, в което другите да се вкарат"
-#: sequencer.c:3505
+#: sequencer.c:3513
#, c-format
msgid "could not resolve '%s'"
msgstr "„%s“ не може да бъде открит"
-#: sequencer.c:3538
+#: sequencer.c:3546
msgid "cannot merge without a current revision"
msgstr "без текущо подаване не може да се слива"
-#: sequencer.c:3560
+#: sequencer.c:3568
#, c-format
msgid "unable to parse '%.*s'"
msgstr "„%.*s“ не може да се анализира"
-#: sequencer.c:3569
+#: sequencer.c:3577
#, c-format
msgid "nothing to merge: '%.*s'"
msgstr "няма нищо за сливане: „%.*s“"
-#: sequencer.c:3581
+#: sequencer.c:3589
msgid "octopus merge cannot be executed on top of a [new root]"
msgstr "върху начално подаване не може да се извърши множествено сливане"
-#: sequencer.c:3597
+#: sequencer.c:3605
#, c-format
msgid "could not get commit message of '%s'"
msgstr "съобщението за подаване към „%s“ не може да бъде получено"
-#: sequencer.c:3780
+#: sequencer.c:3788
#, c-format
msgid "could not even attempt to merge '%.*s'"
msgstr "сливането на „%.*s“ не може даже да започне"
-#: sequencer.c:3796
+#: sequencer.c:3804
msgid "merge: Unable to write new index file"
msgstr "сливане: новият индекс не може да бъде запазен"
-#: sequencer.c:3870
+#: sequencer.c:3878
msgid "Cannot autostash"
msgstr "Не може да се скатае автоматично"
-#: sequencer.c:3873
+#: sequencer.c:3881
#, c-format
msgid "Unexpected stash response: '%s'"
msgstr "Неочакван резултат при скатаване: „%s“"
-#: sequencer.c:3879
+#: sequencer.c:3887
#, c-format
msgid "Could not create directory for '%s'"
msgstr "Директорията за „%s“ не може да бъде създадена"
-#: sequencer.c:3882
+#: sequencer.c:3890
#, c-format
msgid "Created autostash: %s\n"
msgstr "Автоматично скатано: „%s“\n"
-#: sequencer.c:3886
+#: sequencer.c:3894
msgid "could not reset --hard"
msgstr "неуспешно изпълнение на „git reset --hard“"
-#: sequencer.c:3911
+#: sequencer.c:3919
#, c-format
msgid "Applied autostash.\n"
msgstr "Автоматично скатаното е приложено.\n"
-#: sequencer.c:3923
+#: sequencer.c:3931
#, c-format
msgid "cannot store %s"
msgstr "„%s“ не може да бъде запазен"
-#: sequencer.c:3926
+#: sequencer.c:3934
#, c-format
msgid ""
"%s\n"
@@ -7795,29 +8421,29 @@
"„git stash pop“ или да ги изхвърлите чрез „git stash drop“, когато "
"поискате.\n"
-#: sequencer.c:3931
+#: sequencer.c:3939
msgid "Applying autostash resulted in conflicts."
msgstr "Конфликти при прилагането на автоматично скатаното."
-#: sequencer.c:3932
+#: sequencer.c:3940
msgid "Autostash exists; creating a new stash entry."
msgstr "Вече има запис за автоматично скатано, затова се създава нов запис."
-#: sequencer.c:4025 git-rebase--preserve-merges.sh:769
+#: sequencer.c:4033 git-rebase--preserve-merges.sh:769
msgid "could not detach HEAD"
msgstr "указателят „HEAD“ не може да се отдели"
-#: sequencer.c:4040
+#: sequencer.c:4048
#, c-format
msgid "Stopped at HEAD\n"
msgstr "Бе спряно при „HEAD“\n"
-#: sequencer.c:4042
+#: sequencer.c:4050
#, c-format
msgid "Stopped at %s\n"
msgstr "Бе спряно при „%s“\n"
-#: sequencer.c:4050
+#: sequencer.c:4058
#, c-format
msgid ""
"Could not execute the todo command\n"
@@ -7840,58 +8466,58 @@
" git rebase --edit-todo\n"
" git rebase --continue\n"
-#: sequencer.c:4096
+#: sequencer.c:4104
#, c-format
msgid "Rebasing (%d/%d)%s"
msgstr "Пребазиране (%d/%d)%s"
-#: sequencer.c:4141
+#: sequencer.c:4149
#, c-format
msgid "Stopped at %s... %.*s\n"
msgstr "Спиране при „%s“… %.*s\n"
-#: sequencer.c:4212
+#: sequencer.c:4220
#, c-format
msgid "unknown command %d"
msgstr "непозната команда %d"
-#: sequencer.c:4271
+#: sequencer.c:4279
msgid "could not read orig-head"
msgstr "указателят за „orig-head“ не може да се прочете"
-#: sequencer.c:4276
+#: sequencer.c:4284
msgid "could not read 'onto'"
msgstr "указателят за „onto“ не може да се прочете"
-#: sequencer.c:4290
+#: sequencer.c:4298
#, c-format
msgid "could not update HEAD to %s"
msgstr "„HEAD“ не може да бъде обновен до „%s“"
-#: sequencer.c:4350
+#: sequencer.c:4358
#, c-format
msgid "Successfully rebased and updated %s.\n"
msgstr "Успешно пребазиране и обновяване на „%s“.\n"
-#: sequencer.c:4383
+#: sequencer.c:4391
msgid "cannot rebase: You have unstaged changes."
msgstr "не може да пребазирате, защото има промени, които не са в индекса."
-#: sequencer.c:4392
+#: sequencer.c:4400
msgid "cannot amend non-existing commit"
msgstr "несъществуващо подаване не може да се поправи"
-#: sequencer.c:4394
+#: sequencer.c:4402
#, c-format
msgid "invalid file: '%s'"
msgstr "неправилен файл: „%s“"
-#: sequencer.c:4396
+#: sequencer.c:4404
#, c-format
msgid "invalid contents: '%s'"
msgstr "неправилно съдържание: „%s“"
-#: sequencer.c:4399
+#: sequencer.c:4407
msgid ""
"\n"
"You have uncommitted changes in your working tree. Please, commit them\n"
@@ -7901,50 +8527,50 @@
"В работното дърво има неподадени промени. Първо ги подайте, а след това\n"
"отново изпълнете „git rebase --continue“."
-#: sequencer.c:4435 sequencer.c:4474
+#: sequencer.c:4443 sequencer.c:4482
#, c-format
msgid "could not write file: '%s'"
msgstr "файлът „%s“ не може да бъде записан"
-#: sequencer.c:4490
+#: sequencer.c:4498
msgid "could not remove CHERRY_PICK_HEAD"
msgstr "указателят „CHERRY_PICK_HEAD“ не може да бъде изтрит"
-#: sequencer.c:4497
+#: sequencer.c:4505
msgid "could not commit staged changes."
msgstr "промените в индекса не могат да бъдат подадени."
-#: sequencer.c:4613
+#: sequencer.c:4621
#, c-format
msgid "%s: can't cherry-pick a %s"
msgstr "%s: не може да се отбере „%s“"
-#: sequencer.c:4617
+#: sequencer.c:4625
#, c-format
msgid "%s: bad revision"
msgstr "%s: неправилна версия"
-#: sequencer.c:4652
+#: sequencer.c:4660
msgid "can't revert as initial commit"
msgstr "първоначалното подаване не може да бъде отменено"
-#: sequencer.c:5129
+#: sequencer.c:5137
msgid "make_script: unhandled options"
msgstr "make_script: неподдържани опции"
-#: sequencer.c:5132
+#: sequencer.c:5140
msgid "make_script: error preparing revisions"
msgstr "make_script: грешка при подготовката на версии"
-#: sequencer.c:5374 sequencer.c:5391
+#: sequencer.c:5382 sequencer.c:5399
msgid "nothing to do"
msgstr "няма какво да се прави"
-#: sequencer.c:5410
+#: sequencer.c:5418
msgid "could not skip unnecessary pick commands"
msgstr "излишните команди за отбиране не бяха прескочени"
-#: sequencer.c:5504
+#: sequencer.c:5512
msgid "the script was already rearranged."
msgstr "скриптът вече е преподреден."
@@ -8119,368 +8745,6 @@
msgid "setsid failed"
msgstr "неуспешно изпълнение на „setsid“"
-#: sha1-file.c:480
-#, c-format
-msgid "object directory %s does not exist; check .git/objects/info/alternates"
-msgstr ""
-"директорията за обекти „%s“ не съществува, проверете „.git/objects/info/"
-"alternates“"
-
-#: sha1-file.c:531
-#, c-format
-msgid "unable to normalize alternate object path: %s"
-msgstr "алтернативният път към обекти не може да бъде нормализиран: „%s“"
-
-#: sha1-file.c:603
-#, c-format
-msgid "%s: ignoring alternate object stores, nesting too deep"
-msgstr ""
-"%s: алтернативните хранилища за обекти се пренебрегват поради прекалено "
-"дълбоко влагане"
-
-#: sha1-file.c:610
-#, c-format
-msgid "unable to normalize object directory: %s"
-msgstr "директорията за обекти „%s“ не може да бъде нормализирана"
-
-#: sha1-file.c:653
-msgid "unable to fdopen alternates lockfile"
-msgstr "заключващият файл за алтернативите не може да се отвори с „fdopen“"
-
-#: sha1-file.c:671
-msgid "unable to read alternates file"
-msgstr "файлът с алтернативите не може да бъде прочетен"
-
-#: sha1-file.c:678
-msgid "unable to move new alternates file into place"
-msgstr "новият файл с алтернативите не може да бъде преместен на мястото му"
-
-#: sha1-file.c:713
-#, c-format
-msgid "path '%s' does not exist"
-msgstr "пътят „%s“ не съществува."
-
-#: sha1-file.c:734
-#, c-format
-msgid "reference repository '%s' as a linked checkout is not supported yet."
-msgstr "все още не се поддържа еталонно хранилище „%s“ като свързано."
-
-#: sha1-file.c:740
-#, c-format
-msgid "reference repository '%s' is not a local repository."
-msgstr "еталонното хранилище „%s“ не е локално"
-
-#: sha1-file.c:746
-#, c-format
-msgid "reference repository '%s' is shallow"
-msgstr "еталонното хранилище „%s“ е плитко"
-
-#: sha1-file.c:754
-#, c-format
-msgid "reference repository '%s' is grafted"
-msgstr "еталонното хранилище „%s“ е с присаждане"
-
-#: sha1-file.c:814
-#, c-format
-msgid "invalid line while parsing alternate refs: %s"
-msgstr "неправилен ред при анализа на алтернативните указатели: „%s“"
-
-#: sha1-file.c:964
-#, c-format
-msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
-msgstr ""
-"неуспешен опит за „mmap“ %<PRIuMAX>, което е над позволеното %<PRIuMAX>"
-
-#: sha1-file.c:985
-msgid "mmap failed"
-msgstr "неуспешно изпълнение на „mmap“"
-
-#: sha1-file.c:1149
-#, c-format
-msgid "object file %s is empty"
-msgstr "файлът с обектите „%s“ е празен"
-
-#: sha1-file.c:1284 sha1-file.c:2477
-#, c-format
-msgid "corrupt loose object '%s'"
-msgstr "непакетираният обект „%s“ е повреден"
-
-#: sha1-file.c:1286 sha1-file.c:2481
-#, c-format
-msgid "garbage at end of loose object '%s'"
-msgstr "грешни данни в края на непакетирания обект „%s“"
-
-#: sha1-file.c:1328
-msgid "invalid object type"
-msgstr "неправилен вид обект"
-
-#: sha1-file.c:1412
-#, c-format
-msgid "unable to unpack %s header with --allow-unknown-type"
-msgstr ""
-"заглавната част „%s“ не може да се разпакетира с опцията „--allow-unknown-"
-"type“"
-
-#: sha1-file.c:1415
-#, c-format
-msgid "unable to unpack %s header"
-msgstr "заглавната част на „%s“ не може да бъде разпакетирана"
-
-#: sha1-file.c:1421
-#, c-format
-msgid "unable to parse %s header with --allow-unknown-type"
-msgstr ""
-"заглавната част „%s“ не може да се анализира с опцията „--allow-unknown-type“"
-
-#: sha1-file.c:1424
-#, c-format
-msgid "unable to parse %s header"
-msgstr "заглавната част на „%s“ не може да бъде анализирана"
-
-#: sha1-file.c:1651
-#, c-format
-msgid "failed to read object %s"
-msgstr "обектът „%s“ не може да бъде прочетен"
-
-#: sha1-file.c:1655
-#, c-format
-msgid "replacement %s not found for %s"
-msgstr "заместителят „%s“ на „%s“ не може да бъде открит"
-
-#: sha1-file.c:1659
-#, c-format
-msgid "loose object %s (stored in %s) is corrupt"
-msgstr "непакетираният обект „%s“ (в „%s“) е повреден"
-
-#: sha1-file.c:1663
-#, c-format
-msgid "packed object %s (stored in %s) is corrupt"
-msgstr "пакетираният обект „%s“ (в „%s“) е повреден"
-
-#: sha1-file.c:1768
-#, c-format
-msgid "unable to write file %s"
-msgstr "файлът „%s“ не може да бъде записан"
-
-#: sha1-file.c:1775
-#, c-format
-msgid "unable to set permission to '%s'"
-msgstr "правата за достъп до „%s“ не могат да бъдат зададени"
-
-#: sha1-file.c:1782
-msgid "file write error"
-msgstr "грешка при запис на файл"
-
-#: sha1-file.c:1802
-msgid "error when closing loose object file"
-msgstr "грешка при затварянето на файла с непакетиран обект"
-
-#: sha1-file.c:1867
-#, c-format
-msgid "insufficient permission for adding an object to repository database %s"
-msgstr ""
-"няма права за добавяне на обект към базата от данни на хранилището „%s“"
-
-#: sha1-file.c:1869
-msgid "unable to create temporary file"
-msgstr "не може да бъде създаден временен файл"
-
-#: sha1-file.c:1893
-msgid "unable to write loose object file"
-msgstr "грешка при записа на файла с непакетиран обект"
-
-#: sha1-file.c:1899
-#, c-format
-msgid "unable to deflate new object %s (%d)"
-msgstr "новият обект „%s“ не може да се компресира с „deflate“: %d"
-
-#: sha1-file.c:1903
-#, c-format
-msgid "deflateEnd on object %s failed (%d)"
-msgstr "неуспешно приключване на „deflate“ върху „%s“: %d"
-
-#: sha1-file.c:1907
-#, c-format
-msgid "confused by unstable object source data for %s"
-msgstr "грешка поради нестабилния източник данни за обектите „%s“"
-
-#: sha1-file.c:1917 builtin/pack-objects.c:1086
-#, c-format
-msgid "failed utime() on %s"
-msgstr "неуспешно задаване на време на достъп/създаване чрез „utime“ на „%s“"
-
-#: sha1-file.c:1994
-#, c-format
-msgid "cannot read object for %s"
-msgstr "обектът за „%s“ не може да се прочете"
-
-#: sha1-file.c:2045
-msgid "corrupt commit"
-msgstr "повредено подаване"
-
-#: sha1-file.c:2053
-msgid "corrupt tag"
-msgstr "повреден етикет"
-
-#: sha1-file.c:2153
-#, c-format
-msgid "read error while indexing %s"
-msgstr "грешка при четене по време на индексиране на „%s“"
-
-#: sha1-file.c:2156
-#, c-format
-msgid "short read while indexing %s"
-msgstr "непълно прочитане по време на индексиране на „%s“"
-
-#: sha1-file.c:2229 sha1-file.c:2239
-#, c-format
-msgid "%s: failed to insert into database"
-msgstr "„%s“ не може да се вмъкне в базата от данни"
-
-#: sha1-file.c:2245
-#, c-format
-msgid "%s: unsupported file type"
-msgstr "неподдържан вид файл: „%s“"
-
-#: sha1-file.c:2269
-#, c-format
-msgid "%s is not a valid object"
-msgstr "„%s“ е неправилен обект"
-
-#: sha1-file.c:2271
-#, c-format
-msgid "%s is not a valid '%s' object"
-msgstr "„%s“ е неправилен обект от вид „%s“"
-
-#: sha1-file.c:2298 builtin/index-pack.c:192
-#, c-format
-msgid "unable to open %s"
-msgstr "обектът „%s“ не може да бъде отворен"
-
-#: sha1-file.c:2488 sha1-file.c:2541
-#, c-format
-msgid "hash mismatch for %s (expected %s)"
-msgstr "неправилна контролна сума за „%s“ (трябва да е %s)"
-
-#: sha1-file.c:2512
-#, c-format
-msgid "unable to mmap %s"
-msgstr "неуспешно изпълнение на „mmap“ върху „%s“"
-
-#: sha1-file.c:2517
-#, c-format
-msgid "unable to unpack header of %s"
-msgstr "заглавната част на „%s“ не може да бъде разпакетирана"
-
-#: sha1-file.c:2523
-#, c-format
-msgid "unable to parse header of %s"
-msgstr "заглавната част на „%s“ не може да бъде анализирана"
-
-#: sha1-file.c:2534
-#, c-format
-msgid "unable to unpack contents of %s"
-msgstr "съдържанието на „%s“ не може да бъде разпакетирано"
-
-#: sha1-name.c:486
-#, c-format
-msgid "short SHA1 %s is ambiguous"
-msgstr "късият SHA1 „%s“ не е еднозначен"
-
-#: sha1-name.c:497
-msgid "The candidates are:"
-msgstr "Възможностите са:"
-
-#: sha1-name.c:796
-msgid ""
-"Git normally never creates a ref that ends with 40 hex characters\n"
-"because it will be ignored when you just specify 40-hex. These refs\n"
-"may be created by mistake. For example,\n"
-"\n"
-" git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
-"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
-msgstr ""
-"При нормална работа Git никога не създава указатели, които завършват\n"
-"с 40 шестнадесетични знака, защото стандартно те ще бъдат прескачани.\n"
-"Възможно е такива указатели да са създадени случайно. Например:\n"
-"\n"
-" git switch -c $BRANCH $(git rev-parse …)\n"
-"\n"
-"където стойността на променливата на средата BRANCH е празна, при което\n"
-"се създава подобен указател. Прегледайте тези указатели и ги изтрийте.\n"
-"За да изключите това съобщение, изпълнете:\n"
-"\n"
-" git config advice.objectNameWarning false"
-
-#: sha1-name.c:916
-#, c-format
-msgid "log for '%.*s' only goes back to %s"
-msgstr "журналът за „%.*s“ стига само до „%s“"
-
-#: sha1-name.c:924
-#, c-format
-msgid "log for '%.*s' only has %d entries"
-msgstr "журналът за „%.*s“ съдържа само %d записа"
-
-#: sha1-name.c:1702
-#, c-format
-msgid "path '%s' exists on disk, but not in '%.*s'"
-msgstr "пътят „%s“ съществува на диска, но не и в „%.*s“"
-
-#: sha1-name.c:1708
-#, c-format
-msgid ""
-"path '%s' exists, but not '%s'\n"
-"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
-msgstr ""
-"пътят „%s“ съществува на диска, но не е в „%s“\n"
-"Пробвайте с „%.*s:%s“, което е същото като „%.*s:./%s“."
-
-#: sha1-name.c:1717
-#, c-format
-msgid "path '%s' does not exist in '%.*s'"
-msgstr "пътят „%s“ не съществува в „%.*s“"
-
-#: sha1-name.c:1745
-#, c-format
-msgid ""
-"path '%s' is in the index, but not at stage %d\n"
-"hint: Did you mean ':%d:%s'?"
-msgstr ""
-"пътят „%s“ е в индекса, но не версия %d\n"
-"Пробвайте с „%d:%s“."
-
-#: sha1-name.c:1761
-#, c-format
-msgid ""
-"path '%s' is in the index, but not '%s'\n"
-"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
-msgstr ""
-"пътят „%s“ е в индекса, но не в „%s“\n"
-"Пробвайте с „%d:%s“, което е същото като „%d:./%s“."
-
-#: sha1-name.c:1769
-#, c-format
-msgid "path '%s' exists on disk, but not in the index"
-msgstr "пътят „%s“ съществува на диска, но не е в индекса"
-
-#: sha1-name.c:1771
-#, c-format
-msgid "path '%s' does not exist (neither on disk nor in the index)"
-msgstr "пътят „%s“ не съществува нито на диска, нито в индекса"
-
-#: sha1-name.c:1784
-msgid "relative path syntax can't be used outside working tree"
-msgstr "относителен път не може да се ползва извън работното дърво"
-
-#: sha1-name.c:1922
-#, c-format
-msgid "invalid object name '%.*s'."
-msgstr "неправилно име на обект: „%.*s“"
-
#. TRANSLATORS: IEC 80000-13:2008 gibibyte
#: strbuf.c:848
#, c-format
@@ -8534,7 +8798,7 @@
msgstr[1] "%u байта/сек."
#: strbuf.c:1166 wrapper.c:199 wrapper.c:369 builtin/am.c:719
-#: builtin/rebase.c:864
+#: builtin/rebase.c:866
#, c-format
msgid "could not open '%s' for writing"
msgstr "„%s“ не може да бъде отворен за запис"
@@ -8600,12 +8864,12 @@
msgid "Pathspec '%s' is in submodule '%.*s'"
msgstr "Пътят „%s“ е в подмодула „%.*s“"
-#: submodule.c:434
+#: submodule.c:435
#, c-format
msgid "bad --ignore-submodules argument: %s"
msgstr "неправилен аргумент за „--ignore-submodules“: „%s“"
-#: submodule.c:816
+#: submodule.c:817
#, c-format
msgid ""
"Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -8614,12 +8878,12 @@
"Подмодулът при подаване %s на пътя „%s“ е различен от другия модул със "
"същото име, затова първият се прескача."
-#: submodule.c:919
+#: submodule.c:920
#, c-format
msgid "submodule entry '%s' (%s) is a %s, not a commit"
msgstr "записът за подмодула „%s“ (%s) е %s, а не подаване!"
-#: submodule.c:1004
+#: submodule.c:1005
#, c-format
msgid ""
"Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
@@ -8628,36 +8892,36 @@
"Командата „git rev-list ПОДАВАНИЯ --not --remotes -n 1“ не може да се "
"изпълни в подмодула „%s“"
-#: submodule.c:1127
+#: submodule.c:1128
#, c-format
msgid "process for submodule '%s' failed"
msgstr "процесът за подмодула „%s“ завърши неуспешно"
-#: submodule.c:1156 builtin/branch.c:680 builtin/submodule--helper.c:2469
+#: submodule.c:1157 builtin/branch.c:689 builtin/submodule--helper.c:2469
msgid "Failed to resolve HEAD as a valid ref."
msgstr "Не може да се открие към какво сочи указателят „HEAD“"
-#: submodule.c:1167
+#: submodule.c:1168
#, c-format
msgid "Pushing submodule '%s'\n"
msgstr "Изтласкване на подмодула „%s“\n"
-#: submodule.c:1170
+#: submodule.c:1171
#, c-format
msgid "Unable to push submodule '%s'\n"
msgstr "Подмодулът „%s“ не може да бъде изтласкан\n"
-#: submodule.c:1462
+#: submodule.c:1463
#, c-format
msgid "Fetching submodule %s%s\n"
msgstr "Доставяне на подмодула „%s%s“\n"
-#: submodule.c:1492
+#: submodule.c:1497
#, c-format
msgid "Could not access submodule '%s'\n"
msgstr "Подмодулът „%s“ не може да бъде достъпен\n"
-#: submodule.c:1646
+#: submodule.c:1652
#, c-format
msgid ""
"Errors during submodule fetch:\n"
@@ -8666,63 +8930,63 @@
"Грешки при доставяне на подмодул:\n"
"%s"
-#: submodule.c:1671
+#: submodule.c:1677
#, c-format
msgid "'%s' not recognized as a git repository"
msgstr "„%s“ не е хранилище на git"
-#: submodule.c:1688
+#: submodule.c:1694
#, c-format
msgid "Could not run 'git status --porcelain=2' in submodule %s"
msgstr ""
"Командата „git status --porcelain=2“ не може да се изпълни в подмодула „%s“"
-#: submodule.c:1729
+#: submodule.c:1735
#, c-format
msgid "'git status --porcelain=2' failed in submodule %s"
msgstr ""
"командата „git status --porcelain=2“ не може да се изпълни в подмодула „%s“"
-#: submodule.c:1804
+#: submodule.c:1810
#, c-format
msgid "could not start 'git status' in submodule '%s'"
msgstr "командата „git status“ не може да се изпълни в подмодула „%s“"
-#: submodule.c:1817
+#: submodule.c:1823
#, c-format
msgid "could not run 'git status' in submodule '%s'"
msgstr "командата „git status“ не може да се изпълни в подмодула „%s“"
-#: submodule.c:1832
+#: submodule.c:1838
#, c-format
msgid "Could not unset core.worktree setting in submodule '%s'"
msgstr "Настройката „core.worktree“ не може да се изтрие в подмодула „%s“"
-#: submodule.c:1859 submodule.c:2169
+#: submodule.c:1865 submodule.c:2175
#, c-format
msgid "could not recurse into submodule '%s'"
msgstr "неуспешна обработка на поддиректориите в подмодула „%s“"
-#: submodule.c:1880
+#: submodule.c:1886
msgid "could not reset submodule index"
msgstr "неуспешно зануляване на индекса на подмодула"
-#: submodule.c:1922
+#: submodule.c:1928
#, c-format
msgid "submodule '%s' has dirty index"
msgstr "индексът на подмодула „%s“ не е чист"
-#: submodule.c:1974
+#: submodule.c:1980
#, c-format
msgid "Submodule '%s' could not be updated."
msgstr "Подмодулът „%s“ не може да се обнови."
-#: submodule.c:2042
+#: submodule.c:2048
#, c-format
msgid "submodule git dir '%s' is inside git dir '%.*s'"
msgstr "„%s“ (директория на подмодул) е в директорията на git: „%.*s“"
-#: submodule.c:2063
+#: submodule.c:2069
#, c-format
msgid ""
"relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -8730,17 +8994,17 @@
"не се поддържа „relocate_gitdir“ за подмодула „%s“, който има повече от едно "
"работно дърво"
-#: submodule.c:2075 submodule.c:2134
+#: submodule.c:2081 submodule.c:2140
#, c-format
msgid "could not lookup name for submodule '%s'"
msgstr "името на подмодула „%s“ не може да бъде намерено"
-#: submodule.c:2079
+#: submodule.c:2085
#, c-format
msgid "refusing to move '%s' into an existing git dir"
msgstr "„%s“ не може да се премести в съществуваща директория на git"
-#: submodule.c:2086
+#: submodule.c:2092
#, c-format
msgid ""
"Migrating git directory of '%s%s' from\n"
@@ -8751,11 +9015,11 @@
"„%s“ към\n"
"„%s“\n"
-#: submodule.c:2214
+#: submodule.c:2220
msgid "could not start ls-files in .."
msgstr "„ls-stat“ не може да се стартира в „..“"
-#: submodule.c:2254
+#: submodule.c:2260
#, c-format
msgid "ls-tree returned unexpected return code %d"
msgstr "„ls-tree“ завърши с неочакван изходен код: %d"
@@ -8786,7 +9050,7 @@
msgid "could not read input file '%s'"
msgstr "входният файл „%s“ не може да бъде прочетен"
-#: trailer.c:751
+#: trailer.c:751 builtin/mktag.c:91
msgid "could not read from stdin"
msgstr "от стандартния вход не може да се чете"
@@ -8862,7 +9126,7 @@
msgid "error while running fast-import"
msgstr "грешка при изпълнението на бързо внасяне"
-#: transport-helper.c:549 transport-helper.c:1236
+#: transport-helper.c:549 transport-helper.c:1237
#, c-format
msgid "could not read ref %s"
msgstr "указателят „%s“ не може да се прочете"
@@ -8880,7 +9144,7 @@
msgid "invalid remote service path"
msgstr "неправилен път на отдалечената услуга"
-#: transport-helper.c:661 transport.c:1446
+#: transport-helper.c:661 transport.c:1447
msgid "operation not supported by protocol"
msgstr "опцията не се поддържа от протокола"
@@ -8964,52 +9228,52 @@
"Няма общи указатели, не са указани никакви указатели —\n"
"нищо няма да бъде направено. Пробвайте да укажете клон.\n"
-#: transport-helper.c:1213
+#: transport-helper.c:1214
#, c-format
msgid "unsupported object format '%s'"
msgstr "обект с неподдържан формат „%s“"
-#: transport-helper.c:1222
+#: transport-helper.c:1223
#, c-format
msgid "malformed response in ref list: %s"
msgstr "неправилен отговор в списъка с указатели: „%s“"
-#: transport-helper.c:1374
+#: transport-helper.c:1375
#, c-format
msgid "read(%s) failed"
msgstr "неуспешно четене на „%s“"
-#: transport-helper.c:1401
+#: transport-helper.c:1402
#, c-format
msgid "write(%s) failed"
msgstr "неуспешен запис в „%s“"
-#: transport-helper.c:1450
+#: transport-helper.c:1451
#, c-format
msgid "%s thread failed"
msgstr "неуспешно изпълнение на нишката „%s“"
-#: transport-helper.c:1454
+#: transport-helper.c:1455
#, c-format
msgid "%s thread failed to join: %s"
msgstr "завършването на нишката „%s“ не може да се изчака: „%s“"
-#: transport-helper.c:1473 transport-helper.c:1477
+#: transport-helper.c:1474 transport-helper.c:1478
#, c-format
msgid "can't start thread for copying data: %s"
msgstr "неуспешно стартиране на нишка за копиране на данните: „%s“"
-#: transport-helper.c:1514
+#: transport-helper.c:1515
#, c-format
msgid "%s process failed to wait"
msgstr "процесът на „%s“ не успя да изчака чрез „waitpid“"
-#: transport-helper.c:1518
+#: transport-helper.c:1519
#, c-format
msgid "%s process failed"
msgstr "неуспешно изпълнение на „%s“"
-#: transport-helper.c:1536 transport-helper.c:1545
+#: transport-helper.c:1537 transport-helper.c:1546
msgid "can't start thread for copying data"
msgstr "неуспешно стартиране на нишка за копиране на данните"
@@ -9097,23 +9361,23 @@
msgid "Aborting."
msgstr "Преустановяване на действието."
-#: transport.c:1315
+#: transport.c:1316
msgid "failed to push all needed submodules"
msgstr "неуспешно изтласкване на всички необходими подмодули"
-#: tree-walk.c:32
+#: tree-walk.c:33
msgid "too-short tree object"
msgstr "прекалено кратък обект-дърво"
-#: tree-walk.c:38
+#: tree-walk.c:39
msgid "malformed mode in tree entry"
msgstr "неправилни права за достъп в запис в дърво"
-#: tree-walk.c:42
+#: tree-walk.c:43
msgid "empty filename in tree entry"
msgstr "празно име на файл в запис в дърво"
-#: tree-walk.c:117
+#: tree-walk.c:118
msgid "too-short tree file"
msgstr "прекалено кратък файл-дърво"
@@ -9370,7 +9634,7 @@
msgid "Updating index flags"
msgstr "Обновяване на флаговете на индекса"
-#: upload-pack.c:1550
+#: upload-pack.c:1543
msgid "expected flush after fetch arguments"
msgstr "след аргументите на „fetch“ се очаква изчистване на буферите"
@@ -9407,73 +9671,105 @@
msgid "Fetching objects"
msgstr "Доставяне на обектите"
-#: worktree.c:236 builtin/am.c:2103
+#: worktree.c:238 builtin/am.c:2103
#, c-format
msgid "failed to read '%s'"
msgstr "„%s“ не може да бъде прочетен"
-#: worktree.c:283
+#: worktree.c:304
#, c-format
msgid "'%s' at main working tree is not the repository directory"
msgstr "„%s“ в основното работно дърво не е директорията на хранилището"
-#: worktree.c:294
+#: worktree.c:315
#, c-format
msgid "'%s' file does not contain absolute path to the working tree location"
msgstr ""
"файлът „%s“ не съдържа абсолютния път към местоположението на работното дърво"
-#: worktree.c:306
+#: worktree.c:327
#, c-format
msgid "'%s' does not exist"
msgstr "„%s“ не съществува."
-#: worktree.c:312
+#: worktree.c:333
#, c-format
msgid "'%s' is not a .git file, error code %d"
msgstr "„%s“ не е файл на .git, код за грешка: %d"
-#: worktree.c:321
+#: worktree.c:342
#, c-format
msgid "'%s' does not point back to '%s'"
msgstr "„%s“ не сочи към обратно към „%s“"
-#: worktree.c:587
+#: worktree.c:608
msgid "not a directory"
msgstr "не е директория"
-#: worktree.c:596
+#: worktree.c:617
msgid ".git is not a file"
msgstr "„.git“ не е файл"
-#: worktree.c:598
+#: worktree.c:619
msgid ".git file broken"
msgstr "„.git“ е повреден"
-#: worktree.c:600
+#: worktree.c:621
msgid ".git file incorrect"
msgstr "„.git“ е неправилен"
-#: worktree.c:670
+#: worktree.c:727
msgid "not a valid path"
msgstr "неправилен път"
-#: worktree.c:676
+#: worktree.c:733
msgid "unable to locate repository; .git is not a file"
msgstr "не може да се открие хранилище: „.git“ не е файл"
-#: worktree.c:679
+#: worktree.c:737
+msgid "unable to locate repository; .git file does not reference a repository"
+msgstr "не може да се открие хранилище: файлът „.git“ не сочи към хранилище"
+
+#: worktree.c:741
msgid "unable to locate repository; .git file broken"
msgstr "не може да се открие хранилище: „.git“ е повреден"
-#: worktree.c:685
+#: worktree.c:747
msgid "gitdir unreadable"
msgstr "директорията „gitdir“ не може да се прочете"
-#: worktree.c:689
+#: worktree.c:751
msgid "gitdir incorrect"
msgstr "неправилна директория „gitdir“"
+#: worktree.c:776
+msgid "not a valid directory"
+msgstr "не е валидна директория"
+
+#: worktree.c:782
+msgid "gitdir file does not exist"
+msgstr "файлът „gitdir“ не съществува"
+
+#: worktree.c:787 worktree.c:796
+#, c-format
+msgid "unable to read gitdir file (%s)"
+msgstr "файлът „gitdir“ не може да бъде прочетен (%s)"
+
+#: worktree.c:806
+#, c-format
+msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
+msgstr ""
+"изчитането върна по-малко байтове от очакваното (очаквани: %<PRIuMAX> байта, "
+"получени: %<PRIuMAX>)"
+
+#: worktree.c:814
+msgid "invalid gitdir file"
+msgstr "неправилен файл „gitdir“"
+
+#: worktree.c:822
+msgid "gitdir file points to non-existent location"
+msgstr "файлът „gitdir“ сочи несъществуващо местоположение"
+
#: wrapper.c:197 wrapper.c:367
#, c-format
msgid "could not open '%s' for reading and writing"
@@ -9525,11 +9821,11 @@
msgstr ""
" (използвайте „git rm ФАЙЛ…“, за да укажете разрешаването на конфликта)"
-#: wt-status.c:211 wt-status.c:1070
+#: wt-status.c:211 wt-status.c:1072
msgid "Changes to be committed:"
msgstr "Промени, които ще бъдат подадени:"
-#: wt-status.c:234 wt-status.c:1079
+#: wt-status.c:234 wt-status.c:1081
msgid "Changes not staged for commit:"
msgstr "Промени, които не са в индекса за подаване:"
@@ -9634,22 +9930,22 @@
msgid "untracked content, "
msgstr "неследено съдържание, "
-#: wt-status.c:903
+#: wt-status.c:905
#, 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:934
+#: wt-status.c:936
msgid "Submodules changed but not updated:"
msgstr "Подмодулите са променени, но не са обновени:"
-#: wt-status.c:936
+#: wt-status.c:938
msgid "Submodule changes to be committed:"
msgstr "Промени в подмодулите за подаване:"
-#: wt-status.c:1018
+#: wt-status.c:1020
msgid ""
"Do not modify or remove the line above.\n"
"Everything below it will be ignored."
@@ -9657,7 +9953,7 @@
"Не променяйте и не изтривайте горния ред.\n"
"Всичко отдолу ще бъде изтрито."
-#: wt-status.c:1110
+#: wt-status.c:1112
#, c-format
msgid ""
"\n"
@@ -9668,263 +9964,271 @@
"Изчисляването на броя различаващи се подавания отне %.2f сек.\n"
"За да избегнете това, ползвайте „--no-ahead-behind“.\n"
-#: wt-status.c:1140
+#: wt-status.c:1142
msgid "You have unmerged paths."
msgstr "Някои пътища не са слети."
-#: wt-status.c:1143
+#: wt-status.c:1145
msgid " (fix conflicts and run \"git commit\")"
msgstr " (коригирайте конфликтите и изпълнете „git commit“)"
-#: wt-status.c:1145
+#: wt-status.c:1147
msgid " (use \"git merge --abort\" to abort the merge)"
msgstr " (използвайте „git merge --abort“, за да преустановите сливането)"
-#: wt-status.c:1149
+#: wt-status.c:1151
msgid "All conflicts fixed but you are still merging."
msgstr "Всички конфликти са решени, но продължавате сливането."
-#: wt-status.c:1152
+#: wt-status.c:1154
msgid " (use \"git commit\" to conclude merge)"
msgstr " (използвайте „git commit“, за да завършите сливането)"
-#: wt-status.c:1161
+#: wt-status.c:1163
msgid "You are in the middle of an am session."
msgstr "В момента прилагате поредица от кръпки чрез „git am“."
-#: wt-status.c:1164
+#: wt-status.c:1166
msgid "The current patch is empty."
msgstr "Текущата кръпка е празна."
-#: wt-status.c:1168
+#: wt-status.c:1170
msgid " (fix conflicts and then run \"git am --continue\")"
msgstr " (коригирайте конфликтите и изпълнете „git am --continue“)"
-#: wt-status.c:1170
+#: wt-status.c:1172
msgid " (use \"git am --skip\" to skip this patch)"
msgstr " (използвайте „git am --skip“, за да пропуснете тази кръпка)"
-#: wt-status.c:1172
+#: wt-status.c:1174
msgid " (use \"git am --abort\" to restore the original branch)"
msgstr ""
" (използвайте „git am --abort“, за да възстановите първоначалния клон)"
-#: wt-status.c:1305
+#: wt-status.c:1307
msgid "git-rebase-todo is missing."
msgstr "„git-rebase-todo“ липсва."
-#: wt-status.c:1307
+#: wt-status.c:1309
msgid "No commands done."
msgstr "Не са изпълнени команди."
-#: wt-status.c:1310
+#: wt-status.c:1312
#, 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:1321
+#: wt-status.c:1323
#, c-format
msgid " (see more in file %s)"
msgstr " (повече информация има във файла „%s“)"
-#: wt-status.c:1326
+#: wt-status.c:1328
msgid "No commands remaining."
msgstr "Не остават повече команди."
-#: wt-status.c:1329
+#: wt-status.c:1331
#, 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:1337
+#: wt-status.c:1339
msgid " (use \"git rebase --edit-todo\" to view and edit)"
msgstr ""
" (използвайте „git rebase --edit-todo“, за да разгледате и редактирате)"
-#: wt-status.c:1349
+#: wt-status.c:1351
#, c-format
msgid "You are currently rebasing branch '%s' on '%s'."
msgstr "В момента пребазирате клона „%s“ върху „%s“."
-#: wt-status.c:1354
+#: wt-status.c:1356
msgid "You are currently rebasing."
msgstr "В момента пребазирате."
-#: wt-status.c:1367
+#: wt-status.c:1369
msgid " (fix conflicts and then run \"git rebase --continue\")"
msgstr " (коригирайте конфликтите и използвайте „git rebase --continue“)"
-#: wt-status.c:1369
+#: wt-status.c:1371
msgid " (use \"git rebase --skip\" to skip this patch)"
msgstr " (използвайте „git rebase --skip“, за да пропуснете тази кръпка)"
-#: wt-status.c:1371
+#: wt-status.c:1373
msgid " (use \"git rebase --abort\" to check out the original branch)"
msgstr ""
" (използвайте „git rebase --abort“, за да възстановите първоначалния клон)"
-#: wt-status.c:1378
+#: wt-status.c:1380
msgid " (all conflicts fixed: run \"git rebase --continue\")"
msgstr " (всички конфликти са коригирани: изпълнете „git rebase --continue“)"
-#: wt-status.c:1382
+#: wt-status.c:1384
#, c-format
msgid ""
"You are currently splitting a commit while rebasing branch '%s' on '%s'."
msgstr "В момента разделяте подаване докато пребазирате клона „%s“ върху „%s“."
-#: wt-status.c:1387
+#: wt-status.c:1389
msgid "You are currently splitting a commit during a rebase."
msgstr "В момента разделяте подаване докато пребазирате."
-#: wt-status.c:1390
+#: wt-status.c:1392
msgid " (Once your working directory is clean, run \"git rebase --continue\")"
msgstr ""
" (След като работното ви дърво стане чисто, използвайте „git rebase --"
"continue“)"
-#: wt-status.c:1394
+#: wt-status.c:1396
#, c-format
msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
msgstr ""
"В момента редактирате подаване докато пребазирате клона „%s“ върху „%s“."
-#: wt-status.c:1399
+#: wt-status.c:1401
msgid "You are currently editing a commit during a rebase."
msgstr "В момента редактирате подаване докато пребазирате."
-#: wt-status.c:1402
+#: wt-status.c:1404
msgid " (use \"git commit --amend\" to amend the current commit)"
msgstr ""
" (използвайте „git commit --amend“, за да редактирате текущото подаване)"
-#: wt-status.c:1404
+#: wt-status.c:1406
msgid ""
" (use \"git rebase --continue\" once you are satisfied with your changes)"
msgstr ""
" (използвайте „git rebase --continue“, след като завършите промените си)"
-#: wt-status.c:1415
+#: wt-status.c:1417
msgid "Cherry-pick currently in progress."
msgstr "В момента се извършва отбиране на подавания."
-#: wt-status.c:1418
+#: wt-status.c:1420
#, c-format
msgid "You are currently cherry-picking commit %s."
msgstr "В момента отбирате подаването „%s“."
-#: wt-status.c:1425
+#: wt-status.c:1427
msgid " (fix conflicts and run \"git cherry-pick --continue\")"
msgstr " (коригирайте конфликтите и изпълнете „git cherry-pick --continue“)"
-#: wt-status.c:1428
+#: wt-status.c:1430
msgid " (run \"git cherry-pick --continue\" to continue)"
msgstr " (за да продължите, изпълнете „git cherry-pick --continue“)"
-#: wt-status.c:1431
+#: wt-status.c:1433
msgid " (all conflicts fixed: run \"git cherry-pick --continue\")"
msgstr ""
" (всички конфликти са коригирани, изпълнете „git cherry-pick --continue“)"
-#: wt-status.c:1433
+#: wt-status.c:1435
msgid " (use \"git cherry-pick --skip\" to skip this patch)"
msgstr " (използвайте „git cherry-pick --skip“, за да пропуснете тази кръпка)"
-#: wt-status.c:1435
+#: wt-status.c:1437
msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
msgstr ""
" (използвайте „git cherry-pick --abort“, за да отмените всички действия с "
"отбиране)"
-#: wt-status.c:1445
+#: wt-status.c:1447
msgid "Revert currently in progress."
msgstr "В момента тече отмяна на подаване."
-#: wt-status.c:1448
+#: wt-status.c:1450
#, c-format
msgid "You are currently reverting commit %s."
msgstr "В момента отменяте подаване „%s“."
-#: wt-status.c:1454
+#: wt-status.c:1456
msgid " (fix conflicts and run \"git revert --continue\")"
msgstr " (коригирайте конфликтите и изпълнете „git revert --continue“)"
-#: wt-status.c:1457
+#: wt-status.c:1459
msgid " (run \"git revert --continue\" to continue)"
msgstr " (за да продължите, изпълнете „git revert --continue“)"
-#: wt-status.c:1460
+#: wt-status.c:1462
msgid " (all conflicts fixed: run \"git revert --continue\")"
msgstr " (всички конфликти са коригирани, изпълнете „git revert --continue“)"
-#: wt-status.c:1462
+#: wt-status.c:1464
msgid " (use \"git revert --skip\" to skip this patch)"
msgstr " (използвайте „git revert --skip“, за да пропуснете тази кръпка)"
-#: wt-status.c:1464
+#: wt-status.c:1466
msgid " (use \"git revert --abort\" to cancel the revert operation)"
msgstr ""
" (използвайте „git revert --abort“, за да преустановите отмяната на "
"подаване)"
-#: wt-status.c:1474
+#: wt-status.c:1476
#, c-format
msgid "You are currently bisecting, started from branch '%s'."
msgstr "В момента търсите двоично, като сте стартирали от клон „%s“."
-#: wt-status.c:1478
+#: wt-status.c:1480
msgid "You are currently bisecting."
msgstr "В момента търсите двоично."
-#: wt-status.c:1481
+#: wt-status.c:1483
msgid " (use \"git bisect reset\" to get back to the original branch)"
msgstr ""
" (използвайте „git bisect reset“, за да се върнете към първоначалното "
"състояние и клон)"
-#: wt-status.c:1492
+#: wt-status.c:1494
#, c-format
msgid "You are in a sparse checkout with %d%% of tracked files present."
msgstr ""
"Намирате се в частично изтеглено хранилище с %d%% налични, следени файла."
-#: wt-status.c:1731
+#: wt-status.c:1733
msgid "On branch "
msgstr "На клон "
-#: wt-status.c:1738
+#: wt-status.c:1740
msgid "interactive rebase in progress; onto "
msgstr "извършвате интерактивно пребазиране върху "
-#: wt-status.c:1740
+#: wt-status.c:1742
msgid "rebase in progress; onto "
msgstr "извършвате пребазиране върху "
-#: wt-status.c:1750
+#: wt-status.c:1747
+msgid "HEAD detached at "
+msgstr "Указателят „HEAD“ не е свързан и е при "
+
+#: wt-status.c:1749
+msgid "HEAD detached from "
+msgstr "Указателят „HEAD“ не е свързан и е отделѐн от "
+
+#: wt-status.c:1752
msgid "Not currently on any branch."
msgstr "Извън всички клони."
-#: wt-status.c:1767
+#: wt-status.c:1769
msgid "Initial commit"
msgstr "Първоначално подаване"
-#: wt-status.c:1768
+#: wt-status.c:1770
msgid "No commits yet"
msgstr "Все още липсват подавания"
-#: wt-status.c:1782
+#: wt-status.c:1784
msgid "Untracked files"
msgstr "Неследени файлове"
-#: wt-status.c:1784
+#: wt-status.c:1786
msgid "Ignored files"
msgstr "Игнорирани файлове"
-#: wt-status.c:1788
+#: wt-status.c:1790
#, c-format
msgid ""
"It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -9936,32 +10240,32 @@
"изпълнението, но ще трябва да добавяте новите файлове ръчно.\n"
"За повече подробности погледнете „git status help“."
-#: wt-status.c:1794
+#: wt-status.c:1796
#, c-format
msgid "Untracked files not listed%s"
msgstr "Неследените файлове не са изведени%s"
-#: wt-status.c:1796
+#: wt-status.c:1798
msgid " (use -u option to show untracked files)"
msgstr " (използвайте опцията „-u“, за да изведете неследените файлове)"
-#: wt-status.c:1802
+#: wt-status.c:1804
msgid "No changes"
msgstr "Няма промени"
-#: wt-status.c:1807
+#: wt-status.c:1809
#, 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:1811
+#: wt-status.c:1813
#, c-format
msgid "no changes added to commit\n"
msgstr "към индекса за подаване не са добавени промени\n"
-#: wt-status.c:1815
+#: wt-status.c:1817
#, c-format
msgid ""
"nothing added to commit but untracked files present (use \"git add\" to "
@@ -9970,66 +10274,66 @@
"към индекса за подаване не са добавени промени, но има нови файлове "
"(използвайте „git add“, за да започне тяхното следене)\n"
-#: wt-status.c:1819
+#: wt-status.c:1821
#, c-format
msgid "nothing added to commit but untracked files present\n"
msgstr "към индекса за подаване не са добавени промени, но има нови файлове\n"
-#: wt-status.c:1823
+#: wt-status.c:1825
#, c-format
msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
msgstr ""
"липсват каквито и да е промени (създайте или копирайте файлове и използвайте "
"„git add“, за да започне тяхното следене)\n"
-#: wt-status.c:1827 wt-status.c:1833
+#: wt-status.c:1829 wt-status.c:1835
#, c-format
msgid "nothing to commit\n"
msgstr "липсват каквито и да е промени\n"
-#: wt-status.c:1830
+#: wt-status.c:1832
#, c-format
msgid "nothing to commit (use -u to show untracked files)\n"
msgstr ""
"липсват каквито и да е промени (използвайте опцията „-u“, за да се изведат и "
"неследените файлове)\n"
-#: wt-status.c:1835
+#: wt-status.c:1837
#, c-format
msgid "nothing to commit, working tree clean\n"
msgstr "липсват каквито и да е промени, работното дърво е чисто\n"
-#: wt-status.c:1940
+#: wt-status.c:1942
msgid "No commits yet on "
msgstr "Все още липсват подавания в "
-#: wt-status.c:1944
+#: wt-status.c:1946
msgid "HEAD (no branch)"
msgstr "HEAD (извън клон)"
-#: wt-status.c:1975
+#: wt-status.c:1977
msgid "different"
msgstr "различен"
-#: wt-status.c:1977 wt-status.c:1985
+#: wt-status.c:1979 wt-status.c:1987
msgid "behind "
msgstr "назад с "
-#: wt-status.c:1980 wt-status.c:1983
+#: wt-status.c:1982 wt-status.c:1985
msgid "ahead "
msgstr "напред с "
#. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2505
+#: wt-status.c:2507
#, c-format
msgid "cannot %s: You have unstaged changes."
msgstr "не може да извършите „%s“, защото има промени, които не са в индекса."
-#: wt-status.c:2511
+#: wt-status.c:2513
msgid "additionally, your index contains uncommitted changes."
msgstr "освен това в индекса има неподадени промени."
-#: wt-status.c:2513
+#: wt-status.c:2515
#, c-format
msgid "cannot %s: Your index contains uncommitted changes."
msgstr "не може да извършите „%s“, защото в индекса има неподадени промени."
@@ -10043,132 +10347,137 @@
msgid "git add [<options>] [--] <pathspec>..."
msgstr "git add [ОПЦИЯ…] [--] ПЪТ…"
-#: builtin/add.c:88
+#: builtin/add.c:58
+#, c-format
+msgid "cannot chmod %cx '%s'"
+msgstr "правата на „%2$s“ не може да се зададат да са %1$cx"
+
+#: builtin/add.c:96
#, c-format
msgid "unexpected diff status %c"
msgstr "неочакван изходен код при генериране на разлика: %c"
-#: builtin/add.c:93 builtin/commit.c:285
+#: builtin/add.c:101 builtin/commit.c:285
msgid "updating files failed"
msgstr "неуспешно обновяване на файловете"
-#: builtin/add.c:103
+#: builtin/add.c:111
#, c-format
msgid "remove '%s'\n"
msgstr "изтриване на „%s“\n"
-#: builtin/add.c:178
+#: builtin/add.c:186
msgid "Unstaged changes after refreshing the index:"
msgstr "Промени, които и след обновяването на индекса не са добавени към него:"
-#: builtin/add.c:272 builtin/rev-parse.c:908
+#: builtin/add.c:280 builtin/rev-parse.c:991
msgid "Could not read the index"
msgstr "Индексът не може да бъде прочетен"
-#: builtin/add.c:283
+#: builtin/add.c:291
#, c-format
msgid "Could not open '%s' for writing."
msgstr "Файлът „%s“ не може да бъде отворен за запис."
-#: builtin/add.c:287
+#: builtin/add.c:295
msgid "Could not write patch"
msgstr "Кръпката не може да бъде записана"
-#: builtin/add.c:290
+#: builtin/add.c:298
msgid "editing patch failed"
msgstr "неуспешно редактиране на кръпка"
-#: builtin/add.c:293
+#: builtin/add.c:301
#, c-format
msgid "Could not stat '%s'"
msgstr "Не може да се получи информация чрез „stat“ за файла „%s“"
-#: builtin/add.c:295
+#: builtin/add.c:303
msgid "Empty patch. Aborted."
msgstr "Празна кръпка, преустановяване на действието."
-#: builtin/add.c:300
+#: builtin/add.c:308
#, c-format
msgid "Could not apply '%s'"
msgstr "Кръпката „%s“ не може да бъде приложена"
-#: builtin/add.c:308
+#: builtin/add.c:316
msgid "The following paths are ignored by one of your .gitignore files:\n"
msgstr ""
"Следните пътища ще бъдат игнорирани според някой от файловете „.gitignore“:\n"
-#: builtin/add.c:328 builtin/clean.c:904 builtin/fetch.c:166 builtin/mv.c:124
+#: builtin/add.c:336 builtin/clean.c:904 builtin/fetch.c:169 builtin/mv.c:124
#: builtin/prune-packed.c:14 builtin/pull.c:204 builtin/push.c:559
#: builtin/remote.c:1427 builtin/rm.c:242 builtin/send-pack.c:190
msgid "dry run"
msgstr "пробно изпълнение"
-#: builtin/add.c:331
+#: builtin/add.c:339
msgid "interactive picking"
msgstr "интерактивно отбиране на промени"
-#: builtin/add.c:332 builtin/checkout.c:1547 builtin/reset.c:308
+#: builtin/add.c:340 builtin/checkout.c:1546 builtin/reset.c:308
msgid "select hunks interactively"
msgstr "интерактивен избор на парчета код"
-#: builtin/add.c:333
+#: builtin/add.c:341
msgid "edit current diff and apply"
msgstr "редактиране на текущата разлика и прилагане"
-#: builtin/add.c:334
+#: builtin/add.c:342
msgid "allow adding otherwise ignored files"
msgstr "добавяне и на иначе игнорираните файлове"
-#: builtin/add.c:335
+#: builtin/add.c:343
msgid "update tracked files"
msgstr "обновяване на следените файлове"
-#: builtin/add.c:336
+#: builtin/add.c:344
msgid "renormalize EOL of tracked files (implies -u)"
msgstr "уеднаквяване на знаците за край на файл (включва опцията „-u“)"
-#: builtin/add.c:337
+#: builtin/add.c:345
msgid "record only the fact that the path will be added later"
msgstr "отбелязване само на факта, че пътят ще бъде добавен по-късно"
-#: builtin/add.c:338
+#: builtin/add.c:346
msgid "add changes from all tracked and untracked files"
msgstr "добавяне на всички промени в следените и неследените файлове"
-#: builtin/add.c:341
+#: builtin/add.c:349
msgid "ignore paths removed in the working tree (same as --no-all)"
msgstr ""
"игнориране на пътищата, които са изтрити от работното дърво (същото като „--"
"no-all“)"
-#: builtin/add.c:343
+#: builtin/add.c:351
msgid "don't add, only refresh the index"
msgstr "без добавяне на нови файлове, само обновяване на индекса"
-#: builtin/add.c:344
+#: builtin/add.c:352
msgid "just skip files which cannot be added because of errors"
msgstr ""
"прескачане на файловете, които не могат да бъдат добавени поради грешки"
-#: builtin/add.c:345
+#: builtin/add.c:353
msgid "check if - even missing - files are ignored in dry run"
msgstr ""
"проверка, че при пробно изпълнение всички файлове, дори и изтритите, се "
"игнорират"
-#: builtin/add.c:347 builtin/update-index.c:1004
+#: builtin/add.c:355 builtin/update-index.c:1004
msgid "override the executable bit of the listed files"
msgstr "изрично задаване на стойността на флага дали файлът е изпълним"
-#: builtin/add.c:349
+#: builtin/add.c:357
msgid "warn when adding an embedded repository"
msgstr "предупреждаване при добавяне на вградено хранилище"
-#: builtin/add.c:351
+#: builtin/add.c:359
msgid "backend for `git stash -p`"
msgstr "реализация на „git stash -p“"
-#: builtin/add.c:369
+#: builtin/add.c:377
#, c-format
msgid ""
"You've added another git repository inside your current repository.\n"
@@ -10199,12 +10508,12 @@
"\n"
"За повече информация погледнете „git help submodule“."
-#: builtin/add.c:397
+#: builtin/add.c:405
#, c-format
msgid "adding embedded git repository: %s"
msgstr "добавяне на вградено хранилище: %s"
-#: builtin/add.c:416
+#: builtin/add.c:424
msgid ""
"Use -f if you really want to add them.\n"
"Turn this message off by running\n"
@@ -10215,50 +10524,50 @@
"\n"
" git config advice.addIgnoredFile false"
-#: builtin/add.c:425
+#: builtin/add.c:433
msgid "adding files failed"
msgstr "неуспешно добавяне на файлове"
-#: builtin/add.c:453 builtin/commit.c:345
+#: builtin/add.c:461 builtin/commit.c:345
msgid "--pathspec-from-file is incompatible with --interactive/--patch"
msgstr ""
"опцията „--pathspec-from-file“ е несъвместима с всяка от опциите „--"
"interactive“/„--patch“"
-#: builtin/add.c:470
+#: builtin/add.c:478
msgid "--pathspec-from-file is incompatible with --edit"
msgstr "опциите „--pathspec-from-file“ и „--edit“ са несъвместими"
-#: builtin/add.c:482
+#: builtin/add.c:490
msgid "-A and -u are mutually incompatible"
msgstr "опциите „-A“ и „-u“ са несъвместими"
-#: builtin/add.c:485
+#: builtin/add.c:493
msgid "Option --ignore-missing can only be used together with --dry-run"
msgstr "Опцията „--ignore-missing“ изисква „--dry-run“"
-#: builtin/add.c:489
+#: builtin/add.c:497
#, c-format
msgid "--chmod param '%s' must be either -x or +x"
msgstr "параметърът към „--chmod“ — „%s“ може да е или „-x“, или „+x“"
-#: builtin/add.c:507 builtin/checkout.c:1715 builtin/commit.c:351
-#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1502
+#: builtin/add.c:515 builtin/checkout.c:1714 builtin/commit.c:351
+#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1569
msgid "--pathspec-from-file is incompatible with pathspec arguments"
msgstr ""
"опцията „--pathspec-from-file“ е несъвместима с аргументи, указващи пътища"
-#: builtin/add.c:514 builtin/checkout.c:1727 builtin/commit.c:357
-#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1508
+#: builtin/add.c:522 builtin/checkout.c:1726 builtin/commit.c:357
+#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1575
msgid "--pathspec-file-nul requires --pathspec-from-file"
msgstr "опцията „--pathspec-file-nul“ изисква опция „--pathspec-from-file“"
-#: builtin/add.c:518
+#: builtin/add.c:526
#, c-format
msgid "Nothing specified, nothing added.\n"
msgstr "Нищо не е зададено и нищо не е добавено.\n"
-#: builtin/add.c:520
+#: builtin/add.c:528
msgid ""
"Maybe you wanted to say 'git add .'?\n"
"Turn this message off by running\n"
@@ -10522,7 +10831,7 @@
msgstr "да се преминава към тройно сливане при нужда."
#: builtin/am.c:2225 builtin/init-db.c:560 builtin/prune-packed.c:16
-#: builtin/repack.c:335 builtin/stash.c:815
+#: builtin/repack.c:334 builtin/stash.c:882
msgid "be quiet"
msgstr "без извеждане на информация"
@@ -10568,17 +10877,17 @@
msgstr "прекарване през „git-apply“"
#: builtin/am.c:2263 builtin/commit.c:1395 builtin/fmt-merge-msg.c:17
-#: builtin/fmt-merge-msg.c:20 builtin/grep.c:903 builtin/merge.c:260
+#: builtin/fmt-merge-msg.c:20 builtin/grep.c:904 builtin/merge.c:261
#: builtin/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
-#: builtin/rebase.c:1341 builtin/repack.c:346 builtin/repack.c:350
-#: builtin/repack.c:352 builtin/show-branch.c:650 builtin/show-ref.c:172
-#: builtin/tag.c:404 parse-options.h:154 parse-options.h:175
+#: builtin/rebase.c:1347 builtin/repack.c:345 builtin/repack.c:349
+#: builtin/repack.c:351 builtin/show-branch.c:650 builtin/show-ref.c:172
+#: builtin/tag.c:436 parse-options.h:154 parse-options.h:175
#: parse-options.h:316
msgid "n"
msgstr "БРОЙ"
-#: builtin/am.c:2269 builtin/branch.c:661 builtin/bugreport.c:136
-#: builtin/for-each-ref.c:38 builtin/replace.c:556 builtin/tag.c:438
+#: builtin/am.c:2269 builtin/branch.c:670 builtin/bugreport.c:136
+#: builtin/for-each-ref.c:38 builtin/replace.c:556 builtin/tag.c:470
#: builtin/verify-tag.c:38
msgid "format"
msgstr "ФОРМАТ"
@@ -10604,15 +10913,15 @@
msgstr "прескачане на текущата кръпка"
#: builtin/am.c:2287
-msgid "restore the original branch and abort the patching operation."
+msgid "restore the original branch and abort the patching operation"
msgstr ""
"възстановяване на първоначалното състояние на клона и преустановяване на "
-"прилагането на кръпката."
+"прилагането на кръпката"
#: builtin/am.c:2290
-msgid "abort the patching operation but keep HEAD where it is."
+msgid "abort the patching operation but keep HEAD where it is"
msgstr ""
-"преустановяване на прилагането на кръпката без промяна към кое сочи „HEAD“."
+"преустановяване на прилагането на кръпката без промяна към кое сочи „HEAD“"
#: builtin/am.c:2294
msgid "show the patch being applied"
@@ -10627,12 +10936,12 @@
msgstr "използване на текущото време като това за автор"
#: builtin/am.c:2303 builtin/commit-tree.c:120 builtin/commit.c:1515
-#: builtin/merge.c:297 builtin/pull.c:175 builtin/rebase.c:536
-#: builtin/rebase.c:1394 builtin/revert.c:117 builtin/tag.c:419
+#: builtin/merge.c:298 builtin/pull.c:175 builtin/rebase.c:538
+#: builtin/rebase.c:1400 builtin/revert.c:117 builtin/tag.c:451
msgid "key-id"
msgstr "ИДЕНТИФИКАТОР_НА_КЛЮЧ"
-#: builtin/am.c:2304 builtin/rebase.c:537 builtin/rebase.c:1395
+#: builtin/am.c:2304 builtin/rebase.c:539 builtin/rebase.c:1401
msgid "GPG-sign commits"
msgstr "подписване на подаванията с GPG"
@@ -10716,23 +11025,10 @@
msgstr "git bisect--helper --bisect-reset [ПОДАВАНЕ]"
#: builtin/bisect--helper.c:24
-msgid ""
-"git bisect--helper --bisect-write [--no-log] <state> <revision> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-write [--no-log] СЪСТОЯНИЕ ВЕРСИЯ ДОБРО ЛОШО"
-
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
-"<bad_term>"
-msgstr "git bisect--helper --bisect-check-and-set-terms КОМАНДА ДОБРО"
-
-#: builtin/bisect--helper.c:26
msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
msgstr "git bisect--helper --bisect-next-check ЛОШО ДОБРО УПРАВЛЯВАЩА_ДУМА"
-#: builtin/bisect--helper.c:27
+#: builtin/bisect--helper.c:25
msgid ""
"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
"term-new]"
@@ -10740,7 +11036,7 @@
"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
"term-new]"
-#: builtin/bisect--helper.c:28
+#: builtin/bisect--helper.c:26
msgid ""
"git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
"=<term>] [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] "
@@ -10749,62 +11045,66 @@
"git bisect--helper --bisect-start [--term-{new,bad}=ЛОШО --term-{old,good}"
"=ДОБРО] [--no-checkout] [--first-parent] [ЛОШО [ДОБРО…]] [--] [ПЪТ…]"
-#: builtin/bisect--helper.c:30
+#: builtin/bisect--helper.c:28
msgid "git bisect--helper --bisect-next"
msgstr "git bisect--helper --bisect-next"
-#: builtin/bisect--helper.c:31
-msgid "git bisect--helper --bisect-auto-next"
-msgstr "git bisect--helper --bisect-auto-next"
-
-#: builtin/bisect--helper.c:32
+#: builtin/bisect--helper.c:29
msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
msgstr "git bisect--helper --bisect-reset (ЛОШО) [ВЕРСИЯ]"
-#: builtin/bisect--helper.c:33
+#: builtin/bisect--helper.c:30
msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
msgstr "git bisect--helper --bisect-reset (ДОБРО) [ВЕРСИЯ…]"
-#: builtin/bisect--helper.c:108
+#: builtin/bisect--helper.c:31
+msgid "git bisect--helper --bisect-replay <filename>"
+msgstr "git bisect--helper --bisect-next ИМЕ_НА_ФАЙЛ"
+
+#: builtin/bisect--helper.c:32
+msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
+msgstr "git bisect--helper --bisect-reset [(ВЕРСИЯ|ДИАПАЗОН)…]"
+
+#: builtin/bisect--helper.c:107
#, c-format
msgid "cannot open file '%s' in mode '%s'"
msgstr "файлът „%s“ не може да се отвори в режим „%s“"
-#: builtin/bisect--helper.c:115
+#: builtin/bisect--helper.c:114
#, c-format
msgid "could not write to file '%s'"
msgstr "във файла „%s“ не може да се пише"
-#: builtin/bisect--helper.c:154
+#: builtin/bisect--helper.c:153
#, c-format
msgid "'%s' is not a valid term"
msgstr "„%s“ е неправилна управляваща дума"
-#: builtin/bisect--helper.c:158
+#: builtin/bisect--helper.c:157
#, c-format
msgid "can't use the builtin command '%s' as a term"
msgstr "„%s“ е вградена команда и не може да се използва като управляваща дума"
-#: builtin/bisect--helper.c:168
+#: builtin/bisect--helper.c:167
#, c-format
msgid "can't change the meaning of the term '%s'"
msgstr "не може да смените значението на управляващата дума „%s“"
-#: builtin/bisect--helper.c:178
+#: builtin/bisect--helper.c:177
msgid "please use two different terms"
msgstr "използвайте две различни управляващи думи"
-#: builtin/bisect--helper.c:194
+#: builtin/bisect--helper.c:193
#, c-format
msgid "We are not bisecting.\n"
msgstr "В момента не се извършва двоично търсене.\n"
-#: builtin/bisect--helper.c:202
+#: builtin/bisect--helper.c:201
#, c-format
msgid "'%s' is not a valid commit"
msgstr "„%s“ не е подаване"
-#: builtin/bisect--helper.c:211
+#: builtin/bisect--helper.c:210
#, c-format
msgid ""
"could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
@@ -10812,27 +11112,27 @@
"първоначално указаното „%s“ в указателя „HEAD“ не може да бъде\n"
"изтеглено. Пробвайте да изпълните командата „git bisect reset ПОДАВАНЕ“."
-#: builtin/bisect--helper.c:255
+#: builtin/bisect--helper.c:254
#, c-format
msgid "Bad bisect_write argument: %s"
msgstr "Неправилен аргумент на функцията „bisect_write“: „%s“"
-#: builtin/bisect--helper.c:260
+#: builtin/bisect--helper.c:259
#, c-format
msgid "couldn't get the oid of the rev '%s'"
msgstr "идентификаторът на обект на версия „%s“ не може да бъде получен"
-#: builtin/bisect--helper.c:272
+#: builtin/bisect--helper.c:271
#, c-format
msgid "couldn't open the file '%s'"
msgstr "файлът „%s“ не може да бъде отворен"
-#: builtin/bisect--helper.c:298
+#: builtin/bisect--helper.c:297
#, c-format
msgid "Invalid command: you're currently in a %s/%s bisect"
msgstr "Неправилна команда: в момента се изпълнява двоично търсене по %s/%s."
-#: builtin/bisect--helper.c:325
+#: builtin/bisect--helper.c:324
#, c-format
msgid ""
"You need to give me at least one %s and %s revision.\n"
@@ -10841,7 +11141,7 @@
"Трябва да зададете поне една „%s“ и една „%s“ версия. (Това може да се\n"
"направи съответно и чрез командите „git bisect %s“ и „git bisect %s“.)"
-#: builtin/bisect--helper.c:329
+#: builtin/bisect--helper.c:328
#, c-format
msgid ""
"You need to start by \"git bisect start\".\n"
@@ -10852,7 +11152,7 @@
"Трябва да зададете поне една „%s“ и една „%s“ версия. (Това може да се\n"
"направи съответно и чрез командите „git bisect %s“ и „git bisect %s“.)"
-#: builtin/bisect--helper.c:349
+#: builtin/bisect--helper.c:348
#, c-format
msgid "bisecting only with a %s commit"
msgstr "двоично търсене само по „%s“ подаване."
@@ -10861,15 +11161,15 @@
#. translation. The program will only accept English input
#. at this point.
#.
-#: builtin/bisect--helper.c:357
+#: builtin/bisect--helper.c:356
msgid "Are you sure [Y/n]? "
msgstr "Да се продължи ли? „Y“ — ДА, „n“ — не"
-#: builtin/bisect--helper.c:418
+#: builtin/bisect--helper.c:417
msgid "no terms defined"
msgstr "не са указани управляващи думи"
-#: builtin/bisect--helper.c:421
+#: builtin/bisect--helper.c:420
#, c-format
msgid ""
"Your current terms are %s for the old state\n"
@@ -10878,7 +11178,7 @@
"Текущите управляващи думи са: %s за старото състояние\n"
"и %s за новото състояние.\n"
-#: builtin/bisect--helper.c:431
+#: builtin/bisect--helper.c:430
#, c-format
msgid ""
"invalid argument %s for 'git bisect terms'.\n"
@@ -10887,56 +11187,56 @@
"на „git bisect terms“ е подаден неправилен аргумент „%s“\n"
"Поддържат се опциите „--term-good“/„--term-old“ и „--term-bad„/„--term-new“."
-#: builtin/bisect--helper.c:498
+#: builtin/bisect--helper.c:497 builtin/bisect--helper.c:1014
msgid "revision walk setup failed\n"
msgstr "неуспешно настройване на обхождането на версиите\n"
-#: builtin/bisect--helper.c:520
+#: builtin/bisect--helper.c:519
#, c-format
msgid "could not open '%s' for appending"
msgstr "файлът „%s“ не може да се отвори за добавяне"
-#: builtin/bisect--helper.c:639 builtin/bisect--helper.c:652
+#: builtin/bisect--helper.c:638 builtin/bisect--helper.c:651
msgid "'' is not a valid term"
msgstr "„“ е неправилна управляваща дума"
-#: builtin/bisect--helper.c:662
+#: builtin/bisect--helper.c:661
#, c-format
msgid "unrecognized option: '%s'"
msgstr "непозната опция: %s"
-#: builtin/bisect--helper.c:666
+#: builtin/bisect--helper.c:665
#, c-format
msgid "'%s' does not appear to be a valid revision"
msgstr "„%s“ не изглежда като указател към версия"
-#: builtin/bisect--helper.c:697
+#: builtin/bisect--helper.c:696
msgid "bad HEAD - I need a HEAD"
msgstr "Неправилен указател „HEAD“"
-#: builtin/bisect--helper.c:712
+#: builtin/bisect--helper.c:711
#, c-format
msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
msgstr ""
"Неуспешно преминаване към „%s“. Изпълнете командата „git bisect start "
"СЪЩЕСТВУВАЩ_КЛОН“."
-#: builtin/bisect--helper.c:733
+#: builtin/bisect--helper.c:732
msgid "won't bisect on cg-seek'ed tree"
msgstr ""
"не може да се търси двоично, когато е изпълнена командата „cg-seek“ от "
"„cogito“"
-#: builtin/bisect--helper.c:736
+#: builtin/bisect--helper.c:735
msgid "bad HEAD - strange symbolic ref"
msgstr "Неправилен указател „HEAD“ — необичаен символен указател"
-#: builtin/bisect--helper.c:756
+#: builtin/bisect--helper.c:755
#, c-format
msgid "invalid ref: '%s'"
msgstr "неправилен указател: „%s“"
-#: builtin/bisect--helper.c:814
+#: builtin/bisect--helper.c:813
msgid "You need to start by \"git bisect start\"\n"
msgstr "Започнете като изпълните командата „git bisect start“\n"
@@ -10944,94 +11244,105 @@
#. translation. The program will only accept English input
#. at this point.
#.
-#: builtin/bisect--helper.c:825
+#: builtin/bisect--helper.c:824
msgid "Do you want me to do it for you [Y/n]? "
msgstr "Да се извърши ли автоматично? „Y“ — ДА, „n“ — не"
-#: builtin/bisect--helper.c:843
+#: builtin/bisect--helper.c:842
msgid "Please call `--bisect-state` with at least one argument"
msgstr "Опцията „--bisect-state“ изисква поне един аргумент"
-#: builtin/bisect--helper.c:856
+#: builtin/bisect--helper.c:855
#, c-format
msgid "'git bisect %s' can take only one argument."
msgstr "Командата „git bisect %s“ приема само един аргумент."
-#: builtin/bisect--helper.c:868 builtin/bisect--helper.c:879
+#: builtin/bisect--helper.c:867 builtin/bisect--helper.c:878
#, c-format
msgid "Bad rev input: %s"
msgstr "Неправилна версия: „%s“"
-#: builtin/bisect--helper.c:924
+#: builtin/bisect--helper.c:912
+msgid "We are not bisecting."
+msgstr "В момента не се извършва двоично търсене."
+
+#: builtin/bisect--helper.c:962
+#, c-format
+msgid "'%s'?? what are you talking about?"
+msgstr ""
+"Непозната команда „%s“. Възможностите са: „start“, „skip“, „good“, „bad“ (и "
+"вариантите им)"
+
+#: builtin/bisect--helper.c:974
+#, c-format
+msgid "cannot read file '%s' for replaying"
+msgstr ""
+"файлът „%s“ не може да бъде прочетен, за да се изпълнят командите от него "
+"наново"
+
+#: builtin/bisect--helper.c:1047
msgid "reset the bisection state"
msgstr "изчистване на състоянието на двоичното търсене"
-#: builtin/bisect--helper.c:926
-msgid "write out the bisection state in BISECT_LOG"
-msgstr "запис на състоянието на двоичното търсене в „BISECT_LOG“"
-
-#: builtin/bisect--helper.c:928
-msgid "check and set terms in a bisection state"
-msgstr ""
-"проверка и задаване на управляващи думи към състоянието на двоичното търсене"
-
-#: builtin/bisect--helper.c:930
+#: builtin/bisect--helper.c:1049
msgid "check whether bad or good terms exist"
msgstr "проверка дали съществуват одобряващи/отхвърлящи управляващи думи"
-#: builtin/bisect--helper.c:932
+#: builtin/bisect--helper.c:1051
msgid "print out the bisect terms"
msgstr "извеждане на управляващите думи"
-#: builtin/bisect--helper.c:934
+#: builtin/bisect--helper.c:1053
msgid "start the bisect session"
msgstr "начало на двоично търсене"
-#: builtin/bisect--helper.c:936
+#: builtin/bisect--helper.c:1055
msgid "find the next bisection commit"
msgstr "откриване на следващото подаване при двоично търсене"
-#: builtin/bisect--helper.c:938
-msgid "verify the next bisection state then checkout the next bisection commit"
-msgstr ""
-"проверка на следващото състояние и преминаване към следващото подаване при "
-"двоично търсене"
-
-#: builtin/bisect--helper.c:940
+#: builtin/bisect--helper.c:1057
msgid "mark the state of ref (or refs)"
msgstr "задаване на състоянието на указателя/ите"
-#: builtin/bisect--helper.c:942
+#: builtin/bisect--helper.c:1059
+msgid "list the bisection steps so far"
+msgstr "извеждане на стъпките на двоичното търсене досега"
+
+#: builtin/bisect--helper.c:1061
+msgid "replay the bisection process from the given file"
+msgstr "наново изпълнение на двоичното търсене чрез дадения файл"
+
+#: builtin/bisect--helper.c:1063
+msgid "skip some commits for checkout"
+msgstr "прескачане на някои подавания при изтегляне"
+
+#: builtin/bisect--helper.c:1065
msgid "no log for BISECT_WRITE"
msgstr "липсва запис за „BISECT_WRITE“"
-#: builtin/bisect--helper.c:957
+#: builtin/bisect--helper.c:1080
msgid "--bisect-reset requires either no argument or a commit"
msgstr "опцията „--bisect-reset“ изисква или 0 аргументи, или 1 — подаване"
-#: builtin/bisect--helper.c:961
-msgid "--bisect-write requires either 4 or 5 arguments"
-msgstr "опцията „--bisect-write“ изисква 4 или 5 аргумента"
-
-#: builtin/bisect--helper.c:967
-msgid "--check-and-set-terms requires 3 arguments"
-msgstr "опцията „--check-and-set-terms“ изисква 3 аргумента"
-
-#: builtin/bisect--helper.c:973
+#: builtin/bisect--helper.c:1085
msgid "--bisect-next-check requires 2 or 3 arguments"
msgstr "опцията „--bisect-next-check“ изисква 2 или 3 аргумента"
-#: builtin/bisect--helper.c:979
+#: builtin/bisect--helper.c:1091
msgid "--bisect-terms requires 0 or 1 argument"
msgstr "опцията „--bisect-terms“ изисква 0 или 1 аргумента"
-#: builtin/bisect--helper.c:988
+#: builtin/bisect--helper.c:1100
msgid "--bisect-next requires 0 arguments"
msgstr "опцията „--bisect-next“ не приема аргументи"
-#: builtin/bisect--helper.c:994
-msgid "--bisect-auto-next requires 0 arguments"
-msgstr "опцията „--bisect-auto-next“ не приема аргументи"
+#: builtin/bisect--helper.c:1111
+msgid "--bisect-log requires 0 arguments"
+msgstr "опцията „--bisect-log“ не приема аргументи"
+
+#: builtin/bisect--helper.c:1116
+msgid "no logfile given"
+msgstr "не е зададен журнален файл"
#: builtin/blame.c:32
msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
@@ -11050,155 +11361,158 @@
msgid "must end with a color"
msgstr "трябва да завършва с цвят"
-#: builtin/blame.c:730
+#: builtin/blame.c:728
#, c-format
msgid "invalid color '%s' in color.blame.repeatedLines"
msgstr "неправилен цвят „%s“ в „color.blame.repeatedLines“"
-#: builtin/blame.c:748
+#: builtin/blame.c:746
msgid "invalid value for blame.coloring"
msgstr "неправилна стойност за „blame.coloring“"
-#: builtin/blame.c:847
+#: builtin/blame.c:845
#, c-format
msgid "cannot find revision %s to ignore"
msgstr "версията за прескачане „%s“ не може да бъде открита"
-#: builtin/blame.c:869
-msgid "Show blame entries as we find them, incrementally"
-msgstr "Извеждане на авторството с намирането му, последователно"
+#: builtin/blame.c:867
+msgid "show blame entries as we find them, incrementally"
+msgstr "извеждане на авторството с намирането му, последователно"
-#: builtin/blame.c:870
-msgid "Do not show object names of boundary commits (Default: off)"
+#: builtin/blame.c:868
+msgid "do not show object names of boundary commits (Default: off)"
msgstr ""
-"Без извеждане на имената на обектите за граничните подавания (стандартно "
+"без извеждане на имената на обектите за граничните подавания (стандартно "
"опцията е изключена)"
-#: builtin/blame.c:871
-msgid "Do not treat root commits as boundaries (Default: off)"
+#: builtin/blame.c:869
+msgid "do not treat root commits as boundaries (Default: off)"
msgstr ""
-"Началните подавания да не се считат за гранични (стандартно опцията е "
+"началните подавания да не се считат за гранични (стандартно опцията е "
"изключена)"
+#: builtin/blame.c:870
+msgid "show work cost statistics"
+msgstr "извеждане на статистика за извършените действия"
+
+#: builtin/blame.c:871 builtin/checkout.c:1503 builtin/clone.c:92
+#: builtin/commit-graph.c:84 builtin/commit-graph.c:222 builtin/fetch.c:175
+#: builtin/merge.c:297 builtin/multi-pack-index.c:27 builtin/pull.c:119
+#: builtin/push.c:575 builtin/send-pack.c:198
+msgid "force progress reporting"
+msgstr "извеждане на напредъка"
+
#: builtin/blame.c:872
-msgid "Show work cost statistics"
-msgstr "Извеждане на статистика за извършените действия"
+msgid "show output score for blame entries"
+msgstr "извеждане на допълнителна информация за определянето на авторството"
#: builtin/blame.c:873
-msgid "Force progress reporting"
-msgstr "Принудително извеждане на напредъка"
+msgid "show original filename (Default: auto)"
+msgstr ""
+"извеждане на първоначалното име на файл (стандартно това е автоматично)"
#: builtin/blame.c:874
-msgid "Show output score for blame entries"
-msgstr "Извеждане на допълнителна информация за определянето на авторството"
+msgid "show original linenumber (Default: off)"
+msgstr ""
+"извеждане на първоначалния номер на ред (стандартно опцията е изключена)"
#: builtin/blame.c:875
-msgid "Show original filename (Default: auto)"
-msgstr ""
-"Извеждане на първоначалното име на файл (стандартно това е автоматично)"
+msgid "show in a format designed for machine consumption"
+msgstr "извеждане във формат за по-нататъшна обработка"
#: builtin/blame.c:876
-msgid "Show original linenumber (Default: off)"
+msgid "show porcelain format with per-line commit information"
msgstr ""
-"Извеждане на първоначалният номер на ред (стандартно опцията е изключена)"
-
-#: builtin/blame.c:877
-msgid "Show in a format designed for machine consumption"
-msgstr "Извеждане във формат за по-нататъшна обработка"
-
-#: builtin/blame.c:878
-msgid "Show porcelain format with per-line commit information"
-msgstr ""
-"Извеждане във формат за команди от потребителско ниво с информация на всеки "
+"извеждане във формат за команди от потребителско ниво с информация на всеки "
"ред"
-#: builtin/blame.c:879
-msgid "Use the same output mode as git-annotate (Default: off)"
+#: builtin/blame.c:877
+msgid "use the same output mode as git-annotate (Default: off)"
msgstr ""
-"Използване на същия формат като „git-annotate“ (стандартно опцията е "
+"използване на същия формат като „git-annotate“ (стандартно опцията е "
"изключена)"
+#: builtin/blame.c:878
+msgid "show raw timestamp (Default: off)"
+msgstr "извеждане на неформатирани времена (стандартно опцията е изключена)"
+
+#: builtin/blame.c:879
+msgid "show long commit SHA1 (Default: off)"
+msgstr "извеждане на пълните суми по SHA1 (стандартно опцията е изключена)"
+
#: builtin/blame.c:880
-msgid "Show raw timestamp (Default: off)"
-msgstr "Извеждане на неформатирани времена (стандартно опцията е изключена)"
+msgid "suppress author name and timestamp (Default: off)"
+msgstr "без име на автор и време на промяна (стандартно опцията е изключена)"
#: builtin/blame.c:881
-msgid "Show long commit SHA1 (Default: off)"
-msgstr "Извеждане на пълните суми по SHA1 (стандартно опцията е изключена)"
-
-#: builtin/blame.c:882
-msgid "Suppress author name and timestamp (Default: off)"
-msgstr "Без име на автор и време на промяна (стандартно опцията е изключена)"
-
-#: builtin/blame.c:883
-msgid "Show author email instead of name (Default: off)"
+msgid "show author email instead of name (Default: off)"
msgstr ""
-"Извеждане на е-пощата на автора, а не името му (стандартно опцията е "
+"извеждане на е-пощата на автора, а не името му (стандартно опцията е "
"изключена)"
-#: builtin/blame.c:884
-msgid "Ignore whitespace differences"
-msgstr "Без разлики в знаците за интервали"
+#: builtin/blame.c:882
+msgid "ignore whitespace differences"
+msgstr "без разлики в знаците за интервали"
-#: builtin/blame.c:885 builtin/log.c:1813
+#: builtin/blame.c:883 builtin/log.c:1812
msgid "rev"
msgstr "ВЕРС"
+#: builtin/blame.c:883
+msgid "ignore <rev> when blaming"
+msgstr "прескачане на ВЕРСията при извеждане на авторството"
+
+#: builtin/blame.c:884
+msgid "ignore revisions from <file>"
+msgstr "прескачане на версиите указани във ФАЙЛа"
+
#: builtin/blame.c:885
-msgid "Ignore <rev> when blaming"
-msgstr "Прескачане на ВЕРСията при извеждане на авторството"
-
-#: builtin/blame.c:886
-msgid "Ignore revisions from <file>"
-msgstr "Прескачане на версиите указани във ФАЙЛа при извеждане на авторството"
-
-#: builtin/blame.c:887
msgid "color redundant metadata from previous line differently"
msgstr ""
"оцветяване на повтарящите се метаданни от предишния ред в различен цвят"
-#: builtin/blame.c:888
+#: builtin/blame.c:886
msgid "color lines by age"
msgstr "оцветяване на редовете по възраст"
+#: builtin/blame.c:887
+msgid "spend extra cycles to find better match"
+msgstr "допълнителни изчисления за по-добри резултати"
+
+#: builtin/blame.c:888
+msgid "use revisions from <file> instead of calling git-rev-list"
+msgstr "изчитане на версиите от ФАЙЛа, а не чрез изпълнение на „git-rev-list“"
+
#: builtin/blame.c:889
-msgid "Spend extra cycles to find better match"
-msgstr "Допълнителни изчисления за по-добри резултати"
+msgid "use <file>'s contents as the final image"
+msgstr "използване на съдържанието на ФАЙЛа като крайно положение"
-#: builtin/blame.c:890
-msgid "Use revisions from <file> instead of calling git-rev-list"
-msgstr "Изчитане на версиите от ФАЙЛ, а не чрез изпълнение на „git-rev-list“"
-
-#: builtin/blame.c:891
-msgid "Use <file>'s contents as the final image"
-msgstr "Използване на съдържанието на ФАЙЛа като крайно положение"
-
-#: builtin/blame.c:892 builtin/blame.c:893
+#: builtin/blame.c:890 builtin/blame.c:891
msgid "score"
msgstr "напасване на редовете"
-#: builtin/blame.c:892
-msgid "Find line copies within and across files"
+#: builtin/blame.c:890
+msgid "find line copies within and across files"
msgstr ""
-"Търсене на копирани редове както в рамките на един файл, така и от един файл "
+"търсене на копирани редове както в рамките на един файл, така и от един файл "
"към друг"
-#: builtin/blame.c:893
-msgid "Find line movements within and across files"
+#: builtin/blame.c:891
+msgid "find line movements within and across files"
msgstr ""
-"Търсене на преместени редове както в рамките на един файл, така и от един "
+"търсене на преместени редове както в рамките на един файл, така и от един "
"файл към друг"
-#: builtin/blame.c:894
+#: builtin/blame.c:892
msgid "range"
msgstr "диапазон"
-#: builtin/blame.c:895
-msgid "Process only line range <start>,<end> or function :<funcname>"
+#: builtin/blame.c:893
+msgid "process only line range <start>,<end> or function :<funcname>"
msgstr ""
-"Информация само за редовете в диапазона НАЧАЛО,КРАЙ или само на :ФУНКЦИЯта"
+"информация само за редовете в диапазона НАЧАЛО,КРАЙ или само на :ФУНКЦИЯта"
-#: builtin/blame.c:947
+#: builtin/blame.c:945
msgid "--progress can't be used with --incremental or porcelain formats"
msgstr ""
"опцията „--progress“ е несъвместима с „--incremental“ и форма̀та на командите "
@@ -11212,18 +11526,18 @@
#. your language may need more or fewer display
#. columns.
#.
-#: builtin/blame.c:998
+#: builtin/blame.c:996
msgid "4 years, 11 months ago"
msgstr "преди 4 години и 11 месеца"
-#: builtin/blame.c:1114
+#: builtin/blame.c:1112
#, 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:1159
+#: builtin/blame.c:1157
msgid "Blaming lines"
msgstr "Редове с авторство"
@@ -11291,118 +11605,108 @@
msgid "Update of config-file failed"
msgstr "Неуспешно обновяване на конфигурационния файл"
-#: builtin/branch.c:220
+#: builtin/branch.c:223
msgid "cannot use -a with -d"
msgstr "Опцията „-a“ е несъвместима с опцията „-d“"
-#: builtin/branch.c:226
+#: builtin/branch.c:230
msgid "Couldn't look up commit object for HEAD"
msgstr "Обектът-подаване, сочен от указателя „HEAD“, не може да бъде открит"
-#: builtin/branch.c:240
+#: builtin/branch.c:244
#, c-format
msgid "Cannot delete branch '%s' checked out at '%s'"
msgstr "Не можете да изтриете клона „%s“, който е изтеглен в пътя „%s“"
-#: builtin/branch.c:255
+#: builtin/branch.c:259
#, c-format
msgid "remote-tracking branch '%s' not found."
msgstr "следящият клон „%s“ не може да бъде открит."
-#: builtin/branch.c:256
+#: builtin/branch.c:260
#, c-format
msgid "branch '%s' not found."
msgstr "клонът „%s“ не може да бъде открит."
-#: builtin/branch.c:271
-#, c-format
-msgid "Error deleting remote-tracking branch '%s'"
-msgstr "Грешка при изтриването на следящия клон „%s“"
-
-#: builtin/branch.c:272
-#, c-format
-msgid "Error deleting branch '%s'"
-msgstr "Грешка при изтриването на клона „%s“"
-
-#: builtin/branch.c:279
+#: builtin/branch.c:291
#, c-format
msgid "Deleted remote-tracking branch %s (was %s).\n"
msgstr "Изтрит следящ клон „%s“ (той сочеше към „%s“).\n"
-#: builtin/branch.c:280
+#: builtin/branch.c:292
#, c-format
msgid "Deleted branch %s (was %s).\n"
msgstr "Изтрит клон „%s“ (той сочеше към „%s“).\n"
-#: builtin/branch.c:429 builtin/tag.c:61
+#: builtin/branch.c:438 builtin/tag.c:61
msgid "unable to parse format string"
msgstr "форматиращият низ не може да бъде анализиран: %s"
-#: builtin/branch.c:460
+#: builtin/branch.c:469
msgid "could not resolve HEAD"
msgstr "подаването, сочено от указателя „HEAD“, не може да се установи"
-#: builtin/branch.c:466
+#: builtin/branch.c:475
#, c-format
msgid "HEAD (%s) points outside of refs/heads/"
msgstr "„HEAD“ (%s) сочи извън директорията „refs/heads“"
-#: builtin/branch.c:481
+#: builtin/branch.c:490
#, c-format
msgid "Branch %s is being rebased at %s"
msgstr "Клонът „%s“ се пребазира върху „%s“"
-#: builtin/branch.c:485
+#: builtin/branch.c:494
#, c-format
msgid "Branch %s is being bisected at %s"
msgstr "Търси се двоично в клона „%s“ при „%s“"
-#: builtin/branch.c:502
+#: builtin/branch.c:511
msgid "cannot copy the current branch while not on any."
msgstr "не можете да копирате текущия клон, защото сте извън който и да е клон"
-#: builtin/branch.c:504
+#: builtin/branch.c:513
msgid "cannot rename the current branch while not on any."
msgstr ""
"не можете да преименувате текущия клон, защото сте извън който и да е клон"
-#: builtin/branch.c:515
+#: builtin/branch.c:524
#, c-format
msgid "Invalid branch name: '%s'"
msgstr "Неправилно име на клон: „%s“"
-#: builtin/branch.c:544
+#: builtin/branch.c:553
msgid "Branch rename failed"
msgstr "Неуспешно преименуване на клон"
-#: builtin/branch.c:546
+#: builtin/branch.c:555
msgid "Branch copy failed"
msgstr "Неуспешно копиране на клон"
-#: builtin/branch.c:550
+#: builtin/branch.c:559
#, c-format
msgid "Created a copy of a misnamed branch '%s'"
msgstr "Клонът с неправилно име „%s“ е копиран"
-#: builtin/branch.c:553
+#: builtin/branch.c:562
#, c-format
msgid "Renamed a misnamed branch '%s' away"
msgstr "Клонът с неправилно име „%s“ е преименуван"
-#: builtin/branch.c:559
+#: builtin/branch.c:568
#, c-format
msgid "Branch renamed to %s, but HEAD is not updated!"
msgstr "Клонът е преименуван на „%s“, но указателят „HEAD“ не е обновен"
-#: builtin/branch.c:568
+#: builtin/branch.c:577
msgid "Branch is renamed, but update of config-file failed"
msgstr "Клонът е преименуван, но конфигурационният файл не е обновен"
-#: builtin/branch.c:570
+#: builtin/branch.c:579
msgid "Branch is copied, but update of config-file failed"
msgstr "Клонът е копиран, но конфигурационният файл не е обновен"
-#: builtin/branch.c:586
+#: builtin/branch.c:595
#, c-format
msgid ""
"Please edit the description for the branch\n"
@@ -11413,183 +11717,183 @@
" %s\n"
"Редовете, които започват с „%c“, ще бъдат пропуснати.\n"
-#: builtin/branch.c:620
+#: builtin/branch.c:629
msgid "Generic options"
msgstr "Общи настройки"
-#: builtin/branch.c:622
+#: builtin/branch.c:631
msgid "show hash and subject, give twice for upstream branch"
msgstr ""
"извеждане на контролната сума и темата. Повтарянето на опцията прибавя "
"отдалечените клони"
-#: builtin/branch.c:623
+#: builtin/branch.c:632
msgid "suppress informational messages"
msgstr "без информационни съобщения"
-#: builtin/branch.c:624
+#: builtin/branch.c:633
msgid "set up tracking mode (see git-pull(1))"
msgstr "задаване на режима на следене (виж git-pull(1))"
-#: builtin/branch.c:626
+#: builtin/branch.c:635
msgid "do not use"
msgstr "да не се ползва"
-#: builtin/branch.c:628 builtin/rebase.c:532
+#: builtin/branch.c:637 builtin/rebase.c:534
msgid "upstream"
msgstr "клон-източник"
-#: builtin/branch.c:628
+#: builtin/branch.c:637
msgid "change the upstream info"
msgstr "смяна на клона-източник"
-#: builtin/branch.c:629
+#: builtin/branch.c:638
msgid "unset the upstream info"
msgstr "изчистване на информацията за клон-източник"
-#: builtin/branch.c:630
+#: builtin/branch.c:639
msgid "use colored output"
msgstr "цветен изход"
-#: builtin/branch.c:631
+#: builtin/branch.c:640
msgid "act on remote-tracking branches"
msgstr "действие върху следящите клони"
-#: builtin/branch.c:633 builtin/branch.c:635
+#: builtin/branch.c:642 builtin/branch.c:644
msgid "print only branches that contain the commit"
msgstr "извеждане само на клоните, които съдържат това ПОДАВАНЕ"
-#: builtin/branch.c:634 builtin/branch.c:636
+#: builtin/branch.c:643 builtin/branch.c:645
msgid "print only branches that don't contain the commit"
msgstr "извеждане само на клоните, които не съдържат това ПОДАВАНЕ"
-#: builtin/branch.c:639
+#: builtin/branch.c:648
msgid "Specific git-branch actions:"
msgstr "Специални действия на „git-branch“:"
-#: builtin/branch.c:640
+#: builtin/branch.c:649
msgid "list both remote-tracking and local branches"
msgstr "извеждане както на следящите, така и на локалните клони"
-#: builtin/branch.c:642
+#: builtin/branch.c:651
msgid "delete fully merged branch"
msgstr "изтриване на клони, които са напълно слети"
-#: builtin/branch.c:643
+#: builtin/branch.c:652
msgid "delete branch (even if not merged)"
msgstr "изтриване и на клони, които не са напълно слети"
-#: builtin/branch.c:644
+#: builtin/branch.c:653
msgid "move/rename a branch and its reflog"
msgstr ""
"преместване/преименуване на клон и принадлежащият му журнал на указателите"
-#: builtin/branch.c:645
+#: builtin/branch.c:654
msgid "move/rename a branch, even if target exists"
msgstr "преместване/преименуване на клон, дори ако има вече клон с такова име"
-#: builtin/branch.c:646
+#: builtin/branch.c:655
msgid "copy a branch and its reflog"
msgstr "копиране на клон и принадлежащия му журнал на указателите"
-#: builtin/branch.c:647
+#: builtin/branch.c:656
msgid "copy a branch, even if target exists"
msgstr "копиране на клон, дори ако има вече клон с такова име"
-#: builtin/branch.c:648
+#: builtin/branch.c:657
msgid "list branch names"
msgstr "извеждане на имената на клоните"
-#: builtin/branch.c:649
+#: builtin/branch.c:658
msgid "show current branch name"
msgstr "извеждане на името на текущия клон"
-#: builtin/branch.c:650
+#: builtin/branch.c:659
msgid "create the branch's reflog"
msgstr "създаване на журнала на указателите на клона"
-#: builtin/branch.c:652
+#: builtin/branch.c:661
msgid "edit the description for the branch"
msgstr "редактиране на описанието на клона"
-#: builtin/branch.c:653
+#: builtin/branch.c:662
msgid "force creation, move/rename, deletion"
msgstr "принудително създаване, преместване, преименуване, изтриване"
-#: builtin/branch.c:654
+#: builtin/branch.c:663
msgid "print only branches that are merged"
msgstr "извеждане само на слетите клони"
-#: builtin/branch.c:655
+#: builtin/branch.c:664
msgid "print only branches that are not merged"
msgstr "извеждане само на неслетите клони"
-#: builtin/branch.c:656
+#: builtin/branch.c:665
msgid "list branches in columns"
msgstr "извеждане по колони"
-#: builtin/branch.c:658 builtin/for-each-ref.c:42 builtin/notes.c:415
+#: builtin/branch.c:667 builtin/for-each-ref.c:42 builtin/notes.c:415
#: builtin/notes.c:418 builtin/notes.c:581 builtin/notes.c:584
-#: builtin/tag.c:434
+#: builtin/tag.c:466
msgid "object"
msgstr "ОБЕКТ"
-#: builtin/branch.c:659
+#: builtin/branch.c:668
msgid "print only branches of the object"
msgstr "извеждане само на клоните на ОБЕКТА"
-#: builtin/branch.c:660 builtin/for-each-ref.c:48 builtin/tag.c:441
+#: builtin/branch.c:669 builtin/for-each-ref.c:48 builtin/tag.c:473
msgid "sorting and filtering are case insensitive"
msgstr "подредбата и филтрирането третират еднакво малките и главните букви"
-#: builtin/branch.c:661 builtin/for-each-ref.c:38 builtin/tag.c:439
+#: builtin/branch.c:670 builtin/for-each-ref.c:38 builtin/tag.c:471
#: builtin/verify-tag.c:38
msgid "format to use for the output"
msgstr "ФОРМАТ за изхода"
-#: builtin/branch.c:684 builtin/clone.c:790
+#: builtin/branch.c:693 builtin/clone.c:790
msgid "HEAD not found below refs/heads!"
msgstr "В директорията „refs/heads“ липсва файл „HEAD“"
-#: builtin/branch.c:708
+#: builtin/branch.c:717
msgid "--column and --verbose are incompatible"
msgstr "Опциите „--column“ и „--verbose“ са несъвместими"
-#: builtin/branch.c:723 builtin/branch.c:777 builtin/branch.c:786
+#: builtin/branch.c:732 builtin/branch.c:788 builtin/branch.c:797
msgid "branch name required"
msgstr "Необходимо е име на клон"
-#: builtin/branch.c:753
+#: builtin/branch.c:764
msgid "Cannot give description to detached HEAD"
msgstr "Не може да зададете описание на несвързан „HEAD“"
-#: builtin/branch.c:758
+#: builtin/branch.c:769
msgid "cannot edit description of more than one branch"
msgstr "Не може да редактирате описанието на повече от един клон едновременно"
-#: builtin/branch.c:765
+#: builtin/branch.c:776
#, c-format
msgid "No commit on branch '%s' yet."
msgstr "В клона „%s“ все още няма подавания."
-#: builtin/branch.c:768
+#: builtin/branch.c:779
#, c-format
msgid "No branch named '%s'."
msgstr "Липсва клон на име „%s“."
-#: builtin/branch.c:783
+#: builtin/branch.c:794
msgid "too many branches for a copy operation"
msgstr "прекалено много клони за копиране"
-#: builtin/branch.c:792
+#: builtin/branch.c:803
msgid "too many arguments for a rename operation"
msgstr "прекалено много аргументи към командата за преименуване"
-#: builtin/branch.c:797
+#: builtin/branch.c:808
msgid "too many arguments to set new upstream"
msgstr "прекалено много аргументи към командата за следене"
-#: builtin/branch.c:801
+#: builtin/branch.c:812
#, c-format
msgid ""
"could not set upstream of HEAD to %s when it does not point to any branch."
@@ -11597,31 +11901,31 @@
"Следеното от „HEAD“ не може да се зададе да е „%s“, защото то не сочи към "
"никой клон."
-#: builtin/branch.c:804 builtin/branch.c:827
+#: builtin/branch.c:815 builtin/branch.c:838
#, c-format
msgid "no such branch '%s'"
msgstr "Няма клон на име „%s“."
-#: builtin/branch.c:808
+#: builtin/branch.c:819
#, c-format
msgid "branch '%s' does not exist"
msgstr "Не съществува клон на име „%s“."
-#: builtin/branch.c:821
+#: builtin/branch.c:832
msgid "too many arguments to unset upstream"
msgstr "прекалено много аргументи към командата за спиране на следене"
-#: builtin/branch.c:825
+#: builtin/branch.c:836
msgid "could not unset upstream of HEAD when it does not point to any branch."
msgstr ""
"Следеното от „HEAD“ не може да махне, защото то не сочи към никой клон."
-#: builtin/branch.c:831
+#: builtin/branch.c:842
#, c-format
msgid "Branch '%s' has no upstream information"
msgstr "Няма информация клонът „%s“ да следи някой друг"
-#: builtin/branch.c:841
+#: builtin/branch.c:852
msgid ""
"The -a, and -r, options to 'git branch' do not take a branch name.\n"
"Did you mean to use: -a|-r --list <pattern>?"
@@ -11629,7 +11933,7 @@
"Опциите „-a“ и „-r“ на „git branch“ са несъвместими с име на клон.\n"
"Пробвайте с: „-a|-r --list ШАБЛОН“"
-#: builtin/branch.c:845
+#: builtin/branch.c:856
msgid ""
"the '--set-upstream' option is no longer supported. Please use '--track' or "
"'--set-upstream-to' instead."
@@ -11750,19 +12054,19 @@
msgid "git bundle unbundle <file> [<refname>...]"
msgstr "git bundle unbundle ФАЙЛ [ИМЕ_НА_УКАЗАТЕЛ…]"
-#: builtin/bundle.c:67 builtin/pack-objects.c:3480
+#: builtin/bundle.c:67 builtin/pack-objects.c:3495
msgid "do not show progress meter"
msgstr "без извеждане на напредъка"
-#: builtin/bundle.c:69 builtin/pack-objects.c:3482
+#: builtin/bundle.c:69 builtin/pack-objects.c:3497
msgid "show progress meter"
msgstr "извеждане на напредъка"
-#: builtin/bundle.c:71 builtin/pack-objects.c:3484
+#: builtin/bundle.c:71 builtin/pack-objects.c:3499
msgid "show progress meter during object writing phase"
msgstr "извеждане на напредъка във фазата на запазване на обектите"
-#: builtin/bundle.c:74 builtin/pack-objects.c:3487
+#: builtin/bundle.c:74 builtin/pack-objects.c:3502
msgid "similar to --all-progress when progress meter is shown"
msgstr ""
"същото действие като опцията „--all-progress“ при извеждането на напредъка"
@@ -11913,8 +12217,8 @@
msgid "terminate input and output records by a NUL character"
msgstr "разделяне на входните и изходните записи с нулевия знак „NUL“"
-#: builtin/check-ignore.c:21 builtin/checkout.c:1500 builtin/gc.c:541
-#: builtin/worktree.c:561
+#: builtin/check-ignore.c:21 builtin/checkout.c:1499 builtin/gc.c:549
+#: builtin/worktree.c:489
msgid "suppress progress reporting"
msgstr "без показване на напредъка"
@@ -11967,54 +12271,54 @@
msgid "no contacts specified"
msgstr "не са указани контакти"
-#: builtin/checkout-index.c:139
+#: builtin/checkout-index.c:152
msgid "git checkout-index [<options>] [--] [<file>...]"
msgstr "git checkout-index [ОПЦИЯ…] [--] [ФАЙЛ…]"
-#: builtin/checkout-index.c:156
+#: builtin/checkout-index.c:169
msgid "stage should be between 1 and 3 or all"
msgstr "етапът трябва да е „1“, „2“, „3“ или „all“ (всички)"
-#: builtin/checkout-index.c:173
+#: builtin/checkout-index.c:186
msgid "check out all files in the index"
msgstr "изтегляне на всички файлове в индекса"
-#: builtin/checkout-index.c:174
+#: builtin/checkout-index.c:187
msgid "force overwrite of existing files"
msgstr "презаписване на файловете, дори и да съществуват"
-#: builtin/checkout-index.c:176
+#: builtin/checkout-index.c:189
msgid "no warning for existing files and files not in index"
msgstr "без предупреждения при липсващи файлове и файлове не в индекса"
-#: builtin/checkout-index.c:178
+#: builtin/checkout-index.c:191
msgid "don't checkout new files"
msgstr "без изтегляне на нови файлове"
-#: builtin/checkout-index.c:180
+#: builtin/checkout-index.c:193
msgid "update stat information in the index file"
msgstr "обновяване на информацията получена чрез „stat“ за файловете в индекса"
-#: builtin/checkout-index.c:184
+#: builtin/checkout-index.c:197
msgid "read list of paths from the standard input"
msgstr "изчитане на пътищата от стандартния вход"
-#: builtin/checkout-index.c:186
+#: builtin/checkout-index.c:199
msgid "write the content to temporary files"
msgstr "записване на съдържанието във временни файлове"
-#: builtin/checkout-index.c:187 builtin/column.c:31
+#: builtin/checkout-index.c:200 builtin/column.c:31
#: builtin/submodule--helper.c:1824 builtin/submodule--helper.c:1827
#: builtin/submodule--helper.c:1835 builtin/submodule--helper.c:2333
-#: builtin/worktree.c:757
+#: builtin/worktree.c:717
msgid "string"
msgstr "НИЗ"
-#: builtin/checkout-index.c:188
+#: builtin/checkout-index.c:201
msgid "when creating files, prepend <string>"
msgstr "при създаването на нови файлове да се добавя префикса НИЗ"
-#: builtin/checkout-index.c:190
+#: builtin/checkout-index.c:203
msgid "copy out the files from named stage"
msgstr "копиране на файловете от това състояние на сливане"
@@ -12117,16 +12421,16 @@
msgid "'%s' or '%s' cannot be used with %s"
msgstr "опцията „%3$s“ е несъвместима както с „%1$s“, така и с „%2$s“"
-#: builtin/checkout.c:541 builtin/checkout.c:548
+#: builtin/checkout.c:543 builtin/checkout.c:550
#, c-format
msgid "path '%s' is unmerged"
msgstr "пътят „%s“ не е слят"
-#: builtin/checkout.c:716
+#: builtin/checkout.c:718
msgid "you need to resolve your current index first"
msgstr "първо трябва да коригирате индекса си"
-#: builtin/checkout.c:770
+#: builtin/checkout.c:772
#, c-format
msgid ""
"cannot continue with staged changes in the following files:\n"
@@ -12136,50 +12440,50 @@
"индекса:\n"
"%s"
-#: builtin/checkout.c:866
+#: builtin/checkout.c:865
#, c-format
msgid "Can not do reflog for '%s': %s\n"
msgstr "Журналът на указателите за „%s“ не може да се проследи: %s\n"
-#: builtin/checkout.c:908
+#: builtin/checkout.c:907
msgid "HEAD is now at"
msgstr "Указателят „HEAD“ в момента сочи към"
-#: builtin/checkout.c:912 builtin/clone.c:721 t/helper/test-fast-rebase.c:202
+#: builtin/checkout.c:911 builtin/clone.c:721 t/helper/test-fast-rebase.c:202
msgid "unable to update HEAD"
msgstr "Указателят „HEAD“ не може да бъде обновен"
-#: builtin/checkout.c:916
+#: builtin/checkout.c:915
#, c-format
msgid "Reset branch '%s'\n"
msgstr "Зануляване на клона „%s“\n"
-#: builtin/checkout.c:919
+#: builtin/checkout.c:918
#, c-format
msgid "Already on '%s'\n"
msgstr "Вече сте на „%s“\n"
-#: builtin/checkout.c:923
+#: builtin/checkout.c:922
#, c-format
msgid "Switched to and reset branch '%s'\n"
msgstr "Преминаване към клона „%s“ и зануляване на промените\n"
-#: builtin/checkout.c:925 builtin/checkout.c:1356
+#: builtin/checkout.c:924 builtin/checkout.c:1355
#, c-format
msgid "Switched to a new branch '%s'\n"
msgstr "Преминахте към новия клон „%s“\n"
-#: builtin/checkout.c:927
+#: builtin/checkout.c:926
#, c-format
msgid "Switched to branch '%s'\n"
msgstr "Преминахте към клона „%s“\n"
-#: builtin/checkout.c:978
+#: builtin/checkout.c:977
#, c-format
msgid " ... and %d more.\n"
msgstr "… и още %d.\n"
-#: builtin/checkout.c:984
+#: builtin/checkout.c:983
#, c-format
msgid ""
"Warning: you are leaving %d commit behind, not connected to\n"
@@ -12201,7 +12505,7 @@
"\n"
"%s\n"
-#: builtin/checkout.c:1003
+#: builtin/checkout.c:1002
#, c-format
msgid ""
"If you want to keep it by creating a new branch, this may be a good time\n"
@@ -12228,19 +12532,19 @@
" git branch ИМЕ_НА_НОВИЯ_КЛОН %s\n"
"\n"
-#: builtin/checkout.c:1038
+#: builtin/checkout.c:1037
msgid "internal error in revision walk"
msgstr "вътрешна грешка при обхождането на версиите"
-#: builtin/checkout.c:1042
+#: builtin/checkout.c:1041
msgid "Previous HEAD position was"
msgstr "Преди това „HEAD“ сочеше към"
-#: builtin/checkout.c:1082 builtin/checkout.c:1351
+#: builtin/checkout.c:1081 builtin/checkout.c:1350
msgid "You are on a branch yet to be born"
msgstr "В момента сте на клон, който все още не е създаден"
-#: builtin/checkout.c:1164
+#: builtin/checkout.c:1163
#, c-format
msgid ""
"'%s' could be both a local file and a tracking branch.\n"
@@ -12249,7 +12553,7 @@
"„%s“ може да е както локален файл, така и следящ клон. За уточняване\n"
"ползвайте разделителя „--“ (и евентуално опцията „--no-guess“)"
-#: builtin/checkout.c:1171
+#: builtin/checkout.c:1170
msgid ""
"If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
"you can do so by fully qualifying the name with the --track option:\n"
@@ -12271,51 +12575,51 @@
"\n"
" checkout.defaultRemote=origin"
-#: builtin/checkout.c:1181
+#: builtin/checkout.c:1180
#, c-format
msgid "'%s' matched multiple (%d) remote tracking branches"
msgstr "„%s“ напасва с множество (%d) отдалечени клони"
-#: builtin/checkout.c:1247
+#: builtin/checkout.c:1246
msgid "only one reference expected"
msgstr "очаква се само един указател"
-#: builtin/checkout.c:1264
+#: builtin/checkout.c:1263
#, c-format
msgid "only one reference expected, %d given."
msgstr "очаква се един указател, а сте подали %d."
-#: builtin/checkout.c:1310 builtin/worktree.c:342 builtin/worktree.c:510
+#: builtin/checkout.c:1309 builtin/worktree.c:270 builtin/worktree.c:438
#, c-format
msgid "invalid reference: %s"
msgstr "неправилен указател: %s"
-#: builtin/checkout.c:1323 builtin/checkout.c:1689
+#: builtin/checkout.c:1322 builtin/checkout.c:1688
#, c-format
msgid "reference is not a tree: %s"
msgstr "указателят не сочи към обект-дърво: %s"
-#: builtin/checkout.c:1370
+#: builtin/checkout.c:1369
#, c-format
msgid "a branch is expected, got tag '%s'"
msgstr "очаква се клон, а не етикет — „%s“"
-#: builtin/checkout.c:1372
+#: builtin/checkout.c:1371
#, c-format
msgid "a branch is expected, got remote branch '%s'"
msgstr "очаква се локален, а не отдалечен клон — „%s“"
-#: builtin/checkout.c:1373 builtin/checkout.c:1381
+#: builtin/checkout.c:1372 builtin/checkout.c:1380
#, c-format
msgid "a branch is expected, got '%s'"
msgstr "очаква се клон, а не „%s“"
-#: builtin/checkout.c:1376
+#: builtin/checkout.c:1375
#, c-format
msgid "a branch is expected, got commit '%s'"
msgstr "очаква се клон, а не подаване — „%s“"
-#: builtin/checkout.c:1392
+#: builtin/checkout.c:1391
msgid ""
"cannot switch branch while merging\n"
"Consider \"git merge --quit\" or \"git worktree add\"."
@@ -12323,7 +12627,7 @@
"по време на сливане не може да преминете към друг клон.\n"
"Пробвайте с „git merge --quit“ или „git worktree add“."
-#: builtin/checkout.c:1396
+#: builtin/checkout.c:1395
msgid ""
"cannot switch branch in the middle of an am session\n"
"Consider \"git am --quit\" or \"git worktree add\"."
@@ -12332,7 +12636,7 @@
"клон.\n"
"Пробвайте с „git am --quit“ или „git worktree add“."
-#: builtin/checkout.c:1400
+#: builtin/checkout.c:1399
msgid ""
"cannot switch branch while rebasing\n"
"Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -12340,7 +12644,7 @@
"по време на пребазиране не може да преминете към друг клон.\n"
"Пробвайте с „git rebase --quit“ или „git worktree add“."
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1403
msgid ""
"cannot switch branch while cherry-picking\n"
"Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -12348,7 +12652,7 @@
"по време на отбиране на подавания не може да преминете към друг клон.\n"
"Пробвайте с „git cherry-pick --quit“ или „git worktree add“."
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1407
msgid ""
"cannot switch branch while reverting\n"
"Consider \"git revert --quit\" or \"git worktree add\"."
@@ -12356,146 +12660,139 @@
"по време на отмяна на подавания не може да преминете към друг клон.\n"
"Пробвайте с „git revert --quit“ или „git worktree add“."
-#: builtin/checkout.c:1412
+#: builtin/checkout.c:1411
msgid "you are switching branch while bisecting"
msgstr "преминаване към друг клон по време на двоично търсене"
-#: builtin/checkout.c:1419
+#: builtin/checkout.c:1418
msgid "paths cannot be used with switching branches"
msgstr "задаването на път е несъвместимо с преминаването от един клон към друг"
-#: builtin/checkout.c:1422 builtin/checkout.c:1426 builtin/checkout.c:1430
+#: builtin/checkout.c:1421 builtin/checkout.c:1425 builtin/checkout.c:1429
#, c-format
msgid "'%s' cannot be used with switching branches"
msgstr "опцията „%s“ е несъвместима с преминаването от един клон към друг"
-#: builtin/checkout.c:1434 builtin/checkout.c:1437 builtin/checkout.c:1440
-#: builtin/checkout.c:1445 builtin/checkout.c:1450
+#: builtin/checkout.c:1433 builtin/checkout.c:1436 builtin/checkout.c:1439
+#: builtin/checkout.c:1444 builtin/checkout.c:1449
#, c-format
msgid "'%s' cannot be used with '%s'"
msgstr "опцията „%s“ е несъвместима с „%s“"
-#: builtin/checkout.c:1447
+#: builtin/checkout.c:1446
#, c-format
msgid "'%s' cannot take <start-point>"
msgstr "опцията „%s“ е несъвместима със задаването на НАЧАЛО"
-#: builtin/checkout.c:1455
+#: builtin/checkout.c:1454
#, c-format
msgid "Cannot switch branch to a non-commit '%s'"
msgstr ""
"За да преминете към клон, подайте указател, който сочи към подаване. „%s“ "
"не е такъв"
-#: builtin/checkout.c:1462
+#: builtin/checkout.c:1461
msgid "missing branch or commit argument"
msgstr "липсва аргумент — клон или подаване"
-#: builtin/checkout.c:1504 builtin/clone.c:92 builtin/commit-graph.c:84
-#: builtin/commit-graph.c:222 builtin/fetch.c:172 builtin/merge.c:296
-#: builtin/multi-pack-index.c:27 builtin/pull.c:119 builtin/push.c:575
-#: builtin/send-pack.c:198
-msgid "force progress reporting"
-msgstr "извеждане на напредъка"
-
-#: builtin/checkout.c:1505
+#: builtin/checkout.c:1504
msgid "perform a 3-way merge with the new branch"
msgstr "извършване на тройно сливане с новия клон"
-#: builtin/checkout.c:1506 builtin/log.c:1800 parse-options.h:322
+#: builtin/checkout.c:1505 builtin/log.c:1799 parse-options.h:322
msgid "style"
msgstr "СТИЛ"
-#: builtin/checkout.c:1507
+#: builtin/checkout.c:1506
msgid "conflict style (merge or diff3)"
msgstr "действие при конфликт (сливане или тройна разлика)"
-#: builtin/checkout.c:1519 builtin/worktree.c:558
+#: builtin/checkout.c:1518 builtin/worktree.c:486
msgid "detach HEAD at named commit"
msgstr "отделяне на указателя „HEAD“ към указаното подаване"
-#: builtin/checkout.c:1520
+#: builtin/checkout.c:1519
msgid "set upstream info for new branch"
msgstr "задаване на кой клон бива следен при създаването на новия клон"
-#: builtin/checkout.c:1522
+#: builtin/checkout.c:1521
msgid "force checkout (throw away local modifications)"
msgstr "принудително изтегляне (вашите промени ще бъдат занулени)"
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1523
msgid "new-branch"
msgstr "НОВ_КЛОН"
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1523
msgid "new unparented branch"
msgstr "нов клон без родител"
-#: builtin/checkout.c:1526 builtin/merge.c:300
+#: builtin/checkout.c:1525 builtin/merge.c:301
msgid "update ignored files (default)"
msgstr "обновяване на игнорираните файлове (стандартно)"
-#: builtin/checkout.c:1529
+#: builtin/checkout.c:1528
msgid "do not check if another worktree is holding the given ref"
msgstr "без проверка дали друго работно дърво държи указателя"
-#: builtin/checkout.c:1542
+#: builtin/checkout.c:1541
msgid "checkout our version for unmerged files"
msgstr "изтегляне на вашата версия на неслетите файлове"
-#: builtin/checkout.c:1545
+#: builtin/checkout.c:1544
msgid "checkout their version for unmerged files"
msgstr "изтегляне на чуждата версия на неслетите файлове"
-#: builtin/checkout.c:1549
+#: builtin/checkout.c:1548
msgid "do not limit pathspecs to sparse entries only"
msgstr "без ограничаване на изброените пътища само до частично изтеглените"
-#: builtin/checkout.c:1604
+#: builtin/checkout.c:1603
#, c-format
msgid "-%c, -%c and --orphan are mutually exclusive"
msgstr "Опциите „-%c“, „-%c“ и „--orphan“ са несъвместими една с друга"
-#: builtin/checkout.c:1608
+#: builtin/checkout.c:1607
msgid "-p and --overlay are mutually exclusive"
msgstr "опциите „-p“ и „--overlay“ са несъвместими"
-#: builtin/checkout.c:1645
+#: builtin/checkout.c:1644
msgid "--track needs a branch name"
msgstr "опцията „--track“ изисква име на клон"
-#: builtin/checkout.c:1650
+#: builtin/checkout.c:1649
#, c-format
msgid "missing branch name; try -%c"
msgstr "липсва име на клон, използвайте опцията „-%c“"
-#: builtin/checkout.c:1682
+#: builtin/checkout.c:1681
#, c-format
msgid "could not resolve %s"
msgstr "„%s“ не може да бъде открит"
-#: builtin/checkout.c:1698
+#: builtin/checkout.c:1697
msgid "invalid path specification"
msgstr "указан е неправилен път"
-#: builtin/checkout.c:1705
+#: builtin/checkout.c:1704
#, c-format
msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
msgstr "„%s“ не е подаване, затова от него не може да се създаде клон „%s“"
-#: builtin/checkout.c:1709
+#: builtin/checkout.c:1708
#, c-format
msgid "git checkout: --detach does not take a path argument '%s'"
msgstr "git checkout: опцията „--detach“ не приема аргумент-път „%s“"
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1717
msgid "--pathspec-from-file is incompatible with --detach"
msgstr "опциите „--pathspec-from-file“ и „--detach“ са несъвместими"
-#: builtin/checkout.c:1721 builtin/reset.c:325 builtin/stash.c:1499
+#: builtin/checkout.c:1720 builtin/reset.c:325 builtin/stash.c:1566
msgid "--pathspec-from-file is incompatible with --patch"
msgstr "опциите „--pathspec-from-file“ и „--patch“ са несъвместими"
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1733
msgid ""
"git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
"checking out of the index."
@@ -12503,74 +12800,74 @@
"git checkout: опциите „--ours“/„--theirs“, „--force“ и „--merge“\n"
"са несъвместими с изтегляне от индекса."
-#: builtin/checkout.c:1739
+#: builtin/checkout.c:1738
msgid "you must specify path(s) to restore"
msgstr "трябва да укажете поне един път за възстановяване"
-#: builtin/checkout.c:1765 builtin/checkout.c:1767 builtin/checkout.c:1816
-#: builtin/checkout.c:1818 builtin/clone.c:122 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2719 builtin/worktree.c:554
-#: builtin/worktree.c:556
+#: builtin/checkout.c:1764 builtin/checkout.c:1766 builtin/checkout.c:1815
+#: builtin/checkout.c:1817 builtin/clone.c:122 builtin/remote.c:170
+#: builtin/remote.c:172 builtin/submodule--helper.c:2719 builtin/worktree.c:482
+#: builtin/worktree.c:484
msgid "branch"
msgstr "клон"
-#: builtin/checkout.c:1766
+#: builtin/checkout.c:1765
msgid "create and checkout a new branch"
msgstr "създаване и преминаване към нов клон"
-#: builtin/checkout.c:1768
+#: builtin/checkout.c:1767
msgid "create/reset and checkout a branch"
msgstr "създаване/зануляване на клон и преминаване към него"
-#: builtin/checkout.c:1769
+#: builtin/checkout.c:1768
msgid "create reflog for new branch"
msgstr "създаване на журнал на указателите за нов клон"
-#: builtin/checkout.c:1771
+#: builtin/checkout.c:1770
msgid "second guess 'git checkout <no-such-branch>' (default)"
msgstr ""
"опит за отгатване на име на клон след неуспешен опит с „git checkout "
"НЕСЪЩЕСТВУВАЩ_КЛОН“ (стандартно)"
-#: builtin/checkout.c:1772
+#: builtin/checkout.c:1771
msgid "use overlay mode (default)"
msgstr "използване на припокриващ режим (стандартно)"
-#: builtin/checkout.c:1817
+#: builtin/checkout.c:1816
msgid "create and switch to a new branch"
msgstr "създаване и преминаване към нов клон"
-#: builtin/checkout.c:1819
+#: builtin/checkout.c:1818
msgid "create/reset and switch to a branch"
msgstr "създаване/зануляване на клон и преминаване към него"
-#: builtin/checkout.c:1821
+#: builtin/checkout.c:1820
msgid "second guess 'git switch <no-such-branch>'"
msgstr ""
"опит за отгатване на име на клон след неуспешен опит с „git switch "
"НЕСЪЩЕСТВУВАЩ_КЛОН“"
-#: builtin/checkout.c:1823
+#: builtin/checkout.c:1822
msgid "throw away local modifications"
msgstr "зануляване на локалните промени"
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1856
msgid "which tree-ish to checkout from"
msgstr "към кой указател към дърво да се премине"
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1858
msgid "restore the index"
msgstr "възстановяване на индекса"
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1860
msgid "restore the working tree (default)"
msgstr "възстановяване на работното дърво (стандартно)"
-#: builtin/checkout.c:1863
+#: builtin/checkout.c:1862
msgid "ignore unmerged entries"
msgstr "пренебрегване на неслетите елементи"
-#: builtin/checkout.c:1864
+#: builtin/checkout.c:1863
msgid "use overlay mode"
msgstr "използване на припокриващ режим"
@@ -12714,8 +13011,8 @@
msgstr "изтриване на цели директории"
#: builtin/clean.c:909 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:921 builtin/log.c:183 builtin/log.c:185
-#: builtin/ls-files.c:558 builtin/name-rev.c:526 builtin/name-rev.c:528
+#: builtin/grep.c:922 builtin/log.c:184 builtin/log.c:186
+#: builtin/ls-files.c:573 builtin/name-rev.c:526 builtin/name-rev.c:528
#: builtin/show-ref.c:179
msgid "pattern"
msgstr "ШАБЛОН"
@@ -12813,7 +13110,7 @@
msgstr "опцията „--reference“ може да се използва само при клониране"
#: builtin/clone.c:120 builtin/column.c:27 builtin/init-db.c:563
-#: builtin/merge-file.c:46 builtin/pack-objects.c:3546 builtin/repack.c:358
+#: builtin/merge-file.c:46 builtin/pack-objects.c:3561 builtin/repack.c:357
msgid "name"
msgstr "ИМЕ"
@@ -12829,7 +13126,7 @@
msgid "path to git-upload-pack on the remote"
msgstr "път към командата „git-upload-pack“ на отдалеченото хранилище"
-#: builtin/clone.c:126 builtin/fetch.c:173 builtin/grep.c:860
+#: builtin/clone.c:126 builtin/fetch.c:176 builtin/grep.c:861
#: builtin/pull.c:208
msgid "depth"
msgstr "ДЪЛБОЧИНА"
@@ -12838,7 +13135,7 @@
msgid "create a shallow clone of that depth"
msgstr "плитко клониране до тази ДЪЛБОЧИНА"
-#: builtin/clone.c:128 builtin/fetch.c:175 builtin/pack-objects.c:3535
+#: builtin/clone.c:128 builtin/fetch.c:178 builtin/pack-objects.c:3550
#: builtin/pull.c:211
msgid "time"
msgstr "ВРЕМЕ"
@@ -12847,12 +13144,12 @@
msgid "create a shallow clone since a specific time"
msgstr "плитко клониране до момент във времето"
-#: builtin/clone.c:130 builtin/fetch.c:177 builtin/fetch.c:200
-#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1317
+#: builtin/clone.c:130 builtin/fetch.c:180 builtin/fetch.c:203
+#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1323
msgid "revision"
msgstr "ВЕРСИЯ"
-#: builtin/clone.c:131 builtin/fetch.c:178 builtin/pull.c:215
+#: builtin/clone.c:131 builtin/fetch.c:181 builtin/pull.c:215
msgid "deepen history of shallow clone, excluding rev"
msgstr "задълбочаване на историята на плитко хранилище до изключващ указател"
@@ -12888,22 +13185,22 @@
msgid "set config inside the new repository"
msgstr "задаване на настройките на новото хранилище"
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: builtin/clone.c:143 builtin/fetch.c:198 builtin/ls-remote.c:77
#: builtin/pull.c:230 builtin/push.c:584 builtin/send-pack.c:196
msgid "server-specific"
msgstr "специфични за сървъра"
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: builtin/clone.c:143 builtin/fetch.c:198 builtin/ls-remote.c:77
#: builtin/pull.c:231 builtin/push.c:584 builtin/send-pack.c:197
msgid "option to transmit"
msgstr "опция за пренос"
-#: builtin/clone.c:144 builtin/fetch.c:196 builtin/pull.c:234
+#: builtin/clone.c:144 builtin/fetch.c:199 builtin/pull.c:234
#: builtin/push.c:585
msgid "use IPv4 addresses only"
msgstr "само адреси IPv4"
-#: builtin/clone.c:146 builtin/fetch.c:198 builtin/pull.c:237
+#: builtin/clone.c:146 builtin/fetch.c:201 builtin/pull.c:237
#: builtin/push.c:587
msgid "use IPv6 addresses only"
msgstr "само адреси IPv6"
@@ -13013,70 +13310,70 @@
msgid "cannot unlink temporary alternates file"
msgstr "временният файл за алтернативни обекти не може да бъде изтрит"
-#: builtin/clone.c:992 builtin/receive-pack.c:2493
+#: builtin/clone.c:993 builtin/receive-pack.c:2493
msgid "Too many arguments."
msgstr "Прекалено много аргументи."
-#: builtin/clone.c:996
+#: builtin/clone.c:997
msgid "You must specify a repository to clone."
msgstr "Трябва да укажете кое хранилище искате да клонирате."
-#: builtin/clone.c:1009
+#: builtin/clone.c:1010
#, c-format
msgid "--bare and --origin %s options are incompatible."
msgstr "опциите „--bare“ и „--origin %s“ са несъвместими."
-#: builtin/clone.c:1012
+#: builtin/clone.c:1013
msgid "--bare and --separate-git-dir are incompatible."
msgstr "опциите „--bare“ и „--separate-git-dir“ са несъвместими."
-#: builtin/clone.c:1025
+#: builtin/clone.c:1026
#, c-format
msgid "repository '%s' does not exist"
msgstr "не съществува хранилище „%s“"
-#: builtin/clone.c:1029 builtin/fetch.c:1841
+#: builtin/clone.c:1030 builtin/fetch.c:1951
#, c-format
msgid "depth %s is not a positive number"
msgstr "дълбочината трябва да е положително цяло число, а не „%s“"
-#: builtin/clone.c:1039
+#: builtin/clone.c:1040
#, c-format
msgid "destination path '%s' already exists and is not an empty directory."
msgstr "целевият път „%s“ съществува и не е празна директория."
-#: builtin/clone.c:1045
+#: builtin/clone.c:1046
#, c-format
msgid "repository path '%s' already exists and is not an empty directory."
msgstr "пътят в хранилището „%s“ съществува и не е празна директория."
-#: builtin/clone.c:1059
+#: builtin/clone.c:1060
#, c-format
msgid "working tree '%s' already exists."
msgstr "в „%s“ вече съществува работно дърво."
-#: builtin/clone.c:1074 builtin/clone.c:1095 builtin/difftool.c:271
-#: builtin/log.c:1987 builtin/worktree.c:354 builtin/worktree.c:386
+#: builtin/clone.c:1075 builtin/clone.c:1096 builtin/difftool.c:271
+#: builtin/log.c:1986 builtin/worktree.c:282 builtin/worktree.c:314
#, c-format
msgid "could not create leading directories of '%s'"
msgstr "родителските директории на „%s“ не могат да бъдат създадени"
-#: builtin/clone.c:1079
+#: builtin/clone.c:1080
#, c-format
msgid "could not create work tree dir '%s'"
msgstr "работното дърво в „%s“ не може да бъде създадено."
-#: builtin/clone.c:1099
+#: builtin/clone.c:1100
#, c-format
msgid "Cloning into bare repository '%s'...\n"
msgstr "Клониране и създаване на голо хранилище в „%s“…\n"
-#: builtin/clone.c:1101
+#: builtin/clone.c:1102
#, c-format
msgid "Cloning into '%s'...\n"
msgstr "Клониране и създаване на хранилище в „%s“…\n"
-#: builtin/clone.c:1125
+#: builtin/clone.c:1126
msgid ""
"clone --recursive is not compatible with both --reference and --reference-if-"
"able"
@@ -13084,49 +13381,49 @@
"Опцията „--recursive“ е несъвместима с опциите „--reference“ и „--reference-"
"if-able“"
-#: builtin/clone.c:1169 builtin/remote.c:200 builtin/remote.c:705
+#: builtin/clone.c:1170 builtin/remote.c:200 builtin/remote.c:705
#, c-format
msgid "'%s' is not a valid remote name"
msgstr "„%s“ е неправилно име за отдалечено хранилище"
-#: builtin/clone.c:1210
+#: builtin/clone.c:1211
msgid "--depth is ignored in local clones; use file:// instead."
msgstr ""
"При локално клониране опцията „--depth“ се прескача. Ползвайте схемата "
"„file://“."
-#: builtin/clone.c:1212
+#: builtin/clone.c:1213
msgid "--shallow-since is ignored in local clones; use file:// instead."
msgstr ""
"При локално клониране опцията „--shallow-since“ се прескача. Ползвайте "
"схемата „file://“."
-#: builtin/clone.c:1214
+#: builtin/clone.c:1215
msgid "--shallow-exclude is ignored in local clones; use file:// instead."
msgstr ""
"При локално клониране опцията „--shallow-exclude“ се прескача. Ползвайте "
"схемата „file://“."
-#: builtin/clone.c:1216
+#: builtin/clone.c:1217
msgid "--filter is ignored in local clones; use file:// instead."
msgstr ""
"При локално клониране опцията „--filter“ се прескача. Ползвайте схемата "
"„file://“."
-#: builtin/clone.c:1219
+#: builtin/clone.c:1220
msgid "source repository is shallow, ignoring --local"
msgstr "клонираното хранилище е плитко, затова опцията „--local“ се прескача"
-#: builtin/clone.c:1224
+#: builtin/clone.c:1225
msgid "--local is ignored"
msgstr "опцията „--local“ се прескача"
-#: builtin/clone.c:1311 builtin/clone.c:1319
+#: builtin/clone.c:1315 builtin/clone.c:1323
#, c-format
msgid "Remote branch %s not found in upstream %s"
msgstr "Отдалеченият клон „%s“ липсва в клонираното хранилище „%s“"
-#: builtin/clone.c:1322
+#: builtin/clone.c:1326
msgid "You appear to have cloned an empty repository."
msgstr "Изглежда клонирахте празно хранилище."
@@ -13185,13 +13482,13 @@
msgstr "директорията с обекти, която отговаря на „%s“, не може да бъде открита"
#: builtin/commit-graph.c:80 builtin/commit-graph.c:210
-#: builtin/commit-graph.c:316 builtin/fetch.c:184 builtin/log.c:1769
+#: builtin/commit-graph.c:316 builtin/fetch.c:187 builtin/log.c:1768
msgid "dir"
msgstr "директория"
#: builtin/commit-graph.c:81 builtin/commit-graph.c:211
#: builtin/commit-graph.c:317
-msgid "The object directory to store the graph"
+msgid "the object directory to store the graph"
msgstr "ДИРекторията_с_ОБЕКТИ за запазване на гра̀фа"
#: builtin/commit-graph.c:83
@@ -13285,7 +13582,7 @@
msgid "duplicate parent %s ignored"
msgstr "прескачане на повтарящ се родител: „%s“"
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:555
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:557
#, c-format
msgid "not a valid object name %s"
msgstr "неправилно име на обект: „%s“"
@@ -13313,9 +13610,9 @@
msgid "id of a parent commit object"
msgstr "ИДЕНТИФИКАТОР на обекта за подаването-родител"
-#: builtin/commit-tree.c:114 builtin/commit.c:1504 builtin/merge.c:281
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1470
-#: builtin/tag.c:413
+#: builtin/commit-tree.c:114 builtin/commit.c:1504 builtin/merge.c:282
+#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1537
+#: builtin/tag.c:445
msgid "message"
msgstr "СЪОБЩЕНИЕ"
@@ -13327,7 +13624,7 @@
msgid "read commit log message from file"
msgstr "изчитане на съобщението за подаване от ФАЙЛ"
-#: builtin/commit-tree.c:121 builtin/commit.c:1516 builtin/merge.c:298
+#: builtin/commit-tree.c:121 builtin/commit.c:1516 builtin/merge.c:299
#: builtin/pull.c:176 builtin/revert.c:118
msgid "GPG sign commit"
msgstr "подписване на подаването с GPG"
@@ -13490,7 +13787,7 @@
msgid "could not lookup commit %s"
msgstr "следното подаване не може да бъде открито: %s"
-#: builtin/commit.c:729 builtin/shortlog.c:425
+#: builtin/commit.c:729 builtin/shortlog.c:413
#, c-format
msgid "(reading log message from standard input)\n"
msgstr "(изчитане на съобщението за подаване от стандартния вход)\n"
@@ -13589,7 +13886,7 @@
msgid "Error building trees"
msgstr "Грешка при изграждане на дърветата"
-#: builtin/commit.c:1011 builtin/tag.c:276
+#: builtin/commit.c:1011 builtin/tag.c:308
#, c-format
msgid "Please supply the message using either -m or -F option.\n"
msgstr "Подайте съобщението с някоя от опциите „-m“ или „-F“.\n"
@@ -13685,7 +13982,7 @@
msgstr "версия"
#: builtin/commit.c:1374 builtin/commit.c:1533 builtin/push.c:560
-#: builtin/worktree.c:725
+#: builtin/worktree.c:679
msgid "machine-readable output"
msgstr "формат на изхода за четене от програма"
@@ -13699,7 +13996,7 @@
#: builtin/commit.c:1382 builtin/commit.c:1386 builtin/commit.c:1541
#: builtin/fast-export.c:1198 builtin/fast-export.c:1201
-#: builtin/fast-export.c:1204 builtin/rebase.c:1406 parse-options.h:336
+#: builtin/fast-export.c:1204 builtin/rebase.c:1412 parse-options.h:336
msgid "mode"
msgstr "РЕЖИМ"
@@ -13760,7 +14057,7 @@
msgid "Commit message options"
msgstr "Опции за съобщението при подаване"
-#: builtin/commit.c:1501 builtin/merge.c:285 builtin/tag.c:415
+#: builtin/commit.c:1501 builtin/merge.c:286 builtin/tag.c:447
msgid "read message from file"
msgstr "взимане на съобщението от ФАЙЛ"
@@ -13772,7 +14069,7 @@
msgid "override author for commit"
msgstr "задаване на АВТОР за подаването"
-#: builtin/commit.c:1503 builtin/gc.c:542
+#: builtin/commit.c:1503 builtin/gc.c:550
msgid "date"
msgstr "ДАТА"
@@ -13781,7 +14078,7 @@
msgstr "задаване на ДАТА за подаването"
#: builtin/commit.c:1505 builtin/commit.c:1506 builtin/commit.c:1507
-#: builtin/commit.c:1508 parse-options.h:328 ref-filter.h:87
+#: builtin/commit.c:1508 parse-options.h:328 ref-filter.h:90
msgid "commit"
msgstr "ПОДАВАНЕ"
@@ -13810,7 +14107,7 @@
msgstr ""
"смяна на автора да съвпада с подаващия (използва се с „-C“/„-c“/„--amend“)"
-#: builtin/commit.c:1510 builtin/log.c:1744 builtin/merge.c:301
+#: builtin/commit.c:1510 builtin/log.c:1743 builtin/merge.c:302
#: builtin/pull.c:145 builtin/revert.c:110
msgid "add a Signed-off-by trailer"
msgstr "добавяне на епилог за подпис „Signed-off-by“"
@@ -14468,41 +14765,41 @@
msgid "--merge-base only works with two commits"
msgstr "опцията „--merge-base“ изисква точно две подавания"
-#: builtin/diff.c:91
+#: builtin/diff.c:92
#, c-format
msgid "'%s': not a regular file or symlink"
msgstr "„%s“: не е нито обикновен файл, нито символна връзка"
-#: builtin/diff.c:258
+#: builtin/diff.c:259
#, c-format
msgid "invalid option: %s"
msgstr "неправилна опция: %s"
-#: builtin/diff.c:375
+#: builtin/diff.c:376
#, c-format
msgid "%s...%s: no merge base"
msgstr "„%s..%s“: липсва база за сливане"
-#: builtin/diff.c:485
+#: builtin/diff.c:486
msgid "Not a git repository"
msgstr "Не е хранилище на Git"
-#: builtin/diff.c:530 builtin/grep.c:681
+#: builtin/diff.c:532 builtin/grep.c:682
#, c-format
msgid "invalid object '%s' given."
msgstr "зададен е неправилен обект „%s“."
-#: builtin/diff.c:541
+#: builtin/diff.c:543
#, c-format
msgid "more than two blobs given: '%s'"
msgstr "зададени са повече от 2 обекта-BLOB: „%s“"
-#: builtin/diff.c:546
+#: builtin/diff.c:548
#, c-format
msgid "unhandled object '%s' given."
msgstr "зададен е неподдържан обект „%s“."
-#: builtin/diff.c:580
+#: builtin/diff.c:582
#, c-format
msgid "%s...%s: multiple merge bases, using %s"
msgstr "%s...%s: много бази за сливане, ще се ползва „%s“"
@@ -14686,40 +14983,40 @@
"как да се обработват съобщенията за подаване, които са в друго кодиране"
#: builtin/fast-export.c:1208
-msgid "Dump marks to this file"
-msgstr "Запазване на маркерите в този ФАЙЛ"
+msgid "dump marks to this file"
+msgstr "запазване на маркерите в този ФАЙЛ"
#: builtin/fast-export.c:1210
-msgid "Import marks from this file"
-msgstr "Внасяне на маркерите от този ФАЙЛ"
+msgid "import marks from this file"
+msgstr "внасяне на маркерите от този ФАЙЛ"
#: builtin/fast-export.c:1214
-msgid "Import marks from this file if it exists"
-msgstr "Внасяне на маркерите от този ФАЙЛ, ако съществува"
+msgid "import marks from this file if it exists"
+msgstr "внасяне на маркерите от този ФАЙЛ, ако съществува"
#: builtin/fast-export.c:1216
-msgid "Fake a tagger when tags lack one"
-msgstr "Да се използва изкуствено име на човек при липса на задаващ етикета"
+msgid "fake a tagger when tags lack one"
+msgstr "да се използва изкуствено име на човек при липса на създател на етикета"
#: builtin/fast-export.c:1218
-msgid "Output full tree for each commit"
-msgstr "Извеждане на цялото дърво за всяко подаване"
+msgid "output full tree for each commit"
+msgstr "извеждане на цялото дърво за всяко подаване"
#: builtin/fast-export.c:1220
-msgid "Use the done feature to terminate the stream"
-msgstr "Използване на маркер за завършване на потока"
+msgid "use the done feature to terminate the stream"
+msgstr "използване на маркер за завършване на потока"
#: builtin/fast-export.c:1221
-msgid "Skip output of blob data"
-msgstr "Без извеждане на съдържанието на обектите-BLOB"
+msgid "skip output of blob data"
+msgstr "без извеждане на съдържанието на обектите-BLOB"
-#: builtin/fast-export.c:1222 builtin/log.c:1816
+#: builtin/fast-export.c:1222 builtin/log.c:1815
msgid "refspec"
msgstr "УКАЗАТЕЛ_НА_ВЕРСИЯ"
#: builtin/fast-export.c:1223
-msgid "Apply refspec to exported refs"
-msgstr "Прилагане на УКАЗАТЕЛя_НА_ВЕРСИЯ към изнесените указатели"
+msgid "apply refspec to exported refs"
+msgstr "прилагане на УКАЗАТЕЛя_НА_ВЕРСИЯ към изнесените указатели"
#: builtin/fast-export.c:1224
msgid "anonymize output"
@@ -14734,18 +15031,18 @@
msgstr "заместване ОТ със КЪМ в анонимизирания изход"
#: builtin/fast-export.c:1229
-msgid "Reference parents which are not in fast-export stream by object id"
+msgid "reference parents which are not in fast-export stream by object id"
msgstr ""
-"Указване на родителите, които не са в потока на бързо изнасяне, с "
+"указване на родителите, които не са в потока на бързо изнасяне, с "
"идентификатор на обект"
#: builtin/fast-export.c:1231
-msgid "Show original object ids of blobs/commits"
-msgstr "Извеждане на първоначалните идентификатори на обектите BLOB/подавяния"
+msgid "show original object ids of blobs/commits"
+msgstr "извеждане на първоначалните идентификатори на обектите BLOB/подавяния"
#: builtin/fast-export.c:1233
-msgid "Label tags with mark ids"
-msgstr "Задаване на идентификатори на маркери на етикетите"
+msgid "label tags with mark ids"
+msgstr "задаване на идентификатори на маркери на етикетите"
#: builtin/fast-export.c:1256
msgid "--anonymize-map without --anonymize does not make sense"
@@ -14784,7 +15081,7 @@
msgid "feature '%s' forbidden in input without --allow-unsafe-features"
msgstr "„%s“ изисква изричното задаване на опцията „--allow-unsafe-features“"
-#: builtin/fetch-pack.c:241
+#: builtin/fetch-pack.c:242
#, c-format
msgid "Lockfile created but not reported: %s"
msgstr "Заключващият файл е създаден, но не е докладван: „%s“"
@@ -14805,94 +15102,98 @@
msgid "git fetch --all [<options>]"
msgstr "git fetch --all [ОПЦИЯ…]"
-#: builtin/fetch.c:119
+#: builtin/fetch.c:120
msgid "fetch.parallel cannot be negative"
msgstr "опцията „fetch.parallel“ трябва да е неотрицателна"
-#: builtin/fetch.c:142 builtin/pull.c:185
+#: builtin/fetch.c:143 builtin/pull.c:185
msgid "fetch from all remotes"
msgstr "доставяне от всички отдалечени хранилища"
-#: builtin/fetch.c:144 builtin/pull.c:245
+#: builtin/fetch.c:145 builtin/pull.c:245
msgid "set upstream for git pull/fetch"
msgstr "задаване на клон за следене за издърпване/доставяне"
-#: builtin/fetch.c:146 builtin/pull.c:188
+#: builtin/fetch.c:147 builtin/pull.c:188
msgid "append to .git/FETCH_HEAD instead of overwriting"
msgstr "добавяне към „.git/FETCH_HEAD“ вместо замяна"
-#: builtin/fetch.c:148 builtin/pull.c:191
+#: builtin/fetch.c:149
+msgid "use atomic transaction to update references"
+msgstr "изискване на атомарни операции за обновяване на указателите"
+
+#: builtin/fetch.c:151 builtin/pull.c:191
msgid "path to upload pack on remote end"
msgstr "отдалечен път, където да се качи пакетът"
-#: builtin/fetch.c:149
+#: builtin/fetch.c:152
msgid "force overwrite of local reference"
msgstr "принудително презаписване на локален указател"
-#: builtin/fetch.c:151
+#: builtin/fetch.c:154
msgid "fetch from multiple remotes"
msgstr "доставяне от множество отдалечени хранилища"
-#: builtin/fetch.c:153 builtin/pull.c:195
+#: builtin/fetch.c:156 builtin/pull.c:195
msgid "fetch all tags and associated objects"
msgstr "доставяне на всички етикети и принадлежащи обекти"
-#: builtin/fetch.c:155
+#: builtin/fetch.c:158
msgid "do not fetch all tags (--no-tags)"
msgstr "без доставянето на всички етикети „--no-tags“"
-#: builtin/fetch.c:157
+#: builtin/fetch.c:160
msgid "number of submodules fetched in parallel"
msgstr "брой подмодули доставени паралелно"
-#: builtin/fetch.c:159 builtin/pull.c:198
+#: builtin/fetch.c:162 builtin/pull.c:198
msgid "prune remote-tracking branches no longer on remote"
msgstr "окастряне на клоните следящи вече несъществуващи отдалечени клони"
-#: builtin/fetch.c:161
+#: builtin/fetch.c:164
msgid "prune local tags no longer on remote and clobber changed tags"
msgstr ""
"окастряне на локалните етикети, които вече не съществуват в отдалеченото "
"хранилище и презаписване на променените"
-#: builtin/fetch.c:162 builtin/fetch.c:187 builtin/pull.c:122
+#: builtin/fetch.c:165 builtin/fetch.c:190 builtin/pull.c:122
msgid "on-demand"
msgstr "ПРИ НУЖДА"
-#: builtin/fetch.c:163
+#: builtin/fetch.c:166
msgid "control recursive fetching of submodules"
msgstr "управление на рекурсивното доставяне на подмодулите"
-#: builtin/fetch.c:168
+#: builtin/fetch.c:171
msgid "write fetched references to the FETCH_HEAD file"
msgstr "запазване на доставените указатели във файла „FETCH_HEAD“"
-#: builtin/fetch.c:169 builtin/pull.c:206
+#: builtin/fetch.c:172 builtin/pull.c:206
msgid "keep downloaded pack"
msgstr "запазване на изтеглените пакети с обекти"
-#: builtin/fetch.c:171
+#: builtin/fetch.c:174
msgid "allow updating of HEAD ref"
msgstr "позволяване на обновяването на указателя „HEAD“"
-#: builtin/fetch.c:174 builtin/fetch.c:180 builtin/pull.c:209
+#: builtin/fetch.c:177 builtin/fetch.c:183 builtin/pull.c:209
#: builtin/pull.c:218
msgid "deepen history of shallow clone"
msgstr "задълбочаване на историята на плитко хранилище"
-#: builtin/fetch.c:176 builtin/pull.c:212
+#: builtin/fetch.c:179 builtin/pull.c:212
msgid "deepen history of shallow repository based on time"
msgstr "задълбочаване на историята на плитко хранилище до определено време"
-#: builtin/fetch.c:182 builtin/pull.c:221
+#: builtin/fetch.c:185 builtin/pull.c:221
msgid "convert to a complete repository"
msgstr "превръщане в пълно хранилище"
-#: builtin/fetch.c:185
+#: builtin/fetch.c:188
msgid "prepend this to submodule path output"
msgstr "добавяне на това пред пътя на подмодула"
-#: builtin/fetch.c:188
+#: builtin/fetch.c:191
msgid ""
"default for recursive fetching of submodules (lower priority than config "
"files)"
@@ -14900,98 +15201,98 @@
"стандартно рекурсивно изтегляне на подмодулите (файловете с настройки са с "
"приоритет)"
-#: builtin/fetch.c:192 builtin/pull.c:224
+#: builtin/fetch.c:195 builtin/pull.c:224
msgid "accept refs that update .git/shallow"
msgstr "приемане на указатели, които обновяват „.git/shallow“"
-#: builtin/fetch.c:193 builtin/pull.c:226
+#: builtin/fetch.c:196 builtin/pull.c:226
msgid "refmap"
msgstr "КАРТА_С_УКАЗАТЕЛИ"
-#: builtin/fetch.c:194 builtin/pull.c:227
+#: builtin/fetch.c:197 builtin/pull.c:227
msgid "specify fetch refmap"
msgstr "указване на КАРТАта_С_УКАЗАТЕЛИ за доставяне"
-#: builtin/fetch.c:201 builtin/pull.c:240
+#: builtin/fetch.c:204 builtin/pull.c:240
msgid "report that we have only objects reachable from this object"
msgstr "докладване, че всички обекти могат са достижими при започване от този"
-#: builtin/fetch.c:204 builtin/fetch.c:206
+#: builtin/fetch.c:207 builtin/fetch.c:209
msgid "run 'maintenance --auto' after fetching"
msgstr "изпълняване на „maintenance --auto“ след доставяне"
-#: builtin/fetch.c:208 builtin/pull.c:243
+#: builtin/fetch.c:211 builtin/pull.c:243
msgid "check for forced-updates on all updated branches"
msgstr "проверка за принудителни обновявания на всички клони"
-#: builtin/fetch.c:210
+#: builtin/fetch.c:213
msgid "write the commit-graph after fetching"
msgstr "запазване на гра̀фа с подаванията след доставяне"
-#: builtin/fetch.c:212
+#: builtin/fetch.c:215
msgid "accept refspecs from stdin"
msgstr "четене на указателите от стандартния вход"
-#: builtin/fetch.c:523
+#: builtin/fetch.c:526
msgid "Couldn't find remote ref HEAD"
msgstr "Указателят „HEAD“ в отдалеченото хранилище не може да бъде открит"
-#: builtin/fetch.c:677
+#: builtin/fetch.c:697
#, c-format
msgid "configuration fetch.output contains invalid value %s"
msgstr "настройката „fetch.output“ е с неправилна стойност „%s“"
-#: builtin/fetch.c:775
+#: builtin/fetch.c:796
#, c-format
msgid "object %s not found"
msgstr "обектът „%s“ липсва"
-#: builtin/fetch.c:779
+#: builtin/fetch.c:800
msgid "[up to date]"
msgstr "[актуален]"
-#: builtin/fetch.c:792 builtin/fetch.c:808 builtin/fetch.c:880
+#: builtin/fetch.c:813 builtin/fetch.c:829 builtin/fetch.c:901
msgid "[rejected]"
msgstr "[отхвърлен]"
-#: builtin/fetch.c:793
+#: builtin/fetch.c:814
msgid "can't fetch in current branch"
msgstr "в текущия клон не може да се доставя"
-#: builtin/fetch.c:803
+#: builtin/fetch.c:824
msgid "[tag update]"
msgstr "[обновяване на етикетите]"
-#: builtin/fetch.c:804 builtin/fetch.c:841 builtin/fetch.c:863
-#: builtin/fetch.c:875
+#: builtin/fetch.c:825 builtin/fetch.c:862 builtin/fetch.c:884
+#: builtin/fetch.c:896
msgid "unable to update local ref"
msgstr "локален указател не може да бъде обновен"
-#: builtin/fetch.c:808
+#: builtin/fetch.c:829
msgid "would clobber existing tag"
msgstr "съществуващ етикет ще бъде презаписан"
-#: builtin/fetch.c:830
+#: builtin/fetch.c:851
msgid "[new tag]"
msgstr "[нов етикет]"
-#: builtin/fetch.c:833
+#: builtin/fetch.c:854
msgid "[new branch]"
msgstr "[нов клон]"
-#: builtin/fetch.c:836
+#: builtin/fetch.c:857
msgid "[new ref]"
msgstr "[нов указател]"
-#: builtin/fetch.c:875
+#: builtin/fetch.c:896
msgid "forced update"
msgstr "принудително обновяване"
-#: builtin/fetch.c:880
+#: builtin/fetch.c:901
msgid "non-fast-forward"
msgstr "същинско сливане"
-#: builtin/fetch.c:901
+#: builtin/fetch.c:1005
msgid ""
"Fetch normally indicates which branches had a forced update,\n"
"but that check has been disabled. To re-enable, use '--show-forced-updates'\n"
@@ -15002,7 +15303,7 @@
"\n"
" git config fetch.showForcedUpdates true"
-#: builtin/fetch.c:905
+#: builtin/fetch.c:1009
#, c-format
msgid ""
"It took %.2f seconds to check forced updates. You can use\n"
@@ -15016,24 +15317,24 @@
"\n"
" git config fetch.showForcedUpdates false\n"
-#: builtin/fetch.c:939
+#: builtin/fetch.c:1041
#, c-format
msgid "%s did not send all necessary objects\n"
msgstr "хранилището „%s“ не изпрати всички необходими обекти\n"
-#: builtin/fetch.c:960
+#: builtin/fetch.c:1069
#, c-format
msgid "reject %s because shallow roots are not allowed to be updated"
msgstr ""
"отхвърляне на върха „%s“, защото плитките хранилища не могат да бъдат "
"обновявани"
-#: builtin/fetch.c:1053 builtin/fetch.c:1191
+#: builtin/fetch.c:1146 builtin/fetch.c:1297
#, c-format
msgid "From %.*s\n"
msgstr "От %.*s\n"
-#: builtin/fetch.c:1064
+#: builtin/fetch.c:1168
#, c-format
msgid ""
"some local refs could not be updated; try running\n"
@@ -15043,57 +15344,57 @@
"„git remote prune %s“, за да премахнете остарелите клони, които\n"
"предизвикват конфликта"
-#: builtin/fetch.c:1161
+#: builtin/fetch.c:1267
#, c-format
msgid " (%s will become dangling)"
msgstr " (обектът „%s“ ще се окаже извън клон)"
-#: builtin/fetch.c:1162
+#: builtin/fetch.c:1268
#, c-format
msgid " (%s has become dangling)"
msgstr " (обектът „%s“ вече е извън клон)"
-#: builtin/fetch.c:1194
+#: builtin/fetch.c:1300
msgid "[deleted]"
msgstr "[изтрит]"
-#: builtin/fetch.c:1195 builtin/remote.c:1118
+#: builtin/fetch.c:1301 builtin/remote.c:1118
msgid "(none)"
msgstr "(нищо)"
-#: builtin/fetch.c:1218
+#: builtin/fetch.c:1324
#, c-format
msgid "Refusing to fetch into current branch %s of non-bare repository"
msgstr "Не може да доставите в текущия клон „%s“ на хранилище, което не е голо"
-#: builtin/fetch.c:1237
+#: builtin/fetch.c:1343
#, c-format
msgid "Option \"%s\" value \"%s\" is not valid for %s"
msgstr "Стойността „%2$s“ за опцията „%1$s“ не е съвместима с „%3$s“"
-#: builtin/fetch.c:1240
+#: builtin/fetch.c:1346
#, c-format
msgid "Option \"%s\" is ignored for %s\n"
msgstr "Опцията „%s“ се прескача при „%s“\n"
-#: builtin/fetch.c:1448
+#: builtin/fetch.c:1558
msgid "multiple branches detected, incompatible with --set-upstream"
msgstr ""
"засечени са множество клони, това е несъвместимо с опцията „--set-upstream“"
-#: builtin/fetch.c:1463
+#: builtin/fetch.c:1573
msgid "not setting upstream for a remote remote-tracking branch"
msgstr "не може да указвате клон за следене на отдалечен етикет"
-#: builtin/fetch.c:1465
+#: builtin/fetch.c:1575
msgid "not setting upstream for a remote tag"
msgstr "не може да указвате клон за следене на отдалечен етикет"
-#: builtin/fetch.c:1467
+#: builtin/fetch.c:1577
msgid "unknown branch type"
msgstr "непознат вид клон"
-#: builtin/fetch.c:1469
+#: builtin/fetch.c:1579
msgid ""
"no source branch found.\n"
"you need to specify exactly one branch with the --set-upstream option."
@@ -15101,22 +15402,22 @@
"не е открит клон за следене.\n"
"Трябва изрично да зададете един клон с опцията „--set-upstream option“."
-#: builtin/fetch.c:1598 builtin/fetch.c:1661
+#: builtin/fetch.c:1708 builtin/fetch.c:1771
#, c-format
msgid "Fetching %s\n"
msgstr "Доставяне на „%s“\n"
-#: builtin/fetch.c:1608 builtin/fetch.c:1663 builtin/remote.c:101
+#: builtin/fetch.c:1718 builtin/fetch.c:1773 builtin/remote.c:101
#, c-format
msgid "Could not fetch %s"
msgstr "„%s“ не може да се достави"
-#: builtin/fetch.c:1620
+#: builtin/fetch.c:1730
#, c-format
msgid "could not fetch '%s' (exit code: %d)\n"
msgstr "„%s“ не може да се достави (изходният код е: %d)\n"
-#: builtin/fetch.c:1724
+#: builtin/fetch.c:1834
msgid ""
"No remote repository specified. Please, specify either a URL or a\n"
"remote name from which new revisions should be fetched."
@@ -15124,45 +15425,45 @@
"Не сте указали отдалечено хранилище. Задайте или адрес, или име\n"
"на отдалечено хранилище, откъдето да се доставят новите версии."
-#: builtin/fetch.c:1760
+#: builtin/fetch.c:1870
msgid "You need to specify a tag name."
msgstr "Трябва да укажете име на етикет."
-#: builtin/fetch.c:1825
+#: builtin/fetch.c:1935
msgid "Negative depth in --deepen is not supported"
msgstr "Отрицателна дълбочина като аргумент на „--deepen“ не се поддържа"
-#: builtin/fetch.c:1827
+#: builtin/fetch.c:1937
msgid "--deepen and --depth are mutually exclusive"
msgstr "опциите „--deepen“ и „--depth“ са несъвместими"
-#: builtin/fetch.c:1832
+#: builtin/fetch.c:1942
msgid "--depth and --unshallow cannot be used together"
msgstr "опциите „--depth“ и „--unshallow“ са несъвместими"
-#: builtin/fetch.c:1834
+#: builtin/fetch.c:1944
msgid "--unshallow on a complete repository does not make sense"
msgstr "не можете да използвате опцията „--unshallow“ върху пълно хранилище"
-#: builtin/fetch.c:1851
+#: builtin/fetch.c:1961
msgid "fetch --all does not take a repository argument"
msgstr "към „git fetch --all“ не можете да добавите аргумент — хранилище"
-#: builtin/fetch.c:1853
+#: builtin/fetch.c:1963
msgid "fetch --all does not make sense with refspecs"
msgstr ""
"към „git fetch --all“ не можете да добавите аргумент — указател на версия"
-#: builtin/fetch.c:1862
+#: builtin/fetch.c:1972
#, c-format
msgid "No such remote or remote group: %s"
msgstr "Няма нито отдалечено хранилище, нито група от хранилища на име „%s“"
-#: builtin/fetch.c:1869
+#: builtin/fetch.c:1979
msgid "Fetching a group and specifying refspecs does not make sense"
msgstr "Указването на група и указването на версия са несъвместими"
-#: builtin/fetch.c:1887
+#: builtin/fetch.c:1997
msgid ""
"--filter can only be used with the remote configured in extensions."
"partialclone"
@@ -15170,7 +15471,12 @@
"опцията „--filter“ може да се ползва само с отдалеченото хранилище указано в "
"настройката „extensions.partialClone“"
-#: builtin/fetch.c:1891
+#: builtin/fetch.c:2001
+msgid "--atomic can only be used when fetching from one remote"
+msgstr ""
+"опцията „--atomic“ поддържа доставяне само от едно отдалечено хранилище"
+
+#: builtin/fetch.c:2005
msgid "--stdin can only be used when fetching from one remote"
msgstr "опцията „--stdin“ поддържа доставяне само от едно отдалечено хранилище"
@@ -15238,7 +15544,7 @@
msgid "show only <n> matched refs"
msgstr "извеждане само на този БРОЙ напаснати указатели"
-#: builtin/for-each-ref.c:39 builtin/tag.c:440
+#: builtin/for-each-ref.c:39 builtin/tag.c:472
msgid "respect format colors"
msgstr "спазване на цветовете на форма̀та"
@@ -15278,32 +15584,32 @@
msgid "missing --config=<config>"
msgstr "липсва --config=НАСТРОЙКА"
-#: builtin/fsck.c:69 builtin/fsck.c:148 builtin/fsck.c:149
+#: builtin/fsck.c:69 builtin/fsck.c:130 builtin/fsck.c:131
msgid "unknown"
msgstr "непознат"
#. TRANSLATORS: e.g. error in tree 01bfda: <more explanation>
-#: builtin/fsck.c:101 builtin/fsck.c:121
+#: builtin/fsck.c:83 builtin/fsck.c:103
#, c-format
msgid "error in %s %s: %s"
msgstr "грешка в %s „%s“: %s"
#. TRANSLATORS: e.g. warning in tree 01bfda: <more explanation>
-#: builtin/fsck.c:115
+#: builtin/fsck.c:97
#, c-format
msgid "warning in %s %s: %s"
msgstr "предупреждение за %s „%s“: %s"
-#: builtin/fsck.c:144 builtin/fsck.c:147
+#: builtin/fsck.c:126 builtin/fsck.c:129
#, c-format
msgid "broken link from %7s %s"
msgstr "скъсана връзка от %7s %s"
-#: builtin/fsck.c:156
+#: builtin/fsck.c:138
msgid "wrong object type in link"
msgstr "неправилен вид обект във връзката"
-#: builtin/fsck.c:172
+#: builtin/fsck.c:154
#, c-format
msgid ""
"broken link from %7s %s\n"
@@ -15312,212 +15618,212 @@
"скъсана връзка от %7s %s\n"
" към %7s %s"
-#: builtin/fsck.c:283
+#: builtin/fsck.c:265
#, c-format
msgid "missing %s %s"
msgstr "липсващ обект: %s „%s“"
-#: builtin/fsck.c:310
+#: builtin/fsck.c:292
#, c-format
msgid "unreachable %s %s"
msgstr "недостижим обект: %s „%s“"
-#: builtin/fsck.c:330
+#: builtin/fsck.c:312
#, c-format
msgid "dangling %s %s"
msgstr "извън клон: %s „%s“"
-#: builtin/fsck.c:340
+#: builtin/fsck.c:322
msgid "could not create lost-found"
msgstr "„lost-found“ не може да се създаде"
-#: builtin/fsck.c:351
+#: builtin/fsck.c:333
#, c-format
msgid "could not finish '%s'"
msgstr "„%s“ не може да се завърши"
-#: builtin/fsck.c:368
+#: builtin/fsck.c:350
#, c-format
msgid "Checking %s"
msgstr "Проверка на „%s“"
-#: builtin/fsck.c:406
+#: builtin/fsck.c:388
#, c-format
msgid "Checking connectivity (%d objects)"
msgstr "Проверка на свързаността (%d обекта)"
-#: builtin/fsck.c:425
+#: builtin/fsck.c:407
#, c-format
msgid "Checking %s %s"
msgstr "Проверяване на %s „%s“"
-#: builtin/fsck.c:430
+#: builtin/fsck.c:412
msgid "broken links"
msgstr "скъсани връзки"
-#: builtin/fsck.c:439
+#: builtin/fsck.c:421
#, c-format
msgid "root %s"
msgstr "начална директория „%s“"
-#: builtin/fsck.c:447
+#: builtin/fsck.c:429
#, c-format
msgid "tagged %s %s (%s) in %s"
msgstr "приложен етикет „%s“ върху „%s“ (%s) в „%s“"
-#: builtin/fsck.c:476
+#: builtin/fsck.c:458
#, c-format
msgid "%s: object corrupt or missing"
msgstr "%s: липсващ или повреден обект"
-#: builtin/fsck.c:501
+#: builtin/fsck.c:483
#, c-format
msgid "%s: invalid reflog entry %s"
msgstr "%s: неправилен запис в журнала за указатели „%s“"
-#: builtin/fsck.c:515
+#: builtin/fsck.c:497
#, c-format
msgid "Checking reflog %s->%s"
msgstr "Проверка на журнала на указателите: „%s“ до „%s“"
-#: builtin/fsck.c:549
+#: builtin/fsck.c:531
#, c-format
msgid "%s: invalid sha1 pointer %s"
msgstr "„%s“: неправилен указател за SHA1: „%s“"
-#: builtin/fsck.c:556
+#: builtin/fsck.c:538
#, c-format
msgid "%s: not a commit"
msgstr "%s: не е подаване!"
-#: builtin/fsck.c:610
+#: builtin/fsck.c:592
msgid "notice: No default references"
msgstr "внимание: няма указатели по подразбиране"
-#: builtin/fsck.c:625
+#: builtin/fsck.c:607
#, c-format
msgid "%s: object corrupt or missing: %s"
msgstr "„%s“: липсващ обект: „%s“"
-#: builtin/fsck.c:638
+#: builtin/fsck.c:620
#, c-format
msgid "%s: object could not be parsed: %s"
msgstr "„%s“: не може да се анализира: „%s“"
-#: builtin/fsck.c:658
+#: builtin/fsck.c:640
#, c-format
msgid "bad sha1 file: %s"
msgstr "неправилен ред с контролна сума по SHA1: „%s“"
-#: builtin/fsck.c:673
+#: builtin/fsck.c:655
msgid "Checking object directory"
msgstr "Проверка на директория с обекти"
-#: builtin/fsck.c:676
+#: builtin/fsck.c:658
msgid "Checking object directories"
msgstr "Проверка на директориите с обекти"
-#: builtin/fsck.c:691
+#: builtin/fsck.c:673
#, c-format
msgid "Checking %s link"
msgstr "Проверка на връзките на „%s“"
#
-#: builtin/fsck.c:696 builtin/index-pack.c:865
+#: builtin/fsck.c:678 builtin/index-pack.c:865
#, c-format
msgid "invalid %s"
msgstr "неправилен указател „%s“"
-#: builtin/fsck.c:703
+#: builtin/fsck.c:685
#, c-format
msgid "%s points to something strange (%s)"
msgstr "„%s“ сочи към нещо необичайно (%s)"
-#: builtin/fsck.c:709
+#: builtin/fsck.c:691
#, c-format
msgid "%s: detached HEAD points at nothing"
msgstr "%s: несвързаният връх „HEAD“ не сочи към нищо"
-#: builtin/fsck.c:713
+#: builtin/fsck.c:695
#, c-format
msgid "notice: %s points to an unborn branch (%s)"
msgstr "предупреждение: „%s“ сочи към все още несъществуващ клон (%s)"
-#: builtin/fsck.c:725
+#: builtin/fsck.c:707
msgid "Checking cache tree"
msgstr "Проверка на дървото на кеша"
-#: builtin/fsck.c:730
+#: builtin/fsck.c:712
#, c-format
msgid "%s: invalid sha1 pointer in cache-tree"
msgstr "„%s“: неправилен указател за SHA1 в дървото на кеша"
-#: builtin/fsck.c:739
+#: builtin/fsck.c:721
msgid "non-tree in cache-tree"
msgstr "в дървото на кеша има нещо, което не е дърво"
-#: builtin/fsck.c:770
+#: builtin/fsck.c:752
msgid "git fsck [<options>] [<object>...]"
msgstr "git fsck [ОПЦИЯ…] [ОБЕКТ…]"
-#: builtin/fsck.c:776
+#: builtin/fsck.c:758
msgid "show unreachable objects"
msgstr "показване на недостижимите обекти"
-#: builtin/fsck.c:777
+#: builtin/fsck.c:759
msgid "show dangling objects"
msgstr "показване на обектите извън клоните"
-#: builtin/fsck.c:778
+#: builtin/fsck.c:760
msgid "report tags"
msgstr "показване на етикетите"
-#: builtin/fsck.c:779
+#: builtin/fsck.c:761
msgid "report root nodes"
msgstr "показване на кореновите възли"
-#: builtin/fsck.c:780
+#: builtin/fsck.c:762
msgid "make index objects head nodes"
msgstr "задаване на обекти от индекса да са коренови"
-#: builtin/fsck.c:781
+#: builtin/fsck.c:763
msgid "make reflogs head nodes (default)"
msgstr "проследяване и на указателите от журнала с указателите (стандартно)"
-#: builtin/fsck.c:782
+#: builtin/fsck.c:764
msgid "also consider packs and alternate objects"
msgstr "допълнително да се проверяват пакетите и алтернативните обекти"
-#: builtin/fsck.c:783
+#: builtin/fsck.c:765
msgid "check only connectivity"
msgstr "проверка само на връзката"
-#: builtin/fsck.c:784
+#: builtin/fsck.c:766 builtin/mktag.c:78
msgid "enable more strict checking"
msgstr "по-строги проверки"
-#: builtin/fsck.c:786
+#: builtin/fsck.c:768
msgid "write dangling objects in .git/lost-found"
msgstr "запазване на обектите извън клоните в директорията „.git/lost-found“"
-#: builtin/fsck.c:787 builtin/prune.c:134
+#: builtin/fsck.c:769 builtin/prune.c:134
msgid "show progress"
msgstr "показване на напредъка"
-#: builtin/fsck.c:788
+#: builtin/fsck.c:770
msgid "show verbose names for reachable objects"
msgstr "показване на подробни имена на достижимите обекти"
-#: builtin/fsck.c:847 builtin/index-pack.c:261
+#: builtin/fsck.c:829 builtin/index-pack.c:261
msgid "Checking objects"
msgstr "Проверка на обектите"
-#: builtin/fsck.c:875
+#: builtin/fsck.c:857
#, c-format
msgid "%s: object missing"
msgstr "„%s“: липсващ обект"
-#: builtin/fsck.c:886
+#: builtin/fsck.c:868
#, c-format
msgid "invalid parameter: expected sha1, got '%s'"
msgstr "неправилен параметър: очаква се SHA1, а бе получено: „%s“"
@@ -15526,27 +15832,27 @@
msgid "git gc [<options>]"
msgstr "git gc [ОПЦИЯ…]"
-#: builtin/gc.c:94
+#: builtin/gc.c:93
#, c-format
msgid "Failed to fstat %s: %s"
msgstr "Неуспешно изпълнение на „fstat“ върху „%s“: %s"
-#: builtin/gc.c:130
+#: builtin/gc.c:129
#, c-format
msgid "failed to parse '%s' value '%s'"
msgstr "стойността на „%s“ — „%s“ не може да се анализира"
-#: builtin/gc.c:479 builtin/init-db.c:58
+#: builtin/gc.c:487 builtin/init-db.c:58
#, c-format
msgid "cannot stat '%s'"
msgstr "не може да се получи информация чрез „stat“ за директорията „%s“"
-#: builtin/gc.c:488 builtin/notes.c:240 builtin/tag.c:530
+#: builtin/gc.c:496 builtin/notes.c:240 builtin/tag.c:562
#, c-format
msgid "cannot read '%s'"
msgstr "файлът „%s“ не може да бъде прочетен"
-#: builtin/gc.c:495
+#: builtin/gc.c:503
#, c-format
msgid ""
"The last gc run reported the following. Please correct the root cause\n"
@@ -15563,58 +15869,58 @@
"\n"
"%s"
-#: builtin/gc.c:543
+#: builtin/gc.c:551
msgid "prune unreferenced objects"
msgstr "окастряне на обектите, към които нищо не сочи"
-#: builtin/gc.c:545
+#: builtin/gc.c:553
msgid "be more thorough (increased runtime)"
msgstr "изчерпателно търсене на боклука (за сметка на повече време работа)"
-#: builtin/gc.c:546
+#: builtin/gc.c:554
msgid "enable auto-gc mode"
msgstr "включване на автоматичното събиране на боклука (auto-gc)"
-#: builtin/gc.c:549
+#: builtin/gc.c:557
msgid "force running gc even if there may be another gc running"
msgstr ""
"изрично стартиране на събирането на боклука, дори и ако вече работи друго "
"събиране"
-#: builtin/gc.c:552
+#: builtin/gc.c:560
msgid "repack all other packs except the largest pack"
msgstr "препакетиране на всичко без най-големия пакет"
-#: builtin/gc.c:569
+#: builtin/gc.c:576
#, c-format
msgid "failed to parse gc.logexpiry value %s"
msgstr "неразпозната стойност на „gc.logexpiry“ %s"
-#: builtin/gc.c:580
+#: builtin/gc.c:587
#, c-format
msgid "failed to parse prune expiry value %s"
msgstr "неразпозната стойност на периода за окастряне: %s"
-#: builtin/gc.c:600
+#: builtin/gc.c:607
#, c-format
msgid "Auto packing the repository in background for optimum performance.\n"
msgstr ""
"Автоматично пакетиране на заден фон на хранилището за по-добра "
"производителност.\n"
-#: builtin/gc.c:602
+#: builtin/gc.c:609
#, c-format
msgid "Auto packing the repository for optimum performance.\n"
msgstr "Автоматично пакетиране на хранилището за по-добра производителност.\n"
-#: builtin/gc.c:603
+#: builtin/gc.c:610
#, c-format
msgid "See \"git help gc\" for manual housekeeping.\n"
msgstr ""
"Погледнете ръководството за повече информация как да изпълните „git help "
"gc“.\n"
-#: builtin/gc.c:643
+#: builtin/gc.c:650
#, c-format
msgid ""
"gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
@@ -15623,148 +15929,175 @@
"процеса: %<PRIuMAX> (ако сте сигурни, че това не е вярно, това използвайте\n"
"опцията „--force“)"
-#: builtin/gc.c:698
+#: builtin/gc.c:705
msgid ""
"There are too many unreachable loose objects; run 'git prune' to remove them."
msgstr ""
"Има прекалено много недостижими, непакетирани обекти.\n"
"Използвайте „git prune“, за да ги окастрите."
-#: builtin/gc.c:708
+#: builtin/gc.c:715
msgid ""
"git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
msgstr ""
"git maintenance run [--auto] [--[no-]quiet] [--task=ЗАДАЧА] [--schedule]"
-#: builtin/gc.c:738
+#: builtin/gc.c:745
msgid "--no-schedule is not allowed"
msgstr "опцията „--no-schedule“ не е позволена"
-#: builtin/gc.c:743
+#: builtin/gc.c:750
#, c-format
msgid "unrecognized --schedule argument '%s'"
msgstr "непознат аргумент към „--schedule“: %s"
-#: builtin/gc.c:862
+#: builtin/gc.c:869
msgid "failed to write commit-graph"
msgstr "графът с подаванията не може да бъде записан"
-#: builtin/gc.c:901
+#: builtin/gc.c:914
msgid "failed to fill remotes"
msgstr "неуспешно попълване на следящите клони"
-#: builtin/gc.c:1024
+#: builtin/gc.c:1037
msgid "failed to start 'git pack-objects' process"
msgstr "процесът за командата „git pack-objects“ не може да бъде стартиран"
-#: builtin/gc.c:1041
+#: builtin/gc.c:1054
msgid "failed to finish 'git pack-objects' process"
msgstr "процесът за командата „git pack-objects“ не може да завърши"
-#: builtin/gc.c:1093
+#: builtin/gc.c:1106
msgid "failed to write multi-pack-index"
msgstr "индексът за множество пакети не може да бъде записан"
-#: builtin/gc.c:1111
+#: builtin/gc.c:1124
msgid "'git multi-pack-index expire' failed"
msgstr "неуспешно изпълнение на „git multi-pack-index expire“"
-#: builtin/gc.c:1172
+#: builtin/gc.c:1185
msgid "'git multi-pack-index repack' failed"
msgstr "неуспешно изпълнение на „git multi-pack-index repack“"
-#: builtin/gc.c:1181
+#: builtin/gc.c:1194
msgid ""
"skipping incremental-repack task because core.multiPackIndex is disabled"
msgstr ""
"задачата „incremental-repack“ се прескача, защото настройката „core."
"multiPackIndex“ е изключена"
-#: builtin/gc.c:1279
+#: builtin/gc.c:1298
#, c-format
msgid "lock file '%s' exists, skipping maintenance"
msgstr "заключващият файл „%s“ съществува. Действието се прескача"
-#: builtin/gc.c:1309
+#: builtin/gc.c:1328
#, c-format
msgid "task '%s' failed"
msgstr "неуспешно изпълнение на задачата „%s“"
-#: builtin/gc.c:1389
+#: builtin/gc.c:1410
#, c-format
msgid "'%s' is not a valid task"
msgstr "„%s“ не е правилна задача"
-#: builtin/gc.c:1394
+#: builtin/gc.c:1415
#, c-format
msgid "task '%s' cannot be selected multiple times"
msgstr "задачата „%s“ не може да се избере повече от веднъж"
-#: builtin/gc.c:1409
+#: builtin/gc.c:1430
msgid "run tasks based on the state of the repository"
msgstr "изпълняване на задачи според състоянието на хранилището"
-#: builtin/gc.c:1410
+#: builtin/gc.c:1431
msgid "frequency"
msgstr "честота"
-#: builtin/gc.c:1411
+#: builtin/gc.c:1432
msgid "run tasks based on frequency"
msgstr "изпълняване на задачи по график"
-#: builtin/gc.c:1414
+#: builtin/gc.c:1435
msgid "do not report progress or other information over stderr"
msgstr "без извеждане на напредъка и друга информация на стандартния изход"
-#: builtin/gc.c:1415
+#: builtin/gc.c:1436
msgid "task"
msgstr "задача"
-#: builtin/gc.c:1416
+#: builtin/gc.c:1437
msgid "run a specific task"
msgstr "изпълнение на определена задача"
-#: builtin/gc.c:1433
+#: builtin/gc.c:1454
msgid "use at most one of --auto and --schedule=<frequency>"
msgstr ""
"може да се указва максимум една от опциите „--auto“ и „--schedule=ЧЕСТОТА“"
-#: builtin/gc.c:1467
+#: builtin/gc.c:1497
msgid "failed to run 'git config'"
msgstr "неуспешно изпълнение на „git config“"
-#: builtin/gc.c:1512
-msgid "another process is scheduling background maintenance"
-msgstr "друг процес задава поддръжката на заден фон"
+#: builtin/gc.c:1562
+#, c-format
+msgid "failed to expand path '%s'"
+msgstr "грешка при заместването на пътя „%s“"
-#: builtin/gc.c:1525
+#: builtin/gc.c:1591
+msgid "failed to start launchctl"
+msgstr "неуспешно стартиране на „launchctl“."
+
+#: builtin/gc.c:1628
+#, c-format
+msgid "failed to create directories for '%s'"
+msgstr "директориите за „%s“ не може да бъдат създадени"
+
+#: builtin/gc.c:1689
+#, c-format
+msgid "failed to bootstrap service %s"
+msgstr "услугата „%s“ не може се настрои първоначално"
+
+#: builtin/gc.c:1760
+msgid "failed to create temp xml file"
+msgstr "неуспешно създаване на временен файл за xml"
+
+#: builtin/gc.c:1850
+msgid "failed to start schtasks"
+msgstr "задачите за периодично изпълнение не може да се стартират"
+
+#: builtin/gc.c:1894
msgid "failed to run 'crontab -l'; your system might not support 'cron'"
msgstr ""
"неуспешно изпълнение на „crontab -l“. Системата ви може да не поддържа "
"„cron“"
-#: builtin/gc.c:1544
+#: builtin/gc.c:1911
msgid "failed to run 'crontab'; your system might not support 'cron'"
msgstr ""
"неуспешно изпълнение на „crontab“. Системата ви може да не поддържа „cron“"
-#: builtin/gc.c:1550
+#: builtin/gc.c:1915
msgid "failed to open stdin of 'crontab'"
msgstr "стандартният вход на „crontab“ не може да се отвори"
-#: builtin/gc.c:1592
+#: builtin/gc.c:1956
msgid "'crontab' died"
msgstr "процесът на „crontab“ умря"
-#: builtin/gc.c:1605
+#: builtin/gc.c:1990
+msgid "another process is scheduling background maintenance"
+msgstr "друг процес задава поддръжката на заден фон"
+
+#: builtin/gc.c:2009
msgid "failed to add repo to global config"
msgstr "неуспешно добавяне на хранилище към файла с глобални настройки"
-#: builtin/gc.c:1615
+#: builtin/gc.c:2019
msgid "git maintenance <subcommand> [<options>]"
msgstr "git maintenance ПОДКОМАНДА [ОПЦИЯ…]"
-#: builtin/gc.c:1634
+#: builtin/gc.c:2038
#, c-format
msgid "invalid subcommand: %s"
msgstr "неправилна подкоманда: „%s“"
@@ -15773,12 +16106,12 @@
msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
msgstr "git grep [ОПЦИЯ…] [-e] ШАБЛОН [ВЕРСИЯ…] [[--] ПЪТ…]"
-#: builtin/grep.c:225
+#: builtin/grep.c:223
#, c-format
msgid "grep: failed to create thread: %s"
msgstr "grep: неуспешно създаване на нишка: %s"
-#: builtin/grep.c:279
+#: builtin/grep.c:277
#, c-format
msgid "invalid number of threads specified (%d) for %s"
msgstr "зададен е неправилен брой нишки (%d) за %s"
@@ -15787,271 +16120,271 @@
#. variable for tweaking threads, currently
#. grep.threads
#.
-#: builtin/grep.c:287 builtin/index-pack.c:1576 builtin/index-pack.c:1766
-#: builtin/pack-objects.c:2936
+#: builtin/grep.c:285 builtin/index-pack.c:1589 builtin/index-pack.c:1808
+#: builtin/pack-objects.c:2944
#, c-format
msgid "no threads support, ignoring %s"
msgstr "липсва поддръжка за нишки. „%s“ ще се пренебрегне"
-#: builtin/grep.c:475 builtin/grep.c:600 builtin/grep.c:640
+#: builtin/grep.c:473 builtin/grep.c:601 builtin/grep.c:641
#, c-format
msgid "unable to read tree (%s)"
msgstr "дървото не може да бъде прочетено (%s)"
-#: builtin/grep.c:655
+#: builtin/grep.c:656
#, c-format
msgid "unable to grep from object of type %s"
msgstr "не може да се изпълни „grep“ от обект от вида %s"
-#: builtin/grep.c:736
+#: builtin/grep.c:737
#, c-format
msgid "switch `%c' expects a numerical value"
msgstr "опцията „%c“ очаква число за аргумент"
-#: builtin/grep.c:835
+#: builtin/grep.c:836
msgid "search in index instead of in the work tree"
msgstr "търсене в индекса, а не в работното дърво"
-#: builtin/grep.c:837
+#: builtin/grep.c:838
msgid "find in contents not managed by git"
msgstr "търсене и във файловете, които не са под управлението на git"
-#: builtin/grep.c:839
+#: builtin/grep.c:840
msgid "search in both tracked and untracked files"
msgstr "търсене и в следените, и в неследените файлове"
-#: builtin/grep.c:841
+#: builtin/grep.c:842
msgid "ignore files specified via '.gitignore'"
msgstr "игнориране на файловете указани в „.gitignore“"
-#: builtin/grep.c:843
+#: builtin/grep.c:844
msgid "recursively search in each submodule"
msgstr "рекурсивно търсене във всички подмодули"
-#: builtin/grep.c:846
+#: builtin/grep.c:847
msgid "show non-matching lines"
msgstr "извеждане на редовете, които не съвпадат"
-#: builtin/grep.c:848
+#: builtin/grep.c:849
msgid "case insensitive matching"
msgstr "без значение на регистъра на буквите (главни/малки)"
-#: builtin/grep.c:850
+#: builtin/grep.c:851
msgid "match patterns only at word boundaries"
msgstr "напасване на шаблоните само по границите на думите"
-#: builtin/grep.c:852
+#: builtin/grep.c:853
msgid "process binary files as text"
msgstr "обработване на двоичните файлове като текстови"
-#: builtin/grep.c:854
+#: builtin/grep.c:855
msgid "don't match patterns in binary files"
msgstr "прескачане на двоичните файлове"
-#: builtin/grep.c:857
+#: builtin/grep.c:858
msgid "process binary files with textconv filters"
msgstr ""
"обработване на двоичните файлове чрез филтри за преобразуване към текст"
-#: builtin/grep.c:859
+#: builtin/grep.c:860
msgid "search in subdirectories (default)"
msgstr "търсене в поддиректориите (стандартно)"
-#: builtin/grep.c:861
+#: builtin/grep.c:862
msgid "descend at most <depth> levels"
msgstr "навлизане максимално на тази ДЪЛБОЧИНА в дървото"
-#: builtin/grep.c:865
+#: builtin/grep.c:866
msgid "use extended POSIX regular expressions"
msgstr "разширени регулярни изрази по POSIX"
-#: builtin/grep.c:868
+#: builtin/grep.c:869
msgid "use basic POSIX regular expressions (default)"
msgstr "основни регулярни изрази по POSIX (стандартно)"
-#: builtin/grep.c:871
+#: builtin/grep.c:872
msgid "interpret patterns as fixed strings"
msgstr "шаблоните са дословни низове"
-#: builtin/grep.c:874
+#: builtin/grep.c:875
msgid "use Perl-compatible regular expressions"
msgstr "регулярни изрази на Perl"
-#: builtin/grep.c:877
+#: builtin/grep.c:878
msgid "show line numbers"
msgstr "извеждане на номерата на редовете"
-#: builtin/grep.c:878
+#: builtin/grep.c:879
msgid "show column number of first match"
msgstr "извеждане на номера на колоната на първото напасване"
-#: builtin/grep.c:879
+#: builtin/grep.c:880
msgid "don't show filenames"
msgstr "без извеждане на имената на файловете"
-#: builtin/grep.c:880
+#: builtin/grep.c:881
msgid "show filenames"
msgstr "извеждане на имената на файловете"
-#: builtin/grep.c:882
+#: builtin/grep.c:883
msgid "show filenames relative to top directory"
msgstr ""
"извеждане на относителните имена на файловете спрямо основната директория на "
"хранилището"
-#: builtin/grep.c:884
+#: builtin/grep.c:885
msgid "show only filenames instead of matching lines"
msgstr "извеждане само на имената на файловете без напасващите редове"
-#: builtin/grep.c:886
+#: builtin/grep.c:887
msgid "synonym for --files-with-matches"
msgstr "псевдоним на „--files-with-matches“"
-#: builtin/grep.c:889
+#: builtin/grep.c:890
msgid "show only the names of files without match"
msgstr ""
"извеждане само на имената на файловете, които не съдържат ред, напасващ на "
"шаблона"
-#: builtin/grep.c:891
+#: builtin/grep.c:892
msgid "print NUL after filenames"
msgstr "извеждане на нулевия знак „NUL“ след всяко име на файл"
-#: builtin/grep.c:894
+#: builtin/grep.c:895
msgid "show only matching parts of a line"
msgstr "извеждане само на частите на редовете, които съвпадат"
-#: builtin/grep.c:896
+#: builtin/grep.c:897
msgid "show the number of matches instead of matching lines"
msgstr "извеждане на броя на съвпаденията вместо напасващите редове"
-#: builtin/grep.c:897
+#: builtin/grep.c:898
msgid "highlight matches"
msgstr "оцветяване на напасванията"
-#: builtin/grep.c:899
+#: builtin/grep.c:900
msgid "print empty line between matches from different files"
msgstr "извеждане на празен ред между напасванията от различни файлове"
-#: builtin/grep.c:901
+#: builtin/grep.c:902
msgid "show filename only once above matches from same file"
msgstr ""
"извеждане на името на файла само веднъж за всички напасвания от този файл"
-#: builtin/grep.c:904
+#: builtin/grep.c:905
msgid "show <n> context lines before and after matches"
msgstr "извеждане на такъв БРОЙ редове преди и след напасванията"
-#: builtin/grep.c:907
+#: builtin/grep.c:908
msgid "show <n> context lines before matches"
msgstr "извеждане на такъв БРОЙ редове преди напасванията"
-#: builtin/grep.c:909
+#: builtin/grep.c:910
msgid "show <n> context lines after matches"
msgstr "извеждане на такъв БРОЙ редове след напасванията"
-#: builtin/grep.c:911
+#: builtin/grep.c:912
msgid "use <n> worker threads"
msgstr "използване на такъв БРОЙ работещи нишки"
-#: builtin/grep.c:912
+#: builtin/grep.c:913
msgid "shortcut for -C NUM"
msgstr "псевдоним на „-C БРОЙ“"
-#: builtin/grep.c:915
+#: builtin/grep.c:916
msgid "show a line with the function name before matches"
msgstr "извеждане на ред с името на функцията, в която е напаснат шаблона"
-#: builtin/grep.c:917
+#: builtin/grep.c:918
msgid "show the surrounding function"
msgstr "извеждане на обхващащата функция"
-#: builtin/grep.c:920
+#: builtin/grep.c:921
msgid "read patterns from file"
msgstr "изчитане на шаблоните от ФАЙЛ"
-#: builtin/grep.c:922
+#: builtin/grep.c:923
msgid "match <pattern>"
msgstr "напасване на ШАБЛОН"
-#: builtin/grep.c:924
+#: builtin/grep.c:925
msgid "combine patterns specified with -e"
msgstr "комбиниране на шаблоните указани с опцията „-e“"
-#: builtin/grep.c:936
+#: builtin/grep.c:937
msgid "indicate hit with exit status without output"
msgstr ""
"без извеждане на стандартния изход. Изходният код указва наличието на "
"напасване"
-#: builtin/grep.c:938
+#: builtin/grep.c:939
msgid "show only matches from files that match all patterns"
msgstr ""
"извеждане на редове само от файловете, които напасват на всички шаблони"
-#: builtin/grep.c:940
-msgid "show parse tree for grep expression"
-msgstr "извеждане на дървото за анализ на регулярния израз"
-
-#: builtin/grep.c:944
+#: builtin/grep.c:942
msgid "pager"
msgstr "програма за преглед по страници"
-#: builtin/grep.c:944
+#: builtin/grep.c:942
msgid "show matching files in the pager"
msgstr "извеждане на съвпадащите файлове в програма за преглед по страници"
-#: builtin/grep.c:948
+#: builtin/grep.c:946
msgid "allow calling of grep(1) (ignored by this build)"
msgstr ""
"позволяване на стартирането на grep(1) (текущият компилат пренебрегва тази "
"опция)"
-#: builtin/grep.c:1014
+#: builtin/grep.c:1012
msgid "no pattern given"
msgstr "не сте задали шаблон"
-#: builtin/grep.c:1050
+#: builtin/grep.c:1048
msgid "--no-index or --untracked cannot be used with revs"
msgstr "опциите „--cached“ и „--untracked“ са несъвместими с версии."
-#: builtin/grep.c:1058
+#: builtin/grep.c:1056
#, c-format
msgid "unable to resolve revision: %s"
msgstr "версията „%s“ не може бъде открита"
-#: builtin/grep.c:1088
+#: builtin/grep.c:1086
msgid "--untracked not supported with --recurse-submodules"
msgstr "опциите „--untracked“ и „--recurse-submodules“ са несъвместими"
-#: builtin/grep.c:1092
+#: builtin/grep.c:1090
msgid "invalid option combination, ignoring --threads"
msgstr "неправилна комбинация от опции, „--threads“ ще се пренебрегне"
-#: builtin/grep.c:1095 builtin/pack-objects.c:3655
+#: builtin/grep.c:1093 builtin/pack-objects.c:3672
msgid "no threads support, ignoring --threads"
msgstr "липсва поддръжка за нишки. „--threads“ ще се пренебрегне"
-#: builtin/grep.c:1098 builtin/index-pack.c:1573 builtin/pack-objects.c:2933
+#: builtin/grep.c:1096 builtin/index-pack.c:1586 builtin/pack-objects.c:2941
#, c-format
msgid "invalid number of threads specified (%d)"
msgstr "зададен е неправилен брой нишки: %d"
-#: builtin/grep.c:1132
+#: builtin/grep.c:1130
msgid "--open-files-in-pager only works on the worktree"
msgstr "опцията „--open-files-in-pager“ изисква търсене в работното дърво"
-#: builtin/grep.c:1158
+#: builtin/grep.c:1156
msgid "--cached or --untracked cannot be used with --no-index"
msgstr "опциите „--cached“ и „--untracked“ са несъвместими с „--no-index“"
-#: builtin/grep.c:1164
+#: builtin/grep.c:1159
+msgid "--untracked cannot be used with --cached"
+msgstr "опциите „--untracked“ и „--cached“ са несъвместими"
+
+#: builtin/grep.c:1165
msgid "--[no-]exclude-standard cannot be used for tracked contents"
msgstr ""
"опциите „--(no-)exclude-standard“ са несъвместими с търсене по следени "
"файлове"
-#: builtin/grep.c:1172
+#: builtin/grep.c:1173
msgid "both --cached and trees are given"
msgstr "опцията „--cached“ е несъвместима със задаване на дърво"
@@ -16186,12 +16519,12 @@
"никоя програма за преглед на информационните страници не успя да обработи "
"заявката"
-#: builtin/help.c:520 builtin/help.c:531 git.c:337
+#: builtin/help.c:520 builtin/help.c:531 git.c:340
#, c-format
msgid "'%s' is aliased to '%s'"
msgstr "„%s“ е псевдоним на „%s“"
-#: builtin/help.c:534 git.c:369
+#: builtin/help.c:534 git.c:372
#, c-format
msgid "bad alias.%s string: %s"
msgstr "неправилен низ за настройката „alias.%s“: „%s“"
@@ -16239,7 +16572,7 @@
msgid "used more bytes than were available"
msgstr "използвани са повече от наличните байтове"
-#: builtin/index-pack.c:324 builtin/pack-objects.c:619
+#: builtin/index-pack.c:324 builtin/pack-objects.c:624
msgid "pack too large for current definition of off_t"
msgstr "пакетният файл е прекалено голям за текущата стойност на типа „off_t“"
@@ -16247,7 +16580,7 @@
msgid "pack exceeds maximum allowed size"
msgstr "пакетният файл надвишава максималния възможен размер"
-#: builtin/index-pack.c:342 builtin/repack.c:286
+#: builtin/index-pack.c:342
#, c-format
msgid "unable to create '%s'"
msgstr "пакетният файл „%s“ не може да бъде създаден"
@@ -16339,7 +16672,7 @@
#: builtin/index-pack.c:870
#, c-format
msgid "Not all child objects of %s are reachable"
-msgstr "Някои обекти, наследници на „%s“, не могат да бъдат достигнати"
+msgstr "Някои обекти, наследници на „%s“, не може да бъдат достигнати"
#: builtin/index-pack.c:931 builtin/index-pack.c:978
msgid "failed to apply delta"
@@ -16376,7 +16709,7 @@
msgid "Resolving deltas"
msgstr "Откриване на съответните разлики"
-#: builtin/index-pack.c:1249 builtin/pack-objects.c:2697
+#: builtin/index-pack.c:1249 builtin/pack-objects.c:2707
#, c-format
msgid "unable to create thread: %s"
msgstr "не може да се създаде нишка: %s"
@@ -16419,10 +16752,10 @@
msgid "local object %s is corrupt"
msgstr "локалният обект „%s“ е повреден"
-#: builtin/index-pack.c:1444
+#: builtin/index-pack.c:1445
#, c-format
-msgid "packfile name '%s' does not end with '.pack'"
-msgstr "името на пакетния файл „%s“ не завършва на „.pack“"
+msgid "packfile name '%s' does not end with '.%s'"
+msgstr "името на пакетния файл „%s“ не завършва с „%s“"
#: builtin/index-pack.c:1469
#, c-format
@@ -16434,79 +16767,83 @@
msgid "cannot close written %s file '%s'"
msgstr "грешка при затварянето на записания файл „%s“ „%s“"
-#: builtin/index-pack.c:1501
+#: builtin/index-pack.c:1503
msgid "error while closing pack file"
msgstr "грешка при затварянето на пакетния файл"
-#: builtin/index-pack.c:1515
+#: builtin/index-pack.c:1517
msgid "cannot store pack file"
msgstr "пакетният файл не може да бъде запазен"
-#: builtin/index-pack.c:1523
+#: builtin/index-pack.c:1525
msgid "cannot store index file"
msgstr "файлът за индекса не може да бъде съхранен"
-#: builtin/index-pack.c:1567 builtin/pack-objects.c:2944
+#: builtin/index-pack.c:1534
+msgid "cannot store reverse index file"
+msgstr "файлът за индекса не може да бъде съхранен"
+
+#: builtin/index-pack.c:1580 builtin/pack-objects.c:2952
#, c-format
msgid "bad pack.indexversion=%<PRIu32>"
msgstr "зададена е неправилна версия пакетиране: „pack.indexversion=%<PRIu32>“"
-#: builtin/index-pack.c:1631
+#: builtin/index-pack.c:1650
#, c-format
msgid "Cannot open existing pack file '%s'"
msgstr "Съществуващият пакетен файл „%s“ не може да бъде отворен"
-#: builtin/index-pack.c:1633
+#: builtin/index-pack.c:1652
#, c-format
msgid "Cannot open existing pack idx file for '%s'"
msgstr "Съществуващият индекс за пакетния файл „%s“ не може да бъде отворен"
-#: builtin/index-pack.c:1681
+#: builtin/index-pack.c:1700
#, c-format
msgid "non delta: %d object"
msgid_plural "non delta: %d objects"
msgstr[0] "%d обект не е разлика"
msgstr[1] "%d обекта не са разлика"
-#: builtin/index-pack.c:1688
+#: builtin/index-pack.c:1707
#, 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:1728
+#: builtin/index-pack.c:1765
msgid "Cannot come back to cwd"
msgstr "Процесът не може да се върне към предишната работна директория"
-#: builtin/index-pack.c:1777 builtin/index-pack.c:1780
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1800
+#: builtin/index-pack.c:1819 builtin/index-pack.c:1822
+#: builtin/index-pack.c:1838 builtin/index-pack.c:1842
#, c-format
msgid "bad %s"
msgstr "неправилна стойност „%s“"
-#: builtin/index-pack.c:1806 builtin/init-db.c:392 builtin/init-db.c:625
+#: builtin/index-pack.c:1848 builtin/init-db.c:392 builtin/init-db.c:625
#, c-format
msgid "unknown hash algorithm '%s'"
msgstr "непознат алгоритъм за контролни суми „%s“"
-#: builtin/index-pack.c:1821
+#: builtin/index-pack.c:1867
msgid "--fix-thin cannot be used without --stdin"
msgstr "опцията „--fix-thin“ изисква „--stdin“"
-#: builtin/index-pack.c:1823
+#: builtin/index-pack.c:1869
msgid "--stdin requires a git repository"
msgstr "„--stdin“ изисква хранилище на git"
-#: builtin/index-pack.c:1825
+#: builtin/index-pack.c:1871
msgid "--object-format cannot be used with --stdin"
msgstr "опцията „--object-format“ и „--stdin“ са несъвместими"
-#: builtin/index-pack.c:1831
+#: builtin/index-pack.c:1886
msgid "--verify with no packfile name given"
msgstr "опцията „--verify“ изисква име на пакетен файл"
-#: builtin/index-pack.c:1892 builtin/unpack-objects.c:582
+#: builtin/index-pack.c:1956 builtin/unpack-objects.c:582
msgid "fsck error in pack objects"
msgstr "грешка при проверка с „fsck“ на пакетните обекти"
@@ -16728,132 +17065,132 @@
msgid "no input file given for in-place editing"
msgstr "не е зададен входен файл за редактиране на място"
-#: builtin/log.c:58
+#: builtin/log.c:59
msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
msgstr "git log [ОПЦИЯ…] [ДИАПАЗОН_НА_ВЕРСИИТЕ] [[--] ПЪТ…]"
-#: builtin/log.c:59
+#: builtin/log.c:60
msgid "git show [<options>] <object>..."
msgstr "git show [ОПЦИЯ…] ОБЕКТ…"
-#: builtin/log.c:112
+#: builtin/log.c:113
#, c-format
msgid "invalid --decorate option: %s"
msgstr "неправилна опция „--decorate“: %s"
-#: builtin/log.c:179
+#: builtin/log.c:180
msgid "show source"
msgstr "извеждане на изходния код"
-#: builtin/log.c:180
-msgid "Use mail map file"
+#: builtin/log.c:181
+msgid "use mail map file"
msgstr ""
-"Използване на файл за съответствията на имената и адресите на е-поща („."
+"използване на файл за съответствията на имената и адресите на е-поща („."
"mailmap“)"
-#: builtin/log.c:183
+#: builtin/log.c:184
msgid "only decorate refs that match <pattern>"
msgstr "специален формат само на указателите напасващи на ШАБЛОНа"
-#: builtin/log.c:185
+#: builtin/log.c:186
msgid "do not decorate refs that match <pattern>"
msgstr "без специален формат на указателите напасващи на ШАБЛОНа"
-#: builtin/log.c:186
+#: builtin/log.c:187
msgid "decorate options"
msgstr "настройки на форма̀та на извежданата информация"
-#: builtin/log.c:189
+#: builtin/log.c:190
msgid ""
-"Trace the evolution of line range <start>,<end> or function :<funcname> in "
+"trace the evolution of line range <start>,<end> or function :<funcname> in "
"<file>"
msgstr ""
-"Проследяване на еволюцията на диапазона от редове НАЧАЛО,КРАЙ или :ФУНКЦИЯта "
+"проследяване на еволюцията на диапазона от редове НАЧАЛО,КРАЙ или :ФУНКЦИЯта "
"във ФАЙЛа"
-#: builtin/log.c:212
+#: builtin/log.c:213
msgid "-L<range>:<file> cannot be used with pathspec"
msgstr "опцията „-LДИАПАЗОН:ФАЙЛ“ не може да се ползва с път"
-#: builtin/log.c:302
+#: builtin/log.c:303
#, c-format
msgid "Final output: %d %s\n"
msgstr "Резултат: %d %s\n"
-#: builtin/log.c:564
+#: builtin/log.c:566
#, c-format
msgid "git show %s: bad file"
msgstr "git show %s: повреден файл"
-#: builtin/log.c:579 builtin/log.c:674
+#: builtin/log.c:581 builtin/log.c:671
#, c-format
msgid "could not read object %s"
msgstr "обектът не може да бъде прочетен: %s"
-#: builtin/log.c:699
+#: builtin/log.c:696
#, c-format
msgid "unknown type: %d"
msgstr "неизвестен вид: %d"
-#: builtin/log.c:848
+#: builtin/log.c:841
#, c-format
msgid "%s: invalid cover from description mode"
msgstr "%s: неправилно придружаващо писмо от режима на описание"
-#: builtin/log.c:855
+#: builtin/log.c:848
msgid "format.headers without value"
msgstr "не е зададена стойност на „format.headers“"
-#: builtin/log.c:984
+#: builtin/log.c:977
#, c-format
msgid "cannot open patch file %s"
msgstr "файлът-кръпка „%s“ не може да бъде отворен"
-#: builtin/log.c:1001
+#: builtin/log.c:994
msgid "need exactly one range"
msgstr "трябва да зададете точно един диапазон"
-#: builtin/log.c:1011
+#: builtin/log.c:1004
msgid "not a range"
msgstr "не е диапазон"
-#: builtin/log.c:1175
+#: builtin/log.c:1168
msgid "cover letter needs email format"
msgstr "придружаващото писмо трябва да е форматирано като е-писмо"
-#: builtin/log.c:1181
+#: builtin/log.c:1174
msgid "failed to create cover-letter file"
msgstr "неуспешно създаване на придружаващо писмо"
-#: builtin/log.c:1262
+#: builtin/log.c:1261
#, c-format
msgid "insane in-reply-to: %s"
msgstr "неправилен формат на заглавната част за отговор „in-reply-to“: %s"
-#: builtin/log.c:1289
+#: builtin/log.c:1288
msgid "git format-patch [<options>] [<since> | <revision-range>]"
msgstr "git format-patch [ОПЦИЯ…] [ОТ | ДИАПАЗОН_НА_ВЕРСИИТЕ]"
-#: builtin/log.c:1347
+#: builtin/log.c:1346
msgid "two output directories?"
msgstr "може да укажете максимум една директория за изход"
-#: builtin/log.c:1498 builtin/log.c:2318 builtin/log.c:2320 builtin/log.c:2332
+#: builtin/log.c:1497 builtin/log.c:2317 builtin/log.c:2319 builtin/log.c:2331
#, c-format
msgid "unknown commit %s"
msgstr "непознато подаване: „%s“"
-#: builtin/log.c:1509 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1508 builtin/replace.c:58 builtin/replace.c:207
#: builtin/replace.c:210
#, c-format
msgid "failed to resolve '%s' as a valid ref"
msgstr "„%s“ не е указател или не сочи към нищо"
-#: builtin/log.c:1518
+#: builtin/log.c:1517
msgid "could not find exact merge base"
msgstr "точната база за сливане не може да бъде открита"
-#: builtin/log.c:1528
+#: builtin/log.c:1527
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"
@@ -16863,303 +17200,303 @@
"зададете, използвайте „git branch --set-upstream-to“.\n"
"Можете ръчно да зададете базово подаване чрез „--base=<base-commit-id>“."
-#: builtin/log.c:1551
+#: builtin/log.c:1550
msgid "failed to find exact merge base"
msgstr "точната база при сливане не може да бъде открита"
-#: builtin/log.c:1568
+#: builtin/log.c:1567
msgid "base commit should be the ancestor of revision list"
msgstr "базовото подаване трябва да е предшественикът на списъка с версиите"
-#: builtin/log.c:1578
+#: builtin/log.c:1577
msgid "base commit shouldn't be in revision list"
msgstr "базовото подаване не може да е в списъка с версиите"
-#: builtin/log.c:1636
+#: builtin/log.c:1635
msgid "cannot get patch id"
msgstr "идентификаторът на кръпката не може да бъде получен"
-#: builtin/log.c:1693
+#: builtin/log.c:1692
msgid "failed to infer range-diff origin of current series"
msgstr ""
"неуспешно определяне на началото на диапазонната разлика на текущата поредица"
-#: builtin/log.c:1695
+#: builtin/log.c:1694
#, c-format
msgid "using '%s' as range-diff origin of current series"
msgstr ""
"„%s“ се ползва като началото на диапазонната разлика на текущата поредица"
-#: builtin/log.c:1739
+#: builtin/log.c:1738
msgid "use [PATCH n/m] even with a single patch"
msgstr "номерация „[PATCH n/m]“ дори и при единствена кръпка"
-#: builtin/log.c:1742
+#: builtin/log.c:1741
msgid "use [PATCH] even with multiple patches"
msgstr "номерация „[PATCH]“ дори и при множество кръпки"
-#: builtin/log.c:1746
+#: builtin/log.c:1745
msgid "print patches to standard out"
msgstr "извеждане на кръпките на стандартния изход"
-#: builtin/log.c:1748
+#: builtin/log.c:1747
msgid "generate a cover letter"
msgstr "създаване на придружаващо писмо"
-#: builtin/log.c:1750
+#: builtin/log.c:1749
msgid "use simple number sequence for output file names"
msgstr "проста числова последователност за имената на файловете-кръпки"
-#: builtin/log.c:1751
+#: builtin/log.c:1750
msgid "sfx"
msgstr "ЗНАЦИ"
-#: builtin/log.c:1752
+#: builtin/log.c:1751
msgid "use <sfx> instead of '.patch'"
msgstr "използване на тези ЗНАЦИ за суфикс вместо „.patch“"
-#: builtin/log.c:1754
+#: builtin/log.c:1753
msgid "start numbering patches at <n> instead of 1"
msgstr "номерирането на кръпките да започва от този БРОЙ, а не с 1"
-#: builtin/log.c:1756
+#: builtin/log.c:1755
msgid "mark the series as Nth re-roll"
msgstr "отбелязване, че това е N-тата поредна редакция на поредицата от кръпки"
-#: builtin/log.c:1758
+#: builtin/log.c:1757
msgid "max length of output filename"
msgstr "максимална дължина на име на всеки пакетен файл"
-#: builtin/log.c:1760
-msgid "Use [RFC PATCH] instead of [PATCH]"
-msgstr "Използване на „[RFC PATCH]“ вместо „[PATCH]“"
+#: builtin/log.c:1759
+msgid "use [RFC PATCH] instead of [PATCH]"
+msgstr "използване на „[RFC PATCH]“ вместо „[PATCH]“"
-#: builtin/log.c:1763
+#: builtin/log.c:1762
msgid "cover-from-description-mode"
msgstr "режим-придружаващо-писмо-по-описание"
-#: builtin/log.c:1764
+#: builtin/log.c:1763
msgid "generate parts of a cover letter based on a branch's description"
msgstr ""
"генериране на частите на придружаващото писмо на базата на описанието на "
"клона"
-#: builtin/log.c:1766
-msgid "Use [<prefix>] instead of [PATCH]"
-msgstr "Използване на този „[ПРЕФИКС]“ вместо „[PATCH]“"
+#: builtin/log.c:1765
+msgid "use [<prefix>] instead of [PATCH]"
+msgstr "използване на този „[ПРЕФИКС]“ вместо „[PATCH]“"
-#: builtin/log.c:1769
+#: builtin/log.c:1768
msgid "store resulting files in <dir>"
msgstr "запазване на изходните файлове в тази ДИРЕКТОРИЯ"
-#: builtin/log.c:1772
+#: builtin/log.c:1771
msgid "don't strip/add [PATCH]"
msgstr "без добавяне/махане на префикса „[PATCH]“"
-#: builtin/log.c:1775
+#: builtin/log.c:1774
msgid "don't output binary diffs"
msgstr "без извеждане на разлики между двоични файлове"
-#: builtin/log.c:1777
+#: builtin/log.c:1776
msgid "output all-zero hash in From header"
msgstr "в заглавната част „From:“ (от) контролната сума да е само от нули"
-#: builtin/log.c:1779
+#: builtin/log.c:1778
msgid "don't include a patch matching a commit upstream"
msgstr "без кръпки, които присъстват в следения клон"
-#: builtin/log.c:1781
+#: builtin/log.c:1780
msgid "show patch format instead of default (patch + stat)"
msgstr ""
"извеждане във формат за кръпки, а на в стандартния (кръпка и статистика)"
-#: builtin/log.c:1783
+#: builtin/log.c:1782
msgid "Messaging"
msgstr "Опции при изпращане"
-#: builtin/log.c:1784
+#: builtin/log.c:1783
msgid "header"
msgstr "ЗАГЛАВНА_ЧАСТ"
-#: builtin/log.c:1785
+#: builtin/log.c:1784
msgid "add email header"
msgstr "добавяне на тази ЗАГЛАВНА_ЧАСТ"
-#: builtin/log.c:1786 builtin/log.c:1787
+#: builtin/log.c:1785 builtin/log.c:1786
msgid "email"
msgstr "Е-ПОЩА"
-#: builtin/log.c:1786
+#: builtin/log.c:1785
msgid "add To: header"
msgstr "добавяне на заглавна част „To:“ (до)"
-#: builtin/log.c:1787
+#: builtin/log.c:1786
msgid "add Cc: header"
msgstr "добавяне на заглавна част „Cc:“ (и до)"
-#: builtin/log.c:1788
+#: builtin/log.c:1787
msgid "ident"
msgstr "ИДЕНТИЧНОСТ"
-#: builtin/log.c:1789
+#: builtin/log.c:1788
msgid "set From address to <ident> (or committer ident if absent)"
msgstr ""
"задаване на адреса в заглавната част „From“ (от) да е тази ИДЕНТИЧНОСТ. Ако "
"не е зададена такава, се взима адреса на подаващия"
-#: builtin/log.c:1791
+#: builtin/log.c:1790
msgid "message-id"
msgstr "ИДЕНТИФИКАТОР_НА_СЪОБЩЕНИЕ"
-#: builtin/log.c:1792
+#: builtin/log.c:1791
msgid "make first mail a reply to <message-id>"
msgstr ""
"първото съобщение да е в отговор на е-писмото с този "
"ИДЕНТИФИКАТОР_НА_СЪОБЩЕНИЕ"
-#: builtin/log.c:1793 builtin/log.c:1796
+#: builtin/log.c:1792 builtin/log.c:1795
msgid "boundary"
msgstr "граница"
-#: builtin/log.c:1794
+#: builtin/log.c:1793
msgid "attach the patch"
msgstr "прикрепяне на кръпката"
-#: builtin/log.c:1797
+#: builtin/log.c:1796
msgid "inline the patch"
msgstr "включване на кръпката в текста на писмата"
-#: builtin/log.c:1801
+#: builtin/log.c:1800
msgid "enable message threading, styles: shallow, deep"
msgstr ""
"използване на нишки за съобщенията. СТИЛът е „shallow“ (плитък) или "
"„deep“ (дълбок)"
-#: builtin/log.c:1803
+#: builtin/log.c:1802
msgid "signature"
msgstr "подпис"
-#: builtin/log.c:1804
+#: builtin/log.c:1803
msgid "add a signature"
msgstr "добавяне на поле за подпис"
-#: builtin/log.c:1805
+#: builtin/log.c:1804
msgid "base-commit"
msgstr "БАЗОВО_ПОДАВАНЕ"
-#: builtin/log.c:1806
+#: builtin/log.c:1805
msgid "add prerequisite tree info to the patch series"
msgstr "добавяне на необходимото БАЗово дърво към поредицата от кръпки"
-#: builtin/log.c:1809
+#: builtin/log.c:1808
msgid "add a signature from a file"
msgstr "добавяне на подпис от файл"
-#: builtin/log.c:1810
+#: builtin/log.c:1809
msgid "don't print the patch filenames"
msgstr "без извеждане на имената на кръпките"
-#: builtin/log.c:1812
+#: builtin/log.c:1811
msgid "show progress while generating patches"
msgstr "извеждане на напредъка във фазата на създаване на кръпките"
-#: builtin/log.c:1814
+#: builtin/log.c:1813
msgid "show changes against <rev> in cover letter or single patch"
msgstr ""
"показване на промените спрямо ВЕРСията в придружаващото писмо или единствена "
"кръпка"
-#: builtin/log.c:1817
+#: builtin/log.c:1816
msgid "show changes against <refspec> in cover letter or single patch"
msgstr ""
"показване на промените спрямо указателя на ВЕРСията в придружаващото писмо "
"или единствена кръпка"
-#: builtin/log.c:1819
+#: builtin/log.c:1818
msgid "percentage by which creation is weighted"
msgstr "процент за претегляне при оценка на създаването"
-#: builtin/log.c:1905
+#: builtin/log.c:1904
#, c-format
msgid "invalid ident line: %s"
msgstr "грешна идентичност: %s"
-#: builtin/log.c:1920
+#: builtin/log.c:1919
msgid "-n and -k are mutually exclusive"
msgstr "опциите „-n“ и „-k“ са несъвместими"
-#: builtin/log.c:1922
+#: builtin/log.c:1921
msgid "--subject-prefix/--rfc and -k are mutually exclusive"
msgstr "опциите „--subject-prefix“/„-rfc“ и „-k“ са несъвместими"
-#: builtin/log.c:1930
+#: builtin/log.c:1929
msgid "--name-only does not make sense"
msgstr "опцията „--name-only“ е несъвместима с генерирането на кръпки"
-#: builtin/log.c:1932
+#: builtin/log.c:1931
msgid "--name-status does not make sense"
msgstr "опцията „--name-status“ е несъвместима с генерирането на кръпки"
-#: builtin/log.c:1934
+#: builtin/log.c:1933
msgid "--check does not make sense"
msgstr "опцията „--check“ е несъвместима с генерирането на кръпки"
-#: builtin/log.c:1956
+#: builtin/log.c:1955
msgid "--stdout, --output, and --output-directory are mutually exclusive"
msgstr ""
"Опциите „--stdout“, „--output“ и „--output-directory“ са несъвместими една с "
"друга"
-#: builtin/log.c:2079
+#: builtin/log.c:2078
msgid "--interdiff requires --cover-letter or single patch"
msgstr ""
"опцията „--interdiff“ изисква опция „--cover-letter“ или единствена кръпка"
-#: builtin/log.c:2083
+#: builtin/log.c:2082
msgid "Interdiff:"
msgstr "Разлика в разликите:"
-#: builtin/log.c:2084
+#: builtin/log.c:2083
#, c-format
msgid "Interdiff against v%d:"
msgstr "Разлика в разликите спрямо v%d:"
-#: builtin/log.c:2090
+#: builtin/log.c:2089
msgid "--creation-factor requires --range-diff"
msgstr "опцията „--creation-factor“ изисква опция „--range-diff“"
-#: builtin/log.c:2094
+#: builtin/log.c:2093
msgid "--range-diff requires --cover-letter or single patch"
msgstr ""
"опцията „--range-diff“ изисква опция „--cover-letter“ или единствена кръпка"
-#: builtin/log.c:2102
+#: builtin/log.c:2101
msgid "Range-diff:"
msgstr "Диапазонна разлика:"
-#: builtin/log.c:2103
+#: builtin/log.c:2102
#, c-format
msgid "Range-diff against v%d:"
msgstr "Диапазонна разлика спрямо v%d:"
-#: builtin/log.c:2114
+#: builtin/log.c:2113
#, c-format
msgid "unable to read signature file '%s'"
msgstr "файлът „%s“ с подпис не може да бъде прочетен"
-#: builtin/log.c:2150
+#: builtin/log.c:2149
msgid "Generating patches"
msgstr "Създаване на кръпки"
-#: builtin/log.c:2194
+#: builtin/log.c:2193
msgid "failed to create output files"
msgstr "неуспешно създаване на изходни файлове"
-#: builtin/log.c:2253
+#: builtin/log.c:2252
msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
msgstr "git cherry [-v] [ОТДАЛЕЧЕН_КЛОН [ВРЪХ [ПРЕДЕЛ]]]"
-#: builtin/log.c:2307
+#: builtin/log.c:2306
#, c-format
msgid ""
"Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -17167,112 +17504,116 @@
"Следеният отдалечен клон не бе открит, затова изрично задайте "
"ОТДАЛЕЧЕН_КЛОН.\n"
-#: builtin/ls-files.c:471
+#: builtin/ls-files.c:486
msgid "git ls-files [<options>] [<file>...]"
msgstr "git ls-files [ОПЦИЯ…] [ФАЙЛ…]"
-#: builtin/ls-files.c:527
+#: builtin/ls-files.c:542
msgid "identify the file status with tags"
msgstr "извеждане на състоянието на файловете с еднобуквени флагове"
-#: builtin/ls-files.c:529
+#: builtin/ls-files.c:544
msgid "use lowercase letters for 'assume unchanged' files"
msgstr "малки букви за файловете, които да се счетат за непроменени"
-#: builtin/ls-files.c:531
+#: builtin/ls-files.c:546
msgid "use lowercase letters for 'fsmonitor clean' files"
msgstr "малки букви за файловете за командата „fsmonitor clean“"
-#: builtin/ls-files.c:533
+#: builtin/ls-files.c:548
msgid "show cached files in the output (default)"
msgstr "извеждане на кешираните файлове (стандартно)"
-#: builtin/ls-files.c:535
+#: builtin/ls-files.c:550
msgid "show deleted files in the output"
msgstr "извеждане на изтритите файлове"
-#: builtin/ls-files.c:537
+#: builtin/ls-files.c:552
msgid "show modified files in the output"
msgstr "извеждане на променените файлове"
-#: builtin/ls-files.c:539
+#: builtin/ls-files.c:554
msgid "show other files in the output"
msgstr "извеждане на другите файлове"
-#: builtin/ls-files.c:541
+#: builtin/ls-files.c:556
msgid "show ignored files in the output"
msgstr "извеждане на игнорираните файлове"
-#: builtin/ls-files.c:544
+#: builtin/ls-files.c:559
msgid "show staged contents' object name in the output"
msgstr "извеждане на името на обекта за съдържанието на индекса"
-#: builtin/ls-files.c:546
+#: builtin/ls-files.c:561
msgid "show files on the filesystem that need to be removed"
msgstr "извеждане на файловете, които трябва да бъдат изтрити"
-#: builtin/ls-files.c:548
+#: builtin/ls-files.c:563
msgid "show 'other' directories' names only"
msgstr "извеждане само на името на другите (неследените) директории"
-#: builtin/ls-files.c:550
+#: builtin/ls-files.c:565
msgid "show line endings of files"
msgstr "извеждане на знаците за край на ред във файловете"
-#: builtin/ls-files.c:552
+#: builtin/ls-files.c:567
msgid "don't show empty directories"
msgstr "без извеждане на празните директории"
-#: builtin/ls-files.c:555
+#: builtin/ls-files.c:570
msgid "show unmerged files in the output"
msgstr "извеждане на неслетите файлове"
-#: builtin/ls-files.c:557
+#: builtin/ls-files.c:572
msgid "show resolve-undo information"
msgstr "извеждане на информацията за отмяна на разрешените подавания"
-#: builtin/ls-files.c:559
+#: builtin/ls-files.c:574
msgid "skip files matching pattern"
msgstr "прескачане на файловете напасващи ШАБЛОНа"
-#: builtin/ls-files.c:562
+#: builtin/ls-files.c:577
msgid "exclude patterns are read from <file>"
msgstr "шаблоните за игнориране да се прочетат от този ФАЙЛ"
-#: builtin/ls-files.c:565
+#: builtin/ls-files.c:580
msgid "read additional per-directory exclude patterns in <file>"
msgstr ""
"изчитане на допълнителните шаблони за игнориране по директория от този ФАЙЛ"
-#: builtin/ls-files.c:567
+#: builtin/ls-files.c:582
msgid "add the standard git exclusions"
msgstr "добавяне на стандартно игнорираните от Git файлове"
-#: builtin/ls-files.c:571
+#: builtin/ls-files.c:586
msgid "make the output relative to the project top directory"
msgstr "пътищата да са относителни спрямо основната директория на проекта"
-#: builtin/ls-files.c:574
+#: builtin/ls-files.c:589
msgid "recurse through submodules"
msgstr "рекурсивно обхождане подмодулите"
-#: builtin/ls-files.c:576
+#: builtin/ls-files.c:591
msgid "if any <file> is not in the index, treat this as an error"
msgstr "грешка, ако някой от тези ФАЙЛове не е в индекса"
-#: builtin/ls-files.c:577
+#: builtin/ls-files.c:592
msgid "tree-ish"
msgstr "УКАЗАТЕЛ_КЪМ_ДЪРВО"
-#: builtin/ls-files.c:578
+#: builtin/ls-files.c:593
msgid "pretend that paths removed since <tree-ish> are still present"
msgstr ""
"считане, че пътищата изтрити след УКАЗАТЕЛя_КЪМ_ДЪРВО все още съществуват"
-#: builtin/ls-files.c:580
+#: builtin/ls-files.c:595
msgid "show debugging data"
msgstr "извеждане на информацията за изчистване на грешки"
+#: builtin/ls-files.c:597
+msgid "suppress duplicate entries"
+msgstr "без повтаряне на записите"
+
#: builtin/ls-remote.c:9
msgid ""
"git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
@@ -17283,39 +17624,39 @@
" [-q | --quiet] [--exit-code] [--get-url]\n"
" [--symref] [ХРАНИЛИЩЕ [УКАЗАТЕЛ…]]"
-#: builtin/ls-remote.c:59
+#: builtin/ls-remote.c:60
msgid "do not print remote URL"
msgstr "без извеждане на адресите на отдалечените хранилища"
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1398
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1404
msgid "exec"
msgstr "КОМАНДА"
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63
+#: builtin/ls-remote.c:62 builtin/ls-remote.c:64
msgid "path of git-upload-pack on the remote host"
msgstr "път към командата „git-upload-pack“ на отдалечената машина"
-#: builtin/ls-remote.c:65
+#: builtin/ls-remote.c:66
msgid "limit to tags"
msgstr "само етикетите"
-#: builtin/ls-remote.c:66
+#: builtin/ls-remote.c:67
msgid "limit to heads"
msgstr "само върховете"
-#: builtin/ls-remote.c:67
+#: builtin/ls-remote.c:68
msgid "do not show peeled tags"
msgstr "без проследяване на непреките етикети"
-#: builtin/ls-remote.c:69
+#: builtin/ls-remote.c:70
msgid "take url.<base>.insteadOf into account"
msgstr "взимане предвид на „url.БАЗА.insteadOf“"
-#: builtin/ls-remote.c:72
+#: builtin/ls-remote.c:73
msgid "exit with exit code 2 if no matching refs are found"
msgstr "изход с код 2, ако не се открият съвпадащи указатели"
-#: builtin/ls-remote.c:75
+#: builtin/ls-remote.c:76
msgid "show underlying ref in addition to the object pointed by it"
msgstr "извеждане на указателя заедно с обекта сочен от него"
@@ -17474,196 +17815,196 @@
msgid "Merging %s with %s\n"
msgstr "Сливане на „%s“ с „%s“\n"
-#: builtin/merge.c:57
+#: builtin/merge.c:58
msgid "git merge [<options>] [<commit>...]"
msgstr "git merge [ОПЦИЯ…] [ПОДАВАНЕ…]"
-#: builtin/merge.c:58
+#: builtin/merge.c:59
msgid "git merge --abort"
msgstr "git merge --abort"
-#: builtin/merge.c:59
+#: builtin/merge.c:60
msgid "git merge --continue"
msgstr "git merge --continue"
-#: builtin/merge.c:122
+#: builtin/merge.c:123
msgid "switch `m' requires a value"
msgstr "опцията „-m“ изисква стойност"
-#: builtin/merge.c:145
+#: builtin/merge.c:146
#, c-format
msgid "option `%s' requires a value"
msgstr "опцията „%s“ изисква стойност"
-#: builtin/merge.c:198
+#: builtin/merge.c:199
#, c-format
msgid "Could not find merge strategy '%s'.\n"
msgstr "Няма такава стратегия за сливане: „%s“.\n"
-#: builtin/merge.c:199
+#: builtin/merge.c:200
#, c-format
msgid "Available strategies are:"
msgstr "Наличните стратегии са:"
-#: builtin/merge.c:204
+#: builtin/merge.c:205
#, c-format
msgid "Available custom strategies are:"
msgstr "Допълнителните стратегии са:"
-#: builtin/merge.c:255 builtin/pull.c:133
+#: builtin/merge.c:256 builtin/pull.c:133
msgid "do not show a diffstat at the end of the merge"
msgstr "без извеждане на статистиката след завършване на сливане"
-#: builtin/merge.c:258 builtin/pull.c:136
+#: builtin/merge.c:259 builtin/pull.c:136
msgid "show a diffstat at the end of the merge"
msgstr "извеждане на статистиката след завършване на сливане"
-#: builtin/merge.c:259 builtin/pull.c:139
+#: builtin/merge.c:260 builtin/pull.c:139
msgid "(synonym to --stat)"
msgstr "(псевдоним на „--stat“)"
-#: builtin/merge.c:261 builtin/pull.c:142
+#: builtin/merge.c:262 builtin/pull.c:142
msgid "add (at most <n>) entries from shortlog to merge commit message"
msgstr ""
"добавяне (на максимум такъв БРОЙ) записи от съкратения журнал в съобщението "
"за подаване"
-#: builtin/merge.c:264 builtin/pull.c:148
+#: builtin/merge.c:265 builtin/pull.c:148
msgid "create a single commit instead of doing a merge"
msgstr "създаване на едно подаване вместо извършване на сливане"
-#: builtin/merge.c:266 builtin/pull.c:151
+#: builtin/merge.c:267 builtin/pull.c:151
msgid "perform a commit if the merge succeeds (default)"
msgstr "извършване на подаване при успешно сливане (стандартно действие)"
-#: builtin/merge.c:268 builtin/pull.c:154
+#: builtin/merge.c:269 builtin/pull.c:154
msgid "edit message before committing"
msgstr "редактиране на съобщението преди подаване"
-#: builtin/merge.c:270
+#: builtin/merge.c:271
msgid "allow fast-forward (default)"
msgstr "позволяване на превъртане (стандартно действие)"
-#: builtin/merge.c:272 builtin/pull.c:161
+#: builtin/merge.c:273 builtin/pull.c:161
msgid "abort if fast-forward is not possible"
msgstr "преустановяване, ако превъртането е невъзможно"
-#: builtin/merge.c:276 builtin/pull.c:164
+#: builtin/merge.c:277 builtin/pull.c:164
msgid "verify that the named commit has a valid GPG signature"
msgstr "проверка, че указаното подаване е с правилен подпис на GPG"
-#: builtin/merge.c:277 builtin/notes.c:787 builtin/pull.c:168
-#: builtin/rebase.c:539 builtin/rebase.c:1412 builtin/revert.c:114
+#: builtin/merge.c:278 builtin/notes.c:787 builtin/pull.c:168
+#: builtin/rebase.c:541 builtin/rebase.c:1418 builtin/revert.c:114
msgid "strategy"
msgstr "СТРАТЕГИЯ"
-#: builtin/merge.c:278 builtin/pull.c:169
+#: builtin/merge.c:279 builtin/pull.c:169
msgid "merge strategy to use"
msgstr "СТРАТЕГИЯ за сливане, която да се ползва"
-#: builtin/merge.c:279 builtin/pull.c:172
+#: builtin/merge.c:280 builtin/pull.c:172
msgid "option=value"
msgstr "ОПЦИЯ=СТОЙНОСТ"
-#: builtin/merge.c:280 builtin/pull.c:173
+#: builtin/merge.c:281 builtin/pull.c:173
msgid "option for selected merge strategy"
msgstr "ОПЦИЯ за избраната стратегия за сливане"
-#: builtin/merge.c:282
+#: builtin/merge.c:283
msgid "merge commit message (for a non-fast-forward merge)"
msgstr "СЪОБЩЕНИЕ при подаването със сливане (при същински сливания)"
-#: builtin/merge.c:289
+#: builtin/merge.c:290
msgid "abort the current in-progress merge"
msgstr "преустановяване на текущото сливане"
-#: builtin/merge.c:291
+#: builtin/merge.c:292
msgid "--abort but leave index and working tree alone"
msgstr "преустановяване без промяна на индекса и работното дърво"
-#: builtin/merge.c:293
+#: builtin/merge.c:294
msgid "continue the current in-progress merge"
msgstr "продължаване на текущото сливане"
-#: builtin/merge.c:295 builtin/pull.c:180
+#: builtin/merge.c:296 builtin/pull.c:180
msgid "allow merging unrelated histories"
msgstr "позволяване на сливане на независими истории"
-#: builtin/merge.c:302
+#: builtin/merge.c:303
msgid "bypass pre-merge-commit and commit-msg hooks"
msgstr ""
"без изпълнение на куките преди подаване и сливане и при промяна на "
"съобщението за подаване (pre-merge-commit и commit-msg)"
-#: builtin/merge.c:319
+#: builtin/merge.c:320
msgid "could not run stash."
msgstr "не може да се извърши скатаване"
-#: builtin/merge.c:324
+#: builtin/merge.c:325
msgid "stash failed"
msgstr "неуспешно скатаване"
-#: builtin/merge.c:329
+#: builtin/merge.c:330
#, c-format
msgid "not a valid object: %s"
msgstr "неправилен обект: „%s“"
-#: builtin/merge.c:351 builtin/merge.c:368
+#: builtin/merge.c:352 builtin/merge.c:369
msgid "read-tree failed"
msgstr "неуспешно прочитане на обект-дърво"
-#: builtin/merge.c:398
+#: builtin/merge.c:399
msgid " (nothing to squash)"
msgstr " (няма какво да се вкара)"
-#: builtin/merge.c:409
+#: builtin/merge.c:410
#, c-format
msgid "Squash commit -- not updating HEAD\n"
msgstr "Вкарано подаване — указателят „HEAD“ няма да бъде обновен\n"
-#: builtin/merge.c:459
+#: builtin/merge.c:460
#, c-format
msgid "No merge message -- not updating HEAD\n"
msgstr ""
"Липсва съобщение при подаване — указателят „HEAD“ няма да бъде обновен\n"
-#: builtin/merge.c:510
+#: builtin/merge.c:511
#, c-format
msgid "'%s' does not point to a commit"
msgstr "„%s“ не сочи към подаване"
-#: builtin/merge.c:597
+#: builtin/merge.c:598
#, c-format
msgid "Bad branch.%s.mergeoptions string: %s"
msgstr "Неправилен низ за настройката „branch.%s.mergeoptions“: „%s“"
-#: builtin/merge.c:723
+#: builtin/merge.c:724
msgid "Not handling anything other than two heads merge."
msgstr "Поддържа се само сливане на точно две истории."
-#: builtin/merge.c:736
+#: builtin/merge.c:737
#, c-format
msgid "Unknown option for merge-recursive: -X%s"
msgstr "Непозната опция за рекурсивното сливане „merge-recursive“: „-X%s“"
-#: builtin/merge.c:755 t/helper/test-fast-rebase.c:209
+#: builtin/merge.c:756 t/helper/test-fast-rebase.c:209
#, c-format
msgid "unable to write %s"
msgstr "„%s“ не може да бъде записан"
-#: builtin/merge.c:807
+#: builtin/merge.c:808
#, c-format
msgid "Could not read from '%s'"
msgstr "От „%s“ не може да се чете"
-#: builtin/merge.c:816
+#: builtin/merge.c:817
#, c-format
msgid "Not committing merge; use 'git commit' to complete the merge.\n"
msgstr ""
"Сливането няма да бъде подадено. За завършването му и подаването му "
"използвайте командата „git commit“.\n"
-#: builtin/merge.c:822
+#: builtin/merge.c:823
msgid ""
"Please enter a commit message to explain why this merge is necessary,\n"
"especially if it merges an updated upstream into a topic branch.\n"
@@ -17672,11 +18013,11 @@
"В съобщението при подаване добавете информация за причината за\n"
"сливането, особено ако сливате обновен отдалечен клон в тематичен клон.\n"
-#: builtin/merge.c:827
+#: builtin/merge.c:828
msgid "An empty message aborts the commit.\n"
msgstr "Празно съобщение предотвратява подаването.\n"
-#: builtin/merge.c:830
+#: builtin/merge.c:831
#, c-format
msgid ""
"Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -17685,76 +18026,76 @@
"Редовете, които започват с „%c“, ще бъдат пропуснати, а празно\n"
"съобщение преустановява подаването.\n"
-#: builtin/merge.c:883
+#: builtin/merge.c:884
msgid "Empty commit message."
msgstr "Празно съобщение при подаване."
-#: builtin/merge.c:898
+#: builtin/merge.c:899
#, c-format
msgid "Wonderful.\n"
msgstr "Първият етап на сливането завърши.\n"
-#: builtin/merge.c:959
+#: builtin/merge.c:960
#, c-format
msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
msgstr ""
"Неуспешно автоматично сливане — коригирайте конфликтите и подайте "
"резултата.\n"
-#: builtin/merge.c:998
+#: builtin/merge.c:999
msgid "No current branch."
msgstr "Няма текущ клон."
-#: builtin/merge.c:1000
+#: builtin/merge.c:1001
msgid "No remote for the current branch."
msgstr "Текущият клон не следи никой."
-#: builtin/merge.c:1002
+#: builtin/merge.c:1003
msgid "No default upstream defined for the current branch."
msgstr "Текущият клон не следи никой клон."
-#: builtin/merge.c:1007
+#: builtin/merge.c:1008
#, c-format
msgid "No remote-tracking branch for %s from %s"
msgstr "Никой клон не следи клона „%s“ от хранилището „%s“"
-#: builtin/merge.c:1064
+#: builtin/merge.c:1065
#, c-format
msgid "Bad value '%s' in environment '%s'"
msgstr "Неправилна стойност „%s“ в средата „%s“"
-#: builtin/merge.c:1167
+#: builtin/merge.c:1168
#, c-format
msgid "not something we can merge in %s: %s"
msgstr "не може да се слее в „%s“: %s"
-#: builtin/merge.c:1201
+#: builtin/merge.c:1202
msgid "not something we can merge"
msgstr "не може да се слее"
-#: builtin/merge.c:1311
+#: builtin/merge.c:1312
msgid "--abort expects no arguments"
msgstr "опцията „--abort“ не приема аргументи"
-#: builtin/merge.c:1315
+#: builtin/merge.c:1316
msgid "There is no merge to abort (MERGE_HEAD missing)."
msgstr ""
"Не може да преустановите сливане, защото в момента не се извършва такова "
"(липсва указател „MERGE_HEAD“)."
-#: builtin/merge.c:1333
+#: builtin/merge.c:1334
msgid "--quit expects no arguments"
msgstr "опцията „--quit“ не приема аргументи"
-#: builtin/merge.c:1346
+#: builtin/merge.c:1347
msgid "--continue expects no arguments"
msgstr "опцията „--continue“ не приема аргументи"
-#: builtin/merge.c:1350
+#: builtin/merge.c:1351
msgid "There is no merge in progress (MERGE_HEAD missing)."
msgstr "В момента не се извършва сливане (липсва указател „MERGE_HEAD“)."
-#: builtin/merge.c:1366
+#: builtin/merge.c:1367
msgid ""
"You have not concluded your merge (MERGE_HEAD exists).\n"
"Please, commit your changes before you merge."
@@ -17762,7 +18103,7 @@
"Не сте завършили сливане. (Указателят „MERGE_HEAD“ съществува).\n"
"Подайте промените си, преди да започнете ново сливане."
-#: builtin/merge.c:1373
+#: builtin/merge.c:1374
msgid ""
"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
"Please, commit your changes before you merge."
@@ -17770,109 +18111,150 @@
"Не сте завършили отбиране на подаване (указателят „CHERRY_PICK_HEAD“\n"
"съществува). Подайте промените си, преди да започнете ново сливане."
-#: builtin/merge.c:1376
+#: builtin/merge.c:1377
msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
msgstr ""
"Не сте завършили отбиране на подаване (указателят „CHERRY_PICK_HEAD“\n"
"съществува)."
-#: builtin/merge.c:1390
+#: builtin/merge.c:1391
msgid "You cannot combine --squash with --no-ff."
msgstr "Опцията „--squash“ е несъвместима с „--no-ff“."
-#: builtin/merge.c:1392
+#: builtin/merge.c:1393
msgid "You cannot combine --squash with --commit."
msgstr "Опцията „--squash“ е несъвместима с „--commit“."
-#: builtin/merge.c:1408
+#: builtin/merge.c:1409
msgid "No commit specified and merge.defaultToUpstream not set."
msgstr ""
"Не е указано подаване и настройката „merge.defaultToUpstream“ не е зададена."
-#: builtin/merge.c:1425
+#: builtin/merge.c:1426
msgid "Squash commit into empty head not supported yet"
msgstr "Вкарване на подаване във връх без история все още не се поддържа"
-#: builtin/merge.c:1427
+#: builtin/merge.c:1428
msgid "Non-fast-forward commit does not make sense into an empty head"
msgstr ""
"Понеже върхът е без история, всички сливания са превъртания, не може да се "
"извърши същинско сливане изисквано от опцията „--no-ff“"
-#: builtin/merge.c:1432
+#: builtin/merge.c:1433
#, c-format
msgid "%s - not something we can merge"
msgstr "„%s“ — не е нещо, което може да се слее"
-#: builtin/merge.c:1434
+#: builtin/merge.c:1435
msgid "Can merge only exactly one commit into empty head"
msgstr "Можете да слеете точно едно подаване във връх без история"
-#: builtin/merge.c:1515
+#: builtin/merge.c:1516
msgid "refusing to merge unrelated histories"
msgstr "независими истории не може да се слеят"
-#: builtin/merge.c:1524
+#: builtin/merge.c:1525
msgid "Already up to date."
msgstr "Вече е обновено."
-#: builtin/merge.c:1534
+#: builtin/merge.c:1535
#, c-format
msgid "Updating %s..%s\n"
msgstr "Обновяване „%s..%s“\n"
-#: builtin/merge.c:1580
+#: builtin/merge.c:1581
#, c-format
msgid "Trying really trivial in-index merge...\n"
msgstr "Проба със сливане в рамките на индекса…\n"
-#: builtin/merge.c:1587
+#: builtin/merge.c:1588
#, c-format
msgid "Nope.\n"
msgstr "Неуспешно сливане.\n"
-#: builtin/merge.c:1612
+#: builtin/merge.c:1613
msgid "Already up to date. Yeeah!"
msgstr "Вече е обновено!"
-#: builtin/merge.c:1618
+#: builtin/merge.c:1619
msgid "Not possible to fast-forward, aborting."
msgstr "Не може да се извърши превъртане, преустановяване на действието."
-#: builtin/merge.c:1646 builtin/merge.c:1711
+#: builtin/merge.c:1647 builtin/merge.c:1712
#, c-format
msgid "Rewinding the tree to pristine...\n"
msgstr "Привеждане на дървото към първоначалното…\n"
-#: builtin/merge.c:1650
+#: builtin/merge.c:1651
#, c-format
msgid "Trying merge strategy %s...\n"
msgstr "Пробване със стратегията за сливане „%s“…\n"
-#: builtin/merge.c:1702
+#: builtin/merge.c:1703
#, c-format
msgid "No merge strategy handled the merge.\n"
msgstr "Никоя стратегия за сливане не може да извърши сливането.\n"
-#: builtin/merge.c:1704
+#: builtin/merge.c:1705
#, c-format
msgid "Merge with strategy %s failed.\n"
msgstr "Неуспешно сливане със стратегия „%s“.\n"
-#: builtin/merge.c:1713
+#: builtin/merge.c:1714
#, c-format
msgid "Using the %s to prepare resolving by hand.\n"
msgstr ""
"Ползва се стратегията „%s“, която ще подготви дървото за коригиране на "
"ръка.\n"
-#: builtin/merge.c:1727
+#: builtin/merge.c:1728
#, c-format
msgid "Automatic merge went well; stopped before committing as requested\n"
msgstr ""
"Автоматичното сливане завърши успешно. Самото подаване не е извършено, "
"защото бе зададена опцията „--no-commit“.\n"
+#: builtin/mktag.c:10
+msgid "git mktag"
+msgstr "git mktag"
+
+#: builtin/mktag.c:30
+#, c-format
+msgid "warning: tag input does not pass fsck: %s"
+msgstr "ПРЕДУПРЕЖДЕНИЕ: аргументът-етикет не минава проверка с „fsck“: %s"
+
+#: builtin/mktag.c:41
+#, c-format
+msgid "error: tag input does not pass fsck: %s"
+msgstr "ГРЕШКА: аргументът-етикет не минава проверка с „fsck“: %s"
+
+#: builtin/mktag.c:44
+#, c-format
+msgid "%d (FSCK_IGNORE?) should never trigger this callback"
+msgstr "%d (FSCK_IGNORE?) никога не трябва да задейства тази функция"
+
+#: builtin/mktag.c:59
+#, c-format
+msgid "could not read tagged object '%s'"
+msgstr "обектът с етикет не може да бъде прочетен: %s"
+
+#: builtin/mktag.c:62
+#, c-format
+msgid "object '%s' tagged as '%s', but is a '%s' type"
+msgstr "обектът „%s“ е с етикет за %s, но е %s"
+
+#: builtin/mktag.c:99
+msgid "tag on stdin did not pass our strict fsck check"
+msgstr "етикетът на стандартния вход не преминава строгата проверка с „fsck“"
+
+#: builtin/mktag.c:102
+msgid "tag on stdin did not refer to a valid object"
+msgstr "етикетът на стандартния вход не сочи към правилен обект"
+
+#: builtin/mktag.c:105 builtin/tag.c:232
+msgid "unable to write tag file"
+msgstr "файлът за етикета не може да бъде запазен"
+
#: builtin/mktree.c:66
msgid "git mktree [-z] [--missing] [--batch]"
msgstr "git mktree [-z] [--missing] [--batch]"
@@ -17911,7 +18293,10 @@
"при препакетиране пакетните файлове, които са с по-малък от този размер, да "
"се обединяват в пакети с по-голям от този размер"
-#: builtin/multi-pack-index.c:50 builtin/prune-packed.c:25
+#: builtin/multi-pack-index.c:50 builtin/notes.c:376 builtin/notes.c:431
+#: builtin/notes.c:509 builtin/notes.c:521 builtin/notes.c:598
+#: builtin/notes.c:665 builtin/notes.c:815 builtin/notes.c:963
+#: builtin/notes.c:985 builtin/prune-packed.c:25 builtin/tag.c:575
msgid "too many arguments"
msgstr "прекалено много аргументи"
@@ -18017,7 +18402,7 @@
msgid "Renaming %s to %s\n"
msgstr "Преименуване на „%s“ на „%s“\n"
-#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:484
+#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:483
#, c-format
msgid "renaming '%s' failed"
msgstr "неуспешно преименуване на „%s“"
@@ -18211,7 +18596,7 @@
msgid "the note contents have been left in %s"
msgstr "съдържанието на бележката е във файла „%s“"
-#: builtin/notes.c:242 builtin/tag.c:533
+#: builtin/notes.c:242 builtin/tag.c:565
#, c-format
msgid "could not open or read '%s'"
msgstr "файлът „%s“ не може да бъде отворен или прочетен"
@@ -18254,12 +18639,6 @@
"няма да се извърши „%s“ върху бележките в „%s“, защото са извън „refs/"
"notes/“."
-#: builtin/notes.c:376 builtin/notes.c:431 builtin/notes.c:509
-#: builtin/notes.c:521 builtin/notes.c:598 builtin/notes.c:665
-#: builtin/notes.c:815 builtin/notes.c:963 builtin/notes.c:985
-msgid "too many parameters"
-msgstr "прекалено много параметри"
-
#: builtin/notes.c:389 builtin/notes.c:678
#, c-format
msgid "no note found for object %s."
@@ -18319,8 +18698,8 @@
"опцията „--stdin“)"
#: builtin/notes.c:517
-msgid "too few parameters"
-msgstr "прекалено малко параметри"
+msgid "too few arguments"
+msgstr "прекалено малко аргументи"
#: builtin/notes.c:538
#, c-format
@@ -18452,7 +18831,7 @@
"резултата с „git notes merge --commit“ или преустановете сливането с "
"командата „git notes merge --abort“.\n"
-#: builtin/notes.c:897 builtin/tag.c:546
+#: builtin/notes.c:897 builtin/tag.c:578
#, c-format
msgid "Failed to resolve '%s' as a valid ref."
msgstr "Не може да се открие към какво сочи „%s“."
@@ -18470,7 +18849,7 @@
msgid "read object names from the standard input"
msgstr "изчитане на имената на обектите от стандартния вход"
-#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:220
+#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:148
msgid "do not remove, show only"
msgstr "само извеждане без действително окастряне"
@@ -18486,7 +18865,7 @@
msgid "use notes from <notes-ref>"
msgstr "да се използва бележката сочена от този УКАЗАТЕЛ_ЗА_БЕЛЕЖКА"
-#: builtin/notes.c:1034 builtin/stash.c:1604
+#: builtin/notes.c:1034 builtin/stash.c:1671
#, c-format
msgid "unknown subcommand: %s"
msgstr "непозната подкоманда: %s"
@@ -18504,107 +18883,121 @@
"git pack-objects [ОПЦИЯ…] ПРЕФИКС_НА_ИМЕТО [< СПИСЪК_С_УКАЗАТЕЛИ | < "
"СПИСЪК_С_ОБЕКТИ]"
-#: builtin/pack-objects.c:443
+#: builtin/pack-objects.c:440
+#, c-format
+msgid ""
+"write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
+"pack %s"
+msgstr ""
+"write_reuse_object: „%s“ не може да се открие, а се очакваше при отместване "
+"%<PRIuMAX> в пакетния файл „%s“"
+
+#: builtin/pack-objects.c:448
#, c-format
msgid "bad packed object CRC for %s"
msgstr "лоша контролна сума за пакетирания обект „%s“"
-#: builtin/pack-objects.c:454
+#: builtin/pack-objects.c:459
#, c-format
msgid "corrupt packed object for %s"
msgstr "пакетиран обект с грешки за „%s“"
-#: builtin/pack-objects.c:585
+#: builtin/pack-objects.c:590
#, c-format
msgid "recursive delta detected for object %s"
msgstr "рекурсивна разлика за обект „%s“"
-#: builtin/pack-objects.c:796
+#: builtin/pack-objects.c:801
#, c-format
msgid "ordered %u objects, expected %<PRIu32>"
msgstr "подредени бяха %u обекта, а се очакваха %<PRIu32>"
-#: builtin/pack-objects.c:1004
+#: builtin/pack-objects.c:896
+#, c-format
+msgid "expected object at offset %<PRIuMAX> in pack %s"
+msgstr "очаква се обект при отместване %<PRIuMAX> в пакетния файл „%s“"
+
+#: builtin/pack-objects.c:1015
msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
msgstr ""
"изключване на записването на битовата маска, пакетите са разделени поради "
"стойността на „pack.packSizeLimit“"
-#: builtin/pack-objects.c:1017
+#: builtin/pack-objects.c:1028
msgid "Writing objects"
msgstr "Записване на обектите"
-#: builtin/pack-objects.c:1078 builtin/update-index.c:90
+#: builtin/pack-objects.c:1089 builtin/update-index.c:90
#, c-format
msgid "failed to stat %s"
msgstr "не може да бъде получена информация чрез „stat“ за „%s“"
-#: builtin/pack-objects.c:1131
+#: builtin/pack-objects.c:1141
#, c-format
msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
msgstr "бяха записани %<PRIu32> обекти, а се очакваха %<PRIu32>"
-#: builtin/pack-objects.c:1348
+#: builtin/pack-objects.c:1358
msgid "disabling bitmap writing, as some objects are not being packed"
msgstr ""
"изключване на записването на битовата маска, защото някои обекти няма да се "
"пакетират"
-#: builtin/pack-objects.c:1796
+#: builtin/pack-objects.c:1806
#, c-format
msgid "delta base offset overflow in pack for %s"
msgstr "прекалено далечно начало на отместването за обектите-разлика за „%s“"
-#: builtin/pack-objects.c:1805
+#: builtin/pack-objects.c:1815
#, c-format
msgid "delta base offset out of bound for %s"
msgstr "недостижимо начало на отместването за обектите-разлика за „%s“"
-#: builtin/pack-objects.c:2086
+#: builtin/pack-objects.c:2096
msgid "Counting objects"
msgstr "Преброяване на обектите"
-#: builtin/pack-objects.c:2231
+#: builtin/pack-objects.c:2241
#, c-format
msgid "unable to parse object header of %s"
msgstr "заглавната част на „%s“ не може да бъде анализирана"
-#: builtin/pack-objects.c:2301 builtin/pack-objects.c:2317
-#: builtin/pack-objects.c:2327
+#: builtin/pack-objects.c:2311 builtin/pack-objects.c:2327
+#: builtin/pack-objects.c:2337
#, c-format
msgid "object %s cannot be read"
msgstr "обектът „%s“ не може да се прочете"
-#: builtin/pack-objects.c:2304 builtin/pack-objects.c:2331
+#: builtin/pack-objects.c:2314 builtin/pack-objects.c:2341
#, c-format
msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
msgstr "обектът „%s“ е с неправилна дължина (%<PRIuMAX>, а не %<PRIuMAX>)"
-#: builtin/pack-objects.c:2341
+#: builtin/pack-objects.c:2351
msgid "suboptimal pack - out of memory"
msgstr "неоптимизиран пакет — паметта свърши"
-#: builtin/pack-objects.c:2656
+#: builtin/pack-objects.c:2666
#, c-format
msgid "Delta compression using up to %d threads"
msgstr "Делта компресията ще използва до %d нишки"
-#: builtin/pack-objects.c:2795
+#: builtin/pack-objects.c:2805
#, c-format
msgid "unable to pack objects reachable from tag %s"
msgstr ""
"обектите, които могат да бъдат достигнати от етикета „%s“, не може да бъдат "
"пакетирани"
-#: builtin/pack-objects.c:2883
+#: builtin/pack-objects.c:2891
msgid "Compressing objects"
msgstr "Компресиране на обектите"
-#: builtin/pack-objects.c:2889
+#: builtin/pack-objects.c:2897
msgid "inconsistency with delta count"
msgstr "неправилен брой разлики"
-#: builtin/pack-objects.c:2961
+#: builtin/pack-objects.c:2976
#, c-format
msgid ""
"value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
@@ -18613,7 +19006,7 @@
"стойността на „uploadpack.blobpackfileuri“ трябва да е във формат "
"„СУМА_НА_ОБЕКТ СУМА_НА_ПАКЕТ АДРЕС“ (получена е „%s“)"
-#: builtin/pack-objects.c:2964
+#: builtin/pack-objects.c:2979
#, c-format
msgid ""
"object already configured in another uploadpack.blobpackfileuri (got '%s')"
@@ -18621,7 +19014,7 @@
"вече има настройка за обекта в друг ред „uploadpack."
"blobpackfileuri“ (получена е „%s“)"
-#: builtin/pack-objects.c:2993
+#: builtin/pack-objects.c:3008
#, c-format
msgid ""
"expected edge object ID, got garbage:\n"
@@ -18630,7 +19023,7 @@
"очаква се идентификатор на краен обект, а не:\n"
" %s"
-#: builtin/pack-objects.c:2999
+#: builtin/pack-objects.c:3014
#, c-format
msgid ""
"expected object ID, got garbage:\n"
@@ -18639,253 +19032,253 @@
"очаква се идентификатор на обект, а не:\n"
" %s"
-#: builtin/pack-objects.c:3097
+#: builtin/pack-objects.c:3112
msgid "invalid value for --missing"
msgstr "неправилна стойност за „--missing“"
-#: builtin/pack-objects.c:3156 builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3171 builtin/pack-objects.c:3279
msgid "cannot open pack index"
msgstr "индексът на пакетния файл не може да бъде отворен"
-#: builtin/pack-objects.c:3187
+#: builtin/pack-objects.c:3202
#, c-format
msgid "loose object at %s could not be examined"
msgstr "непакетираният обект в „%s“ не може да бъде анализиран"
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3287
msgid "unable to force loose object"
msgstr "оставането на обекта непакетиран не може да бъде наложено"
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3380
#, c-format
msgid "not a rev '%s'"
msgstr "„%s“ не е версия"
-#: builtin/pack-objects.c:3368
+#: builtin/pack-objects.c:3383
#, c-format
msgid "bad revision '%s'"
msgstr "неправилна версия „%s“"
-#: builtin/pack-objects.c:3393
+#: builtin/pack-objects.c:3408
msgid "unable to add recent objects"
msgstr "скорошните обекти не могат да бъдат добавени"
-#: builtin/pack-objects.c:3446
+#: builtin/pack-objects.c:3461
#, c-format
msgid "unsupported index version %s"
msgstr "неподдържана версия на индекса „%s“"
-#: builtin/pack-objects.c:3450
+#: builtin/pack-objects.c:3465
#, c-format
msgid "bad index version '%s'"
msgstr "неправилна версия на индекса „%s“"
-#: builtin/pack-objects.c:3488
+#: builtin/pack-objects.c:3503
msgid "<version>[,<offset>]"
msgstr "ВЕРСИЯ[,ОТМЕСТВАНЕ]"
-#: builtin/pack-objects.c:3489
+#: builtin/pack-objects.c:3504
msgid "write the pack index file in the specified idx format version"
msgstr ""
"запазване на индекса на пакетните файлове във форма̀та с указаната версия"
-#: builtin/pack-objects.c:3492
+#: builtin/pack-objects.c:3507
msgid "maximum size of each output pack file"
msgstr "максимален размер на всеки пакетен файл"
-#: builtin/pack-objects.c:3494
+#: builtin/pack-objects.c:3509
msgid "ignore borrowed objects from alternate object store"
msgstr "игнориране на обектите заети от други хранилища на обекти"
-#: builtin/pack-objects.c:3496
+#: builtin/pack-objects.c:3511
msgid "ignore packed objects"
msgstr "игнориране на пакетираните обекти"
-#: builtin/pack-objects.c:3498
+#: builtin/pack-objects.c:3513
msgid "limit pack window by objects"
msgstr "ограничаване на прозореца за пакетиране по брой обекти"
-#: builtin/pack-objects.c:3500
+#: builtin/pack-objects.c:3515
msgid "limit pack window by memory in addition to object limit"
msgstr ""
"ограничаване на прозореца за пакетиране и по памет освен по брой обекти"
-#: builtin/pack-objects.c:3502
+#: builtin/pack-objects.c:3517
msgid "maximum length of delta chain allowed in the resulting pack"
msgstr ""
"максимална дължина на веригата от разлики, която е позволена в пакетния файл"
-#: builtin/pack-objects.c:3504
+#: builtin/pack-objects.c:3519
msgid "reuse existing deltas"
msgstr "преизползване на съществуващите разлики"
-#: builtin/pack-objects.c:3506
+#: builtin/pack-objects.c:3521
msgid "reuse existing objects"
msgstr "преизползване на съществуващите обекти"
-#: builtin/pack-objects.c:3508
+#: builtin/pack-objects.c:3523
msgid "use OFS_DELTA objects"
msgstr "използване на обекти „OFS_DELTA“"
-#: builtin/pack-objects.c:3510
+#: builtin/pack-objects.c:3525
msgid "use threads when searching for best delta matches"
msgstr ""
"стартиране на нишки за претърсване на най-добрите съвпадения на разликите"
-#: builtin/pack-objects.c:3512
+#: builtin/pack-objects.c:3527
msgid "do not create an empty pack output"
msgstr "без създаване на празен пакетен файл"
-#: builtin/pack-objects.c:3514
+#: builtin/pack-objects.c:3529
msgid "read revision arguments from standard input"
msgstr "изчитане на версиите от стандартния вход"
-#: builtin/pack-objects.c:3516
+#: builtin/pack-objects.c:3531
msgid "limit the objects to those that are not yet packed"
msgstr "ограничаване до все още непакетираните обекти"
-#: builtin/pack-objects.c:3519
+#: builtin/pack-objects.c:3534
msgid "include objects reachable from any reference"
msgstr ""
"включване на всички обекти, които могат да се достигнат от произволен "
"указател"
-#: builtin/pack-objects.c:3522
+#: builtin/pack-objects.c:3537
msgid "include objects referred by reflog entries"
msgstr "включване и на обектите сочени от записите в журнала на указателите"
-#: builtin/pack-objects.c:3525
+#: builtin/pack-objects.c:3540
msgid "include objects referred to by the index"
msgstr "включване и на обектите сочени от индекса"
-#: builtin/pack-objects.c:3528
+#: builtin/pack-objects.c:3543
msgid "output pack to stdout"
msgstr "извеждане на пакета на стандартния изход"
-#: builtin/pack-objects.c:3530
+#: builtin/pack-objects.c:3545
msgid "include tag objects that refer to objects to be packed"
msgstr ""
"включване и на обектите-етикети, които сочат към обектите, които ще бъдат "
"пакетирани"
-#: builtin/pack-objects.c:3532
+#: builtin/pack-objects.c:3547
msgid "keep unreachable objects"
msgstr "запазване на недостижимите обекти"
-#: builtin/pack-objects.c:3534
+#: builtin/pack-objects.c:3549
msgid "pack loose unreachable objects"
msgstr "пакетиране и на недостижимите обекти"
-#: builtin/pack-objects.c:3536
+#: builtin/pack-objects.c:3551
msgid "unpack unreachable objects newer than <time>"
msgstr "разпакетиране на недостижимите обекти, които са по-нови от това ВРЕМЕ"
-#: builtin/pack-objects.c:3539
+#: builtin/pack-objects.c:3554
msgid "use the sparse reachability algorithm"
msgstr "използване на алгоритъм за частична достижимост"
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3556
msgid "create thin packs"
msgstr "създаване на съкратени пакети"
-#: builtin/pack-objects.c:3543
+#: builtin/pack-objects.c:3558
msgid "create packs suitable for shallow fetches"
msgstr "пакетиране подходящо за плитко доставяне"
-#: builtin/pack-objects.c:3545
+#: builtin/pack-objects.c:3560
msgid "ignore packs that have companion .keep file"
msgstr "игнориране на пакетите, които са придружени от файл „.keep“"
-#: builtin/pack-objects.c:3547
+#: builtin/pack-objects.c:3562
msgid "ignore this pack"
msgstr "пропускане на този пакет"
-#: builtin/pack-objects.c:3549
+#: builtin/pack-objects.c:3564
msgid "pack compression level"
msgstr "ниво на компресиране при пакетиране"
-#: builtin/pack-objects.c:3551
+#: builtin/pack-objects.c:3566
msgid "do not hide commits by grafts"
msgstr ""
"извеждане на всички родители — дори и тези, които нормално са скрити при "
"присажданията"
-#: builtin/pack-objects.c:3553
+#: builtin/pack-objects.c:3568
msgid "use a bitmap index if available to speed up counting objects"
msgstr ""
"използване на съществуващи индекси на база битови маски за ускоряване на "
"преброяването на обектите"
-#: builtin/pack-objects.c:3555
+#: builtin/pack-objects.c:3570
msgid "write a bitmap index together with the pack index"
msgstr ""
"запазване и на индекс на база побитова маска, заедно с индекса за пакета"
-#: builtin/pack-objects.c:3559
+#: builtin/pack-objects.c:3574
msgid "write a bitmap index if possible"
msgstr "записване на индекси на база битови маски при възможност"
-#: builtin/pack-objects.c:3563
+#: builtin/pack-objects.c:3578
msgid "handling for missing objects"
msgstr "как да се обработват липсващите обекти"
-#: builtin/pack-objects.c:3566
+#: builtin/pack-objects.c:3581
msgid "do not pack objects in promisor packfiles"
msgstr "без пакетиране на обекти в гарантиращи пакети"
-#: builtin/pack-objects.c:3568
+#: builtin/pack-objects.c:3583
msgid "respect islands during delta compression"
msgstr "без промяна на групите при делта компресия"
-#: builtin/pack-objects.c:3570
+#: builtin/pack-objects.c:3585
msgid "protocol"
msgstr "протокол"
-#: builtin/pack-objects.c:3571
+#: builtin/pack-objects.c:3586
msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
msgstr "без ползване на настройки „uploadpack.blobpackfileuri“ с този протокол"
-#: builtin/pack-objects.c:3600
+#: builtin/pack-objects.c:3617
#, c-format
msgid "delta chain depth %d is too deep, forcing %d"
msgstr "веригата с разлики е прекалено дълбока — %d, ще се ползва %d"
-#: builtin/pack-objects.c:3605
+#: builtin/pack-objects.c:3622
#, c-format
msgid "pack.deltaCacheLimit is too high, forcing %d"
msgstr ""
"Стойността на настройката „pack.deltaCacheLimit“ е прекалено голяма. Ще се "
"ползва %d"
-#: builtin/pack-objects.c:3659
+#: builtin/pack-objects.c:3676
msgid "--max-pack-size cannot be used to build a pack for transfer"
msgstr ""
"опцията „--max-pack-size“ не може да се използва за създаване на пакетни "
"файлове за пренос"
-#: builtin/pack-objects.c:3661
+#: builtin/pack-objects.c:3678
msgid "minimum pack size limit is 1 MiB"
msgstr "минималният размер на пакетите е 1 MiB"
-#: builtin/pack-objects.c:3666
+#: builtin/pack-objects.c:3683
msgid "--thin cannot be used to build an indexable pack"
msgstr ""
"опцията „--thin“не може да се използва за създаване на пакетни файлове с "
"индекс"
-#: builtin/pack-objects.c:3669
+#: builtin/pack-objects.c:3686
msgid "--keep-unreachable and --unpack-unreachable are incompatible"
msgstr "опциите „--keep-unreachable“ и „--unpack-unreachable“ са несъвместими"
-#: builtin/pack-objects.c:3675
+#: builtin/pack-objects.c:3692
msgid "cannot use --filter without --stdout"
msgstr "опцията „-filter“ изисква „-stdout“"
-#: builtin/pack-objects.c:3735
+#: builtin/pack-objects.c:3752
msgid "Enumerating objects"
msgstr "Изброяване на обектите"
-#: builtin/pack-objects.c:3766
+#: builtin/pack-objects.c:3783
#, c-format
msgid ""
"Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -18894,6 +19287,20 @@
"Общо: %<PRIu32> (разлики: %<PRIu32>), преизползвани: %<PRIu32> (разлики: "
"%<PRIu32>), преизползвани при пакетиране: %<PRIu32>"
+#: builtin/pack-redundant.c:601
+msgid ""
+"'git pack-redundant' is nominated for removal.\n"
+"If you still use this command, please add an extra\n"
+"option, '--i-still-use-this', on the command line\n"
+"and let us know you still use it by sending an e-mail\n"
+"to <git@vger.kernel.org>. Thanks.\n"
+msgstr ""
+"Командата „git pack-redundant“ е остаряла и предстои\n"
+"пълното ѝ премахване. Ако все още я ползвате, добавете\n"
+"опцията „--i-still-use-this“ на командния ред и молим да\n"
+"ни известите с е-писмо до пощенския списък:\n"
+"<git@vger.kernel.org>.\n"
+
#: builtin/pack-refs.c:8
msgid "git pack-refs [<options>]"
msgstr "git pack-refs [ОПЦИЯ…]"
@@ -18951,7 +19358,7 @@
msgid "incorporate changes by rebasing rather than merging"
msgstr "внасяне на промените чрез пребазиране, а не чрез сливане"
-#: builtin/pull.c:158 builtin/rebase.c:490 builtin/revert.c:126
+#: builtin/pull.c:158 builtin/rebase.c:492 builtin/revert.c:126
msgid "allow fast-forward"
msgstr "позволяване на превъртания"
@@ -18976,7 +19383,95 @@
msgid "Invalid value for pull.ff: %s"
msgstr "Неправилна стойност за „pull.ff“: „%s“"
-#: builtin/pull.c:348
+#: builtin/pull.c:445
+msgid ""
+"There is no candidate for rebasing against among the refs that you just "
+"fetched."
+msgstr ""
+"Между указателите, които току що доставихте, няма подходящ кандидат, върху "
+"който да пребазирате."
+
+#: builtin/pull.c:447
+msgid ""
+"There are no candidates for merging among the refs that you just fetched."
+msgstr ""
+"Между указателите, които току що доставихте, няма подходящ кандидат, който "
+"да слеете."
+
+#: builtin/pull.c:448
+msgid ""
+"Generally this means that you provided a wildcard refspec which had no\n"
+"matches on the remote end."
+msgstr ""
+"Най вероятно сте подали шаблон за указатели, който не е напаснал с нищо в "
+"отдалеченото хранилище."
+
+#: builtin/pull.c:451
+#, c-format
+msgid ""
+"You asked to pull from the remote '%s', but did not specify\n"
+"a branch. Because this is not the default configured remote\n"
+"for your current branch, you must specify a branch on the command line."
+msgstr ""
+"Заявихте издърпване от отдалеченото хранилище „%s“, но не указахте клон.\n"
+"Понеже това не е хранилището по подразбиране на текущия клон, трябва\n"
+"да укажете отдалечения клон на командния ред."
+
+#: builtin/pull.c:456 builtin/rebase.c:1253
+msgid "You are not currently on a branch."
+msgstr "Извън всички клони."
+
+#: builtin/pull.c:458 builtin/pull.c:473
+msgid "Please specify which branch you want to rebase against."
+msgstr "Укажете върху кой клон искате да пребазирате."
+
+#: builtin/pull.c:460 builtin/pull.c:475
+msgid "Please specify which branch you want to merge with."
+msgstr "Укажете кой клон искате да слеете."
+
+#: builtin/pull.c:461 builtin/pull.c:476
+msgid "See git-pull(1) for details."
+msgstr "За повече информация погледнете ръководството „git-pull(1)“"
+
+#: builtin/pull.c:463 builtin/pull.c:469 builtin/pull.c:478
+#: builtin/rebase.c:1259
+msgid "<remote>"
+msgstr "ОТДАЛЕЧЕНО_ХРАНИЛИЩЕ"
+
+#: builtin/pull.c:463 builtin/pull.c:478 builtin/pull.c:483
+msgid "<branch>"
+msgstr "КЛОН"
+
+#: builtin/pull.c:471 builtin/rebase.c:1251
+msgid "There is no tracking information for the current branch."
+msgstr "Текущият клон не следи никой."
+
+#: builtin/pull.c:480
+msgid ""
+"If you wish to set tracking information for this branch you can do so with:"
+msgstr ""
+"Ако искате да зададете информация за следен клон, можете да направите това с "
+"командата:"
+
+#: builtin/pull.c:485
+#, c-format
+msgid ""
+"Your configuration specifies to merge with the ref '%s'\n"
+"from the remote, but no such ref was fetched."
+msgstr ""
+"За сливане е указан отдалеченият указател „%s“,\n"
+"но такъв не е доставен."
+
+#: builtin/pull.c:596
+#, c-format
+msgid "unable to access commit %s"
+msgstr "недостъпно подаване: %s"
+
+#: builtin/pull.c:902
+msgid "ignoring --verify-signatures for rebase"
+msgstr "без „--verify-signatures“ при пребазиране"
+
+#: builtin/pull.c:930
msgid ""
"Pulling without specifying how to reconcile divergent branches is\n"
"discouraged. You can squelch this message by running one of the following\n"
@@ -19005,107 +19500,19 @@
"използвайте опциите „--rebase“, „--no-rebase“, „--ff-only“. Те са с\n"
"приоритет пред настройките.\n"
-#: builtin/pull.c:458
-msgid ""
-"There is no candidate for rebasing against among the refs that you just "
-"fetched."
-msgstr ""
-"Между указателите, които току що доставихте, няма подходящ кандидат, върху "
-"който да пребазирате."
-
-#: builtin/pull.c:460
-msgid ""
-"There are no candidates for merging among the refs that you just fetched."
-msgstr ""
-"Между указателите, които току що доставихте, няма подходящ кандидат, който "
-"да слеете."
-
-#: builtin/pull.c:461
-msgid ""
-"Generally this means that you provided a wildcard refspec which had no\n"
-"matches on the remote end."
-msgstr ""
-"Най вероятно сте подали шаблон за указатели, който не е напаснал с нищо в "
-"отдалеченото хранилище."
-
-#: builtin/pull.c:464
-#, c-format
-msgid ""
-"You asked to pull from the remote '%s', but did not specify\n"
-"a branch. Because this is not the default configured remote\n"
-"for your current branch, you must specify a branch on the command line."
-msgstr ""
-"Заявихте издърпване от отдалеченото хранилище „%s“, но не указахте клон.\n"
-"Понеже това не е хранилището по подразбиране на текущия клон, трябва\n"
-"да укажете отдалечения клон на командния ред."
-
-#: builtin/pull.c:469 builtin/rebase.c:1246
-msgid "You are not currently on a branch."
-msgstr "Извън всички клони."
-
-#: builtin/pull.c:471 builtin/pull.c:486
-msgid "Please specify which branch you want to rebase against."
-msgstr "Укажете върху кой клон искате да пребазирате."
-
-#: builtin/pull.c:473 builtin/pull.c:488
-msgid "Please specify which branch you want to merge with."
-msgstr "Укажете кой клон искате да слеете."
-
-#: builtin/pull.c:474 builtin/pull.c:489
-msgid "See git-pull(1) for details."
-msgstr "За повече информация погледнете ръководството „git-pull(1)“"
-
-#: builtin/pull.c:476 builtin/pull.c:482 builtin/pull.c:491
-#: builtin/rebase.c:1252
-msgid "<remote>"
-msgstr "ОТДАЛЕЧЕНО_ХРАНИЛИЩЕ"
-
-#: builtin/pull.c:476 builtin/pull.c:491 builtin/pull.c:496
-msgid "<branch>"
-msgstr "КЛОН"
-
-#: builtin/pull.c:484 builtin/rebase.c:1244
-msgid "There is no tracking information for the current branch."
-msgstr "Текущият клон не следи никой."
-
-#: builtin/pull.c:493
-msgid ""
-"If you wish to set tracking information for this branch you can do so with:"
-msgstr ""
-"Ако искате да зададете информация за следен клон, можете да направите това с "
-"командата:"
-
-#: builtin/pull.c:498
-#, c-format
-msgid ""
-"Your configuration specifies to merge with the ref '%s'\n"
-"from the remote, but no such ref was fetched."
-msgstr ""
-"За сливане е указан отдалеченият указател „%s“,\n"
-"но такъв не е доставен."
-
-#: builtin/pull.c:609
-#, c-format
-msgid "unable to access commit %s"
-msgstr "недостъпно подаване: %s"
-
-#: builtin/pull.c:915
-msgid "ignoring --verify-signatures for rebase"
-msgstr "без „--verify-signatures“ при пребазиране"
-
-#: builtin/pull.c:972
+#: builtin/pull.c:991
msgid "Updating an unborn branch with changes added to the index."
msgstr "Обновяване на все още несъздаден клон с промените от индекса"
-#: builtin/pull.c:976
+#: builtin/pull.c:995
msgid "pull with rebase"
msgstr "издърпване с пребазиране"
-#: builtin/pull.c:977
+#: builtin/pull.c:996
msgid "please commit or stash them."
msgstr "трябва да подадете или скатаете промените."
-#: builtin/pull.c:1002
+#: builtin/pull.c:1021
#, c-format
msgid ""
"fetch updated the current branch head.\n"
@@ -19115,7 +19522,7 @@
"доставянето обнови върха на текущия клон. Работното\n"
"ви копие бе превъртяно от подаване „%s“."
-#: builtin/pull.c:1008
+#: builtin/pull.c:1027
#, c-format
msgid ""
"Cannot fast-forward your working tree.\n"
@@ -19132,15 +19539,15 @@
" git reset --hard\n"
"за връщане към нормално състояние."
-#: builtin/pull.c:1023
+#: builtin/pull.c:1042
msgid "Cannot merge multiple branches into empty head."
msgstr "Не може да сливате множество клони в празен върхов указател."
-#: builtin/pull.c:1027
+#: builtin/pull.c:1046
msgid "Cannot rebase onto multiple branches."
msgstr "Не може да пребазирате върху повече от един клон."
-#: builtin/pull.c:1041
+#: builtin/pull.c:1067
msgid "cannot rebase with locally recorded submodule modifications"
msgstr ""
"пребазирането е невъзможно заради локално записаните промени по подмодулите"
@@ -19466,44 +19873,52 @@
msgid "push options must not have new line characters"
msgstr "опциите за изтласкване не трябва да съдържат знак за нов ред"
-#: builtin/range-diff.c:8
+#: builtin/range-diff.c:9
msgid "git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"
msgstr "git range-diff [ОПЦИЯ…] СТАРА_БАЗА..СТАР_ВРЪХ НОВА_БАЗА..НОВ_ВРЪХ"
-#: builtin/range-diff.c:9
+#: builtin/range-diff.c:10
msgid "git range-diff [<options>] <old-tip>...<new-tip>"
msgstr "git range-diff [ОПЦИЯ…] СТАР_ВРЪХ...НОВ_ВРЪХ"
-#: builtin/range-diff.c:10
+#: builtin/range-diff.c:11
msgid "git range-diff [<options>] <base> <old-tip> <new-tip>"
msgstr "git range-diff [ОПЦИЯ…] БАЗА СТАР_ВРЪХ НОВ_ВРЪХ"
-#: builtin/range-diff.c:22
+#: builtin/range-diff.c:28
msgid "Percentage by which creation is weighted"
msgstr "Процент за оценка на създаването"
-#: builtin/range-diff.c:24
+#: builtin/range-diff.c:30
msgid "use simple diff colors"
msgstr "използване на прости цветове за разликите"
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
msgid "notes"
msgstr "бележки"
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
msgid "passed to 'git log'"
msgstr "подава се на командата „git log“"
-#: builtin/range-diff.c:50 builtin/range-diff.c:54
-#, c-format
-msgid "no .. in range: '%s'"
-msgstr "„..“ липсва в диапазона „%s“"
+#: builtin/range-diff.c:35
+msgid "only emit output related to the first range"
+msgstr "извеждане само на информацията за първия диапазон"
-#: builtin/range-diff.c:64
+#: builtin/range-diff.c:37
+msgid "only emit output related to the second range"
+msgstr "извеждане само на информацията за втория диапазон"
+
+#: builtin/range-diff.c:60 builtin/range-diff.c:64
+#, c-format
+msgid "not a commit range: '%s'"
+msgstr "не е диапазон с подавания: „%s“"
+
+#: builtin/range-diff.c:74
msgid "single arg format must be symmetric range"
msgstr "вариантът с единствен аргумент изисква симетричен диапазон"
-#: builtin/range-diff.c:79
+#: builtin/range-diff.c:89
msgid "need two commit ranges"
msgstr "необходими са два диапазона с подавания"
@@ -19608,197 +20023,197 @@
msgid "git rebase --continue | --abort | --skip | --edit-todo"
msgstr "git rebase --continue | --abort | --skip | --edit-todo"
-#: builtin/rebase.c:193 builtin/rebase.c:217 builtin/rebase.c:244
+#: builtin/rebase.c:195 builtin/rebase.c:219 builtin/rebase.c:246
#, c-format
msgid "unusable todo list: '%s'"
msgstr "неуспешно изтриване на списъка за изпълнение: „%s“"
-#: builtin/rebase.c:310
+#: builtin/rebase.c:312
#, c-format
msgid "could not create temporary %s"
msgstr "не може да се създаде временна директория „%s“"
-#: builtin/rebase.c:316
+#: builtin/rebase.c:318
msgid "could not mark as interactive"
msgstr "невъзможно задаване на интерактивна работа"
-#: builtin/rebase.c:369
+#: builtin/rebase.c:371
msgid "could not generate todo list"
msgstr "файлът с командите не може да се генерира"
-#: builtin/rebase.c:411
+#: builtin/rebase.c:413
msgid "a base commit must be provided with --upstream or --onto"
msgstr "опциите „--upstream“ и „--onto“ изискват базово подаване"
-#: builtin/rebase.c:480
+#: builtin/rebase.c:482
msgid "git rebase--interactive [<options>]"
msgstr "git rebase--interactive [ОПЦИЯ…]"
-#: builtin/rebase.c:493 builtin/rebase.c:1388
+#: builtin/rebase.c:495 builtin/rebase.c:1394
msgid "keep commits which start empty"
msgstr "запазванe на първоначално празните подавания"
-#: builtin/rebase.c:497 builtin/revert.c:128
+#: builtin/rebase.c:499 builtin/revert.c:128
msgid "allow commits with empty messages"
msgstr "позволяване на празни съобщения при подаване"
-#: builtin/rebase.c:499
+#: builtin/rebase.c:501
msgid "rebase merge commits"
msgstr "пребазиране на подаванията със сливания"
-#: builtin/rebase.c:501
+#: builtin/rebase.c:503
msgid "keep original branch points of cousins"
msgstr ""
"запазване на първоначалните точки на разклоняване на сестринските клони"
-#: builtin/rebase.c:503
+#: builtin/rebase.c:505
msgid "move commits that begin with squash!/fixup!"
msgstr "преместване на подаванията, които започват със „squash!“/“fixup!“"
-#: builtin/rebase.c:504
+#: builtin/rebase.c:506
msgid "sign commits"
msgstr "подписване на подаванията"
-#: builtin/rebase.c:506 builtin/rebase.c:1327
+#: builtin/rebase.c:508 builtin/rebase.c:1333
msgid "display a diffstat of what changed upstream"
msgstr "извеждане на статистика с промените в следения клон"
-#: builtin/rebase.c:508
+#: builtin/rebase.c:510
msgid "continue rebase"
msgstr "продължаване на пребазирането"
-#: builtin/rebase.c:510
+#: builtin/rebase.c:512
msgid "skip commit"
msgstr "прескачане на подаване"
-#: builtin/rebase.c:511
+#: builtin/rebase.c:513
msgid "edit the todo list"
msgstr "редактиране на списъка с команди за изпълнение"
-#: builtin/rebase.c:513
+#: builtin/rebase.c:515
msgid "show the current patch"
msgstr "извеждане на текущата кръпка"
-#: builtin/rebase.c:516
+#: builtin/rebase.c:518
msgid "shorten commit ids in the todo list"
msgstr "съкратени идентификатори в списъка за изпълнение"
-#: builtin/rebase.c:518
+#: builtin/rebase.c:520
msgid "expand commit ids in the todo list"
msgstr "пълни идентификатори в списъка за изпълнение"
-#: builtin/rebase.c:520
+#: builtin/rebase.c:522
msgid "check the todo list"
msgstr "проверка на списъка за изпълнение"
-#: builtin/rebase.c:522
+#: builtin/rebase.c:524
msgid "rearrange fixup/squash lines"
msgstr ""
"преподреждане на редовете за вкарване на подаванията подаванията в "
"предходните им със и без смени на съобщението"
-#: builtin/rebase.c:524
+#: builtin/rebase.c:526
msgid "insert exec commands in todo list"
msgstr "вмъкване на командите за изпълнение в списъка за изпълнение"
-#: builtin/rebase.c:525
+#: builtin/rebase.c:527
msgid "onto"
msgstr "върху"
-#: builtin/rebase.c:528
+#: builtin/rebase.c:530
msgid "restrict-revision"
msgstr "ограничена версия"
-#: builtin/rebase.c:528
+#: builtin/rebase.c:530
msgid "restrict revision"
msgstr "ограничена версия"
-#: builtin/rebase.c:530
+#: builtin/rebase.c:532
msgid "squash-onto"
msgstr "подаване, в което другите да се вкарат"
-#: builtin/rebase.c:531
+#: builtin/rebase.c:533
msgid "squash onto"
msgstr "подаване, в което другите да се вкарат"
-#: builtin/rebase.c:533
+#: builtin/rebase.c:535
msgid "the upstream commit"
msgstr "подаване на източника"
-#: builtin/rebase.c:535
+#: builtin/rebase.c:537
msgid "head-name"
msgstr "име на върха"
-#: builtin/rebase.c:535
+#: builtin/rebase.c:537
msgid "head name"
msgstr "име на върха"
-#: builtin/rebase.c:540
+#: builtin/rebase.c:542
msgid "rebase strategy"
msgstr "стратегия на пребазиране"
-#: builtin/rebase.c:541
+#: builtin/rebase.c:543
msgid "strategy-opts"
msgstr "опции на стратегията"
-#: builtin/rebase.c:542
+#: builtin/rebase.c:544
msgid "strategy options"
msgstr "опции на стратегията"
-#: builtin/rebase.c:543
+#: builtin/rebase.c:545
msgid "switch-to"
msgstr "преминаване към"
-#: builtin/rebase.c:544
+#: builtin/rebase.c:546
msgid "the branch or commit to checkout"
msgstr "клонът, към който да се премине"
-#: builtin/rebase.c:545
+#: builtin/rebase.c:547
msgid "onto-name"
msgstr "име на база"
-#: builtin/rebase.c:545
+#: builtin/rebase.c:547
msgid "onto name"
msgstr "име на база"
-#: builtin/rebase.c:546
+#: builtin/rebase.c:548
msgid "cmd"
msgstr "команда"
-#: builtin/rebase.c:546
+#: builtin/rebase.c:548
msgid "the command to run"
msgstr "команда за изпълнение"
-#: builtin/rebase.c:549 builtin/rebase.c:1421
+#: builtin/rebase.c:551 builtin/rebase.c:1427
msgid "automatically re-schedule any `exec` that fails"
msgstr ""
"автоматично подаване за повторно изпълнение на командите завършили с неуспех"
-#: builtin/rebase.c:565
+#: builtin/rebase.c:567
msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
msgstr "опциите „--[no-]rebase-cousins“ изискват опцията „--rebase-merges“"
-#: builtin/rebase.c:581
+#: builtin/rebase.c:583
#, c-format
msgid "%s requires the merge backend"
msgstr "„%s“ изисква пребазиране"
-#: builtin/rebase.c:624
+#: builtin/rebase.c:626
#, c-format
msgid "could not get 'onto': '%s'"
msgstr "не може да се премине към новата база, зададена с „onto“: „%s“"
-#: builtin/rebase.c:641
+#: builtin/rebase.c:643
#, c-format
msgid "invalid orig-head: '%s'"
msgstr "неправилен указател към първоначален връх „orig-head“: „%s“"
-#: builtin/rebase.c:666
+#: builtin/rebase.c:668
#, c-format
msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
msgstr "неправилната стойност на „allow_rerere_autoupdate“ се прескача: „%s“"
-#: builtin/rebase.c:811 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:813 git-rebase--preserve-merges.sh:81
msgid ""
"Resolve all conflicts manually, mark them as resolved with\n"
"\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -19812,7 +20227,7 @@
"За да откажете пребазирането и да се върнете към първоначалното състояние,\n"
"изпълнете „git rebase --abort“."
-#: builtin/rebase.c:894
+#: builtin/rebase.c:896
#, c-format
msgid ""
"\n"
@@ -19830,7 +20245,7 @@
"\n"
"В резултат те не могат да се пребазират."
-#: builtin/rebase.c:1220
+#: builtin/rebase.c:1227
#, c-format
msgid ""
"unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
@@ -19839,7 +20254,7 @@
"неправилна стойност „%s“: вариантите са „drop“ (прескачане), "
"„keep“ (запазване) и „ask“ (питане)"
-#: builtin/rebase.c:1238
+#: builtin/rebase.c:1245
#, c-format
msgid ""
"%s\n"
@@ -19856,7 +20271,7 @@
" git rebase КЛОН\n"
"\n"
-#: builtin/rebase.c:1254
+#: builtin/rebase.c:1261
#, c-format
msgid ""
"If you wish to set tracking information for this branch you can do so with:\n"
@@ -19869,154 +20284,154 @@
"\n"
" git branch --set-upstream-to=%s/КЛОН %s\n"
-#: builtin/rebase.c:1284
+#: builtin/rebase.c:1291
msgid "exec commands cannot contain newlines"
msgstr "командите за изпълнение не може да съдържат нови редове"
-#: builtin/rebase.c:1288
+#: builtin/rebase.c:1295
msgid "empty exec command"
msgstr "празна команда за изпълнение"
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1324
msgid "rebase onto given branch instead of upstream"
msgstr "пребазиране върху зададения, а не следения клон"
-#: builtin/rebase.c:1320
+#: builtin/rebase.c:1326
msgid "use the merge-base of upstream and branch as the current base"
msgstr "за текуща база да се ползва базата за сливане на клона и следеното"
-#: builtin/rebase.c:1322
+#: builtin/rebase.c:1328
msgid "allow pre-rebase hook to run"
msgstr "позволяване на куката преди пребазиране да се изпълни"
-#: builtin/rebase.c:1324
+#: builtin/rebase.c:1330
msgid "be quiet. implies --no-stat"
msgstr "без извеждане на информация. Включва опцията „--no-stat“"
-#: builtin/rebase.c:1330
+#: builtin/rebase.c:1336
msgid "do not show diffstat of what changed upstream"
msgstr "без извеждане на статистика с промените в следения клон"
-#: builtin/rebase.c:1333
+#: builtin/rebase.c:1339
msgid "add a Signed-off-by trailer to each commit"
msgstr "добавяне на епилог за подпис „Signed-off-by“ към всяко подаване"
-#: builtin/rebase.c:1336
+#: builtin/rebase.c:1342
msgid "make committer date match author date"
msgstr "датата на подаващия да отговаря на датата на автора"
-#: builtin/rebase.c:1338
+#: builtin/rebase.c:1344
msgid "ignore author date and use current date"
msgstr "да се ползва днешна дата, а не тази на автора"
-#: builtin/rebase.c:1340
+#: builtin/rebase.c:1346
msgid "synonym of --reset-author-date"
msgstr "псевдоним на „--reset-author-date“"
-#: builtin/rebase.c:1342 builtin/rebase.c:1346
+#: builtin/rebase.c:1348 builtin/rebase.c:1352
msgid "passed to 'git apply'"
msgstr "подава се на командата „git apply“"
-#: builtin/rebase.c:1344
+#: builtin/rebase.c:1350
msgid "ignore changes in whitespace"
msgstr "без промени в празните знаци"
-#: builtin/rebase.c:1348 builtin/rebase.c:1351
+#: builtin/rebase.c:1354 builtin/rebase.c:1357
msgid "cherry-pick all commits, even if unchanged"
msgstr "отбиране на всички подавания дори да няма промени"
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1359
msgid "continue"
msgstr "продължаване"
-#: builtin/rebase.c:1356
+#: builtin/rebase.c:1362
msgid "skip current patch and continue"
msgstr "прескачане на текущата кръпка и продължаване"
-#: builtin/rebase.c:1358
+#: builtin/rebase.c:1364
msgid "abort and check out the original branch"
msgstr "преустановяване и възстановяване на първоначалния клон"
-#: builtin/rebase.c:1361
+#: builtin/rebase.c:1367
msgid "abort but keep HEAD where it is"
msgstr "преустановяване без промяна към какво сочи „HEAD“"
-#: builtin/rebase.c:1362
+#: builtin/rebase.c:1368
msgid "edit the todo list during an interactive rebase"
msgstr "редактиране на файла с команди при интерактивно пребазиране"
-#: builtin/rebase.c:1365
+#: builtin/rebase.c:1371
msgid "show the patch file being applied or merged"
msgstr "показване на кръпката, която се прилага или слива"
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1374
msgid "use apply strategies to rebase"
msgstr "при пребазиране да се ползва стратегия с прилагане"
-#: builtin/rebase.c:1372
+#: builtin/rebase.c:1378
msgid "use merging strategies to rebase"
msgstr "при пребазиране да се ползва стратегия със сливане"
-#: builtin/rebase.c:1376
+#: builtin/rebase.c:1382
msgid "let the user edit the list of commits to rebase"
msgstr ""
"позволяване на потребителя да редактира списъка с подавания за пребазиране"
-#: builtin/rebase.c:1380
+#: builtin/rebase.c:1386
msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
msgstr "(ОСТАРЯЛО) пресъздаване на сливанията вместо да се прескачат"
-#: builtin/rebase.c:1385
+#: builtin/rebase.c:1391
msgid "how to handle commits that become empty"
msgstr "как да се обработват оказалите се празни подавания"
-#: builtin/rebase.c:1392
+#: builtin/rebase.c:1398
msgid "move commits that begin with squash!/fixup! under -i"
msgstr ""
"преместване на подаванията, които започват със „squash!“/“fixup!“ при „-i“"
-#: builtin/rebase.c:1399
+#: builtin/rebase.c:1405
msgid "add exec lines after each commit of the editable list"
msgstr ""
"добавяне на редове с команди за изпълнение след всяко подаване в "
"редактирания списък"
-#: builtin/rebase.c:1403
+#: builtin/rebase.c:1409
msgid "allow rebasing commits with empty messages"
msgstr "позволяване на пребазиране на подавания с празни съобщения"
-#: builtin/rebase.c:1407
+#: builtin/rebase.c:1413
msgid "try to rebase merges instead of skipping them"
msgstr "опит за пребазиране на сливанията вместо те да се прескачат"
-#: builtin/rebase.c:1410
+#: builtin/rebase.c:1416
msgid "use 'merge-base --fork-point' to refine upstream"
msgstr ""
"за доуточняването на следения клон, използвайте:\n"
"\n"
" git merge-base --fork-point"
-#: builtin/rebase.c:1412
+#: builtin/rebase.c:1418
msgid "use the given merge strategy"
msgstr "използване на зададената стратегията на сливане"
-#: builtin/rebase.c:1414 builtin/revert.c:115
+#: builtin/rebase.c:1420 builtin/revert.c:115
msgid "option"
msgstr "опция"
-#: builtin/rebase.c:1415
+#: builtin/rebase.c:1421
msgid "pass the argument through to the merge strategy"
msgstr "аргументът да се подаде на стратегията за сливане"
-#: builtin/rebase.c:1418
+#: builtin/rebase.c:1424
msgid "rebase all reachable commits up to the root(s)"
msgstr "пребазиране на всички достижими подавания до началното им подаване"
-#: builtin/rebase.c:1423
+#: builtin/rebase.c:1429
msgid "apply all changes, even those already present upstream"
msgstr "прилагане на всички промени, дори и наличните вече в следеното"
-#: builtin/rebase.c:1440
+#: builtin/rebase.c:1446
msgid ""
"the rebase.useBuiltin support has been removed!\n"
"See its entry in 'git help config' for details."
@@ -20024,45 +20439,45 @@
"поддръжката на „rebase.useBuiltin“ е премахната.\n"
"За повече информация вижте „git help config“."
-#: builtin/rebase.c:1446
+#: builtin/rebase.c:1452
msgid "It looks like 'git am' is in progress. Cannot rebase."
msgstr ""
"Изглежда, че сега се прилагат кръпки чрез командата „git-am“. Не може да "
"пребазирате в момента."
-#: builtin/rebase.c:1487
+#: builtin/rebase.c:1493
msgid ""
"git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
msgstr ""
"Опцията „--preserve-merges“ е остаряла. Ползвайте „--rebase-merges“ вместо "
"нея."
-#: builtin/rebase.c:1492
+#: builtin/rebase.c:1498
msgid "cannot combine '--keep-base' with '--onto'"
msgstr "опциите „--keep-base“ и „--onto“ са несъвместими"
-#: builtin/rebase.c:1494
+#: builtin/rebase.c:1500
msgid "cannot combine '--keep-base' with '--root'"
msgstr "опциите „--keep-base“ и „--root“ са несъвместими"
-#: builtin/rebase.c:1498
+#: builtin/rebase.c:1504
msgid "cannot combine '--root' with '--fork-point'"
msgstr "опциите „--root“ и „--fork-point“ са несъвместими"
-#: builtin/rebase.c:1501
+#: builtin/rebase.c:1507
msgid "No rebase in progress?"
msgstr "Изглежда в момента не тече пребазиране"
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1511
msgid "The --edit-todo action can only be used during interactive rebase."
msgstr ""
"Опцията „--edit-todo“ е достъпна само по време на интерактивно пребазиране."
-#: builtin/rebase.c:1528 t/helper/test-fast-rebase.c:123
+#: builtin/rebase.c:1534 t/helper/test-fast-rebase.c:123
msgid "Cannot read HEAD"
msgstr "Указателят „HEAD“ не може да бъде прочетен"
-#: builtin/rebase.c:1540
+#: builtin/rebase.c:1546
msgid ""
"You must edit all merge conflicts and then\n"
"mark them as resolved using git add"
@@ -20070,16 +20485,16 @@
"Трябва да редактирате всички конфликти при сливането. След това\n"
"отбележете коригирането им чрез командата „git add“"
-#: builtin/rebase.c:1559
+#: builtin/rebase.c:1565
msgid "could not discard worktree changes"
msgstr "промените в работното дърво не могат да бъдат занулени"
-#: builtin/rebase.c:1578
+#: builtin/rebase.c:1584
#, c-format
msgid "could not move back to %s"
msgstr "връщането към „%s“ е невъзможно"
-#: builtin/rebase.c:1624
+#: builtin/rebase.c:1630
#, c-format
msgid ""
"It seems that there is already a %s directory, and\n"
@@ -20100,138 +20515,138 @@
"за\n"
"да не загубите случайно промени.\n"
-#: builtin/rebase.c:1652
+#: builtin/rebase.c:1658
msgid "switch `C' expects a numerical value"
msgstr "опцията „C“ очаква число за аргумент"
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1700
#, c-format
msgid "Unknown mode: %s"
msgstr "Неизвестна стратегия: „%s“"
-#: builtin/rebase.c:1733
+#: builtin/rebase.c:1739
msgid "--strategy requires --merge or --interactive"
msgstr ""
"опцията „--strategy“ изисква някоя от опциите „--merge“ или „--interactive“"
-#: builtin/rebase.c:1763
+#: builtin/rebase.c:1769
msgid "cannot combine apply options with merge options"
msgstr "опциите за „apply“ са несъвместими с опциите за сливане"
-#: builtin/rebase.c:1776
+#: builtin/rebase.c:1782
#, c-format
msgid "Unknown rebase backend: %s"
msgstr "Непозната реализация на пребазиране: %s"
-#: builtin/rebase.c:1806
+#: builtin/rebase.c:1812
msgid "--reschedule-failed-exec requires --exec or --interactive"
msgstr ""
"опцията „--reschedule-failed-exec“ изисква някоя от опциите „--exec“ или „--"
"interactive“"
-#: builtin/rebase.c:1826
+#: builtin/rebase.c:1832
msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
msgstr "опциите „--preserve-merges“ и „--rebase-merges“ са несъвместими"
-#: builtin/rebase.c:1830
+#: builtin/rebase.c:1836
msgid ""
"error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
msgstr ""
"ГРЕШКА: опциите „--preserve-merges“ и „--reschedule-failed-exec“ са "
"несъвместими"
-#: builtin/rebase.c:1854
+#: builtin/rebase.c:1860
#, c-format
msgid "invalid upstream '%s'"
msgstr "неправилен следен клон: „%s“"
-#: builtin/rebase.c:1860
+#: builtin/rebase.c:1866
msgid "Could not create new root commit"
msgstr "Не може да се създаде ново начално подаване"
-#: builtin/rebase.c:1886
+#: builtin/rebase.c:1892
#, c-format
msgid "'%s': need exactly one merge base with branch"
msgstr "„%s“: изисква се точно една база за сливане с клона"
-#: builtin/rebase.c:1889
+#: builtin/rebase.c:1895
#, c-format
msgid "'%s': need exactly one merge base"
msgstr "„%s“: изисква се точно една база за пребазиране"
-#: builtin/rebase.c:1897
+#: builtin/rebase.c:1903
#, c-format
msgid "Does not point to a valid commit '%s'"
msgstr "Указателят „%s“ не сочи към подаване"
-#: builtin/rebase.c:1923
+#: builtin/rebase.c:1931
#, c-format
msgid "fatal: no such branch/commit '%s'"
msgstr "ФАТАЛНА ГРЕШКА: не съществува клон „%s“"
-#: builtin/rebase.c:1931 builtin/submodule--helper.c:40
+#: builtin/rebase.c:1939 builtin/submodule--helper.c:40
#: builtin/submodule--helper.c:2414
#, c-format
msgid "No such ref: %s"
msgstr "Такъв указател няма: %s"
-#: builtin/rebase.c:1942
+#: builtin/rebase.c:1950
msgid "Could not resolve HEAD to a revision"
msgstr "Подаването, сочено от указателя „HEAD“, не може да бъде открито"
-#: builtin/rebase.c:1963
+#: builtin/rebase.c:1971
msgid "Please commit or stash them."
msgstr "Промените трябва или да се подадат, или да се скатаят."
-#: builtin/rebase.c:1999
+#: builtin/rebase.c:2007
#, c-format
msgid "could not switch to %s"
msgstr "не може да се премине към „%s“"
-#: builtin/rebase.c:2010
+#: builtin/rebase.c:2018
msgid "HEAD is up to date."
msgstr "Указателят „HEAD“ е напълно актуален."
-#: builtin/rebase.c:2012
+#: builtin/rebase.c:2020
#, c-format
msgid "Current branch %s is up to date.\n"
msgstr "Текущият клон „%s“ е напълно актуален.\n"
-#: builtin/rebase.c:2020
+#: builtin/rebase.c:2028
msgid "HEAD is up to date, rebase forced."
msgstr "Указателят „HEAD“ е напълно актуален — принудително пребазиране"
-#: builtin/rebase.c:2022
+#: builtin/rebase.c:2030
#, c-format
msgid "Current branch %s is up to date, rebase forced.\n"
msgstr "Текущият клон „%s“ е напълно актуален — принудително пребазиране\n"
-#: builtin/rebase.c:2030
+#: builtin/rebase.c:2038
msgid "The pre-rebase hook refused to rebase."
msgstr "Куката за изпълнение преди пребазиране отхвърли пребазирането."
-#: builtin/rebase.c:2037
+#: builtin/rebase.c:2045
#, c-format
msgid "Changes to %s:\n"
msgstr "Промените в „%s“:\n"
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2048
#, c-format
msgid "Changes from %s to %s:\n"
msgstr "Промените от „%s“ към „%s“:\n"
-#: builtin/rebase.c:2065
+#: builtin/rebase.c:2073
#, c-format
msgid "First, rewinding head to replay your work on top of it...\n"
msgstr ""
"Първо, указателят „HEAD“ започва да сочи към базата, върху която "
"пребазирате…\n"
-#: builtin/rebase.c:2074
+#: builtin/rebase.c:2082
msgid "Could not detach HEAD"
msgstr "Указателят „HEAD“ не може да се отделѝ"
-#: builtin/rebase.c:2083
+#: builtin/rebase.c:2091
#, c-format
msgid "Fast-forwarded %s to %s.\n"
msgstr "Превъртане на „%s“ към „%s“.\n"
@@ -20328,36 +20743,36 @@
msgid "'%s' is not a valid timestamp"
msgstr "„%s“ не е правилна стойност за време"
-#: builtin/reflog.c:606
+#: builtin/reflog.c:609
#, c-format
msgid "Marking reachable objects..."
msgstr "Отбелязване на достижимите обекти…"
-#: builtin/reflog.c:644
+#: builtin/reflog.c:647
#, c-format
msgid "%s points nowhere!"
msgstr "„%s“ не сочи наникъде!"
-#: builtin/reflog.c:696
+#: builtin/reflog.c:699
msgid "no reflog specified to delete"
msgstr "не е указан журнал с подавания за изтриване"
-#: builtin/reflog.c:705
+#: builtin/reflog.c:708
#, c-format
msgid "not a reflog: %s"
msgstr "„%s“ не е журнал с подавания"
-#: builtin/reflog.c:710
+#: builtin/reflog.c:713
#, c-format
msgid "no reflog for '%s'"
msgstr "липсва журнал с подаванията за „%s“"
-#: builtin/reflog.c:756
+#: builtin/reflog.c:759
#, c-format
msgid "invalid ref format: %s"
msgstr "неправилен формат на указател: %s"
-#: builtin/reflog.c:765
+#: builtin/reflog.c:768
msgid "git reflog [ show | expire | delete | exists ]"
msgstr "git reflog [ show | expire | delete | exists ]"
@@ -20881,11 +21296,11 @@
msgid "Will not delete all non-push URLs"
msgstr "Никой от адресите, които не са за изтласкване, няма да се изтрие"
-#: builtin/repack.c:25
+#: builtin/repack.c:26
msgid "git repack [<options>]"
msgstr "git repack [ОПЦИЯ…]"
-#: builtin/repack.c:30
+#: builtin/repack.c:31
msgid ""
"Incremental repacks are incompatible with bitmap indexes. Use\n"
"--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -20894,131 +21309,131 @@
"Ползвайте опцията --no-write-bitmap-index или изключете настройката\n"
"„pack.writebitmaps“."
-#: builtin/repack.c:197
+#: builtin/repack.c:198
msgid "could not start pack-objects to repack promisor objects"
msgstr ""
"командата „pack-objects“ не може да се стартира за препакетирането на "
"гарантиращите обекти"
-#: builtin/repack.c:268 builtin/repack.c:447
+#: builtin/repack.c:270 builtin/repack.c:446
msgid "repack: Expecting full hex object ID lines only from pack-objects."
msgstr ""
"repack: от „pack-objects“ се изискват редове само с пълни шестнайсетични "
"указатели."
-#: builtin/repack.c:295
+#: builtin/repack.c:294
msgid "could not finish pack-objects to repack promisor objects"
msgstr ""
"командата „pack-objects“ не може да завърши за препакетирането на "
"гарантиращите обекти"
-#: builtin/repack.c:323
+#: builtin/repack.c:322
msgid "pack everything in a single pack"
msgstr "пакетиране на всичко в пакет"
-#: builtin/repack.c:325
+#: builtin/repack.c:324
msgid "same as -a, and turn unreachable objects loose"
msgstr ""
"същото като опцията „-a“. Допълнително — недостижимите обекти да станат "
"непакетирани"
-#: builtin/repack.c:328
+#: builtin/repack.c:327
msgid "remove redundant packs, and run git-prune-packed"
msgstr ""
"премахване на ненужните пакетирани файлове и изпълнение на командата „git-"
"prune-packed“"
-#: builtin/repack.c:330
+#: builtin/repack.c:329
msgid "pass --no-reuse-delta to git-pack-objects"
msgstr "подаване на опцията „--no-reuse-delta“ на командата „git-pack-objects“"
-#: builtin/repack.c:332
+#: builtin/repack.c:331
msgid "pass --no-reuse-object to git-pack-objects"
msgstr ""
"подаване на опцията „--no-reuse-object“ на командата „git-pack-objects“"
-#: builtin/repack.c:334
+#: builtin/repack.c:333
msgid "do not run git-update-server-info"
msgstr "без изпълнение на командата „git-update-server-info“"
-#: builtin/repack.c:337
+#: builtin/repack.c:336
msgid "pass --local to git-pack-objects"
msgstr "подаване на опцията „--local“ на командата „git-pack-objects“"
-#: builtin/repack.c:339
+#: builtin/repack.c:338
msgid "write bitmap index"
msgstr "създаване и записване на индекси на база битови маски"
-#: builtin/repack.c:341
+#: builtin/repack.c:340
msgid "pass --delta-islands to git-pack-objects"
msgstr "подаване на опцията „--delta-islands“ на командата „git-pack-objects“"
-#: builtin/repack.c:342
+#: builtin/repack.c:341
msgid "approxidate"
msgstr "евристична дата"
-#: builtin/repack.c:343
+#: builtin/repack.c:342
msgid "with -A, do not loosen objects older than this"
msgstr ""
"при комбинирането с опцията „-A“ — без разпакетиране на обектите по стари от "
"това"
-#: builtin/repack.c:345
+#: builtin/repack.c:344
msgid "with -a, repack unreachable objects"
msgstr "с „-a“ — препакетиране на недостижимите обекти"
-#: builtin/repack.c:347
+#: builtin/repack.c:346
msgid "size of the window used for delta compression"
msgstr "размер на прозореца за делта компресията"
-#: builtin/repack.c:348 builtin/repack.c:354
+#: builtin/repack.c:347 builtin/repack.c:353
msgid "bytes"
msgstr "байтове"
-#: builtin/repack.c:349
+#: builtin/repack.c:348
msgid "same as the above, but limit memory size instead of entries count"
msgstr ""
"същото като горната опция, но ограничението да е по размер на паметта, а не "
"по броя на обектите"
-#: builtin/repack.c:351
+#: builtin/repack.c:350
msgid "limits the maximum delta depth"
msgstr "ограничаване на максималната дълбочина на делтата"
-#: builtin/repack.c:353
+#: builtin/repack.c:352
msgid "limits the maximum number of threads"
msgstr "ограничаване на максималния брой нишки"
-#: builtin/repack.c:355
+#: builtin/repack.c:354
msgid "maximum size of each packfile"
msgstr "максимален размер на всеки пакет"
-#: builtin/repack.c:357
+#: builtin/repack.c:356
msgid "repack objects in packs marked with .keep"
msgstr "препакетиране на обектите в пакети белязани с „.keep“"
-#: builtin/repack.c:359
+#: builtin/repack.c:358
msgid "do not repack this pack"
msgstr "без препакетиране на този пакет"
-#: builtin/repack.c:369
+#: builtin/repack.c:368
msgid "cannot delete packs in a precious-objects repo"
msgstr "пакетите в хранилище с важни обекти не може да се трият"
-#: builtin/repack.c:373
+#: builtin/repack.c:372
msgid "--keep-unreachable and -A are incompatible"
msgstr "Опциите „--keep-unreachable“ и „-A“ са несъвместими"
-#: builtin/repack.c:456
+#: builtin/repack.c:455
msgid "Nothing new to pack."
msgstr "Нищо ново за пакетиране"
-#: builtin/repack.c:486
+#: builtin/repack.c:485
#, c-format
msgid "missing required file: %s"
msgstr "липсва задължителния файл „%s“"
-#: builtin/repack.c:488
+#: builtin/repack.c:487
#, c-format
msgid "could not unlink: %s"
msgstr "неуспешно изтриване на „%s“"
@@ -21352,8 +21767,8 @@
msgid "Cannot do a %s reset in the middle of a merge."
msgstr "Не може да се извърши %s зануляване по време на сливане."
-#: builtin/reset.c:295 builtin/stash.c:520 builtin/stash.c:594
-#: builtin/stash.c:618
+#: builtin/reset.c:295 builtin/stash.c:587 builtin/stash.c:661
+#: builtin/stash.c:685
msgid "be quiet, only report errors"
msgstr "по-малко подробности, да се извеждат само грешките"
@@ -21440,19 +21855,19 @@
msgid "Could not write new index file."
msgstr "Новият индекс не може да бъде записан."
-#: builtin/rev-list.c:499
+#: builtin/rev-list.c:534
msgid "cannot combine --exclude-promisor-objects and --missing"
msgstr "опциите „--exclude-promisor-objects“ и „--missing“ и са несъвместими"
-#: builtin/rev-list.c:560
+#: builtin/rev-list.c:595
msgid "object filtering requires --objects"
msgstr "филтрирането на обекти изисква опцията „--objects“"
-#: builtin/rev-list.c:610
+#: builtin/rev-list.c:651
msgid "rev-list does not support display of notes"
msgstr "командата „rev-list“ не поддържа извеждането на бележки"
-#: builtin/rev-list.c:615
+#: builtin/rev-list.c:656
msgid "marked counting is incompatible with --objects"
msgstr "опцията „--objects“ е несъвместима с изброяването"
@@ -21699,54 +22114,52 @@
msgid "git log --pretty=short | git shortlog [<options>]"
msgstr "git log --pretty=short | git shortlog [ОПЦИЯ…]"
-#: builtin/shortlog.c:135
+#: builtin/shortlog.c:123
msgid "using multiple --group options with stdin is not supported"
msgstr "повече от една опции „--group“ са несъвместими със стандартния вход"
-#: builtin/shortlog.c:145
+#: builtin/shortlog.c:133
msgid "using --group=trailer with stdin is not supported"
msgstr "опцията „--group=trailer“ е несъвместима със стандартния вход"
-#: builtin/shortlog.c:335
+#: builtin/shortlog.c:323
#, c-format
msgid "unknown group type: %s"
msgstr "неизвестен вид група: %s"
-#: builtin/shortlog.c:363
-msgid "Group by committer rather than author"
-msgstr "Групиране по подаващ, а не по автор"
+#: builtin/shortlog.c:351
+msgid "group by committer rather than author"
+msgstr "групиране по подаващ, а не по автор"
-#: builtin/shortlog.c:366
+#: builtin/shortlog.c:354
msgid "sort output according to the number of commits per author"
msgstr "подредба на подаванията по броя подавания от автор"
-#: builtin/shortlog.c:368
-msgid "Suppress commit descriptions, only provides commit count"
-msgstr "Без описания на подаванията — да се показва само броя подавания"
+#: builtin/shortlog.c:356
+msgid "suppress commit descriptions, only provides commit count"
+msgstr "без описания на подаванията — да се показва само броя подавания"
-#: builtin/shortlog.c:370
-msgid "Show the email address of each author"
-msgstr "Извеждане на адреса на е-поща за всеки автор"
+#: builtin/shortlog.c:358
+msgid "show the email address of each author"
+msgstr "извеждане на адреса на е-поща за всеки автор"
-#: builtin/shortlog.c:371
+#: builtin/shortlog.c:359
msgid "<w>[,<i1>[,<i2>]]"
msgstr "<ШИРОЧИНА>[,<ОТСТЪП_1>[,<ОТСТЪП_2>]]"
-#: builtin/shortlog.c:372
-msgid "Linewrap output"
-msgstr ""
-"Пренасяне на редовете до тази обща ШИРОЧИНА (76), с ОТСТЪП_1 (6) за първия "
-"ред и ОТСТЪП_2 (9) за останалите"
+#: builtin/shortlog.c:360
+msgid "linewrap output"
+msgstr "пренасяне на редовете"
-#: builtin/shortlog.c:374
+#: builtin/shortlog.c:362
msgid "field"
msgstr "поле"
-#: builtin/shortlog.c:375
-msgid "Group by field"
-msgstr "Групиране по поле"
+#: builtin/shortlog.c:363
+msgid "group by field"
+msgstr "групиране по поле"
-#: builtin/shortlog.c:403
+#: builtin/shortlog.c:391
msgid "too many arguments given outside repository"
msgstr "прекалено много аргументи извън хранилище"
@@ -21948,73 +22361,73 @@
msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
msgstr "git sparse-checkout (init|list|set|add|reapply|disable) ОПЦИЯ…"
-#: builtin/sparse-checkout.c:50
+#: builtin/sparse-checkout.c:45
msgid "git sparse-checkout list"
msgstr "git sparse-checkout list"
-#: builtin/sparse-checkout.c:76
+#: builtin/sparse-checkout.c:71
msgid "this worktree is not sparse (sparse-checkout file may not exist)"
msgstr ""
"това не е частично работно дърво (вероятно липсва файл „sparse-checkout“)"
-#: builtin/sparse-checkout.c:228
+#: builtin/sparse-checkout.c:223
msgid "failed to create directory for sparse-checkout file"
msgstr "директорията за частично изтегляне „%s“ не може да бъде създадена"
-#: builtin/sparse-checkout.c:269
+#: builtin/sparse-checkout.c:264
msgid "unable to upgrade repository format to enable worktreeConfig"
msgstr ""
"настройката „worktreeConfig“ не може да се включи, защото форматът на "
"хранилището не може да се обнови"
-#: builtin/sparse-checkout.c:271
+#: builtin/sparse-checkout.c:266
msgid "failed to set extensions.worktreeConfig setting"
msgstr "неуспешно задаване на настройката „extensions.worktreeConfig“"
-#: builtin/sparse-checkout.c:288
+#: builtin/sparse-checkout.c:283
msgid "git sparse-checkout init [--cone]"
msgstr "git sparse-checkout init [--cone]"
-#: builtin/sparse-checkout.c:307
+#: builtin/sparse-checkout.c:302
msgid "initialize the sparse-checkout in cone mode"
msgstr "инициализиране на частичното изтегляне в пътеводен режим"
-#: builtin/sparse-checkout.c:344
+#: builtin/sparse-checkout.c:339
#, c-format
msgid "failed to open '%s'"
msgstr "„%s“ не може да се отвори"
-#: builtin/sparse-checkout.c:401
+#: builtin/sparse-checkout.c:396
#, c-format
msgid "could not normalize path %s"
msgstr "пътят „%s“ не може да се нормализира"
-#: builtin/sparse-checkout.c:413
+#: builtin/sparse-checkout.c:408
msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
msgstr "git sparse-checkout (set|add) (--stdin | ШАБЛОН…)"
-#: builtin/sparse-checkout.c:438
+#: builtin/sparse-checkout.c:433
#, c-format
msgid "unable to unquote C-style string '%s'"
msgstr "цитирането на низ, форматиран за C — „%s“ не може да бъде изчистено"
-#: builtin/sparse-checkout.c:492 builtin/sparse-checkout.c:516
+#: builtin/sparse-checkout.c:487 builtin/sparse-checkout.c:511
msgid "unable to load existing sparse-checkout patterns"
msgstr "шаблоните за частично изтегляне не могат да се заредят"
-#: builtin/sparse-checkout.c:561
+#: builtin/sparse-checkout.c:556
msgid "read patterns from standard in"
msgstr "изчитане на шаблоните от стандартния вход"
-#: builtin/sparse-checkout.c:576
+#: builtin/sparse-checkout.c:571
msgid "git sparse-checkout reapply"
msgstr "git sparse-checkout reapply"
-#: builtin/sparse-checkout.c:595
+#: builtin/sparse-checkout.c:590
msgid "git sparse-checkout disable"
msgstr "git sparse-checkout disable"
-#: builtin/sparse-checkout.c:623
+#: builtin/sparse-checkout.c:618
msgid "error while refreshing working directory"
msgstr "грешка при обновяване на работната директория"
@@ -22104,155 +22517,166 @@
msgstr "„%s“ е неправилно име за указател"
#: builtin/stash.c:225
-msgid "git stash clear with parameters is unimplemented"
+msgid "git stash clear with arguments is unimplemented"
msgstr "командата „git stash clear“ не поддържа аргументи"
-#: builtin/stash.c:404
+#: builtin/stash.c:429
+#, c-format
+msgid ""
+"WARNING: Untracked file in way of tracked file! Renaming\n"
+" %s -> %s\n"
+" to make room.\n"
+msgstr ""
+"ПРЕДУПРЕЖДЕНИЕ: Неследен файл на мястото на следен! Преименуване\n"
+" „%s“ на „%s“\n"
+" за да се направи място.\n"
+
+#: builtin/stash.c:490
msgid "cannot apply a stash in the middle of a merge"
msgstr "по време на сливане не може да приложите нещо скатано"
-#: builtin/stash.c:415
+#: builtin/stash.c:501
#, c-format
msgid "could not generate diff %s^!."
msgstr "файлът с разликите „%s^!“ не може да се генерира"
-#: builtin/stash.c:422
+#: builtin/stash.c:508
msgid "conflicts in index. Try without --index."
msgstr ""
"в индекса има конфликти. Пробвайте да изпълните командата без опцията „--"
"index“."
-#: builtin/stash.c:428
+#: builtin/stash.c:514
msgid "could not save index tree"
msgstr "дървото сочено от индекса не може да бъде запазено"
-#: builtin/stash.c:437
+#: builtin/stash.c:523
msgid "could not restore untracked files from stash"
msgstr "неследени файлове не могат да се възстановят от скатаното"
-#: builtin/stash.c:451
+#: builtin/stash.c:537
#, c-format
msgid "Merging %s with %s"
msgstr "Сливане на „%s“ с „%s“"
-#: builtin/stash.c:461
+#: builtin/stash.c:547
msgid "Index was not unstashed."
msgstr "Индексът не е изваден от скатаното."
-#: builtin/stash.c:522 builtin/stash.c:620
+#: builtin/stash.c:589 builtin/stash.c:687
msgid "attempt to recreate the index"
msgstr "опит за повторно създаване на индекса"
-#: builtin/stash.c:566
+#: builtin/stash.c:633
#, c-format
msgid "Dropped %s (%s)"
msgstr "Изтрито: „%s“ (%s)"
-#: builtin/stash.c:569
+#: builtin/stash.c:636
#, c-format
msgid "%s: Could not drop stash entry"
msgstr "Скатаното „%s“ не може да бъде изтрито"
-#: builtin/stash.c:582
+#: builtin/stash.c:649
#, c-format
msgid "'%s' is not a stash reference"
msgstr "„%s“ не е указател към нещо скатано"
-#: builtin/stash.c:632
+#: builtin/stash.c:699
msgid "The stash entry is kept in case you need it again."
msgstr "Скатаното е запазено в случай, че ви потрябва отново."
-#: builtin/stash.c:655
+#: builtin/stash.c:722
msgid "No branch name specified"
msgstr "Не е указано име на клон"
-#: builtin/stash.c:799 builtin/stash.c:836
+#: builtin/stash.c:866 builtin/stash.c:903
#, c-format
msgid "Cannot update %s with %s"
msgstr "Указателят „%s“ не може да бъде обновен да сочи към „%s“"
-#: builtin/stash.c:817 builtin/stash.c:1471 builtin/stash.c:1536
+#: builtin/stash.c:884 builtin/stash.c:1538 builtin/stash.c:1603
msgid "stash message"
msgstr "съобщение при скатаване"
-#: builtin/stash.c:827
+#: builtin/stash.c:894
msgid "\"git stash store\" requires one <commit> argument"
msgstr "командата „git stash store“ изисква точно един аргумент-ПОДАВАНЕ"
-#: builtin/stash.c:1042
+#: builtin/stash.c:1109
msgid "No changes selected"
msgstr "Не са избрани никакви промени"
-#: builtin/stash.c:1142
+#: builtin/stash.c:1209
msgid "You do not have the initial commit yet"
msgstr "Все още липсва първоначално подаване"
-#: builtin/stash.c:1169
+#: builtin/stash.c:1236
msgid "Cannot save the current index state"
msgstr "Състоянието на текущия индекс не може да бъде запазено"
-#: builtin/stash.c:1178
+#: builtin/stash.c:1245
msgid "Cannot save the untracked files"
msgstr "Неследените файлове не могат да се запазят"
-#: builtin/stash.c:1189 builtin/stash.c:1198
+#: builtin/stash.c:1256 builtin/stash.c:1265
msgid "Cannot save the current worktree state"
msgstr "Състоянието на работното дърво не може да бъде запазено"
-#: builtin/stash.c:1226
+#: builtin/stash.c:1293
msgid "Cannot record working tree state"
msgstr "Състоянието на работното дърво не може да бъде запазено"
-#: builtin/stash.c:1275
+#: builtin/stash.c:1342
msgid "Can't use --patch and --include-untracked or --all at the same time"
msgstr "Опцията „--patch“ е несъвместима с „--include-untracked“ и „--all“"
-#: builtin/stash.c:1291
+#: builtin/stash.c:1358
msgid "Did you forget to 'git add'?"
msgstr "Пробвайте да използвате „git add“"
-#: builtin/stash.c:1306
+#: builtin/stash.c:1373
msgid "No local changes to save"
msgstr "Няма никакви локални промени за скатаване"
-#: builtin/stash.c:1313
+#: builtin/stash.c:1380
msgid "Cannot initialize stash"
msgstr "Скатаването не може да стартира"
-#: builtin/stash.c:1328
+#: builtin/stash.c:1395
msgid "Cannot save the current status"
msgstr "Текущото състояние не може да бъде запазено"
-#: builtin/stash.c:1333
+#: builtin/stash.c:1400
#, c-format
msgid "Saved working directory and index state %s"
msgstr "Състоянието на работната директория и индекса e запазено: „%s“"
-#: builtin/stash.c:1423
+#: builtin/stash.c:1490
msgid "Cannot remove worktree changes"
msgstr "Промените в работното дърво не могат да бъдат занулени"
-#: builtin/stash.c:1462 builtin/stash.c:1527
+#: builtin/stash.c:1529 builtin/stash.c:1594
msgid "keep index"
msgstr "запазване на индекса"
-#: builtin/stash.c:1464 builtin/stash.c:1529
+#: builtin/stash.c:1531 builtin/stash.c:1596
msgid "stash in patch mode"
msgstr "скатаване в режим за кръпки"
-#: builtin/stash.c:1465 builtin/stash.c:1530
+#: builtin/stash.c:1532 builtin/stash.c:1597
msgid "quiet mode"
msgstr "без извеждане на информация"
-#: builtin/stash.c:1467 builtin/stash.c:1532
+#: builtin/stash.c:1534 builtin/stash.c:1599
msgid "include untracked files in stash"
msgstr "скатаване и на неследените файлове"
-#: builtin/stash.c:1469 builtin/stash.c:1534
+#: builtin/stash.c:1536 builtin/stash.c:1601
msgid "include ignore files"
msgstr "скатаване и на игнорираните файлове"
-#: builtin/stash.c:1569
+#: builtin/stash.c:1636
msgid ""
"the stash.useBuiltin support has been removed!\n"
"See its entry in 'git help config' for details."
@@ -22331,12 +22755,13 @@
"."
#: builtin/submodule--helper.c:565
-msgid "Suppress output of entering each submodule command"
-msgstr "Без извеждане на изход при въвеждането на всяка команда за подмодули"
+msgid "suppress output of entering each submodule command"
+msgstr "без извеждане на изход при въвеждането на всяка команда за подмодули"
-#: builtin/submodule--helper.c:567 builtin/submodule--helper.c:1487
-msgid "Recurse into nested submodules"
-msgstr "Рекурсивно обхождане на подмодулите"
+#: builtin/submodule--helper.c:567 builtin/submodule--helper.c:888
+#: builtin/submodule--helper.c:1487
+msgid "recurse into nested submodules"
+msgstr "рекурсивно обхождане на подмодулите"
#: builtin/submodule--helper.c:572
msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
@@ -22373,8 +22798,8 @@
"Неуспешно регистриране на режима на обновяване за пътя към подмодул „%s“"
#: builtin/submodule--helper.c:709
-msgid "Suppress output for initializing a submodule"
-msgstr "Без извеждане на информация при инициализирането на подмодул"
+msgid "suppress output for initializing a submodule"
+msgstr "без извеждане на информация при инициализирането на подмодул"
#: builtin/submodule--helper.c:714
msgid "git submodule--helper init [<options>] [<path>]"
@@ -22396,21 +22821,17 @@
msgstr "неуспешно рекурсивно обхождане на подмодула „%s“"
#: builtin/submodule--helper.c:886 builtin/submodule--helper.c:1623
-msgid "Suppress submodule status output"
-msgstr "Без изход за състоянието на подмодула"
+msgid "suppress submodule status output"
+msgstr "без изход за състоянието на подмодула"
#: builtin/submodule--helper.c:887
msgid ""
-"Use commit stored in the index instead of the one stored in the submodule "
+"use commit stored in the index instead of the one stored in the submodule "
"HEAD"
msgstr ""
-"Използване на подаването указано в индекса, а не това от указателя „HEAD“ на "
+"използване на подаването указано в индекса, а не това от указателя „HEAD“ на "
"подмодула"
-#: builtin/submodule--helper.c:888
-msgid "recurse into nested submodules"
-msgstr "рекурсивно обхождане на подмодулите"
-
#: builtin/submodule--helper.c:893
msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
msgstr "git submodule status [--quiet] [--cached] [--recursive] [ПЪТ…]"
@@ -22497,8 +22918,8 @@
msgstr "отдалеченият адрес на подмодула „%s“ не може да бъде променен"
#: builtin/submodule--helper.c:1485
-msgid "Suppress output of synchronizing submodule url"
-msgstr "Без извеждане на информация при синхронизирането на подмодул"
+msgid "suppress output of synchronizing submodule url"
+msgstr "без извеждане на информация при синхронизирането на подмодул"
#: builtin/submodule--helper.c:1492
msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
@@ -22544,14 +22965,14 @@
msgstr "Регистрацията на подмодула „%s“ (%s) за пътя „%s“ е премахната\n"
#: builtin/submodule--helper.c:1624
-msgid "Remove submodule working trees even if they contain local changes"
+msgid "remove submodule working trees even if they contain local changes"
msgstr ""
-"Изтриване на работните дървета на подмодулите, дори когато те съдържат "
+"изтриване на работните дървета на подмодулите, дори когато те съдържат "
"локални промени"
#: builtin/submodule--helper.c:1625
-msgid "Unregister all submodules"
-msgstr "Премахване на регистрациите на всички подмодули"
+msgid "unregister all submodules"
+msgstr "премахване на регистрациите на всички подмодули"
#: builtin/submodule--helper.c:1630
msgid ""
@@ -22701,8 +23122,8 @@
"„none“ (нищо да не се прави)"
#: builtin/submodule--helper.c:2340
-msgid "Create a shallow clone truncated to the specified number of revisions"
-msgstr "Плитко клониране, отрязано до указания брой версии"
+msgid "create a shallow clone truncated to the specified number of revisions"
+msgstr "извършване на плитко клониране, отрязано до указания брой версии"
#: builtin/submodule--helper.c:2343
msgid "parallel jobs"
@@ -22772,8 +23193,8 @@
msgstr "файлът „.gitmodules“ трябва да е в работното дърво"
#: builtin/submodule--helper.c:2681
-msgid "Suppress output for setting url of a submodule"
-msgstr "Без извеждане на информация при задаването на адреса на подмодул"
+msgid "suppress output for setting url of a submodule"
+msgstr "без извеждане на информация при задаването на адреса на подмодул"
#: builtin/submodule--helper.c:2685
msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
@@ -22804,7 +23225,7 @@
msgid "--branch and --default are mutually exclusive"
msgstr "опциите „--branch“ и „--default“ са несъвместими"
-#: builtin/submodule--helper.c:2792 git.c:438 git.c:711
+#: builtin/submodule--helper.c:2792 git.c:441 git.c:714
#, c-format
msgid "%s doesn't support --super-prefix"
msgstr "„%s“ не поддържа опцията „--super-prefix“"
@@ -22874,12 +23295,12 @@
msgid "tag '%s' not found."
msgstr "етикетът „%s“ не е открит."
-#: builtin/tag.c:105
+#: builtin/tag.c:124
#, c-format
msgid "Deleted tag '%s' (was %s)\n"
msgstr "Изтрит е етикетът „%s“ (бе „%s“)\n"
-#: builtin/tag.c:135
+#: builtin/tag.c:159
#, c-format
msgid ""
"\n"
@@ -22892,7 +23313,7 @@
" %s\n"
"Редовете, които започват с „%c“, ще бъдат пропуснати.\n"
-#: builtin/tag.c:139
+#: builtin/tag.c:163
#, c-format
msgid ""
"\n"
@@ -22907,15 +23328,11 @@
"Редовете, които започват с „%c“, също ще бъдат включени — може да ги "
"изтриете вие.\n"
-#: builtin/tag.c:198
+#: builtin/tag.c:230
msgid "unable to sign the tag"
msgstr "етикетът не може да бъде подписан"
-#: builtin/tag.c:200
-msgid "unable to write tag file"
-msgstr "файлът за етикета не може да бъде запазен"
-
-#: builtin/tag.c:216
+#: builtin/tag.c:248
#, c-format
msgid ""
"You have created a nested tag. The object referred to by your new tag is\n"
@@ -22929,138 +23346,134 @@
"\n"
" git tag -f %s %s^{}"
-#: builtin/tag.c:232
+#: builtin/tag.c:264
msgid "bad object type."
msgstr "неправилен вид обект."
-#: builtin/tag.c:285
+#: builtin/tag.c:317
msgid "no tag message?"
msgstr "липсва съобщение за етикета"
-#: builtin/tag.c:292
+#: builtin/tag.c:324
#, c-format
msgid "The tag message has been left in %s\n"
msgstr "Съобщението за етикета е запазено във файла „%s“\n"
-#: builtin/tag.c:403
+#: builtin/tag.c:435
msgid "list tag names"
msgstr "извеждане на имената на етикетите"
-#: builtin/tag.c:405
+#: builtin/tag.c:437
msgid "print <n> lines of each tag message"
msgstr "извеждане на този БРОЙ редове от всяко съобщение за етикет"
-#: builtin/tag.c:407
+#: builtin/tag.c:439
msgid "delete tags"
msgstr "изтриване на етикети"
-#: builtin/tag.c:408
+#: builtin/tag.c:440
msgid "verify tags"
msgstr "проверка на етикети"
-#: builtin/tag.c:410
+#: builtin/tag.c:442
msgid "Tag creation options"
msgstr "Опции при създаването на етикети"
-#: builtin/tag.c:412
+#: builtin/tag.c:444
msgid "annotated tag, needs a message"
msgstr "анотирането на етикети изисква съобщение"
-#: builtin/tag.c:414
+#: builtin/tag.c:446
msgid "tag message"
msgstr "СЪОБЩЕНИЕ за етикет"
-#: builtin/tag.c:416
+#: builtin/tag.c:448
msgid "force edit of tag message"
msgstr "принудително редактиране на съобщение за етикет"
-#: builtin/tag.c:417
+#: builtin/tag.c:449
msgid "annotated and GPG-signed tag"
msgstr "анотиран етикет с подпис по GPG"
-#: builtin/tag.c:420
+#: builtin/tag.c:452
msgid "use another key to sign the tag"
msgstr "използване на друг ключ за подписването на етикет"
-#: builtin/tag.c:421
+#: builtin/tag.c:453
msgid "replace the tag if exists"
msgstr "замяна на етикета, ако съществува"
-#: builtin/tag.c:422 builtin/update-ref.c:505
+#: builtin/tag.c:454 builtin/update-ref.c:505
msgid "create a reflog"
msgstr "създаване на журнал на указателите"
-#: builtin/tag.c:424
+#: builtin/tag.c:456
msgid "Tag listing options"
msgstr "Опции за извеждането на етикети"
-#: builtin/tag.c:425
+#: builtin/tag.c:457
msgid "show tag list in columns"
msgstr "извеждане на списъка на етикетите по колони"
-#: builtin/tag.c:426 builtin/tag.c:428
+#: builtin/tag.c:458 builtin/tag.c:460
msgid "print only tags that contain the commit"
msgstr "извеждане само на етикетите, които съдържат подаването"
-#: builtin/tag.c:427 builtin/tag.c:429
+#: builtin/tag.c:459 builtin/tag.c:461
msgid "print only tags that don't contain the commit"
msgstr "извеждане само на етикетите, които не съдържат подаването"
-#: builtin/tag.c:430
+#: builtin/tag.c:462
msgid "print only tags that are merged"
msgstr "извеждане само на слетите етикети"
-#: builtin/tag.c:431
+#: builtin/tag.c:463
msgid "print only tags that are not merged"
msgstr "извеждане само на неслетите етикети"
-#: builtin/tag.c:435
+#: builtin/tag.c:467
msgid "print only tags of the object"
msgstr "извеждане само на етикетите на ОБЕКТА"
-#: builtin/tag.c:483
+#: builtin/tag.c:515
msgid "--column and -n are incompatible"
msgstr "Опциите „--column“ и „-n“ са несъвместими"
-#: builtin/tag.c:505
+#: builtin/tag.c:537
msgid "-n option is only allowed in list mode"
msgstr "Опцията „-n“ изисква режим на списък."
-#: builtin/tag.c:507
+#: builtin/tag.c:539
msgid "--contains option is only allowed in list mode"
msgstr "Опцията „-contains“ изисква режим на списък."
-#: builtin/tag.c:509
+#: builtin/tag.c:541
msgid "--no-contains option is only allowed in list mode"
msgstr "Опцията „-contains“ изисква режим на списък."
-#: builtin/tag.c:511
+#: builtin/tag.c:543
msgid "--points-at option is only allowed in list mode"
msgstr "Опцията „-points-at“ изисква режим на списък."
-#: builtin/tag.c:513
+#: builtin/tag.c:545
msgid "--merged and --no-merged options are only allowed in list mode"
msgstr "Опциите „--merged“ и „--no-merged“ изискват режим на списък."
-#: builtin/tag.c:524
+#: builtin/tag.c:556
msgid "only one -F or -m option is allowed."
msgstr "Опциите „-F“ и „-m“ са несъвместими."
-#: builtin/tag.c:543
-msgid "too many params"
-msgstr "Прекалено много аргументи"
-
-#: builtin/tag.c:549
+#: builtin/tag.c:581
#, c-format
msgid "'%s' is not a valid tag name."
msgstr "„%s“ е неправилно име за етикет."
-#: builtin/tag.c:554
+#: builtin/tag.c:586
#, c-format
msgid "tag '%s' already exists"
msgstr "етикетът „%s“ вече съществува"
-#: builtin/tag.c:585
+#: builtin/tag.c:617
#, c-format
msgid "Updated tag '%s' (was %s)\n"
msgstr "Обновен етикет „%s“ (бе „%s“)\n"
@@ -23437,91 +23850,63 @@
msgid "print tag contents"
msgstr "извеждане на съдържанието на ЕТИКЕТи"
-#: builtin/worktree.c:17
+#: builtin/worktree.c:18
msgid "git worktree add [<options>] <path> [<commit-ish>]"
msgstr "git worktree add [ОПЦИЯ…] ПЪТ [УКАЗАТЕЛ_КЪМ_ПОДАВАНЕ]"
-#: builtin/worktree.c:18
+#: builtin/worktree.c:19
msgid "git worktree list [<options>]"
msgstr "git worktree list [ОПЦИЯ…]"
-#: builtin/worktree.c:19
+#: builtin/worktree.c:20
msgid "git worktree lock [<options>] <path>"
msgstr "git worktree lock [ОПЦИЯ…] [ПЪТ]"
-#: builtin/worktree.c:20
+#: builtin/worktree.c:21
msgid "git worktree move <worktree> <new-path>"
msgstr "git worktree move [ДЪРВО] [НОВ_ПЪТ]"
-#: builtin/worktree.c:21
+#: builtin/worktree.c:22
msgid "git worktree prune [<options>]"
msgstr "git worktree prune [ОПЦИЯ…]"
-#: builtin/worktree.c:22
+#: builtin/worktree.c:23
msgid "git worktree remove [<options>] <worktree>"
msgstr "git worktree remove [ОПЦИЯ…] [ДЪРВО]"
-#: builtin/worktree.c:23
+#: builtin/worktree.c:24
msgid "git worktree unlock <path>"
msgstr "git worktree unlock [ПЪТ]"
-#: builtin/worktree.c:60 builtin/worktree.c:973
+#: builtin/worktree.c:61 builtin/worktree.c:933
#, c-format
msgid "failed to delete '%s'"
msgstr "неуспешно изтриване на „%s“"
-#: builtin/worktree.c:85
-msgid "not a valid directory"
-msgstr "не е валидна директория"
-
-#: builtin/worktree.c:91
-msgid "gitdir file does not exist"
-msgstr "файлът „gitdir“ не съществува"
-
-#: builtin/worktree.c:96 builtin/worktree.c:105
-#, c-format
-msgid "unable to read gitdir file (%s)"
-msgstr "файлът „gitdir“ не може да бъде прочетен (%s)"
-
-#: builtin/worktree.c:115
-#, c-format
-msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
-msgstr ""
-"изчитането върна по-малко байтове от очакваното (очаквани: %<PRIuMAX> байта, "
-"получени: %<PRIuMAX>)"
-
-#: builtin/worktree.c:123
-msgid "invalid gitdir file"
-msgstr "неправилен файл „gitdir“"
-
-#: builtin/worktree.c:131
-msgid "gitdir file points to non-existent location"
-msgstr "файлът „gitdir“ сочи несъществуващо местоположение"
-
-#: builtin/worktree.c:146
+#: builtin/worktree.c:74
#, c-format
msgid "Removing %s/%s: %s"
msgstr "Изтриване на „%s/%s“: %s"
-#: builtin/worktree.c:221
+#: builtin/worktree.c:149
msgid "report pruned working trees"
msgstr "докладване на окастрените работни дървета"
-#: builtin/worktree.c:223
+#: builtin/worktree.c:151
msgid "expire working trees older than <time>"
msgstr "обявяване на работните копия по-стари от това ВРЕМЕ за остарели"
-#: builtin/worktree.c:293
+#: builtin/worktree.c:221
#, c-format
msgid "'%s' already exists"
msgstr "„%s“ вече съществува"
-#: builtin/worktree.c:302
+#: builtin/worktree.c:230
#, c-format
msgid "unusable worktree destination '%s'"
msgstr "целта не може да се ползва за работно дърво: „%s“"
-#: builtin/worktree.c:307
+#: builtin/worktree.c:235
#, c-format
msgid ""
"'%s' is a missing but locked worktree;\n"
@@ -23531,7 +23916,7 @@
"За изрично задаване ползвайте „%s -f -f“, а за изчистване —\n"
"„unlock“, „prune“ или „remove“"
-#: builtin/worktree.c:309
+#: builtin/worktree.c:237
#, c-format
msgid ""
"'%s' is a missing but already registered worktree;\n"
@@ -23541,120 +23926,133 @@
"За изрично задаване ползвайте „%s -f“, а за изчистване —\n"
"„prune“ или „remove“"
-#: builtin/worktree.c:360
+#: builtin/worktree.c:288
#, c-format
msgid "could not create directory of '%s'"
msgstr "директорията „%s“ не може да бъде създадена"
-#: builtin/worktree.c:494 builtin/worktree.c:500
+#: builtin/worktree.c:422 builtin/worktree.c:428
#, c-format
msgid "Preparing worktree (new branch '%s')"
msgstr "Приготвяне на работното дърво (нов клон „%s“)"
-#: builtin/worktree.c:496
+#: builtin/worktree.c:424
#, c-format
msgid "Preparing worktree (resetting branch '%s'; was at %s)"
msgstr ""
"Приготвяне на работното дърво (зануляване на клона „%s“, който сочеше към "
"„%s“)"
-#: builtin/worktree.c:505
+#: builtin/worktree.c:433
#, c-format
msgid "Preparing worktree (checking out '%s')"
msgstr "Приготвяне на работното дърво (изтегляне на „%s“)"
-#: builtin/worktree.c:511
+#: builtin/worktree.c:439
#, c-format
msgid "Preparing worktree (detached HEAD %s)"
msgstr "Подготвяне на работно дърво (указателят „HEAD“ не свързан: %s)"
-#: builtin/worktree.c:552
+#: builtin/worktree.c:480
msgid "checkout <branch> even if already checked out in other worktree"
msgstr "Изтегляне КЛОНа, дори и да е изтеглен в друго работно дърво"
-#: builtin/worktree.c:555
+#: builtin/worktree.c:483
msgid "create a new branch"
msgstr "създаване на нов клон"
-#: builtin/worktree.c:557
+#: builtin/worktree.c:485
msgid "create or reset a branch"
msgstr "създаване или зануляване на клони"
-#: builtin/worktree.c:559
+#: builtin/worktree.c:487
msgid "populate the new working tree"
msgstr "подготвяне на новото работно дърво"
-#: builtin/worktree.c:560
+#: builtin/worktree.c:488
msgid "keep the new working tree locked"
msgstr "новото работно дърво да остане заключено"
-#: builtin/worktree.c:563
+#: builtin/worktree.c:491
msgid "set up tracking mode (see git-branch(1))"
msgstr "задаване на режима на следене (виж git-branch(1))"
-#: builtin/worktree.c:566
+#: builtin/worktree.c:494
msgid "try to match the new branch name with a remote-tracking branch"
msgstr "опит за напасване на името на новия клон с това на следящ клон"
-#: builtin/worktree.c:574
+#: builtin/worktree.c:502
msgid "-b, -B, and --detach are mutually exclusive"
msgstr "Опциите „-b“, „-B“ и „--detach“ са несъвместими една с друга"
-#: builtin/worktree.c:635
+#: builtin/worktree.c:563
msgid "--[no-]track can only be used if a new branch is created"
msgstr "„--[no-]track“ може да се използва само при създаването на нов клон"
-#: builtin/worktree.c:758
+#: builtin/worktree.c:680
+msgid "show extended annotations and reasons, if available"
+msgstr "извеждане на подробни анотации и обяснения, ако такива са налични"
+
+#: builtin/worktree.c:682
+msgid "add 'prunable' annotation to worktrees older than <time>"
+msgstr ""
+"добавяне на анотация за окастряне на работните копия по-стари от това ВРЕМЕ"
+
+#: builtin/worktree.c:691
+msgid "--verbose and --porcelain are mutually exclusive"
+msgstr "опциите „--verbose“ и „--porcelain“ са несъвместими"
+
+#: builtin/worktree.c:718
msgid "reason for locking"
msgstr "причина за заключване"
-#: builtin/worktree.c:770 builtin/worktree.c:803 builtin/worktree.c:877
-#: builtin/worktree.c:1001
+#: builtin/worktree.c:730 builtin/worktree.c:763 builtin/worktree.c:837
+#: builtin/worktree.c:961
#, c-format
msgid "'%s' is not a working tree"
msgstr "„%s“ не е работно дърво"
-#: builtin/worktree.c:772 builtin/worktree.c:805
+#: builtin/worktree.c:732 builtin/worktree.c:765
msgid "The main working tree cannot be locked or unlocked"
msgstr "Основното дърво не може да се отключи или заключи"
-#: builtin/worktree.c:777
+#: builtin/worktree.c:737
#, c-format
msgid "'%s' is already locked, reason: %s"
msgstr "„%s“ вече е заключено, защото „%s“"
-#: builtin/worktree.c:779
+#: builtin/worktree.c:739
#, c-format
msgid "'%s' is already locked"
msgstr "„%s“ вече е заключено"
-#: builtin/worktree.c:807
+#: builtin/worktree.c:767
#, c-format
msgid "'%s' is not locked"
msgstr "„%s“ не е заключено"
-#: builtin/worktree.c:848
+#: builtin/worktree.c:808
msgid "working trees containing submodules cannot be moved or removed"
msgstr ""
"не може да местите или изтривате работни дървета, в които има подмодули"
-#: builtin/worktree.c:856
+#: builtin/worktree.c:816
msgid "force move even if worktree is dirty or locked"
msgstr ""
"принудително преместване, дори работното дърво да не е чисто или да е "
"заключено"
-#: builtin/worktree.c:879 builtin/worktree.c:1003
+#: builtin/worktree.c:839 builtin/worktree.c:963
#, c-format
msgid "'%s' is a main working tree"
msgstr "„%s“ е основно работно дърво"
-#: builtin/worktree.c:884
+#: builtin/worktree.c:844
#, c-format
msgid "could not figure out destination name from '%s'"
msgstr "името на целта не може да се определи от „%s“"
-#: builtin/worktree.c:897
+#: builtin/worktree.c:857
#, c-format
msgid ""
"cannot move a locked working tree, lock reason: %s\n"
@@ -23663,7 +24061,7 @@
"не може да преместите заключено работно дърво, причина за заключването: %s\n"
"или го отключете, или го преместете принудително с „move -f -f“"
-#: builtin/worktree.c:899
+#: builtin/worktree.c:859
msgid ""
"cannot move a locked working tree;\n"
"use 'move -f -f' to override or unlock first"
@@ -23671,41 +24069,41 @@
"не може да преместите заключено работно дърво:\n"
"или го отключете, или го преместете принудително с „move -f -f“"
-#: builtin/worktree.c:902
+#: builtin/worktree.c:862
#, c-format
msgid "validation failed, cannot move working tree: %s"
msgstr ""
"проверките са неуспешни, работното дърво не може да бъде преместено: %s"
-#: builtin/worktree.c:907
+#: builtin/worktree.c:867
#, c-format
msgid "failed to move '%s' to '%s'"
msgstr "„%s“ не може да се премести в „%s“"
-#: builtin/worktree.c:953
+#: builtin/worktree.c:913
#, c-format
msgid "failed to run 'git status' on '%s'"
msgstr "неуспешно изпълнение на „git status“ върху „%s“"
-#: builtin/worktree.c:957
+#: builtin/worktree.c:917
#, c-format
msgid "'%s' contains modified or untracked files, use --force to delete it"
msgstr ""
"„%s“ съдържа променени или нови файлове, за принудително изтриване е "
"необходима опцията „--force“"
-#: builtin/worktree.c:962
+#: builtin/worktree.c:922
#, c-format
msgid "failed to run 'git status' on '%s', code %d"
msgstr ""
"командата „git status“ не може да се изпълни за „%s“, код за грешка: %d"
-#: builtin/worktree.c:985
+#: builtin/worktree.c:945
msgid "force removal even if worktree is dirty or locked"
msgstr ""
"принудително изтриване, дори работното дърво да не е чисто или да е заключено"
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:968
#, c-format
msgid ""
"cannot remove a locked working tree, lock reason: %s\n"
@@ -23714,7 +24112,7 @@
"не може да изтриете заключено работно дърво, причина за заключването: %s\n"
"или го отключете, или го изтрийте принудително с „remove -f -f“"
-#: builtin/worktree.c:1010
+#: builtin/worktree.c:970
msgid ""
"cannot remove a locked working tree;\n"
"use 'remove -f -f' to override or unlock first"
@@ -23722,17 +24120,17 @@
"не може да изтриете заключено работно дърво:\n"
"или го отключете, или го изтрийте принудително с „remove -f -f“"
-#: builtin/worktree.c:1013
+#: builtin/worktree.c:973
#, c-format
msgid "validation failed, cannot remove working tree: %s"
msgstr "проверките са неуспешни, работното дърво не може да бъде изтрито: %s"
-#: builtin/worktree.c:1037
+#: builtin/worktree.c:997
#, c-format
msgid "repair: %s: %s"
msgstr "поправяне: %s: „%s“"
-#: builtin/worktree.c:1040
+#: builtin/worktree.c:1000
#, c-format
msgid "error: %s: %s"
msgstr "грешка: %s: „%s“"
@@ -23753,15 +24151,23 @@
msgid "only useful for debugging"
msgstr "само за изчистване на грешки"
-#: http-fetch.c:114
+#: http-fetch.c:118
#, c-format
msgid "argument to --packfile must be a valid hash (got '%s')"
msgstr "опцията „--packfile“ изисква валидна контролна сума (а не „%s“)"
-#: http-fetch.c:122
+#: http-fetch.c:128
msgid "not a git repository"
msgstr "не е хранилище на Git"
+#: http-fetch.c:134
+msgid "--packfile requires --index-pack-args"
+msgstr "опцията „--packfile“ изисква опция „--index-pack-args“"
+
+#: http-fetch.c:143
+msgid "--index-pack-args can only be used with --packfile"
+msgstr "опцията „--index-pack-args“ изисква опция „--packfile“"
+
#: t/helper/test-fast-rebase.c:141
msgid "unhandled options"
msgstr "неподдържани опции"
@@ -23794,15 +24200,18 @@
" [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--"
"bare]\n"
" [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
+" [--super-prefix=<path>] [--config-env=<name>=<envvar>]\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"
+" [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--"
+"bare]\n"
" [--git-dir=ПЪТ] [--work-tree=ПЪТ] [--namespace=ИМЕ]\n"
+" [--super-prefix=ПЪТ] [--config-env=ИМЕ=ПРОМЕНЛИВА_НА_СРЕДАТА]\n"
" КОМАНДА [АРГ…]"
-#: git.c:35
+#: git.c:36
msgid ""
"'git help -a' and 'git help -g' list available subcommands and some\n"
"concept guides. See 'git help <command>' or 'git help <concept>'\n"
@@ -23816,47 +24225,47 @@
"някое определено ПОНЯТИЕ използвайте „git help ПОНЯТИЕ“. За преглед на\n"
"системата за помощ използвайте „git help git“."
-#: git.c:187
+#: git.c:188
#, c-format
msgid "no directory given for --git-dir\n"
msgstr "опцията „--git-dir“ изисква директория\n"
-#: git.c:201
+#: git.c:202
#, c-format
msgid "no namespace given for --namespace\n"
msgstr "опцията „--namespace“ изисква име\n"
-#: git.c:215
+#: git.c:216
#, c-format
msgid "no directory given for --work-tree\n"
msgstr "опцията „--work-tree“ изисква директория\n"
-#: git.c:229
+#: git.c:230
#, c-format
msgid "no prefix given for --super-prefix\n"
msgstr "опцията „--super-prefix“ изисква префикс\n"
-#: git.c:251
+#: git.c:252
#, c-format
msgid "-c expects a configuration string\n"
msgstr "опцията „-c“ изисква низ за настройка\n"
-#: git.c:289
+#: git.c:292
#, c-format
msgid "no directory given for -C\n"
msgstr "опцията „-C“ изисква директория\n"
-#: git.c:315
+#: git.c:318
#, c-format
msgid "unknown option: %s\n"
msgstr "непозната опция: „%s“\n"
-#: git.c:364
+#: git.c:367
#, c-format
msgid "while expanding alias '%s': '%s'"
msgstr "при заместването на псевдоним „%s“: „%s“"
-#: git.c:373
+#: git.c:376
#, c-format
msgid ""
"alias '%s' changes environment variables.\n"
@@ -23865,39 +24274,39 @@
"псевдонимът „%s“ променя променливи на средата.\n"
"За това може да ползвате „!git“ в псевдонима"
-#: git.c:380
+#: git.c:383
#, c-format
msgid "empty alias for %s"
msgstr "празен псевдоним за „%s“"
-#: git.c:383
+#: git.c:386
#, c-format
msgid "recursive alias: %s"
msgstr "зациклен псевдоним: „%s“"
-#: git.c:465
+#: git.c:468
msgid "write failure on standard output"
msgstr "грешка при запис на стандартния изход"
-#: git.c:467
+#: git.c:470
msgid "unknown write failure on standard output"
msgstr "неизвестна грешка при запис на стандартния изход"
-#: git.c:469
+#: git.c:472
msgid "close failed on standard output"
msgstr "грешка при затваряне на стандартния изход"
-#: git.c:820
+#: git.c:823
#, c-format
msgid "alias loop detected: expansion of '%s' does not terminate:%s"
msgstr "зацикляне в псевдонимите: заместванията на „%s“ не приключват:%s"
-#: git.c:870
+#: git.c:873
#, c-format
msgid "cannot handle %s as a builtin"
msgstr "„%s“ не може да се обработи като вградена команда"
-#: git.c:883
+#: git.c:886
#, c-format
msgid ""
"usage: %s\n"
@@ -23906,14 +24315,14 @@
"употреба: %s\n"
"\n"
-#: git.c:903
+#: git.c:906
#, c-format
msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
msgstr ""
"неуспешно заместване на псевдонима „%s“ — резултатът „%s“ не е команда на "
"git\n"
-#: git.c:915
+#: git.c:918
#, c-format
msgid "failed to run command '%s': %s\n"
msgstr "командата „%s“ не може да се изпълни: %s\n"
@@ -24162,11 +24571,11 @@
"при ползването на „--pathspec-from-file“, пътищата са разделени с нулевия "
"знак „NUL“"
-#: ref-filter.h:96
+#: ref-filter.h:99
msgid "key"
msgstr "КЛЮЧ"
-#: ref-filter.h:96
+#: ref-filter.h:99
msgid "field name to sort on"
msgstr "име на полето, по което да е подредбата"
@@ -24176,14 +24585,6 @@
"при възможност преизползване на решението на конфликта за обновяване на "
"индекса"
-#: wt-status.h:80
-msgid "HEAD detached at "
-msgstr "Указателят „HEAD“ не е свързан и е при "
-
-#: wt-status.h:81
-msgid "HEAD detached from "
-msgstr "Указателят „HEAD“ не е свързан и е отделѐн от "
-
#: command-list.h:50
msgid "Add file contents to the index"
msgstr "Добавяне на съдържанието на файла към индекса"
@@ -24529,8 +24930,8 @@
msgstr "Запис и проверка на индексите за множество пакети"
#: command-list.h:132
-msgid "Creates a tag object"
-msgstr "Създаване на обект-етикет"
+msgid "Creates a tag object with extra validation"
+msgstr "Създаване на обект-етикет с допълнителни проверки"
#: command-list.h:133
msgid "Build a tree-object from ls-tree formatted text"
@@ -24838,72 +25239,55 @@
msgstr "Указване на неследени файлове, които да бъдат нарочно пренебрегвани"
#: command-list.h:209
+msgid "Map author/committer names and/or E-Mail addresses"
+msgstr "Съответствия на имена на автор/подаващ и/или адреси на е-поща"
+
+#: command-list.h:210
msgid "Defining submodule properties"
msgstr "Дефиниране на свойствата на подмодулите"
-#: command-list.h:210
+#: command-list.h:211
msgid "Git namespaces"
msgstr "Пространства от имена на Git"
-#: command-list.h:211
+#: command-list.h:212
msgid "Helper programs to interact with remote repositories"
msgstr "Помощни програми за работа с отдалечените хранилища"
-#: command-list.h:212
+#: command-list.h:213
msgid "Git Repository Layout"
msgstr "Устройство на хранилището на Git"
-#: command-list.h:213
+#: command-list.h:214
msgid "Specifying revisions and ranges for Git"
msgstr "Указване на версии и диапазони в Git"
-#: command-list.h:214
+#: command-list.h:215
msgid "Mounting one repository inside another"
msgstr "Монтиране на едно хранилище в друго"
-#: command-list.h:215
+#: command-list.h:216
msgid "A tutorial introduction to Git: part two"
msgstr "Въвеждащ урок за Git: втора част"
-#: command-list.h:216
+#: command-list.h:217
msgid "A tutorial introduction to Git"
msgstr "Въвеждащ урок за Git"
-#: command-list.h:217
+#: command-list.h:218
msgid "An overview of recommended workflows with Git"
msgstr "Общ преглед на препоръчваните начини за работа с Git"
-#: git-bisect.sh:48
-#, sh-format
-msgid "Bad rev input: $arg"
-msgstr "Неправилна версия: „${arg}“"
-
-#: git-bisect.sh:82
-msgid "No logfile given"
-msgstr "Не е зададен журнален файл"
-
-#: git-bisect.sh:83
-#, sh-format
-msgid "cannot read $file for replaying"
-msgstr ""
-"Журналният файл „${file}“ не може да бъде прочетен, за да се изпълнят "
-"командите от него наново"
-
-#: git-bisect.sh:105
-msgid "?? what are you talking about?"
-msgstr ""
-"Непозната команда. Възможните варианти са: „start“, „good“, „bad“, „skip“"
-
-#: git-bisect.sh:115
+#: git-bisect.sh:68
msgid "bisect run failed: no command provided."
msgstr "неуспешно двоично търсене, не е зададена команда."
-#: git-bisect.sh:120
+#: git-bisect.sh:73
#, sh-format
msgid "running $command"
msgstr "изпълнение на командата „${command}“"
-#: git-bisect.sh:127
+#: git-bisect.sh:80
#, sh-format
msgid ""
"bisect run failed:\n"
@@ -24913,11 +25297,11 @@
"изходният код от командата „${command}“ е ${res} — това е извън интервала "
"[0, 128)"
-#: git-bisect.sh:152
+#: git-bisect.sh:105
msgid "bisect run cannot continue any more"
msgstr "двоичното търсене не може да продължи"
-#: git-bisect.sh:158
+#: git-bisect.sh:111
#, sh-format
msgid ""
"bisect run failed:\n"
@@ -24926,14 +25310,10 @@
"неуспешно двоично търсене:\n"
"функцията „bisect-state ${state}“ завърши с код за грешка ${res}"
-#: git-bisect.sh:165
+#: git-bisect.sh:118
msgid "bisect run success"
msgstr "успешно двоично търсене"
-#: git-bisect.sh:173
-msgid "We are not bisecting."
-msgstr "В момента не се извършва двоично търсене."
-
#: git-merge-octopus.sh:46
msgid ""
"Error: Your local changes to the following files would be overwritten by "
diff --git a/po/ca.po b/po/ca.po
index 2131ed7..cd60e5b 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -14,7 +14,7 @@
# chunk | fragment
# delta | diferència
# deprecated | en desús
-# dry | simulació
+# dry-run | fer una prova
# fatal | fatal
# flush | buidar / buidatge
# hook | lligam
@@ -9865,7 +9865,7 @@
#: builtin/prune-packed.c:14 builtin/pull.c:204 builtin/push.c:559
#: builtin/remote.c:1427 builtin/rm.c:242 builtin/send-pack.c:190
msgid "dry run"
-msgstr "marxa en sec"
+msgstr "fer una prova"
#: builtin/add.c:331
msgid "interactive picking"
@@ -9916,8 +9916,7 @@
#: builtin/add.c:345
msgid "check if - even missing - files are ignored in dry run"
msgstr ""
-"comproveu si els fitxers - fins i tot els absents - s'ignoren en marxa en "
-"sec"
+"comproveu si els fitxers, fins i tot els absents, s'ignoren en una fer una prova"
#: builtin/add.c:347 builtin/update-index.c:1004
msgid "override the executable bit of the listed files"
@@ -13303,7 +13302,7 @@
"with '%c' will be ignored, and an empty message aborts the commit.\n"
msgstr ""
"Introduïu el missatge de comissió dels vostres canvis.\n"
-"S'ignoraran les línies que comencin amb «%c», i un missatge de\n"
+"S'ignoraran les línies que comencin amb «%c». Un missatge de\n"
"comissió buit avorta la comissió.\n"
#: builtin/commit.c:876
@@ -13554,7 +13553,7 @@
#: builtin/commit.c:1509
msgid "the commit is authored by me now (used with -C/-c/--amend)"
-msgstr "l'autor de la comissió ja sóc jo (s'usa amb -C/-c/--amend)"
+msgstr "l'autor de la comissió soc jo ara (s'usa amb -C/-c/--amend)"
#: builtin/commit.c:1510 builtin/log.c:1744 builtin/merge.c:301
#: builtin/pull.c:145 builtin/revert.c:110
@@ -15394,7 +15393,7 @@
#: builtin/gc.c:708
msgid ""
"git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
-msgstr
+msgstr ""
"git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
#: builtin/gc.c:738
@@ -18758,17 +18757,17 @@
"invocation.\n"
msgstr ""
"Baixar sense especificar com conciliar branques divergents està\n"
-"desaconsellat. Podeu desactivar aquest missatge executant una de les següents\n"
-"comandes abans de la propera baixada:\n"
+"desaconsellat. Podeu desactivar aquest missatge executant una de les\n"
+"següents ordres abans de la propera baixada:\n"
"\n"
" git config pull.rebase false # merge (estratègia per defecte)\n"
" git config pull.rebase true # rebase\n"
" git config pull.ff only # només fast-forward\n"
"\n"
-"Podeu reemplaçar «git config» per «git config --global» per a establir una preferència\n"
-"per defecte per a tots els dipòsits. Podeu també usar -rebase, --no-rebase,\n"
-"o --ff-only en la línia d'ordres per sobreescriure el valor per defecte configuratW\n"
-"en aquesta execució.\n"
+"Podeu reemplaçar «git config» per «git config --global» per a establir una\n"
+"preferència per defecte per a tots els dipòsits. Podeu també usar --rebase,\n"
+"--no-rebase o --ff-only en la línia d'ordres per sobreescriure el valor\n"
+"per defecte configuració en aquesta execució.\n"
#: builtin/pull.c:458
msgid ""
diff --git a/po/de.po b/po/de.po
index e1f4149..aff78ea 100644
--- a/po/de.po
+++ b/po/de.po
@@ -8,8 +8,8 @@
msgstr ""
"Project-Id-Version: Git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2020-12-21 07:10+0800\n"
-"PO-Revision-Date: 2020-12-19 14:01+0100\n"
+"POT-Creation-Date: 2021-03-04 22:41+0800\n"
+"PO-Revision-Date: 2021-03-03 20:13+0100\n"
"Last-Translator: Matthias Rüster <matthias.ruester@gmail.com>\n"
"Language-Team: Matthias Rüster <matthias.ruester@gmail.com>\n"
"Language: de\n"
@@ -17,15 +17,16 @@
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: Poedit 2.4.2\n"
#: add-interactive.c:376
#, c-format
msgid "Huh (%s)?"
msgstr "Wie bitte (%s)?"
-#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3284
-#: sequencer.c:3735 sequencer.c:3890 builtin/rebase.c:1532
-#: builtin/rebase.c:1955
+#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3292
+#: sequencer.c:3743 sequencer.c:3898 builtin/rebase.c:1538
+#: builtin/rebase.c:1963
msgid "could not read index"
msgstr "Index konnte nicht gelesen werden"
@@ -53,9 +54,9 @@
msgid "could not stage '%s'"
msgstr "Konnte '%s' nicht zum Commit vormerken."
-#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3478
+#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3486
msgid "could not write index"
-msgstr "Konnte Index nicht schreiben."
+msgstr "konnte Index nicht schreiben"
#: add-interactive.c:706 git-add--interactive.perl:626
#, c-format, perl-format
@@ -97,7 +98,7 @@
#: add-interactive.c:868 git-add--interactive.perl:687
msgid "Add untracked"
-msgstr "unversionierte Dateien hinzufügen"
+msgstr "Unversionierte Dateien hinzufügen"
#: add-interactive.c:895 git-add--interactive.perl:623
#, c-format, perl-format
@@ -211,7 +212,7 @@
#: add-interactive.c:1144 apply.c:4987 apply.c:4990 builtin/am.c:2257
#: builtin/am.c:2260 builtin/bugreport.c:134 builtin/clone.c:124
-#: builtin/fetch.c:147 builtin/merge.c:284 builtin/pull.c:190
+#: builtin/fetch.c:150 builtin/merge.c:285 builtin/pull.c:190
#: builtin/submodule--helper.c:409 builtin/submodule--helper.c:1818
#: builtin/submodule--helper.c:1821 builtin/submodule--helper.c:2326
#: builtin/submodule--helper.c:2329 builtin/submodule--helper.c:2572
@@ -818,7 +819,7 @@
msgid "Exiting because of an unresolved conflict."
msgstr "Beende wegen unaufgelöstem Konflikt."
-#: advice.c:281 builtin/merge.c:1369
+#: advice.c:281 builtin/merge.c:1370
msgid "You have not concluded your merge (MERGE_HEAD exists)."
msgstr "Sie haben Ihren Merge nicht abgeschlossen (MERGE_HEAD existiert)."
@@ -901,18 +902,15 @@
#: apply.c:140
msgid "--3way outside a repository"
-msgstr ""
-"Die Option --3way kann nicht außerhalb eines Repositories verwendet werden."
+msgstr "--3way kann nicht außerhalb eines Repositories verwendet werden"
#: apply.c:151
msgid "--index outside a repository"
-msgstr ""
-"Die Option --index kann nicht außerhalb eines Repositories verwendet werden."
+msgstr "--index kann nicht außerhalb eines Repositories verwendet werden"
#: apply.c:154
msgid "--cached outside a repository"
-msgstr ""
-"Die Option --cached kann nicht außerhalb eines Repositories verwendet werden."
+msgstr "--cached kann nicht außerhalb eines Repositories verwendet werden"
#: apply.c:801
#, c-format
@@ -927,7 +925,7 @@
#: apply.c:884
#, c-format
msgid "unable to find filename in patch at line %d"
-msgstr "Konnte keinen Dateinamen in Zeile %d des Patches finden."
+msgstr "konnte keinen Dateinamen in Zeile %d des Patches finden"
#: apply.c:922
#, c-format
@@ -1132,7 +1130,8 @@
msgid "cannot checkout %s"
msgstr "kann %s nicht auschecken"
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:73 setup.c:308
+#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:86 pack-revindex.c:213
+#: setup.c:308
#, c-format
msgid "failed to read %s"
msgstr "Fehler beim Lesen von %s"
@@ -1293,7 +1292,7 @@
msgid "unable to add cache entry for %s"
msgstr "kann für %s keinen Eintrag in den Zwischenspeicher hinzufügen"
-#: apply.c:4374 builtin/bisect--helper.c:524
+#: apply.c:4374 builtin/bisect--helper.c:523
#, c-format
msgid "failed to write to '%s'"
msgstr "Fehler beim Schreiben nach '%s'"
@@ -1329,7 +1328,7 @@
msgid "truncating .rej filename to %.*s.rej"
msgstr "Verkürze Name von .rej Datei zu %.*s.rej"
-#: apply.c:4576 builtin/fetch.c:927 builtin/fetch.c:1228
+#: apply.c:4576 builtin/fetch.c:933 builtin/fetch.c:1334
#, c-format
msgid "cannot open %s"
msgstr "kann '%s' nicht öffnen"
@@ -1383,7 +1382,7 @@
msgstr[0] "%d Zeile nach Behebung von Whitespace-Fehlern angewendet."
msgstr[1] "%d Zeilen nach Behebung von Whitespace-Fehlern angewendet."
-#: apply.c:4960 builtin/add.c:618 builtin/mv.c:304 builtin/rm.c:406
+#: apply.c:4960 builtin/add.c:626 builtin/mv.c:304 builtin/rm.c:406
msgid "Unable to write new index file"
msgstr "Konnte neue Index-Datei nicht schreiben."
@@ -1412,8 +1411,7 @@
#: apply.c:4999
msgid "instead of applying the patch, output diffstat for the input"
msgstr ""
-"anstatt der Anwendung des Patches, den \"diffstat\" für die Eingabe "
-"ausgegeben"
+"statt den Patch anzuwenden, den \"diffstat\" für die Eingabe ausgegeben"
#: apply.c:5003
msgid "show number of added and deleted lines in decimal notation"
@@ -1423,13 +1421,12 @@
#: apply.c:5005
msgid "instead of applying the patch, output a summary for the input"
msgstr ""
-"anstatt der Anwendung des Patches, eine Zusammenfassung für die Eingabe "
-"ausgeben"
+"statt den Patch anzuwenden, eine Zusammenfassung für die Eingabe ausgeben"
#: apply.c:5007
msgid "instead of applying the patch, see if the patch is applicable"
msgstr ""
-"anstatt der Anwendung des Patches, zeige ob Patch angewendet werden kann"
+"statt den Patch anzuwenden, anzeigen ob der Patch angewendet werden kann"
#: apply.c:5009
msgid "make sure the patch is applicable to the current index"
@@ -1463,7 +1460,7 @@
"einen temporären Index, basierend auf den integrierten Index-Informationen, "
"erstellen"
-#: apply.c:5025 builtin/checkout-index.c:182 builtin/ls-files.c:525
+#: apply.c:5025 builtin/checkout-index.c:195 builtin/ls-files.c:540
msgid "paths are separated with NUL character"
msgstr "Pfade sind getrennt durch NUL Zeichen"
@@ -1474,7 +1471,7 @@
#: apply.c:5028 builtin/am.c:2245 builtin/interpret-trailers.c:98
#: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3562 builtin/rebase.c:1346
+#: builtin/pack-objects.c:3577 builtin/rebase.c:1352
msgid "action"
msgstr "Aktion"
@@ -1503,9 +1500,9 @@
msgid "allow overlapping hunks"
msgstr "sich überlappende Patch-Blöcke erlauben"
-#: apply.c:5045 builtin/add.c:329 builtin/check-ignore.c:22
-#: builtin/commit.c:1364 builtin/count-objects.c:98 builtin/fsck.c:775
-#: builtin/log.c:2287 builtin/mv.c:123 builtin/read-tree.c:128
+#: apply.c:5045 builtin/add.c:337 builtin/check-ignore.c:22
+#: builtin/commit.c:1364 builtin/count-objects.c:98 builtin/fsck.c:757
+#: builtin/log.c:2286 builtin/mv.c:123 builtin/read-tree.c:128
msgid "be verbose"
msgstr "erweiterte Ausgaben"
@@ -1593,14 +1590,14 @@
msgid "cannot read %s"
msgstr "Kann %s nicht lesen."
-#: archive.c:345 sequencer.c:459 sequencer.c:1736 sequencer.c:2886
-#: sequencer.c:3327 sequencer.c:3436 builtin/am.c:249 builtin/commit.c:786
-#: builtin/merge.c:1138
+#: archive.c:345 sequencer.c:459 sequencer.c:1744 sequencer.c:2894
+#: sequencer.c:3335 sequencer.c:3444 builtin/am.c:249 builtin/commit.c:786
+#: builtin/merge.c:1139
#, c-format
msgid "could not read '%s'"
msgstr "Konnte '%s' nicht lesen"
-#: archive.c:430 builtin/add.c:181 builtin/add.c:594 builtin/rm.c:315
+#: archive.c:430 builtin/add.c:189 builtin/add.c:602 builtin/rm.c:315
#, c-format
msgid "pathspec '%s' did not match any files"
msgstr "Pfadspezifikation '%s' stimmt mit keinen Dateien überein"
@@ -1608,7 +1605,7 @@
#: archive.c:454
#, c-format
msgid "no such ref: %.*s"
-msgstr "Keine solche Referenz: %.*s"
+msgstr "Referenz nicht gefunden: %.*s"
#: archive.c:460
#, c-format
@@ -1642,7 +1639,7 @@
msgid "archive format"
msgstr "Archivformat"
-#: archive.c:556 builtin/log.c:1765
+#: archive.c:556 builtin/log.c:1764
msgid "prefix"
msgstr "Präfix"
@@ -1650,11 +1647,11 @@
msgid "prepend prefix to each pathname in the archive"
msgstr "einen Präfix vor jeden Pfadnamen in dem Archiv stellen"
-#: archive.c:558 archive.c:561 builtin/blame.c:886 builtin/blame.c:890
-#: builtin/blame.c:891 builtin/commit-tree.c:117 builtin/config.c:135
+#: archive.c:558 archive.c:561 builtin/blame.c:884 builtin/blame.c:888
+#: builtin/blame.c:889 builtin/commit-tree.c:117 builtin/config.c:135
#: builtin/fast-export.c:1207 builtin/fast-export.c:1209
-#: builtin/fast-export.c:1213 builtin/grep.c:919 builtin/hash-object.c:105
-#: builtin/ls-files.c:561 builtin/ls-files.c:564 builtin/notes.c:412
+#: builtin/fast-export.c:1213 builtin/grep.c:920 builtin/hash-object.c:105
+#: builtin/ls-files.c:576 builtin/ls-files.c:579 builtin/notes.c:412
#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:190
msgid "file"
msgstr "Datei"
@@ -1707,7 +1704,7 @@
#: archive.c:584
msgid "Option --exec can only be used together with --remote"
-msgstr "Die Option --exec kann nur zusammen mit --remote verwendet werden."
+msgstr "Die Option --exec kann nur zusammen mit --remote verwendet werden"
#: archive.c:586
msgid "Unexpected option --output"
@@ -1716,7 +1713,7 @@
#: archive.c:588
msgid "Options --add-file and --remote cannot be used together"
msgstr ""
-"Die Optionen --add-file und --remote können nicht gemeinsam verwendet werden."
+"Die Optionen --add-file und --remote können nicht gemeinsam verwendet werden"
#: archive.c:610
#, c-format
@@ -1821,12 +1818,12 @@
msgid "a %s revision is needed"
msgstr "ein %s Commit wird benötigt"
-#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:255
+#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:287
#, c-format
msgid "could not create file '%s'"
msgstr "konnte Datei '%s' nicht erstellen"
-#: bisect.c:987 builtin/merge.c:152
+#: bisect.c:987 builtin/merge.c:153
#, c-format
msgid "could not read file '%s'"
msgstr "Konnte Datei '%s' nicht lesen"
@@ -1844,10 +1841,10 @@
#, c-format
msgid ""
"No testable commit found.\n"
-"Maybe you started with bad path parameters?\n"
+"Maybe you started with bad path arguments?\n"
msgstr ""
"Kein testbarer Commit gefunden.\n"
-"Vielleicht starteten Sie mit falschen Pfad-Parametern?\n"
+"Vielleicht starteten Sie mit schlechten Pfad-Argumenten?\n"
#: bisect.c:1095
#, c-format
@@ -1882,11 +1879,11 @@
"endgültigen\n"
"Commits"
-#: blame.c:2821 bundle.c:213 ref-filter.c:2272 remote.c:2031 sequencer.c:2138
-#: sequencer.c:4633 submodule.c:855 builtin/commit.c:1045 builtin/log.c:409
-#: builtin/log.c:1023 builtin/log.c:1625 builtin/log.c:2046 builtin/log.c:2336
-#: builtin/merge.c:423 builtin/pack-objects.c:3380 builtin/pack-objects.c:3395
-#: builtin/shortlog.c:267
+#: blame.c:2821 bundle.c:213 ref-filter.c:2206 remote.c:2041 sequencer.c:2146
+#: sequencer.c:4641 submodule.c:856 builtin/commit.c:1045 builtin/log.c:411
+#: builtin/log.c:1016 builtin/log.c:1624 builtin/log.c:2045 builtin/log.c:2335
+#: builtin/merge.c:424 builtin/pack-objects.c:3395 builtin/pack-objects.c:3410
+#: builtin/shortlog.c:255
msgid "revision walk setup failed"
msgstr "Einrichtung des Revisionsgangs fehlgeschlagen"
@@ -1900,7 +1897,7 @@
#: blame.c:2850
#, c-format
msgid "no such path %s in %s"
-msgstr "Pfad %s nicht in %s"
+msgstr "Pfad %s nicht in %s gefunden"
#: blame.c:2861
#, c-format
@@ -2069,7 +2066,7 @@
msgid "unrecognized header: %s%s (%d)"
msgstr "nicht erkannter Kopfbereich: %s%s (%d)"
-#: bundle.c:136 rerere.c:480 rerere.c:690 sequencer.c:2390 sequencer.c:3176
+#: bundle.c:136 rerere.c:464 rerere.c:674 sequencer.c:2398 sequencer.c:3184
#: builtin/commit.c:814
#, c-format
msgid "could not open '%s'"
@@ -2113,279 +2110,292 @@
msgid "pack-objects died"
msgstr "Erstellung der Paketobjekte abgebrochen"
-#: bundle.c:379
-msgid "rev-list died"
-msgstr "\"rev-list\" abgebrochen"
-
-#: bundle.c:428
+#: bundle.c:386
#, c-format
msgid "ref '%s' is excluded by the rev-list options"
msgstr "Referenz '%s' wird durch \"rev-list\" Optionen ausgeschlossen"
-#: bundle.c:498
+#: bundle.c:490
#, c-format
msgid "unsupported bundle version %d"
msgstr "nicht unterstützte Paket-Version %d"
-#: bundle.c:500
+#: bundle.c:492
#, c-format
msgid "cannot write bundle version %d with algorithm %s"
msgstr "kann Paket-Version %d nicht mit Algorithmus %s schreiben"
-#: bundle.c:522 builtin/log.c:209 builtin/log.c:1927 builtin/shortlog.c:408
+#: bundle.c:510 builtin/log.c:210 builtin/log.c:1926 builtin/shortlog.c:396
#, c-format
msgid "unrecognized argument: %s"
msgstr "nicht erkanntes Argument: %s"
-#: bundle.c:530
+#: bundle.c:539
msgid "Refusing to create empty bundle."
msgstr "Erstellung eines leeren Pakets zurückgewiesen."
-#: bundle.c:540
+#: bundle.c:549
#, c-format
msgid "cannot create '%s'"
msgstr "kann '%s' nicht erstellen"
-#: bundle.c:565
+#: bundle.c:574
msgid "index-pack died"
msgstr "Erstellung der Paketindexdatei abgebrochen"
+#: chunk-format.c:113
+msgid "terminating chunk id appears earlier than expected"
+msgstr "abschließende Chunk-ID erscheint eher als erwartet"
+
+#: chunk-format.c:122
+#, c-format
+msgid "improper chunk offset(s) %<PRIx64> and %<PRIx64>"
+msgstr "unzulässige(r) Chunk-Offset(s) %<PRIx64> und %<PRIx64>"
+
+#: chunk-format.c:129
+#, c-format
+msgid "duplicate chunk ID %<PRIx32> found"
+msgstr "doppelte Chunk-ID %<PRIx32> gefunden"
+
+#: chunk-format.c:143
+#, c-format
+msgid "final chunk has non-zero id %<PRIx32>"
+msgstr "letzter Chunk hat nicht-Null ID %<PRIx32>"
+
#: color.c:329
#, c-format
msgid "invalid color value: %.*s"
msgstr "Ungültiger Farbwert: %.*s"
-#: commit-graph.c:188 midx.c:47
+#: commit-graph.c:197 midx.c:46
msgid "invalid hash version"
msgstr "ungültige Hash-Version"
-#: commit-graph.c:246
+#: commit-graph.c:255
msgid "commit-graph file is too small"
-msgstr "Commit-Graph-Datei ist zu klein."
+msgstr "Commit-Graph-Datei ist zu klein"
-#: commit-graph.c:311
+#: commit-graph.c:348
#, c-format
msgid "commit-graph signature %X does not match signature %X"
msgstr "Commit-Graph-Signatur %X stimmt nicht mit Signatur %X überein."
-#: commit-graph.c:318
+#: commit-graph.c:355
#, c-format
msgid "commit-graph version %X does not match version %X"
msgstr "Commit-Graph-Version %X stimmt nicht mit Version %X überein."
-#: commit-graph.c:325
+#: commit-graph.c:362
#, c-format
msgid "commit-graph hash version %X does not match version %X"
msgstr "Hash-Version des Commit-Graph %X stimmt nicht mit Version %X überein."
-#: commit-graph.c:342
+#: commit-graph.c:379
#, c-format
msgid "commit-graph file is too small to hold %u chunks"
msgstr "Commit-Graph-Datei ist zu klein, um %u Chunks zu enthalten"
-#: commit-graph.c:361
-#, c-format
-msgid "commit-graph improper chunk offset %08x%08x"
-msgstr "Unzulässiger Commit-Graph Chunk-Offset %08x%08x"
-
-#: commit-graph.c:433
-#, c-format
-msgid "commit-graph chunk id %08x appears multiple times"
-msgstr "Commit-Graph Chunk-Id %08x kommt mehrfach vor."
-
-#: commit-graph.c:499
+#: commit-graph.c:472
msgid "commit-graph has no base graphs chunk"
msgstr "Commit-Graph hat keinen Basis-Graph-Chunk"
-#: commit-graph.c:509
+#: commit-graph.c:482
msgid "commit-graph chain does not match"
msgstr "Commit-Graph Verkettung stimmt nicht überein."
-#: commit-graph.c:557
+#: commit-graph.c:530
#, c-format
msgid "invalid commit-graph chain: line '%s' not a hash"
msgstr "Ungültige Commit-Graph Verkettung: Zeile '%s' ist kein Hash"
-#: commit-graph.c:581
+#: commit-graph.c:554
msgid "unable to find all commit-graph files"
msgstr "Konnte nicht alle Commit-Graph-Dateien finden."
-#: commit-graph.c:721 commit-graph.c:785
+#: commit-graph.c:735 commit-graph.c:772
msgid "invalid commit position. commit-graph is likely corrupt"
msgstr "Ungültige Commit-Position. Commit-Graph ist wahrscheinlich beschädigt."
-#: commit-graph.c:742
+#: commit-graph.c:756
#, c-format
msgid "could not find commit %s"
msgstr "Konnte Commit %s nicht finden."
-#: commit-graph.c:1036 builtin/am.c:1292
+#: commit-graph.c:789
+msgid "commit-graph requires overflow generation data but has none"
+msgstr "Commit-Graph erfordert Überlaufgenerierungsdaten, aber hat keine"
+
+#: commit-graph.c:1065 builtin/am.c:1292
#, c-format
msgid "unable to parse commit %s"
msgstr "Konnte Commit '%s' nicht parsen."
-#: commit-graph.c:1252 builtin/pack-objects.c:2864
+#: commit-graph.c:1327 builtin/pack-objects.c:2872
#, c-format
msgid "unable to get type of object %s"
msgstr "Konnte Art von Objekt '%s' nicht bestimmen."
-#: commit-graph.c:1283
+#: commit-graph.c:1358
msgid "Loading known commits in commit graph"
msgstr "Lade bekannte Commits in Commit-Graph"
-#: commit-graph.c:1300
+#: commit-graph.c:1375
msgid "Expanding reachable commits in commit graph"
msgstr "Erweitere erreichbare Commits in Commit-Graph"
-#: commit-graph.c:1320
+#: commit-graph.c:1395
msgid "Clearing commit marks in commit graph"
msgstr "Lösche Commit-Markierungen in Commit-Graph"
-#: commit-graph.c:1339
+#: commit-graph.c:1414
+msgid "Computing commit graph topological levels"
+msgstr "Topologische Ebenen des Commit-Graph werden berechnet"
+
+#: commit-graph.c:1467
msgid "Computing commit graph generation numbers"
msgstr "Commit-Graph Generationsnummern berechnen"
-#: commit-graph.c:1406
+#: commit-graph.c:1548
msgid "Computing commit changed paths Bloom filters"
msgstr "Berechnung der Bloom-Filter für veränderte Pfade des Commits"
-#: commit-graph.c:1483
+#: commit-graph.c:1625
msgid "Collecting referenced commits"
msgstr "Sammle referenzierte Commits"
-#: commit-graph.c:1508
+#: commit-graph.c:1650
#, c-format
msgid "Finding commits for commit graph in %d pack"
msgid_plural "Finding commits for commit graph in %d packs"
msgstr[0] "Suche Commits für Commit-Graph in %d Paket"
msgstr[1] "Suche Commits für Commit-Graph in %d Paketen"
-#: commit-graph.c:1521
+#: commit-graph.c:1663
#, c-format
msgid "error adding pack %s"
msgstr "Fehler beim Hinzufügen von Paket %s."
-#: commit-graph.c:1525
+#: commit-graph.c:1667
#, c-format
msgid "error opening index for %s"
msgstr "Fehler beim Öffnen des Index für %s."
-#: commit-graph.c:1562
+#: commit-graph.c:1704
msgid "Finding commits for commit graph among packed objects"
msgstr "Suche Commits für Commit-Graph in gepackten Objekten"
-#: commit-graph.c:1580
+#: commit-graph.c:1722
msgid "Finding extra edges in commit graph"
msgstr "Suche zusätzliche Ränder in Commit-Graph"
-#: commit-graph.c:1628
+#: commit-graph.c:1771
msgid "failed to write correct number of base graph ids"
msgstr "Fehler beim Schreiben der korrekten Anzahl von Basis-Graph-IDs."
-#: commit-graph.c:1670 midx.c:819
+#: commit-graph.c:1802 midx.c:794
#, c-format
msgid "unable to create leading directories of %s"
msgstr "Konnte führende Verzeichnisse von '%s' nicht erstellen."
-#: commit-graph.c:1683
+#: commit-graph.c:1815
msgid "unable to create temporary graph layer"
msgstr "konnte temporäre Graphen-Schicht nicht erstellen"
-#: commit-graph.c:1688
+#: commit-graph.c:1820
#, c-format
msgid "unable to adjust shared permissions for '%s'"
msgstr "konnte geteilte Zugriffsberechtigungen für '%s' nicht ändern"
-#: commit-graph.c:1758
+#: commit-graph.c:1879
#, c-format
msgid "Writing out commit graph in %d pass"
msgid_plural "Writing out commit graph in %d passes"
msgstr[0] "Schreibe Commit-Graph in %d Durchgang"
msgstr[1] "Schreibe Commit-Graph in %d Durchgängen"
-#: commit-graph.c:1803
+#: commit-graph.c:1915
msgid "unable to open commit-graph chain file"
msgstr "konnte Commit-Graph Chain-Datei nicht öffnen"
-#: commit-graph.c:1819
+#: commit-graph.c:1931
msgid "failed to rename base commit-graph file"
msgstr "konnte Basis-Commit-Graph-Datei nicht umbenennen"
-#: commit-graph.c:1839
+#: commit-graph.c:1951
msgid "failed to rename temporary commit-graph file"
msgstr "konnte temporäre Commit-Graph-Datei nicht umbenennen"
-#: commit-graph.c:1965
+#: commit-graph.c:2084
msgid "Scanning merged commits"
msgstr "Durchsuche zusammengeführte Commits"
-#: commit-graph.c:2009
+#: commit-graph.c:2128
msgid "Merging commit-graph"
msgstr "Zusammenführen von Commit-Graph"
-#: commit-graph.c:2115
+#: commit-graph.c:2235
msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
msgstr ""
"versuche einen Commit-Graph zu schreiben, aber 'core.commitGraph' ist "
"deaktiviert"
-#: commit-graph.c:2214
+#: commit-graph.c:2342
msgid "too many commits to write graph"
msgstr "zu viele Commits zum Schreiben des Graphen"
-#: commit-graph.c:2307
+#: commit-graph.c:2440
msgid "the commit-graph file has incorrect checksum and is likely corrupt"
msgstr ""
"die Commit-Graph-Datei hat eine falsche Prüfsumme und ist wahrscheinlich "
"beschädigt"
-#: commit-graph.c:2317
+#: commit-graph.c:2450
#, c-format
msgid "commit-graph has incorrect OID order: %s then %s"
msgstr "Commit-Graph hat fehlerhafte OID-Reihenfolge: %s dann %s"
-#: commit-graph.c:2327 commit-graph.c:2342
+#: commit-graph.c:2460 commit-graph.c:2475
#, c-format
msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
msgstr "Commit-Graph hat fehlerhaften Fanout-Wert: fanout[%d] = %u != %u"
-#: commit-graph.c:2334
+#: commit-graph.c:2467
#, c-format
msgid "failed to parse commit %s from commit-graph"
msgstr "konnte Commit %s von Commit-Graph nicht parsen"
-#: commit-graph.c:2352
+#: commit-graph.c:2485
msgid "Verifying commits in commit graph"
msgstr "Commit in Commit-Graph überprüfen"
-#: commit-graph.c:2367
+#: commit-graph.c:2500
#, c-format
msgid "failed to parse commit %s from object database for commit-graph"
msgstr ""
"Fehler beim Parsen des Commits %s von Objekt-Datenbank für Commit-Graph"
-#: commit-graph.c:2374
+#: commit-graph.c:2507
#, c-format
msgid "root tree OID for commit %s in commit-graph is %s != %s"
msgstr ""
"OID des Wurzelverzeichnisses für Commit %s in Commit-Graph ist %s != %s"
-#: commit-graph.c:2384
+#: commit-graph.c:2517
#, c-format
msgid "commit-graph parent list for commit %s is too long"
msgstr "Commit-Graph Vorgänger-Liste für Commit %s ist zu lang"
-#: commit-graph.c:2393
+#: commit-graph.c:2526
#, c-format
msgid "commit-graph parent for %s is %s != %s"
msgstr "Commit-Graph-Vorgänger für %s ist %s != %s"
-#: commit-graph.c:2407
+#: commit-graph.c:2540
#, c-format
msgid "commit-graph parent list for commit %s terminates early"
msgstr "Commit-Graph Vorgänger-Liste für Commit %s endet zu früh"
-#: commit-graph.c:2412
+#: commit-graph.c:2545
#, c-format
msgid ""
"commit-graph has generation number zero for commit %s, but non-zero elsewhere"
@@ -2393,7 +2403,7 @@
"Commit-Graph hat Generationsnummer null für Commit %s, aber sonst ungleich "
"null"
-#: commit-graph.c:2416
+#: commit-graph.c:2549
#, c-format
msgid ""
"commit-graph has non-zero generation number for commit %s, but zero elsewhere"
@@ -2401,18 +2411,18 @@
"Commit-Graph hat Generationsnummer ungleich null für Commit %s, aber sonst "
"null"
-#: commit-graph.c:2432
+#: commit-graph.c:2566
#, c-format
-msgid "commit-graph generation for commit %s is %u != %u"
-msgstr "Commit-Graph Erstellung für Commit %s ist %u != %u"
+msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
+msgstr "Commit-Graph Erstellung für Commit %s ist %<PRIuMAX> < %<PRIuMAX>"
-#: commit-graph.c:2438
+#: commit-graph.c:2572
#, c-format
msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
msgstr ""
"Commit-Datum für Commit %s in Commit-Graph ist %<PRIuMAX> != %<PRIuMAX>"
-#: commit.c:52 sequencer.c:2879 builtin/am.c:359 builtin/am.c:403
+#: commit.c:52 sequencer.c:2887 builtin/am.c:359 builtin/am.c:403
#: builtin/am.c:1371 builtin/am.c:2018 builtin/replace.c:457
#, c-format
msgid "could not parse %s"
@@ -2444,28 +2454,28 @@
"Sie können diese Meldung unterdrücken, indem Sie\n"
"\"git config advice.graftFileDeprecated false\" ausführen."
-#: commit.c:1172
+#: commit.c:1223
#, c-format
msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
msgstr ""
"Commit %s hat eine nicht vertrauenswürdige GPG-Signatur, angeblich von %s."
-#: commit.c:1176
+#: commit.c:1227
#, c-format
msgid "Commit %s has a bad GPG signature allegedly by %s."
msgstr "Commit %s hat eine ungültige GPG-Signatur, angeblich von %s."
-#: commit.c:1179
+#: commit.c:1230
#, c-format
msgid "Commit %s does not have a GPG signature."
msgstr "Commit %s hat keine GPG-Signatur."
-#: commit.c:1182
+#: commit.c:1233
#, c-format
msgid "Commit %s has a good GPG signature by %s\n"
msgstr "Commit %s hat eine gültige GPG-Signatur von %s\n"
-#: commit.c:1436
+#: commit.c:1487
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"
@@ -2481,7 +2491,7 @@
msgid "memory exhausted"
msgstr "Speicher verbraucht"
-#: config.c:125
+#: config.c:126
#, c-format
msgid ""
"exceeded maximum include depth (%d) while including\n"
@@ -2497,306 +2507,350 @@
"überschritten.\n"
"Das könnte durch zirkulare Includes entstanden sein."
-#: config.c:141
+#: config.c:142
#, c-format
msgid "could not expand include path '%s'"
msgstr "Konnte Include-Pfad '%s' nicht erweitern."
-#: config.c:152
+#: config.c:153
msgid "relative config includes must come from files"
msgstr "Relative Includes von Konfigurationen müssen aus Dateien kommen."
-#: config.c:198
+#: config.c:199
msgid "relative config include conditionals must come from files"
msgstr ""
"Bedingungen für das Einbinden von Konfigurationen aus relativen Pfaden "
"müssen\n"
"aus Dateien kommen."
-#: config.c:378
+#: config.c:396
+#, c-format
+msgid "invalid config format: %s"
+msgstr "ungültiges Konfigurationsformat: %s"
+
+#: config.c:400
+#, c-format
+msgid "missing environment variable name for configuration '%.*s'"
+msgstr "fehlender Name der Umgebungsvariable für Konfiguration '%.*s'"
+
+#: config.c:405
+#, c-format
+msgid "missing environment variable '%s' for configuration '%.*s'"
+msgstr "fehlende Umgebungsvariable '%s' für Konfiguration '%.*s'"
+
+#: config.c:442
#, c-format
msgid "key does not contain a section: %s"
msgstr "Schlüssel enthält keine Sektion: %s"
-#: config.c:384
+#: config.c:448
#, c-format
msgid "key does not contain variable name: %s"
msgstr "Schlüssel enthält keinen Variablennamen: %s"
-#: config.c:408 sequencer.c:2580
+#: config.c:472 sequencer.c:2588
#, c-format
msgid "invalid key: %s"
msgstr "Ungültiger Schlüssel: %s"
-#: config.c:414
+#: config.c:478
#, c-format
msgid "invalid key (newline): %s"
msgstr "Ungültiger Schlüssel (neue Zeile): %s"
-#: config.c:450 config.c:462
+#: config.c:511
+msgid "empty config key"
+msgstr "leerer Konfigurationsschlüssel"
+
+#: config.c:529 config.c:541
#, c-format
msgid "bogus config parameter: %s"
msgstr "Fehlerhafter Konfigurationsparameter: %s"
-#: config.c:497
+#: config.c:555 config.c:572 config.c:579 config.c:588
#, c-format
msgid "bogus format in %s"
msgstr "Fehlerhaftes Format in %s"
-#: config.c:836
+#: config.c:622
+#, c-format
+msgid "bogus count in %s"
+msgstr "falsche Zählung in %s"
+
+#: config.c:626
+#, c-format
+msgid "too many entries in %s"
+msgstr "zu viele Einträge in %s"
+
+#: config.c:636
+#, c-format
+msgid "missing config key %s"
+msgstr "fehlender Konfigurationsschlüssel %s"
+
+#: config.c:644
+#, c-format
+msgid "missing config value %s"
+msgstr "fehlender Konfigurationswert %s"
+
+#: config.c:995
#, c-format
msgid "bad config line %d in blob %s"
msgstr "Ungültige Konfigurationszeile %d in Blob %s"
-#: config.c:840
+#: config.c:999
#, c-format
msgid "bad config line %d in file %s"
msgstr "Ungültige Konfigurationszeile %d in Datei %s"
-#: config.c:844
+#: config.c:1003
#, c-format
msgid "bad config line %d in standard input"
msgstr "Ungültige Konfigurationszeile %d in Standard-Eingabe"
-#: config.c:848
+#: config.c:1007
#, c-format
msgid "bad config line %d in submodule-blob %s"
msgstr "Ungültige Konfigurationszeile %d in Submodul-Blob %s"
-#: config.c:852
+#: config.c:1011
#, c-format
msgid "bad config line %d in command line %s"
msgstr "Ungültige Konfigurationszeile %d in Kommandozeile %s"
-#: config.c:856
+#: config.c:1015
#, c-format
msgid "bad config line %d in %s"
msgstr "Ungültige Konfigurationszeile %d in %s"
-#: config.c:993
+#: config.c:1152
msgid "out of range"
msgstr "Außerhalb des Bereichs"
-#: config.c:993
+#: config.c:1152
msgid "invalid unit"
msgstr "Ungültige Einheit"
-#: config.c:994
+#: config.c:1153
#, c-format
msgid "bad numeric config value '%s' for '%s': %s"
msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s': %s"
-#: config.c:1013
+#: config.c:1163
#, c-format
msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Blob %s: %s"
-#: config.c:1016
+#: config.c:1166
#, c-format
msgid "bad numeric config value '%s' for '%s' in file %s: %s"
msgstr ""
"Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Datei %s: %s"
-#: config.c:1019
+#: config.c:1169
#, c-format
msgid "bad numeric config value '%s' for '%s' in standard input: %s"
msgstr ""
"Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Standard-Eingabe: "
"%s"
-#: config.c:1022
+#: config.c:1172
#, c-format
msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
msgstr ""
"Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Submodul-Blob %s: "
"%s"
-#: config.c:1025
+#: config.c:1175
#, c-format
msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
msgstr ""
"Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Befehlszeile %s: "
"%s"
-#: config.c:1028
+#: config.c:1178
#, c-format
msgid "bad numeric config value '%s' for '%s' in %s: %s"
msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in %s: %s"
-#: config.c:1123
+#: config.c:1194
+#, c-format
+msgid "bad boolean config value '%s' for '%s'"
+msgstr "ungültiger boolescher Konfigurationswert '%s' für '%s'"
+
+#: config.c:1289
#, c-format
msgid "failed to expand user dir in: '%s'"
msgstr "Fehler beim Erweitern des Nutzerverzeichnisses in: '%s'"
-#: config.c:1132
+#: config.c:1298
#, c-format
msgid "'%s' for '%s' is not a valid timestamp"
msgstr "'%s' ist kein gültiger Zeitstempel für '%s'"
-#: config.c:1223
+#: config.c:1391
#, c-format
msgid "abbrev length out of range: %d"
msgstr "Länge für Abkürzung von Commit-IDs außerhalb des Bereichs: %d"
-#: config.c:1237 config.c:1248
+#: config.c:1405 config.c:1416
#, c-format
msgid "bad zlib compression level %d"
msgstr "ungültiger zlib Komprimierungsgrad %d"
-#: config.c:1340
+#: config.c:1508
msgid "core.commentChar should only be one character"
msgstr "core.commentChar sollte nur ein Zeichen sein"
-#: config.c:1373
+#: config.c:1541
#, c-format
msgid "invalid mode for object creation: %s"
msgstr "Ungültiger Modus für Objekterstellung: %s"
-#: config.c:1445
+#: config.c:1613
#, c-format
msgid "malformed value for %s"
msgstr "Ungültiger Wert für %s."
-#: config.c:1471
+#: config.c:1639
#, c-format
msgid "malformed value for %s: %s"
msgstr "Ungültiger Wert für %s: %s"
-#: config.c:1472
+#: config.c:1640
msgid "must be one of nothing, matching, simple, upstream or current"
msgstr ""
"Muss einer von diesen sein: nothing, matching, simple, upstream, current"
-#: config.c:1533 builtin/pack-objects.c:3649
+#: config.c:1701 builtin/pack-objects.c:3666
#, c-format
msgid "bad pack compression level %d"
msgstr "ungültiger Komprimierungsgrad (%d) für Paketierung"
-#: config.c:1655
+#: config.c:1823
#, c-format
msgid "unable to load config blob object '%s'"
msgstr "Konnte Blob-Objekt '%s' für Konfiguration nicht laden."
-#: config.c:1658
+#: config.c:1826
#, c-format
msgid "reference '%s' does not point to a blob"
msgstr "Referenz '%s' zeigt auf keinen Blob."
-#: config.c:1675
+#: config.c:1843
#, c-format
msgid "unable to resolve config blob '%s'"
msgstr "Konnte Blob '%s' für Konfiguration nicht auflösen."
-#: config.c:1705
+#: config.c:1873
#, c-format
msgid "failed to parse %s"
msgstr "Fehler beim Parsen von %s."
-#: config.c:1759
+#: config.c:1927
msgid "unable to parse command-line config"
msgstr ""
"Konnte die über die Befehlszeile angegebene Konfiguration nicht parsen."
-#: config.c:2122
+#: config.c:2290
msgid "unknown error occurred while reading the configuration files"
msgstr ""
"Es trat ein unbekannter Fehler beim Lesen der Konfigurationsdateien auf."
-#: config.c:2296
+#: config.c:2464
#, c-format
msgid "Invalid %s: '%s'"
msgstr "Ungültiger %s: '%s'"
-#: config.c:2341
+#: config.c:2509
#, c-format
msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
msgstr ""
"Der Wert '%d' von splitIndex.maxPercentChange sollte zwischen 0 und 100 "
"liegen."
-#: config.c:2387
+#: config.c:2555
#, c-format
msgid "unable to parse '%s' from command-line config"
msgstr ""
"Konnte Wert '%s' aus der über die Befehlszeile angegebenen Konfiguration\n"
"nicht parsen."
-#: config.c:2389
+#: config.c:2557
#, c-format
msgid "bad config variable '%s' in file '%s' at line %d"
msgstr "ungültige Konfigurationsvariable '%s' in Datei '%s' bei Zeile %d"
-#: config.c:2473
+#: config.c:2641
#, c-format
msgid "invalid section name '%s'"
msgstr "Ungültiger Sektionsname '%s'"
-#: config.c:2505
+#: config.c:2673
#, c-format
msgid "%s has multiple values"
msgstr "%s hat mehrere Werte"
-#: config.c:2534
+#: config.c:2702
#, c-format
msgid "failed to write new configuration file %s"
msgstr "Konnte neue Konfigurationsdatei '%s' nicht schreiben."
-#: config.c:2786 config.c:3112
+#: config.c:2954 config.c:3280
#, c-format
msgid "could not lock config file %s"
msgstr "Konnte Konfigurationsdatei '%s' nicht sperren."
-#: config.c:2797
+#: config.c:2965
#, c-format
msgid "opening %s"
msgstr "Öffne %s"
-#: config.c:2834 builtin/config.c:361
+#: config.c:3002 builtin/config.c:361
#, c-format
msgid "invalid pattern: %s"
msgstr "Ungültiges Muster: %s"
-#: config.c:2859
+#: config.c:3027
#, c-format
msgid "invalid config file %s"
msgstr "Ungültige Konfigurationsdatei %s"
-#: config.c:2872 config.c:3125
+#: config.c:3040 config.c:3293
#, c-format
msgid "fstat on %s failed"
msgstr "fstat auf %s fehlgeschlagen"
-#: config.c:2883
+#: config.c:3051
#, c-format
msgid "unable to mmap '%s'"
msgstr "mmap für '%s' fehlgeschlagen"
-#: config.c:2892 config.c:3130
+#: config.c:3060 config.c:3298
#, c-format
msgid "chmod on %s failed"
msgstr "chmod auf %s fehlgeschlagen"
-#: config.c:2977 config.c:3227
+#: config.c:3145 config.c:3395
#, c-format
msgid "could not write config file %s"
msgstr "Konnte Konfigurationsdatei %s nicht schreiben."
-#: config.c:3011
+#: config.c:3179
#, c-format
msgid "could not set '%s' to '%s'"
msgstr "Konnte '%s' nicht zu '%s' setzen."
-#: config.c:3013 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
+#: config.c:3181 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
#, c-format
msgid "could not unset '%s'"
msgstr "Konnte '%s' nicht aufheben."
-#: config.c:3103
+#: config.c:3271
#, c-format
msgid "invalid section name: %s"
msgstr "Ungültiger Sektionsname: %s"
-#: config.c:3270
+#: config.c:3438
#, c-format
msgid "missing value for '%s'"
msgstr "Fehlender Wert für '%s'"
@@ -2861,45 +2915,45 @@
msgid "protocol error: unexpected '%s'"
msgstr "Protokollfehler: unerwartetes '%s'"
-#: connect.c:473
+#: connect.c:497
#, c-format
msgid "unknown object format '%s' specified by server"
msgstr "unbekanntes Objekt-Format '%s' vom Server angegeben"
-#: connect.c:500
+#: connect.c:526
#, c-format
msgid "invalid ls-refs response: %s"
msgstr "ungültige ls-refs Antwort: %s"
-#: connect.c:504
+#: connect.c:530
msgid "expected flush after ref listing"
msgstr "Flush nach Auflistung der Referenzen erwartet"
-#: connect.c:507
+#: connect.c:533
msgid "expected response end packet after ref listing"
msgstr "Antwort-Endpaket nach Auflistung der Referenzen erwartet"
-#: connect.c:640
+#: connect.c:666
#, c-format
msgid "protocol '%s' is not supported"
msgstr "Protokoll '%s' wird nicht unterstützt"
-#: connect.c:691
+#: connect.c:717
msgid "unable to set SO_KEEPALIVE on socket"
msgstr "kann SO_KEEPALIVE bei Socket nicht setzen"
-#: connect.c:731 connect.c:794
+#: connect.c:757 connect.c:820
#, c-format
msgid "Looking up %s ... "
msgstr "Suche nach %s ..."
-#: connect.c:735
+#: connect.c:761
#, c-format
msgid "unable to look up %s (port %s) (%s)"
msgstr "Fehler bei Suche nach %s (Port %s) (%s)."
#. TRANSLATORS: this is the end of "Looking up %s ... "
-#: connect.c:739 connect.c:810
+#: connect.c:765 connect.c:836
#, c-format
msgid ""
"done.\n"
@@ -2908,7 +2962,7 @@
"Fertig.\n"
"Verbinde nach %s (Port %s) ... "
-#: connect.c:761 connect.c:838
+#: connect.c:787 connect.c:864
#, c-format
msgid ""
"unable to connect to %s:\n"
@@ -2918,62 +2972,65 @@
"%s"
#. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:767 connect.c:844
+#: connect.c:793 connect.c:870
msgid "done."
msgstr "Fertig."
-#: connect.c:798
+#: connect.c:824
#, c-format
msgid "unable to look up %s (%s)"
msgstr "Fehler bei der Suche nach %s (%s)"
-#: connect.c:804
+#: connect.c:830
#, c-format
msgid "unknown port %s"
msgstr "Unbekannter Port %s"
-#: connect.c:941 connect.c:1271
+#: connect.c:967 connect.c:1299
#, c-format
msgid "strange hostname '%s' blocked"
msgstr "Merkwürdigen Hostnamen '%s' blockiert."
-#: connect.c:943
+#: connect.c:969
#, c-format
msgid "strange port '%s' blocked"
msgstr "Merkwürdigen Port '%s' blockiert."
-#: connect.c:953
+#: connect.c:979
#, c-format
msgid "cannot start proxy %s"
msgstr "Kann Proxy %s nicht starten."
-#: connect.c:1024
+#: connect.c:1050
msgid "no path specified; see 'git help pull' for valid url syntax"
-msgstr ""
-"Kein Pfad angegeben; siehe 'git help pull' für eine gültige URL-Syntax."
+msgstr "kein Pfad angegeben; siehe 'git help pull' für eine gültige URL-Syntax"
-#: connect.c:1219
+#: connect.c:1190
+msgid "newline is forbidden in git:// hosts and repo paths"
+msgstr "Zeilenumbruch ist in git:// Hosts und Repository-Pfaden verboten"
+
+#: connect.c:1247
msgid "ssh variant 'simple' does not support -4"
-msgstr "SSH-Variante 'simple' unterstützt kein -4."
+msgstr "SSH-Variante 'simple' unterstützt kein -4"
-#: connect.c:1231
+#: connect.c:1259
msgid "ssh variant 'simple' does not support -6"
-msgstr "SSH-Variante 'simple' unterstützt kein -6."
+msgstr "SSH-Variante 'simple' unterstützt kein -6"
-#: connect.c:1248
+#: connect.c:1276
msgid "ssh variant 'simple' does not support setting port"
-msgstr "SSH-Variante 'simple' unterstützt nicht das Setzen eines Ports."
+msgstr "SSH-Variante 'simple' unterstützt nicht das Setzen eines Ports"
-#: connect.c:1360
+#: connect.c:1388
#, c-format
msgid "strange pathname '%s' blocked"
-msgstr "Merkwürdigen Pfadnamen '%s' blockiert."
+msgstr "Merkwürdigen Pfadnamen '%s' blockiert"
-#: connect.c:1408
+#: connect.c:1436
msgid "unable to fork"
-msgstr "Kann Prozess nicht starten."
+msgstr "kann Prozess nicht starten"
-#: connected.c:108 builtin/fsck.c:209 builtin/prune.c:45
+#: connected.c:108 builtin/fsck.c:191 builtin/prune.c:45
msgid "Checking connectivity"
msgstr "Prüfe Konnektivität"
@@ -2997,7 +3054,7 @@
#: convert.c:207
#, c-format
msgid "CRLF would be replaced by LF in %s"
-msgstr "CRLF würde in %s durch LF ersetzt werden."
+msgstr "CRLF würde in %s durch LF ersetzt werden"
#: convert.c:209
#, c-format
@@ -3012,7 +3069,7 @@
#: convert.c:217
#, c-format
msgid "LF would be replaced by CRLF in %s"
-msgstr "LF würde in %s durch CRLF ersetzt werden."
+msgstr "LF würde in %s durch CRLF ersetzt werden"
#: convert.c:219
#, c-format
@@ -3027,7 +3084,7 @@
#: convert.c:284
#, c-format
msgid "BOM is prohibited in '%s' if encoded as %s"
-msgstr "BOM ist in '%s' unzulässig, wenn als %s codiert."
+msgstr "BOM ist in '%s' unzulässig, wenn als %s codiert"
#: convert.c:291
#, c-format
@@ -3041,7 +3098,7 @@
#: convert.c:304
#, c-format
msgid "BOM is required in '%s' if encoded as %s"
-msgstr "BOM ist erforderlich in '%s', wenn als %s codiert."
+msgstr "BOM ist erforderlich in '%s', wenn als %s codiert"
#: convert.c:306
#, c-format
@@ -3056,45 +3113,45 @@
#: convert.c:419 convert.c:490
#, c-format
msgid "failed to encode '%s' from %s to %s"
-msgstr "Fehler beim Codieren von '%s' von %s nach %s."
+msgstr "Fehler beim Codieren von '%s' von %s nach %s"
#: convert.c:462
#, c-format
msgid "encoding '%s' from %s to %s and back is not the same"
-msgstr "Die Codierung '%s' von %s nach %s und zurück ist nicht dasselbe."
+msgstr "Codierung von '%s' von %s nach %s und zurück ist nicht dasselbe"
#: convert.c:665
#, c-format
msgid "cannot fork to run external filter '%s'"
-msgstr "Kann externen Filter '%s' nicht starten."
+msgstr "kann externen Filter '%s' nicht starten"
#: convert.c:685
#, c-format
msgid "cannot feed the input to external filter '%s'"
-msgstr "Kann Eingaben nicht an externen Filter '%s' übergeben."
+msgstr "kann Eingaben nicht an externen Filter '%s' übergeben"
#: convert.c:692
#, c-format
msgid "external filter '%s' failed %d"
-msgstr "Externer Filter '%s' fehlgeschlagen %d"
+msgstr "externer Filter '%s' fehlgeschlagen %d"
#: convert.c:727 convert.c:730
#, c-format
msgid "read from external filter '%s' failed"
-msgstr "Lesen von externem Filter '%s' fehlgeschlagen."
+msgstr "Lesen von externem Filter '%s' fehlgeschlagen"
#: convert.c:733 convert.c:788
#, c-format
msgid "external filter '%s' failed"
-msgstr "Externer Filter '%s' fehlgeschlagen."
+msgstr "externer Filter '%s' fehlgeschlagen"
#: convert.c:837
msgid "unexpected filter type"
-msgstr "Unerwartete Filterart."
+msgstr "unerwartete Filterart"
#: convert.c:848
msgid "path name too long for external filter"
-msgstr "Pfadname zu lang für externen Filter."
+msgstr "Pfadname zu lang für externen Filter"
#: convert.c:940
#, c-format
@@ -3102,21 +3159,22 @@
"external filter '%s' is not available anymore although not all paths have "
"been filtered"
msgstr ""
-"Externer Filter '%s' nicht mehr verfügbar. Nicht alle Pfade wurden gefiltert."
+"externer Filter '%s' nicht mehr verfügbar, obwohl nicht alle Pfade gefiltert "
+"wurden"
#: convert.c:1240
msgid "true/false are no valid working-tree-encodings"
-msgstr "true/false sind keine gültigen Codierungen im Arbeitsverzeichnis."
+msgstr "true/false sind keine gültigen Codierungen im Arbeitsverzeichnis"
#: convert.c:1428 convert.c:1462
#, c-format
msgid "%s: clean filter '%s' failed"
-msgstr "%s: clean-Filter '%s' fehlgeschlagen."
+msgstr "%s: clean-Filter '%s' fehlgeschlagen"
#: convert.c:1508
#, c-format
msgid "%s: smudge filter %s failed"
-msgstr "%s: smudge-Filter '%s' fehlgeschlagen."
+msgstr "%s: smudge-Filter '%s' fehlgeschlagen"
#: credential.c:96
#, c-format
@@ -3241,6 +3299,11 @@
msgid "Marked %d islands, done.\n"
msgstr "%d Delta-Islands markiert, fertig.\n"
+#: diff-merges.c:70
+#, c-format
+msgid "unknown value for --diff-merges: %s"
+msgstr "unbekannter Wert für --diff-merges: %s"
+
#: diff-lib.c:534
msgid "--merge-base does not work with ranges"
msgstr "--merge-base funktioniert nicht mit Bereichen"
@@ -3328,31 +3391,31 @@
msgid "external diff died, stopping at %s"
msgstr "externes Diff-Programm unerwartet beendet, angehalten bei %s"
-#: diff.c:4625
+#: diff.c:4628
msgid "--name-only, --name-status, --check and -s are mutually exclusive"
msgstr ""
"--name-only, --name-status, --check und -s schließen sich gegenseitig aus"
-#: diff.c:4628
+#: diff.c:4631
msgid "-G, -S and --find-object are mutually exclusive"
msgstr "-G, -S und --find-object schließen sich gegenseitig aus"
-#: diff.c:4707
+#: diff.c:4710
msgid "--follow requires exactly one pathspec"
msgstr "--follow erfordert genau eine Pfadspezifikation"
-#: diff.c:4755
+#: diff.c:4758
#, c-format
msgid "invalid --stat value: %s"
msgstr "Ungültiger --stat Wert: %s"
-#: diff.c:4760 diff.c:4765 diff.c:4770 diff.c:4775 diff.c:5303
+#: diff.c:4763 diff.c:4768 diff.c:4773 diff.c:4778 diff.c:5306
#: parse-options.c:197 parse-options.c:201 builtin/commit-graph.c:180
#, c-format
msgid "%s expects a numerical value"
msgstr "%s erwartet einen numerischen Wert."
-#: diff.c:4792
+#: diff.c:4795
#, c-format
msgid ""
"Failed to parse --dirstat/-X option parameter:\n"
@@ -3361,42 +3424,42 @@
"Fehler beim Parsen des --dirstat/-X Optionsparameters:\n"
"%s"
-#: diff.c:4877
+#: diff.c:4880
#, c-format
msgid "unknown change class '%c' in --diff-filter=%s"
msgstr "unbekannte Änderungsklasse '%c' in --diff-filter=%s"
-#: diff.c:4901
+#: diff.c:4904
#, c-format
msgid "unknown value after ws-error-highlight=%.*s"
msgstr "unbekannter Wert nach ws-error-highlight=%.*s"
-#: diff.c:4915
+#: diff.c:4918
#, c-format
msgid "unable to resolve '%s'"
msgstr "konnte '%s' nicht auflösen"
-#: diff.c:4965 diff.c:4971
+#: diff.c:4968 diff.c:4974
#, c-format
msgid "%s expects <n>/<m> form"
msgstr "%s erwartet die Form <n>/<m>"
-#: diff.c:4983
+#: diff.c:4986
#, c-format
msgid "%s expects a character, got '%s'"
msgstr "%s erwartet ein Zeichen, '%s' bekommen"
-#: diff.c:5004
+#: diff.c:5007
#, c-format
msgid "bad --color-moved argument: %s"
msgstr "ungültiges --color-moved Argument: %s"
-#: diff.c:5023
+#: diff.c:5026
#, c-format
msgid "invalid mode '%s' in --color-moved-ws"
msgstr "ungültiger Modus '%s' in --color-moved-ws"
-#: diff.c:5063
+#: diff.c:5066
msgid ""
"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
"\"histogram\""
@@ -3404,157 +3467,157 @@
"Option diff-algorithm akzeptiert: \"myers\", \"minimal\", \"patience\" and "
"\"histogram\""
-#: diff.c:5099 diff.c:5119
+#: diff.c:5102 diff.c:5122
#, c-format
msgid "invalid argument to %s"
msgstr "ungültiges Argument für %s"
-#: diff.c:5223
+#: diff.c:5226
#, c-format
msgid "invalid regex given to -I: '%s'"
msgstr "ungültiger regulärer Ausdruck für -I gegeben: '%s'"
-#: diff.c:5272
+#: diff.c:5275
#, c-format
msgid "failed to parse --submodule option parameter: '%s'"
msgstr "Fehler beim Parsen des --submodule Optionsparameters: '%s'"
-#: diff.c:5328
+#: diff.c:5331
#, c-format
msgid "bad --word-diff argument: %s"
msgstr "ungültiges --word-diff Argument: %s"
-#: diff.c:5351
+#: diff.c:5367
msgid "Diff output format options"
msgstr "Diff-Optionen zu Ausgabeformaten"
-#: diff.c:5353 diff.c:5359
+#: diff.c:5369 diff.c:5375
msgid "generate patch"
msgstr "Patch erzeugen"
-#: diff.c:5356 builtin/log.c:178
+#: diff.c:5372 builtin/log.c:179
msgid "suppress diff output"
msgstr "Ausgabe der Unterschiede unterdrücken"
-#: diff.c:5361 diff.c:5475 diff.c:5482
+#: diff.c:5377 diff.c:5491 diff.c:5498
msgid "<n>"
msgstr "<n>"
-#: diff.c:5362 diff.c:5365
+#: diff.c:5378 diff.c:5381
msgid "generate diffs with <n> lines context"
msgstr "Unterschiede mit <n> Zeilen des Kontextes erstellen"
-#: diff.c:5367
+#: diff.c:5383
msgid "generate the diff in raw format"
msgstr "Unterschiede im Rohformat erstellen"
-#: diff.c:5370
+#: diff.c:5386
msgid "synonym for '-p --raw'"
msgstr "Synonym für '-p --raw'"
-#: diff.c:5374
+#: diff.c:5390
msgid "synonym for '-p --stat'"
msgstr "Synonym für '-p --stat'"
-#: diff.c:5378
+#: diff.c:5394
msgid "machine friendly --stat"
msgstr "maschinenlesbare Ausgabe von --stat"
-#: diff.c:5381
+#: diff.c:5397
msgid "output only the last line of --stat"
msgstr "nur die letzte Zeile von --stat ausgeben"
-#: diff.c:5383 diff.c:5391
+#: diff.c:5399 diff.c:5407
msgid "<param1,param2>..."
msgstr "<Parameter1,Parameter2>..."
-#: diff.c:5384
+#: diff.c:5400
msgid ""
"output the distribution of relative amount of changes for each sub-directory"
msgstr ""
"die Verteilung des relativen Umfangs der Änderungen für jedes "
"Unterverzeichnis ausgeben"
-#: diff.c:5388
+#: diff.c:5404
msgid "synonym for --dirstat=cumulative"
msgstr "Synonym für --dirstat=cumulative"
-#: diff.c:5392
+#: diff.c:5408
msgid "synonym for --dirstat=files,param1,param2..."
msgstr "Synonym für --dirstat=files,Parameter1,Parameter2..."
-#: diff.c:5396
+#: diff.c:5412
msgid "warn if changes introduce conflict markers or whitespace errors"
msgstr ""
"warnen, wenn Änderungen Konfliktmarker oder Whitespace-Fehler einbringen"
-#: diff.c:5399
+#: diff.c:5415
msgid "condensed summary such as creations, renames and mode changes"
msgstr ""
"gekürzte Zusammenfassung, wie z.B. Erstellungen, Umbenennungen und "
"Änderungen der Datei-Rechte"
-#: diff.c:5402
+#: diff.c:5418
msgid "show only names of changed files"
msgstr "nur Dateinamen der geänderten Dateien anzeigen"
-#: diff.c:5405
+#: diff.c:5421
msgid "show only names and status of changed files"
msgstr "nur Dateinamen und Status der geänderten Dateien anzeigen"
-#: diff.c:5407
+#: diff.c:5423
msgid "<width>[,<name-width>[,<count>]]"
msgstr "<Breite>[,<Namens-Breite>[,<Anzahl>]]"
-#: diff.c:5408
+#: diff.c:5424
msgid "generate diffstat"
msgstr "Zusammenfassung der Unterschiede erzeugen"
-#: diff.c:5410 diff.c:5413 diff.c:5416
+#: diff.c:5426 diff.c:5429 diff.c:5432
msgid "<width>"
msgstr "<Breite>"
-#: diff.c:5411
+#: diff.c:5427
msgid "generate diffstat with a given width"
msgstr "Zusammenfassung der Unterschiede mit gegebener Breite erzeugen"
-#: diff.c:5414
+#: diff.c:5430
msgid "generate diffstat with a given name width"
msgstr "Zusammenfassung der Unterschiede mit gegebener Namens-Breite erzeugen"
-#: diff.c:5417
+#: diff.c:5433
msgid "generate diffstat with a given graph width"
msgstr "Zusammenfassung der Unterschiede mit gegebener Graph-Breite erzeugen"
-#: diff.c:5419
+#: diff.c:5435
msgid "<count>"
msgstr "<Anzahl>"
-#: diff.c:5420
+#: diff.c:5436
msgid "generate diffstat with limited lines"
msgstr "Zusammenfassung der Unterschiede mit begrenzten Zeilen erzeugen"
-#: diff.c:5423
+#: diff.c:5439
msgid "generate compact summary in diffstat"
msgstr "kompakte Zusammenstellung in Zusammenfassung der Unterschiede erzeugen"
-#: diff.c:5426
+#: diff.c:5442
msgid "output a binary diff that can be applied"
msgstr "eine binäre Differenz ausgeben, dass angewendet werden kann"
-#: diff.c:5429
+#: diff.c:5445
msgid "show full pre- and post-image object names on the \"index\" lines"
msgstr "vollständige Objekt-Namen in den \"index\"-Zeilen anzeigen"
-#: diff.c:5431
+#: diff.c:5447
msgid "show colored diff"
msgstr "farbige Unterschiede anzeigen"
-#: diff.c:5432
+#: diff.c:5448
msgid "<kind>"
msgstr "<Art>"
-#: diff.c:5433
+#: diff.c:5449
msgid ""
"highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
"diff"
@@ -3562,7 +3625,7 @@
"Whitespace-Fehler in den Zeilen 'context', 'old' oder 'new' bei den "
"Unterschieden hervorheben"
-#: diff.c:5436
+#: diff.c:5452
msgid ""
"do not munge pathnames and use NULs as output field terminators in --raw or "
"--numstat"
@@ -3570,91 +3633,91 @@
"die Pfadnamen nicht verschleiern und NUL-Zeichen als Schlusszeichen in "
"Ausgabefeldern bei --raw oder --numstat nutzen"
-#: diff.c:5439 diff.c:5442 diff.c:5445 diff.c:5554
+#: diff.c:5455 diff.c:5458 diff.c:5461 diff.c:5570
msgid "<prefix>"
msgstr "<Präfix>"
-#: diff.c:5440
+#: diff.c:5456
msgid "show the given source prefix instead of \"a/\""
msgstr "den gegebenen Quell-Präfix statt \"a/\" anzeigen"
-#: diff.c:5443
+#: diff.c:5459
msgid "show the given destination prefix instead of \"b/\""
msgstr "den gegebenen Ziel-Präfix statt \"b/\" anzeigen"
-#: diff.c:5446
+#: diff.c:5462
msgid "prepend an additional prefix to every line of output"
msgstr "einen zusätzlichen Präfix bei jeder Ausgabezeile voranstellen"
-#: diff.c:5449
+#: diff.c:5465
msgid "do not show any source or destination prefix"
msgstr "keine Quell- oder Ziel-Präfixe anzeigen"
-#: diff.c:5452
+#: diff.c:5468
msgid "show context between diff hunks up to the specified number of lines"
msgstr ""
"Kontext zwischen Unterschied-Blöcken bis zur angegebenen Anzahl von Zeilen "
"anzeigen"
-#: diff.c:5456 diff.c:5461 diff.c:5466
+#: diff.c:5472 diff.c:5477 diff.c:5482
msgid "<char>"
msgstr "<Zeichen>"
-#: diff.c:5457
+#: diff.c:5473
msgid "specify the character to indicate a new line instead of '+'"
msgstr "das Zeichen festlegen, das eine neue Zeile kennzeichnet (statt '+')"
-#: diff.c:5462
+#: diff.c:5478
msgid "specify the character to indicate an old line instead of '-'"
msgstr "das Zeichen festlegen, das eine alte Zeile kennzeichnet (statt '-')"
-#: diff.c:5467
+#: diff.c:5483
msgid "specify the character to indicate a context instead of ' '"
msgstr "das Zeichen festlegen, das den Kontext kennzeichnet (statt ' ')"
-#: diff.c:5470
+#: diff.c:5486
msgid "Diff rename options"
msgstr "Diff-Optionen zur Umbenennung"
-#: diff.c:5471
+#: diff.c:5487
msgid "<n>[/<m>]"
msgstr "<n>[/<m>]"
-#: diff.c:5472
+#: diff.c:5488
msgid "break complete rewrite changes into pairs of delete and create"
msgstr ""
"teile komplette Rewrite-Änderungen in Änderungen mit \"löschen\" und "
"\"erstellen\""
-#: diff.c:5476
+#: diff.c:5492
msgid "detect renames"
msgstr "Umbenennungen erkennen"
-#: diff.c:5480
+#: diff.c:5496
msgid "omit the preimage for deletes"
msgstr "Preimage für Löschungen weglassen"
-#: diff.c:5483
+#: diff.c:5499
msgid "detect copies"
msgstr "Kopien erkennen"
-#: diff.c:5487
+#: diff.c:5503
msgid "use unmodified files as source to find copies"
msgstr "ungeänderte Dateien als Quelle zum Finden von Kopien nutzen"
-#: diff.c:5489
+#: diff.c:5505
msgid "disable rename detection"
msgstr "Erkennung von Umbenennungen deaktivieren"
-#: diff.c:5492
+#: diff.c:5508
msgid "use empty blobs as rename source"
msgstr "leere Blobs als Quelle von Umbenennungen nutzen"
-#: diff.c:5494
+#: diff.c:5510
msgid "continue listing the history of a file beyond renames"
msgstr "Auflistung der Historie einer Datei nach Umbenennung fortführen"
-#: diff.c:5497
+#: diff.c:5513
msgid ""
"prevent rename/copy detection if the number of rename/copy targets exceeds "
"given limit"
@@ -3662,164 +3725,164 @@
"Erkennung von Umbenennungen und Kopien verhindern, wenn die Anzahl der Ziele "
"für Umbenennungen und Kopien das gegebene Limit überschreitet"
-#: diff.c:5499
+#: diff.c:5515
msgid "Diff algorithm options"
msgstr "Diff Algorithmus-Optionen"
-#: diff.c:5501
+#: diff.c:5517
msgid "produce the smallest possible diff"
msgstr "die kleinstmöglichen Änderungen erzeugen"
-#: diff.c:5504
+#: diff.c:5520
msgid "ignore whitespace when comparing lines"
msgstr "Whitespace-Änderungen beim Vergleich von Zeilen ignorieren"
-#: diff.c:5507
+#: diff.c:5523
msgid "ignore changes in amount of whitespace"
msgstr "Änderungen bei der Anzahl von Whitespace ignorieren"
-#: diff.c:5510
+#: diff.c:5526
msgid "ignore changes in whitespace at EOL"
msgstr "Whitespace-Änderungen am Zeilenende ignorieren"
-#: diff.c:5513
+#: diff.c:5529
msgid "ignore carrier-return at the end of line"
msgstr "den Zeilenumbruch am Ende der Zeile ignorieren"
-#: diff.c:5516
+#: diff.c:5532
msgid "ignore changes whose lines are all blank"
msgstr "Änderungen in leeren Zeilen ignorieren"
-#: diff.c:5518 diff.c:5540 diff.c:5543 diff.c:5588
+#: diff.c:5534 diff.c:5556 diff.c:5559 diff.c:5604
msgid "<regex>"
msgstr "<Regex>"
-#: diff.c:5519
+#: diff.c:5535
msgid "ignore changes whose all lines match <regex>"
msgstr ""
"Änderungen ignorieren, bei denen alle Zeilen mit <Regex> übereinstimmen"
-#: diff.c:5522
+#: diff.c:5538
msgid "heuristic to shift diff hunk boundaries for easy reading"
msgstr ""
"Heuristik, um Grenzen der Änderungsblöcke für bessere Lesbarkeit zu "
"verschieben"
-#: diff.c:5525
+#: diff.c:5541
msgid "generate diff using the \"patience diff\" algorithm"
msgstr "Änderungen durch Nutzung des Algorithmus \"Patience Diff\" erzeugen"
-#: diff.c:5529
+#: diff.c:5545
msgid "generate diff using the \"histogram diff\" algorithm"
msgstr "Änderungen durch Nutzung des Algorithmus \"Histogram Diff\" erzeugen"
-#: diff.c:5531
+#: diff.c:5547
msgid "<algorithm>"
msgstr "<Algorithmus>"
-#: diff.c:5532
+#: diff.c:5548
msgid "choose a diff algorithm"
msgstr "einen Algorithmus für Änderungen wählen"
-#: diff.c:5534
+#: diff.c:5550
msgid "<text>"
msgstr "<Text>"
-#: diff.c:5535
+#: diff.c:5551
msgid "generate diff using the \"anchored diff\" algorithm"
msgstr "Änderungen durch Nutzung des Algorithmus \"Anchored Diff\" erzeugen"
-#: diff.c:5537 diff.c:5546 diff.c:5549
+#: diff.c:5553 diff.c:5562 diff.c:5565
msgid "<mode>"
msgstr "<Modus>"
-#: diff.c:5538
+#: diff.c:5554
msgid "show word diff, using <mode> to delimit changed words"
msgstr "Wort-Änderungen zeigen, nutze <Modus>, um Wörter abzugrenzen"
-#: diff.c:5541
+#: diff.c:5557
msgid "use <regex> to decide what a word is"
msgstr "<Regex> nutzen, um zu entscheiden, was ein Wort ist"
-#: diff.c:5544
+#: diff.c:5560
msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
msgstr "entsprechend wie --word-diff=color --word-diff-regex=<Regex>"
-#: diff.c:5547
+#: diff.c:5563
msgid "moved lines of code are colored differently"
msgstr "verschobene Codezeilen sind andersfarbig"
-#: diff.c:5550
+#: diff.c:5566
msgid "how white spaces are ignored in --color-moved"
msgstr "wie Whitespaces in --color-moved ignoriert werden"
-#: diff.c:5553
+#: diff.c:5569
msgid "Other diff options"
msgstr "Andere Diff-Optionen"
-#: diff.c:5555
+#: diff.c:5571
msgid "when run from subdir, exclude changes outside and show relative paths"
msgstr ""
"wenn vom Unterverzeichnis aufgerufen, schließe Änderungen außerhalb aus und "
"zeige relative Pfade an"
-#: diff.c:5559
+#: diff.c:5575
msgid "treat all files as text"
msgstr "alle Dateien als Text behandeln"
-#: diff.c:5561
+#: diff.c:5577
msgid "swap two inputs, reverse the diff"
msgstr "die beiden Eingaben vertauschen und die Änderungen umkehren"
-#: diff.c:5563
+#: diff.c:5579
msgid "exit with 1 if there were differences, 0 otherwise"
msgstr ""
"mit Exit-Status 1 beenden, wenn Änderungen vorhanden sind, andernfalls mit 0"
-#: diff.c:5565
+#: diff.c:5581
msgid "disable all output of the program"
msgstr "alle Ausgaben vom Programm deaktivieren"
-#: diff.c:5567
+#: diff.c:5583
msgid "allow an external diff helper to be executed"
msgstr "erlaube die Ausführung eines externes Programms für Änderungen"
-#: diff.c:5569
+#: diff.c:5585
msgid "run external text conversion filters when comparing binary files"
msgstr ""
"Führe externe Text-Konvertierungsfilter aus, wenn binäre Dateien vergleicht "
"werden"
-#: diff.c:5571
+#: diff.c:5587
msgid "<when>"
msgstr "<wann>"
-#: diff.c:5572
+#: diff.c:5588
msgid "ignore changes to submodules in the diff generation"
msgstr ""
"Änderungen in Submodulen während der Erstellung der Unterschiede ignorieren"
-#: diff.c:5575
+#: diff.c:5591
msgid "<format>"
msgstr "<Format>"
-#: diff.c:5576
+#: diff.c:5592
msgid "specify how differences in submodules are shown"
msgstr "angeben, wie Unterschiede in Submodulen gezeigt werden"
-#: diff.c:5580
+#: diff.c:5596
msgid "hide 'git add -N' entries from the index"
msgstr "'git add -N' Einträge vom Index verstecken"
-#: diff.c:5583
+#: diff.c:5599
msgid "treat 'git add -N' entries as real in the index"
msgstr "'git add -N' Einträge im Index als echt behandeln"
-#: diff.c:5585
+#: diff.c:5601
msgid "<string>"
msgstr "<Zeichenkette>"
-#: diff.c:5586
+#: diff.c:5602
msgid ""
"look for differences that change the number of occurrences of the specified "
"string"
@@ -3827,7 +3890,7 @@
"nach Unterschieden suchen, welche die Anzahl des Vorkommens der angegebenen "
"Zeichenkette verändern"
-#: diff.c:5589
+#: diff.c:5605
msgid ""
"look for differences that change the number of occurrences of the specified "
"regex"
@@ -3835,25 +3898,37 @@
"nach Unterschieden suchen, welche die Anzahl des Vorkommens des angegebenen "
"regulären Ausdrucks verändern"
-#: diff.c:5592
+#: diff.c:5608
msgid "show all changes in the changeset with -S or -G"
msgstr "alle Änderungen im Changeset mit -S oder -G anzeigen"
-#: diff.c:5595
+#: diff.c:5611
msgid "treat <string> in -S as extended POSIX regular expression"
msgstr ""
"<Zeichenkette> bei -S als erweiterten POSIX regulären Ausdruck behandeln"
-#: diff.c:5598
+#: diff.c:5614
msgid "control the order in which files appear in the output"
msgstr ""
"die Reihenfolge kontrollieren, in der die Dateien in der Ausgabe erscheinen"
-#: diff.c:5599
+#: diff.c:5615 diff.c:5618
+msgid "<path>"
+msgstr "<Pfad>"
+
+#: diff.c:5616
+msgid "show the change in the specified path first"
+msgstr "die Änderung des angegebenen Pfades zuerst anzeigen"
+
+#: diff.c:5619
+msgid "skip the output to the specified path"
+msgstr "überspringe die Ausgabe bis zum angegebenen Pfad"
+
+#: diff.c:5621
msgid "<object-id>"
msgstr "<Objekt-ID>"
-#: diff.c:5600
+#: diff.c:5622
msgid ""
"look for differences that change the number of occurrences of the specified "
"object"
@@ -3861,33 +3936,33 @@
"nach Unterschieden suchen, welche die Anzahl des Vorkommens des angegebenen "
"Objektes verändern"
-#: diff.c:5602
+#: diff.c:5624
msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
-#: diff.c:5603
+#: diff.c:5625
msgid "select files by diff type"
msgstr "Dateien anhand der Art der Änderung wählen"
-#: diff.c:5605
+#: diff.c:5627
msgid "<file>"
msgstr "<Datei>"
-#: diff.c:5606
+#: diff.c:5628
msgid "Output to a specific file"
msgstr "Ausgabe zu einer bestimmten Datei"
-#: diff.c:6263
+#: diff.c:6285
msgid "inexact rename detection was skipped due to too many files."
msgstr ""
"ungenaue Erkennung für Umbenennungen wurde aufgrund zu vieler Dateien\n"
"übersprungen."
-#: diff.c:6266
+#: diff.c:6288
msgid "only found copies from modified paths due to too many files."
msgstr "nur Kopien von geänderten Pfaden, aufgrund zu vieler Dateien, gefunden"
-#: diff.c:6269
+#: diff.c:6291
#, c-format
msgid ""
"you may want to set your %s variable to at least %d and retry the command."
@@ -3900,10 +3975,15 @@
msgid "failed to read orderfile '%s'"
msgstr "Fehler beim Lesen der Reihenfolgedatei '%s'"
-#: diffcore-rename.c:592
+#: diffcore-rename.c:786
msgid "Performing inexact rename detection"
msgstr "Führe Erkennung für ungenaue Umbenennung aus"
+#: diffcore-rotate.c:29
+#, c-format
+msgid "No such path '%s' in the diff"
+msgstr "Pfad '%s' nicht im Diff gefunden"
+
#: dir.c:578
#, c-format
msgid "pathspec '%s' did not match any file(s) known to git"
@@ -3950,17 +4030,17 @@
"Cache für unversionierte Dateien ist auf diesem System oder\n"
"für dieses Verzeichnis deaktiviert"
-#: dir.c:3520
+#: dir.c:3534
#, c-format
msgid "index file corrupt in repo %s"
msgstr "Index-Datei in Repository %s beschädigt"
-#: dir.c:3565 dir.c:3570
+#: dir.c:3579 dir.c:3584
#, c-format
msgid "could not create directories for %s"
msgstr "Konnte Verzeichnisse für '%s' nicht erstellen"
-#: dir.c:3599
+#: dir.c:3613
#, c-format
msgid "could not migrate git directory from '%s' to '%s'"
msgstr "Konnte Git-Verzeichnis nicht von '%s' nach '%s' migrieren"
@@ -3979,12 +4059,12 @@
msgid "could not stat file '%s'"
msgstr "konnte Datei '%s' nicht lesen"
-#: environment.c:150
+#: environment.c:152
#, c-format
msgid "bad git namespace path \"%s\""
msgstr "ungültiger Git-Namespace-Pfad \"%s\""
-#: environment.c:337
+#: environment.c:335
#, c-format
msgid "could not set GIT_DIR to '%s'"
msgstr "konnte GIT_DIR nicht zu '%s' setzen"
@@ -4019,32 +4099,32 @@
msgid "--stateless-rpc requires multi_ack_detailed"
msgstr "--stateless-rpc benötigt multi_ack_detailed"
-#: fetch-pack.c:378 fetch-pack.c:1406
+#: fetch-pack.c:378 fetch-pack.c:1457
#, c-format
msgid "invalid shallow line: %s"
msgstr "ungültige shallow-Zeile: %s"
-#: fetch-pack.c:384 fetch-pack.c:1412
+#: fetch-pack.c:384 fetch-pack.c:1463
#, c-format
msgid "invalid unshallow line: %s"
msgstr "ungültige unshallow-Zeile: %s"
-#: fetch-pack.c:386 fetch-pack.c:1414
+#: fetch-pack.c:386 fetch-pack.c:1465
#, c-format
msgid "object not found: %s"
msgstr "Objekt nicht gefunden: %s"
-#: fetch-pack.c:389 fetch-pack.c:1417
+#: fetch-pack.c:389 fetch-pack.c:1468
#, c-format
msgid "error in object: %s"
msgstr "Fehler in Objekt: %s"
-#: fetch-pack.c:391 fetch-pack.c:1419
+#: fetch-pack.c:391 fetch-pack.c:1470
#, c-format
msgid "no shallow found: %s"
msgstr "kein shallow-Objekt gefunden: %s"
-#: fetch-pack.c:394 fetch-pack.c:1423
+#: fetch-pack.c:394 fetch-pack.c:1474
#, c-format
msgid "expected shallow/unshallow, got %s"
msgstr "shallow/unshallow erwartet, %s bekommen"
@@ -4082,171 +4162,175 @@
msgid "already have %s (%s)"
msgstr "habe %s (%s) bereits"
-#: fetch-pack.c:827
+#: fetch-pack.c:844
msgid "fetch-pack: unable to fork off sideband demultiplexer"
msgstr "fetch-pack: Fehler beim Starten des sideband demultiplexer"
-#: fetch-pack.c:835
+#: fetch-pack.c:852
msgid "protocol error: bad pack header"
msgstr "Protokollfehler: ungültiger Pack-Header"
-#: fetch-pack.c:919
+#: fetch-pack.c:946
#, c-format
msgid "fetch-pack: unable to fork off %s"
msgstr "fetch-pack: konnte %s nicht starten"
-#: fetch-pack.c:937
+#: fetch-pack.c:952
+msgid "fetch-pack: invalid index-pack output"
+msgstr "fetch-pack: ungültige index-pack Ausgabe"
+
+#: fetch-pack.c:969
#, c-format
msgid "%s failed"
msgstr "%s fehlgeschlagen"
-#: fetch-pack.c:939
+#: fetch-pack.c:971
msgid "error in sideband demultiplexer"
msgstr "Fehler in sideband demultiplexer"
-#: fetch-pack.c:982
+#: fetch-pack.c:1031
#, c-format
msgid "Server version is %.*s"
msgstr "Server-Version ist %.*s"
-#: fetch-pack.c:990 fetch-pack.c:996 fetch-pack.c:999 fetch-pack.c:1005
-#: fetch-pack.c:1009 fetch-pack.c:1013 fetch-pack.c:1017 fetch-pack.c:1021
-#: fetch-pack.c:1025 fetch-pack.c:1029 fetch-pack.c:1033 fetch-pack.c:1037
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1054 fetch-pack.c:1059
+#: fetch-pack.c:1039 fetch-pack.c:1045 fetch-pack.c:1048 fetch-pack.c:1054
+#: fetch-pack.c:1058 fetch-pack.c:1062 fetch-pack.c:1066 fetch-pack.c:1070
+#: fetch-pack.c:1074 fetch-pack.c:1078 fetch-pack.c:1082 fetch-pack.c:1086
+#: fetch-pack.c:1092 fetch-pack.c:1098 fetch-pack.c:1103 fetch-pack.c:1108
#, c-format
msgid "Server supports %s"
msgstr "Server unterstützt %s"
-#: fetch-pack.c:992
+#: fetch-pack.c:1041
msgid "Server does not support shallow clients"
msgstr "Server unterstützt keine shallow-Clients"
-#: fetch-pack.c:1052
+#: fetch-pack.c:1101
msgid "Server does not support --shallow-since"
msgstr "Server unterstützt kein --shallow-since"
-#: fetch-pack.c:1057
+#: fetch-pack.c:1106
msgid "Server does not support --shallow-exclude"
msgstr "Server unterstützt kein --shallow-exclude"
-#: fetch-pack.c:1061
+#: fetch-pack.c:1110
msgid "Server does not support --deepen"
msgstr "Server unterstützt kein --deepen"
-#: fetch-pack.c:1063
+#: fetch-pack.c:1112
msgid "Server does not support this repository's object format"
msgstr "Server unterstützt das Objekt-Format dieses Repositories nicht"
-#: fetch-pack.c:1076
+#: fetch-pack.c:1125
msgid "no common commits"
msgstr "keine gemeinsamen Commits"
-#: fetch-pack.c:1088 fetch-pack.c:1628
+#: fetch-pack.c:1138 fetch-pack.c:1682
msgid "git fetch-pack: fetch failed."
msgstr "git fetch-pack: Abholen fehlgeschlagen."
-#: fetch-pack.c:1214
+#: fetch-pack.c:1265
#, c-format
msgid "mismatched algorithms: client %s; server %s"
msgstr "Algorithmen stimmen nicht überein: Client %s; Server %s"
-#: fetch-pack.c:1218
+#: fetch-pack.c:1269
#, c-format
msgid "the server does not support algorithm '%s'"
msgstr "der Server unterstützt Algorithmus '%s' nicht"
-#: fetch-pack.c:1238
+#: fetch-pack.c:1289
msgid "Server does not support shallow requests"
msgstr "Server unterstützt keine shallow-Anfragen"
-#: fetch-pack.c:1245
+#: fetch-pack.c:1296
msgid "Server supports filter"
msgstr "Server unterstützt Filter"
-#: fetch-pack.c:1284
+#: fetch-pack.c:1335
msgid "unable to write request to remote"
msgstr "konnte Anfrage nicht zum Remote schreiben"
-#: fetch-pack.c:1302
+#: fetch-pack.c:1353
#, c-format
msgid "error reading section header '%s'"
msgstr "Fehler beim Lesen von Sektionskopf '%s'."
-#: fetch-pack.c:1308
+#: fetch-pack.c:1359
#, c-format
msgid "expected '%s', received '%s'"
msgstr "'%s' erwartet, '%s' empfangen"
-#: fetch-pack.c:1369
+#: fetch-pack.c:1420
#, c-format
msgid "unexpected acknowledgment line: '%s'"
msgstr "Unerwartete Acknowledgment-Zeile: '%s'"
-#: fetch-pack.c:1374
+#: fetch-pack.c:1425
#, c-format
msgid "error processing acks: %d"
msgstr "Fehler beim Verarbeiten von ACKS: %d"
-#: fetch-pack.c:1384
+#: fetch-pack.c:1435
msgid "expected packfile to be sent after 'ready'"
msgstr "Erwartete Versand einer Packdatei nach 'ready'."
-#: fetch-pack.c:1386
+#: fetch-pack.c:1437
msgid "expected no other sections to be sent after no 'ready'"
msgstr "Erwartete keinen Versand einer anderen Sektion ohne 'ready'."
-#: fetch-pack.c:1428
+#: fetch-pack.c:1479
#, c-format
msgid "error processing shallow info: %d"
msgstr "Fehler beim Verarbeiten von Shallow-Informationen: %d"
-#: fetch-pack.c:1475
+#: fetch-pack.c:1526
#, c-format
msgid "expected wanted-ref, got '%s'"
msgstr "wanted-ref erwartet, '%s' bekommen"
-#: fetch-pack.c:1480
+#: fetch-pack.c:1531
#, c-format
msgid "unexpected wanted-ref: '%s'"
msgstr "unerwartetes wanted-ref: '%s'"
-#: fetch-pack.c:1485
+#: fetch-pack.c:1536
#, c-format
msgid "error processing wanted refs: %d"
msgstr "Fehler beim Verarbeiten von wanted-refs: %d"
-#: fetch-pack.c:1515
+#: fetch-pack.c:1566
msgid "git fetch-pack: expected response end packet"
msgstr "git fetch-pack: Antwort-Endpaket erwartet"
-#: fetch-pack.c:1897
+#: fetch-pack.c:1960
msgid "no matching remote head"
msgstr "kein übereinstimmender Remote-Branch"
-#: fetch-pack.c:1920 builtin/clone.c:693
+#: fetch-pack.c:1983 builtin/clone.c:693
msgid "remote did not send all necessary objects"
msgstr "Remote-Repository hat nicht alle erforderlichen Objekte gesendet"
-#: fetch-pack.c:1947
+#: fetch-pack.c:2010
#, c-format
msgid "no such remote ref %s"
-msgstr "keine solche Remote-Referenz %s"
+msgstr "Remote-Referenz %s nicht gefunden"
-#: fetch-pack.c:1950
+#: fetch-pack.c:2013
#, c-format
msgid "Server does not allow request for unadvertised object %s"
msgstr "Der Server lehnt Anfrage nach nicht angebotenem Objekt %s ab."
-#: gpg-interface.c:272
+#: gpg-interface.c:273
msgid "could not create temporary file"
msgstr "konnte temporäre Datei nicht erstellen"
-#: gpg-interface.c:275
+#: gpg-interface.c:276
#, c-format
msgid "failed writing detached signature to '%s'"
msgstr "Fehler beim Schreiben der losgelösten Signatur nach '%s'"
-#: gpg-interface.c:457
+#: gpg-interface.c:470
msgid "gpg failed to sign the data"
msgstr "gpg beim Signieren der Daten fehlgeschlagen"
@@ -4255,7 +4339,7 @@
msgid "ignore invalid color '%.*s' in log.graphColors"
msgstr "Ignoriere ungültige Farbe '%.*s' in log.graphColors"
-#: grep.c:640
+#: grep.c:543
msgid ""
"given pattern contains NULL byte (via -f <file>). This is only supported "
"with -P under PCRE v2"
@@ -4263,18 +4347,18 @@
"Angegebenes Muster enthält NULL Byte (über -f <Datei>). Das wird nur mit -"
"Punter PCRE v2 unterstützt."
-#: grep.c:2100
+#: grep.c:1906
#, c-format
msgid "'%s': unable to read %s"
msgstr "'%s': konnte %s nicht lesen"
-#: grep.c:2117 setup.c:176 builtin/clone.c:412 builtin/diff.c:89
+#: grep.c:1923 setup.c:176 builtin/clone.c:412 builtin/diff.c:90
#: builtin/rm.c:135
#, c-format
msgid "failed to stat '%s'"
msgstr "Konnte '%s' nicht lesen"
-#: grep.c:2128
+#: grep.c:1934
#, c-format
msgid "'%s': short read"
msgstr "'%s': read() zu kurz"
@@ -4344,7 +4428,7 @@
msgid "These are common Git commands used in various situations:"
msgstr "Allgemeine Git-Befehle, verwendet in verschiedenen Situationen:"
-#: help.c:365 git.c:99
+#: help.c:365 git.c:100
#, c-format
msgid "unsupported command listing type '%s'"
msgstr "Nicht unterstützte Art zur Befehlsauflistung '%s'."
@@ -4588,11 +4672,255 @@
msgid "Unable to create '%s.lock': %s"
msgstr "Konnte '%s.lock' nicht erstellen: %s"
-#: ls-refs.c:109
+#: ls-refs.c:37
+#, c-format
+msgid "invalid value '%s' for lsrefs.unborn"
+msgstr "ungültiger Wert '%s' für lsrefs.unborn"
+
+#: ls-refs.c:167
msgid "expected flush after ls-refs arguments"
msgstr "erwartete Flush nach Argumenten für die Auflistung der Referenzen"
-#: merge-ort-wrappers.c:13 merge-recursive.c:3672
+#: merge-ort.c:888 merge-recursive.c:1191
+#, c-format
+msgid "Failed to merge submodule %s (not checked out)"
+msgstr "Fehler beim Merge von Submodul %s (nicht ausgecheckt)."
+
+#: merge-ort.c:897 merge-recursive.c:1198
+#, c-format
+msgid "Failed to merge submodule %s (commits not present)"
+msgstr "Fehler beim Merge von Submodul %s (Commits nicht vorhanden)."
+
+#: merge-ort.c:906 merge-recursive.c:1205
+#, c-format
+msgid "Failed to merge submodule %s (commits don't follow merge-base)"
+msgstr "Fehler beim Merge von Submodul %s (Commits folgen keiner Merge-Basis)"
+
+#: merge-ort.c:916 merge-ort.c:923
+#, c-format
+msgid "Note: Fast-forwarding submodule %s to %s"
+msgstr "Hinweis: Spule Submodul %s vor zu %s"
+
+#: merge-ort.c:944
+#, c-format
+msgid "Failed to merge submodule %s"
+msgstr "Fehler beim Zusammenführen von Submodul %s"
+
+#: merge-ort.c:951
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but a possible merge resolution exists:\n"
+"%s\n"
+msgstr ""
+"Fehler beim Zusammenführen von Submodul %s, aber es ist eine mögliche "
+"Auflösung des Merges vorhanden:\n"
+"%s\n"
+
+#: merge-ort.c:955 merge-recursive.c:1259
+#, c-format
+msgid ""
+"If this is correct simply add it to the index for example\n"
+"by using:\n"
+"\n"
+" git update-index --cacheinfo 160000 %s \"%s\"\n"
+"\n"
+"which will accept this suggestion.\n"
+msgstr ""
+"Falls das korrekt ist, fügen Sie es einfach der Staging-Area, zum Beispiel "
+"mit:\n"
+"\n"
+" git update-index --cacheinfo 160000 %s \"%s\"\n"
+"\n"
+"hinzu, um diesen Vorschlag zu akzeptieren.\n"
+
+#: merge-ort.c:968
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but multiple possible merges exist:\n"
+"%s"
+msgstr ""
+"Fehler beim Zusammenführen von Submodul %s, aber mehrere mögliche Merges "
+"sind vorhanden:\n"
+"%s"
+
+#: merge-ort.c:1127 merge-recursive.c:1341
+msgid "Failed to execute internal merge"
+msgstr "Fehler bei Ausführung des internen Merges"
+
+#: merge-ort.c:1132 merge-recursive.c:1346
+#, c-format
+msgid "Unable to add %s to database"
+msgstr "Konnte %s nicht zur Datenbank hinzufügen"
+
+#: merge-ort.c:1139 merge-recursive.c:1378
+#, c-format
+msgid "Auto-merging %s"
+msgstr "automatischer Merge von %s"
+
+#: merge-ort.c:1278 merge-recursive.c:2100
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
+"implicit directory rename(s) putting the following path(s) there: %s."
+msgstr ""
+"KONFLIKT (implizite Verzeichnisumbenennung): Existierende Datei/Pfad bei %s "
+"im\n"
+"Weg von impliziter Verzeichnisumbenennung, die versucht, einen oder mehrere\n"
+"Pfade dahin zu setzen: %s."
+
+#: merge-ort.c:1288 merge-recursive.c:2110
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
+"implicit directory renames tried to put these paths there: %s"
+msgstr ""
+"KONFLIKT (implizite Verzeichnisumbenennung): Kann nicht mehr als ein Pfad "
+"zu\n"
+"%s mappen; implizite Verzeichnisumbenennungen versuchten diese Pfade dahin\n"
+"zu setzen: %s"
+
+#: merge-ort.c:1471
+#, c-format
+msgid ""
+"CONFLICT (directory rename split): Unclear where to rename %s to; it was "
+"renamed to multiple other directories, with no destination getting a "
+"majority of the files."
+msgstr ""
+"KONFLIKT (Aufteilung Verzeichnisumbenennung): Unklar, wo %s zu platzieren "
+"ist; es wurde zu mehreren anderen Verzeichnissen umbenannt, ohne dass ein "
+"Ziel die Mehrheit der Dateien erhält."
+
+#: merge-ort.c:1637 merge-recursive.c:2447
+#, c-format
+msgid ""
+"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
+"renamed."
+msgstr ""
+"WARNUNG: Vermeide Umbenennung %s -> %s von %s, weil %s selbst umbenannt "
+"wurde."
+
+#: merge-ort.c:1781 merge-recursive.c:3215
+#, c-format
+msgid ""
+"Path updated: %s added in %s inside a directory that was renamed in %s; "
+"moving it to %s."
+msgstr ""
+"Pfad aktualisiert: %s hinzugefügt in %s innerhalb eines Verzeichnisses, das "
+"umbenannt wurde in %s; Verschiebe es nach %s."
+
+#: merge-ort.c:1788 merge-recursive.c:3222
+#, c-format
+msgid ""
+"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
+"%s; moving it to %s."
+msgstr ""
+"Pfad aktualisiert: %s umbenannt nach %s in %s, innerhalb eines "
+"Verzeichnisses, das umbenannt wurde in %s; Verschiebe es nach %s."
+
+#: merge-ort.c:1801 merge-recursive.c:3218
+#, c-format
+msgid ""
+"CONFLICT (file location): %s added in %s inside a directory that was renamed "
+"in %s, suggesting it should perhaps be moved to %s."
+msgstr ""
+"KONFLIKT (Speicherort): %s hinzugefügt in %s innerhalb eines Verzeichnisses, "
+"das umbenannt wurde in %s, es sollte vielleicht nach %s verschoben werden."
+
+#: merge-ort.c:1809 merge-recursive.c:3225
+#, c-format
+msgid ""
+"CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
+"was renamed in %s, suggesting it should perhaps be moved to %s."
+msgstr ""
+"KONFLIKT (Speicherort): %s umbenannt nach %s in %s, innerhalb eines "
+"Verzeichnisses, das umbenannt wurde in %s, es sollte vielleicht nach %s "
+"verschoben werden."
+
+#: merge-ort.c:1952
+#, c-format
+msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
+msgstr ""
+"KONFLIKT (umbenennen/umbenennen): %s zu %s in %s umbenannt und zu %s in %s."
+
+#: merge-ort.c:2047
+#, c-format
+msgid ""
+"CONFLICT (rename involved in collision): rename of %s -> %s has content "
+"conflicts AND collides with another path; this may result in nested conflict "
+"markers."
+msgstr ""
+"KONFLIKT (Umbenennung in Kollision beteiligt): Umbenennung von %s -> %s hat "
+"Inhaltskonflikte UND kollidiert mit einem anderen Pfad; dies kann zu "
+"verschachtelten Konfliktmarkierungen führen."
+
+#: merge-ort.c:2066 merge-ort.c:2090
+#, c-format
+msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
+msgstr ""
+"KONFLIKT (umbenennen/löschen): %s zu %s in %s umbenannt, aber in %s gelöscht."
+
+#: merge-ort.c:2735
+#, c-format
+msgid ""
+"CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
+"%s instead."
+msgstr ""
+"KONFLIKT (Datei/Verzeichnis): Verzeichnis im Weg von %s aus %s; stattdessen "
+"nach %s verschieben."
+
+#: merge-ort.c:2808
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed %s "
+"of them so each can be recorded somewhere."
+msgstr ""
+"KONFLIKT (verschiedene Typen): %s hatte unterschiedliche Typen auf jeder "
+"Seite; %s wurde(n) umbenannt, damit jeder irgendwo aufgezeichnet werden kann."
+
+#: merge-ort.c:2812
+msgid "both"
+msgstr "beide"
+
+#: merge-ort.c:2812
+msgid "one"
+msgstr "einer"
+
+#: merge-ort.c:2907 merge-recursive.c:3052
+msgid "content"
+msgstr "Inhalt"
+
+#: merge-ort.c:2909 merge-recursive.c:3056
+msgid "add/add"
+msgstr "hinzufügen/hinzufügen"
+
+#: merge-ort.c:2911 merge-recursive.c:3101
+msgid "submodule"
+msgstr "Submodul"
+
+#: merge-ort.c:2913 merge-recursive.c:3102
+#, c-format
+msgid "CONFLICT (%s): Merge conflict in %s"
+msgstr "KONFLIKT (%s): Merge-Konflikt in %s"
+
+#: merge-ort.c:2938
+#, c-format
+msgid ""
+"CONFLICT (modify/delete): %s deleted in %s and modified in %s. Version %s "
+"of %s left in tree."
+msgstr ""
+"KONFLIKT (ändern/löschen): %s gelöscht in %s und geändert in %s. Stand %s "
+"von %s wurde im Arbeitsbereich gelassen."
+
+#. TRANSLATORS: The %s arguments are: 1) tree hash of a merge
+#. base, and 2-3) the trees for the two trees we're merging.
+#.
+#: merge-ort.c:3406
+#, c-format
+msgid "collecting merge info failed for trees %s, %s, %s"
+msgstr ""
+"Sammeln von Merge-Informationen für die Referenzen %s, %s, %s fehlgeschlagen"
+
+#: merge-ort-wrappers.c:13 merge-recursive.c:3661
#, c-format
msgid ""
"Your local changes to the following files would be overwritten by merge:\n"
@@ -4667,21 +4995,6 @@
msgid "do not know what to do with %06o %s '%s'"
msgstr "weiß nicht was mit %06o %s '%s' zu machen ist"
-#: merge-recursive.c:1191
-#, c-format
-msgid "Failed to merge submodule %s (not checked out)"
-msgstr "Fehler beim Merge von Submodul %s (nicht ausgecheckt)."
-
-#: merge-recursive.c:1198
-#, c-format
-msgid "Failed to merge submodule %s (commits not present)"
-msgstr "Fehler beim Merge von Submodul %s (Commits nicht vorhanden)."
-
-#: merge-recursive.c:1205
-#, c-format
-msgid "Failed to merge submodule %s (commits don't follow merge-base)"
-msgstr "Fehler beim Merge von Submodul %s (Commits folgen keiner Merge-Basis)"
-
#: merge-recursive.c:1213 merge-recursive.c:1225
#, c-format
msgid "Fast-forwarding submodule %s to the following commit:"
@@ -4708,42 +5021,11 @@
msgid "Found a possible merge resolution for the submodule:\n"
msgstr "Mögliche Auflösung des Merges für Submodul gefunden:\n"
-#: merge-recursive.c:1259
-#, c-format
-msgid ""
-"If this is correct simply add it to the index for example\n"
-"by using:\n"
-"\n"
-" git update-index --cacheinfo 160000 %s \"%s\"\n"
-"\n"
-"which will accept this suggestion.\n"
-msgstr ""
-"Falls das korrekt ist, fügen Sie es einfach der Staging-Area, zum Beispiel "
-"mit:\n"
-"\n"
-" git update-index --cacheinfo 160000 %s \"%s\"\n"
-"\n"
-"hinzu, um diesen Vorschlag zu akzeptieren.\n"
-
#: merge-recursive.c:1268
#, c-format
msgid "Failed to merge submodule %s (multiple merges found)"
msgstr "Fehler beim Merge von Submodul %s (mehrere Merges gefunden)"
-#: merge-recursive.c:1341
-msgid "Failed to execute internal merge"
-msgstr "Fehler bei Ausführung des internen Merges"
-
-#: merge-recursive.c:1346
-#, c-format
-msgid "Unable to add %s to database"
-msgstr "Konnte %s nicht zur Datenbank hinzufügen"
-
-#: merge-recursive.c:1378
-#, c-format
-msgid "Auto-merging %s"
-msgstr "automatischer Merge von %s"
-
#: merge-recursive.c:1402
#, c-format
msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
@@ -4859,28 +5141,6 @@
"wobei\n"
"keines dieser Ziele die Mehrheit der Dateien erhielt."
-#: merge-recursive.c:2100
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
-"implicit directory rename(s) putting the following path(s) there: %s."
-msgstr ""
-"KONFLIKT (implizite Verzeichnisumbenennung): Existierende Datei/Pfad bei %s "
-"im\n"
-"Weg von impliziter Verzeichnisumbenennung, die versucht, einen oder mehrere\n"
-"Pfade dahin zu setzen: %s."
-
-#: merge-recursive.c:2110
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
-"implicit directory renames tried to put these paths there: %s"
-msgstr ""
-"KONFLIKT (implizite Verzeichnisumbenennung): Kann nicht mehr als ein Pfad "
-"zu\n"
-"%s mappen; implizite Verzeichnisumbenennungen versuchten diese Pfade dahin\n"
-"zu setzen: %s"
-
#: merge-recursive.c:2202
#, c-format
msgid ""
@@ -4890,15 +5150,6 @@
"KONFLIKT (umbenennen/umbenennen): Benenne Verzeichnis um %s->%s in %s.\n"
"Benenne Verzeichnis um %s->%s in %s"
-#: merge-recursive.c:2447
-#, c-format
-msgid ""
-"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
-"renamed."
-msgstr ""
-"WARNUNG: Vermeide Umbenennung %s -> %s von %s, weil %s selbst umbenannt "
-"wurde."
-
#: merge-recursive.c:2973
#, c-format
msgid "cannot read object %s"
@@ -4917,70 +5168,16 @@
msgid "modified"
msgstr "geändert"
-#: merge-recursive.c:3052
-msgid "content"
-msgstr "Inhalt"
-
-#: merge-recursive.c:3056
-msgid "add/add"
-msgstr "hinzufügen/hinzufügen"
-
#: merge-recursive.c:3079
#, c-format
msgid "Skipped %s (merged same as existing)"
msgstr "%s ausgelassen (Ergebnis des Merges existiert bereits)"
-#: merge-recursive.c:3101
-msgid "submodule"
-msgstr "Submodul"
-
-#: merge-recursive.c:3102
-#, c-format
-msgid "CONFLICT (%s): Merge conflict in %s"
-msgstr "KONFLIKT (%s): Merge-Konflikt in %s"
-
#: merge-recursive.c:3132
#, c-format
msgid "Adding as %s instead"
msgstr "Füge stattdessen als %s hinzu"
-#: merge-recursive.c:3215
-#, c-format
-msgid ""
-"Path updated: %s added in %s inside a directory that was renamed in %s; "
-"moving it to %s."
-msgstr ""
-"Pfad aktualisiert: %s hinzugefügt in %s innerhalb eines Verzeichnisses, das "
-"umbenannt wurde in %s; Verschiebe es nach %s."
-
-#: merge-recursive.c:3218
-#, c-format
-msgid ""
-"CONFLICT (file location): %s added in %s inside a directory that was renamed "
-"in %s, suggesting it should perhaps be moved to %s."
-msgstr ""
-"KONFLIKT (Speicherort): %s hinzugefügt in %s innerhalb eines Verzeichnisses, "
-"das umbenannt wurde in %s, es sollte vielleicht nach %s verschoben werden."
-
-#: merge-recursive.c:3222
-#, c-format
-msgid ""
-"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
-"%s; moving it to %s."
-msgstr ""
-"Pfad aktualisiert: %s umbenannt nach %s in %s, innerhalb eines "
-"Verzeichnisses, das umbenannt wurde in %s; Verschiebe es nach %s."
-
-#: merge-recursive.c:3225
-#, c-format
-msgid ""
-"CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
-"was renamed in %s, suggesting it should perhaps be moved to %s."
-msgstr ""
-"KONFLIKT (Speicherort): %s umbenannt nach %s in %s, innerhalb eines "
-"Verzeichnisses, das umbenannt wurde in %s, es sollte vielleicht nach %s "
-"verschoben werden."
-
#: merge-recursive.c:3339
#, c-format
msgid "Removing %s"
@@ -5016,27 +5213,28 @@
msgid "merging of trees %s and %s failed"
msgstr "Zusammenführen der \"Tree\"-Objekte %s und %s fehlgeschlagen"
-#: merge-recursive.c:3550
+#: merge-recursive.c:3539
msgid "Merging:"
msgstr "Merge:"
-#: merge-recursive.c:3563
+#: merge-recursive.c:3552
#, c-format
msgid "found %u common ancestor:"
msgid_plural "found %u common ancestors:"
msgstr[0] "%u gemeinsamen Vorgänger-Commit gefunden"
msgstr[1] "%u gemeinsame Vorgänger-Commits gefunden"
-#: merge-recursive.c:3613
+#: merge-recursive.c:3602
msgid "merge returned no commit"
msgstr "Merge hat keinen Commit zurückgegeben"
-#: merge-recursive.c:3769
+#: merge-recursive.c:3758
#, c-format
msgid "Could not parse object '%s'"
msgstr "Konnte Objekt '%s' nicht parsen."
-#: merge-recursive.c:3787 builtin/merge.c:711 builtin/merge.c:895
+#: merge-recursive.c:3776 builtin/merge.c:712 builtin/merge.c:896
+#: builtin/stash.c:471
msgid "Unable to write index."
msgstr "Konnte Index nicht schreiben."
@@ -5044,118 +5242,110 @@
msgid "failed to read the cache"
msgstr "Lesen des Zwischenspeichers fehlgeschlagen"
-#: merge.c:109 rerere.c:720 builtin/am.c:1883 builtin/am.c:1917
-#: builtin/checkout.c:573 builtin/checkout.c:829 builtin/clone.c:817
+#: merge.c:109 rerere.c:704 builtin/am.c:1883 builtin/am.c:1917
+#: builtin/checkout.c:575 builtin/checkout.c:828 builtin/clone.c:817
#: builtin/stash.c:265
msgid "unable to write new index file"
msgstr "Konnte neue Index-Datei nicht schreiben."
-#: midx.c:80
+#: midx.c:62
+msgid "multi-pack-index OID fanout is of the wrong size"
+msgstr "multi-pack-index OID fanout hat die falsche Größe"
+
+#: midx.c:93
#, c-format
msgid "multi-pack-index file %s is too small"
msgstr "multi-pack-index-Datei %s ist zu klein."
-#: midx.c:96
+#: midx.c:109
#, c-format
msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
msgstr ""
"multi-pack-index-Signatur 0x%08x stimmt nicht mit Signatur 0x%08x überein."
-#: midx.c:101
+#: midx.c:114
#, c-format
msgid "multi-pack-index version %d not recognized"
msgstr "multi-pack-index-Version %d nicht erkannt."
-#: midx.c:106
+#: midx.c:119
#, c-format
msgid "multi-pack-index hash version %u does not match version %u"
msgstr "multi-pack-index Hash-Version %u stimmt nicht mit Version %u überein"
-#: midx.c:123
-msgid "invalid chunk offset (too large)"
-msgstr "Ungültiger Chunk-Offset (zu groß)"
-
-#: midx.c:147
-msgid "terminating multi-pack-index chunk id appears earlier than expected"
-msgstr "Abschließende multi-pack-index Chunk-Id erscheint eher als erwartet."
-
-#: midx.c:160
+#: midx.c:136
msgid "multi-pack-index missing required pack-name chunk"
-msgstr "multi-pack-index fehlt erforderlicher pack-name Chunk."
+msgstr "multi-pack-index fehlt erforderlicher Pack-Namen Chunk"
-#: midx.c:162
+#: midx.c:138
msgid "multi-pack-index missing required OID fanout chunk"
-msgstr "multi-pack-index fehlt erforderlicher OID fanout Chunk."
+msgstr "multi-pack-index fehlt erforderlicher OID fanout Chunk"
-#: midx.c:164
+#: midx.c:140
msgid "multi-pack-index missing required OID lookup chunk"
-msgstr "multi-pack-index fehlt erforderlicher OID lookup Chunk."
+msgstr "multi-pack-index fehlt erforderlicher OID lookup Chunk"
-#: midx.c:166
+#: midx.c:142
msgid "multi-pack-index missing required object offsets chunk"
-msgstr "multi-pack-index fehlt erforderlicher object offset Chunk."
+msgstr "multi-pack-index fehlt erforderlicher Objekt offset Chunk"
-#: midx.c:180
+#: midx.c:158
#, c-format
msgid "multi-pack-index pack names out of order: '%s' before '%s'"
msgstr "Falsche Reihenfolge bei multi-pack-index Pack-Namen: '%s' vor '%s'"
-#: midx.c:223
+#: midx.c:202
#, c-format
msgid "bad pack-int-id: %u (%u total packs)"
msgstr "Ungültige pack-int-id: %u (%u Pakete insgesamt)"
-#: midx.c:273
+#: midx.c:252
msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
msgstr ""
-"multi-pack-index speichert einen 64-Bit Offset, aber off_t ist zu klein."
+"multi-pack-index speichert einen 64-Bit Offset, aber off_t ist zu klein"
-#: midx.c:480
+#: midx.c:467
#, c-format
msgid "failed to add packfile '%s'"
-msgstr "Fehler beim Hinzufügen von Packdatei '%s'."
+msgstr "Fehler beim Hinzufügen von Packdatei '%s'"
-#: midx.c:486
+#: midx.c:473
#, c-format
msgid "failed to open pack-index '%s'"
msgstr "Fehler beim Öffnen von pack-index '%s'"
-#: midx.c:546
+#: midx.c:533
#, c-format
msgid "failed to locate object %d in packfile"
-msgstr "Fehler beim Lokalisieren von Objekt %d in Packdatei."
+msgstr "Fehler beim Lokalisieren von Objekt %d in Packdatei"
-#: midx.c:846
+#: midx.c:821
msgid "Adding packfiles to multi-pack-index"
msgstr "Packdateien zum multi-pack-index hinzufügen"
-#: midx.c:879
+#: midx.c:855
#, c-format
msgid "did not see pack-file %s to drop"
msgstr "Pack-Datei %s zum Weglassen nicht gefunden"
-#: midx.c:931
+#: midx.c:904
msgid "no pack files to index."
msgstr "keine Packdateien zum Indizieren."
-#: midx.c:982
-msgid "Writing chunks to multi-pack-index"
-msgstr "Chunks zum multi-pack-index schreiben"
-
-#: midx.c:1060
+#: midx.c:965
#, c-format
msgid "failed to clear multi-pack-index at %s"
msgstr "Fehler beim Löschen des multi-pack-index bei %s"
-#: midx.c:1116
+#: midx.c:1021
msgid "multi-pack-index file exists, but failed to parse"
msgstr "multi-pack-index-Datei existiert, aber das Parsen schlug fehl"
-#: midx.c:1124
+#: midx.c:1029
msgid "Looking for referenced packfiles"
msgstr "Suche nach referenzierten Pack-Dateien"
-#: midx.c:1139
+#: midx.c:1044
#, c-format
msgid ""
"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
@@ -5163,69 +5353,69 @@
"Ungültige oid fanout Reihenfolge: fanout[%d] = %<PRIx32> > %<PRIx32> = "
"fanout[%d]"
-#: midx.c:1144
+#: midx.c:1049
msgid "the midx contains no oid"
msgstr "das midx enthält keine oid"
-#: midx.c:1153
+#: midx.c:1058
msgid "Verifying OID order in multi-pack-index"
msgstr "Verifiziere OID-Reihenfolge im multi-pack-index"
-#: midx.c:1162
+#: midx.c:1067
#, c-format
msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
msgstr "Ungültige oid lookup Reihenfolge: oid[%d] = %s >= %s = oid[%d]"
-#: midx.c:1182
+#: midx.c:1087
msgid "Sorting objects by packfile"
msgstr "Sortiere Objekte nach Pack-Datei"
-#: midx.c:1189
+#: midx.c:1094
msgid "Verifying object offsets"
msgstr "Überprüfe Objekt-Offsets"
-#: midx.c:1205
+#: midx.c:1110
#, c-format
msgid "failed to load pack entry for oid[%d] = %s"
msgstr "Fehler beim Laden des Pack-Eintrags für oid[%d] = %s"
-#: midx.c:1211
+#: midx.c:1116
#, c-format
msgid "failed to load pack-index for packfile %s"
msgstr "Fehler beim Laden des Pack-Index für Packdatei %s"
-#: midx.c:1220
+#: midx.c:1125
#, c-format
msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
msgstr "Falscher Objekt-Offset für oid[%d] = %s: %<PRIx64> != %<PRIx64>"
-#: midx.c:1245
+#: midx.c:1150
msgid "Counting referenced objects"
msgstr "Referenzierte Objekte zählen"
-#: midx.c:1255
+#: midx.c:1160
msgid "Finding and deleting unreferenced packfiles"
msgstr "Suchen und Löschen von unreferenzierten Pack-Dateien"
-#: midx.c:1446
+#: midx.c:1351
msgid "could not start pack-objects"
msgstr "Konnte 'pack-objects' nicht ausführen"
-#: midx.c:1466
+#: midx.c:1371
msgid "could not finish pack-objects"
msgstr "Konnte 'pack-objects' nicht beenden"
-#: name-hash.c:537
+#: name-hash.c:538
#, c-format
msgid "unable to create lazy_dir thread: %s"
msgstr "Kann lazy_dir Thread nicht erzeugen: %s"
-#: name-hash.c:559
+#: name-hash.c:560
#, c-format
msgid "unable to create lazy_name thread: %s"
msgstr "Kann lazy_name Thread nicht erzeugen: %s"
-#: name-hash.c:565
+#: name-hash.c:566
#, c-format
msgid "unable to join lazy_name thread: %s"
msgstr "Kann lazy_name Thread nicht beitreten: %s"
@@ -5275,6 +5465,370 @@
msgid "Bad %s value: '%s'"
msgstr "Ungültiger %s Wert: '%s'"
+#: object-file.c:480
+#, c-format
+msgid "object directory %s does not exist; check .git/objects/info/alternates"
+msgstr ""
+"Objektverzeichnis %s existiert nicht; prüfe .git/objects/info/alternates"
+
+#: object-file.c:531
+#, c-format
+msgid "unable to normalize alternate object path: %s"
+msgstr "Konnte alternativen Objektpfad '%s' nicht normalisieren."
+
+#: object-file.c:603
+#, c-format
+msgid "%s: ignoring alternate object stores, nesting too deep"
+msgstr "%s: ignoriere alternative Objektspeicher - Verschachtelung zu tief"
+
+#: object-file.c:610
+#, c-format
+msgid "unable to normalize object directory: %s"
+msgstr "Konnte Objektverzeichnis '%s' nicht normalisieren."
+
+#: object-file.c:653
+msgid "unable to fdopen alternates lockfile"
+msgstr "Konnte fdopen nicht auf Lock-Datei für \"alternates\" aufrufen."
+
+#: object-file.c:671
+msgid "unable to read alternates file"
+msgstr "Konnte \"alternates\"-Datei nicht lesen."
+
+#: object-file.c:678
+msgid "unable to move new alternates file into place"
+msgstr "Konnte neue \"alternates\"-Datei nicht übernehmen."
+
+#: object-file.c:713
+#, c-format
+msgid "path '%s' does not exist"
+msgstr "Pfad '%s' existiert nicht"
+
+#: object-file.c:734
+#, c-format
+msgid "reference repository '%s' as a linked checkout is not supported yet."
+msgstr ""
+"Referenziertes Repository '%s' wird noch nicht als verknüpftes\n"
+"Arbeitsverzeichnis unterstützt."
+
+#: object-file.c:740
+#, c-format
+msgid "reference repository '%s' is not a local repository."
+msgstr "Referenziertes Repository '%s' ist kein lokales Repository."
+
+#: object-file.c:746
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr ""
+"Referenziertes Repository '%s' hat eine unvollständige Historie (shallow)."
+
+#: object-file.c:754
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr ""
+"Referenziertes Repository '%s' ist mit künstlichen Vorgängern (\"grafts\") "
+"eingehängt."
+
+#: object-file.c:814
+#, c-format
+msgid "invalid line while parsing alternate refs: %s"
+msgstr "Ungültige Zeile beim Parsen alternativer Referenzen: %s"
+
+#: object-file.c:964
+#, c-format
+msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
+msgstr "Versuche mmap %<PRIuMAX> über Limit %<PRIuMAX>."
+
+#: object-file.c:985
+msgid "mmap failed"
+msgstr "mmap fehlgeschlagen"
+
+#: object-file.c:1149
+#, c-format
+msgid "object file %s is empty"
+msgstr "Objektdatei %s ist leer."
+
+#: object-file.c:1284 object-file.c:2477
+#, c-format
+msgid "corrupt loose object '%s'"
+msgstr "Fehlerhaftes loses Objekt '%s'."
+
+#: object-file.c:1286 object-file.c:2481
+#, c-format
+msgid "garbage at end of loose object '%s'"
+msgstr "Nutzlose Daten am Ende von losem Objekt '%s'."
+
+#: object-file.c:1328
+msgid "invalid object type"
+msgstr "ungültiger Objekt-Typ"
+
+#: object-file.c:1412
+#, c-format
+msgid "unable to unpack %s header with --allow-unknown-type"
+msgstr "Konnte %s Kopfbereich nicht mit --allow-unknown-type entpacken."
+
+#: object-file.c:1415
+#, c-format
+msgid "unable to unpack %s header"
+msgstr "Konnte %s Kopfbereich nicht entpacken."
+
+#: object-file.c:1421
+#, c-format
+msgid "unable to parse %s header with --allow-unknown-type"
+msgstr "Konnte %s Kopfbereich mit --allow-unknown-type nicht parsen."
+
+#: object-file.c:1424
+#, c-format
+msgid "unable to parse %s header"
+msgstr "Konnte %s Kopfbereich nicht parsen."
+
+#: object-file.c:1651
+#, c-format
+msgid "failed to read object %s"
+msgstr "Konnte Objekt %s nicht lesen."
+
+#: object-file.c:1655
+#, c-format
+msgid "replacement %s not found for %s"
+msgstr "Ersetzung %s für %s nicht gefunden."
+
+#: object-file.c:1659
+#, c-format
+msgid "loose object %s (stored in %s) is corrupt"
+msgstr "Loses Objekt %s (gespeichert in %s) ist beschädigt."
+
+#: object-file.c:1663
+#, c-format
+msgid "packed object %s (stored in %s) is corrupt"
+msgstr "Gepacktes Objekt %s (gespeichert in %s) ist beschädigt."
+
+#: object-file.c:1768
+#, c-format
+msgid "unable to write file %s"
+msgstr "Konnte Datei %s nicht schreiben."
+
+#: object-file.c:1775
+#, c-format
+msgid "unable to set permission to '%s'"
+msgstr "Konnte Zugriffsberechtigung auf '%s' nicht setzen."
+
+#: object-file.c:1782
+msgid "file write error"
+msgstr "Fehler beim Schreiben einer Datei."
+
+#: object-file.c:1802
+msgid "error when closing loose object file"
+msgstr "Fehler beim Schließen der Datei für lose Objekte."
+
+#: object-file.c:1867
+#, c-format
+msgid "insufficient permission for adding an object to repository database %s"
+msgstr ""
+"Unzureichende Berechtigung zum Hinzufügen eines Objektes zur Repository-"
+"Datenbank %s"
+
+#: object-file.c:1869
+msgid "unable to create temporary file"
+msgstr "Konnte temporäre Datei nicht erstellen."
+
+#: object-file.c:1893
+msgid "unable to write loose object file"
+msgstr "Fehler beim Schreiben der Datei für lose Objekte."
+
+#: object-file.c:1899
+#, c-format
+msgid "unable to deflate new object %s (%d)"
+msgstr "Konnte neues Objekt %s (%d) nicht komprimieren."
+
+#: object-file.c:1903
+#, c-format
+msgid "deflateEnd on object %s failed (%d)"
+msgstr "deflateEnd auf Objekt %s fehlgeschlagen (%d)"
+
+#: object-file.c:1907
+#, c-format
+msgid "confused by unstable object source data for %s"
+msgstr "Fehler wegen instabilen Objektquelldaten für %s"
+
+#: object-file.c:1917 builtin/pack-objects.c:1097
+#, c-format
+msgid "failed utime() on %s"
+msgstr "Fehler beim Aufruf von utime() auf '%s'."
+
+#: object-file.c:1994
+#, c-format
+msgid "cannot read object for %s"
+msgstr "Kann Objekt für %s nicht lesen."
+
+#: object-file.c:2045
+msgid "corrupt commit"
+msgstr "fehlerhafter Commit"
+
+#: object-file.c:2053
+msgid "corrupt tag"
+msgstr "fehlerhaftes Tag"
+
+#: object-file.c:2153
+#, c-format
+msgid "read error while indexing %s"
+msgstr "Lesefehler beim Indizieren von '%s'."
+
+#: object-file.c:2156
+#, c-format
+msgid "short read while indexing %s"
+msgstr "read() zu kurz beim Indizieren von '%s'."
+
+#: object-file.c:2229 object-file.c:2239
+#, c-format
+msgid "%s: failed to insert into database"
+msgstr "%s: Fehler beim Einfügen in die Datenbank"
+
+#: object-file.c:2245
+#, c-format
+msgid "%s: unsupported file type"
+msgstr "%s: nicht unterstützte Dateiart"
+
+#: object-file.c:2269
+#, c-format
+msgid "%s is not a valid object"
+msgstr "%s ist kein gültiges Objekt"
+
+#: object-file.c:2271
+#, c-format
+msgid "%s is not a valid '%s' object"
+msgstr "%s ist kein gültiges '%s' Objekt"
+
+#: object-file.c:2298 builtin/index-pack.c:192
+#, c-format
+msgid "unable to open %s"
+msgstr "kann %s nicht öffnen"
+
+#: object-file.c:2488 object-file.c:2541
+#, c-format
+msgid "hash mismatch for %s (expected %s)"
+msgstr "Hash für %s stimmt nicht überein (%s erwartet)."
+
+#: object-file.c:2512
+#, c-format
+msgid "unable to mmap %s"
+msgstr "Konnte mmap nicht auf %s ausführen."
+
+#: object-file.c:2517
+#, c-format
+msgid "unable to unpack header of %s"
+msgstr "Konnte Kopfbereich von %s nicht entpacken."
+
+#: object-file.c:2523
+#, c-format
+msgid "unable to parse header of %s"
+msgstr "Konnte Kopfbereich von %s nicht parsen."
+
+#: object-file.c:2534
+#, c-format
+msgid "unable to unpack contents of %s"
+msgstr "Konnte Inhalt von %s nicht entpacken."
+
+#: object-name.c:486
+#, c-format
+msgid "short object ID %s is ambiguous"
+msgstr "kurze Objekt-ID %s ist mehrdeutig"
+
+#: object-name.c:497
+msgid "The candidates are:"
+msgstr "Die Kandidaten sind:"
+
+#: object-name.c:796
+msgid ""
+"Git normally never creates a ref that ends with 40 hex characters\n"
+"because it will be ignored when you just specify 40-hex. These refs\n"
+"may be created by mistake. For example,\n"
+"\n"
+" git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
+"examine these refs and maybe delete them. Turn this message off by\n"
+"running \"git config advice.objectNameWarning false\""
+msgstr ""
+"Git erzeugt normalerweise keine Referenzen die mit\n"
+"40 Hex-Zeichen enden, da diese ignoriert werden wenn\n"
+"Sie diese angeben. Diese Referenzen könnten aus Versehen\n"
+"erzeugt worden sein. Zum Beispiel,\n"
+"\n"
+" git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"wobei \"$br\" leer ist und eine 40-Hex-Referenz erzeugt\n"
+"wurde. Bitte prüfen Sie diese Referenzen und löschen\n"
+"Sie sie gegebenenfalls. Unterdrücken Sie diese Meldung\n"
+"indem Sie \"git config advice.objectNameWarning false\"\n"
+"ausführen."
+
+#: object-name.c:916
+#, c-format
+msgid "log for '%.*s' only goes back to %s"
+msgstr "Log für '%.*s' geht nur bis %s zurück"
+
+#: object-name.c:924
+#, c-format
+msgid "log for '%.*s' only has %d entries"
+msgstr "Log für '%.*s' hat nur %d Einträge"
+
+#: object-name.c:1702
+#, c-format
+msgid "path '%s' exists on disk, but not in '%.*s'"
+msgstr "Pfad '%s' befindet sich im Dateisystem, aber nicht in '%.*s'"
+
+#: object-name.c:1708
+#, c-format
+msgid ""
+"path '%s' exists, but not '%s'\n"
+"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
+msgstr ""
+"Pfad '%s' existiert, aber nicht '%s'\n"
+"Hinweis: Meinten Sie '%.*s:%s' auch bekannt als '%.*s:./%s'?"
+
+#: object-name.c:1717
+#, c-format
+msgid "path '%s' does not exist in '%.*s'"
+msgstr "Pfad '%s' existiert nicht in '%.*s'"
+
+#: object-name.c:1745
+#, c-format
+msgid ""
+"path '%s' is in the index, but not at stage %d\n"
+"hint: Did you mean ':%d:%s'?"
+msgstr ""
+"Pfad '%s' ist im Index, aber nicht in Stufe %d\n"
+"Hinweis: Meinten Sie ':%d:%s'?"
+
+#: object-name.c:1761
+#, c-format
+msgid ""
+"path '%s' is in the index, but not '%s'\n"
+"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
+msgstr ""
+"Pfad '%s' ist im Index, aber nicht '%s'\n"
+"Hinweis: Meinten Sie ':%d:%s' auch bekannt als ':%d:./%s'?"
+
+#: object-name.c:1769
+#, c-format
+msgid "path '%s' exists on disk, but not in the index"
+msgstr "Pfad '%s' existiert im Dateisystem, aber nicht im Index"
+
+#: object-name.c:1771
+#, c-format
+msgid "path '%s' does not exist (neither on disk nor in the index)"
+msgstr "Pfad '%s' existiert nicht (weder im Dateisystem noch im Index)"
+
+#: object-name.c:1784
+msgid "relative path syntax can't be used outside working tree"
+msgstr ""
+"Die Syntax für relative Pfade kann nicht außerhalb des Arbeitsverzeichnisses "
+"benutzt werden."
+
+#: object-name.c:1922
+#, c-format
+msgid "invalid object name '%.*s'."
+msgstr "ungültiger Objektname '%.*s'."
+
#: object.c:53
#, c-format
msgid "invalid object type \"%s\""
@@ -5300,21 +5854,71 @@
msgid "hash mismatch %s"
msgstr "Hash stimmt nicht mit %s überein."
-#: pack-bitmap.c:815 pack-bitmap.c:821 builtin/pack-objects.c:2216
+#: pack-bitmap.c:843 pack-bitmap.c:849 builtin/pack-objects.c:2226
#, c-format
msgid "unable to get size of %s"
msgstr "Konnte Größe von %s nicht bestimmen."
-#: packfile.c:615
+#: pack-bitmap.c:1489 builtin/rev-list.c:92
+#, c-format
+msgid "unable to get disk usage of %s"
+msgstr "konnte Festplattennutzung von %s nicht bekommen"
+
+#: pack-revindex.c:220
+#, c-format
+msgid "reverse-index file %s is too small"
+msgstr "Reverse-Index-Datei %s ist zu klein"
+
+#: pack-revindex.c:225
+#, c-format
+msgid "reverse-index file %s is corrupt"
+msgstr "Reverse-Index-Datei %s ist beschädigt"
+
+#: pack-revindex.c:233
+#, c-format
+msgid "reverse-index file %s has unknown signature"
+msgstr "Reverse-Index-Datei %s hat eine unbekannte Signatur"
+
+#: pack-revindex.c:237
+#, c-format
+msgid "reverse-index file %s has unsupported version %<PRIu32>"
+msgstr "Reverse-Index-Datei %s hat nicht unterstützte Version %<PRIu32>"
+
+#: pack-revindex.c:242
+#, c-format
+msgid "reverse-index file %s has unsupported hash id %<PRIu32>"
+msgstr "Reverse-Index-Datei %s hat nicht unterstützte Hash-ID %<PRIu32>"
+
+#: pack-write.c:236
+msgid "cannot both write and verify reverse index"
+msgstr ""
+"Reverse-Index kann nicht gleichzeitig geschrieben und verifiziert werden"
+
+#: pack-write.c:257
+#, c-format
+msgid "could not stat: %s"
+msgstr "konnte nicht lesen: %s"
+
+#: pack-write.c:269
+#, c-format
+msgid "failed to make %s readable"
+msgstr "Fehler beim lesbar machen von %s"
+
+#: pack-write.c:508
+#, c-format
+msgid "could not write '%s' promisor file"
+msgstr "konnte Promisor-Datei '%s' nicht schreiben"
+
+#: packfile.c:625
msgid "offset before end of packfile (broken .idx?)"
msgstr "Offset vor Ende der Packdatei (fehlerhafte Indexdatei?)"
-#: packfile.c:1907
+#: packfile.c:1934
#, c-format
msgid "offset before start of pack index for %s (corrupt index?)"
msgstr "Offset vor Beginn des Pack-Index für %s (beschädigter Index?)"
-#: packfile.c:1911
+#: packfile.c:1938
#, c-format
msgid "offset beyond end of pack index for %s (truncated index?)"
msgstr "Offset hinter Ende des Pack-Index für %s (abgeschnittener Index?)"
@@ -5569,16 +6173,16 @@
msgid "remote error: %s"
msgstr "Fehler am anderen Ende: %s"
-#: preload-index.c:119
+#: preload-index.c:125
msgid "Refreshing index"
msgstr "Aktualisiere Index"
-#: preload-index.c:138
+#: preload-index.c:144
#, c-format
msgid "unable to create threaded lstat: %s"
msgstr "Kann Thread für lstat nicht erzeugen: %s"
-#: pretty.c:983
+#: pretty.c:984
msgid "unable to parse --pretty format"
msgstr "Konnte --pretty Format nicht parsen."
@@ -5605,20 +6209,20 @@
msgid "Removing duplicate objects"
msgstr "Lösche doppelte Objekte"
-#: range-diff.c:77
+#: range-diff.c:78
msgid "could not start `log`"
msgstr "Konnte `log` nicht starten."
-#: range-diff.c:79
+#: range-diff.c:80
msgid "could not read `log` output"
msgstr "Konnte Ausgabe von `log` nicht lesen."
-#: range-diff.c:98 sequencer.c:5310
+#: range-diff.c:101 sequencer.c:5318
#, c-format
msgid "could not parse commit '%s'"
msgstr "Konnte Commit '%s' nicht parsen."
-#: range-diff.c:112
+#: range-diff.c:115
#, c-format
msgid ""
"could not parse first line of `log` output: did not start with 'commit ': "
@@ -5627,16 +6231,20 @@
"konnte erste Zeile der Ausgabe von `log` nicht parsen: fängt nicht mit "
"'commit ' an: '%s'"
-#: range-diff.c:137
+#: range-diff.c:140
#, c-format
msgid "could not parse git header '%.*s'"
msgstr "Konnte Git-Header '%.*s' nicht parsen."
-#: range-diff.c:299
+#: range-diff.c:306
msgid "failed to generate diff"
msgstr "Fehler beim Generieren des Diffs."
-#: range-diff.c:532 range-diff.c:534
+#: range-diff.c:558
+msgid "--left-only and --right-only are mutually exclusive"
+msgstr "--left-only und --right-only schließen sich gegenseitig aus"
+
+#: range-diff.c:561 range-diff.c:563
#, c-format
msgid "could not parse log for '%s'"
msgstr "Konnte Log für '%s' nicht parsen."
@@ -5676,18 +6284,18 @@
#: read-cache.c:807
#, c-format
msgid "unable to stat '%s'"
-msgstr "Konnte '%s' nicht lesen."
+msgstr "konnte '%s' nicht lesen"
#: read-cache.c:1318
#, c-format
msgid "'%s' appears as both a file and as a directory"
-msgstr "'%s' scheint eine Datei und ein Verzeichnis zu sein."
+msgstr "'%s' scheint eine Datei und ein Verzeichnis zu sein"
-#: read-cache.c:1524
+#: read-cache.c:1532
msgid "Refresh index"
msgstr "Aktualisiere Index"
-#: read-cache.c:1639
+#: read-cache.c:1657
#, c-format
msgid ""
"index.version set, but the value is invalid.\n"
@@ -5696,7 +6304,7 @@
"index.version gesetzt, aber Wert ungültig.\n"
"Verwende Version %i"
-#: read-cache.c:1649
+#: read-cache.c:1667
#, c-format
msgid ""
"GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -5705,139 +6313,139 @@
"GIT_INDEX_VERSION gesetzt, aber Wert ungültig.\n"
"Verwende Version %i"
-#: read-cache.c:1705
+#: read-cache.c:1723
#, c-format
msgid "bad signature 0x%08x"
msgstr "Ungültige Signatur 0x%08x"
-#: read-cache.c:1708
+#: read-cache.c:1726
#, c-format
msgid "bad index version %d"
msgstr "Ungültige Index-Version %d"
-#: read-cache.c:1717
+#: read-cache.c:1735
msgid "bad index file sha1 signature"
msgstr "Ungültige SHA1-Signatur der Index-Datei."
-#: read-cache.c:1747
+#: read-cache.c:1765
#, c-format
msgid "index uses %.4s extension, which we do not understand"
msgstr "Index verwendet Erweiterung %.4s, welche wir nicht unterstützen."
-#: read-cache.c:1749
+#: read-cache.c:1767
#, c-format
msgid "ignoring %.4s extension"
msgstr "Ignoriere Erweiterung %.4s"
-#: read-cache.c:1786
+#: read-cache.c:1804
#, c-format
msgid "unknown index entry format 0x%08x"
msgstr "Unbekanntes Format für Index-Eintrag 0x%08x"
-#: read-cache.c:1802
+#: read-cache.c:1820
#, c-format
msgid "malformed name field in the index, near path '%s'"
msgstr "Ungültiges Namensfeld im Index, in der Nähe von Pfad '%s'."
-#: read-cache.c:1859
+#: read-cache.c:1877
msgid "unordered stage entries in index"
msgstr "Ungeordnete Stage-Einträge im Index."
-#: read-cache.c:1862
+#: read-cache.c:1880
#, c-format
msgid "multiple stage entries for merged file '%s'"
msgstr "Mehrere Stage-Einträge für zusammengeführte Datei '%s'."
-#: read-cache.c:1865
+#: read-cache.c:1883
#, c-format
msgid "unordered stage entries for '%s'"
msgstr "Ungeordnete Stage-Einträge für '%s'."
-#: read-cache.c:1971 read-cache.c:2262 rerere.c:565 rerere.c:599 rerere.c:1111
-#: submodule.c:1628 builtin/add.c:538 builtin/check-ignore.c:181
-#: builtin/checkout.c:502 builtin/checkout.c:688 builtin/clean.c:991
-#: builtin/commit.c:364 builtin/diff-tree.c:122 builtin/grep.c:507
+#: read-cache.c:1989 read-cache.c:2280 rerere.c:549 rerere.c:583 rerere.c:1095
+#: submodule.c:1634 builtin/add.c:546 builtin/check-ignore.c:181
+#: builtin/checkout.c:504 builtin/checkout.c:690 builtin/clean.c:991
+#: builtin/commit.c:364 builtin/diff-tree.c:122 builtin/grep.c:505
#: builtin/mv.c:146 builtin/reset.c:247 builtin/rm.c:290
#: builtin/submodule--helper.c:332
msgid "index file corrupt"
msgstr "Index-Datei beschädigt"
-#: read-cache.c:2115
+#: read-cache.c:2133
#, c-format
msgid "unable to create load_cache_entries thread: %s"
msgstr "Kann Thread für load_cache_entries nicht erzeugen: %s"
-#: read-cache.c:2128
+#: read-cache.c:2146
#, c-format
msgid "unable to join load_cache_entries thread: %s"
msgstr "Kann Thread für load_cache_entries nicht erzeugen: %s"
-#: read-cache.c:2161
+#: read-cache.c:2179
#, c-format
msgid "%s: index file open failed"
msgstr "%s: Öffnen der Index-Datei fehlgeschlagen."
-#: read-cache.c:2165
+#: read-cache.c:2183
#, c-format
msgid "%s: cannot stat the open index"
msgstr "%s: Kann geöffneten Index nicht lesen."
-#: read-cache.c:2169
+#: read-cache.c:2187
#, c-format
msgid "%s: index file smaller than expected"
msgstr "%s: Index-Datei ist kleiner als erwartet."
-#: read-cache.c:2173
+#: read-cache.c:2191
#, c-format
msgid "%s: unable to map index file"
msgstr "%s: Konnte Index-Datei nicht einlesen."
-#: read-cache.c:2215
+#: read-cache.c:2233
#, c-format
msgid "unable to create load_index_extensions thread: %s"
msgstr "Kann Thread für load_index_extensions nicht erzeugen: %s"
-#: read-cache.c:2242
+#: read-cache.c:2260
#, c-format
msgid "unable to join load_index_extensions thread: %s"
msgstr "Kann Thread für load_index_extensions nicht beitreten: %s"
-#: read-cache.c:2274
+#: read-cache.c:2292
#, c-format
msgid "could not freshen shared index '%s'"
msgstr "Konnte geteilten Index '%s' nicht aktualisieren."
-#: read-cache.c:2321
+#: read-cache.c:2339
#, c-format
msgid "broken index, expect %s in %s, got %s"
msgstr "Fehlerhafter Index. Erwartete %s in %s, erhielt %s."
-#: read-cache.c:3017 strbuf.c:1171 wrapper.c:633 builtin/merge.c:1140
+#: read-cache.c:3035 strbuf.c:1171 wrapper.c:633 builtin/merge.c:1141
#, c-format
msgid "could not close '%s'"
msgstr "Konnte '%s' nicht schließen."
-#: read-cache.c:3120 sequencer.c:2479 sequencer.c:4231
+#: read-cache.c:3138 sequencer.c:2487 sequencer.c:4239
#, c-format
msgid "could not stat '%s'"
msgstr "Konnte '%s' nicht lesen."
-#: read-cache.c:3133
+#: read-cache.c:3151
#, c-format
msgid "unable to open git dir: %s"
msgstr "konnte Git-Verzeichnis nicht öffnen: %s"
-#: read-cache.c:3145
+#: read-cache.c:3163
#, c-format
msgid "unable to unlink: %s"
msgstr "Konnte '%s' nicht entfernen."
-#: read-cache.c:3170
+#: read-cache.c:3188
#, c-format
msgid "cannot fix permission bits on '%s'"
msgstr "Konnte Zugriffsberechtigung auf '%s' nicht setzen."
-#: read-cache.c:3319
+#: read-cache.c:3337
#, c-format
msgid "%s: cannot drop to stage #0"
msgstr "%s: Kann nicht auf Stufe #0 wechseln."
@@ -5953,14 +6561,14 @@
"Wenn Sie jedoch alles löschen, wird der Rebase abgebrochen.\n"
"\n"
-#: rebase-interactive.c:110 rerere.c:485 rerere.c:692 sequencer.c:3607
-#: sequencer.c:3633 sequencer.c:5416 builtin/fsck.c:347 builtin/rebase.c:270
+#: rebase-interactive.c:110 rerere.c:469 rerere.c:676 sequencer.c:3615
+#: sequencer.c:3641 sequencer.c:5424 builtin/fsck.c:329 builtin/rebase.c:272
#, c-format
msgid "could not write '%s'"
msgstr "Konnte '%s' nicht schreiben."
-#: rebase-interactive.c:116 builtin/rebase.c:202 builtin/rebase.c:228
-#: builtin/rebase.c:252
+#: rebase-interactive.c:116 builtin/rebase.c:204 builtin/rebase.c:230
+#: builtin/rebase.c:254
#, c-format
msgid "could not write '%s'."
msgstr "Konnte '%s' nicht schreiben."
@@ -5991,14 +6599,14 @@
"Warnungen zu ändern.\n"
"Die möglichen Verhaltensweisen sind: ignore, warn, error.\n"
-#: rebase-interactive.c:233 rebase-interactive.c:238 sequencer.c:2394
-#: builtin/rebase.c:188 builtin/rebase.c:213 builtin/rebase.c:239
-#: builtin/rebase.c:264
+#: rebase-interactive.c:233 rebase-interactive.c:238 sequencer.c:2402
+#: builtin/rebase.c:190 builtin/rebase.c:215 builtin/rebase.c:241
+#: builtin/rebase.c:266
#, c-format
msgid "could not read '%s'."
msgstr "Konnte '%s' nicht lesen."
-#: ref-filter.c:42 wt-status.c:1973
+#: ref-filter.c:42 wt-status.c:1975
msgid "gone"
msgstr "entfernt"
@@ -6017,233 +6625,248 @@
msgid "ahead %d, behind %d"
msgstr "%d voraus, %d hinterher"
-#: ref-filter.c:169
+#: ref-filter.c:175
#, c-format
msgid "expected format: %%(color:<color>)"
msgstr "Erwartetes Format: %%(color:<Farbe>)"
-#: ref-filter.c:171
+#: ref-filter.c:177
#, c-format
msgid "unrecognized color: %%(color:%s)"
msgstr "nicht erkannte Farbe: %%(color:%s)"
-#: ref-filter.c:193
+#: ref-filter.c:199
#, c-format
msgid "Integer value expected refname:lstrip=%s"
msgstr "Positiver Wert erwartet refname:lstrip=%s"
-#: ref-filter.c:197
+#: ref-filter.c:203
#, c-format
msgid "Integer value expected refname:rstrip=%s"
msgstr "Positiver Wert erwartet refname:rstrip=%s"
-#: ref-filter.c:199
+#: ref-filter.c:205
#, c-format
msgid "unrecognized %%(%s) argument: %s"
msgstr "nicht erkanntes %%(%s) Argument: %s"
-#: ref-filter.c:254
+#: ref-filter.c:260
#, c-format
msgid "%%(objecttype) does not take arguments"
msgstr "%%(objecttype) akzeptiert keine Argumente"
-#: ref-filter.c:276
+#: ref-filter.c:282
#, c-format
msgid "unrecognized %%(objectsize) argument: %s"
msgstr "nicht erkanntes %%(objectsize) Argument: %s"
-#: ref-filter.c:284
+#: ref-filter.c:290
#, c-format
msgid "%%(deltabase) does not take arguments"
msgstr "%%(deltabase) akzeptiert keine Argumente"
-#: ref-filter.c:296
+#: ref-filter.c:302
#, c-format
msgid "%%(body) does not take arguments"
msgstr "%%(body) akzeptiert keine Argumente"
-#: ref-filter.c:309
+#: ref-filter.c:315
#, c-format
msgid "unrecognized %%(subject) argument: %s"
msgstr "nicht erkanntes %%(subject) Argument: %s"
-#: ref-filter.c:330
+#: ref-filter.c:334
+#, c-format
+msgid "expected %%(trailers:key=<value>)"
+msgstr "%%(trailers:key=<Wert>) erwartet"
+
+#: ref-filter.c:336
#, c-format
msgid "unknown %%(trailers) argument: %s"
msgstr "unbekanntes %%(trailers) Argument: %s"
-#: ref-filter.c:363
+#: ref-filter.c:367
#, c-format
msgid "positive value expected contents:lines=%s"
msgstr "Positiver Wert erwartet contents:lines=%s"
-#: ref-filter.c:365
+#: ref-filter.c:369
#, c-format
msgid "unrecognized %%(contents) argument: %s"
msgstr "nicht erkanntes %%(contents) Argument: %s"
-#: ref-filter.c:380
+#: ref-filter.c:384
#, c-format
msgid "positive value expected '%s' in %%(%s)"
msgstr "positiver Wert erwartet '%s' in %%(%s)"
-#: ref-filter.c:384
+#: ref-filter.c:388
#, c-format
msgid "unrecognized argument '%s' in %%(%s)"
msgstr "nicht erkanntes Argument '%s' in %%(%s)"
-#: ref-filter.c:398
+#: ref-filter.c:402
#, c-format
msgid "unrecognized email option: %s"
msgstr "nicht erkannte E-Mail Option: %s"
-#: ref-filter.c:428
+#: ref-filter.c:432
#, c-format
msgid "expected format: %%(align:<width>,<position>)"
msgstr "erwartetes Format: %%(align:<Breite>,<Position>)"
-#: ref-filter.c:440
+#: ref-filter.c:444
#, c-format
msgid "unrecognized position:%s"
msgstr "nicht erkannte Position:%s"
-#: ref-filter.c:447
+#: ref-filter.c:451
#, c-format
msgid "unrecognized width:%s"
msgstr "nicht erkannte Breite:%s"
-#: ref-filter.c:456
+#: ref-filter.c:460
#, c-format
msgid "unrecognized %%(align) argument: %s"
msgstr "nicht erkanntes %%(align) Argument: %s"
-#: ref-filter.c:464
+#: ref-filter.c:468
#, c-format
msgid "positive width expected with the %%(align) atom"
msgstr "Positive Breitenangabe für %%(align) erwartet"
-#: ref-filter.c:482
+#: ref-filter.c:486
#, c-format
msgid "unrecognized %%(if) argument: %s"
msgstr "nicht erkanntes %%(if) Argument: %s"
-#: ref-filter.c:584
+#: ref-filter.c:588
#, c-format
msgid "malformed field name: %.*s"
msgstr "Fehlerhafter Feldname: %.*s"
-#: ref-filter.c:611
+#: ref-filter.c:615
#, c-format
msgid "unknown field name: %.*s"
msgstr "Unbekannter Feldname: %.*s"
-#: ref-filter.c:615
+#: ref-filter.c:619
#, c-format
msgid ""
"not a git repository, but the field '%.*s' requires access to object data"
msgstr ""
"Kein Git-Repository, aber das Feld '%.*s' erfordert Zugriff auf Objektdaten."
-#: ref-filter.c:739
+#: ref-filter.c:743
#, c-format
msgid "format: %%(if) atom used without a %%(then) atom"
msgstr "format: %%(if) Atom ohne ein %%(then) Atom verwendet"
-#: ref-filter.c:802
+#: ref-filter.c:806
#, c-format
msgid "format: %%(then) atom used without an %%(if) atom"
msgstr "format: %%(then) Atom ohne ein %%(if) Atom verwendet"
-#: ref-filter.c:804
+#: ref-filter.c:808
#, c-format
msgid "format: %%(then) atom used more than once"
msgstr "format: %%(then) Atom mehr als einmal verwendet"
-#: ref-filter.c:806
+#: ref-filter.c:810
#, c-format
msgid "format: %%(then) atom used after %%(else)"
msgstr "format: %%(then) Atom nach %%(else) verwendet"
-#: ref-filter.c:834
+#: ref-filter.c:838
#, c-format
msgid "format: %%(else) atom used without an %%(if) atom"
msgstr "format: %%(else) Atom ohne ein %%(if) Atom verwendet"
-#: ref-filter.c:836
+#: ref-filter.c:840
#, c-format
msgid "format: %%(else) atom used without a %%(then) atom"
msgstr "Format: %%(else) Atom ohne ein %%(then) Atom verwendet"
-#: ref-filter.c:838
+#: ref-filter.c:842
#, c-format
msgid "format: %%(else) atom used more than once"
msgstr "Format: %%(end) Atom mehr als einmal verwendet"
-#: ref-filter.c:853
+#: ref-filter.c:857
#, c-format
msgid "format: %%(end) atom used without corresponding atom"
msgstr "Format: %%(end) Atom ohne zugehöriges Atom verwendet"
-#: ref-filter.c:910
+#: ref-filter.c:914
#, c-format
msgid "malformed format string %s"
msgstr "Fehlerhafter Formatierungsstring %s"
-#: ref-filter.c:1549
-#, c-format
-msgid "no branch, rebasing %s"
-msgstr "kein Branch, Rebase von %s"
-
-#: ref-filter.c:1552
-#, c-format
-msgid "no branch, rebasing detached HEAD %s"
-msgstr "kein Branch, Rebase von losgelöstem HEAD %s"
-
#: ref-filter.c:1555
#, c-format
-msgid "no branch, bisect started on %s"
-msgstr "kein Branch, binäre Suche begonnen bei %s"
+msgid "(no branch, rebasing %s)"
+msgstr "(kein Branch, Rebase von %s)"
+
+#: ref-filter.c:1558
+#, c-format
+msgid "(no branch, rebasing detached HEAD %s)"
+msgstr "(kein Branch, Rebase von losgelöstem HEAD %s)"
+
+#: ref-filter.c:1561
+#, c-format
+msgid "(no branch, bisect started on %s)"
+msgstr "(kein Branch, binäre Suche begonnen bei %s)"
#: ref-filter.c:1565
-msgid "no branch"
-msgstr "kein Branch"
+#, c-format
+msgid "(HEAD detached at %s)"
+msgstr "(HEAD losgelöst bei %s)"
-#: ref-filter.c:1599 ref-filter.c:1808
+#: ref-filter.c:1568
+#, c-format
+msgid "(HEAD detached from %s)"
+msgstr "(HEAD losgelöst von %s)"
+
+#: ref-filter.c:1571
+msgid "(no branch)"
+msgstr "(kein Branch)"
+
+#: ref-filter.c:1603 ref-filter.c:1812
#, c-format
msgid "missing object %s for %s"
msgstr "Objekt %s fehlt für %s"
-#: ref-filter.c:1609
+#: ref-filter.c:1613
#, c-format
msgid "parse_object_buffer failed on %s for %s"
msgstr "parse_object_buffer bei %s für %s fehlgeschlagen"
-#: ref-filter.c:2062
+#: ref-filter.c:1996
#, c-format
msgid "malformed object at '%s'"
msgstr "fehlerhaftes Objekt bei '%s'"
-#: ref-filter.c:2151
+#: ref-filter.c:2085
#, c-format
msgid "ignoring ref with broken name %s"
msgstr "Ignoriere Referenz mit fehlerhaftem Namen %s"
-#: ref-filter.c:2156 refs.c:676
+#: ref-filter.c:2090 refs.c:676
#, c-format
msgid "ignoring broken ref %s"
msgstr "Ignoriere fehlerhafte Referenz %s"
-#: ref-filter.c:2472
+#: ref-filter.c:2430
#, c-format
msgid "format: %%(end) atom missing"
msgstr "Format: %%(end) Atom fehlt"
-#: ref-filter.c:2571
+#: ref-filter.c:2529
#, c-format
msgid "malformed object name %s"
msgstr "missgebildeter Objektname %s"
-#: ref-filter.c:2576
+#: ref-filter.c:2534
#, c-format
msgid "option `%s' must point to a commit"
msgstr "die Option `%s' muss auf einen Commit zeigen"
@@ -6295,52 +6918,52 @@
msgid "ignoring dangling symref %s"
msgstr "Ignoriere unreferenzierte symbolische Referenz %s"
-#: refs.c:911
+#: refs.c:922
#, c-format
msgid "log for ref %s has gap after %s"
msgstr "Log für Referenz %s hat eine Lücke nach %s."
-#: refs.c:917
+#: refs.c:929
#, c-format
msgid "log for ref %s unexpectedly ended on %s"
msgstr "Log für Referenz %s unerwartet bei %s beendet."
-#: refs.c:976
+#: refs.c:994
#, c-format
msgid "log for %s is empty"
msgstr "Log für %s ist leer."
-#: refs.c:1068
+#: refs.c:1086
#, c-format
msgid "refusing to update ref with bad name '%s'"
msgstr "verweigere Aktualisierung einer Referenz mit fehlerhaftem Namen '%s'"
-#: refs.c:1139
+#: refs.c:1157
#, c-format
msgid "update_ref failed for ref '%s': %s"
msgstr "update_ref für Referenz '%s' fehlgeschlagen: %s"
-#: refs.c:1963
+#: refs.c:2051
#, c-format
msgid "multiple updates for ref '%s' not allowed"
msgstr "mehrere Aktualisierungen für Referenz '%s' nicht erlaubt"
-#: refs.c:2043
+#: refs.c:2131
msgid "ref updates forbidden inside quarantine environment"
msgstr ""
"Aktualisierungen von Referenzen ist innerhalb der Quarantäne-Umgebung "
"verboten"
-#: refs.c:2054
+#: refs.c:2142
msgid "ref updates aborted by hook"
msgstr "Aktualisierungen von Referenzen durch Hook abgebrochen"
-#: refs.c:2154 refs.c:2184
+#: refs.c:2242 refs.c:2272
#, c-format
msgid "'%s' exists; cannot create '%s'"
msgstr "'%s' existiert; kann '%s' nicht erstellen"
-#: refs.c:2160 refs.c:2195
+#: refs.c:2248 refs.c:2283
#, c-format
msgid "cannot process '%s' and '%s' at the same time"
msgstr "kann '%s' und '%s' nicht zur selben Zeit verarbeiten"
@@ -6406,12 +7029,12 @@
msgid "value '%s' of pattern has no '*'"
msgstr "Wert '%s' des Musters hat kein '*'."
-#: remote.c:1073
+#: remote.c:1083
#, c-format
msgid "src refspec %s does not match any"
msgstr "Src-Refspec %s entspricht keiner Referenz."
-#: remote.c:1078
+#: remote.c:1088
#, c-format
msgid "src refspec %s matches more than one"
msgstr "Src-Refspec %s entspricht mehr als einer Referenz."
@@ -6420,7 +7043,7 @@
#. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
#. the <src>.
#.
-#: remote.c:1093
+#: remote.c:1103
#, c-format
msgid ""
"The destination you provided is not a full refname (i.e.,\n"
@@ -6447,7 +7070,7 @@
"Keines hat funktioniert, sodass wir aufgegeben haben. Sie müssen die\n"
"Referenz mit vollqualifizierten Namen angeben."
-#: remote.c:1113
+#: remote.c:1123
#, c-format
msgid ""
"The <src> part of the refspec is a commit object.\n"
@@ -6458,7 +7081,7 @@
"Meinten Sie, einen neuen Branch mittels Push nach\n"
"'%s:refs/heads/%s' zu erstellen?"
-#: remote.c:1118
+#: remote.c:1128
#, c-format
msgid ""
"The <src> part of the refspec is a tag object.\n"
@@ -6469,7 +7092,7 @@
"Meinten Sie, einen neuen Tag mittels Push nach\n"
"'%s:refs/tags/%s' zu erstellen?"
-#: remote.c:1123
+#: remote.c:1133
#, c-format
msgid ""
"The <src> part of the refspec is a tree object.\n"
@@ -6480,7 +7103,7 @@
"Meinten Sie, einen Tag für ein neues Tree-Objekt\n"
"mittels Push nach '%s:refs/tags/'%s' zu erstellen?"
-#: remote.c:1128
+#: remote.c:1138
#, c-format
msgid ""
"The <src> part of the refspec is a blob object.\n"
@@ -6491,117 +7114,117 @@
"Meinten Sie, einen Tag für ein neues Blob-Objekt\n"
"mittels Push nach '%s:refs/tags/%s' zu erstellen?"
-#: remote.c:1164
+#: remote.c:1174
#, c-format
msgid "%s cannot be resolved to branch"
msgstr "%s kann nicht zu Branch aufgelöst werden."
-#: remote.c:1175
+#: remote.c:1185
#, c-format
msgid "unable to delete '%s': remote ref does not exist"
msgstr "Konnte '%s' nicht löschen: Remote-Referenz existiert nicht."
-#: remote.c:1187
+#: remote.c:1197
#, c-format
msgid "dst refspec %s matches more than one"
msgstr "Dst-Refspec %s entspricht mehr als einer Referenz."
-#: remote.c:1194
+#: remote.c:1204
#, c-format
msgid "dst ref %s receives from more than one src"
msgstr "Dst-Referenz %s empfängt von mehr als einer Quelle"
-#: remote.c:1714 remote.c:1815
+#: remote.c:1724 remote.c:1825
msgid "HEAD does not point to a branch"
msgstr "HEAD zeigt auf keinen Branch"
-#: remote.c:1723
+#: remote.c:1733
#, c-format
msgid "no such branch: '%s'"
-msgstr "Kein solcher Branch: '%s'"
+msgstr "Branch nicht gefunden: '%s'"
-#: remote.c:1726
+#: remote.c:1736
#, c-format
msgid "no upstream configured for branch '%s'"
msgstr "Kein Upstream-Branch für Branch '%s' konfiguriert."
-#: remote.c:1732
+#: remote.c:1742
#, c-format
msgid "upstream branch '%s' not stored as a remote-tracking branch"
msgstr "Upstream-Branch '%s' nicht als Remote-Tracking-Branch gespeichert"
-#: remote.c:1747
+#: remote.c:1757
#, c-format
msgid "push destination '%s' on remote '%s' has no local tracking branch"
msgstr ""
"Ziel für \"push\" '%s' auf Remote-Repository '%s' hat keinen lokal gefolgten "
"Branch"
-#: remote.c:1759
+#: remote.c:1769
#, c-format
msgid "branch '%s' has no remote for pushing"
msgstr "Branch '%s' hat keinen Upstream-Branch gesetzt"
-#: remote.c:1769
+#: remote.c:1779
#, c-format
msgid "push refspecs for '%s' do not include '%s'"
msgstr "Push-Refspecs für '%s' beinhalten nicht '%s'"
-#: remote.c:1782
+#: remote.c:1792
msgid "push has no destination (push.default is 'nothing')"
msgstr "kein Ziel für \"push\" (push.default ist 'nothing')"
-#: remote.c:1804
+#: remote.c:1814
msgid "cannot resolve 'simple' push to a single destination"
msgstr "kann einzelnes Ziel für \"push\" im Modus 'simple' nicht auflösen"
-#: remote.c:1933
+#: remote.c:1943
#, c-format
msgid "couldn't find remote ref %s"
msgstr "Konnte Remote-Referenz %s nicht finden."
-#: remote.c:1946
+#: remote.c:1956
#, c-format
msgid "* Ignoring funny ref '%s' locally"
msgstr "* Ignoriere sonderbare Referenz '%s' lokal"
-#: remote.c:2109
+#: remote.c:2119
#, c-format
msgid "Your branch is based on '%s', but the upstream is gone.\n"
msgstr ""
"Ihr Branch basiert auf '%s', aber der Upstream-Branch wurde entfernt.\n"
-#: remote.c:2113
+#: remote.c:2123
msgid " (use \"git branch --unset-upstream\" to fixup)\n"
msgstr " (benutzen Sie \"git branch --unset-upstream\" zum Beheben)\n"
-#: remote.c:2116
+#: remote.c:2126
#, c-format
msgid "Your branch is up to date with '%s'.\n"
msgstr "Ihr Branch ist auf demselben Stand wie '%s'.\n"
-#: remote.c:2120
+#: remote.c:2130
#, c-format
msgid "Your branch and '%s' refer to different commits.\n"
msgstr "Ihr Branch und '%s' zeigen auf unterschiedliche Commits.\n"
-#: remote.c:2123
+#: remote.c:2133
#, c-format
msgid " (use \"%s\" for details)\n"
msgstr " (benutzen Sie \"%s\" für Details)\n"
-#: remote.c:2127
+#: remote.c:2137
#, c-format
msgid "Your branch is ahead of '%s' by %d commit.\n"
msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
msgstr[0] "Ihr Branch ist %2$d Commit vor '%1$s'.\n"
msgstr[1] "Ihr Branch ist %2$d Commits vor '%1$s'.\n"
-#: remote.c:2133
+#: remote.c:2143
msgid " (use \"git push\" to publish your local commits)\n"
msgstr " (benutzen Sie \"git push\", um lokale Commits zu publizieren)\n"
-#: remote.c:2136
+#: remote.c:2146
#, c-format
msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
msgid_plural ""
@@ -6611,12 +7234,12 @@
msgstr[1] ""
"Ihr Branch ist %2$d Commits hinter '%1$s', und kann vorgespult werden.\n"
-#: remote.c:2144
+#: remote.c:2154
msgid " (use \"git pull\" to update your local branch)\n"
msgstr ""
" (benutzen Sie \"git pull\", um Ihren lokalen Branch zu aktualisieren)\n"
-#: remote.c:2147
+#: remote.c:2157
#, c-format
msgid ""
"Your branch and '%s' have diverged,\n"
@@ -6631,13 +7254,13 @@
"Ihr Branch und '%s' sind divergiert,\n"
"und haben jeweils %d und %d unterschiedliche Commits.\n"
-#: remote.c:2157
+#: remote.c:2167
msgid " (use \"git pull\" to merge the remote branch into yours)\n"
msgstr ""
" (benutzen Sie \"git pull\", um Ihren Branch mit dem Remote-Branch "
"zusammenzuführen)\n"
-#: remote.c:2349
+#: remote.c:2359
#, c-format
msgid "cannot parse expected object name '%s'"
msgstr "Kann erwarteten Objektnamen '%s' nicht parsen."
@@ -6657,96 +7280,96 @@
msgid "replace depth too high for object %s"
msgstr "Ersetzungstiefe zu hoch für Objekt %s"
-#: rerere.c:217 rerere.c:226 rerere.c:229
+#: rerere.c:201 rerere.c:210 rerere.c:213
msgid "corrupt MERGE_RR"
msgstr "Fehlerhaftes MERGE_RR"
-#: rerere.c:264 rerere.c:269
+#: rerere.c:248 rerere.c:253
msgid "unable to write rerere record"
msgstr "Konnte Rerere-Eintrag nicht schreiben."
-#: rerere.c:495
+#: rerere.c:479
#, c-format
msgid "there were errors while writing '%s' (%s)"
msgstr "Fehler beim Schreiben von '%s' (%s)."
-#: rerere.c:498
+#: rerere.c:482
#, c-format
msgid "failed to flush '%s'"
msgstr "Flush bei '%s' fehlgeschlagen."
-#: rerere.c:503 rerere.c:1039
+#: rerere.c:487 rerere.c:1023
#, c-format
msgid "could not parse conflict hunks in '%s'"
msgstr "Konnte Konflikt-Blöcke in '%s' nicht parsen."
-#: rerere.c:684
+#: rerere.c:668
#, c-format
msgid "failed utime() on '%s'"
msgstr "Fehler beim Aufruf von utime() auf '%s'."
-#: rerere.c:694
+#: rerere.c:678
#, c-format
msgid "writing '%s' failed"
msgstr "Schreiben von '%s' fehlgeschlagen."
-#: rerere.c:714
+#: rerere.c:698
#, c-format
msgid "Staged '%s' using previous resolution."
msgstr "'%s' mit vorheriger Konfliktauflösung zum Commit vorgemerkt."
-#: rerere.c:753
+#: rerere.c:737
#, c-format
msgid "Recorded resolution for '%s'."
msgstr "Konfliktauflösung für '%s' aufgezeichnet."
-#: rerere.c:788
+#: rerere.c:772
#, c-format
msgid "Resolved '%s' using previous resolution."
msgstr "Konflikte in '%s' mit vorheriger Konfliktauflösung beseitigt."
-#: rerere.c:803
+#: rerere.c:787
#, c-format
msgid "cannot unlink stray '%s'"
msgstr "Kann '%s' nicht löschen."
-#: rerere.c:807
+#: rerere.c:791
#, c-format
msgid "Recorded preimage for '%s'"
msgstr "Preimage für '%s' aufgezeichnet."
-#: rerere.c:881 submodule.c:2082 builtin/log.c:1992
+#: rerere.c:865 submodule.c:2088 builtin/log.c:1991
#: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:1890
#, c-format
msgid "could not create directory '%s'"
msgstr "Konnte Verzeichnis '%s' nicht erstellen."
-#: rerere.c:1057
+#: rerere.c:1041
#, c-format
msgid "failed to update conflicted state in '%s'"
msgstr "Fehler beim Aktualisieren des Konflikt-Status in '%s'."
-#: rerere.c:1068 rerere.c:1075
+#: rerere.c:1052 rerere.c:1059
#, c-format
msgid "no remembered resolution for '%s'"
msgstr "Keine aufgezeichnete Konfliktauflösung für '%s'."
-#: rerere.c:1077
+#: rerere.c:1061
#, c-format
msgid "cannot unlink '%s'"
msgstr "Kann '%s' nicht löschen."
-#: rerere.c:1087
+#: rerere.c:1071
#, c-format
msgid "Updated preimage for '%s'"
msgstr "Preimage für '%s' aktualisiert."
-#: rerere.c:1096
+#: rerere.c:1080
#, c-format
msgid "Forgot resolution for '%s'\n"
msgstr "Aufgezeichnete Konfliktauflösung für '%s' gelöscht.\n"
-#: rerere.c:1199
+#: rerere.c:1191
msgid "unable to open rr-cache directory"
msgstr "Konnte rr-cache Verzeichnis nicht öffnen."
@@ -6754,43 +7377,38 @@
msgid "could not determine HEAD revision"
msgstr "Konnte HEAD-Commit nicht bestimmen."
-#: reset.c:70 reset.c:76 sequencer.c:3460
+#: reset.c:70 reset.c:76 sequencer.c:3468
#, c-format
msgid "failed to find tree of %s"
msgstr "Fehler beim Finden des \"Tree\"-Objektes von %s."
-#: revision.c:2336
+#: revision.c:2338
msgid "--unpacked=<packfile> no longer supported"
msgstr "--unpacked=<Pack-Datei> wird nicht länger unterstützt"
-#: revision.c:2356
-#, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr "unbekannter Wert für --diff-merges: %s"
-
-#: revision.c:2694
+#: revision.c:2668
msgid "your current branch appears to be broken"
msgstr "Ihr aktueller Branch scheint fehlerhaft zu sein."
-#: revision.c:2697
+#: revision.c:2671
#, c-format
msgid "your current branch '%s' does not have any commits yet"
msgstr "Ihr aktueller Branch '%s' hat noch keine Commits."
-#: revision.c:2907
+#: revision.c:2877
msgid "-L does not yet support diff formats besides -p and -s"
msgstr "-L unterstützt noch keine anderen Diff-Formate außer -p und -s"
-#: run-command.c:764
+#: run-command.c:767
msgid "open /dev/null failed"
msgstr "Öffnen von /dev/null fehlgeschlagen"
-#: run-command.c:1271
+#: run-command.c:1274
#, c-format
msgid "cannot create async thread: %s"
msgstr "Konnte Thread für async nicht erzeugen: %s"
-#: run-command.c:1335
+#: run-command.c:1338
#, c-format
msgid ""
"The '%s' hook was ignored because it's not set as executable.\n"
@@ -6854,7 +7472,7 @@
msgid "could not delete '%s'"
msgstr "Konnte '%s' nicht löschen."
-#: sequencer.c:343 builtin/rebase.c:755 builtin/rebase.c:1596 builtin/rm.c:385
+#: sequencer.c:343 builtin/rebase.c:757 builtin/rebase.c:1602 builtin/rm.c:385
#, c-format
msgid "could not remove '%s'"
msgstr "Konnte '%s' nicht löschen"
@@ -6894,13 +7512,13 @@
"mit 'git add <Pfade>' oder 'git rm <Pfade>' und tragen Sie das Ergebnis mit\n"
"'git commit' ein"
-#: sequencer.c:434 sequencer.c:3062
+#: sequencer.c:434 sequencer.c:3070
#, c-format
msgid "could not lock '%s'"
msgstr "Konnte '%s' nicht sperren"
-#: sequencer.c:436 sequencer.c:2861 sequencer.c:3066 sequencer.c:3080
-#: sequencer.c:3337 sequencer.c:5326 strbuf.c:1168 wrapper.c:631
+#: sequencer.c:436 sequencer.c:2869 sequencer.c:3074 sequencer.c:3088
+#: sequencer.c:3345 sequencer.c:5334 strbuf.c:1168 wrapper.c:631
#, c-format
msgid "could not write to '%s'"
msgstr "Konnte nicht nach '%s' schreiben."
@@ -6910,8 +7528,8 @@
msgid "could not write eol to '%s'"
msgstr "Konnte EOL nicht nach '%s' schreiben."
-#: sequencer.c:446 sequencer.c:2866 sequencer.c:3068 sequencer.c:3082
-#: sequencer.c:3345
+#: sequencer.c:446 sequencer.c:2874 sequencer.c:3076 sequencer.c:3090
+#: sequencer.c:3353
#, c-format
msgid "failed to finalize '%s'"
msgstr "Fehler beim Fertigstellen von '%s'."
@@ -6931,7 +7549,7 @@
msgid "%s: fast-forward"
msgstr "%s: Vorspulen"
-#: sequencer.c:560 builtin/tag.c:566
+#: sequencer.c:560 builtin/tag.c:598
#, c-format
msgid "Invalid cleanup mode %s"
msgstr "Ungültiger \"cleanup\" Modus %s"
@@ -6944,60 +7562,60 @@
msgid "%s: Unable to write new index file"
msgstr "%s: Konnte neue Index-Datei nicht schreiben"
-#: sequencer.c:687
+#: sequencer.c:684
msgid "unable to update cache tree"
msgstr "Konnte Cache-Verzeichnis nicht aktualisieren."
-#: sequencer.c:701
+#: sequencer.c:698
msgid "could not resolve HEAD commit"
msgstr "Konnte HEAD-Commit nicht auflösen."
-#: sequencer.c:781
+#: sequencer.c:778
#, c-format
msgid "no key present in '%.*s'"
msgstr "Kein Schlüssel in '%.*s' vorhanden."
-#: sequencer.c:792
+#: sequencer.c:789
#, c-format
msgid "unable to dequote value of '%s'"
msgstr "Konnte Anführungszeichen von '%s' nicht entfernen."
-#: sequencer.c:829 wrapper.c:201 wrapper.c:371 builtin/am.c:710
-#: builtin/am.c:802 builtin/merge.c:1135 builtin/rebase.c:908
+#: sequencer.c:826 wrapper.c:201 wrapper.c:371 builtin/am.c:710
+#: builtin/am.c:802 builtin/merge.c:1136 builtin/rebase.c:910
#, c-format
msgid "could not open '%s' for reading"
msgstr "Konnte '%s' nicht zum Lesen öffnen."
-#: sequencer.c:839
+#: sequencer.c:836
msgid "'GIT_AUTHOR_NAME' already given"
msgstr "'GIT_AUTHOR_NAME' bereits angegeben."
-#: sequencer.c:844
+#: sequencer.c:841
msgid "'GIT_AUTHOR_EMAIL' already given"
msgstr "'GIT_AUTHOR_EMAIL' bereits angegeben."
-#: sequencer.c:849
+#: sequencer.c:846
msgid "'GIT_AUTHOR_DATE' already given"
msgstr "'GIT_AUTHOR_DATE' bereits angegeben."
-#: sequencer.c:853
+#: sequencer.c:850
#, c-format
msgid "unknown variable '%s'"
msgstr "Unbekannte Variable '%s'"
-#: sequencer.c:858
+#: sequencer.c:855
msgid "missing 'GIT_AUTHOR_NAME'"
msgstr "'GIT_AUTHOR_NAME' fehlt."
-#: sequencer.c:860
+#: sequencer.c:857
msgid "missing 'GIT_AUTHOR_EMAIL'"
msgstr "'GIT_AUTHOR_EMAIL' fehlt."
-#: sequencer.c:862
+#: sequencer.c:859
msgid "missing 'GIT_AUTHOR_DATE'"
msgstr "'GIT_AUTHOR_DATE' fehlt."
-#: sequencer.c:927
+#: sequencer.c:924
#, c-format
msgid ""
"you have staged changes in your working tree\n"
@@ -7028,11 +7646,11 @@
"\n"
" git rebase --continue\n"
-#: sequencer.c:1208
+#: sequencer.c:1211
msgid "'prepare-commit-msg' hook failed"
msgstr "'prepare-commit-msg' Hook fehlgeschlagen."
-#: sequencer.c:1214
+#: sequencer.c:1217
msgid ""
"Your name and email address were configured automatically based\n"
"on your username and hostname. Please check that they are accurate.\n"
@@ -7060,7 +7678,7 @@
"\n"
" git commit --amend --reset-author\n"
-#: sequencer.c:1227
+#: sequencer.c:1230
msgid ""
"Your name and email address were configured automatically based\n"
"on your username and hostname. Please check that they are accurate.\n"
@@ -7086,340 +7704,340 @@
"\n"
" git commit --amend --reset-author\n"
-#: sequencer.c:1269
+#: sequencer.c:1272
msgid "couldn't look up newly created commit"
msgstr "Konnte neu erstellten Commit nicht nachschlagen."
-#: sequencer.c:1271
+#: sequencer.c:1274
msgid "could not parse newly created commit"
msgstr "Konnte neu erstellten Commit nicht analysieren."
-#: sequencer.c:1317
+#: sequencer.c:1320
msgid "unable to resolve HEAD after creating commit"
msgstr "Konnte HEAD nicht auflösen, nachdem der Commit erstellt wurde."
-#: sequencer.c:1319
+#: sequencer.c:1322
msgid "detached HEAD"
msgstr "losgelöster HEAD"
-#: sequencer.c:1323
+#: sequencer.c:1326
msgid " (root-commit)"
msgstr " (Root-Commit)"
-#: sequencer.c:1344
+#: sequencer.c:1347
msgid "could not parse HEAD"
msgstr "Konnte HEAD nicht parsen."
-#: sequencer.c:1346
+#: sequencer.c:1349
#, c-format
msgid "HEAD %s is not a commit!"
msgstr "HEAD %s ist kein Commit!"
-#: sequencer.c:1350 sequencer.c:1425 builtin/commit.c:1577
+#: sequencer.c:1353 sequencer.c:1431 builtin/commit.c:1577
msgid "could not parse HEAD commit"
msgstr "Konnte Commit von HEAD nicht analysieren."
-#: sequencer.c:1403 sequencer.c:2100
+#: sequencer.c:1409 sequencer.c:2108
msgid "unable to parse commit author"
msgstr "Konnte Commit-Autor nicht parsen."
-#: sequencer.c:1414 builtin/am.c:1566 builtin/merge.c:701
+#: sequencer.c:1420 builtin/am.c:1566 builtin/merge.c:702
msgid "git write-tree failed to write a tree"
msgstr "\"git write-tree\" schlug beim Schreiben eines \"Tree\"-Objektes fehl"
-#: sequencer.c:1447 sequencer.c:1565
+#: sequencer.c:1453 sequencer.c:1573
#, c-format
msgid "unable to read commit message from '%s'"
msgstr "Konnte Commit-Beschreibung von '%s' nicht lesen."
-#: sequencer.c:1476 sequencer.c:1508
+#: sequencer.c:1484 sequencer.c:1516
#, c-format
msgid "invalid author identity '%s'"
msgstr "ungültige Autor-Identität '%s'"
-#: sequencer.c:1482
+#: sequencer.c:1490
msgid "corrupt author: missing date information"
msgstr "unbrauchbarer Autor: Datumsinformationen fehlen"
-#: sequencer.c:1521 builtin/am.c:1593 builtin/commit.c:1678 builtin/merge.c:904
-#: builtin/merge.c:929 t/helper/test-fast-rebase.c:78
+#: sequencer.c:1529 builtin/am.c:1593 builtin/commit.c:1678 builtin/merge.c:905
+#: builtin/merge.c:930 t/helper/test-fast-rebase.c:78
msgid "failed to write commit object"
msgstr "Fehler beim Schreiben des Commit-Objektes."
-#: sequencer.c:1548 sequencer.c:4283 t/helper/test-fast-rebase.c:198
+#: sequencer.c:1556 sequencer.c:4291 t/helper/test-fast-rebase.c:198
#, c-format
msgid "could not update %s"
msgstr "Konnte %s nicht aktualisieren."
-#: sequencer.c:1597
+#: sequencer.c:1605
#, c-format
msgid "could not parse commit %s"
msgstr "Konnte Commit %s nicht parsen."
-#: sequencer.c:1602
+#: sequencer.c:1610
#, c-format
msgid "could not parse parent commit %s"
msgstr "Konnte Eltern-Commit %s nicht parsen."
-#: sequencer.c:1685 sequencer.c:1796
+#: sequencer.c:1693 sequencer.c:1804
#, c-format
msgid "unknown command: %d"
msgstr "Unbekannter Befehl: %d"
-#: sequencer.c:1743 sequencer.c:1768
+#: sequencer.c:1751 sequencer.c:1776
#, c-format
msgid "This is a combination of %d commits."
msgstr "Das ist eine Kombination aus %d Commits."
-#: sequencer.c:1753
+#: sequencer.c:1761
msgid "need a HEAD to fixup"
msgstr "benötige HEAD für fixup"
-#: sequencer.c:1755 sequencer.c:3372
+#: sequencer.c:1763 sequencer.c:3380
msgid "could not read HEAD"
msgstr "Konnte HEAD nicht lesen"
-#: sequencer.c:1757
+#: sequencer.c:1765
msgid "could not read HEAD's commit message"
msgstr "Konnte Commit-Beschreibung von HEAD nicht lesen"
-#: sequencer.c:1763
+#: sequencer.c:1771
#, c-format
msgid "cannot write '%s'"
msgstr "kann '%s' nicht schreiben"
-#: sequencer.c:1770 git-rebase--preserve-merges.sh:486
+#: sequencer.c:1778 git-rebase--preserve-merges.sh:486
msgid "This is the 1st commit message:"
msgstr "Das ist die erste Commit-Beschreibung:"
-#: sequencer.c:1778
+#: sequencer.c:1786
#, c-format
msgid "could not read commit message of %s"
msgstr "Konnte Commit-Beschreibung von %s nicht lesen."
-#: sequencer.c:1785
+#: sequencer.c:1793
#, c-format
msgid "This is the commit message #%d:"
msgstr "Das ist Commit-Beschreibung #%d:"
-#: sequencer.c:1791
+#: sequencer.c:1799
#, c-format
msgid "The commit message #%d will be skipped:"
msgstr "Die Commit-Beschreibung #%d wird ausgelassen:"
-#: sequencer.c:1879
+#: sequencer.c:1887
msgid "your index file is unmerged."
msgstr "Ihre Index-Datei ist nicht zusammengeführt."
-#: sequencer.c:1886
+#: sequencer.c:1894
msgid "cannot fixup root commit"
msgstr "kann fixup nicht auf Root-Commit anwenden"
-#: sequencer.c:1905
+#: sequencer.c:1913
#, c-format
msgid "commit %s is a merge but no -m option was given."
msgstr "Commit %s ist ein Merge, aber die Option -m wurde nicht angegeben."
-#: sequencer.c:1913 sequencer.c:1921
+#: sequencer.c:1921 sequencer.c:1929
#, c-format
msgid "commit %s does not have parent %d"
msgstr "Commit %s hat keinen Eltern-Commit %d"
-#: sequencer.c:1927
+#: sequencer.c:1935
#, c-format
msgid "cannot get commit message for %s"
msgstr "Kann keine Commit-Beschreibung für %s bekommen."
#. TRANSLATORS: The first %s will be a "todo" command like
#. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1946
+#: sequencer.c:1954
#, c-format
msgid "%s: cannot parse parent commit %s"
msgstr "%s: kann Eltern-Commit %s nicht parsen"
-#: sequencer.c:2011
+#: sequencer.c:2019
#, c-format
msgid "could not rename '%s' to '%s'"
msgstr "Konnte '%s' nicht zu '%s' umbenennen."
-#: sequencer.c:2071
+#: sequencer.c:2079
#, c-format
msgid "could not revert %s... %s"
msgstr "Konnte \"revert\" nicht auf %s... (%s) ausführen"
-#: sequencer.c:2072
+#: sequencer.c:2080
#, c-format
msgid "could not apply %s... %s"
msgstr "Konnte %s... (%s) nicht anwenden"
-#: sequencer.c:2092
+#: sequencer.c:2100
#, c-format
msgid "dropping %s %s -- patch contents already upstream\n"
msgstr "Weglassen von %s %s -- Patch-Inhalte sind bereits im Upstream-Branch\n"
-#: sequencer.c:2150
+#: sequencer.c:2158
#, c-format
msgid "git %s: failed to read the index"
msgstr "git %s: Fehler beim Lesen des Index"
-#: sequencer.c:2157
+#: sequencer.c:2165
#, c-format
msgid "git %s: failed to refresh the index"
msgstr "git %s: Fehler beim Aktualisieren des Index"
-#: sequencer.c:2234
+#: sequencer.c:2242
#, c-format
msgid "%s does not accept arguments: '%s'"
msgstr "%s akzeptiert keine Argumente: '%s'"
-#: sequencer.c:2243
+#: sequencer.c:2251
#, c-format
msgid "missing arguments for %s"
msgstr "Fehlende Argumente für %s."
-#: sequencer.c:2274
+#: sequencer.c:2282
#, c-format
msgid "could not parse '%s'"
msgstr "Konnte '%s' nicht parsen."
-#: sequencer.c:2335
+#: sequencer.c:2343
#, c-format
msgid "invalid line %d: %.*s"
msgstr "Ungültige Zeile %d: %.*s"
-#: sequencer.c:2346
+#: sequencer.c:2354
#, c-format
msgid "cannot '%s' without a previous commit"
msgstr "Kann '%s' nicht ohne vorherigen Commit ausführen"
-#: sequencer.c:2432
+#: sequencer.c:2440
msgid "cancelling a cherry picking in progress"
msgstr "Abbrechen eines laufenden \"cherry-pick\""
-#: sequencer.c:2441
+#: sequencer.c:2449
msgid "cancelling a revert in progress"
msgstr "Abbrechen eines laufenden \"revert\""
-#: sequencer.c:2485
+#: sequencer.c:2493
msgid "please fix this using 'git rebase --edit-todo'."
msgstr ""
"Bitte beheben Sie dieses, indem Sie 'git rebase --edit-todo' ausführen."
-#: sequencer.c:2487
+#: sequencer.c:2495
#, c-format
msgid "unusable instruction sheet: '%s'"
msgstr "Unbenutzbares Instruktionsblatt: '%s'"
-#: sequencer.c:2492
+#: sequencer.c:2500
msgid "no commits parsed."
msgstr "Keine Commits geparst."
-#: sequencer.c:2503
+#: sequencer.c:2511
msgid "cannot cherry-pick during a revert."
msgstr "Kann Cherry-Pick nicht während eines Reverts ausführen."
-#: sequencer.c:2505
+#: sequencer.c:2513
msgid "cannot revert during a cherry-pick."
msgstr "Kann Revert nicht während eines Cherry-Picks ausführen."
-#: sequencer.c:2583
+#: sequencer.c:2591
#, c-format
msgid "invalid value for %s: %s"
msgstr "Ungültiger Wert für %s: %s"
-#: sequencer.c:2690
+#: sequencer.c:2698
msgid "unusable squash-onto"
msgstr "Unbenutzbares squash-onto."
-#: sequencer.c:2710
+#: sequencer.c:2718
#, c-format
msgid "malformed options sheet: '%s'"
msgstr "Fehlerhaftes Optionsblatt: '%s'"
-#: sequencer.c:2803 sequencer.c:4636
+#: sequencer.c:2811 sequencer.c:4644
msgid "empty commit set passed"
msgstr "leere Menge von Commits übergeben"
-#: sequencer.c:2820
+#: sequencer.c:2828
msgid "revert is already in progress"
msgstr "\"revert\" ist bereits im Gange"
-#: sequencer.c:2822
+#: sequencer.c:2830
#, c-format
msgid "try \"git revert (--continue | %s--abort | --quit)\""
msgstr "Versuchen Sie \"git revert (--continue | %s--abort | --quit)\""
-#: sequencer.c:2825
+#: sequencer.c:2833
msgid "cherry-pick is already in progress"
msgstr "\"cherry-pick\" wird bereits durchgeführt"
-#: sequencer.c:2827
+#: sequencer.c:2835
#, c-format
msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
msgstr "Versuchen Sie \"git cherry-pick (--continue | %s--abort | --quit)\""
-#: sequencer.c:2841
+#: sequencer.c:2849
#, c-format
msgid "could not create sequencer directory '%s'"
msgstr "Konnte \"sequencer\"-Verzeichnis '%s' nicht erstellen."
-#: sequencer.c:2856
+#: sequencer.c:2864
msgid "could not lock HEAD"
msgstr "Konnte HEAD nicht sperren"
-#: sequencer.c:2916 sequencer.c:4371
+#: sequencer.c:2924 sequencer.c:4379
msgid "no cherry-pick or revert in progress"
msgstr "kein \"cherry-pick\" oder \"revert\" im Gange"
-#: sequencer.c:2918 sequencer.c:2929
+#: sequencer.c:2926 sequencer.c:2937
msgid "cannot resolve HEAD"
msgstr "kann HEAD nicht auflösen"
-#: sequencer.c:2920 sequencer.c:2964
+#: sequencer.c:2928 sequencer.c:2972
msgid "cannot abort from a branch yet to be born"
msgstr "kann nicht abbrechen: bin auf einem Branch, der noch nicht geboren ist"
-#: sequencer.c:2950 builtin/grep.c:756
+#: sequencer.c:2958 builtin/grep.c:757
#, c-format
msgid "cannot open '%s'"
msgstr "kann '%s' nicht öffnen"
-#: sequencer.c:2952
+#: sequencer.c:2960
#, c-format
msgid "cannot read '%s': %s"
msgstr "Kann '%s' nicht lesen: %s"
-#: sequencer.c:2953
+#: sequencer.c:2961
msgid "unexpected end of file"
msgstr "Unerwartetes Dateiende"
-#: sequencer.c:2959
+#: sequencer.c:2967
#, c-format
msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
msgstr "gespeicherte \"pre-cherry-pick\" HEAD Datei '%s' ist beschädigt"
-#: sequencer.c:2970
+#: sequencer.c:2978
msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
msgstr ""
"Sie scheinen HEAD verändert zu haben. Keine Rückspulung, prüfen Sie HEAD."
-#: sequencer.c:3011
+#: sequencer.c:3019
msgid "no revert in progress"
msgstr "Kein Revert im Gange"
-#: sequencer.c:3020
+#: sequencer.c:3028
msgid "no cherry-pick in progress"
msgstr "kein \"cherry-pick\" im Gange"
-#: sequencer.c:3030
+#: sequencer.c:3038
msgid "failed to skip the commit"
msgstr "Überspringen des Commits fehlgeschlagen"
-#: sequencer.c:3037
+#: sequencer.c:3045
msgid "there is nothing to skip"
msgstr "Nichts zum Überspringen vorhanden"
-#: sequencer.c:3040
+#: sequencer.c:3048
#, c-format
msgid ""
"have you committed already?\n"
@@ -7428,16 +8046,16 @@
"Haben Sie bereits committet?\n"
"Versuchen Sie \"git %s --continue\""
-#: sequencer.c:3202 sequencer.c:4263
+#: sequencer.c:3210 sequencer.c:4271
msgid "cannot read HEAD"
msgstr "Kann HEAD nicht lesen"
-#: sequencer.c:3219
+#: sequencer.c:3227
#, c-format
msgid "unable to copy '%s' to '%s'"
msgstr "Konnte '%s' nicht nach '%s' kopieren."
-#: sequencer.c:3227
+#: sequencer.c:3235
#, c-format
msgid ""
"You can amend the commit now, with\n"
@@ -7456,27 +8074,27 @@
"\n"
" git rebase --continue\n"
-#: sequencer.c:3237
+#: sequencer.c:3245
#, c-format
msgid "Could not apply %s... %.*s"
msgstr "Konnte %s... (%.*s) nicht anwenden"
-#: sequencer.c:3244
+#: sequencer.c:3252
#, c-format
msgid "Could not merge %.*s"
msgstr "Konnte \"%.*s\" nicht zusammenführen."
-#: sequencer.c:3258 sequencer.c:3262 builtin/difftool.c:640
+#: sequencer.c:3266 sequencer.c:3270 builtin/difftool.c:640
#, c-format
msgid "could not copy '%s' to '%s'"
msgstr "Konnte '%s' nicht nach '%s' kopieren."
-#: sequencer.c:3274
+#: sequencer.c:3282
#, c-format
msgid "Executing: %s\n"
msgstr "Führe aus: %s\n"
-#: sequencer.c:3289
+#: sequencer.c:3297
#, c-format
msgid ""
"execution failed: %s\n"
@@ -7492,11 +8110,11 @@
"\n"
"ausführen.\n"
-#: sequencer.c:3295
+#: sequencer.c:3303
msgid "and made changes to the index and/or the working tree\n"
msgstr "Der Index und/oder das Arbeitsverzeichnis wurde geändert.\n"
-#: sequencer.c:3301
+#: sequencer.c:3309
#, c-format
msgid ""
"execution succeeded: %s\n"
@@ -7514,91 +8132,91 @@
" git rebase --continue\n"
"\n"
-#: sequencer.c:3362
+#: sequencer.c:3370
#, c-format
msgid "illegal label name: '%.*s'"
msgstr "Unerlaubter Beschriftungsname: '%.*s'"
-#: sequencer.c:3416
+#: sequencer.c:3424
msgid "writing fake root commit"
msgstr "unechten Root-Commit schreiben"
-#: sequencer.c:3421
+#: sequencer.c:3429
msgid "writing squash-onto"
msgstr "squash-onto schreiben"
-#: sequencer.c:3505
+#: sequencer.c:3513
#, c-format
msgid "could not resolve '%s'"
msgstr "Konnte '%s' nicht auflösen."
-#: sequencer.c:3538
+#: sequencer.c:3546
msgid "cannot merge without a current revision"
msgstr "Kann nicht ohne einen aktuellen Commit mergen."
-#: sequencer.c:3560
+#: sequencer.c:3568
#, c-format
msgid "unable to parse '%.*s'"
msgstr "Konnte '%.*s' nicht parsen."
-#: sequencer.c:3569
+#: sequencer.c:3577
#, c-format
msgid "nothing to merge: '%.*s'"
msgstr "Nichts zum Zusammenführen: '%.*s'"
-#: sequencer.c:3581
+#: sequencer.c:3589
msgid "octopus merge cannot be executed on top of a [new root]"
msgstr ""
"Oktopus-Merge kann nicht auf Basis von [neuem Root-Commit] ausgeführt werden."
-#: sequencer.c:3597
+#: sequencer.c:3605
#, c-format
msgid "could not get commit message of '%s'"
msgstr "Konnte keine Commit-Beschreibung von '%s' bekommen."
-#: sequencer.c:3780
+#: sequencer.c:3788
#, c-format
msgid "could not even attempt to merge '%.*s'"
msgstr "Konnte nicht einmal versuchen '%.*s' zu mergen."
-#: sequencer.c:3796
+#: sequencer.c:3804
msgid "merge: Unable to write new index file"
msgstr "merge: Konnte neue Index-Datei nicht schreiben."
-#: sequencer.c:3870
+#: sequencer.c:3878
msgid "Cannot autostash"
msgstr "Kann automatischen Stash nicht erzeugen."
-#: sequencer.c:3873
+#: sequencer.c:3881
#, c-format
msgid "Unexpected stash response: '%s'"
msgstr "Unerwartete 'stash'-Antwort: '%s'"
-#: sequencer.c:3879
+#: sequencer.c:3887
#, c-format
msgid "Could not create directory for '%s'"
msgstr "Konnte Verzeichnis für '%s' nicht erstellen."
-#: sequencer.c:3882
+#: sequencer.c:3890
#, c-format
msgid "Created autostash: %s\n"
msgstr "Automatischen Stash erzeugt: %s\n"
-#: sequencer.c:3886
+#: sequencer.c:3894
msgid "could not reset --hard"
msgstr "Konnte 'reset --hard' nicht ausführen."
-#: sequencer.c:3911
+#: sequencer.c:3919
#, c-format
msgid "Applied autostash.\n"
msgstr "Automatischen Stash angewendet.\n"
-#: sequencer.c:3923
+#: sequencer.c:3931
#, c-format
msgid "cannot store %s"
msgstr "kann %s nicht speichern"
-#: sequencer.c:3926
+#: sequencer.c:3934
#, c-format
msgid ""
"%s\n"
@@ -7609,29 +8227,29 @@
"Ihre Änderungen sind im Stash sicher.\n"
"Sie können jederzeit \"git stash pop\" oder \"git stash drop\" ausführen.\n"
-#: sequencer.c:3931
+#: sequencer.c:3939
msgid "Applying autostash resulted in conflicts."
msgstr "Beim Anwenden des automatischen Stash traten Konflikte auf."
-#: sequencer.c:3932
+#: sequencer.c:3940
msgid "Autostash exists; creating a new stash entry."
msgstr "Automatischer Stash existiert; ein neuer Stash-Eintrag wird erstellt."
-#: sequencer.c:4025 git-rebase--preserve-merges.sh:769
+#: sequencer.c:4033 git-rebase--preserve-merges.sh:769
msgid "could not detach HEAD"
msgstr "Konnte HEAD nicht loslösen"
-#: sequencer.c:4040
+#: sequencer.c:4048
#, c-format
msgid "Stopped at HEAD\n"
msgstr "Angehalten bei HEAD\n"
-#: sequencer.c:4042
+#: sequencer.c:4050
#, c-format
msgid "Stopped at %s\n"
msgstr "Angehalten bei %s\n"
-#: sequencer.c:4050
+#: sequencer.c:4058
#, c-format
msgid ""
"Could not execute the todo command\n"
@@ -7653,60 +8271,60 @@
" git rebase --edit-todo\n"
" git rebase --continue\n"
-#: sequencer.c:4096
+#: sequencer.c:4104
#, c-format
msgid "Rebasing (%d/%d)%s"
msgstr "Rebase (%d/%d)%s"
-#: sequencer.c:4141
+#: sequencer.c:4149
#, c-format
msgid "Stopped at %s... %.*s\n"
msgstr "Angehalten bei %s... %.*s\n"
-#: sequencer.c:4212
+#: sequencer.c:4220
#, c-format
msgid "unknown command %d"
msgstr "Unbekannter Befehl %d"
-#: sequencer.c:4271
+#: sequencer.c:4279
msgid "could not read orig-head"
msgstr "Konnte orig-head nicht lesen."
-#: sequencer.c:4276
+#: sequencer.c:4284
msgid "could not read 'onto'"
msgstr "Konnte 'onto' nicht lesen."
-#: sequencer.c:4290
+#: sequencer.c:4298
#, c-format
msgid "could not update HEAD to %s"
msgstr "Konnte HEAD nicht auf %s aktualisieren."
-#: sequencer.c:4350
+#: sequencer.c:4358
#, c-format
msgid "Successfully rebased and updated %s.\n"
msgstr "Erfolgreich Rebase ausgeführt und %s aktualisiert.\n"
-#: sequencer.c:4383
+#: sequencer.c:4391
msgid "cannot rebase: You have unstaged changes."
msgstr ""
"Rebase nicht möglich: Sie haben Änderungen, die nicht zum Commit\n"
"vorgemerkt sind."
-#: sequencer.c:4392
+#: sequencer.c:4400
msgid "cannot amend non-existing commit"
msgstr "Kann nicht existierenden Commit nicht nachbessern."
-#: sequencer.c:4394
+#: sequencer.c:4402
#, c-format
msgid "invalid file: '%s'"
msgstr "Ungültige Datei: '%s'"
-#: sequencer.c:4396
+#: sequencer.c:4404
#, c-format
msgid "invalid contents: '%s'"
msgstr "Ungültige Inhalte: '%s'"
-#: sequencer.c:4399
+#: sequencer.c:4407
msgid ""
"\n"
"You have uncommitted changes in your working tree. Please, commit them\n"
@@ -7717,50 +8335,50 @@
"committen Sie diese zuerst und führen Sie dann 'git rebase --continue'\n"
"erneut aus."
-#: sequencer.c:4435 sequencer.c:4474
+#: sequencer.c:4443 sequencer.c:4482
#, c-format
msgid "could not write file: '%s'"
msgstr "Konnte Datei nicht schreiben: '%s'"
-#: sequencer.c:4490
+#: sequencer.c:4498
msgid "could not remove CHERRY_PICK_HEAD"
msgstr "Konnte CHERRY_PICK_HEAD nicht löschen."
-#: sequencer.c:4497
+#: sequencer.c:4505
msgid "could not commit staged changes."
msgstr "Konnte Änderungen aus der Staging-Area nicht committen."
-#: sequencer.c:4613
+#: sequencer.c:4621
#, c-format
msgid "%s: can't cherry-pick a %s"
msgstr "%s: %s kann nicht in \"cherry-pick\" benutzt werden"
-#: sequencer.c:4617
+#: sequencer.c:4625
#, c-format
msgid "%s: bad revision"
msgstr "%s: ungültiger Commit"
-#: sequencer.c:4652
+#: sequencer.c:4660
msgid "can't revert as initial commit"
msgstr "Kann nicht als allerersten Commit einen Revert ausführen."
-#: sequencer.c:5129
+#: sequencer.c:5137
msgid "make_script: unhandled options"
msgstr "make_script: unbehandelte Optionen"
-#: sequencer.c:5132
+#: sequencer.c:5140
msgid "make_script: error preparing revisions"
msgstr "make_script: Fehler beim Vorbereiten der Commits"
-#: sequencer.c:5374 sequencer.c:5391
+#: sequencer.c:5382 sequencer.c:5399
msgid "nothing to do"
msgstr "Nichts zu tun."
-#: sequencer.c:5410
+#: sequencer.c:5418
msgid "could not skip unnecessary pick commands"
msgstr "Konnte unnötige \"pick\"-Befehle nicht auslassen."
-#: sequencer.c:5504
+#: sequencer.c:5512
msgid "the script was already rearranged."
msgstr "Das Script wurde bereits umgeordnet."
@@ -7775,7 +8393,7 @@
"%s: no such path in the working tree.\n"
"Use 'git <command> -- <path>...' to specify paths that do not exist locally."
msgstr ""
-"%s: kein solcher Pfad im Arbeitsverzeichnis.\n"
+"%s: Pfad nicht im Arbeitsverzeichnis gefunden.\n"
"Benutzen Sie 'git <Befehl> -- <Pfad>...' zur Angabe von Pfaden, die lokal\n"
"nicht existieren."
@@ -7929,370 +8547,6 @@
msgid "setsid failed"
msgstr "setsid fehlgeschlagen"
-#: sha1-file.c:480
-#, c-format
-msgid "object directory %s does not exist; check .git/objects/info/alternates"
-msgstr ""
-"Objektverzeichnis %s existiert nicht; prüfe .git/objects/info/alternates"
-
-#: sha1-file.c:531
-#, c-format
-msgid "unable to normalize alternate object path: %s"
-msgstr "Konnte alternativen Objektpfad '%s' nicht normalisieren."
-
-#: sha1-file.c:603
-#, c-format
-msgid "%s: ignoring alternate object stores, nesting too deep"
-msgstr "%s: ignoriere alternative Objektspeicher - Verschachtelung zu tief"
-
-#: sha1-file.c:610
-#, c-format
-msgid "unable to normalize object directory: %s"
-msgstr "Konnte Objektverzeichnis '%s' nicht normalisieren."
-
-#: sha1-file.c:653
-msgid "unable to fdopen alternates lockfile"
-msgstr "Konnte fdopen nicht auf Lock-Datei für \"alternates\" aufrufen."
-
-#: sha1-file.c:671
-msgid "unable to read alternates file"
-msgstr "Konnte \"alternates\"-Datei nicht lesen."
-
-#: sha1-file.c:678
-msgid "unable to move new alternates file into place"
-msgstr "Konnte neue \"alternates\"-Datei nicht übernehmen."
-
-#: sha1-file.c:713
-#, c-format
-msgid "path '%s' does not exist"
-msgstr "Pfad '%s' existiert nicht"
-
-#: sha1-file.c:734
-#, c-format
-msgid "reference repository '%s' as a linked checkout is not supported yet."
-msgstr ""
-"Referenziertes Repository '%s' wird noch nicht als verknüpftes\n"
-"Arbeitsverzeichnis unterstützt."
-
-#: sha1-file.c:740
-#, c-format
-msgid "reference repository '%s' is not a local repository."
-msgstr "Referenziertes Repository '%s' ist kein lokales Repository."
-
-#: sha1-file.c:746
-#, c-format
-msgid "reference repository '%s' is shallow"
-msgstr ""
-"Referenziertes Repository '%s' hat eine unvollständige Historie (shallow)."
-
-#: sha1-file.c:754
-#, c-format
-msgid "reference repository '%s' is grafted"
-msgstr ""
-"Referenziertes Repository '%s' ist mit künstlichen Vorgängern (\"grafts\") "
-"eingehängt."
-
-#: sha1-file.c:814
-#, c-format
-msgid "invalid line while parsing alternate refs: %s"
-msgstr "Ungültige Zeile beim Parsen alternativer Referenzen: %s"
-
-#: sha1-file.c:964
-#, c-format
-msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
-msgstr "Versuche mmap %<PRIuMAX> über Limit %<PRIuMAX>."
-
-#: sha1-file.c:985
-msgid "mmap failed"
-msgstr "mmap fehlgeschlagen"
-
-#: sha1-file.c:1149
-#, c-format
-msgid "object file %s is empty"
-msgstr "Objektdatei %s ist leer."
-
-#: sha1-file.c:1284 sha1-file.c:2477
-#, c-format
-msgid "corrupt loose object '%s'"
-msgstr "Fehlerhaftes loses Objekt '%s'."
-
-#: sha1-file.c:1286 sha1-file.c:2481
-#, c-format
-msgid "garbage at end of loose object '%s'"
-msgstr "Nutzlose Daten am Ende von losem Objekt '%s'."
-
-#: sha1-file.c:1328
-msgid "invalid object type"
-msgstr "ungültiger Objekt-Typ"
-
-#: sha1-file.c:1412
-#, c-format
-msgid "unable to unpack %s header with --allow-unknown-type"
-msgstr "Konnte %s Kopfbereich nicht mit --allow-unknown-type entpacken."
-
-#: sha1-file.c:1415
-#, c-format
-msgid "unable to unpack %s header"
-msgstr "Konnte %s Kopfbereich nicht entpacken."
-
-#: sha1-file.c:1421
-#, c-format
-msgid "unable to parse %s header with --allow-unknown-type"
-msgstr "Konnte %s Kopfbereich mit --allow-unknown-type nicht parsen."
-
-#: sha1-file.c:1424
-#, c-format
-msgid "unable to parse %s header"
-msgstr "Konnte %s Kopfbereich nicht parsen."
-
-#: sha1-file.c:1651
-#, c-format
-msgid "failed to read object %s"
-msgstr "Konnte Objekt %s nicht lesen."
-
-#: sha1-file.c:1655
-#, c-format
-msgid "replacement %s not found for %s"
-msgstr "Ersetzung %s für %s nicht gefunden."
-
-#: sha1-file.c:1659
-#, c-format
-msgid "loose object %s (stored in %s) is corrupt"
-msgstr "Loses Objekt %s (gespeichert in %s) ist beschädigt."
-
-#: sha1-file.c:1663
-#, c-format
-msgid "packed object %s (stored in %s) is corrupt"
-msgstr "Gepacktes Objekt %s (gespeichert in %s) ist beschädigt."
-
-#: sha1-file.c:1768
-#, c-format
-msgid "unable to write file %s"
-msgstr "Konnte Datei %s nicht schreiben."
-
-#: sha1-file.c:1775
-#, c-format
-msgid "unable to set permission to '%s'"
-msgstr "Konnte Zugriffsberechtigung auf '%s' nicht setzen."
-
-#: sha1-file.c:1782
-msgid "file write error"
-msgstr "Fehler beim Schreiben einer Datei."
-
-#: sha1-file.c:1802
-msgid "error when closing loose object file"
-msgstr "Fehler beim Schließen der Datei für lose Objekte."
-
-#: sha1-file.c:1867
-#, c-format
-msgid "insufficient permission for adding an object to repository database %s"
-msgstr ""
-"Unzureichende Berechtigung zum Hinzufügen eines Objektes zur Repository-"
-"Datenbank %s"
-
-#: sha1-file.c:1869
-msgid "unable to create temporary file"
-msgstr "Konnte temporäre Datei nicht erstellen."
-
-#: sha1-file.c:1893
-msgid "unable to write loose object file"
-msgstr "Fehler beim Schreiben der Datei für lose Objekte."
-
-#: sha1-file.c:1899
-#, c-format
-msgid "unable to deflate new object %s (%d)"
-msgstr "Konnte neues Objekt %s (%d) nicht komprimieren."
-
-#: sha1-file.c:1903
-#, c-format
-msgid "deflateEnd on object %s failed (%d)"
-msgstr "deflateEnd auf Objekt %s fehlgeschlagen (%d)"
-
-#: sha1-file.c:1907
-#, c-format
-msgid "confused by unstable object source data for %s"
-msgstr "Fehler wegen instabilen Objektquelldaten für %s"
-
-#: sha1-file.c:1917 builtin/pack-objects.c:1086
-#, c-format
-msgid "failed utime() on %s"
-msgstr "Fehler beim Aufruf von utime() auf '%s'."
-
-#: sha1-file.c:1994
-#, c-format
-msgid "cannot read object for %s"
-msgstr "Kann Objekt für %s nicht lesen."
-
-#: sha1-file.c:2045
-msgid "corrupt commit"
-msgstr "fehlerhafter Commit"
-
-#: sha1-file.c:2053
-msgid "corrupt tag"
-msgstr "fehlerhaftes Tag"
-
-#: sha1-file.c:2153
-#, c-format
-msgid "read error while indexing %s"
-msgstr "Lesefehler beim Indizieren von '%s'."
-
-#: sha1-file.c:2156
-#, c-format
-msgid "short read while indexing %s"
-msgstr "read() zu kurz beim Indizieren von '%s'."
-
-#: sha1-file.c:2229 sha1-file.c:2239
-#, c-format
-msgid "%s: failed to insert into database"
-msgstr "%s: Fehler beim Einfügen in die Datenbank"
-
-#: sha1-file.c:2245
-#, c-format
-msgid "%s: unsupported file type"
-msgstr "%s: nicht unterstützte Dateiart"
-
-#: sha1-file.c:2269
-#, c-format
-msgid "%s is not a valid object"
-msgstr "%s ist kein gültiges Objekt"
-
-#: sha1-file.c:2271
-#, c-format
-msgid "%s is not a valid '%s' object"
-msgstr "%s ist kein gültiges '%s' Objekt"
-
-#: sha1-file.c:2298 builtin/index-pack.c:192
-#, c-format
-msgid "unable to open %s"
-msgstr "kann %s nicht öffnen"
-
-#: sha1-file.c:2488 sha1-file.c:2541
-#, c-format
-msgid "hash mismatch for %s (expected %s)"
-msgstr "Hash für %s stimmt nicht überein (%s erwartet)."
-
-#: sha1-file.c:2512
-#, c-format
-msgid "unable to mmap %s"
-msgstr "Konnte mmap nicht auf %s ausführen."
-
-#: sha1-file.c:2517
-#, c-format
-msgid "unable to unpack header of %s"
-msgstr "Konnte Kopfbereich von %s nicht entpacken."
-
-#: sha1-file.c:2523
-#, c-format
-msgid "unable to parse header of %s"
-msgstr "Konnte Kopfbereich von %s nicht parsen."
-
-#: sha1-file.c:2534
-#, c-format
-msgid "unable to unpack contents of %s"
-msgstr "Konnte Inhalt von %s nicht entpacken."
-
-#: sha1-name.c:486
-#, c-format
-msgid "short SHA1 %s is ambiguous"
-msgstr "Kurzer SHA-1 %s ist mehrdeutig."
-
-#: sha1-name.c:497
-msgid "The candidates are:"
-msgstr "Die Kandidaten sind:"
-
-#: sha1-name.c:796
-msgid ""
-"Git normally never creates a ref that ends with 40 hex characters\n"
-"because it will be ignored when you just specify 40-hex. These refs\n"
-"may be created by mistake. For example,\n"
-"\n"
-" git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
-"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
-msgstr ""
-"Git erzeugt normalerweise keine Referenzen die mit\n"
-"40 Hex-Zeichen enden, da diese ignoriert werden wenn\n"
-"Sie diese angeben. Diese Referenzen könnten aus Versehen\n"
-"erzeugt worden sein. Zum Beispiel,\n"
-"\n"
-" git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"wobei \"$br\" leer ist und eine 40-Hex-Referenz erzeugt\n"
-"wurde. Bitte prüfen Sie diese Referenzen und löschen\n"
-"Sie sie gegebenenfalls. Unterdrücken Sie diese Meldung\n"
-"indem Sie \"git config advice.objectNameWarning false\"\n"
-"ausführen."
-
-#: sha1-name.c:916
-#, c-format
-msgid "log for '%.*s' only goes back to %s"
-msgstr "Log für '%.*s' geht nur bis %s zurück"
-
-#: sha1-name.c:924
-#, c-format
-msgid "log for '%.*s' only has %d entries"
-msgstr "Log für '%.*s' hat nur %d Einträge"
-
-#: sha1-name.c:1702
-#, c-format
-msgid "path '%s' exists on disk, but not in '%.*s'"
-msgstr "Pfad '%s' befindet sich im Dateisystem, aber nicht in '%.*s'"
-
-#: sha1-name.c:1708
-#, c-format
-msgid ""
-"path '%s' exists, but not '%s'\n"
-"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
-msgstr ""
-"Pfad '%s' existiert, aber nicht '%s'\n"
-"Hinweis: Meinten Sie '%.*s:%s' auch bekannt als '%.*s:./%s'?"
-
-#: sha1-name.c:1717
-#, c-format
-msgid "path '%s' does not exist in '%.*s'"
-msgstr "Pfad '%s' existiert nicht in '%.*s'"
-
-#: sha1-name.c:1745
-#, c-format
-msgid ""
-"path '%s' is in the index, but not at stage %d\n"
-"hint: Did you mean ':%d:%s'?"
-msgstr ""
-"Pfad '%s' ist im Index, aber nicht in Stufe %d\n"
-"Hinweis: Meinten Sie ':%d:%s'?"
-
-#: sha1-name.c:1761
-#, c-format
-msgid ""
-"path '%s' is in the index, but not '%s'\n"
-"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
-msgstr ""
-"Pfad '%s' ist im Index, aber nicht '%s'\n"
-"Hinweis: Meinten Sie ':%d:%s' auch bekannt als ':%d:./%s'?"
-
-#: sha1-name.c:1769
-#, c-format
-msgid "path '%s' exists on disk, but not in the index"
-msgstr "Pfad '%s' existiert im Dateisystem, aber nicht im Index"
-
-#: sha1-name.c:1771
-#, c-format
-msgid "path '%s' does not exist (neither on disk nor in the index)"
-msgstr "Pfad '%s' existiert nicht (weder im Dateisystem noch im Index)"
-
-#: sha1-name.c:1784
-msgid "relative path syntax can't be used outside working tree"
-msgstr ""
-"Die Syntax für relative Pfade kann nicht außerhalb des Arbeitsverzeichnisses "
-"benutzt werden."
-
-#: sha1-name.c:1922
-#, c-format
-msgid "invalid object name '%.*s'."
-msgstr "ungültiger Objektname '%.*s'."
-
#. TRANSLATORS: IEC 80000-13:2008 gibibyte
#: strbuf.c:848
#, c-format
@@ -8346,7 +8600,7 @@
msgstr[1] "%u Bytes/s"
#: strbuf.c:1166 wrapper.c:199 wrapper.c:369 builtin/am.c:719
-#: builtin/rebase.c:864
+#: builtin/rebase.c:866
#, c-format
msgid "could not open '%s' for writing"
msgstr "Konnte '%s' nicht zum Schreiben öffnen."
@@ -8412,12 +8666,12 @@
msgid "Pathspec '%s' is in submodule '%.*s'"
msgstr "Pfadspezifikation '%s' befindet sich in Submodul '%.*s'"
-#: submodule.c:434
+#: submodule.c:435
#, c-format
msgid "bad --ignore-submodules argument: %s"
msgstr "ungültiges --ignore-submodules Argument: %s"
-#: submodule.c:816
+#: submodule.c:817
#, c-format
msgid ""
"Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -8426,12 +8680,12 @@
"Submodul in Commit %s beim Pfad: '%s' hat den gleichen Namen wie ein "
"Submodul. Wird übersprungen."
-#: submodule.c:919
+#: submodule.c:920
#, c-format
msgid "submodule entry '%s' (%s) is a %s, not a commit"
msgstr "Submodul-Eintrag '%s' (%s) ist ein %s, kein Commit."
-#: submodule.c:1004
+#: submodule.c:1005
#, c-format
msgid ""
"Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
@@ -8440,36 +8694,36 @@
"Konnte 'git rev-list <Commits> --not --remotes -n 1' nicht in Submodul '%s' "
"ausführen."
-#: submodule.c:1127
+#: submodule.c:1128
#, c-format
msgid "process for submodule '%s' failed"
msgstr "Prozess für Submodul '%s' fehlgeschlagen"
-#: submodule.c:1156 builtin/branch.c:680 builtin/submodule--helper.c:2469
+#: submodule.c:1157 builtin/branch.c:689 builtin/submodule--helper.c:2469
msgid "Failed to resolve HEAD as a valid ref."
msgstr "Konnte HEAD nicht als gültige Referenz auflösen."
-#: submodule.c:1167
+#: submodule.c:1168
#, c-format
msgid "Pushing submodule '%s'\n"
msgstr "Pushe Submodul '%s'\n"
-#: submodule.c:1170
+#: submodule.c:1171
#, c-format
msgid "Unable to push submodule '%s'\n"
msgstr "Kann Push für Submodul '%s' nicht ausführen\n"
-#: submodule.c:1462
+#: submodule.c:1463
#, c-format
msgid "Fetching submodule %s%s\n"
msgstr "Anfordern des Submoduls %s%s\n"
-#: submodule.c:1492
+#: submodule.c:1497
#, c-format
msgid "Could not access submodule '%s'\n"
msgstr "Konnte nicht auf Submodul '%s' zugreifen\n"
-#: submodule.c:1646
+#: submodule.c:1652
#, c-format
msgid ""
"Errors during submodule fetch:\n"
@@ -8478,62 +8732,62 @@
"Fehler während des Anforderns der Submodule:\n"
"%s"
-#: submodule.c:1671
+#: submodule.c:1677
#, c-format
msgid "'%s' not recognized as a git repository"
msgstr "'%s' nicht als Git-Repository erkannt"
-#: submodule.c:1688
+#: submodule.c:1694
#, c-format
msgid "Could not run 'git status --porcelain=2' in submodule %s"
msgstr "Konnte 'git status --porcelain=2' nicht in Submodul %s ausführen"
-#: submodule.c:1729
+#: submodule.c:1735
#, c-format
msgid "'git status --porcelain=2' failed in submodule %s"
msgstr "'git status --porcelain=2' ist in Submodul %s fehlgeschlagen"
-#: submodule.c:1804
+#: submodule.c:1810
#, c-format
msgid "could not start 'git status' in submodule '%s'"
msgstr "Konnte 'git status' in Submodul '%s' nicht starten."
-#: submodule.c:1817
+#: submodule.c:1823
#, c-format
msgid "could not run 'git status' in submodule '%s'"
msgstr "Konnte 'git status' in Submodul '%s' nicht ausführen."
-#: submodule.c:1832
+#: submodule.c:1838
#, c-format
msgid "Could not unset core.worktree setting in submodule '%s'"
msgstr "Konnte core.worktree Einstellung in Submodul '%s' nicht aufheben."
-#: submodule.c:1859 submodule.c:2169
+#: submodule.c:1865 submodule.c:2175
#, c-format
msgid "could not recurse into submodule '%s'"
msgstr "Fehler bei Rekursion in Submodul-Pfad '%s'"
-#: submodule.c:1880
+#: submodule.c:1886
msgid "could not reset submodule index"
msgstr "konnte Index des Submoduls nicht zurücksetzen"
-#: submodule.c:1922
+#: submodule.c:1928
#, c-format
msgid "submodule '%s' has dirty index"
msgstr "Submodul '%s' hat einen geänderten Index."
-#: submodule.c:1974
+#: submodule.c:1980
#, c-format
msgid "Submodule '%s' could not be updated."
msgstr "Submodule '%s' konnte nicht aktualisiert werden."
-#: submodule.c:2042
+#: submodule.c:2048
#, c-format
msgid "submodule git dir '%s' is inside git dir '%.*s'"
msgstr ""
"Git-Verzeichnis des Submoduls '%s' ist im Git-Verzeichnis '%.*s' enthalten."
-#: submodule.c:2063
+#: submodule.c:2069
#, c-format
msgid ""
"relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -8541,17 +8795,17 @@
"relocate_gitdir für Submodul '%s' mit mehr als einem Arbeitsverzeichnis\n"
"wird nicht unterstützt"
-#: submodule.c:2075 submodule.c:2134
+#: submodule.c:2081 submodule.c:2140
#, c-format
msgid "could not lookup name for submodule '%s'"
msgstr "Konnte Name für Submodul '%s' nicht nachschlagen."
-#: submodule.c:2079
+#: submodule.c:2085
#, c-format
msgid "refusing to move '%s' into an existing git dir"
msgstr "Verschieben von '%s' in ein existierendes Git-Verzeichnis verweigert."
-#: submodule.c:2086
+#: submodule.c:2092
#, c-format
msgid ""
"Migrating git directory of '%s%s' from\n"
@@ -8562,11 +8816,11 @@
"'%s' nach\n"
"'%s'\n"
-#: submodule.c:2214
+#: submodule.c:2220
msgid "could not start ls-files in .."
msgstr "Konnte 'ls-files' nicht in .. starten"
-#: submodule.c:2254
+#: submodule.c:2260
#, c-format
msgid "ls-tree returned unexpected return code %d"
msgstr "ls-tree mit unerwartetem Rückgabewert %d beendet"
@@ -8597,7 +8851,7 @@
msgid "could not read input file '%s'"
msgstr "Konnte Eingabe-Datei '%s' nicht lesen"
-#: trailer.c:751
+#: trailer.c:751 builtin/mktag.c:91
msgid "could not read from stdin"
msgstr "konnte nicht von der Standard-Eingabe lesen"
@@ -8671,7 +8925,7 @@
msgid "error while running fast-import"
msgstr "Fehler beim Ausführen von 'fast-import'."
-#: transport-helper.c:549 transport-helper.c:1236
+#: transport-helper.c:549 transport-helper.c:1237
#, c-format
msgid "could not read ref %s"
msgstr "konnte Referenz %s nicht lesen"
@@ -8690,7 +8944,7 @@
msgid "invalid remote service path"
msgstr "ungültiger Remote-Service Pfad."
-#: transport-helper.c:661 transport.c:1446
+#: transport-helper.c:661 transport.c:1447
msgid "operation not supported by protocol"
msgstr "die Operation wird von dem Protokoll nicht unterstützt"
@@ -8769,52 +9023,52 @@
"Keine gemeinsamen Referenzen und nichts spezifiziert; keine Ausführung.\n"
"Vielleicht sollten Sie einen Branch angeben.\n"
-#: transport-helper.c:1213
+#: transport-helper.c:1214
#, c-format
msgid "unsupported object format '%s'"
msgstr "nicht unterstütztes Objekt-Format '%s'"
-#: transport-helper.c:1222
+#: transport-helper.c:1223
#, c-format
msgid "malformed response in ref list: %s"
msgstr "Ungültige Antwort in Referenzliste: %s"
-#: transport-helper.c:1374
+#: transport-helper.c:1375
#, c-format
msgid "read(%s) failed"
msgstr "Lesen von %s fehlgeschlagen."
-#: transport-helper.c:1401
+#: transport-helper.c:1402
#, c-format
msgid "write(%s) failed"
msgstr "Schreiben von %s fehlgeschlagen."
-#: transport-helper.c:1450
+#: transport-helper.c:1451
#, c-format
msgid "%s thread failed"
msgstr "Thread %s fehlgeschlagen."
-#: transport-helper.c:1454
+#: transport-helper.c:1455
#, c-format
msgid "%s thread failed to join: %s"
msgstr "Fehler beim Beitreten zu Thread %s: %s"
-#: transport-helper.c:1473 transport-helper.c:1477
+#: transport-helper.c:1474 transport-helper.c:1478
#, c-format
msgid "can't start thread for copying data: %s"
msgstr "Kann Thread zum Kopieren von Daten nicht starten: %s"
-#: transport-helper.c:1514
+#: transport-helper.c:1515
#, c-format
msgid "%s process failed to wait"
msgstr "Fehler beim Warten von Prozess %s."
-#: transport-helper.c:1518
+#: transport-helper.c:1519
#, c-format
msgid "%s process failed"
msgstr "Prozess %s fehlgeschlagen"
-#: transport-helper.c:1536 transport-helper.c:1545
+#: transport-helper.c:1537 transport-helper.c:1546
msgid "can't start thread for copying data"
msgstr "Kann Thread zum Kopieren von Daten nicht starten."
@@ -8903,23 +9157,23 @@
msgid "Aborting."
msgstr "Abbruch."
-#: transport.c:1315
+#: transport.c:1316
msgid "failed to push all needed submodules"
msgstr "Fehler beim Versand aller erforderlichen Submodule."
-#: tree-walk.c:32
+#: tree-walk.c:33
msgid "too-short tree object"
msgstr "zu kurzes Tree-Objekt"
-#: tree-walk.c:38
+#: tree-walk.c:39
msgid "malformed mode in tree entry"
msgstr "fehlerhafter Modus in Tree-Eintrag"
-#: tree-walk.c:42
+#: tree-walk.c:43
msgid "empty filename in tree entry"
msgstr "leerer Dateiname in Tree-Eintrag"
-#: tree-walk.c:117
+#: tree-walk.c:118
msgid "too-short tree file"
msgstr "zu kurze Tree-Datei"
@@ -9197,7 +9451,7 @@
msgid "Updating index flags"
msgstr "Aktualisiere Index-Markierungen"
-#: upload-pack.c:1550
+#: upload-pack.c:1543
msgid "expected flush after fetch arguments"
msgstr "erwartete Flush nach Abrufen der Argumente"
@@ -9234,72 +9488,103 @@
msgid "Fetching objects"
msgstr "Anfordern der Objekte"
-#: worktree.c:236 builtin/am.c:2103
+#: worktree.c:238 builtin/am.c:2103
#, c-format
msgid "failed to read '%s'"
msgstr "Fehler beim Lesen von '%s'"
-#: worktree.c:283
+#: worktree.c:304
#, c-format
msgid "'%s' at main working tree is not the repository directory"
msgstr "'%s' im Hauptarbeitsverzeichnis ist nicht das Repository-Verzeichnis."
-#: worktree.c:294
+#: worktree.c:315
#, c-format
msgid "'%s' file does not contain absolute path to the working tree location"
msgstr "'%s' Datei enthält nicht den absoluten Pfad zum Arbeitsverzeichnis."
-#: worktree.c:306
+#: worktree.c:327
#, c-format
msgid "'%s' does not exist"
msgstr "'%s' existiert nicht."
-#: worktree.c:312
+#: worktree.c:333
#, c-format
msgid "'%s' is not a .git file, error code %d"
msgstr "'%s' ist keine .git-Datei, Fehlercode %d"
-#: worktree.c:321
+#: worktree.c:342
#, c-format
msgid "'%s' does not point back to '%s'"
msgstr "'%s' zeigt nicht zurück auf '%s'"
-#: worktree.c:587
+#: worktree.c:608
msgid "not a directory"
msgstr "kein Verzeichnis"
-#: worktree.c:596
+#: worktree.c:617
msgid ".git is not a file"
msgstr ".git ist keine Datei"
-#: worktree.c:598
+#: worktree.c:619
msgid ".git file broken"
msgstr ".git-Datei kaputt"
-#: worktree.c:600
+#: worktree.c:621
msgid ".git file incorrect"
msgstr ".git-Datei fehlerhaft"
-#: worktree.c:670
+#: worktree.c:727
msgid "not a valid path"
msgstr "kein gültiger Pfad"
-#: worktree.c:676
+#: worktree.c:733
msgid "unable to locate repository; .git is not a file"
msgstr "Konnte Repository nicht finden; .git ist keine Datei"
-#: worktree.c:679
+#: worktree.c:737
+msgid "unable to locate repository; .git file does not reference a repository"
+msgstr ""
+"konnte Repository nicht finden; .git-Datei referenziert kein Repository"
+
+#: worktree.c:741
msgid "unable to locate repository; .git file broken"
msgstr "Konnte Repository nicht finden; .git-Datei ist kaputt"
-#: worktree.c:685
+#: worktree.c:747
msgid "gitdir unreadable"
msgstr "gitdir nicht lesbar"
-#: worktree.c:689
+#: worktree.c:751
msgid "gitdir incorrect"
msgstr "gitdir fehlerhaft"
+#: worktree.c:776
+msgid "not a valid directory"
+msgstr "kein gültiges Verzeichnis"
+
+#: worktree.c:782
+msgid "gitdir file does not exist"
+msgstr "gitdir-Datei existiert nicht"
+
+#: worktree.c:787 worktree.c:796
+#, c-format
+msgid "unable to read gitdir file (%s)"
+msgstr "konnte gitdir-Datei nicht lesen (%s)"
+
+#: worktree.c:806
+#, c-format
+msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
+msgstr "read() zu kurz (%<PRIuMAX> Bytes erwartet, %<PRIuMAX> gelesen)"
+
+#: worktree.c:814
+msgid "invalid gitdir file"
+msgstr "ungültige gitdir-Datei"
+
+#: worktree.c:822
+msgid "gitdir file points to non-existent location"
+msgstr "gitdir-Datei verweist auf nicht existierenden Ort"
+
#: wrapper.c:197 wrapper.c:367
#, c-format
msgid "could not open '%s' for reading and writing"
@@ -9353,11 +9638,11 @@
msgstr ""
" (benutzen Sie \"git add/rm <Datei>...\", um die Auflösung zu markieren)"
-#: wt-status.c:211 wt-status.c:1070
+#: wt-status.c:211 wt-status.c:1072
msgid "Changes to be committed:"
msgstr "Zum Commit vorgemerkte Änderungen:"
-#: wt-status.c:234 wt-status.c:1079
+#: wt-status.c:234 wt-status.c:1081
msgid "Changes not staged for commit:"
msgstr "Änderungen, die nicht zum Commit vorgemerkt sind:"
@@ -9465,22 +9750,22 @@
msgid "untracked content, "
msgstr "unversionierter Inhalt, "
-#: wt-status.c:903
+#: wt-status.c:905
#, c-format
msgid "Your stash currently has %d entry"
msgid_plural "Your stash currently has %d entries"
msgstr[0] "Ihr Stash hat gerade %d Eintrag"
msgstr[1] "Ihr Stash hat gerade %d Einträge"
-#: wt-status.c:934
+#: wt-status.c:936
msgid "Submodules changed but not updated:"
msgstr "Submodule geändert, aber nicht aktualisiert:"
-#: wt-status.c:936
+#: wt-status.c:938
msgid "Submodule changes to be committed:"
msgstr "Änderungen in Submodul zum Committen:"
-#: wt-status.c:1018
+#: wt-status.c:1020
msgid ""
"Do not modify or remove the line above.\n"
"Everything below it will be ignored."
@@ -9488,7 +9773,7 @@
"Ändern oder entfernen Sie nicht die obige Zeile.\n"
"Alles unterhalb von ihr wird ignoriert."
-#: wt-status.c:1110
+#: wt-status.c:1112
#, c-format
msgid ""
"\n"
@@ -9500,114 +9785,114 @@
"berechnen.\n"
"Sie können '--no-ahead-behind' benutzen, um das zu verhindern.\n"
-#: wt-status.c:1140
+#: wt-status.c:1142
msgid "You have unmerged paths."
msgstr "Sie haben nicht zusammengeführte Pfade."
-#: wt-status.c:1143
+#: wt-status.c:1145
msgid " (fix conflicts and run \"git commit\")"
msgstr " (beheben Sie die Konflikte und führen Sie \"git commit\" aus)"
-#: wt-status.c:1145
+#: wt-status.c:1147
msgid " (use \"git merge --abort\" to abort the merge)"
msgstr " (benutzen Sie \"git merge --abort\", um den Merge abzubrechen)"
-#: wt-status.c:1149
+#: wt-status.c:1151
msgid "All conflicts fixed but you are still merging."
msgstr "Alle Konflikte sind behoben, aber Sie sind immer noch beim Merge."
-#: wt-status.c:1152
+#: wt-status.c:1154
msgid " (use \"git commit\" to conclude merge)"
msgstr " (benutzen Sie \"git commit\", um den Merge abzuschließen)"
-#: wt-status.c:1161
+#: wt-status.c:1163
msgid "You are in the middle of an am session."
msgstr "Eine \"am\"-Sitzung ist im Gange."
-#: wt-status.c:1164
+#: wt-status.c:1166
msgid "The current patch is empty."
msgstr "Der aktuelle Patch ist leer."
-#: wt-status.c:1168
+#: wt-status.c:1170
msgid " (fix conflicts and then run \"git am --continue\")"
msgstr ""
" (beheben Sie die Konflikte und führen Sie dann \"git am --continue\" aus)"
-#: wt-status.c:1170
+#: wt-status.c:1172
msgid " (use \"git am --skip\" to skip this patch)"
msgstr " (benutzen Sie \"git am --skip\", um diesen Patch auszulassen)"
-#: wt-status.c:1172
+#: wt-status.c:1174
msgid " (use \"git am --abort\" to restore the original branch)"
msgstr ""
" (benutzen Sie \"git am --abort\", um den ursprünglichen Branch "
"wiederherzustellen)"
-#: wt-status.c:1305
+#: wt-status.c:1307
msgid "git-rebase-todo is missing."
msgstr "git-rebase-todo fehlt."
-#: wt-status.c:1307
+#: wt-status.c:1309
msgid "No commands done."
msgstr "Keine Befehle ausgeführt."
-#: wt-status.c:1310
+#: wt-status.c:1312
#, c-format
msgid "Last command done (%d command done):"
msgid_plural "Last commands done (%d commands done):"
msgstr[0] "Zuletzt ausgeführter Befehl (%d Befehl ausgeführt):"
msgstr[1] "Zuletzt ausgeführte Befehle (%d Befehle ausgeführt):"
-#: wt-status.c:1321
+#: wt-status.c:1323
#, c-format
msgid " (see more in file %s)"
msgstr " (mehr Informationen in Datei %s)"
-#: wt-status.c:1326
+#: wt-status.c:1328
msgid "No commands remaining."
msgstr "Keine Befehle verbleibend."
-#: wt-status.c:1329
+#: wt-status.c:1331
#, c-format
msgid "Next command to do (%d remaining command):"
msgid_plural "Next commands to do (%d remaining commands):"
msgstr[0] "Nächster auszuführender Befehl (%d Befehle verbleibend):"
msgstr[1] "Nächste auszuführende Befehle (%d Befehle verbleibend):"
-#: wt-status.c:1337
+#: wt-status.c:1339
msgid " (use \"git rebase --edit-todo\" to view and edit)"
msgstr " (benutzen Sie \"git rebase --edit-todo\" zum Ansehen und Bearbeiten)"
-#: wt-status.c:1349
+#: wt-status.c:1351
#, c-format
msgid "You are currently rebasing branch '%s' on '%s'."
msgstr "Sie sind gerade beim Rebase von Branch '%s' auf '%s'."
-#: wt-status.c:1354
+#: wt-status.c:1356
msgid "You are currently rebasing."
msgstr "Sie sind gerade beim Rebase."
-#: wt-status.c:1367
+#: wt-status.c:1369
msgid " (fix conflicts and then run \"git rebase --continue\")"
msgstr ""
" (beheben Sie die Konflikte und führen Sie dann \"git rebase --continue\" "
"aus)"
-#: wt-status.c:1369
+#: wt-status.c:1371
msgid " (use \"git rebase --skip\" to skip this patch)"
msgstr " (benutzen Sie \"git rebase --skip\", um diesen Patch auszulassen)"
-#: wt-status.c:1371
+#: wt-status.c:1373
msgid " (use \"git rebase --abort\" to check out the original branch)"
msgstr ""
" (benutzen Sie \"git rebase --abort\", um den ursprünglichen Branch "
"auszuchecken)"
-#: wt-status.c:1378
+#: wt-status.c:1380
msgid " (all conflicts fixed: run \"git rebase --continue\")"
msgstr " (alle Konflikte behoben: führen Sie \"git rebase --continue\" aus)"
-#: wt-status.c:1382
+#: wt-status.c:1384
#, c-format
msgid ""
"You are currently splitting a commit while rebasing branch '%s' on '%s'."
@@ -9615,162 +9900,170 @@
"Sie teilen gerade einen Commit auf, während ein Rebase von Branch '%s' auf "
"'%s' im Gange ist."
-#: wt-status.c:1387
+#: wt-status.c:1389
msgid "You are currently splitting a commit during a rebase."
msgstr "Sie teilen gerade einen Commit während eines Rebase auf."
-#: wt-status.c:1390
+#: wt-status.c:1392
msgid " (Once your working directory is clean, run \"git rebase --continue\")"
msgstr ""
" (Sobald Ihr Arbeitsverzeichnis unverändert ist, führen Sie \"git rebase --"
"continue\" aus)"
-#: wt-status.c:1394
+#: wt-status.c:1396
#, c-format
msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
msgstr ""
"Sie editieren gerade einen Commit während eines Rebase von Branch '%s' auf "
"'%s'."
-#: wt-status.c:1399
+#: wt-status.c:1401
msgid "You are currently editing a commit during a rebase."
msgstr "Sie editieren gerade einen Commit während eines Rebase."
-#: wt-status.c:1402
+#: wt-status.c:1404
msgid " (use \"git commit --amend\" to amend the current commit)"
msgstr ""
" (benutzen Sie \"git commit --amend\", um den aktuellen Commit "
"nachzubessern)"
-#: wt-status.c:1404
+#: wt-status.c:1406
msgid ""
" (use \"git rebase --continue\" once you are satisfied with your changes)"
msgstr ""
" (benutzen Sie \"git rebase --continue\" sobald Ihre Änderungen "
"abgeschlossen sind)"
-#: wt-status.c:1415
+#: wt-status.c:1417
msgid "Cherry-pick currently in progress."
msgstr "Cherry-pick zurzeit im Gange."
-#: wt-status.c:1418
+#: wt-status.c:1420
#, c-format
msgid "You are currently cherry-picking commit %s."
msgstr "Sie führen gerade \"cherry-pick\" von Commit %s aus."
-#: wt-status.c:1425
+#: wt-status.c:1427
msgid " (fix conflicts and run \"git cherry-pick --continue\")"
msgstr ""
" (beheben Sie die Konflikte und führen Sie dann \"git cherry-pick --continue"
"\" aus)"
-#: wt-status.c:1428
+#: wt-status.c:1430
msgid " (run \"git cherry-pick --continue\" to continue)"
msgstr " (Führen Sie \"git cherry-pick --continue\" aus, um weiterzumachen)"
-#: wt-status.c:1431
+#: wt-status.c:1433
msgid " (all conflicts fixed: run \"git cherry-pick --continue\")"
msgstr ""
" (alle Konflikte behoben: führen Sie \"git cherry-pick --continue\" aus)"
-#: wt-status.c:1433
+#: wt-status.c:1435
msgid " (use \"git cherry-pick --skip\" to skip this patch)"
msgstr ""
" (benutzen Sie \"git cherry-pick --skip\", um diesen Patch auszulassen)"
-#: wt-status.c:1435
+#: wt-status.c:1437
msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
msgstr ""
" (benutzen Sie \"git cherry-pick --abort\", um die Cherry-Pick-Operation "
"abzubrechen)"
-#: wt-status.c:1445
+#: wt-status.c:1447
msgid "Revert currently in progress."
msgstr "Revert zurzeit im Gange."
-#: wt-status.c:1448
+#: wt-status.c:1450
#, c-format
msgid "You are currently reverting commit %s."
msgstr "Sie sind gerade beim Revert von Commit '%s'."
-#: wt-status.c:1454
+#: wt-status.c:1456
msgid " (fix conflicts and run \"git revert --continue\")"
msgstr ""
" (beheben Sie die Konflikte und führen Sie dann \"git revert --continue\" "
"aus)"
-#: wt-status.c:1457
+#: wt-status.c:1459
msgid " (run \"git revert --continue\" to continue)"
msgstr " (Führen Sie \"git revert --continue\", um weiterzumachen)"
-#: wt-status.c:1460
+#: wt-status.c:1462
msgid " (all conflicts fixed: run \"git revert --continue\")"
msgstr " (alle Konflikte behoben: führen Sie \"git revert --continue\" aus)"
-#: wt-status.c:1462
+#: wt-status.c:1464
msgid " (use \"git revert --skip\" to skip this patch)"
msgstr " (benutzen Sie \"git revert --skip\", um diesen Patch auszulassen)"
-#: wt-status.c:1464
+#: wt-status.c:1466
msgid " (use \"git revert --abort\" to cancel the revert operation)"
msgstr ""
" (benutzen Sie \"git revert --abort\", um die Revert-Operation abzubrechen)"
-#: wt-status.c:1474
+#: wt-status.c:1476
#, c-format
msgid "You are currently bisecting, started from branch '%s'."
msgstr "Sie sind gerade bei einer binären Suche, gestartet von Branch '%s'."
-#: wt-status.c:1478
+#: wt-status.c:1480
msgid "You are currently bisecting."
msgstr "Sie sind gerade bei einer binären Suche."
-#: wt-status.c:1481
+#: wt-status.c:1483
msgid " (use \"git bisect reset\" to get back to the original branch)"
msgstr ""
" (benutzen Sie \"git bisect reset\", um zum ursprünglichen Branch "
"zurückzukehren)"
-#: wt-status.c:1492
+#: wt-status.c:1494
#, c-format
msgid "You are in a sparse checkout with %d%% of tracked files present."
msgstr ""
"Sie sind in einem partiellen Checkout mit %d%% vorhandenen versionierten "
"Dateien."
-#: wt-status.c:1731
+#: wt-status.c:1733
msgid "On branch "
msgstr "Auf Branch "
-#: wt-status.c:1738
+#: wt-status.c:1740
msgid "interactive rebase in progress; onto "
msgstr "interaktives Rebase im Gange; auf "
-#: wt-status.c:1740
+#: wt-status.c:1742
msgid "rebase in progress; onto "
msgstr "Rebase im Gange; auf "
-#: wt-status.c:1750
+#: wt-status.c:1747
+msgid "HEAD detached at "
+msgstr "HEAD losgelöst bei "
+
+#: wt-status.c:1749
+msgid "HEAD detached from "
+msgstr "HEAD losgelöst von "
+
+#: wt-status.c:1752
msgid "Not currently on any branch."
msgstr "Im Moment auf keinem Branch."
-#: wt-status.c:1767
+#: wt-status.c:1769
msgid "Initial commit"
msgstr "Initialer Commit"
-#: wt-status.c:1768
+#: wt-status.c:1770
msgid "No commits yet"
msgstr "Noch keine Commits"
-#: wt-status.c:1782
+#: wt-status.c:1784
msgid "Untracked files"
msgstr "Unversionierte Dateien"
-#: wt-status.c:1784
+#: wt-status.c:1786
msgid "Ignored files"
msgstr "Ignorierte Dateien"
-#: wt-status.c:1788
+#: wt-status.c:1790
#, c-format
msgid ""
"It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -9781,32 +10074,32 @@
"'status -uno' könnte das beschleunigen, aber Sie müssen darauf achten,\n"
"neue Dateien selbstständig hinzuzufügen (siehe 'git help status')."
-#: wt-status.c:1794
+#: wt-status.c:1796
#, c-format
msgid "Untracked files not listed%s"
msgstr "Unversionierte Dateien nicht aufgelistet%s"
-#: wt-status.c:1796
+#: wt-status.c:1798
msgid " (use -u option to show untracked files)"
msgstr " (benutzen Sie die Option -u, um unversionierte Dateien anzuzeigen)"
-#: wt-status.c:1802
+#: wt-status.c:1804
msgid "No changes"
msgstr "Keine Änderungen"
-#: wt-status.c:1807
+#: wt-status.c:1809
#, c-format
msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
msgstr ""
"keine Änderungen zum Commit vorgemerkt (benutzen Sie \"git add\" und/oder "
"\"git commit -a\")\n"
-#: wt-status.c:1811
+#: wt-status.c:1813
#, c-format
msgid "no changes added to commit\n"
msgstr "keine Änderungen zum Commit vorgemerkt\n"
-#: wt-status.c:1815
+#: wt-status.c:1817
#, c-format
msgid ""
"nothing added to commit but untracked files present (use \"git add\" to "
@@ -9815,67 +10108,67 @@
"nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien\n"
"(benutzen Sie \"git add\" zum Versionieren)\n"
-#: wt-status.c:1819
+#: wt-status.c:1821
#, c-format
msgid "nothing added to commit but untracked files present\n"
msgstr "nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien\n"
-#: wt-status.c:1823
+#: wt-status.c:1825
#, c-format
msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
msgstr ""
"nichts zu committen (erstellen/kopieren Sie Dateien und benutzen\n"
"Sie \"git add\" zum Versionieren)\n"
-#: wt-status.c:1827 wt-status.c:1833
+#: wt-status.c:1829 wt-status.c:1835
#, c-format
msgid "nothing to commit\n"
msgstr "nichts zu committen\n"
-#: wt-status.c:1830
+#: wt-status.c:1832
#, c-format
msgid "nothing to commit (use -u to show untracked files)\n"
msgstr ""
"nichts zu committen (benutzen Sie die Option -u, um unversionierte Dateien "
"anzuzeigen)\n"
-#: wt-status.c:1835
+#: wt-status.c:1837
#, c-format
msgid "nothing to commit, working tree clean\n"
msgstr "nichts zu committen, Arbeitsverzeichnis unverändert\n"
-#: wt-status.c:1940
+#: wt-status.c:1942
msgid "No commits yet on "
msgstr "Noch keine Commits in "
-#: wt-status.c:1944
+#: wt-status.c:1946
msgid "HEAD (no branch)"
msgstr "HEAD (kein Branch)"
-#: wt-status.c:1975
+#: wt-status.c:1977
msgid "different"
msgstr "unterschiedlich"
-#: wt-status.c:1977 wt-status.c:1985
+#: wt-status.c:1979 wt-status.c:1987
msgid "behind "
msgstr "hinterher "
-#: wt-status.c:1980 wt-status.c:1983
+#: wt-status.c:1982 wt-status.c:1985
msgid "ahead "
msgstr "voraus "
#. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2505
+#: wt-status.c:2507
#, c-format
msgid "cannot %s: You have unstaged changes."
msgstr ""
"%s nicht möglich: Sie haben Änderungen, die nicht zum Commit vorgemerkt sind."
-#: wt-status.c:2511
+#: wt-status.c:2513
msgid "additionally, your index contains uncommitted changes."
msgstr "Zusätzlich enthält die Staging-Area nicht committete Änderungen."
-#: wt-status.c:2513
+#: wt-status.c:2515
#, c-format
msgid "cannot %s: Your index contains uncommitted changes."
msgstr ""
@@ -9890,134 +10183,139 @@
msgid "git add [<options>] [--] <pathspec>..."
msgstr "git add [<Optionen>] [--] <Pfadspezifikation>..."
-#: builtin/add.c:88
+#: builtin/add.c:58
+#, c-format
+msgid "cannot chmod %cx '%s'"
+msgstr "kann chmod %cx '%s' nicht ausführen"
+
+#: builtin/add.c:96
#, c-format
msgid "unexpected diff status %c"
msgstr "unerwarteter Differenz-Status %c"
-#: builtin/add.c:93 builtin/commit.c:285
+#: builtin/add.c:101 builtin/commit.c:285
msgid "updating files failed"
msgstr "Aktualisierung der Dateien fehlgeschlagen"
-#: builtin/add.c:103
+#: builtin/add.c:111
#, c-format
msgid "remove '%s'\n"
msgstr "lösche '%s'\n"
-#: builtin/add.c:178
+#: builtin/add.c:186
msgid "Unstaged changes after refreshing the index:"
msgstr ""
"Nicht zum Commit vorgemerkte Änderungen nach Aktualisierung der Staging-Area:"
-#: builtin/add.c:272 builtin/rev-parse.c:908
+#: builtin/add.c:280 builtin/rev-parse.c:991
msgid "Could not read the index"
msgstr "Konnte den Index nicht lesen"
-#: builtin/add.c:283
+#: builtin/add.c:291
#, c-format
msgid "Could not open '%s' for writing."
msgstr "Konnte '%s' nicht zum Schreiben öffnen."
-#: builtin/add.c:287
+#: builtin/add.c:295
msgid "Could not write patch"
msgstr "Konnte Patch nicht schreiben"
-#: builtin/add.c:290
+#: builtin/add.c:298
msgid "editing patch failed"
msgstr "Bearbeitung des Patches fehlgeschlagen"
-#: builtin/add.c:293
+#: builtin/add.c:301
#, c-format
msgid "Could not stat '%s'"
msgstr "Konnte Verzeichnis '%s' nicht lesen"
-#: builtin/add.c:295
+#: builtin/add.c:303
msgid "Empty patch. Aborted."
msgstr "Leerer Patch. Abgebrochen."
-#: builtin/add.c:300
+#: builtin/add.c:308
#, c-format
msgid "Could not apply '%s'"
msgstr "Konnte '%s' nicht anwenden."
-#: builtin/add.c:308
+#: builtin/add.c:316
msgid "The following paths are ignored by one of your .gitignore files:\n"
msgstr ""
"Die folgenden Pfade werden durch eine Ihrer \".gitignore\" Dateien "
"ignoriert:\n"
-#: builtin/add.c:328 builtin/clean.c:904 builtin/fetch.c:166 builtin/mv.c:124
+#: builtin/add.c:336 builtin/clean.c:904 builtin/fetch.c:169 builtin/mv.c:124
#: builtin/prune-packed.c:14 builtin/pull.c:204 builtin/push.c:559
#: builtin/remote.c:1427 builtin/rm.c:242 builtin/send-pack.c:190
msgid "dry run"
msgstr "Probelauf"
-#: builtin/add.c:331
+#: builtin/add.c:339
msgid "interactive picking"
msgstr "interaktives Auswählen"
-#: builtin/add.c:332 builtin/checkout.c:1547 builtin/reset.c:308
+#: builtin/add.c:340 builtin/checkout.c:1546 builtin/reset.c:308
msgid "select hunks interactively"
msgstr "Blöcke interaktiv auswählen"
-#: builtin/add.c:333
+#: builtin/add.c:341
msgid "edit current diff and apply"
msgstr "aktuelle Unterschiede editieren und anwenden"
-#: builtin/add.c:334
+#: builtin/add.c:342
msgid "allow adding otherwise ignored files"
msgstr "das Hinzufügen andernfalls ignorierter Dateien erlauben"
-#: builtin/add.c:335
+#: builtin/add.c:343
msgid "update tracked files"
msgstr "versionierte Dateien aktualisieren"
-#: builtin/add.c:336
+#: builtin/add.c:344
msgid "renormalize EOL of tracked files (implies -u)"
msgstr ""
"erneutes Normalisieren der Zeilenenden von versionierten Dateien (impliziert "
"-u)"
-#: builtin/add.c:337
+#: builtin/add.c:345
msgid "record only the fact that the path will be added later"
msgstr "nur speichern, dass der Pfad später hinzugefügt werden soll"
-#: builtin/add.c:338
+#: builtin/add.c:346
msgid "add changes from all tracked and untracked files"
msgstr ""
"Änderungen von allen versionierten und unversionierten Dateien hinzufügen"
-#: builtin/add.c:341
+#: builtin/add.c:349
msgid "ignore paths removed in the working tree (same as --no-all)"
msgstr "gelöschte Pfade im Arbeitsverzeichnis ignorieren (genau wie --no-all)"
-#: builtin/add.c:343
+#: builtin/add.c:351
msgid "don't add, only refresh the index"
msgstr "nichts hinzufügen, nur den Index aktualisieren"
-#: builtin/add.c:344
+#: builtin/add.c:352
msgid "just skip files which cannot be added because of errors"
msgstr ""
"Dateien überspringen, die aufgrund von Fehlern nicht hinzugefügt werden "
"konnten"
-#: builtin/add.c:345
+#: builtin/add.c:353
msgid "check if - even missing - files are ignored in dry run"
msgstr "prüfen ob - auch fehlende - Dateien im Probelauf ignoriert werden"
-#: builtin/add.c:347 builtin/update-index.c:1004
+#: builtin/add.c:355 builtin/update-index.c:1004
msgid "override the executable bit of the listed files"
msgstr "das \"ausführbar\"-Bit der aufgelisteten Dateien überschreiben"
-#: builtin/add.c:349
+#: builtin/add.c:357
msgid "warn when adding an embedded repository"
msgstr "warnen wenn eingebettetes Repository hinzugefügt wird"
-#: builtin/add.c:351
+#: builtin/add.c:359
msgid "backend for `git stash -p`"
msgstr "Backend für `git stash -p`"
-#: builtin/add.c:369
+#: builtin/add.c:377
#, c-format
msgid ""
"You've added another git repository inside your current repository.\n"
@@ -10051,12 +10349,12 @@
"\n"
"Siehe \"git help submodule\" für weitere Informationen."
-#: builtin/add.c:397
+#: builtin/add.c:405
#, c-format
msgid "adding embedded git repository: %s"
msgstr "Füge eingebettetes Repository hinzu: %s"
-#: builtin/add.c:416
+#: builtin/add.c:424
msgid ""
"Use -f if you really want to add them.\n"
"Turn this message off by running\n"
@@ -10066,52 +10364,48 @@
"Um diese Meldung abzuschalten, führen Sie folgenden Befehl aus:\n"
"\"git config advice.addIgnoredFile false\""
-#: builtin/add.c:425
+#: builtin/add.c:433
msgid "adding files failed"
msgstr "Hinzufügen von Dateien fehlgeschlagen"
-#: builtin/add.c:453 builtin/commit.c:345
+#: builtin/add.c:461 builtin/commit.c:345
msgid "--pathspec-from-file is incompatible with --interactive/--patch"
-msgstr ""
-"Die Optionen --pathspec-from-file und --interactive/--patch sind "
-"inkompatibel."
+msgstr "--pathspec-from-file und --interactive/--patch sind inkompatibel"
-#: builtin/add.c:470
+#: builtin/add.c:478
msgid "--pathspec-from-file is incompatible with --edit"
-msgstr "Die Optionen --pathspec-from-file und --edit sind inkompatibel."
+msgstr "--pathspec-from-file und --edit sind inkompatibel"
-#: builtin/add.c:482
+#: builtin/add.c:490
msgid "-A and -u are mutually incompatible"
-msgstr "Die Optionen -A und -u sind zueinander inkompatibel."
+msgstr "-A und -u sind zueinander inkompatibel"
-#: builtin/add.c:485
+#: builtin/add.c:493
msgid "Option --ignore-missing can only be used together with --dry-run"
msgstr ""
-"Die Option --ignore-missing kann nur zusammen mit --dry-run verwendet werden."
+"Die Option --ignore-missing kann nur zusammen mit --dry-run verwendet werden"
-#: builtin/add.c:489
+#: builtin/add.c:497
#, c-format
msgid "--chmod param '%s' must be either -x or +x"
msgstr "--chmod Parameter '%s' muss entweder -x oder +x sein"
-#: builtin/add.c:507 builtin/checkout.c:1715 builtin/commit.c:351
-#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1502
+#: builtin/add.c:515 builtin/checkout.c:1714 builtin/commit.c:351
+#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1569
msgid "--pathspec-from-file is incompatible with pathspec arguments"
-msgstr ""
-"Die Option --pathspec-from-file ist inkompatibel mit\n"
-"Pfadspezifikation-Argumenten."
+msgstr "--pathspec-from-file ist inkompatibel mit Pfadspezifikation-Argumenten"
-#: builtin/add.c:514 builtin/checkout.c:1727 builtin/commit.c:357
-#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1508
+#: builtin/add.c:522 builtin/checkout.c:1726 builtin/commit.c:357
+#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1575
msgid "--pathspec-file-nul requires --pathspec-from-file"
-msgstr "Die Option --pathspec-file-nul benötigt --pathspec-from-file"
+msgstr "--pathspec-file-nul benötigt --pathspec-from-file"
-#: builtin/add.c:518
+#: builtin/add.c:526
#, c-format
msgid "Nothing specified, nothing added.\n"
msgstr "Nichts spezifiziert, nichts hinzugefügt.\n"
-#: builtin/add.c:520
+#: builtin/add.c:528
msgid ""
"Maybe you wanted to say 'git add .'?\n"
"Turn this message off by running\n"
@@ -10375,7 +10669,7 @@
msgstr "erlaube, falls notwendig, das Zurückfallen auf einen 3-Wege-Merge"
#: builtin/am.c:2225 builtin/init-db.c:560 builtin/prune-packed.c:16
-#: builtin/repack.c:335 builtin/stash.c:815
+#: builtin/repack.c:334 builtin/stash.c:882
msgid "be quiet"
msgstr "weniger Ausgaben"
@@ -10418,17 +10712,17 @@
msgstr "an git-apply übergeben"
#: builtin/am.c:2263 builtin/commit.c:1395 builtin/fmt-merge-msg.c:17
-#: builtin/fmt-merge-msg.c:20 builtin/grep.c:903 builtin/merge.c:260
+#: builtin/fmt-merge-msg.c:20 builtin/grep.c:904 builtin/merge.c:261
#: builtin/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
-#: builtin/rebase.c:1341 builtin/repack.c:346 builtin/repack.c:350
-#: builtin/repack.c:352 builtin/show-branch.c:650 builtin/show-ref.c:172
-#: builtin/tag.c:404 parse-options.h:154 parse-options.h:175
+#: builtin/rebase.c:1347 builtin/repack.c:345 builtin/repack.c:349
+#: builtin/repack.c:351 builtin/show-branch.c:650 builtin/show-ref.c:172
+#: builtin/tag.c:436 parse-options.h:154 parse-options.h:175
#: parse-options.h:316
msgid "n"
msgstr "Anzahl"
-#: builtin/am.c:2269 builtin/branch.c:661 builtin/bugreport.c:136
-#: builtin/for-each-ref.c:38 builtin/replace.c:556 builtin/tag.c:438
+#: builtin/am.c:2269 builtin/branch.c:670 builtin/bugreport.c:136
+#: builtin/for-each-ref.c:38 builtin/replace.c:556 builtin/tag.c:470
#: builtin/verify-tag.c:38
msgid "format"
msgstr "Format"
@@ -10454,12 +10748,12 @@
msgstr "den aktuellen Patch auslassen"
#: builtin/am.c:2287
-msgid "restore the original branch and abort the patching operation."
+msgid "restore the original branch and abort the patching operation"
msgstr ""
"ursprünglichen Branch wiederherstellen und Anwendung der Patches abbrechen"
#: builtin/am.c:2290
-msgid "abort the patching operation but keep HEAD where it is."
+msgid "abort the patching operation but keep HEAD where it is"
msgstr "Patch-Operation abbrechen, aber HEAD an aktueller Stelle belassen"
#: builtin/am.c:2294
@@ -10475,12 +10769,12 @@
msgstr "aktuellen Zeitstempel als Autor-Datum verwenden"
#: builtin/am.c:2303 builtin/commit-tree.c:120 builtin/commit.c:1515
-#: builtin/merge.c:297 builtin/pull.c:175 builtin/rebase.c:536
-#: builtin/rebase.c:1394 builtin/revert.c:117 builtin/tag.c:419
+#: builtin/merge.c:298 builtin/pull.c:175 builtin/rebase.c:538
+#: builtin/rebase.c:1400 builtin/revert.c:117 builtin/tag.c:451
msgid "key-id"
msgstr "GPG-Schlüsselkennung"
-#: builtin/am.c:2304 builtin/rebase.c:537 builtin/rebase.c:1395
+#: builtin/am.c:2304 builtin/rebase.c:539 builtin/rebase.c:1401
msgid "GPG-sign commits"
msgstr "Commits mit GPG signieren"
@@ -10561,28 +10855,12 @@
msgstr "git bisect--helper --bisect-reset [<Commit>]"
#: builtin/bisect--helper.c:24
-msgid ""
-"git bisect--helper --bisect-write [--no-log] <state> <revision> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-write [--no-log] <Zustand> <Revision> "
-"<Begriff_gut> <Begriff_schlecht>"
-
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-check-and-set-terms <Befehl> <Begriff_gut> "
-"<Begriff_schlecht>"
-
-#: builtin/bisect--helper.c:26
msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
msgstr ""
"git bisect--helper --bisect-next-check <Begriff_gut> <Begriff_schlecht> "
"[<Begriff>]"
-#: builtin/bisect--helper.c:27
+#: builtin/bisect--helper.c:25
msgid ""
"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
"term-new]"
@@ -10590,7 +10868,7 @@
"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
"term-new]"
-#: builtin/bisect--helper.c:28
+#: builtin/bisect--helper.c:26
msgid ""
"git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
"=<term>] [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] "
@@ -10600,62 +10878,66 @@
"good}=<Begriff>] [--no-checkout] [--first-parent] [<schlecht> [<gut>...]] "
"[--] [<Pfade>...]"
-#: builtin/bisect--helper.c:30
+#: builtin/bisect--helper.c:28
msgid "git bisect--helper --bisect-next"
msgstr "git bisect--helper --bisect-next"
-#: builtin/bisect--helper.c:31
-msgid "git bisect--helper --bisect-auto-next"
-msgstr "git bisect--helper --bisect-auto-next"
-
-#: builtin/bisect--helper.c:32
+#: builtin/bisect--helper.c:29
msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
msgstr "git bisect--helper --bisect-state (bad|new) [<Commit>]"
-#: builtin/bisect--helper.c:33
+#: builtin/bisect--helper.c:30
msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
msgstr "git bisect--helper --bisect-state (good|old) [<Commit>...]"
-#: builtin/bisect--helper.c:108
+#: builtin/bisect--helper.c:31
+msgid "git bisect--helper --bisect-replay <filename>"
+msgstr "git bisect--helper --bisect-replay <Dateiname>"
+
+#: builtin/bisect--helper.c:32
+msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
+msgstr "git bisect--helper --bisect-skip [(<Commit>|<Bereich>)...]"
+
+#: builtin/bisect--helper.c:107
#, c-format
msgid "cannot open file '%s' in mode '%s'"
msgstr "kann Datei '%s' nicht im Modus '%s' öffnen"
-#: builtin/bisect--helper.c:115
+#: builtin/bisect--helper.c:114
#, c-format
msgid "could not write to file '%s'"
msgstr "konnte nicht in Datei '%s' schreiben"
-#: builtin/bisect--helper.c:154
+#: builtin/bisect--helper.c:153
#, c-format
msgid "'%s' is not a valid term"
msgstr "'%s' ist kein gültiger Begriff"
-#: builtin/bisect--helper.c:158
+#: builtin/bisect--helper.c:157
#, c-format
msgid "can't use the builtin command '%s' as a term"
msgstr "kann den eingebauten Befehl '%s' nicht als Begriff verwenden"
-#: builtin/bisect--helper.c:168
+#: builtin/bisect--helper.c:167
#, c-format
msgid "can't change the meaning of the term '%s'"
msgstr "kann die Bedeutung von dem Begriff '%s' nicht ändern"
-#: builtin/bisect--helper.c:178
+#: builtin/bisect--helper.c:177
msgid "please use two different terms"
msgstr "bitte verwenden Sie zwei verschiedene Begriffe"
-#: builtin/bisect--helper.c:194
+#: builtin/bisect--helper.c:193
#, c-format
msgid "We are not bisecting.\n"
msgstr "Keine binäre Suche im Gange.\n"
-#: builtin/bisect--helper.c:202
+#: builtin/bisect--helper.c:201
#, c-format
msgid "'%s' is not a valid commit"
msgstr "'%s' ist kein gültiger Commit"
-#: builtin/bisect--helper.c:211
+#: builtin/bisect--helper.c:210
#, c-format
msgid ""
"could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
@@ -10663,27 +10945,27 @@
"Konnte den ursprünglichen HEAD '%s' nicht auschecken.\n"
"Versuchen Sie 'git bisect reset <Commit>'."
-#: builtin/bisect--helper.c:255
+#: builtin/bisect--helper.c:254
#, c-format
msgid "Bad bisect_write argument: %s"
msgstr "Ungültiges \"bisect_write\" Argument: %s"
-#: builtin/bisect--helper.c:260
+#: builtin/bisect--helper.c:259
#, c-format
msgid "couldn't get the oid of the rev '%s'"
-msgstr "Konnte die OID der Revision '%s' nicht erhalten."
+msgstr "konnte die OID der Revision '%s' nicht erhalten"
-#: builtin/bisect--helper.c:272
+#: builtin/bisect--helper.c:271
#, c-format
msgid "couldn't open the file '%s'"
-msgstr "Konnte die Datei '%s' nicht öffnen."
+msgstr "konnte die Datei '%s' nicht öffnen"
-#: builtin/bisect--helper.c:298
+#: builtin/bisect--helper.c:297
#, c-format
msgid "Invalid command: you're currently in a %s/%s bisect"
-msgstr "Ungültiger Befehl: Sie sind gerade bei einer binären %s/%s Suche."
+msgstr "Ungültiger Befehl: Sie sind gerade innerhalb einer binären %s/%s Suche"
-#: builtin/bisect--helper.c:325
+#: builtin/bisect--helper.c:324
#, c-format
msgid ""
"You need to give me at least one %s and %s revision.\n"
@@ -10692,7 +10974,7 @@
"Sie müssen mindestens einen \"%s\" und einen \"%s\" Commit angeben.\n"
"Sie können dafür \"git bisect %s\" und \"git bisect %s\" benutzen."
-#: builtin/bisect--helper.c:329
+#: builtin/bisect--helper.c:328
#, c-format
msgid ""
"You need to start by \"git bisect start\".\n"
@@ -10703,24 +10985,24 @@
"Danach müssen Sie mindestens einen \"%s\" und einen \"%s\" Commit angeben.\n"
"Sie können dafür \"git bisect %s\" und \"git bisect %s\" benutzen."
-#: builtin/bisect--helper.c:349
+#: builtin/bisect--helper.c:348
#, c-format
msgid "bisecting only with a %s commit"
-msgstr "Binäre Suche nur mit einem %s Commit."
+msgstr "binäre Suche nur mit einem %s Commit"
#. TRANSLATORS: Make sure to include [Y] and [n] in your
#. translation. The program will only accept English input
#. at this point.
#.
-#: builtin/bisect--helper.c:357
+#: builtin/bisect--helper.c:356
msgid "Are you sure [Y/n]? "
msgstr "Sind Sie sicher [Y/n]? "
-#: builtin/bisect--helper.c:418
+#: builtin/bisect--helper.c:417
msgid "no terms defined"
-msgstr "Keine Begriffe definiert."
+msgstr "keine Begriffe definiert"
-#: builtin/bisect--helper.c:421
+#: builtin/bisect--helper.c:420
#, c-format
msgid ""
"Your current terms are %s for the old state\n"
@@ -10729,7 +11011,7 @@
"Ihre aktuellen Begriffe sind %s für den alten Zustand\n"
"und %s für den neuen Zustand.\n"
-#: builtin/bisect--helper.c:431
+#: builtin/bisect--helper.c:430
#, c-format
msgid ""
"invalid argument %s for 'git bisect terms'.\n"
@@ -10738,55 +11020,55 @@
"Ungültiges Argument %s für 'git bisect terms'.\n"
"Unterstützte Optionen sind: --term-good|--term-old und --term-bad|--term-new."
-#: builtin/bisect--helper.c:498
+#: builtin/bisect--helper.c:497 builtin/bisect--helper.c:1014
msgid "revision walk setup failed\n"
msgstr "Einrichtung des Revisionsgangs fehlgeschlagen\n"
-#: builtin/bisect--helper.c:520
+#: builtin/bisect--helper.c:519
#, c-format
msgid "could not open '%s' for appending"
msgstr "konnte '%s' nicht zum Anhängen öffnen"
-#: builtin/bisect--helper.c:639 builtin/bisect--helper.c:652
+#: builtin/bisect--helper.c:638 builtin/bisect--helper.c:651
msgid "'' is not a valid term"
msgstr "'' ist kein gültiger Begriff"
-#: builtin/bisect--helper.c:662
+#: builtin/bisect--helper.c:661
#, c-format
msgid "unrecognized option: '%s'"
msgstr "nicht erkannte Option: '%s'"
-#: builtin/bisect--helper.c:666
+#: builtin/bisect--helper.c:665
#, c-format
msgid "'%s' does not appear to be a valid revision"
msgstr "'%s' scheint kein gültiger Commit zu sein"
-#: builtin/bisect--helper.c:697
+#: builtin/bisect--helper.c:696
msgid "bad HEAD - I need a HEAD"
msgstr "ungültiger HEAD - HEAD wird benötigt"
-#: builtin/bisect--helper.c:712
+#: builtin/bisect--helper.c:711
#, c-format
msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
msgstr ""
"Auschecken von '%s' fehlgeschlagen. Versuchen Sie 'git bisect start "
"<gültiger-Branch>'."
-#: builtin/bisect--helper.c:733
+#: builtin/bisect--helper.c:732
msgid "won't bisect on cg-seek'ed tree"
msgstr ""
"binäre Suche auf einem durch 'cg-seek' geändertem Verzeichnis nicht möglich"
-#: builtin/bisect--helper.c:736
+#: builtin/bisect--helper.c:735
msgid "bad HEAD - strange symbolic ref"
msgstr "ungültiger HEAD - merkwürdige symbolische Referenz"
-#: builtin/bisect--helper.c:756
+#: builtin/bisect--helper.c:755
#, c-format
msgid "invalid ref: '%s'"
msgstr "ungültige Referenz: '%s'"
-#: builtin/bisect--helper.c:814
+#: builtin/bisect--helper.c:813
msgid "You need to start by \"git bisect start\"\n"
msgstr "Sie müssen mit \"git bisect start\" beginnen\n"
@@ -10794,93 +11076,101 @@
#. translation. The program will only accept English input
#. at this point.
#.
-#: builtin/bisect--helper.c:825
+#: builtin/bisect--helper.c:824
msgid "Do you want me to do it for you [Y/n]? "
msgstr "Wollen Sie, dass ich es für Sie mache [Y/n]? "
-#: builtin/bisect--helper.c:843
+#: builtin/bisect--helper.c:842
msgid "Please call `--bisect-state` with at least one argument"
msgstr "Bitte führen Sie `--bisect-state` mit mindestens einem Argument aus"
-#: builtin/bisect--helper.c:856
+#: builtin/bisect--helper.c:855
#, c-format
msgid "'git bisect %s' can take only one argument."
msgstr "'git bisect %s' kann nur ein Argument entgegennehmen."
-#: builtin/bisect--helper.c:868 builtin/bisect--helper.c:879
+#: builtin/bisect--helper.c:867 builtin/bisect--helper.c:878
#, c-format
msgid "Bad rev input: %s"
msgstr "Ungültige Referenz-Eingabe: %s"
-#: builtin/bisect--helper.c:924
+#: builtin/bisect--helper.c:912
+msgid "We are not bisecting."
+msgstr "Keine binäre Suche im Gange."
+
+#: builtin/bisect--helper.c:962
+#, c-format
+msgid "'%s'?? what are you talking about?"
+msgstr "'%s'?? Was reden Sie da?"
+
+#: builtin/bisect--helper.c:974
+#, c-format
+msgid "cannot read file '%s' for replaying"
+msgstr "kann Datei '%s' nicht für die Wiederholung lesen"
+
+#: builtin/bisect--helper.c:1047
msgid "reset the bisection state"
msgstr "den Zustand der binären Suche zurücksetzen"
-#: builtin/bisect--helper.c:926
-msgid "write out the bisection state in BISECT_LOG"
-msgstr "den Zustand der binären Suche nach BISECT_LOG schreiben"
-
-#: builtin/bisect--helper.c:928
-msgid "check and set terms in a bisection state"
-msgstr "Begriffe innerhalb einer binären Suche prüfen und setzen"
-
-#: builtin/bisect--helper.c:930
+#: builtin/bisect--helper.c:1049
msgid "check whether bad or good terms exist"
msgstr "prüfen, ob Begriffe für gute und schlechte Commits existieren"
-#: builtin/bisect--helper.c:932
+#: builtin/bisect--helper.c:1051
msgid "print out the bisect terms"
msgstr "die Begriffe für die binäre Suche ausgeben"
-#: builtin/bisect--helper.c:934
+#: builtin/bisect--helper.c:1053
msgid "start the bisect session"
msgstr "Sitzung für binäre Suche starten"
-#: builtin/bisect--helper.c:936
+#: builtin/bisect--helper.c:1055
msgid "find the next bisection commit"
msgstr "nächsten Commit für die binäre Suche finden"
-#: builtin/bisect--helper.c:938
-msgid "verify the next bisection state then checkout the next bisection commit"
-msgstr ""
-"überprüfe den nächsten Zustand der binären Suche, checke dann den nächsten "
-"Commit der binären Suche aus"
-
-#: builtin/bisect--helper.c:940
+#: builtin/bisect--helper.c:1057
msgid "mark the state of ref (or refs)"
msgstr "den Status der Referenz(en) markieren"
-#: builtin/bisect--helper.c:942
+#: builtin/bisect--helper.c:1059
+msgid "list the bisection steps so far"
+msgstr "die bisherigen Schritte der binären Suche auflisten"
+
+#: builtin/bisect--helper.c:1061
+msgid "replay the bisection process from the given file"
+msgstr "binäre Suche aus der angegebenen Datei wiederholen"
+
+#: builtin/bisect--helper.c:1063
+msgid "skip some commits for checkout"
+msgstr "einige Commits für das Auschecken überspringen"
+
+#: builtin/bisect--helper.c:1065
msgid "no log for BISECT_WRITE"
msgstr "kein Log für BISECT_WRITE"
-#: builtin/bisect--helper.c:957
+#: builtin/bisect--helper.c:1080
msgid "--bisect-reset requires either no argument or a commit"
msgstr "--bisect-reset benötigt entweder kein Argument oder ein Commit"
-#: builtin/bisect--helper.c:961
-msgid "--bisect-write requires either 4 or 5 arguments"
-msgstr "--bisect-write benötigt entweder 4 oder 5 Argumente"
-
-#: builtin/bisect--helper.c:967
-msgid "--check-and-set-terms requires 3 arguments"
-msgstr "--check-and-set-terms benötigt 3 Argumente"
-
-#: builtin/bisect--helper.c:973
+#: builtin/bisect--helper.c:1085
msgid "--bisect-next-check requires 2 or 3 arguments"
msgstr "--bisect-next-check benötigt 2 oder 3 Argumente"
-#: builtin/bisect--helper.c:979
+#: builtin/bisect--helper.c:1091
msgid "--bisect-terms requires 0 or 1 argument"
msgstr "--bisect-terms benötigt 0 oder 1 Argument"
-#: builtin/bisect--helper.c:988
+#: builtin/bisect--helper.c:1100
msgid "--bisect-next requires 0 arguments"
msgstr "--bisect-next benötigt 0 Argumente"
-#: builtin/bisect--helper.c:994
-msgid "--bisect-auto-next requires 0 arguments"
-msgstr "--bisect-auto-next benötigt 0 Argumente"
+#: builtin/bisect--helper.c:1111
+msgid "--bisect-log requires 0 arguments"
+msgstr "--bisect-log benötigt 0 Argumente"
+
+#: builtin/bisect--helper.c:1116
+msgid "no logfile given"
+msgstr "keine Log-Datei angegeben"
#: builtin/blame.c:32
msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
@@ -10899,142 +11189,146 @@
msgid "must end with a color"
msgstr "muss mit einer Farbe enden"
-#: builtin/blame.c:730
+#: builtin/blame.c:728
#, c-format
msgid "invalid color '%s' in color.blame.repeatedLines"
msgstr "ungültige Farbe '%s' in color.blame.repeatedLines"
-#: builtin/blame.c:748
+#: builtin/blame.c:746
msgid "invalid value for blame.coloring"
msgstr "ungültiger Wert für blame.coloring"
-#: builtin/blame.c:847
+#: builtin/blame.c:845
#, c-format
msgid "cannot find revision %s to ignore"
msgstr "konnte Commit %s zum Ignorieren nicht finden"
+#: builtin/blame.c:867
+msgid "show blame entries as we find them, incrementally"
+msgstr "\"blame\"-Einträge schrittweise anzeigen, während wir sie finden"
+
+#: builtin/blame.c:868
+msgid "do not show object names of boundary commits (Default: off)"
+msgstr "keine Objektnamen für Grenz-Commits anzeigen (Standard: aus)"
+
#: builtin/blame.c:869
-msgid "Show blame entries as we find them, incrementally"
-msgstr "\"blame\"-Einträge schrittweise anzeigen, während wir sie generieren"
-
-#: builtin/blame.c:870
-msgid "Do not show object names of boundary commits (Default: off)"
-msgstr "Zeige keine Objektnamen für Grenz-Commits an (Standard: aus)"
-
-#: builtin/blame.c:871
-msgid "Do not treat root commits as boundaries (Default: off)"
+msgid "do not treat root commits as boundaries (Default: off)"
msgstr "Root-Commits nicht als Grenzen behandeln (Standard: aus)"
-#: builtin/blame.c:872
-msgid "Show work cost statistics"
+#: builtin/blame.c:870
+msgid "show work cost statistics"
msgstr "Statistiken zum Arbeitsaufwand anzeigen"
-#: builtin/blame.c:873
-msgid "Force progress reporting"
+#: builtin/blame.c:871 builtin/checkout.c:1503 builtin/clone.c:92
+#: builtin/commit-graph.c:84 builtin/commit-graph.c:222 builtin/fetch.c:175
+#: builtin/merge.c:297 builtin/multi-pack-index.c:27 builtin/pull.c:119
+#: builtin/push.c:575 builtin/send-pack.c:198
+msgid "force progress reporting"
msgstr "Fortschrittsanzeige erzwingen"
-#: builtin/blame.c:874
-msgid "Show output score for blame entries"
+#: builtin/blame.c:872
+msgid "show output score for blame entries"
msgstr "Ausgabebewertung für \"blame\"-Einträge anzeigen"
-#: builtin/blame.c:875
-msgid "Show original filename (Default: auto)"
+#: builtin/blame.c:873
+msgid "show original filename (Default: auto)"
msgstr "ursprünglichen Dateinamen anzeigen (Standard: auto)"
-#: builtin/blame.c:876
-msgid "Show original linenumber (Default: off)"
+#: builtin/blame.c:874
+msgid "show original linenumber (Default: off)"
msgstr "ursprüngliche Zeilennummer anzeigen (Standard: aus)"
-#: builtin/blame.c:877
-msgid "Show in a format designed for machine consumption"
+#: builtin/blame.c:875
+msgid "show in a format designed for machine consumption"
msgstr "Anzeige in einem Format für maschinelle Auswertung"
-#: builtin/blame.c:878
-msgid "Show porcelain format with per-line commit information"
+#: builtin/blame.c:876
+msgid "show porcelain format with per-line commit information"
msgstr ""
"Anzeige in Format für Fremdprogramme mit Commit-Informationen pro Zeile"
-#: builtin/blame.c:879
-msgid "Use the same output mode as git-annotate (Default: off)"
+#: builtin/blame.c:877
+msgid "use the same output mode as git-annotate (Default: off)"
msgstr ""
-"Den gleichen Ausgabemodus benutzen wie \"git-annotate\" (Standard: aus)"
+"den gleichen Ausgabemodus benutzen wie \"git-annotate\" (Standard: aus)"
+
+#: builtin/blame.c:878
+msgid "show raw timestamp (Default: off)"
+msgstr "unbearbeiteten Zeitstempel anzeigen (Standard: aus)"
+
+#: builtin/blame.c:879
+msgid "show long commit SHA1 (Default: off)"
+msgstr "langen Commit-SHA1 anzeigen (Standard: aus)"
#: builtin/blame.c:880
-msgid "Show raw timestamp (Default: off)"
-msgstr "Unbearbeiteten Zeitstempel anzeigen (Standard: aus)"
+msgid "suppress author name and timestamp (Default: off)"
+msgstr "den Namen des Autors und den Zeitstempel unterdrücken (Standard: aus)"
#: builtin/blame.c:881
-msgid "Show long commit SHA1 (Default: off)"
-msgstr "Langen Commit-SHA1 anzeigen (Standard: aus)"
+msgid "show author email instead of name (Default: off)"
+msgstr ""
+"statt des Namens die E-Mail-Adresse des Autors anzeigen (Standard: aus)"
#: builtin/blame.c:882
-msgid "Suppress author name and timestamp (Default: off)"
-msgstr "Den Namen des Autors und den Zeitstempel unterdrücken (Standard: aus)"
+msgid "ignore whitespace differences"
+msgstr "Whitespace-Unterschiede ignorieren"
-#: builtin/blame.c:883
-msgid "Show author email instead of name (Default: off)"
-msgstr ""
-"Anstatt des Namens die E-Mail-Adresse des Autors anzeigen (Standard: aus)"
-
-#: builtin/blame.c:884
-msgid "Ignore whitespace differences"
-msgstr "Unterschiede im Whitespace ignorieren"
-
-#: builtin/blame.c:885 builtin/log.c:1813
+#: builtin/blame.c:883 builtin/log.c:1812
msgid "rev"
msgstr "Commit"
+#: builtin/blame.c:883
+msgid "ignore <rev> when blaming"
+msgstr "ignoriere <Commit> beim Ausführen von 'blame'"
+
+#: builtin/blame.c:884
+msgid "ignore revisions from <file>"
+msgstr "ignoriere Commits aus <Datei>"
+
#: builtin/blame.c:885
-msgid "Ignore <rev> when blaming"
-msgstr "Ignoriere <Commit> beim Ausführen von 'blame'"
-
-#: builtin/blame.c:886
-msgid "Ignore revisions from <file>"
-msgstr "Ignoriere Commits aus <Datei>"
-
-#: builtin/blame.c:887
msgid "color redundant metadata from previous line differently"
msgstr "redundante Metadaten der vorherigen Zeile unterschiedlich einfärben"
-#: builtin/blame.c:888
+#: builtin/blame.c:886
msgid "color lines by age"
msgstr "Zeilen nach Alter einfärben"
+#: builtin/blame.c:887
+msgid "spend extra cycles to find better match"
+msgstr ""
+"mehr Arbeitsschritte ausführen, um eine bessere Übereinstimmung zu finden"
+
+#: builtin/blame.c:888
+msgid "use revisions from <file> instead of calling git-rev-list"
+msgstr "Commits von <Datei> benutzen, statt \"git-rev-list\" aufzurufen"
+
#: builtin/blame.c:889
-msgid "Spend extra cycles to find better match"
-msgstr "Länger arbeiten, um bessere Übereinstimmungen zu finden"
-
-#: builtin/blame.c:890
-msgid "Use revisions from <file> instead of calling git-rev-list"
-msgstr "Commits von <Datei> benutzen, anstatt \"git-rev-list\" aufzurufen"
-
-#: builtin/blame.c:891
-msgid "Use <file>'s contents as the final image"
+msgid "use <file>'s contents as the final image"
msgstr "Inhalte der <Datei>en als endgültiges Abbild benutzen"
-#: builtin/blame.c:892 builtin/blame.c:893
+#: builtin/blame.c:890 builtin/blame.c:891
msgid "score"
msgstr "Bewertung"
-#: builtin/blame.c:892
-msgid "Find line copies within and across files"
+#: builtin/blame.c:890
+msgid "find line copies within and across files"
msgstr "kopierte Zeilen innerhalb oder zwischen Dateien finden"
-#: builtin/blame.c:893
-msgid "Find line movements within and across files"
+#: builtin/blame.c:891
+msgid "find line movements within and across files"
msgstr "verschobene Zeilen innerhalb oder zwischen Dateien finden"
-#: builtin/blame.c:894
+#: builtin/blame.c:892
msgid "range"
msgstr "Bereich"
-#: builtin/blame.c:895
-msgid "Process only line range <start>,<end> or function :<funcname>"
+#: builtin/blame.c:893
+msgid "process only line range <start>,<end> or function :<funcname>"
msgstr ""
-"Nur Zeilen im Bereich <Start>,<Ende> oder Funktion :<Funktionsname> "
+"nur Zeilen im Bereich <Start>,<Ende> oder Funktion :<Funktionsname> "
"verarbeiten"
-#: builtin/blame.c:947
+#: builtin/blame.c:945
msgid "--progress can't be used with --incremental or porcelain formats"
msgstr ""
"--progress kann nicht mit --incremental oder Formaten für Fremdprogramme\n"
@@ -11048,18 +11342,18 @@
#. your language may need more or fewer display
#. columns.
#.
-#: builtin/blame.c:998
+#: builtin/blame.c:996
msgid "4 years, 11 months ago"
msgstr "vor 4 Jahren und 11 Monaten"
-#: builtin/blame.c:1114
+#: builtin/blame.c:1112
#, c-format
msgid "file %s has only %lu line"
msgid_plural "file %s has only %lu lines"
msgstr[0] "Datei %s hat nur %lu Zeile"
msgstr[1] "Datei %s hat nur %lu Zeilen"
-#: builtin/blame.c:1159
+#: builtin/blame.c:1157
msgid "Blaming lines"
msgstr "Verarbeite Zeilen"
@@ -11128,124 +11422,114 @@
msgid "Update of config-file failed"
msgstr "Aktualisierung der Konfigurationsdatei fehlgeschlagen."
-#: builtin/branch.c:220
+#: builtin/branch.c:223
msgid "cannot use -a with -d"
msgstr "kann -a nicht mit -d benutzen"
-#: builtin/branch.c:226
+#: builtin/branch.c:230
msgid "Couldn't look up commit object for HEAD"
msgstr "Konnte Commit-Objekt für HEAD nicht nachschlagen."
-#: builtin/branch.c:240
+#: builtin/branch.c:244
#, c-format
msgid "Cannot delete branch '%s' checked out at '%s'"
msgstr "Kann Branch '%s' nicht entfernen, ausgecheckt in '%s'."
-#: builtin/branch.c:255
+#: builtin/branch.c:259
#, c-format
msgid "remote-tracking branch '%s' not found."
msgstr "Remote-Tracking-Branch '%s' nicht gefunden"
-#: builtin/branch.c:256
+#: builtin/branch.c:260
#, c-format
msgid "branch '%s' not found."
msgstr "Branch '%s' nicht gefunden."
-#: builtin/branch.c:271
-#, c-format
-msgid "Error deleting remote-tracking branch '%s'"
-msgstr "Fehler beim Entfernen des Remote-Tracking-Branches '%s'"
-
-#: builtin/branch.c:272
-#, c-format
-msgid "Error deleting branch '%s'"
-msgstr "Fehler beim Entfernen des Branches '%s'"
-
-#: builtin/branch.c:279
+#: builtin/branch.c:291
#, c-format
msgid "Deleted remote-tracking branch %s (was %s).\n"
msgstr "Remote-Tracking-Branch %s entfernt (war %s).\n"
-#: builtin/branch.c:280
+#: builtin/branch.c:292
#, c-format
msgid "Deleted branch %s (was %s).\n"
msgstr "Branch %s entfernt (war %s).\n"
-#: builtin/branch.c:429 builtin/tag.c:61
+#: builtin/branch.c:438 builtin/tag.c:61
msgid "unable to parse format string"
msgstr "Konnte Formatierungsstring nicht parsen."
-#: builtin/branch.c:460
+#: builtin/branch.c:469
msgid "could not resolve HEAD"
msgstr "Konnte HEAD-Commit nicht auflösen."
-#: builtin/branch.c:466
+#: builtin/branch.c:475
#, c-format
msgid "HEAD (%s) points outside of refs/heads/"
msgstr "HEAD (%s) wurde nicht unter \"refs/heads/\" gefunden!"
-#: builtin/branch.c:481
+#: builtin/branch.c:490
#, c-format
msgid "Branch %s is being rebased at %s"
msgstr "Branch %s wird auf %s umgesetzt"
-#: builtin/branch.c:485
+#: builtin/branch.c:494
#, c-format
msgid "Branch %s is being bisected at %s"
msgstr "Binäre Suche von Branch %s zu %s im Gange"
-#: builtin/branch.c:502
+#: builtin/branch.c:511
msgid "cannot copy the current branch while not on any."
msgstr ""
"Kann den aktuellen Branch nicht kopieren, solange Sie sich auf keinem "
"befinden."
-#: builtin/branch.c:504
+#: builtin/branch.c:513
msgid "cannot rename the current branch while not on any."
msgstr ""
"Kann aktuellen Branch nicht umbenennen, solange Sie sich auf keinem befinden."
-#: builtin/branch.c:515
+#: builtin/branch.c:524
#, c-format
msgid "Invalid branch name: '%s'"
msgstr "Ungültiger Branchname: '%s'"
-#: builtin/branch.c:544
+#: builtin/branch.c:553
msgid "Branch rename failed"
msgstr "Umbenennung des Branches fehlgeschlagen"
-#: builtin/branch.c:546
+#: builtin/branch.c:555
msgid "Branch copy failed"
msgstr "Kopie des Branches fehlgeschlagen"
-#: builtin/branch.c:550
+#: builtin/branch.c:559
#, c-format
msgid "Created a copy of a misnamed branch '%s'"
msgstr "Kopie eines falsch benannten Branches '%s' erstellt."
-#: builtin/branch.c:553
+#: builtin/branch.c:562
#, c-format
msgid "Renamed a misnamed branch '%s' away"
msgstr "falsch benannten Branch '%s' umbenannt"
-#: builtin/branch.c:559
+#: builtin/branch.c:568
#, c-format
msgid "Branch renamed to %s, but HEAD is not updated!"
msgstr "Branch umbenannt zu %s, aber HEAD ist nicht aktualisiert!"
-#: builtin/branch.c:568
+#: builtin/branch.c:577
msgid "Branch is renamed, but update of config-file failed"
msgstr ""
"Branch ist umbenannt, aber die Aktualisierung der Konfigurationsdatei ist "
"fehlgeschlagen."
-#: builtin/branch.c:570
+#: builtin/branch.c:579
msgid "Branch is copied, but update of config-file failed"
msgstr ""
"Branch wurde kopiert, aber die Aktualisierung der Konfigurationsdatei ist\n"
"fehlgeschlagen."
-#: builtin/branch.c:586
+#: builtin/branch.c:595
#, c-format
msgid ""
"Please edit the description for the branch\n"
@@ -11256,181 +11540,181 @@
" %s\n"
"Zeilen, die mit '%c' beginnen, werden entfernt.\n"
-#: builtin/branch.c:620
+#: builtin/branch.c:629
msgid "Generic options"
msgstr "Allgemeine Optionen"
-#: builtin/branch.c:622
+#: builtin/branch.c:631
msgid "show hash and subject, give twice for upstream branch"
msgstr "Hash und Betreff anzeigen; -vv: zusätzlich Upstream-Branch"
-#: builtin/branch.c:623
+#: builtin/branch.c:632
msgid "suppress informational messages"
msgstr "Informationsmeldungen unterdrücken"
-#: builtin/branch.c:624
+#: builtin/branch.c:633
msgid "set up tracking mode (see git-pull(1))"
msgstr "Modus zum Folgen von Branches einstellen (siehe git-pull(1))"
-#: builtin/branch.c:626
+#: builtin/branch.c:635
msgid "do not use"
msgstr "nicht verwenden"
-#: builtin/branch.c:628 builtin/rebase.c:532
+#: builtin/branch.c:637 builtin/rebase.c:534
msgid "upstream"
msgstr "Upstream"
-#: builtin/branch.c:628
+#: builtin/branch.c:637
msgid "change the upstream info"
msgstr "Informationen zum Upstream-Branch ändern"
-#: builtin/branch.c:629
+#: builtin/branch.c:638
msgid "unset the upstream info"
msgstr "Informationen zum Upstream-Branch entfernen"
-#: builtin/branch.c:630
+#: builtin/branch.c:639
msgid "use colored output"
msgstr "farbige Ausgaben verwenden"
-#: builtin/branch.c:631
+#: builtin/branch.c:640
msgid "act on remote-tracking branches"
msgstr "auf Remote-Tracking-Branches wirken"
-#: builtin/branch.c:633 builtin/branch.c:635
+#: builtin/branch.c:642 builtin/branch.c:644
msgid "print only branches that contain the commit"
msgstr "nur Branches ausgeben, die diesen Commit enthalten"
-#: builtin/branch.c:634 builtin/branch.c:636
+#: builtin/branch.c:643 builtin/branch.c:645
msgid "print only branches that don't contain the commit"
msgstr "nur Branches ausgeben, die diesen Commit nicht enthalten"
-#: builtin/branch.c:639
+#: builtin/branch.c:648
msgid "Specific git-branch actions:"
msgstr "spezifische Aktionen für \"git-branch\":"
-#: builtin/branch.c:640
+#: builtin/branch.c:649
msgid "list both remote-tracking and local branches"
msgstr "Remote-Tracking und lokale Branches auflisten"
-#: builtin/branch.c:642
+#: builtin/branch.c:651
msgid "delete fully merged branch"
msgstr "vollständig zusammengeführten Branch entfernen"
-#: builtin/branch.c:643
+#: builtin/branch.c:652
msgid "delete branch (even if not merged)"
msgstr "Branch löschen (auch wenn nicht zusammengeführt)"
-#: builtin/branch.c:644
+#: builtin/branch.c:653
msgid "move/rename a branch and its reflog"
msgstr "einen Branch und dessen Reflog verschieben/umbenennen"
-#: builtin/branch.c:645
+#: builtin/branch.c:654
msgid "move/rename a branch, even if target exists"
msgstr ""
"einen Branch verschieben/umbenennen, auch wenn das Ziel bereits existiert"
-#: builtin/branch.c:646
+#: builtin/branch.c:655
msgid "copy a branch and its reflog"
msgstr "einen Branch und dessen Reflog kopieren"
-#: builtin/branch.c:647
+#: builtin/branch.c:656
msgid "copy a branch, even if target exists"
msgstr "einen Branch kopieren, auch wenn das Ziel bereits existiert"
-#: builtin/branch.c:648
+#: builtin/branch.c:657
msgid "list branch names"
msgstr "Branchnamen auflisten"
-#: builtin/branch.c:649
+#: builtin/branch.c:658
msgid "show current branch name"
msgstr "Zeige aktuellen Branch-Namen."
-#: builtin/branch.c:650
+#: builtin/branch.c:659
msgid "create the branch's reflog"
msgstr "das Reflog des Branches erzeugen"
-#: builtin/branch.c:652
+#: builtin/branch.c:661
msgid "edit the description for the branch"
msgstr "die Beschreibung für den Branch bearbeiten"
-#: builtin/branch.c:653
+#: builtin/branch.c:662
msgid "force creation, move/rename, deletion"
msgstr "Erstellung, Verschiebung/Umbenennung oder Löschung erzwingen"
-#: builtin/branch.c:654
+#: builtin/branch.c:663
msgid "print only branches that are merged"
msgstr "nur zusammengeführte Branches ausgeben"
-#: builtin/branch.c:655
+#: builtin/branch.c:664
msgid "print only branches that are not merged"
msgstr "nur nicht zusammengeführte Branches ausgeben"
-#: builtin/branch.c:656
+#: builtin/branch.c:665
msgid "list branches in columns"
msgstr "Branches in Spalten auflisten"
-#: builtin/branch.c:658 builtin/for-each-ref.c:42 builtin/notes.c:415
+#: builtin/branch.c:667 builtin/for-each-ref.c:42 builtin/notes.c:415
#: builtin/notes.c:418 builtin/notes.c:581 builtin/notes.c:584
-#: builtin/tag.c:434
+#: builtin/tag.c:466
msgid "object"
msgstr "Objekt"
-#: builtin/branch.c:659
+#: builtin/branch.c:668
msgid "print only branches of the object"
msgstr "nur Branches von diesem Objekt ausgeben"
-#: builtin/branch.c:660 builtin/for-each-ref.c:48 builtin/tag.c:441
+#: builtin/branch.c:669 builtin/for-each-ref.c:48 builtin/tag.c:473
msgid "sorting and filtering are case insensitive"
msgstr "Sortierung und Filterung sind unabhängig von Groß- und Kleinschreibung"
-#: builtin/branch.c:661 builtin/for-each-ref.c:38 builtin/tag.c:439
+#: builtin/branch.c:670 builtin/for-each-ref.c:38 builtin/tag.c:471
#: builtin/verify-tag.c:38
msgid "format to use for the output"
msgstr "für die Ausgabe zu verwendendes Format"
-#: builtin/branch.c:684 builtin/clone.c:790
+#: builtin/branch.c:693 builtin/clone.c:790
msgid "HEAD not found below refs/heads!"
msgstr "HEAD wurde nicht unter \"refs/heads\" gefunden!"
-#: builtin/branch.c:708
+#: builtin/branch.c:717
msgid "--column and --verbose are incompatible"
-msgstr "Die Optionen --column und --verbose sind inkompatibel."
+msgstr "--column und --verbose sind inkompatibel"
-#: builtin/branch.c:723 builtin/branch.c:777 builtin/branch.c:786
+#: builtin/branch.c:732 builtin/branch.c:788 builtin/branch.c:797
msgid "branch name required"
msgstr "Branchname erforderlich"
-#: builtin/branch.c:753
+#: builtin/branch.c:764
msgid "Cannot give description to detached HEAD"
msgstr "zu losgelöstem HEAD kann keine Beschreibung hinterlegt werden"
-#: builtin/branch.c:758
+#: builtin/branch.c:769
msgid "cannot edit description of more than one branch"
msgstr "Beschreibung von mehr als einem Branch kann nicht bearbeitet werden"
-#: builtin/branch.c:765
+#: builtin/branch.c:776
#, c-format
msgid "No commit on branch '%s' yet."
msgstr "Noch kein Commit in Branch '%s'."
-#: builtin/branch.c:768
+#: builtin/branch.c:779
#, c-format
msgid "No branch named '%s'."
msgstr "Branch '%s' nicht vorhanden."
-#: builtin/branch.c:783
+#: builtin/branch.c:794
msgid "too many branches for a copy operation"
msgstr "zu viele Branches für eine Kopieroperation angegeben"
-#: builtin/branch.c:792
+#: builtin/branch.c:803
msgid "too many arguments for a rename operation"
msgstr "zu viele Argumente für eine Umbenennen-Operation angegeben"
-#: builtin/branch.c:797
+#: builtin/branch.c:808
msgid "too many arguments to set new upstream"
msgstr "zu viele Argumente angegeben, um Upstream-Branch zu setzen"
-#: builtin/branch.c:801
+#: builtin/branch.c:812
#, c-format
msgid ""
"could not set upstream of HEAD to %s when it does not point to any branch."
@@ -11438,34 +11722,34 @@
"Konnte keinen neuen Upstream-Branch von HEAD zu %s setzen, da dieser auf\n"
"keinen Branch zeigt."
-#: builtin/branch.c:804 builtin/branch.c:827
+#: builtin/branch.c:815 builtin/branch.c:838
#, c-format
msgid "no such branch '%s'"
-msgstr "Kein solcher Branch '%s'"
+msgstr "Branch '%s' nicht gefunden"
-#: builtin/branch.c:808
+#: builtin/branch.c:819
#, c-format
msgid "branch '%s' does not exist"
msgstr "Branch '%s' existiert nicht"
-#: builtin/branch.c:821
+#: builtin/branch.c:832
msgid "too many arguments to unset upstream"
msgstr ""
"zu viele Argumente angegeben, um Konfiguration zu Upstream-Branch zu "
"entfernen"
-#: builtin/branch.c:825
+#: builtin/branch.c:836
msgid "could not unset upstream of HEAD when it does not point to any branch."
msgstr ""
"Konnte Konfiguration zu Upstream-Branch von HEAD nicht entfernen, da dieser\n"
"auf keinen Branch zeigt."
-#: builtin/branch.c:831
+#: builtin/branch.c:842
#, c-format
msgid "Branch '%s' has no upstream information"
msgstr "Branch '%s' hat keinen Upstream-Branch gesetzt"
-#: builtin/branch.c:841
+#: builtin/branch.c:852
msgid ""
"The -a, and -r, options to 'git branch' do not take a branch name.\n"
"Did you mean to use: -a|-r --list <pattern>?"
@@ -11474,7 +11758,7 @@
"verwendet werden.\n"
"Wollten Sie -a|-r --list <Muster> benutzen?"
-#: builtin/branch.c:845
+#: builtin/branch.c:856
msgid ""
"the '--set-upstream' option is no longer supported. Please use '--track' or "
"'--set-upstream-to' instead."
@@ -11596,19 +11880,19 @@
msgid "git bundle unbundle <file> [<refname>...]"
msgstr "git bundle unbundle <Datei> [<Referenzname>...]"
-#: builtin/bundle.c:67 builtin/pack-objects.c:3480
+#: builtin/bundle.c:67 builtin/pack-objects.c:3495
msgid "do not show progress meter"
msgstr "keine Fortschrittsanzeige anzeigen"
-#: builtin/bundle.c:69 builtin/pack-objects.c:3482
+#: builtin/bundle.c:69 builtin/pack-objects.c:3497
msgid "show progress meter"
msgstr "Fortschrittsanzeige anzeigen"
-#: builtin/bundle.c:71 builtin/pack-objects.c:3484
+#: builtin/bundle.c:71 builtin/pack-objects.c:3499
msgid "show progress meter during object writing phase"
msgstr "Forschrittsanzeige während des Schreibens von Objekten anzeigen"
-#: builtin/bundle.c:74 builtin/pack-objects.c:3487
+#: builtin/bundle.c:74 builtin/pack-objects.c:3502
msgid "similar to --all-progress when progress meter is shown"
msgstr "ähnlich zu --all-progress wenn Fortschrittsanzeige darstellt wird"
@@ -11755,8 +12039,8 @@
msgid "terminate input and output records by a NUL character"
msgstr "Einträge von Ein- und Ausgabe mit NUL-Zeichen abschließen"
-#: builtin/check-ignore.c:21 builtin/checkout.c:1500 builtin/gc.c:541
-#: builtin/worktree.c:561
+#: builtin/check-ignore.c:21 builtin/checkout.c:1499 builtin/gc.c:549
+#: builtin/worktree.c:489
msgid "suppress progress reporting"
msgstr "Fortschrittsanzeige unterdrücken"
@@ -11774,7 +12058,7 @@
#: builtin/check-ignore.c:166
msgid "-z only makes sense with --stdin"
-msgstr "Die Option -z kann nur mit --stdin verwendet werden."
+msgstr "-z kann nur mit --stdin verwendet werden"
#: builtin/check-ignore.c:168
msgid "no path specified"
@@ -11782,12 +12066,11 @@
#: builtin/check-ignore.c:172
msgid "--quiet is only valid with a single pathname"
-msgstr "Die Option --quiet ist nur mit einem einzelnen Pfadnamen gültig."
+msgstr "--quiet ist nur mit einem einzelnen Pfadnamen gültig"
#: builtin/check-ignore.c:174
msgid "cannot have both --quiet and --verbose"
-msgstr ""
-"Die Optionen --quiet und --verbose können nicht gemeinsam verwendet werden."
+msgstr "--quiet und --verbose können nicht gemeinsam verwendet werden"
#: builtin/check-ignore.c:177
msgid "--non-matching is only valid with --verbose"
@@ -11810,57 +12093,57 @@
msgid "no contacts specified"
msgstr "keine Kontakte angegeben"
-#: builtin/checkout-index.c:139
+#: builtin/checkout-index.c:152
msgid "git checkout-index [<options>] [--] [<file>...]"
msgstr "git checkout-index [<Optionen>] [--] [<Datei>...]"
-#: builtin/checkout-index.c:156
+#: builtin/checkout-index.c:169
msgid "stage should be between 1 and 3 or all"
msgstr "--stage sollte zwischen 1 und 3 oder 'all' sein"
-#: builtin/checkout-index.c:173
+#: builtin/checkout-index.c:186
msgid "check out all files in the index"
msgstr "alle Dateien im Index auschecken"
-#: builtin/checkout-index.c:174
+#: builtin/checkout-index.c:187
msgid "force overwrite of existing files"
msgstr "das Überschreiben bereits existierender Dateien erzwingen"
-#: builtin/checkout-index.c:176
+#: builtin/checkout-index.c:189
msgid "no warning for existing files and files not in index"
msgstr ""
"keine Warnung für existierende Dateien, und Dateien, die sich nicht im Index "
"befinden"
-#: builtin/checkout-index.c:178
+#: builtin/checkout-index.c:191
msgid "don't checkout new files"
msgstr "keine neuen Dateien auschecken"
-#: builtin/checkout-index.c:180
+#: builtin/checkout-index.c:193
msgid "update stat information in the index file"
msgstr "Dateiinformationen in der Index-Datei aktualisieren"
-#: builtin/checkout-index.c:184
+#: builtin/checkout-index.c:197
msgid "read list of paths from the standard input"
msgstr "eine Liste von Pfaden von der Standard-Eingabe lesen"
-#: builtin/checkout-index.c:186
+#: builtin/checkout-index.c:199
msgid "write the content to temporary files"
msgstr "den Inhalt in temporäre Dateien schreiben"
-#: builtin/checkout-index.c:187 builtin/column.c:31
+#: builtin/checkout-index.c:200 builtin/column.c:31
#: builtin/submodule--helper.c:1824 builtin/submodule--helper.c:1827
#: builtin/submodule--helper.c:1835 builtin/submodule--helper.c:2333
-#: builtin/worktree.c:757
+#: builtin/worktree.c:717
msgid "string"
msgstr "Zeichenkette"
-#: builtin/checkout-index.c:188
+#: builtin/checkout-index.c:201
msgid "when creating files, prepend <string>"
msgstr ""
"wenn Dateien erzeugt werden, stelle <Zeichenkette> dem Dateinamen voran"
-#: builtin/checkout-index.c:190
+#: builtin/checkout-index.c:203
msgid "copy out the files from named stage"
msgstr "Dateien von dem benannten Stand kopieren"
@@ -11963,16 +12246,16 @@
msgid "'%s' or '%s' cannot be used with %s"
msgstr "'%s' oder '%s' kann nicht mit %s verwendet werden"
-#: builtin/checkout.c:541 builtin/checkout.c:548
+#: builtin/checkout.c:543 builtin/checkout.c:550
#, c-format
msgid "path '%s' is unmerged"
msgstr "Pfad '%s' ist nicht zusammengeführt."
-#: builtin/checkout.c:716
+#: builtin/checkout.c:718
msgid "you need to resolve your current index first"
msgstr "Sie müssen zuerst die Konflikte in Ihrem aktuellen Index auflösen."
-#: builtin/checkout.c:770
+#: builtin/checkout.c:772
#, c-format
msgid ""
"cannot continue with staged changes in the following files:\n"
@@ -11981,50 +12264,50 @@
"Kann nicht mit vorgemerkten Änderungen in folgenden Dateien fortsetzen:\n"
"%s"
-#: builtin/checkout.c:866
+#: builtin/checkout.c:865
#, c-format
msgid "Can not do reflog for '%s': %s\n"
msgstr "Kann \"reflog\" für '%s' nicht durchführen: %s\n"
-#: builtin/checkout.c:908
+#: builtin/checkout.c:907
msgid "HEAD is now at"
msgstr "HEAD ist jetzt bei"
-#: builtin/checkout.c:912 builtin/clone.c:721 t/helper/test-fast-rebase.c:202
+#: builtin/checkout.c:911 builtin/clone.c:721 t/helper/test-fast-rebase.c:202
msgid "unable to update HEAD"
msgstr "Konnte HEAD nicht aktualisieren."
-#: builtin/checkout.c:916
+#: builtin/checkout.c:915
#, c-format
msgid "Reset branch '%s'\n"
msgstr "Setze Branch '%s' neu\n"
-#: builtin/checkout.c:919
+#: builtin/checkout.c:918
#, c-format
msgid "Already on '%s'\n"
msgstr "Bereits auf '%s'\n"
-#: builtin/checkout.c:923
+#: builtin/checkout.c:922
#, c-format
msgid "Switched to and reset branch '%s'\n"
msgstr "Zu umgesetztem Branch '%s' gewechselt\n"
-#: builtin/checkout.c:925 builtin/checkout.c:1356
+#: builtin/checkout.c:924 builtin/checkout.c:1355
#, c-format
msgid "Switched to a new branch '%s'\n"
msgstr "Zu neuem Branch '%s' gewechselt\n"
-#: builtin/checkout.c:927
+#: builtin/checkout.c:926
#, c-format
msgid "Switched to branch '%s'\n"
msgstr "Zu Branch '%s' gewechselt\n"
-#: builtin/checkout.c:978
+#: builtin/checkout.c:977
#, c-format
msgid " ... and %d more.\n"
msgstr " ... und %d weitere.\n"
-#: builtin/checkout.c:984
+#: builtin/checkout.c:983
#, c-format
msgid ""
"Warning: you are leaving %d commit behind, not connected to\n"
@@ -12047,7 +12330,7 @@
"\n"
"%s\n"
-#: builtin/checkout.c:1003
+#: builtin/checkout.c:1002
#, c-format
msgid ""
"If you want to keep it by creating a new branch, this may be a good time\n"
@@ -12074,19 +12357,19 @@
" git branch <neuer-Branchname> %s\n"
"\n"
-#: builtin/checkout.c:1038
+#: builtin/checkout.c:1037
msgid "internal error in revision walk"
msgstr "interner Fehler im Revisionsgang"
-#: builtin/checkout.c:1042
+#: builtin/checkout.c:1041
msgid "Previous HEAD position was"
msgstr "Vorherige Position von HEAD war"
-#: builtin/checkout.c:1082 builtin/checkout.c:1351
+#: builtin/checkout.c:1081 builtin/checkout.c:1350
msgid "You are on a branch yet to be born"
msgstr "Sie sind auf einem Branch, der noch nicht geboren ist"
-#: builtin/checkout.c:1164
+#: builtin/checkout.c:1163
#, c-format
msgid ""
"'%s' could be both a local file and a tracking branch.\n"
@@ -12096,7 +12379,7 @@
"Bitte benutzen Sie -- (und optional --no-guess), um diese\n"
"eindeutig voneinander zu unterscheiden."
-#: builtin/checkout.c:1171
+#: builtin/checkout.c:1170
msgid ""
"If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
"you can do so by fully qualifying the name with the --track option:\n"
@@ -12119,51 +12402,51 @@
"bevorzugen möchten, z.B. 'origin', können Sie die Einstellung\n"
"checkout.defaultRemote=origin in Ihrer Konfiguration setzen."
-#: builtin/checkout.c:1181
+#: builtin/checkout.c:1180
#, c-format
msgid "'%s' matched multiple (%d) remote tracking branches"
msgstr "'%s' entspricht mehreren (%d) Remote-Tracking-Branches"
-#: builtin/checkout.c:1247
+#: builtin/checkout.c:1246
msgid "only one reference expected"
msgstr "nur eine Referenz erwartet"
-#: builtin/checkout.c:1264
+#: builtin/checkout.c:1263
#, c-format
msgid "only one reference expected, %d given."
msgstr "nur eine Referenz erwartet, %d gegeben."
-#: builtin/checkout.c:1310 builtin/worktree.c:342 builtin/worktree.c:510
+#: builtin/checkout.c:1309 builtin/worktree.c:270 builtin/worktree.c:438
#, c-format
msgid "invalid reference: %s"
msgstr "Ungültige Referenz: %s"
-#: builtin/checkout.c:1323 builtin/checkout.c:1689
+#: builtin/checkout.c:1322 builtin/checkout.c:1688
#, c-format
msgid "reference is not a tree: %s"
msgstr "Referenz ist kein \"Tree\"-Objekt: %s"
-#: builtin/checkout.c:1370
+#: builtin/checkout.c:1369
#, c-format
msgid "a branch is expected, got tag '%s'"
msgstr "Ein Branch wird erwartet, Tag '%s' bekommen"
-#: builtin/checkout.c:1372
+#: builtin/checkout.c:1371
#, c-format
msgid "a branch is expected, got remote branch '%s'"
msgstr "Ein Branch wird erwartet, Remote-Branch '%s' bekommen"
-#: builtin/checkout.c:1373 builtin/checkout.c:1381
+#: builtin/checkout.c:1372 builtin/checkout.c:1380
#, c-format
msgid "a branch is expected, got '%s'"
msgstr "Ein Branch wird erwartet, '%s' bekommen"
-#: builtin/checkout.c:1376
+#: builtin/checkout.c:1375
#, c-format
msgid "a branch is expected, got commit '%s'"
msgstr "Ein Branch wird erwartet, Commit '%s' bekommen"
-#: builtin/checkout.c:1392
+#: builtin/checkout.c:1391
msgid ""
"cannot switch branch while merging\n"
"Consider \"git merge --quit\" or \"git worktree add\"."
@@ -12171,7 +12454,7 @@
"Der Branch kann nicht während eines Merges gewechselt werden.\n"
"Ziehen Sie \"git merge --quit\" oder \"git worktree add\" in Betracht."
-#: builtin/checkout.c:1396
+#: builtin/checkout.c:1395
msgid ""
"cannot switch branch in the middle of an am session\n"
"Consider \"git am --quit\" or \"git worktree add\"."
@@ -12180,7 +12463,7 @@
"werden.\n"
"Ziehen Sie \"git am --quit\" oder \"git worktree add\" in Betracht."
-#: builtin/checkout.c:1400
+#: builtin/checkout.c:1399
msgid ""
"cannot switch branch while rebasing\n"
"Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -12189,7 +12472,7 @@
"werden.\n"
"Ziehen Sie \"git rebase --quit\" oder \"git worktree add\" in Betracht."
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1403
msgid ""
"cannot switch branch while cherry-picking\n"
"Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -12198,7 +12481,7 @@
"gewechselt werden.\n"
"Ziehen Sie \"git cherry-pick --quit\" oder \"git worktree add\" in Betracht."
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1407
msgid ""
"cannot switch branch while reverting\n"
"Consider \"git revert --quit\" or \"git worktree add\"."
@@ -12207,147 +12490,140 @@
"werden.\n"
"Ziehen Sie \"git revert --quit\" oder \"git worktree add\" in Betracht."
-#: builtin/checkout.c:1412
+#: builtin/checkout.c:1411
msgid "you are switching branch while bisecting"
msgstr "Sie wechseln den Branch während einer binären Suche"
-#: builtin/checkout.c:1419
+#: builtin/checkout.c:1418
msgid "paths cannot be used with switching branches"
msgstr "Pfade können nicht beim Wechseln von Branches verwendet werden"
-#: builtin/checkout.c:1422 builtin/checkout.c:1426 builtin/checkout.c:1430
+#: builtin/checkout.c:1421 builtin/checkout.c:1425 builtin/checkout.c:1429
#, c-format
msgid "'%s' cannot be used with switching branches"
msgstr "'%s' kann nicht beim Wechseln von Branches verwendet werden"
-#: builtin/checkout.c:1434 builtin/checkout.c:1437 builtin/checkout.c:1440
-#: builtin/checkout.c:1445 builtin/checkout.c:1450
+#: builtin/checkout.c:1433 builtin/checkout.c:1436 builtin/checkout.c:1439
+#: builtin/checkout.c:1444 builtin/checkout.c:1449
#, c-format
msgid "'%s' cannot be used with '%s'"
msgstr "'%s' kann nicht mit '%s' verwendet werden"
-#: builtin/checkout.c:1447
+#: builtin/checkout.c:1446
#, c-format
msgid "'%s' cannot take <start-point>"
msgstr "'%s' kann nicht <Startpunkt> bekommen"
-#: builtin/checkout.c:1455
+#: builtin/checkout.c:1454
#, c-format
msgid "Cannot switch branch to a non-commit '%s'"
msgstr "Kann Branch nicht zu Nicht-Commit '%s' wechseln"
-#: builtin/checkout.c:1462
+#: builtin/checkout.c:1461
msgid "missing branch or commit argument"
msgstr "Branch- oder Commit-Argument fehlt"
-#: builtin/checkout.c:1504 builtin/clone.c:92 builtin/commit-graph.c:84
-#: builtin/commit-graph.c:222 builtin/fetch.c:172 builtin/merge.c:296
-#: builtin/multi-pack-index.c:27 builtin/pull.c:119 builtin/push.c:575
-#: builtin/send-pack.c:198
-msgid "force progress reporting"
-msgstr "Fortschrittsanzeige erzwingen"
-
-#: builtin/checkout.c:1505
+#: builtin/checkout.c:1504
msgid "perform a 3-way merge with the new branch"
msgstr "einen 3-Wege-Merge mit dem neuen Branch ausführen"
-#: builtin/checkout.c:1506 builtin/log.c:1800 parse-options.h:322
+#: builtin/checkout.c:1505 builtin/log.c:1799 parse-options.h:322
msgid "style"
msgstr "Stil"
-#: builtin/checkout.c:1507
+#: builtin/checkout.c:1506
msgid "conflict style (merge or diff3)"
msgstr "Konfliktstil (merge oder diff3)"
-#: builtin/checkout.c:1519 builtin/worktree.c:558
+#: builtin/checkout.c:1518 builtin/worktree.c:486
msgid "detach HEAD at named commit"
msgstr "HEAD bei benanntem Commit loslösen"
-#: builtin/checkout.c:1520
+#: builtin/checkout.c:1519
msgid "set upstream info for new branch"
msgstr "Informationen zum Upstream-Branch für den neuen Branch setzen"
-#: builtin/checkout.c:1522
+#: builtin/checkout.c:1521
msgid "force checkout (throw away local modifications)"
msgstr "Auschecken erzwingen (verwirft lokale Änderungen)"
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1523
msgid "new-branch"
msgstr "neuer Branch"
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1523
msgid "new unparented branch"
msgstr "neuer Branch ohne Eltern-Commit"
-#: builtin/checkout.c:1526 builtin/merge.c:300
+#: builtin/checkout.c:1525 builtin/merge.c:301
msgid "update ignored files (default)"
msgstr "ignorierte Dateien aktualisieren (Standard)"
-#: builtin/checkout.c:1529
+#: builtin/checkout.c:1528
msgid "do not check if another worktree is holding the given ref"
msgstr ""
"Prüfung, ob die Referenz bereits in einem anderen Arbeitsverzeichnis "
"ausgecheckt wurde, deaktivieren"
-#: builtin/checkout.c:1542
+#: builtin/checkout.c:1541
msgid "checkout our version for unmerged files"
msgstr "unsere Variante für nicht zusammengeführte Dateien auschecken"
-#: builtin/checkout.c:1545
+#: builtin/checkout.c:1544
msgid "checkout their version for unmerged files"
msgstr "ihre Variante für nicht zusammengeführte Dateien auschecken"
-#: builtin/checkout.c:1549
+#: builtin/checkout.c:1548
msgid "do not limit pathspecs to sparse entries only"
msgstr "keine Einschränkung bei Pfadspezifikationen zum partiellen Auschecken"
-#: builtin/checkout.c:1604
+#: builtin/checkout.c:1603
#, c-format
msgid "-%c, -%c and --orphan are mutually exclusive"
-msgstr "die Optionen -%c, -%c und --orphan schließen sich gegenseitig aus"
+msgstr "-%c, -%c und --orphan schließen sich gegenseitig aus"
-#: builtin/checkout.c:1608
+#: builtin/checkout.c:1607
msgid "-p and --overlay are mutually exclusive"
-msgstr "-p und --overlay schließen sich gegenseitig aus."
+msgstr "-p und --overlay schließen sich gegenseitig aus"
-#: builtin/checkout.c:1645
+#: builtin/checkout.c:1644
msgid "--track needs a branch name"
-msgstr "Bei der Option --track muss ein Branchname angegeben werden."
+msgstr "--track benötigt ein Branchname"
-#: builtin/checkout.c:1650
+#: builtin/checkout.c:1649
#, c-format
msgid "missing branch name; try -%c"
msgstr "kein Branchname; versuchen Sie -%c"
-#: builtin/checkout.c:1682
+#: builtin/checkout.c:1681
#, c-format
msgid "could not resolve %s"
-msgstr "Konnte %s nicht auflösen."
+msgstr "konnte %s nicht auflösen"
-#: builtin/checkout.c:1698
+#: builtin/checkout.c:1697
msgid "invalid path specification"
msgstr "ungültige Pfadspezifikation"
-#: builtin/checkout.c:1705
+#: builtin/checkout.c:1704
#, c-format
msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
msgstr ""
"'%s' ist kein Commit und es kann kein Branch '%s' aus diesem erstellt werden."
-#: builtin/checkout.c:1709
+#: builtin/checkout.c:1708
#, c-format
msgid "git checkout: --detach does not take a path argument '%s'"
msgstr "git checkout: --detach nimmt kein Pfad-Argument '%s'"
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1717
msgid "--pathspec-from-file is incompatible with --detach"
-msgstr "Die Optionen --pathspec-from-file und --detach sind inkompatibel."
+msgstr "--pathspec-from-file und --detach sind inkompatibel"
-#: builtin/checkout.c:1721 builtin/reset.c:325 builtin/stash.c:1499
+#: builtin/checkout.c:1720 builtin/reset.c:325 builtin/stash.c:1566
msgid "--pathspec-from-file is incompatible with --patch"
-msgstr "Die Optionen --pathspec-from-file und --patch sind inkompatibel."
+msgstr "--pathspec-from-file und --patch sind inkompatibel"
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1733
msgid ""
"git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
"checking out of the index."
@@ -12355,70 +12631,70 @@
"git checkout: --ours/--theirs, --force und --merge sind inkompatibel wenn\n"
"Sie aus dem Index auschecken."
-#: builtin/checkout.c:1739
+#: builtin/checkout.c:1738
msgid "you must specify path(s) to restore"
msgstr "Sie müssen Pfad(e) zur Wiederherstellung angeben."
-#: builtin/checkout.c:1765 builtin/checkout.c:1767 builtin/checkout.c:1816
-#: builtin/checkout.c:1818 builtin/clone.c:122 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2719 builtin/worktree.c:554
-#: builtin/worktree.c:556
+#: builtin/checkout.c:1764 builtin/checkout.c:1766 builtin/checkout.c:1815
+#: builtin/checkout.c:1817 builtin/clone.c:122 builtin/remote.c:170
+#: builtin/remote.c:172 builtin/submodule--helper.c:2719 builtin/worktree.c:482
+#: builtin/worktree.c:484
msgid "branch"
msgstr "Branch"
-#: builtin/checkout.c:1766
+#: builtin/checkout.c:1765
msgid "create and checkout a new branch"
msgstr "einen neuen Branch erzeugen und auschecken"
-#: builtin/checkout.c:1768
+#: builtin/checkout.c:1767
msgid "create/reset and checkout a branch"
msgstr "einen Branch erstellen/umsetzen und auschecken"
-#: builtin/checkout.c:1769
+#: builtin/checkout.c:1768
msgid "create reflog for new branch"
msgstr "das Reflog für den neuen Branch erzeugen"
-#: builtin/checkout.c:1771
+#: builtin/checkout.c:1770
msgid "second guess 'git checkout <no-such-branch>' (default)"
msgstr "Zweite Vermutung 'git checkout <kein-solcher-Branch>' (Standard)"
-#: builtin/checkout.c:1772
+#: builtin/checkout.c:1771
msgid "use overlay mode (default)"
msgstr "benutze Overlay-Modus (Standard)"
-#: builtin/checkout.c:1817
+#: builtin/checkout.c:1816
msgid "create and switch to a new branch"
msgstr "einen neuen Branch erzeugen und dahin wechseln"
-#: builtin/checkout.c:1819
+#: builtin/checkout.c:1818
msgid "create/reset and switch to a branch"
msgstr "einen Branch erstellen/umsetzen und dahin wechseln"
-#: builtin/checkout.c:1821
+#: builtin/checkout.c:1820
msgid "second guess 'git switch <no-such-branch>'"
msgstr "Zweite Vermutung 'git switch <kein-solcher-Branch>'"
-#: builtin/checkout.c:1823
+#: builtin/checkout.c:1822
msgid "throw away local modifications"
msgstr "lokale Änderungen verwerfen"
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1856
msgid "which tree-ish to checkout from"
msgstr "Von welcher Commit-Referenz ausgecheckt werden soll"
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1858
msgid "restore the index"
msgstr "Index wiederherstellen"
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1860
msgid "restore the working tree (default)"
msgstr "das Arbeitsverzeichnis wiederherstellen (Standard)"
-#: builtin/checkout.c:1863
+#: builtin/checkout.c:1862
msgid "ignore unmerged entries"
msgstr "ignoriere nicht zusammengeführte Einträge"
-#: builtin/checkout.c:1864
+#: builtin/checkout.c:1863
msgid "use overlay mode"
msgstr "benutze Overlay-Modus"
@@ -12563,8 +12839,8 @@
msgstr "ganze Verzeichnisse löschen"
#: builtin/clean.c:909 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:921 builtin/log.c:183 builtin/log.c:185
-#: builtin/ls-files.c:558 builtin/name-rev.c:526 builtin/name-rev.c:528
+#: builtin/grep.c:922 builtin/log.c:184 builtin/log.c:186
+#: builtin/ls-files.c:573 builtin/name-rev.c:526 builtin/name-rev.c:528
#: builtin/show-ref.c:179
msgid "pattern"
msgstr "Muster"
@@ -12599,7 +12875,7 @@
#: builtin/clean.c:944
msgid "-x and -X cannot be used together"
-msgstr "Die Optionen -x und -X können nicht gemeinsam verwendet werden."
+msgstr "-x und -X können nicht gemeinsam verwendet werden"
#: builtin/clone.c:45
msgid "git clone [<options>] [--] <repo> [<dir>]"
@@ -12660,7 +12936,7 @@
msgstr "--reference nur während des Klonens benutzen"
#: builtin/clone.c:120 builtin/column.c:27 builtin/init-db.c:563
-#: builtin/merge-file.c:46 builtin/pack-objects.c:3546 builtin/repack.c:358
+#: builtin/merge-file.c:46 builtin/pack-objects.c:3561 builtin/repack.c:357
msgid "name"
msgstr "Name"
@@ -12676,7 +12952,7 @@
msgid "path to git-upload-pack on the remote"
msgstr "Pfad zu \"git-upload-pack\" auf der Gegenseite"
-#: builtin/clone.c:126 builtin/fetch.c:173 builtin/grep.c:860
+#: builtin/clone.c:126 builtin/fetch.c:176 builtin/grep.c:861
#: builtin/pull.c:208
msgid "depth"
msgstr "Tiefe"
@@ -12686,7 +12962,7 @@
msgstr ""
"einen Klon mit unvollständiger Historie (shallow) in dieser Tiefe erstellen"
-#: builtin/clone.c:128 builtin/fetch.c:175 builtin/pack-objects.c:3535
+#: builtin/clone.c:128 builtin/fetch.c:178 builtin/pack-objects.c:3550
#: builtin/pull.c:211
msgid "time"
msgstr "Zeit"
@@ -12698,12 +12974,12 @@
"Zeit\n"
"erstellen"
-#: builtin/clone.c:130 builtin/fetch.c:177 builtin/fetch.c:200
-#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1317
+#: builtin/clone.c:130 builtin/fetch.c:180 builtin/fetch.c:203
+#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1323
msgid "revision"
msgstr "Commit"
-#: builtin/clone.c:131 builtin/fetch.c:178 builtin/pull.c:215
+#: builtin/clone.c:131 builtin/fetch.c:181 builtin/pull.c:215
msgid "deepen history of shallow clone, excluding rev"
msgstr ""
"die Historie eines Klons mit unvollständiger Historie (shallow) mittels\n"
@@ -12738,22 +13014,22 @@
msgid "set config inside the new repository"
msgstr "Konfiguration innerhalb des neuen Repositories setzen"
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: builtin/clone.c:143 builtin/fetch.c:198 builtin/ls-remote.c:77
#: builtin/pull.c:230 builtin/push.c:584 builtin/send-pack.c:196
msgid "server-specific"
msgstr "serverspezifisch"
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: builtin/clone.c:143 builtin/fetch.c:198 builtin/ls-remote.c:77
#: builtin/pull.c:231 builtin/push.c:584 builtin/send-pack.c:197
msgid "option to transmit"
msgstr "Option übertragen"
-#: builtin/clone.c:144 builtin/fetch.c:196 builtin/pull.c:234
+#: builtin/clone.c:144 builtin/fetch.c:199 builtin/pull.c:234
#: builtin/push.c:585
msgid "use IPv4 addresses only"
msgstr "nur IPv4-Adressen benutzen"
-#: builtin/clone.c:146 builtin/fetch.c:198 builtin/pull.c:237
+#: builtin/clone.c:146 builtin/fetch.c:201 builtin/pull.c:237
#: builtin/push.c:587
msgid "use IPv6 addresses only"
msgstr "nur IPv6-Adressen benutzen"
@@ -12857,71 +13133,71 @@
msgid "cannot unlink temporary alternates file"
msgstr "Kann temporäre \"alternates\"-Datei nicht entfernen"
-#: builtin/clone.c:992 builtin/receive-pack.c:2493
+#: builtin/clone.c:993 builtin/receive-pack.c:2493
msgid "Too many arguments."
msgstr "Zu viele Argumente."
-#: builtin/clone.c:996
+#: builtin/clone.c:997
msgid "You must specify a repository to clone."
msgstr "Sie müssen ein Repository zum Klonen angeben."
-#: builtin/clone.c:1009
+#: builtin/clone.c:1010
#, c-format
msgid "--bare and --origin %s options are incompatible."
-msgstr "Die Optionen --bare und --origin %s sind inkompatibel."
+msgstr "--bare und --origin %s sind inkompatibel."
-#: builtin/clone.c:1012
+#: builtin/clone.c:1013
msgid "--bare and --separate-git-dir are incompatible."
-msgstr "Die Optionen --bare und --separate-git-dir sind inkompatibel."
+msgstr "--bare und --separate-git-dir sind inkompatibel."
-#: builtin/clone.c:1025
+#: builtin/clone.c:1026
#, c-format
msgid "repository '%s' does not exist"
-msgstr "Repository '%s' existiert nicht."
+msgstr "Repository '%s' existiert nicht"
-#: builtin/clone.c:1029 builtin/fetch.c:1841
+#: builtin/clone.c:1030 builtin/fetch.c:1951
#, c-format
msgid "depth %s is not a positive number"
msgstr "Tiefe %s ist keine positive Zahl"
-#: builtin/clone.c:1039
+#: builtin/clone.c:1040
#, c-format
msgid "destination path '%s' already exists and is not an empty directory."
msgstr "Zielpfad '%s' existiert bereits und ist kein leeres Verzeichnis."
-#: builtin/clone.c:1045
+#: builtin/clone.c:1046
#, c-format
msgid "repository path '%s' already exists and is not an empty directory."
msgstr ""
"Pfad des Repositories '%s' existiert bereits und ist kein leeres Verzeichnis."
-#: builtin/clone.c:1059
+#: builtin/clone.c:1060
#, c-format
msgid "working tree '%s' already exists."
msgstr "Arbeitsverzeichnis '%s' existiert bereits."
-#: builtin/clone.c:1074 builtin/clone.c:1095 builtin/difftool.c:271
-#: builtin/log.c:1987 builtin/worktree.c:354 builtin/worktree.c:386
+#: builtin/clone.c:1075 builtin/clone.c:1096 builtin/difftool.c:271
+#: builtin/log.c:1986 builtin/worktree.c:282 builtin/worktree.c:314
#, c-format
msgid "could not create leading directories of '%s'"
msgstr "Konnte führende Verzeichnisse von '%s' nicht erstellen."
-#: builtin/clone.c:1079
+#: builtin/clone.c:1080
#, c-format
msgid "could not create work tree dir '%s'"
msgstr "Konnte Arbeitsverzeichnis '%s' nicht erstellen"
-#: builtin/clone.c:1099
+#: builtin/clone.c:1100
#, c-format
msgid "Cloning into bare repository '%s'...\n"
msgstr "Klone in Bare-Repository '%s' ...\n"
-#: builtin/clone.c:1101
+#: builtin/clone.c:1102
#, c-format
msgid "Cloning into '%s'...\n"
msgstr "Klone nach '%s' ...\n"
-#: builtin/clone.c:1125
+#: builtin/clone.c:1126
msgid ""
"clone --recursive is not compatible with both --reference and --reference-if-"
"able"
@@ -12929,50 +13205,51 @@
"'clone --recursive' ist nicht kompatibel mit --reference und --reference-if-"
"able"
-#: builtin/clone.c:1169 builtin/remote.c:200 builtin/remote.c:705
+#: builtin/clone.c:1170 builtin/remote.c:200 builtin/remote.c:705
#, c-format
msgid "'%s' is not a valid remote name"
msgstr "'%s' ist kein gültiger Name für ein Remote-Repository"
-#: builtin/clone.c:1210
+#: builtin/clone.c:1211
msgid "--depth is ignored in local clones; use file:// instead."
msgstr ""
-"Die Option --depth wird in lokalen Klonen ignoriert; benutzen Sie "
-"stattdessen file://"
+"--depth wird in lokalen Klonen ignoriert; benutzen Sie stattdessen \"file://"
+"\"."
-#: builtin/clone.c:1212
+#: builtin/clone.c:1213
msgid "--shallow-since is ignored in local clones; use file:// instead."
msgstr ""
"--shallow-since wird in lokalen Klonen ignoriert; benutzen Sie stattdessen "
-"file://"
+"\"file://\"."
-#: builtin/clone.c:1214
+#: builtin/clone.c:1215
msgid "--shallow-exclude is ignored in local clones; use file:// instead."
msgstr ""
"--shallow-exclude wird in lokalen Klonen ignoriert; benutzen Sie stattdessen "
-"file://"
+"\"file://\"."
-#: builtin/clone.c:1216
+#: builtin/clone.c:1217
msgid "--filter is ignored in local clones; use file:// instead."
msgstr ""
-"--filter wird in lokalen Klonen ignoriert; benutzen Sie stattdessen file://"
+"--filter wird in lokalen Klonen ignoriert; benutzen Sie stattdessen \"file://"
+"\"."
-#: builtin/clone.c:1219
+#: builtin/clone.c:1220
msgid "source repository is shallow, ignoring --local"
msgstr ""
"Quelle ist ein Repository mit unvollständiger Historie (shallow),\n"
"ignoriere --local"
-#: builtin/clone.c:1224
+#: builtin/clone.c:1225
msgid "--local is ignored"
msgstr "--local wird ignoriert"
-#: builtin/clone.c:1311 builtin/clone.c:1319
+#: builtin/clone.c:1315 builtin/clone.c:1323
#, c-format
msgid "Remote branch %s not found in upstream %s"
msgstr "Remote-Branch %s nicht im Upstream-Repository %s gefunden"
-#: builtin/clone.c:1322
+#: builtin/clone.c:1326
msgid "You appear to have cloned an empty repository."
msgstr "Sie scheinen ein leeres Repository geklont zu haben."
@@ -13006,7 +13283,7 @@
#: builtin/column.c:51
msgid "--command must be the first argument"
-msgstr "Die Option --command muss an erster Stelle stehen."
+msgstr "--command muss an erster Stelle stehen"
#: builtin/commit-graph.c:13 builtin/commit-graph.c:22
msgid ""
@@ -13031,14 +13308,14 @@
msgstr "konnte Objekt-Verzeichnis nicht finden, dass '%s' entsprechen soll"
#: builtin/commit-graph.c:80 builtin/commit-graph.c:210
-#: builtin/commit-graph.c:316 builtin/fetch.c:184 builtin/log.c:1769
+#: builtin/commit-graph.c:316 builtin/fetch.c:187 builtin/log.c:1768
msgid "dir"
msgstr "Verzeichnis"
#: builtin/commit-graph.c:81 builtin/commit-graph.c:211
#: builtin/commit-graph.c:317
-msgid "The object directory to store the graph"
-msgstr "Das Objektverzeichnis zum Speichern des Graphen."
+msgid "the object directory to store the graph"
+msgstr "das Objektverzeichnis zum Speichern des Graphen"
#: builtin/commit-graph.c:83
msgid "if the commit-graph is split, only verify the tip file"
@@ -13132,7 +13409,7 @@
msgid "duplicate parent %s ignored"
msgstr "doppelter Vorgänger %s ignoriert"
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:555
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:557
#, c-format
msgid "not a valid object name %s"
msgstr "Kein gültiger Objektname: %s"
@@ -13160,9 +13437,9 @@
msgid "id of a parent commit object"
msgstr "ID eines Eltern-Commit-Objektes."
-#: builtin/commit-tree.c:114 builtin/commit.c:1504 builtin/merge.c:281
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1470
-#: builtin/tag.c:413
+#: builtin/commit-tree.c:114 builtin/commit.c:1504 builtin/merge.c:282
+#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1537
+#: builtin/tag.c:445
msgid "message"
msgstr "Beschreibung"
@@ -13174,7 +13451,7 @@
msgid "read commit log message from file"
msgstr "Commit-Beschreibung von Datei lesen"
-#: builtin/commit-tree.c:121 builtin/commit.c:1516 builtin/merge.c:298
+#: builtin/commit-tree.c:121 builtin/commit.c:1516 builtin/merge.c:299
#: builtin/pull.c:176 builtin/revert.c:118
msgid "GPG sign commit"
msgstr "Commit mit GPG signieren"
@@ -13330,7 +13607,7 @@
msgid "could not lookup commit %s"
msgstr "Konnte Commit %s nicht nachschlagen"
-#: builtin/commit.c:729 builtin/shortlog.c:425
+#: builtin/commit.c:729 builtin/shortlog.c:413
#, c-format
msgid "(reading log message from standard input)\n"
msgstr "(lese Log-Nachricht von Standard-Eingabe)\n"
@@ -13430,7 +13707,7 @@
msgid "Error building trees"
msgstr "Fehler beim Erzeugen der \"Tree\"-Objekte"
-#: builtin/commit.c:1011 builtin/tag.c:276
+#: builtin/commit.c:1011 builtin/tag.c:308
#, c-format
msgid "Please supply the message using either -m or -F option.\n"
msgstr ""
@@ -13455,13 +13732,11 @@
#: builtin/commit.c:1127
msgid "--long and -z are incompatible"
-msgstr "Die Optionen --long und -z sind inkompatibel."
+msgstr "--long und -z sind inkompatibel"
#: builtin/commit.c:1171
msgid "Using both --reset-author and --author does not make sense"
-msgstr ""
-"Die Optionen --reset-author und --author können nicht gemeinsam verwendet "
-"werden."
+msgstr "--reset-author und --author können nicht gemeinsam verwendet werden"
#: builtin/commit.c:1180
msgid "You have nothing to amend."
@@ -13482,7 +13757,7 @@
#: builtin/commit.c:1190
msgid "Options --squash and --fixup cannot be used together"
msgstr ""
-"Die Optionen --squash und --fixup können nicht gemeinsam verwendet werden."
+"Die Optionen --squash und --fixup können nicht gemeinsam verwendet werden"
#: builtin/commit.c:1200
msgid "Only one of -c/-C/-F/--fixup can be used."
@@ -13494,8 +13769,7 @@
#: builtin/commit.c:1211
msgid "--reset-author can be used only with -C, -c or --amend."
-msgstr ""
-"Die Option --reset--author kann nur mit -C, -c oder --amend verwendet werden."
+msgstr "--reset--author kann nur mit -C, -c oder --amend verwendet werden"
#: builtin/commit.c:1229
msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
@@ -13529,7 +13803,7 @@
msgstr "Version"
#: builtin/commit.c:1374 builtin/commit.c:1533 builtin/push.c:560
-#: builtin/worktree.c:725
+#: builtin/worktree.c:679
msgid "machine-readable output"
msgstr "maschinenlesbare Ausgabe"
@@ -13543,7 +13817,7 @@
#: builtin/commit.c:1382 builtin/commit.c:1386 builtin/commit.c:1541
#: builtin/fast-export.c:1198 builtin/fast-export.c:1201
-#: builtin/fast-export.c:1204 builtin/rebase.c:1406 parse-options.h:336
+#: builtin/fast-export.c:1204 builtin/rebase.c:1412 parse-options.h:336
msgid "mode"
msgstr "Modus"
@@ -13602,7 +13876,7 @@
msgid "Commit message options"
msgstr "Optionen für Commit-Beschreibung"
-#: builtin/commit.c:1501 builtin/merge.c:285 builtin/tag.c:415
+#: builtin/commit.c:1501 builtin/merge.c:286 builtin/tag.c:447
msgid "read message from file"
msgstr "Beschreibung von Datei lesen"
@@ -13614,7 +13888,7 @@
msgid "override author for commit"
msgstr "Autor eines Commits überschreiben"
-#: builtin/commit.c:1503 builtin/gc.c:542
+#: builtin/commit.c:1503 builtin/gc.c:550
msgid "date"
msgstr "Datum"
@@ -13623,7 +13897,7 @@
msgstr "Datum eines Commits überschreiben"
#: builtin/commit.c:1505 builtin/commit.c:1506 builtin/commit.c:1507
-#: builtin/commit.c:1508 parse-options.h:328 ref-filter.h:87
+#: builtin/commit.c:1508 parse-options.h:328 ref-filter.h:90
msgid "commit"
msgstr "Commit"
@@ -13651,7 +13925,7 @@
msgid "the commit is authored by me now (used with -C/-c/--amend)"
msgstr "Sie als Autor des Commits setzen (verwendet mit -C/-c/--amend)"
-#: builtin/commit.c:1510 builtin/log.c:1744 builtin/merge.c:301
+#: builtin/commit.c:1510 builtin/log.c:1743 builtin/merge.c:302
#: builtin/pull.c:145 builtin/revert.c:110
msgid "add a Signed-off-by trailer"
msgstr "eine Signed-off-by Zeile hinzufügen"
@@ -14079,7 +14353,7 @@
#: builtin/config.c:943 builtin/config.c:954
#, c-format
msgid "no such section: %s"
-msgstr "Keine solche Sektion: %s"
+msgstr "Sektion nicht gefunden: %s"
#: builtin/count-objects.c:90
msgid "git count-objects [-v] [-H | --human-readable]"
@@ -14278,7 +14552,7 @@
#: builtin/describe.c:593
msgid "--long is incompatible with --abbrev=0"
-msgstr "Die Optionen --long und --abbrev=0 sind inkompatibel."
+msgstr "--long und --abbrev=0 sind inkompatibel"
#: builtin/describe.c:622
msgid "No names found, cannot describe anything."
@@ -14286,11 +14560,11 @@
#: builtin/describe.c:673
msgid "--dirty is incompatible with commit-ishes"
-msgstr "Die Option --dirty kann nicht mit Commits verwendet werden."
+msgstr "--dirty kann nicht mit Commits verwendet werden"
#: builtin/describe.c:675
msgid "--broken is incompatible with commit-ishes"
-msgstr "Die Option --broken kann nicht mit Commits verwendet werden."
+msgstr "--broken kann nicht mit Commits verwendet werden"
#: builtin/diff-tree.c:155
msgid "--stdin and --merge-base are mutually exclusive"
@@ -14300,41 +14574,41 @@
msgid "--merge-base only works with two commits"
msgstr "--merge-base funktioniert nur mit zwei Commits"
-#: builtin/diff.c:91
+#: builtin/diff.c:92
#, c-format
msgid "'%s': not a regular file or symlink"
msgstr "'%s': keine reguläre Datei oder symbolische Verknüpfung"
-#: builtin/diff.c:258
+#: builtin/diff.c:259
#, c-format
msgid "invalid option: %s"
msgstr "Ungültige Option: %s"
-#: builtin/diff.c:375
+#: builtin/diff.c:376
#, c-format
msgid "%s...%s: no merge base"
msgstr "%s...%s: keine Merge-Basis"
-#: builtin/diff.c:485
+#: builtin/diff.c:486
msgid "Not a git repository"
msgstr "Kein Git-Repository"
-#: builtin/diff.c:530 builtin/grep.c:681
+#: builtin/diff.c:532 builtin/grep.c:682
#, c-format
msgid "invalid object '%s' given."
msgstr "Objekt '%s' ist ungültig."
-#: builtin/diff.c:541
+#: builtin/diff.c:543
#, c-format
msgid "more than two blobs given: '%s'"
msgstr "Mehr als zwei Blobs angegeben: '%s'"
-#: builtin/diff.c:546
+#: builtin/diff.c:548
#, c-format
msgid "unhandled object '%s' given."
msgstr "unbehandeltes Objekt '%s' angegeben"
-#: builtin/diff.c:580
+#: builtin/diff.c:582
#, c-format
msgid "%s...%s: multiple merge bases, using %s"
msgstr "%s...%s: mehrere Merge-Basen, nutze %s"
@@ -14391,7 +14665,7 @@
#: builtin/difftool.c:696
msgid "use `diff.guitool` instead of `diff.tool`"
-msgstr "`diff.guitool` anstatt `diff.tool` benutzen"
+msgstr "`diff.guitool` statt `diff.tool` benutzen"
#: builtin/difftool.c:698
msgid "perform a full-directory diff"
@@ -14519,39 +14793,39 @@
"Auswählen der Behandlung von Commit-Beschreibungen bei wechselndem Encoding"
#: builtin/fast-export.c:1208
-msgid "Dump marks to this file"
+msgid "dump marks to this file"
msgstr "Markierungen in diese Datei schreiben"
#: builtin/fast-export.c:1210
-msgid "Import marks from this file"
+msgid "import marks from this file"
msgstr "Markierungen von dieser Datei importieren"
#: builtin/fast-export.c:1214
-msgid "Import marks from this file if it exists"
+msgid "import marks from this file if it exists"
msgstr "Markierungen von dieser Datei importieren, wenn diese existiert"
#: builtin/fast-export.c:1216
-msgid "Fake a tagger when tags lack one"
-msgstr "künstlich einen Tag-Ersteller erzeugen, wenn das Tag keinen hat"
+msgid "fake a tagger when tags lack one"
+msgstr "einen Tag-Ersteller vortäuschen, wenn das Tag keinen hat"
#: builtin/fast-export.c:1218
-msgid "Output full tree for each commit"
+msgid "output full tree for each commit"
msgstr "für jeden Commit das gesamte Verzeichnis ausgeben"
#: builtin/fast-export.c:1220
-msgid "Use the done feature to terminate the stream"
+msgid "use the done feature to terminate the stream"
msgstr "die \"done\"-Funktion benutzen, um den Datenstrom abzuschließen"
#: builtin/fast-export.c:1221
-msgid "Skip output of blob data"
+msgid "skip output of blob data"
msgstr "Ausgabe von Blob-Daten überspringen"
-#: builtin/fast-export.c:1222 builtin/log.c:1816
+#: builtin/fast-export.c:1222 builtin/log.c:1815
msgid "refspec"
msgstr "Refspec"
#: builtin/fast-export.c:1223
-msgid "Apply refspec to exported refs"
+msgid "apply refspec to exported refs"
msgstr "Refspec auf exportierte Referenzen anwenden"
#: builtin/fast-export.c:1224
@@ -14567,17 +14841,17 @@
msgstr "konvertiere <von> zu <nach> in anonymisierter Ausgabe"
#: builtin/fast-export.c:1229
-msgid "Reference parents which are not in fast-export stream by object id"
+msgid "reference parents which are not in fast-export stream by object id"
msgstr ""
"Eltern, die nicht im Fast-Export-Stream sind, anhand ihrer Objekt-ID "
"referenzieren"
#: builtin/fast-export.c:1231
-msgid "Show original object ids of blobs/commits"
+msgid "show original object ids of blobs/commits"
msgstr "originale Objekt-IDs von Blobs/Commits anzeigen"
#: builtin/fast-export.c:1233
-msgid "Label tags with mark ids"
+msgid "label tags with mark ids"
msgstr "Tags mit Markierungs-IDs beschriften"
#: builtin/fast-export.c:1256
@@ -14619,7 +14893,7 @@
msgid "feature '%s' forbidden in input without --allow-unsafe-features"
msgstr "Feature '%s' verboten in Eingabe ohne Option --allow-unsafe-features"
-#: builtin/fetch-pack.c:241
+#: builtin/fetch-pack.c:242
#, c-format
msgid "Lockfile created but not reported: %s"
msgstr "Lock-Datei erstellt, aber nicht gemeldet: %s"
@@ -14640,100 +14914,104 @@
msgid "git fetch --all [<options>]"
msgstr "git fetch --all [<Optionen>]"
-#: builtin/fetch.c:119
+#: builtin/fetch.c:120
msgid "fetch.parallel cannot be negative"
msgstr "fetch.parallel kann nicht negativ sein"
-#: builtin/fetch.c:142 builtin/pull.c:185
+#: builtin/fetch.c:143 builtin/pull.c:185
msgid "fetch from all remotes"
msgstr "fordert von allen Remote-Repositories an"
-#: builtin/fetch.c:144 builtin/pull.c:245
+#: builtin/fetch.c:145 builtin/pull.c:245
msgid "set upstream for git pull/fetch"
msgstr "Upstream für \"git pull/fetch\" setzen"
-#: builtin/fetch.c:146 builtin/pull.c:188
+#: builtin/fetch.c:147 builtin/pull.c:188
msgid "append to .git/FETCH_HEAD instead of overwriting"
-msgstr "an .git/FETCH_HEAD anhängen, anstatt zu überschreiben"
+msgstr "an .git/FETCH_HEAD anhängen statt zu überschreiben"
-#: builtin/fetch.c:148 builtin/pull.c:191
+#: builtin/fetch.c:149
+msgid "use atomic transaction to update references"
+msgstr "atomare Transaktionen nutzen, um Referenzen zu aktualisieren"
+
+#: builtin/fetch.c:151 builtin/pull.c:191
msgid "path to upload pack on remote end"
msgstr "Pfad des Programms zum Hochladen von Paketen auf der Gegenseite"
-#: builtin/fetch.c:149
+#: builtin/fetch.c:152
msgid "force overwrite of local reference"
msgstr "das Überschreiben einer lokalen Referenz erzwingen"
-#: builtin/fetch.c:151
+#: builtin/fetch.c:154
msgid "fetch from multiple remotes"
msgstr "von mehreren Remote-Repositories anfordern"
-#: builtin/fetch.c:153 builtin/pull.c:195
+#: builtin/fetch.c:156 builtin/pull.c:195
msgid "fetch all tags and associated objects"
msgstr "alle Tags und verbundene Objekte anfordern"
-#: builtin/fetch.c:155
+#: builtin/fetch.c:158
msgid "do not fetch all tags (--no-tags)"
msgstr "nicht alle Tags anfordern (--no-tags)"
-#: builtin/fetch.c:157
+#: builtin/fetch.c:160
msgid "number of submodules fetched in parallel"
msgstr "Anzahl der parallel anzufordernden Submodule"
-#: builtin/fetch.c:159 builtin/pull.c:198
+#: builtin/fetch.c:162 builtin/pull.c:198
msgid "prune remote-tracking branches no longer on remote"
msgstr ""
"Remote-Tracking-Branches entfernen, die sich nicht mehr im Remote-Repository "
"befinden"
-#: builtin/fetch.c:161
+#: builtin/fetch.c:164
msgid "prune local tags no longer on remote and clobber changed tags"
msgstr ""
"lokale Tags entfernen, die sich nicht mehr im Remote-Repository befinden, "
"und geänderte Tags aktualisieren"
-#: builtin/fetch.c:162 builtin/fetch.c:187 builtin/pull.c:122
+#: builtin/fetch.c:165 builtin/fetch.c:190 builtin/pull.c:122
msgid "on-demand"
msgstr "bei-Bedarf"
-#: builtin/fetch.c:163
+#: builtin/fetch.c:166
msgid "control recursive fetching of submodules"
msgstr "rekursive Anforderungen von Submodulen kontrollieren"
-#: builtin/fetch.c:168
+#: builtin/fetch.c:171
msgid "write fetched references to the FETCH_HEAD file"
msgstr "schreibe angeforderte Referenzen in die FETCH_HEAD-Datei"
-#: builtin/fetch.c:169 builtin/pull.c:206
+#: builtin/fetch.c:172 builtin/pull.c:206
msgid "keep downloaded pack"
msgstr "heruntergeladenes Paket behalten"
-#: builtin/fetch.c:171
+#: builtin/fetch.c:174
msgid "allow updating of HEAD ref"
msgstr "Aktualisierung der \"HEAD\"-Referenz erlauben"
-#: builtin/fetch.c:174 builtin/fetch.c:180 builtin/pull.c:209
+#: builtin/fetch.c:177 builtin/fetch.c:183 builtin/pull.c:209
#: builtin/pull.c:218
msgid "deepen history of shallow clone"
msgstr ""
"die Historie eines Klons mit unvollständiger Historie (shallow) vertiefen"
-#: builtin/fetch.c:176 builtin/pull.c:212
+#: builtin/fetch.c:179 builtin/pull.c:212
msgid "deepen history of shallow repository based on time"
msgstr ""
"die Historie eines Klons mit unvollständiger Historie (shallow) auf "
"Zeitbasis\n"
"vertiefen"
-#: builtin/fetch.c:182 builtin/pull.c:221
+#: builtin/fetch.c:185 builtin/pull.c:221
msgid "convert to a complete repository"
msgstr "zu einem vollständigen Repository konvertieren"
-#: builtin/fetch.c:185
+#: builtin/fetch.c:188
msgid "prepend this to submodule path output"
msgstr "dies an die Ausgabe der Submodul-Pfade voranstellen"
-#: builtin/fetch.c:188
+#: builtin/fetch.c:191
msgid ""
"default for recursive fetching of submodules (lower priority than config "
"files)"
@@ -14741,100 +15019,100 @@
"Standard für die rekursive Anforderung von Submodulen (geringere Priorität\n"
"als Konfigurationsdateien)"
-#: builtin/fetch.c:192 builtin/pull.c:224
+#: builtin/fetch.c:195 builtin/pull.c:224
msgid "accept refs that update .git/shallow"
msgstr "Referenzen, die .git/shallow aktualisieren, akzeptieren"
-#: builtin/fetch.c:193 builtin/pull.c:226
+#: builtin/fetch.c:196 builtin/pull.c:226
msgid "refmap"
msgstr "Refmap"
-#: builtin/fetch.c:194 builtin/pull.c:227
+#: builtin/fetch.c:197 builtin/pull.c:227
msgid "specify fetch refmap"
msgstr "Refmap für 'fetch' angeben"
-#: builtin/fetch.c:201 builtin/pull.c:240
+#: builtin/fetch.c:204 builtin/pull.c:240
msgid "report that we have only objects reachable from this object"
msgstr ""
"ausgeben, dass wir nur Objekte haben, die von diesem Objekt aus erreichbar "
"sind"
-#: builtin/fetch.c:204 builtin/fetch.c:206
+#: builtin/fetch.c:207 builtin/fetch.c:209
msgid "run 'maintenance --auto' after fetching"
msgstr "führe 'maintenance --auto' nach \"fetch\" aus"
-#: builtin/fetch.c:208 builtin/pull.c:243
+#: builtin/fetch.c:211 builtin/pull.c:243
msgid "check for forced-updates on all updated branches"
msgstr "Prüfe auf erzwungene Aktualisierungen in allen aktualisierten Branches"
-#: builtin/fetch.c:210
+#: builtin/fetch.c:213
msgid "write the commit-graph after fetching"
msgstr "Schreibe den Commit-Graph nach \"fetch\""
-#: builtin/fetch.c:212
+#: builtin/fetch.c:215
msgid "accept refspecs from stdin"
msgstr "akzeptiere Refspecs von der Standard-Eingabe"
-#: builtin/fetch.c:523
+#: builtin/fetch.c:526
msgid "Couldn't find remote ref HEAD"
msgstr "Konnte Remote-Referenz von HEAD nicht finden."
-#: builtin/fetch.c:677
+#: builtin/fetch.c:697
#, c-format
msgid "configuration fetch.output contains invalid value %s"
msgstr "Konfiguration fetch.output enthält ungültigen Wert %s"
-#: builtin/fetch.c:775
+#: builtin/fetch.c:796
#, c-format
msgid "object %s not found"
msgstr "Objekt %s nicht gefunden"
-#: builtin/fetch.c:779
+#: builtin/fetch.c:800
msgid "[up to date]"
msgstr "[aktuell]"
-#: builtin/fetch.c:792 builtin/fetch.c:808 builtin/fetch.c:880
+#: builtin/fetch.c:813 builtin/fetch.c:829 builtin/fetch.c:901
msgid "[rejected]"
msgstr "[zurückgewiesen]"
-#: builtin/fetch.c:793
+#: builtin/fetch.c:814
msgid "can't fetch in current branch"
msgstr "kann \"fetch\" im aktuellen Branch nicht ausführen"
-#: builtin/fetch.c:803
+#: builtin/fetch.c:824
msgid "[tag update]"
msgstr "[Tag Aktualisierung]"
-#: builtin/fetch.c:804 builtin/fetch.c:841 builtin/fetch.c:863
-#: builtin/fetch.c:875
+#: builtin/fetch.c:825 builtin/fetch.c:862 builtin/fetch.c:884
+#: builtin/fetch.c:896
msgid "unable to update local ref"
msgstr "kann lokale Referenz nicht aktualisieren"
-#: builtin/fetch.c:808
+#: builtin/fetch.c:829
msgid "would clobber existing tag"
msgstr "würde bestehende Tags verändern"
-#: builtin/fetch.c:830
+#: builtin/fetch.c:851
msgid "[new tag]"
msgstr "[neues Tag]"
-#: builtin/fetch.c:833
+#: builtin/fetch.c:854
msgid "[new branch]"
msgstr "[neuer Branch]"
-#: builtin/fetch.c:836
+#: builtin/fetch.c:857
msgid "[new ref]"
msgstr "[neue Referenz]"
-#: builtin/fetch.c:875
+#: builtin/fetch.c:896
msgid "forced update"
msgstr "Aktualisierung erzwungen"
-#: builtin/fetch.c:880
+#: builtin/fetch.c:901
msgid "non-fast-forward"
msgstr "kein Vorspulen"
-#: builtin/fetch.c:901
+#: builtin/fetch.c:1005
msgid ""
"Fetch normally indicates which branches had a forced update,\n"
"but that check has been disabled. To re-enable, use '--show-forced-updates'\n"
@@ -14845,7 +15123,7 @@
"aktivieren, nutzen Sie die Option '--show-forced-updated' oder führen\n"
"Sie 'git config fetch.showForcedUpdates true' aus."
-#: builtin/fetch.c:905
+#: builtin/fetch.c:1009
#, c-format
msgid ""
"It took %.2f seconds to check forced updates. You can use\n"
@@ -14858,12 +15136,12 @@
"'git config fetch.showForcedUpdates false' ausführen, um diese Überprüfung\n"
"zu umgehen.\n"
-#: builtin/fetch.c:939
+#: builtin/fetch.c:1041
#, c-format
msgid "%s did not send all necessary objects\n"
msgstr "%s hat nicht alle erforderlichen Objekte gesendet\n"
-#: builtin/fetch.c:960
+#: builtin/fetch.c:1069
#, c-format
msgid "reject %s because shallow roots are not allowed to be updated"
msgstr ""
@@ -14871,12 +15149,12 @@
"unvollständiger\n"
"Historie (shallow) nicht aktualisiert werden dürfen."
-#: builtin/fetch.c:1053 builtin/fetch.c:1191
+#: builtin/fetch.c:1146 builtin/fetch.c:1297
#, c-format
msgid "From %.*s\n"
msgstr "Von %.*s\n"
-#: builtin/fetch.c:1064
+#: builtin/fetch.c:1168
#, c-format
msgid ""
"some local refs could not be updated; try running\n"
@@ -14885,58 +15163,58 @@
"Einige lokale Referenzen konnten nicht aktualisiert werden; versuchen Sie\n"
"'git remote prune %s', um jeden älteren, widersprüchlichen Branch zu löschen."
-#: builtin/fetch.c:1161
+#: builtin/fetch.c:1267
#, c-format
msgid " (%s will become dangling)"
msgstr " (%s wird unreferenziert)"
-#: builtin/fetch.c:1162
+#: builtin/fetch.c:1268
#, c-format
msgid " (%s has become dangling)"
msgstr " (%s wurde unreferenziert)"
-#: builtin/fetch.c:1194
+#: builtin/fetch.c:1300
msgid "[deleted]"
msgstr "[gelöscht]"
-#: builtin/fetch.c:1195 builtin/remote.c:1118
+#: builtin/fetch.c:1301 builtin/remote.c:1118
msgid "(none)"
msgstr "(nichts)"
-#: builtin/fetch.c:1218
+#: builtin/fetch.c:1324
#, c-format
msgid "Refusing to fetch into current branch %s of non-bare repository"
msgstr ""
"Der \"fetch\" in den aktuellen Branch %s von einem Nicht-Bare-Repository "
"wurde verweigert."
-#: builtin/fetch.c:1237
+#: builtin/fetch.c:1343
#, c-format
msgid "Option \"%s\" value \"%s\" is not valid for %s"
msgstr "Option \"%s\" Wert \"%s\" ist nicht gültig für %s"
-#: builtin/fetch.c:1240
+#: builtin/fetch.c:1346
#, c-format
msgid "Option \"%s\" is ignored for %s\n"
msgstr "Option \"%s\" wird ignoriert für %s\n"
-#: builtin/fetch.c:1448
+#: builtin/fetch.c:1558
msgid "multiple branches detected, incompatible with --set-upstream"
msgstr "Mehrere Branches erkannt, inkompatibel mit --set-upstream"
-#: builtin/fetch.c:1463
+#: builtin/fetch.c:1573
msgid "not setting upstream for a remote remote-tracking branch"
msgstr "Setze keinen Upstream für einen entfernten Remote-Tracking-Branch."
-#: builtin/fetch.c:1465
+#: builtin/fetch.c:1575
msgid "not setting upstream for a remote tag"
msgstr "Setze keinen Upstream für einen Tag eines Remote-Repositories."
-#: builtin/fetch.c:1467
+#: builtin/fetch.c:1577
msgid "unknown branch type"
msgstr "Unbekannter Branch-Typ"
-#: builtin/fetch.c:1469
+#: builtin/fetch.c:1579
msgid ""
"no source branch found.\n"
"you need to specify exactly one branch with the --set-upstream option."
@@ -14944,22 +15222,22 @@
"Keinen Quell-Branch gefunden.\n"
"Sie müssen bei der Option --set-upstream genau einen Branch angeben."
-#: builtin/fetch.c:1598 builtin/fetch.c:1661
+#: builtin/fetch.c:1708 builtin/fetch.c:1771
#, c-format
msgid "Fetching %s\n"
msgstr "Fordere an von %s\n"
-#: builtin/fetch.c:1608 builtin/fetch.c:1663 builtin/remote.c:101
+#: builtin/fetch.c:1718 builtin/fetch.c:1773 builtin/remote.c:101
#, c-format
msgid "Could not fetch %s"
msgstr "Konnte nicht von %s anfordern"
-#: builtin/fetch.c:1620
+#: builtin/fetch.c:1730
#, c-format
msgid "could not fetch '%s' (exit code: %d)\n"
msgstr "Konnte '%s' nicht anfordern (Exit-Code: %d)\n"
-#: builtin/fetch.c:1724
+#: builtin/fetch.c:1834
msgid ""
"No remote repository specified. Please, specify either a URL or a\n"
"remote name from which new revisions should be fetched."
@@ -14968,49 +15246,48 @@
"oder den Namen des Remote-Repositories an, von welchem neue\n"
"Commits angefordert werden sollen."
-#: builtin/fetch.c:1760
+#: builtin/fetch.c:1870
msgid "You need to specify a tag name."
msgstr "Sie müssen den Namen des Tags angeben."
-#: builtin/fetch.c:1825
+#: builtin/fetch.c:1935
msgid "Negative depth in --deepen is not supported"
msgstr "Negative Tiefe wird von --deepen nicht unterstützt."
-#: builtin/fetch.c:1827
+#: builtin/fetch.c:1937
msgid "--deepen and --depth are mutually exclusive"
msgstr "--deepen und --depth schließen sich gegenseitig aus"
-#: builtin/fetch.c:1832
+#: builtin/fetch.c:1942
msgid "--depth and --unshallow cannot be used together"
-msgstr ""
-"Die Optionen --depth und --unshallow können nicht gemeinsam verwendet werden."
+msgstr "--depth und --unshallow können nicht gemeinsam verwendet werden"
-#: builtin/fetch.c:1834
+#: builtin/fetch.c:1944
msgid "--unshallow on a complete repository does not make sense"
msgstr ""
-"Die Option --unshallow kann nicht in einem Repository mit vollständiger "
-"Historie verwendet werden."
+"--unshallow kann nicht in einem Repository mit vollständiger Historie "
+"verwendet werden"
-#: builtin/fetch.c:1851
+#: builtin/fetch.c:1961
msgid "fetch --all does not take a repository argument"
msgstr "fetch --all akzeptiert kein Repository als Argument"
-#: builtin/fetch.c:1853
+#: builtin/fetch.c:1963
msgid "fetch --all does not make sense with refspecs"
-msgstr "fetch --all kann nicht mit Refspecs verwendet werden."
+msgstr "fetch --all kann nicht mit Refspecs verwendet werden"
-#: builtin/fetch.c:1862
+#: builtin/fetch.c:1972
#, c-format
msgid "No such remote or remote group: %s"
-msgstr "Kein Remote-Repository (einzeln oder Gruppe): %s"
+msgstr "Remote-Repository (einzeln oder Gruppe) nicht gefunden: %s"
-#: builtin/fetch.c:1869
+#: builtin/fetch.c:1979
msgid "Fetching a group and specifying refspecs does not make sense"
msgstr ""
"Das Abholen einer Gruppe von Remote-Repositories kann nicht mit der Angabe\n"
"von Refspecs verwendet werden."
-#: builtin/fetch.c:1887
+#: builtin/fetch.c:1997
msgid ""
"--filter can only be used with the remote configured in extensions."
"partialclone"
@@ -15018,11 +15295,17 @@
"--filter kann nur mit den Remote-Repositories verwendet werden,\n"
"die in extensions.partialclone konfiguriert sind"
-#: builtin/fetch.c:1891
+#: builtin/fetch.c:2001
+msgid "--atomic can only be used when fetching from one remote"
+msgstr ""
+"--atomic kann nur verwendet werden, wenn nur von einem Remote-Repository "
+"abgefragt wird"
+
+#: builtin/fetch.c:2005
msgid "--stdin can only be used when fetching from one remote"
msgstr ""
-"die Option --stdin kann nur verwendet werden, wenn nur von einem Remote-\n"
-"Repository abgefragt wird"
+"--stdin kann nur verwendet werden, wenn nur von einem Remote-Repository "
+"abgefragt wird"
#: builtin/fmt-merge-msg.c:7
msgid ""
@@ -15087,7 +15370,7 @@
msgid "show only <n> matched refs"
msgstr "nur <n> passende Referenzen anzeigen"
-#: builtin/for-each-ref.c:39 builtin/tag.c:440
+#: builtin/for-each-ref.c:39 builtin/tag.c:472
msgid "respect format colors"
msgstr "Formatfarben beachten"
@@ -15127,32 +15410,32 @@
msgid "missing --config=<config>"
msgstr "Option --config=<Konfiguration> fehlt"
-#: builtin/fsck.c:69 builtin/fsck.c:148 builtin/fsck.c:149
+#: builtin/fsck.c:69 builtin/fsck.c:130 builtin/fsck.c:131
msgid "unknown"
msgstr "unbekannt"
#. TRANSLATORS: e.g. error in tree 01bfda: <more explanation>
-#: builtin/fsck.c:101 builtin/fsck.c:121
+#: builtin/fsck.c:83 builtin/fsck.c:103
#, c-format
msgid "error in %s %s: %s"
msgstr "Fehler in %s %s: %s"
#. TRANSLATORS: e.g. warning in tree 01bfda: <more explanation>
-#: builtin/fsck.c:115
+#: builtin/fsck.c:97
#, c-format
msgid "warning in %s %s: %s"
msgstr "Warnung in %s %s: %s"
-#: builtin/fsck.c:144 builtin/fsck.c:147
+#: builtin/fsck.c:126 builtin/fsck.c:129
#, c-format
msgid "broken link from %7s %s"
msgstr "fehlerhafte Verknüpfung von %7s %s"
-#: builtin/fsck.c:156
+#: builtin/fsck.c:138
msgid "wrong object type in link"
msgstr "falscher Objekttyp in Verknüpfung"
-#: builtin/fsck.c:172
+#: builtin/fsck.c:154
#, c-format
msgid ""
"broken link from %7s %s\n"
@@ -15161,211 +15444,211 @@
"fehlerhafte Verknüpfung von %7s %s\n"
" nach %7s %s"
-#: builtin/fsck.c:283
+#: builtin/fsck.c:265
#, c-format
msgid "missing %s %s"
msgstr "%s %s fehlt"
-#: builtin/fsck.c:310
+#: builtin/fsck.c:292
#, c-format
msgid "unreachable %s %s"
msgstr "%s %s nicht erreichbar"
-#: builtin/fsck.c:330
+#: builtin/fsck.c:312
#, c-format
msgid "dangling %s %s"
msgstr "%s %s unreferenziert"
-#: builtin/fsck.c:340
+#: builtin/fsck.c:322
msgid "could not create lost-found"
msgstr "Konnte lost-found nicht erstellen."
-#: builtin/fsck.c:351
+#: builtin/fsck.c:333
#, c-format
msgid "could not finish '%s'"
msgstr "Konnte '%s' nicht abschließen."
-#: builtin/fsck.c:368
+#: builtin/fsck.c:350
#, c-format
msgid "Checking %s"
msgstr "Prüfe %s"
-#: builtin/fsck.c:406
+#: builtin/fsck.c:388
#, c-format
msgid "Checking connectivity (%d objects)"
msgstr "Prüfe Konnektivität (%d Objekte)"
-#: builtin/fsck.c:425
+#: builtin/fsck.c:407
#, c-format
msgid "Checking %s %s"
msgstr "Prüfe %s %s"
-#: builtin/fsck.c:430
+#: builtin/fsck.c:412
msgid "broken links"
msgstr "Fehlerhafte Verknüpfungen"
-#: builtin/fsck.c:439
+#: builtin/fsck.c:421
#, c-format
msgid "root %s"
msgstr "Wurzel %s"
-#: builtin/fsck.c:447
+#: builtin/fsck.c:429
#, c-format
msgid "tagged %s %s (%s) in %s"
msgstr "%s %s (%s) in %s getaggt"
-#: builtin/fsck.c:476
+#: builtin/fsck.c:458
#, c-format
msgid "%s: object corrupt or missing"
msgstr "%s: Objekt fehlerhaft oder nicht vorhanden"
-#: builtin/fsck.c:501
+#: builtin/fsck.c:483
#, c-format
msgid "%s: invalid reflog entry %s"
msgstr "%s: Ungültiger Reflog-Eintrag %s"
-#: builtin/fsck.c:515
+#: builtin/fsck.c:497
#, c-format
msgid "Checking reflog %s->%s"
msgstr "Prüfe Reflog %s->%s"
-#: builtin/fsck.c:549
+#: builtin/fsck.c:531
#, c-format
msgid "%s: invalid sha1 pointer %s"
msgstr "%s: Ungültiger SHA1-Zeiger %s"
-#: builtin/fsck.c:556
+#: builtin/fsck.c:538
#, c-format
msgid "%s: not a commit"
msgstr "%s: kein Commit"
-#: builtin/fsck.c:610
+#: builtin/fsck.c:592
msgid "notice: No default references"
msgstr "Notiz: Keine Standardreferenzen"
-#: builtin/fsck.c:625
+#: builtin/fsck.c:607
#, c-format
msgid "%s: object corrupt or missing: %s"
msgstr "%s: Objekt fehlerhaft oder nicht vorhanden: %s"
-#: builtin/fsck.c:638
+#: builtin/fsck.c:620
#, c-format
msgid "%s: object could not be parsed: %s"
msgstr "%s: Objekt konnte nicht geparst werden: %s"
-#: builtin/fsck.c:658
+#: builtin/fsck.c:640
#, c-format
msgid "bad sha1 file: %s"
msgstr "Ungültige SHA1-Datei: %s"
-#: builtin/fsck.c:673
+#: builtin/fsck.c:655
msgid "Checking object directory"
msgstr "Prüfe Objekt-Verzeichnis"
-#: builtin/fsck.c:676
+#: builtin/fsck.c:658
msgid "Checking object directories"
msgstr "Prüfe Objekt-Verzeichnisse"
-#: builtin/fsck.c:691
+#: builtin/fsck.c:673
#, c-format
msgid "Checking %s link"
msgstr "Prüfe %s Verknüpfung"
-#: builtin/fsck.c:696 builtin/index-pack.c:865
+#: builtin/fsck.c:678 builtin/index-pack.c:865
#, c-format
msgid "invalid %s"
msgstr "Ungültiger Objekt-Typ %s"
-#: builtin/fsck.c:703
+#: builtin/fsck.c:685
#, c-format
msgid "%s points to something strange (%s)"
msgstr "%s zeigt auf etwas seltsames (%s)"
-#: builtin/fsck.c:709
+#: builtin/fsck.c:691
#, c-format
msgid "%s: detached HEAD points at nothing"
msgstr "%s: losgelöster HEAD zeigt auf nichts"
-#: builtin/fsck.c:713
+#: builtin/fsck.c:695
#, c-format
msgid "notice: %s points to an unborn branch (%s)"
msgstr "Notiz: %s zeigt auf einen ungeborenen Branch (%s)"
-#: builtin/fsck.c:725
+#: builtin/fsck.c:707
msgid "Checking cache tree"
msgstr "Prüfe Cache-Verzeichnis"
-#: builtin/fsck.c:730
+#: builtin/fsck.c:712
#, c-format
msgid "%s: invalid sha1 pointer in cache-tree"
msgstr "%s: Ungültiger SHA1-Zeiger in Cache-Verzeichnis"
-#: builtin/fsck.c:739
+#: builtin/fsck.c:721
msgid "non-tree in cache-tree"
msgstr "non-tree in Cache-Verzeichnis"
-#: builtin/fsck.c:770
+#: builtin/fsck.c:752
msgid "git fsck [<options>] [<object>...]"
msgstr "git fsck [<Optionen>] [<Objekt>...]"
-#: builtin/fsck.c:776
+#: builtin/fsck.c:758
msgid "show unreachable objects"
msgstr "unerreichbare Objekte anzeigen"
-#: builtin/fsck.c:777
+#: builtin/fsck.c:759
msgid "show dangling objects"
msgstr "unreferenzierte Objekte anzeigen"
-#: builtin/fsck.c:778
+#: builtin/fsck.c:760
msgid "report tags"
msgstr "Tags melden"
-#: builtin/fsck.c:779
+#: builtin/fsck.c:761
msgid "report root nodes"
msgstr "Hauptwurzeln melden"
-#: builtin/fsck.c:780
+#: builtin/fsck.c:762
msgid "make index objects head nodes"
msgstr "Index-Objekte in Erreichbarkeitsprüfung einbeziehen"
-#: builtin/fsck.c:781
+#: builtin/fsck.c:763
msgid "make reflogs head nodes (default)"
msgstr "Reflogs in Erreichbarkeitsprüfung einbeziehen (Standard)"
-#: builtin/fsck.c:782
+#: builtin/fsck.c:764
msgid "also consider packs and alternate objects"
msgstr "ebenso Pakete und alternative Objekte betrachten"
-#: builtin/fsck.c:783
+#: builtin/fsck.c:765
msgid "check only connectivity"
msgstr "nur Konnektivität prüfen"
-#: builtin/fsck.c:784
+#: builtin/fsck.c:766 builtin/mktag.c:78
msgid "enable more strict checking"
msgstr "genauere Prüfung aktivieren"
-#: builtin/fsck.c:786
+#: builtin/fsck.c:768
msgid "write dangling objects in .git/lost-found"
msgstr "unreferenzierte Objekte nach .git/lost-found schreiben"
-#: builtin/fsck.c:787 builtin/prune.c:134
+#: builtin/fsck.c:769 builtin/prune.c:134
msgid "show progress"
msgstr "Fortschrittsanzeige anzeigen"
-#: builtin/fsck.c:788
+#: builtin/fsck.c:770
msgid "show verbose names for reachable objects"
msgstr "ausführliche Namen für erreichbare Objekte anzeigen"
-#: builtin/fsck.c:847 builtin/index-pack.c:261
+#: builtin/fsck.c:829 builtin/index-pack.c:261
msgid "Checking objects"
msgstr "Prüfe Objekte"
-#: builtin/fsck.c:875
+#: builtin/fsck.c:857
#, c-format
msgid "%s: object missing"
msgstr "%s: Objekt nicht vorhanden"
-#: builtin/fsck.c:886
+#: builtin/fsck.c:868
#, c-format
msgid "invalid parameter: expected sha1, got '%s'"
msgstr "Ungültiger Parameter: SHA-1 erwartet, '%s' bekommen"
@@ -15374,27 +15657,27 @@
msgid "git gc [<options>]"
msgstr "git gc [<Optionen>]"
-#: builtin/gc.c:94
+#: builtin/gc.c:93
#, c-format
msgid "Failed to fstat %s: %s"
msgstr "Konnte '%s' nicht lesen: %s"
-#: builtin/gc.c:130
+#: builtin/gc.c:129
#, c-format
msgid "failed to parse '%s' value '%s'"
msgstr "Fehler beim Parsen von '%s' mit dem Wert '%s'"
-#: builtin/gc.c:479 builtin/init-db.c:58
+#: builtin/gc.c:487 builtin/init-db.c:58
#, c-format
msgid "cannot stat '%s'"
msgstr "Kann '%s' nicht lesen"
-#: builtin/gc.c:488 builtin/notes.c:240 builtin/tag.c:530
+#: builtin/gc.c:496 builtin/notes.c:240 builtin/tag.c:562
#, c-format
msgid "cannot read '%s'"
msgstr "kann '%s' nicht lesen"
-#: builtin/gc.c:495
+#: builtin/gc.c:503
#, c-format
msgid ""
"The last gc run reported the following. Please correct the root cause\n"
@@ -15410,58 +15693,58 @@
"\n"
"%s"
-#: builtin/gc.c:543
+#: builtin/gc.c:551
msgid "prune unreferenced objects"
msgstr "unreferenzierte Objekte entfernen"
-#: builtin/gc.c:545
+#: builtin/gc.c:553
msgid "be more thorough (increased runtime)"
msgstr "mehr Gründlichkeit (erhöht Laufzeit)"
-#: builtin/gc.c:546
+#: builtin/gc.c:554
msgid "enable auto-gc mode"
msgstr "\"auto-gc\" Modus aktivieren"
-#: builtin/gc.c:549
+#: builtin/gc.c:557
msgid "force running gc even if there may be another gc running"
msgstr ""
"Ausführung von \"git gc\" erzwingen, selbst wenn ein anderes\n"
"\"git gc\" bereits ausgeführt wird"
-#: builtin/gc.c:552
+#: builtin/gc.c:560
msgid "repack all other packs except the largest pack"
msgstr "alle anderen Pakete, außer das größte Paket, neu packen"
-#: builtin/gc.c:569
+#: builtin/gc.c:576
#, c-format
msgid "failed to parse gc.logexpiry value %s"
msgstr "Fehler beim Parsen des Wertes '%s' von gc.logexpiry."
-#: builtin/gc.c:580
+#: builtin/gc.c:587
#, c-format
msgid "failed to parse prune expiry value %s"
msgstr "Fehler beim Parsen des \"prune expiry\" Wertes %s"
-#: builtin/gc.c:600
+#: builtin/gc.c:607
#, c-format
msgid "Auto packing the repository in background for optimum performance.\n"
msgstr ""
"Die Datenbank des Repositories wird für eine optimale Performance im\n"
"Hintergrund komprimiert.\n"
-#: builtin/gc.c:602
+#: builtin/gc.c:609
#, c-format
msgid "Auto packing the repository for optimum performance.\n"
msgstr ""
"Die Datenbank des Projektarchivs wird für eine optimale Performance "
"komprimiert.\n"
-#: builtin/gc.c:603
+#: builtin/gc.c:610
#, c-format
msgid "See \"git help gc\" for manual housekeeping.\n"
msgstr "Siehe \"git help gc\" für manuelles Aufräumen.\n"
-#: builtin/gc.c:643
+#: builtin/gc.c:650
#, c-format
msgid ""
"gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
@@ -15469,149 +15752,176 @@
"\"git gc\" wird bereits auf Maschine '%s' pid %<PRIuMAX> ausgeführt\n"
"(benutzen Sie --force falls nicht)"
-#: builtin/gc.c:698
+#: builtin/gc.c:705
msgid ""
"There are too many unreachable loose objects; run 'git prune' to remove them."
msgstr ""
"Es gibt zu viele unerreichbare lose Objekte; führen Sie 'git prune' aus, um "
"diese zu löschen."
-#: builtin/gc.c:708
+#: builtin/gc.c:715
msgid ""
"git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
msgstr ""
"git maintenance run [--auto] [--[no-]quiet] [--task=<Aufgabe>] [--schedule]"
-#: builtin/gc.c:738
+#: builtin/gc.c:745
msgid "--no-schedule is not allowed"
msgstr "--no-schedule ist nicht erlaubt"
-#: builtin/gc.c:743
+#: builtin/gc.c:750
#, c-format
msgid "unrecognized --schedule argument '%s'"
msgstr "nicht erkanntes --schedule Argument '%s'"
-#: builtin/gc.c:862
+#: builtin/gc.c:869
msgid "failed to write commit-graph"
msgstr "Fehler beim Schreiben des Commit-Graph"
-#: builtin/gc.c:901
+#: builtin/gc.c:914
msgid "failed to fill remotes"
msgstr "Fehler beim Eintragen der Remote-Repositories"
-#: builtin/gc.c:1024
+#: builtin/gc.c:1037
msgid "failed to start 'git pack-objects' process"
msgstr "konnte 'git pack-objects' Prozess nicht starten"
-#: builtin/gc.c:1041
+#: builtin/gc.c:1054
msgid "failed to finish 'git pack-objects' process"
msgstr "konnte 'git pack-objects' Prozess nicht beenden"
-#: builtin/gc.c:1093
+#: builtin/gc.c:1106
msgid "failed to write multi-pack-index"
msgstr "Fehler beim Schreiben des multi-pack-index"
-#: builtin/gc.c:1111
+#: builtin/gc.c:1124
msgid "'git multi-pack-index expire' failed"
msgstr "Fehler beim Ausführen von 'git multi-pack-index expire'"
-#: builtin/gc.c:1172
+#: builtin/gc.c:1185
msgid "'git multi-pack-index repack' failed"
msgstr "Fehler beim Ausführen von 'git multi-pack-index repack'"
-#: builtin/gc.c:1181
+#: builtin/gc.c:1194
msgid ""
"skipping incremental-repack task because core.multiPackIndex is disabled"
msgstr ""
"Überspringen der Aufgabe 'incremental-repack', weil core.multiPackIndex "
"deaktiviert ist"
-#: builtin/gc.c:1279
+#: builtin/gc.c:1298
#, c-format
msgid "lock file '%s' exists, skipping maintenance"
msgstr "Sperrdatei '%s' existiert, Wartung wird übersprungen"
-#: builtin/gc.c:1309
+#: builtin/gc.c:1328
#, c-format
msgid "task '%s' failed"
msgstr "Aufgabe '%s' fehlgeschlagen"
-#: builtin/gc.c:1389
+#: builtin/gc.c:1410
#, c-format
msgid "'%s' is not a valid task"
msgstr "'%s' ist keine gültige Aufgabe"
-#: builtin/gc.c:1394
+#: builtin/gc.c:1415
#, c-format
msgid "task '%s' cannot be selected multiple times"
msgstr "Aufgabe '%s' kann nicht mehrfach ausgewählt werden"
-#: builtin/gc.c:1409
+#: builtin/gc.c:1430
msgid "run tasks based on the state of the repository"
msgstr "Aufgaben abhängig vom Zustand des Repositories ausführen"
-#: builtin/gc.c:1410
+#: builtin/gc.c:1431
msgid "frequency"
msgstr "Häufigkeit"
-#: builtin/gc.c:1411
+#: builtin/gc.c:1432
msgid "run tasks based on frequency"
msgstr "Aufgaben abhängig von der Häufigkeit ausführen"
-#: builtin/gc.c:1414
+#: builtin/gc.c:1435
msgid "do not report progress or other information over stderr"
msgstr "zeige keinen Fortschritt oder andere Informationen über stderr"
-#: builtin/gc.c:1415
+#: builtin/gc.c:1436
msgid "task"
msgstr "Aufgabe"
-#: builtin/gc.c:1416
+#: builtin/gc.c:1437
msgid "run a specific task"
msgstr "eine bestimmte Aufgabe ausführen"
-#: builtin/gc.c:1433
+#: builtin/gc.c:1454
msgid "use at most one of --auto and --schedule=<frequency>"
msgstr ""
"nutzen Sie höchstens eine der Optionen --auto oder --schedule=<Häufigkeit>"
-#: builtin/gc.c:1467
+#: builtin/gc.c:1497
msgid "failed to run 'git config'"
msgstr "Fehler beim Ausführen von 'git config'"
-#: builtin/gc.c:1512
-msgid "another process is scheduling background maintenance"
-msgstr "ein anderer Prozess plant die Hintergrundwartung"
+#: builtin/gc.c:1562
+#, c-format
+msgid "failed to expand path '%s'"
+msgstr "Fehler beim Erweitern des Pfades '%s'"
-#: builtin/gc.c:1525
+#: builtin/gc.c:1591
+msgid "failed to start launchctl"
+msgstr "konnte launchctl nicht starten"
+
+#: builtin/gc.c:1628
+#, c-format
+msgid "failed to create directories for '%s'"
+msgstr "Fehler beim Erstellen von Verzeichnissen für '%s'"
+
+#: builtin/gc.c:1689
+#, c-format
+msgid "failed to bootstrap service %s"
+msgstr "Fehler beim Laden des Services %s"
+
+#: builtin/gc.c:1760
+msgid "failed to create temp xml file"
+msgstr "Fehler beim Erstellen der temporären XML-Datei"
+
+#: builtin/gc.c:1850
+msgid "failed to start schtasks"
+msgstr "Fehler beim Starten von schtasks"
+
+#: builtin/gc.c:1894
msgid "failed to run 'crontab -l'; your system might not support 'cron'"
msgstr ""
"Fehler beim Ausführen von 'crontab -l'; Ihr System unterstützt eventuell "
"'cron' nicht"
-#: builtin/gc.c:1544
+#: builtin/gc.c:1911
msgid "failed to run 'crontab'; your system might not support 'cron'"
msgstr ""
"Fehler beim Ausführen von 'crontab'; Ihr System unterstützt eventuell 'cron' "
"nicht"
-#: builtin/gc.c:1550
+#: builtin/gc.c:1915
msgid "failed to open stdin of 'crontab'"
msgstr "Fehler beim Öffnen der Standard-Eingabe von 'crontab'"
-#: builtin/gc.c:1592
+#: builtin/gc.c:1956
msgid "'crontab' died"
msgstr "'crontab' abgebrochen"
-#: builtin/gc.c:1605
+#: builtin/gc.c:1990
+msgid "another process is scheduling background maintenance"
+msgstr "ein anderer Prozess plant die Hintergrundwartung"
+
+#: builtin/gc.c:2009
msgid "failed to add repo to global config"
msgstr "Repository konnte nicht zur globalen Konfiguration hinzugefügt werden"
-#: builtin/gc.c:1615
+#: builtin/gc.c:2019
msgid "git maintenance <subcommand> [<options>]"
msgstr "git maintenance <Unterbefehl> [<Optionen>]"
-#: builtin/gc.c:1634
+#: builtin/gc.c:2038
#, c-format
msgid "invalid subcommand: %s"
msgstr "ungültiger Unterbefehl: %s"
@@ -15620,12 +15930,12 @@
msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
msgstr "git grep [<Optionen>] [-e] <Muster> [<Commit>...] [[--] <Pfad>...]"
-#: builtin/grep.c:225
+#: builtin/grep.c:223
#, c-format
msgid "grep: failed to create thread: %s"
msgstr "grep: Fehler beim Erzeugen eines Thread: %s"
-#: builtin/grep.c:279
+#: builtin/grep.c:277
#, c-format
msgid "invalid number of threads specified (%d) for %s"
msgstr "ungültige Anzahl von Threads (%d) für %s angegeben"
@@ -15634,266 +15944,266 @@
#. variable for tweaking threads, currently
#. grep.threads
#.
-#: builtin/grep.c:287 builtin/index-pack.c:1576 builtin/index-pack.c:1766
-#: builtin/pack-objects.c:2936
+#: builtin/grep.c:285 builtin/index-pack.c:1589 builtin/index-pack.c:1808
+#: builtin/pack-objects.c:2944
#, c-format
msgid "no threads support, ignoring %s"
msgstr "keine Unterstützung von Threads, '%s' wird ignoriert"
-#: builtin/grep.c:475 builtin/grep.c:600 builtin/grep.c:640
+#: builtin/grep.c:473 builtin/grep.c:601 builtin/grep.c:641
#, c-format
msgid "unable to read tree (%s)"
msgstr "konnte \"Tree\"-Objekt (%s) nicht lesen"
-#: builtin/grep.c:655
+#: builtin/grep.c:656
#, c-format
msgid "unable to grep from object of type %s"
msgstr "kann \"grep\" nicht mit Objekten des Typs %s durchführen"
-#: builtin/grep.c:736
+#: builtin/grep.c:737
#, c-format
msgid "switch `%c' expects a numerical value"
msgstr "Schalter '%c' erwartet einen numerischen Wert"
-#: builtin/grep.c:835
+#: builtin/grep.c:836
msgid "search in index instead of in the work tree"
-msgstr "im Index anstatt im Arbeitsverzeichnis suchen"
+msgstr "im Index statt im Arbeitsverzeichnis suchen"
-#: builtin/grep.c:837
+#: builtin/grep.c:838
msgid "find in contents not managed by git"
msgstr "auch in Inhalten finden, die nicht von Git verwaltet werden"
-#: builtin/grep.c:839
+#: builtin/grep.c:840
msgid "search in both tracked and untracked files"
msgstr "in versionierten und unversionierten Dateien suchen"
-#: builtin/grep.c:841
+#: builtin/grep.c:842
msgid "ignore files specified via '.gitignore'"
msgstr "Dateien, die über '.gitignore' angegeben sind, ignorieren"
-#: builtin/grep.c:843
+#: builtin/grep.c:844
msgid "recursively search in each submodule"
msgstr "rekursive Suche in jedem Submodul"
-#: builtin/grep.c:846
+#: builtin/grep.c:847
msgid "show non-matching lines"
msgstr "Zeilen ohne Übereinstimmungen anzeigen"
-#: builtin/grep.c:848
+#: builtin/grep.c:849
msgid "case insensitive matching"
msgstr "Übereinstimmungen unabhängig von Groß- und Kleinschreibung finden"
-#: builtin/grep.c:850
+#: builtin/grep.c:851
msgid "match patterns only at word boundaries"
msgstr "nur ganze Wörter suchen"
-#: builtin/grep.c:852
+#: builtin/grep.c:853
msgid "process binary files as text"
msgstr "binäre Dateien als Text verarbeiten"
-#: builtin/grep.c:854
+#: builtin/grep.c:855
msgid "don't match patterns in binary files"
msgstr "keine Muster in Binärdateien finden"
-#: builtin/grep.c:857
+#: builtin/grep.c:858
msgid "process binary files with textconv filters"
msgstr "binäre Dateien mit \"textconv\"-Filtern verarbeiten"
-#: builtin/grep.c:859
+#: builtin/grep.c:860
msgid "search in subdirectories (default)"
msgstr "in Unterverzeichnissen suchen (Standard)"
-#: builtin/grep.c:861
+#: builtin/grep.c:862
msgid "descend at most <depth> levels"
msgstr "höchstens <Tiefe> Ebenen durchlaufen"
-#: builtin/grep.c:865
+#: builtin/grep.c:866
msgid "use extended POSIX regular expressions"
msgstr "erweiterte reguläre Ausdrücke aus POSIX verwenden"
-#: builtin/grep.c:868
+#: builtin/grep.c:869
msgid "use basic POSIX regular expressions (default)"
msgstr "grundlegende reguläre Ausdrücke aus POSIX verwenden (Standard)"
-#: builtin/grep.c:871
+#: builtin/grep.c:872
msgid "interpret patterns as fixed strings"
msgstr "Muster als feste Zeichenketten interpretieren"
-#: builtin/grep.c:874
+#: builtin/grep.c:875
msgid "use Perl-compatible regular expressions"
msgstr "Perl-kompatible reguläre Ausdrücke verwenden"
-#: builtin/grep.c:877
+#: builtin/grep.c:878
msgid "show line numbers"
msgstr "Zeilennummern anzeigen"
-#: builtin/grep.c:878
+#: builtin/grep.c:879
msgid "show column number of first match"
msgstr "Nummer der Spalte des ersten Treffers anzeigen"
-#: builtin/grep.c:879
+#: builtin/grep.c:880
msgid "don't show filenames"
msgstr "keine Dateinamen anzeigen"
-#: builtin/grep.c:880
+#: builtin/grep.c:881
msgid "show filenames"
msgstr "Dateinamen anzeigen"
-#: builtin/grep.c:882
+#: builtin/grep.c:883
msgid "show filenames relative to top directory"
msgstr "Dateinamen relativ zum Projektverzeichnis anzeigen"
-#: builtin/grep.c:884
+#: builtin/grep.c:885
msgid "show only filenames instead of matching lines"
msgstr "nur Dateinamen anzeigen anstatt übereinstimmende Zeilen"
-#: builtin/grep.c:886
+#: builtin/grep.c:887
msgid "synonym for --files-with-matches"
msgstr "Synonym für --files-with-matches"
-#: builtin/grep.c:889
+#: builtin/grep.c:890
msgid "show only the names of files without match"
msgstr "nur die Dateinamen ohne Übereinstimmungen anzeigen"
-#: builtin/grep.c:891
+#: builtin/grep.c:892
msgid "print NUL after filenames"
msgstr "NUL-Zeichen nach Dateinamen ausgeben"
-#: builtin/grep.c:894
+#: builtin/grep.c:895
msgid "show only matching parts of a line"
msgstr "nur übereinstimmende Teile der Zeile anzeigen"
-#: builtin/grep.c:896
+#: builtin/grep.c:897
msgid "show the number of matches instead of matching lines"
msgstr "anstatt der Zeilen, die Anzahl der übereinstimmenden Zeilen anzeigen"
-#: builtin/grep.c:897
+#: builtin/grep.c:898
msgid "highlight matches"
msgstr "Übereinstimmungen hervorheben"
-#: builtin/grep.c:899
+#: builtin/grep.c:900
msgid "print empty line between matches from different files"
msgstr ""
"eine Leerzeile zwischen Übereinstimmungen in verschiedenen Dateien ausgeben"
-#: builtin/grep.c:901
+#: builtin/grep.c:902
msgid "show filename only once above matches from same file"
msgstr ""
"den Dateinamen nur einmal oberhalb der Übereinstimmungen aus dieser Datei "
"anzeigen"
-#: builtin/grep.c:904
+#: builtin/grep.c:905
msgid "show <n> context lines before and after matches"
msgstr "<n> Zeilen vor und nach den Übereinstimmungen anzeigen"
-#: builtin/grep.c:907
+#: builtin/grep.c:908
msgid "show <n> context lines before matches"
msgstr "<n> Zeilen vor den Übereinstimmungen anzeigen"
-#: builtin/grep.c:909
+#: builtin/grep.c:910
msgid "show <n> context lines after matches"
msgstr "<n> Zeilen nach den Übereinstimmungen anzeigen"
-#: builtin/grep.c:911
+#: builtin/grep.c:912
msgid "use <n> worker threads"
msgstr "<n> Threads benutzen"
-#: builtin/grep.c:912
+#: builtin/grep.c:913
msgid "shortcut for -C NUM"
msgstr "Kurzform für -C NUM"
-#: builtin/grep.c:915
+#: builtin/grep.c:916
msgid "show a line with the function name before matches"
msgstr "eine Zeile mit dem Funktionsnamen vor Übereinstimmungen anzeigen"
-#: builtin/grep.c:917
+#: builtin/grep.c:918
msgid "show the surrounding function"
msgstr "die umgebende Funktion anzeigen"
-#: builtin/grep.c:920
+#: builtin/grep.c:921
msgid "read patterns from file"
msgstr "Muster von einer Datei lesen"
-#: builtin/grep.c:922
+#: builtin/grep.c:923
msgid "match <pattern>"
msgstr "<Muster> finden"
-#: builtin/grep.c:924
+#: builtin/grep.c:925
msgid "combine patterns specified with -e"
msgstr "Muster kombinieren, die mit -e angegeben wurden"
-#: builtin/grep.c:936
+#: builtin/grep.c:937
msgid "indicate hit with exit status without output"
msgstr "Übereinstimmungen nur durch Beendigungsstatus anzeigen"
-#: builtin/grep.c:938
+#: builtin/grep.c:939
msgid "show only matches from files that match all patterns"
msgstr ""
"nur Übereinstimmungen von Dateien anzeigen, die allen Mustern entsprechen"
-#: builtin/grep.c:940
-msgid "show parse tree for grep expression"
-msgstr "geparstes Verzeichnis für \"grep\"-Ausdruck anzeigen"
-
-#: builtin/grep.c:944
+#: builtin/grep.c:942
msgid "pager"
msgstr "Anzeigeprogramm"
-#: builtin/grep.c:944
+#: builtin/grep.c:942
msgid "show matching files in the pager"
msgstr "Dateien mit Übereinstimmungen im Anzeigeprogramm anzeigen"
-#: builtin/grep.c:948
+#: builtin/grep.c:946
msgid "allow calling of grep(1) (ignored by this build)"
msgstr "den Aufruf von grep(1) erlauben (von dieser Programmversion ignoriert)"
-#: builtin/grep.c:1014
+#: builtin/grep.c:1012
msgid "no pattern given"
msgstr "Kein Muster angegeben."
-#: builtin/grep.c:1050
+#: builtin/grep.c:1048
msgid "--no-index or --untracked cannot be used with revs"
msgstr "--no-index oder --untracked können nicht mit Commits verwendet werden"
-#: builtin/grep.c:1058
+#: builtin/grep.c:1056
#, c-format
msgid "unable to resolve revision: %s"
msgstr "Konnte Commit nicht auflösen: %s"
-#: builtin/grep.c:1088
+#: builtin/grep.c:1086
msgid "--untracked not supported with --recurse-submodules"
msgstr "--untracked zusammen mit --recurse-submodules wird nicht unterstützt"
-#: builtin/grep.c:1092
+#: builtin/grep.c:1090
msgid "invalid option combination, ignoring --threads"
msgstr "Ungültige Kombination von Optionen, --threads wird ignoriert."
-#: builtin/grep.c:1095 builtin/pack-objects.c:3655
+#: builtin/grep.c:1093 builtin/pack-objects.c:3672
msgid "no threads support, ignoring --threads"
msgstr "Keine Unterstützung für Threads, --threads wird ignoriert."
-#: builtin/grep.c:1098 builtin/index-pack.c:1573 builtin/pack-objects.c:2933
+#: builtin/grep.c:1096 builtin/index-pack.c:1586 builtin/pack-objects.c:2941
#, c-format
msgid "invalid number of threads specified (%d)"
msgstr "ungültige Anzahl von Threads angegeben (%d)"
-#: builtin/grep.c:1132
+#: builtin/grep.c:1130
msgid "--open-files-in-pager only works on the worktree"
msgstr ""
-"Die Option --open-files-in-pager kann nur innerhalb des "
-"Arbeitsverzeichnisses verwendet werden."
+"--open-files-in-pager kann nur innerhalb des Arbeitsverzeichnisses verwendet "
+"werden"
-#: builtin/grep.c:1158
+#: builtin/grep.c:1156
msgid "--cached or --untracked cannot be used with --no-index"
-msgstr "--cached und --untracked können nicht mit --no-index verwendet werden."
+msgstr "--cached und --untracked können nicht mit --no-index verwendet werden"
-#: builtin/grep.c:1164
+#: builtin/grep.c:1159
+msgid "--untracked cannot be used with --cached"
+msgstr "--untracked kann nicht mit --cached verwendet werden"
+
+#: builtin/grep.c:1165
msgid "--[no-]exclude-standard cannot be used for tracked contents"
msgstr ""
"--[no-]exclude-standard kann nicht mit versionierten Inhalten verwendet "
-"werden."
+"werden"
-#: builtin/grep.c:1172
+#: builtin/grep.c:1173
msgid "both --cached and trees are given"
msgstr "--cached und \"Tree\"-Objekte angegeben"
@@ -16026,12 +16336,12 @@
msgid "no info viewer handled the request"
msgstr "kein Informations-Betrachter konnte mit dieser Anfrage umgehen"
-#: builtin/help.c:520 builtin/help.c:531 git.c:337
+#: builtin/help.c:520 builtin/help.c:531 git.c:340
#, c-format
msgid "'%s' is aliased to '%s'"
msgstr "Für '%s' wurde der Alias '%s' angelegt."
-#: builtin/help.c:534 git.c:369
+#: builtin/help.c:534 git.c:372
#, c-format
msgid "bad alias.%s string: %s"
msgstr "Ungültiger alias.%s String: %s"
@@ -16079,7 +16389,7 @@
msgid "used more bytes than were available"
msgstr "verwendete mehr Bytes als verfügbar waren"
-#: builtin/index-pack.c:324 builtin/pack-objects.c:619
+#: builtin/index-pack.c:324 builtin/pack-objects.c:624
msgid "pack too large for current definition of off_t"
msgstr "Paket ist zu groß für die aktuelle Definition von off_t"
@@ -16087,7 +16397,7 @@
msgid "pack exceeds maximum allowed size"
msgstr "Paket überschreitet die maximal erlaubte Größe"
-#: builtin/index-pack.c:342 builtin/repack.c:286
+#: builtin/index-pack.c:342
#, c-format
msgid "unable to create '%s'"
msgstr "konnte '%s' nicht erstellen"
@@ -16213,7 +16523,7 @@
msgid "Resolving deltas"
msgstr "Löse Unterschiede auf"
-#: builtin/index-pack.c:1249 builtin/pack-objects.c:2697
+#: builtin/index-pack.c:1249 builtin/pack-objects.c:2707
#, c-format
msgid "unable to create thread: %s"
msgstr "kann Thread nicht erzeugen: %s"
@@ -16251,10 +16561,10 @@
msgid "local object %s is corrupt"
msgstr "lokales Objekt %s ist beschädigt"
-#: builtin/index-pack.c:1444
+#: builtin/index-pack.c:1445
#, c-format
-msgid "packfile name '%s' does not end with '.pack'"
-msgstr "Name der Paketdatei '%s' endet nicht mit '.pack'"
+msgid "packfile name '%s' does not end with '.%s'"
+msgstr "Name der Paketdatei '%s' endet nicht mit '.%s'"
#: builtin/index-pack.c:1469
#, c-format
@@ -16266,79 +16576,83 @@
msgid "cannot close written %s file '%s'"
msgstr "Kann eben geschriebene %s Datei '%s' nicht schließen."
-#: builtin/index-pack.c:1501
+#: builtin/index-pack.c:1503
msgid "error while closing pack file"
msgstr "Fehler beim Schließen der Paketdatei"
-#: builtin/index-pack.c:1515
+#: builtin/index-pack.c:1517
msgid "cannot store pack file"
msgstr "Kann Paketdatei nicht speichern"
-#: builtin/index-pack.c:1523
+#: builtin/index-pack.c:1525
msgid "cannot store index file"
msgstr "Kann Indexdatei nicht speichern"
-#: builtin/index-pack.c:1567 builtin/pack-objects.c:2944
+#: builtin/index-pack.c:1534
+msgid "cannot store reverse index file"
+msgstr "kann Reverse-Index-Datei nicht speichern"
+
+#: builtin/index-pack.c:1580 builtin/pack-objects.c:2952
#, c-format
msgid "bad pack.indexversion=%<PRIu32>"
msgstr "\"pack.indexversion=%<PRIu32>\" ist ungültig"
-#: builtin/index-pack.c:1631
+#: builtin/index-pack.c:1650
#, c-format
msgid "Cannot open existing pack file '%s'"
msgstr "Kann existierende Paketdatei '%s' nicht öffnen"
-#: builtin/index-pack.c:1633
+#: builtin/index-pack.c:1652
#, c-format
msgid "Cannot open existing pack idx file for '%s'"
msgstr "Kann existierende Indexdatei für Paket '%s' nicht öffnen"
-#: builtin/index-pack.c:1681
+#: builtin/index-pack.c:1700
#, c-format
msgid "non delta: %d object"
msgid_plural "non delta: %d objects"
msgstr[0] "kein Unterschied: %d Objekt"
msgstr[1] "kein Unterschied: %d Objekte"
-#: builtin/index-pack.c:1688
+#: builtin/index-pack.c:1707
#, c-format
msgid "chain length = %d: %lu object"
msgid_plural "chain length = %d: %lu objects"
msgstr[0] "Länge der Objekt-Liste = %d: %lu Objekt"
msgstr[1] "Länge der Objekt-Liste = %d: %lu Objekte"
-#: builtin/index-pack.c:1728
+#: builtin/index-pack.c:1765
msgid "Cannot come back to cwd"
msgstr "Kann nicht zurück zum Arbeitsverzeichnis wechseln"
-#: builtin/index-pack.c:1777 builtin/index-pack.c:1780
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1800
+#: builtin/index-pack.c:1819 builtin/index-pack.c:1822
+#: builtin/index-pack.c:1838 builtin/index-pack.c:1842
#, c-format
msgid "bad %s"
msgstr "%s ist ungültig"
-#: builtin/index-pack.c:1806 builtin/init-db.c:392 builtin/init-db.c:625
+#: builtin/index-pack.c:1848 builtin/init-db.c:392 builtin/init-db.c:625
#, c-format
msgid "unknown hash algorithm '%s'"
msgstr "unbekannter Hash-Algorithmus '%s'"
-#: builtin/index-pack.c:1821
+#: builtin/index-pack.c:1867
msgid "--fix-thin cannot be used without --stdin"
-msgstr "Die Option --fix-thin kann nicht ohne --stdin verwendet werden."
+msgstr "--fix-thin kann nicht ohne --stdin verwendet werden"
-#: builtin/index-pack.c:1823
+#: builtin/index-pack.c:1869
msgid "--stdin requires a git repository"
msgstr "--stdin erfordert ein Git-Repository"
-#: builtin/index-pack.c:1825
+#: builtin/index-pack.c:1871
msgid "--object-format cannot be used with --stdin"
-msgstr "Die Option --object-format kann nicht mit --stdin verwendet werden."
+msgstr "--object-format kann nicht mit --stdin verwendet werden"
-#: builtin/index-pack.c:1831
+#: builtin/index-pack.c:1886
msgid "--verify with no packfile name given"
-msgstr "Die Option --verify wurde ohne Namen der Paketdatei angegeben."
+msgstr "--verify wurde ohne Namen der Paketdatei angegeben"
-#: builtin/index-pack.c:1892 builtin/unpack-objects.c:582
+#: builtin/index-pack.c:1956 builtin/unpack-objects.c:582
msgid "fsck error in pack objects"
msgstr "fsck Fehler beim Packen von Objekten"
@@ -16549,139 +16863,137 @@
#: builtin/interpret-trailers.c:123
msgid "--trailer with --only-input does not make sense"
-msgstr ""
-"Die Optionen --trailer und --only-input können nicht gemeinsam verwendet "
-"werden."
+msgstr "--trailer und --only-input können nicht gemeinsam verwendet werden"
#: builtin/interpret-trailers.c:133
msgid "no input file given for in-place editing"
msgstr "keine Datei zur direkten Bearbeitung angegeben"
-#: builtin/log.c:58
+#: builtin/log.c:59
msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
msgstr "git log [<Optionen>] [<Commitbereich>] [[--] <Pfad>...]"
-#: builtin/log.c:59
+#: builtin/log.c:60
msgid "git show [<options>] <object>..."
msgstr "git show [<Optionen>] <Objekt>..."
-#: builtin/log.c:112
+#: builtin/log.c:113
#, c-format
msgid "invalid --decorate option: %s"
msgstr "Ungültige Option für --decorate: %s"
-#: builtin/log.c:179
+#: builtin/log.c:180
msgid "show source"
msgstr "Quelle anzeigen"
-#: builtin/log.c:180
-msgid "Use mail map file"
+#: builtin/log.c:181
+msgid "use mail map file"
msgstr "\"mailmap\"-Datei verwenden"
-#: builtin/log.c:183
+#: builtin/log.c:184
msgid "only decorate refs that match <pattern>"
msgstr "\"decorate\" nur bei Referenzen anwenden, die <Muster> entsprechen"
-#: builtin/log.c:185
+#: builtin/log.c:186
msgid "do not decorate refs that match <pattern>"
msgstr "\"decorate\" nicht bei Referenzen anwenden, die <Muster> entsprechen"
-#: builtin/log.c:186
+#: builtin/log.c:187
msgid "decorate options"
msgstr "decorate-Optionen"
-#: builtin/log.c:189
+#: builtin/log.c:190
msgid ""
-"Trace the evolution of line range <start>,<end> or function :<funcname> in "
+"trace the evolution of line range <start>,<end> or function :<funcname> in "
"<file>"
msgstr ""
"Entwicklung der Zeilen vom Bereich <Start>,<Ende> oder Funktion :"
"<Funktionsname> in <Datei> verfolgen"
-#: builtin/log.c:212
+#: builtin/log.c:213
msgid "-L<range>:<file> cannot be used with pathspec"
msgstr "-L<Bereich>:<Datei> kann nicht mit Pfadspezifikation verwendet werden"
-#: builtin/log.c:302
+#: builtin/log.c:303
#, c-format
msgid "Final output: %d %s\n"
msgstr "letzte Ausgabe: %d %s\n"
-#: builtin/log.c:564
+#: builtin/log.c:566
#, c-format
msgid "git show %s: bad file"
msgstr "git show %s: ungültige Datei"
-#: builtin/log.c:579 builtin/log.c:674
+#: builtin/log.c:581 builtin/log.c:671
#, c-format
msgid "could not read object %s"
msgstr "Konnte Objekt %s nicht lesen."
-#: builtin/log.c:699
+#: builtin/log.c:696
#, c-format
msgid "unknown type: %d"
msgstr "Unbekannter Typ: %d"
-#: builtin/log.c:848
+#: builtin/log.c:841
#, c-format
msgid "%s: invalid cover from description mode"
msgstr ""
"%s: Ungültiger Modus für Erstellung des Deckblattes aus der Beschreibung"
-#: builtin/log.c:855
+#: builtin/log.c:848
msgid "format.headers without value"
msgstr "format.headers ohne Wert"
-#: builtin/log.c:984
+#: builtin/log.c:977
#, c-format
msgid "cannot open patch file %s"
msgstr "Kann Patch-Datei %s nicht öffnen"
-#: builtin/log.c:1001
+#: builtin/log.c:994
msgid "need exactly one range"
msgstr "Brauche genau einen Commit-Bereich."
-#: builtin/log.c:1011
+#: builtin/log.c:1004
msgid "not a range"
msgstr "Kein Commit-Bereich."
-#: builtin/log.c:1175
+#: builtin/log.c:1168
msgid "cover letter needs email format"
msgstr "Anschreiben benötigt E-Mail-Format"
-#: builtin/log.c:1181
+#: builtin/log.c:1174
msgid "failed to create cover-letter file"
msgstr "Fehler beim Erstellen der Datei für das Anschreiben."
-#: builtin/log.c:1262
+#: builtin/log.c:1261
#, c-format
msgid "insane in-reply-to: %s"
msgstr "ungültiges in-reply-to: %s"
-#: builtin/log.c:1289
+#: builtin/log.c:1288
msgid "git format-patch [<options>] [<since> | <revision-range>]"
msgstr "git format-patch [<Optionen>] [<seit> | <Commitbereich>]"
-#: builtin/log.c:1347
+#: builtin/log.c:1346
msgid "two output directories?"
msgstr "Zwei Ausgabeverzeichnisse?"
-#: builtin/log.c:1498 builtin/log.c:2318 builtin/log.c:2320 builtin/log.c:2332
+#: builtin/log.c:1497 builtin/log.c:2317 builtin/log.c:2319 builtin/log.c:2331
#, c-format
msgid "unknown commit %s"
msgstr "Unbekannter Commit %s"
-#: builtin/log.c:1509 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1508 builtin/replace.c:58 builtin/replace.c:207
#: builtin/replace.c:210
#, c-format
msgid "failed to resolve '%s' as a valid ref"
msgstr "Konnte '%s' nicht als gültige Referenz auflösen."
-#: builtin/log.c:1518
+#: builtin/log.c:1517
msgid "could not find exact merge base"
msgstr "Konnte keine exakte Merge-Basis finden."
-#: builtin/log.c:1528
+#: builtin/log.c:1527
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"
@@ -16692,291 +17004,291 @@
"'git branch --set-upstream-to', um einem Remote-Branch zu folgen.\n"
"Oder geben Sie den Basis-Commit mit '--base=<Basis-Commit-Id>' manuell an."
-#: builtin/log.c:1551
+#: builtin/log.c:1550
msgid "failed to find exact merge base"
msgstr "Fehler beim Finden einer exakten Merge-Basis."
-#: builtin/log.c:1568
+#: builtin/log.c:1567
msgid "base commit should be the ancestor of revision list"
msgstr "Basis-Commit sollte der Vorgänger der Revisionsliste sein."
-#: builtin/log.c:1578
+#: builtin/log.c:1577
msgid "base commit shouldn't be in revision list"
msgstr "Basis-Commit sollte nicht in der Revisionsliste enthalten sein."
-#: builtin/log.c:1636
+#: builtin/log.c:1635
msgid "cannot get patch id"
msgstr "kann Patch-Id nicht lesen"
-#: builtin/log.c:1693
+#: builtin/log.c:1692
msgid "failed to infer range-diff origin of current series"
msgstr "Fehler beim Ableiten des range-diff Ursprungs der aktuellen Serie"
-#: builtin/log.c:1695
+#: builtin/log.c:1694
#, c-format
msgid "using '%s' as range-diff origin of current series"
msgstr "nutze '%s' als range-diff Ursprung der aktuellen Serie"
-#: builtin/log.c:1739
+#: builtin/log.c:1738
msgid "use [PATCH n/m] even with a single patch"
msgstr "[PATCH n/m] auch mit einzelnem Patch verwenden"
-#: builtin/log.c:1742
+#: builtin/log.c:1741
msgid "use [PATCH] even with multiple patches"
msgstr "[PATCH] auch mit mehreren Patches verwenden"
-#: builtin/log.c:1746
+#: builtin/log.c:1745
msgid "print patches to standard out"
msgstr "Ausgabe der Patches in Standard-Ausgabe"
-#: builtin/log.c:1748
+#: builtin/log.c:1747
msgid "generate a cover letter"
msgstr "ein Deckblatt erzeugen"
-#: builtin/log.c:1750
+#: builtin/log.c:1749
msgid "use simple number sequence for output file names"
msgstr "einfache Nummernfolge für die Namen der Ausgabedateien verwenden"
-#: builtin/log.c:1751
+#: builtin/log.c:1750
msgid "sfx"
msgstr "Dateiendung"
-#: builtin/log.c:1752
+#: builtin/log.c:1751
msgid "use <sfx> instead of '.patch'"
-msgstr "<Dateiendung> anstatt '.patch' verwenden"
+msgstr "<Dateiendung> statt '.patch' verwenden"
-#: builtin/log.c:1754
+#: builtin/log.c:1753
msgid "start numbering patches at <n> instead of 1"
-msgstr "die Nummerierung der Patches bei <n> anstatt bei 1 beginnen"
+msgstr "die Nummerierung der Patches bei <n> statt bei 1 beginnen"
-#: builtin/log.c:1756
+#: builtin/log.c:1755
msgid "mark the series as Nth re-roll"
msgstr "die Serie als n-te Fassung kennzeichnen"
-#: builtin/log.c:1758
+#: builtin/log.c:1757
msgid "max length of output filename"
msgstr "maximale Länge des Dateinamens für die Ausgabe"
-#: builtin/log.c:1760
-msgid "Use [RFC PATCH] instead of [PATCH]"
-msgstr "[RFC PATCH] anstatt [PATCH] verwenden"
+#: builtin/log.c:1759
+msgid "use [RFC PATCH] instead of [PATCH]"
+msgstr "[RFC PATCH] statt [PATCH] verwenden"
-#: builtin/log.c:1763
+#: builtin/log.c:1762
msgid "cover-from-description-mode"
msgstr "Modus für Erstellung des Deckblattes aus der Beschreibung"
-#: builtin/log.c:1764
+#: builtin/log.c:1763
msgid "generate parts of a cover letter based on a branch's description"
msgstr ""
"Erzeuge Teile des Deckblattes basierend auf der Beschreibung des Branches"
-#: builtin/log.c:1766
-msgid "Use [<prefix>] instead of [PATCH]"
-msgstr "Nutze [<Präfix>] statt [PATCH]"
+#: builtin/log.c:1765
+msgid "use [<prefix>] instead of [PATCH]"
+msgstr "nutze [<Präfix>] statt [PATCH]"
-#: builtin/log.c:1769
+#: builtin/log.c:1768
msgid "store resulting files in <dir>"
msgstr "erzeugte Dateien in <Verzeichnis> speichern"
-#: builtin/log.c:1772
+#: builtin/log.c:1771
msgid "don't strip/add [PATCH]"
msgstr "[PATCH] nicht entfernen/hinzufügen"
-#: builtin/log.c:1775
+#: builtin/log.c:1774
msgid "don't output binary diffs"
msgstr "keine binären Unterschiede ausgeben"
-#: builtin/log.c:1777
+#: builtin/log.c:1776
msgid "output all-zero hash in From header"
msgstr "Hash mit Nullen in \"From\"-Header ausgeben"
-#: builtin/log.c:1779
+#: builtin/log.c:1778
msgid "don't include a patch matching a commit upstream"
msgstr ""
"keine Patches einschließen, die einem Commit im Upstream-Branch entsprechen"
-#: builtin/log.c:1781
+#: builtin/log.c:1780
msgid "show patch format instead of default (patch + stat)"
msgstr "Patchformat anstatt des Standards anzeigen (Patch + Zusammenfassung)"
-#: builtin/log.c:1783
+#: builtin/log.c:1782
msgid "Messaging"
msgstr "E-Mail-Einstellungen"
-#: builtin/log.c:1784
+#: builtin/log.c:1783
msgid "header"
msgstr "Header"
-#: builtin/log.c:1785
+#: builtin/log.c:1784
msgid "add email header"
msgstr "E-Mail-Header hinzufügen"
-#: builtin/log.c:1786 builtin/log.c:1787
+#: builtin/log.c:1785 builtin/log.c:1786
msgid "email"
msgstr "E-Mail"
-#: builtin/log.c:1786
+#: builtin/log.c:1785
msgid "add To: header"
msgstr "\"To:\"-Header hinzufügen"
-#: builtin/log.c:1787
+#: builtin/log.c:1786
msgid "add Cc: header"
msgstr "\"Cc:\"-Header hinzufügen"
-#: builtin/log.c:1788
+#: builtin/log.c:1787
msgid "ident"
msgstr "Ident"
-#: builtin/log.c:1789
+#: builtin/log.c:1788
msgid "set From address to <ident> (or committer ident if absent)"
msgstr ""
"\"From\"-Adresse auf <Ident> setzen (oder Ident des Commit-Erstellers, wenn "
"fehlend)"
-#: builtin/log.c:1791
+#: builtin/log.c:1790
msgid "message-id"
msgstr "message-id"
-#: builtin/log.c:1792
+#: builtin/log.c:1791
msgid "make first mail a reply to <message-id>"
msgstr "aus erster E-Mail eine Antwort zu <message-id> machen"
-#: builtin/log.c:1793 builtin/log.c:1796
+#: builtin/log.c:1792 builtin/log.c:1795
msgid "boundary"
msgstr "Grenze"
-#: builtin/log.c:1794
+#: builtin/log.c:1793
msgid "attach the patch"
msgstr "den Patch anhängen"
-#: builtin/log.c:1797
+#: builtin/log.c:1796
msgid "inline the patch"
msgstr "den Patch direkt in die Nachricht einfügen"
-#: builtin/log.c:1801
+#: builtin/log.c:1800
msgid "enable message threading, styles: shallow, deep"
msgstr "Nachrichtenverkettung aktivieren, Stile: shallow, deep"
-#: builtin/log.c:1803
+#: builtin/log.c:1802
msgid "signature"
msgstr "Signatur"
-#: builtin/log.c:1804
+#: builtin/log.c:1803
msgid "add a signature"
msgstr "eine Signatur hinzufügen"
-#: builtin/log.c:1805
+#: builtin/log.c:1804
msgid "base-commit"
msgstr "Basis-Commit"
-#: builtin/log.c:1806
+#: builtin/log.c:1805
msgid "add prerequisite tree info to the patch series"
msgstr "erforderliche Revisions-Informationen der Patch-Serie hinzufügen"
-#: builtin/log.c:1809
+#: builtin/log.c:1808
msgid "add a signature from a file"
msgstr "eine Signatur aus einer Datei hinzufügen"
-#: builtin/log.c:1810
+#: builtin/log.c:1809
msgid "don't print the patch filenames"
msgstr "keine Dateinamen der Patches anzeigen"
-#: builtin/log.c:1812
+#: builtin/log.c:1811
msgid "show progress while generating patches"
msgstr "Forschrittsanzeige während der Erzeugung der Patches"
-#: builtin/log.c:1814
+#: builtin/log.c:1813
msgid "show changes against <rev> in cover letter or single patch"
msgstr ""
"Änderungen gegenüber <Commit> im Deckblatt oder einzelnem Patch anzeigen"
-#: builtin/log.c:1817
+#: builtin/log.c:1816
msgid "show changes against <refspec> in cover letter or single patch"
msgstr ""
"Änderungen gegenüber <Refspec> im Deckblatt oder einzelnem Patch anzeigen"
-#: builtin/log.c:1819
+#: builtin/log.c:1818
msgid "percentage by which creation is weighted"
msgstr "Prozentsatz mit welchem Erzeugung gewichtet wird"
-#: builtin/log.c:1905
+#: builtin/log.c:1904
#, c-format
msgid "invalid ident line: %s"
msgstr "Ungültige Identifikationszeile: %s"
-#: builtin/log.c:1920
+#: builtin/log.c:1919
msgid "-n and -k are mutually exclusive"
msgstr "-n und -k schließen sich gegenseitig aus"
-#: builtin/log.c:1922
+#: builtin/log.c:1921
msgid "--subject-prefix/--rfc and -k are mutually exclusive"
msgstr "--subject-prefix/--rfc und -k schließen sich gegenseitig aus"
-#: builtin/log.c:1930
+#: builtin/log.c:1929
msgid "--name-only does not make sense"
-msgstr "die Option --name-only kann nicht verwendet werden"
+msgstr "--name-only kann nicht verwendet werden"
-#: builtin/log.c:1932
+#: builtin/log.c:1931
msgid "--name-status does not make sense"
-msgstr "die Option --name-status kann nicht verwendet werden"
+msgstr "--name-status kann nicht verwendet werden"
-#: builtin/log.c:1934
+#: builtin/log.c:1933
msgid "--check does not make sense"
-msgstr "die Option --check kann nicht verwendet werden"
+msgstr "--check kann nicht verwendet werden"
-#: builtin/log.c:1956
+#: builtin/log.c:1955
msgid "--stdout, --output, and --output-directory are mutually exclusive"
msgstr ""
"--stdout, --output und --output-directory schließen sich gegenseitig aus"
-#: builtin/log.c:2079
+#: builtin/log.c:2078
msgid "--interdiff requires --cover-letter or single patch"
msgstr "--interdiff erfordert --cover-letter oder einzelnen Patch"
-#: builtin/log.c:2083
+#: builtin/log.c:2082
msgid "Interdiff:"
msgstr "Interdiff:"
-#: builtin/log.c:2084
+#: builtin/log.c:2083
#, c-format
msgid "Interdiff against v%d:"
msgstr "Interdiff gegen v%d:"
-#: builtin/log.c:2090
+#: builtin/log.c:2089
msgid "--creation-factor requires --range-diff"
msgstr "--creation-factor erfordert --range-diff"
-#: builtin/log.c:2094
+#: builtin/log.c:2093
msgid "--range-diff requires --cover-letter or single patch"
msgstr "--range-diff erfordert --cover-letter oder einzelnen Patch."
-#: builtin/log.c:2102
+#: builtin/log.c:2101
msgid "Range-diff:"
msgstr "Range-Diff:"
-#: builtin/log.c:2103
+#: builtin/log.c:2102
#, c-format
msgid "Range-diff against v%d:"
msgstr "Range-Diff gegen v%d:"
-#: builtin/log.c:2114
+#: builtin/log.c:2113
#, c-format
msgid "unable to read signature file '%s'"
msgstr "Konnte Signatur-Datei '%s' nicht lesen"
-#: builtin/log.c:2150
+#: builtin/log.c:2149
msgid "Generating patches"
msgstr "Erzeuge Patches"
-#: builtin/log.c:2194
+#: builtin/log.c:2193
msgid "failed to create output files"
msgstr "Fehler beim Erstellen der Ausgabedateien."
-#: builtin/log.c:2253
+#: builtin/log.c:2252
msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
msgstr "git cherry [-v] [<Upstream> [<Branch> [<Limit>]]]"
-#: builtin/log.c:2307
+#: builtin/log.c:2306
#, c-format
msgid ""
"Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -16984,115 +17296,119 @@
"Konnte gefolgten Remote-Branch nicht finden, bitte geben Sie <Upstream> "
"manuell an.\n"
-#: builtin/ls-files.c:471
+#: builtin/ls-files.c:486
msgid "git ls-files [<options>] [<file>...]"
msgstr "git ls-files [<Optionen>] [<Datei>...]"
-#: builtin/ls-files.c:527
+#: builtin/ls-files.c:542
msgid "identify the file status with tags"
msgstr "den Dateistatus mit Tags anzeigen"
-#: builtin/ls-files.c:529
+#: builtin/ls-files.c:544
msgid "use lowercase letters for 'assume unchanged' files"
msgstr ""
"Kleinbuchstaben für Dateien mit 'assume unchanged' Markierung verwenden"
-#: builtin/ls-files.c:531
+#: builtin/ls-files.c:546
msgid "use lowercase letters for 'fsmonitor clean' files"
msgstr "Kleinbuchstaben für 'fsmonitor clean' Dateien verwenden"
-#: builtin/ls-files.c:533
+#: builtin/ls-files.c:548
msgid "show cached files in the output (default)"
msgstr "zwischengespeicherte Dateien in der Ausgabe anzeigen (Standard)"
-#: builtin/ls-files.c:535
+#: builtin/ls-files.c:550
msgid "show deleted files in the output"
msgstr "entfernte Dateien in der Ausgabe anzeigen"
-#: builtin/ls-files.c:537
+#: builtin/ls-files.c:552
msgid "show modified files in the output"
msgstr "geänderte Dateien in der Ausgabe anzeigen"
-#: builtin/ls-files.c:539
+#: builtin/ls-files.c:554
msgid "show other files in the output"
msgstr "sonstige Dateien in der Ausgabe anzeigen"
-#: builtin/ls-files.c:541
+#: builtin/ls-files.c:556
msgid "show ignored files in the output"
msgstr "ignorierte Dateien in der Ausgabe anzeigen"
-#: builtin/ls-files.c:544
+#: builtin/ls-files.c:559
msgid "show staged contents' object name in the output"
msgstr ""
"Objektnamen von Inhalten, die zum Commit vorgemerkt sind, in der Ausgabe "
"anzeigen"
-#: builtin/ls-files.c:546
+#: builtin/ls-files.c:561
msgid "show files on the filesystem that need to be removed"
msgstr "Dateien im Dateisystem, die gelöscht werden müssen, anzeigen"
-#: builtin/ls-files.c:548
+#: builtin/ls-files.c:563
msgid "show 'other' directories' names only"
msgstr "nur Namen von 'sonstigen' Verzeichnissen anzeigen"
-#: builtin/ls-files.c:550
+#: builtin/ls-files.c:565
msgid "show line endings of files"
msgstr "Zeilenenden von Dateien anzeigen"
-#: builtin/ls-files.c:552
+#: builtin/ls-files.c:567
msgid "don't show empty directories"
msgstr "keine leeren Verzeichnisse anzeigen"
-#: builtin/ls-files.c:555
+#: builtin/ls-files.c:570
msgid "show unmerged files in the output"
msgstr "nicht zusammengeführte Dateien in der Ausgabe anzeigen"
-#: builtin/ls-files.c:557
+#: builtin/ls-files.c:572
msgid "show resolve-undo information"
msgstr "'resolve-undo' Informationen anzeigen"
-#: builtin/ls-files.c:559
+#: builtin/ls-files.c:574
msgid "skip files matching pattern"
msgstr "Dateien auslassen, die einem Muster entsprechen"
-#: builtin/ls-files.c:562
+#: builtin/ls-files.c:577
msgid "exclude patterns are read from <file>"
msgstr "Muster, gelesen von <Datei>, ausschließen"
-#: builtin/ls-files.c:565
+#: builtin/ls-files.c:580
msgid "read additional per-directory exclude patterns in <file>"
msgstr "zusätzliche pro-Verzeichnis Auschlussmuster aus <Datei> auslesen"
-#: builtin/ls-files.c:567
+#: builtin/ls-files.c:582
msgid "add the standard git exclusions"
msgstr "die standardmäßigen Git-Ausschlüsse hinzufügen"
-#: builtin/ls-files.c:571
+#: builtin/ls-files.c:586
msgid "make the output relative to the project top directory"
msgstr "Ausgabe relativ zum Projektverzeichnis"
-#: builtin/ls-files.c:574
+#: builtin/ls-files.c:589
msgid "recurse through submodules"
msgstr "Rekursion in Submodulen durchführen"
-#: builtin/ls-files.c:576
+#: builtin/ls-files.c:591
msgid "if any <file> is not in the index, treat this as an error"
msgstr "als Fehler behandeln, wenn sich eine <Datei> nicht im Index befindet"
-#: builtin/ls-files.c:577
+#: builtin/ls-files.c:592
msgid "tree-ish"
msgstr "Commit-Referenz"
-#: builtin/ls-files.c:578
+#: builtin/ls-files.c:593
msgid "pretend that paths removed since <tree-ish> are still present"
msgstr ""
"vorgeben, dass Pfade, die seit <Commit-Referenz> gelöscht wurden, immer noch "
"vorhanden sind"
-#: builtin/ls-files.c:580
+#: builtin/ls-files.c:595
msgid "show debugging data"
msgstr "Ausgaben zur Fehlersuche anzeigen"
+#: builtin/ls-files.c:597
+msgid "suppress duplicate entries"
+msgstr "doppelte Einträge unterdrücken"
+
#: builtin/ls-remote.c:9
msgid ""
"git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
@@ -17103,41 +17419,41 @@
" [-q | --quiet] [--exit-code] [--get-url]\n"
" [--symref] [<Repository> [<Referenzen>...]]"
-#: builtin/ls-remote.c:59
+#: builtin/ls-remote.c:60
msgid "do not print remote URL"
msgstr "URL des Remote-Repositories nicht ausgeben"
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1398
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1404
msgid "exec"
msgstr "Programm"
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63
+#: builtin/ls-remote.c:62 builtin/ls-remote.c:64
msgid "path of git-upload-pack on the remote host"
msgstr "Pfad zu \"git-upload-pack\" auf der Gegenseite"
-#: builtin/ls-remote.c:65
+#: builtin/ls-remote.c:66
msgid "limit to tags"
msgstr "auf Tags einschränken"
-#: builtin/ls-remote.c:66
+#: builtin/ls-remote.c:67
msgid "limit to heads"
msgstr "auf Branches einschränken"
-#: builtin/ls-remote.c:67
+#: builtin/ls-remote.c:68
msgid "do not show peeled tags"
msgstr "keine Tags anzeigen, die andere Tags enthalten"
-#: builtin/ls-remote.c:69
+#: builtin/ls-remote.c:70
msgid "take url.<base>.insteadOf into account"
msgstr "url.<Basis>.insteadOf berücksichtigen"
-#: builtin/ls-remote.c:72
+#: builtin/ls-remote.c:73
msgid "exit with exit code 2 if no matching refs are found"
msgstr ""
"mit Exit-Code 2 beenden, wenn keine übereinstimmenden Referenzen\n"
"gefunden wurden"
-#: builtin/ls-remote.c:75
+#: builtin/ls-remote.c:76
msgid "show underlying ref in addition to the object pointed by it"
msgstr "zusätzlich zum Objekt die darauf verweisenden Referenzen anzeigen"
@@ -17295,194 +17611,194 @@
msgid "Merging %s with %s\n"
msgstr "Führe %s mit %s zusammen\n"
-#: builtin/merge.c:57
+#: builtin/merge.c:58
msgid "git merge [<options>] [<commit>...]"
msgstr "git merge [<Optionen>] [<Commit>...]"
-#: builtin/merge.c:58
+#: builtin/merge.c:59
msgid "git merge --abort"
msgstr "git merge --abort"
-#: builtin/merge.c:59
+#: builtin/merge.c:60
msgid "git merge --continue"
msgstr "git merge --continue"
-#: builtin/merge.c:122
+#: builtin/merge.c:123
msgid "switch `m' requires a value"
msgstr "Schalter 'm' erfordert einen Wert."
-#: builtin/merge.c:145
+#: builtin/merge.c:146
#, c-format
msgid "option `%s' requires a value"
msgstr "Option `%s' erfordert einen Wert."
-#: builtin/merge.c:198
+#: builtin/merge.c:199
#, c-format
msgid "Could not find merge strategy '%s'.\n"
msgstr "Konnte Merge-Strategie '%s' nicht finden.\n"
-#: builtin/merge.c:199
+#: builtin/merge.c:200
#, c-format
msgid "Available strategies are:"
msgstr "Verfügbare Strategien sind:"
-#: builtin/merge.c:204
+#: builtin/merge.c:205
#, c-format
msgid "Available custom strategies are:"
msgstr "Verfügbare benutzerdefinierte Strategien sind:"
-#: builtin/merge.c:255 builtin/pull.c:133
+#: builtin/merge.c:256 builtin/pull.c:133
msgid "do not show a diffstat at the end of the merge"
msgstr "keine Zusammenfassung der Unterschiede am Schluss des Merges anzeigen"
-#: builtin/merge.c:258 builtin/pull.c:136
+#: builtin/merge.c:259 builtin/pull.c:136
msgid "show a diffstat at the end of the merge"
msgstr "eine Zusammenfassung der Unterschiede am Schluss des Merges anzeigen"
-#: builtin/merge.c:259 builtin/pull.c:139
+#: builtin/merge.c:260 builtin/pull.c:139
msgid "(synonym to --stat)"
msgstr "(Synonym für --stat)"
-#: builtin/merge.c:261 builtin/pull.c:142
+#: builtin/merge.c:262 builtin/pull.c:142
msgid "add (at most <n>) entries from shortlog to merge commit message"
msgstr ""
"(höchstens <n>) Einträge von \"shortlog\" zur Beschreibung des Merge-Commits "
"hinzufügen"
-#: builtin/merge.c:264 builtin/pull.c:148
+#: builtin/merge.c:265 builtin/pull.c:148
msgid "create a single commit instead of doing a merge"
-msgstr "einen einzelnen Commit anstatt eines Merges erzeugen"
+msgstr "einen einzelnen Commit erzeugen statt einen Merge durchzuführen"
-#: builtin/merge.c:266 builtin/pull.c:151
+#: builtin/merge.c:267 builtin/pull.c:151
msgid "perform a commit if the merge succeeds (default)"
msgstr "einen Commit durchführen, wenn der Merge erfolgreich war (Standard)"
-#: builtin/merge.c:268 builtin/pull.c:154
+#: builtin/merge.c:269 builtin/pull.c:154
msgid "edit message before committing"
msgstr "Bearbeitung der Beschreibung vor dem Commit"
-#: builtin/merge.c:270
+#: builtin/merge.c:271
msgid "allow fast-forward (default)"
msgstr "Vorspulen erlauben (Standard)"
-#: builtin/merge.c:272 builtin/pull.c:161
+#: builtin/merge.c:273 builtin/pull.c:161
msgid "abort if fast-forward is not possible"
msgstr "abbrechen, wenn kein Vorspulen möglich ist"
-#: builtin/merge.c:276 builtin/pull.c:164
+#: builtin/merge.c:277 builtin/pull.c:164
msgid "verify that the named commit has a valid GPG signature"
msgstr "den genannten Commit auf eine gültige GPG-Signatur überprüfen"
-#: builtin/merge.c:277 builtin/notes.c:787 builtin/pull.c:168
-#: builtin/rebase.c:539 builtin/rebase.c:1412 builtin/revert.c:114
+#: builtin/merge.c:278 builtin/notes.c:787 builtin/pull.c:168
+#: builtin/rebase.c:541 builtin/rebase.c:1418 builtin/revert.c:114
msgid "strategy"
msgstr "Strategie"
-#: builtin/merge.c:278 builtin/pull.c:169
+#: builtin/merge.c:279 builtin/pull.c:169
msgid "merge strategy to use"
msgstr "zu verwendende Merge-Strategie"
-#: builtin/merge.c:279 builtin/pull.c:172
+#: builtin/merge.c:280 builtin/pull.c:172
msgid "option=value"
msgstr "Option=Wert"
-#: builtin/merge.c:280 builtin/pull.c:173
+#: builtin/merge.c:281 builtin/pull.c:173
msgid "option for selected merge strategy"
msgstr "Option für ausgewählte Merge-Strategie"
-#: builtin/merge.c:282
+#: builtin/merge.c:283
msgid "merge commit message (for a non-fast-forward merge)"
msgstr ""
"Commit-Beschreibung zusammenführen (für einen Merge, der kein Vorspulen war)"
-#: builtin/merge.c:289
+#: builtin/merge.c:290
msgid "abort the current in-progress merge"
msgstr "den sich im Gange befindlichen Merge abbrechen"
-#: builtin/merge.c:291
+#: builtin/merge.c:292
msgid "--abort but leave index and working tree alone"
msgstr "--abort, aber Index und Arbeitsverzeichnis unverändert lassen"
-#: builtin/merge.c:293
+#: builtin/merge.c:294
msgid "continue the current in-progress merge"
msgstr "den sich im Gange befindlichen Merge fortsetzen"
-#: builtin/merge.c:295 builtin/pull.c:180
+#: builtin/merge.c:296 builtin/pull.c:180
msgid "allow merging unrelated histories"
msgstr "erlaube das Zusammenführen von nicht zusammenhängenden Historien"
-#: builtin/merge.c:302
+#: builtin/merge.c:303
msgid "bypass pre-merge-commit and commit-msg hooks"
msgstr "Hooks pre-merge-commit und commit-msg umgehen"
-#: builtin/merge.c:319
+#: builtin/merge.c:320
msgid "could not run stash."
msgstr "Konnte \"stash\" nicht ausführen."
-#: builtin/merge.c:324
+#: builtin/merge.c:325
msgid "stash failed"
msgstr "\"stash\" fehlgeschlagen"
-#: builtin/merge.c:329
+#: builtin/merge.c:330
#, c-format
msgid "not a valid object: %s"
msgstr "kein gültiges Objekt: %s"
-#: builtin/merge.c:351 builtin/merge.c:368
+#: builtin/merge.c:352 builtin/merge.c:369
msgid "read-tree failed"
msgstr "read-tree fehlgeschlagen"
-#: builtin/merge.c:398
+#: builtin/merge.c:399
msgid " (nothing to squash)"
msgstr " (nichts zu quetschen)"
-#: builtin/merge.c:409
+#: builtin/merge.c:410
#, c-format
msgid "Squash commit -- not updating HEAD\n"
msgstr "Quetsche Commit -- HEAD wird nicht aktualisiert\n"
-#: builtin/merge.c:459
+#: builtin/merge.c:460
#, c-format
msgid "No merge message -- not updating HEAD\n"
msgstr "Keine Merge-Commit-Beschreibung -- HEAD wird nicht aktualisiert\n"
-#: builtin/merge.c:510
+#: builtin/merge.c:511
#, c-format
msgid "'%s' does not point to a commit"
msgstr "'%s' zeigt auf keinen Commit"
-#: builtin/merge.c:597
+#: builtin/merge.c:598
#, c-format
msgid "Bad branch.%s.mergeoptions string: %s"
msgstr "Ungültiger branch.%s.mergeoptions String: %s"
-#: builtin/merge.c:723
+#: builtin/merge.c:724
msgid "Not handling anything other than two heads merge."
msgstr "Es wird nur der Merge von zwei Branches behandelt."
-#: builtin/merge.c:736
+#: builtin/merge.c:737
#, c-format
msgid "Unknown option for merge-recursive: -X%s"
msgstr "Unbekannte Option für merge-recursive: -X%s"
-#: builtin/merge.c:755 t/helper/test-fast-rebase.c:209
+#: builtin/merge.c:756 t/helper/test-fast-rebase.c:209
#, c-format
msgid "unable to write %s"
msgstr "konnte %s nicht schreiben"
-#: builtin/merge.c:807
+#: builtin/merge.c:808
#, c-format
msgid "Could not read from '%s'"
msgstr "konnte nicht von '%s' lesen"
-#: builtin/merge.c:816
+#: builtin/merge.c:817
#, c-format
msgid "Not committing merge; use 'git commit' to complete the merge.\n"
msgstr ""
"Merge wurde nicht committet; benutzen Sie 'git commit', um den Merge "
"abzuschließen.\n"
-#: builtin/merge.c:822
+#: builtin/merge.c:823
msgid ""
"Please enter a commit message to explain why this merge is necessary,\n"
"especially if it merges an updated upstream into a topic branch.\n"
@@ -17493,11 +17809,11 @@
"Upstream-Branch mit einem Thema-Branch zusammenführt.\n"
"\n"
-#: builtin/merge.c:827
+#: builtin/merge.c:828
msgid "An empty message aborts the commit.\n"
msgstr "Eine leere Commit-Beschreibung bricht den Commit ab.\n"
-#: builtin/merge.c:830
+#: builtin/merge.c:831
#, c-format
msgid ""
"Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -17506,75 +17822,75 @@
"Zeilen, die mit '%c' beginnen, werden ignoriert,\n"
"und eine leere Beschreibung bricht den Commit ab.\n"
-#: builtin/merge.c:883
+#: builtin/merge.c:884
msgid "Empty commit message."
msgstr "Leere Commit-Beschreibung"
-#: builtin/merge.c:898
+#: builtin/merge.c:899
#, c-format
msgid "Wonderful.\n"
msgstr "Wunderbar.\n"
-#: builtin/merge.c:959
+#: builtin/merge.c:960
#, c-format
msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
msgstr ""
"Automatischer Merge fehlgeschlagen; beheben Sie die Konflikte und committen "
"Sie dann das Ergebnis.\n"
-#: builtin/merge.c:998
+#: builtin/merge.c:999
msgid "No current branch."
msgstr "Sie befinden sich auf keinem Branch."
-#: builtin/merge.c:1000
+#: builtin/merge.c:1001
msgid "No remote for the current branch."
msgstr "Kein Remote-Repository für den aktuellen Branch."
-#: builtin/merge.c:1002
+#: builtin/merge.c:1003
msgid "No default upstream defined for the current branch."
msgstr ""
"Es ist kein Standard-Upstream-Branch für den aktuellen Branch definiert."
-#: builtin/merge.c:1007
+#: builtin/merge.c:1008
#, c-format
msgid "No remote-tracking branch for %s from %s"
msgstr "Kein Remote-Tracking-Branch für %s von %s"
-#: builtin/merge.c:1064
+#: builtin/merge.c:1065
#, c-format
msgid "Bad value '%s' in environment '%s'"
msgstr "Fehlerhafter Wert '%s' in Umgebungsvariable '%s'"
-#: builtin/merge.c:1167
+#: builtin/merge.c:1168
#, c-format
msgid "not something we can merge in %s: %s"
msgstr "nichts was wir in %s zusammenführen können: %s"
-#: builtin/merge.c:1201
+#: builtin/merge.c:1202
msgid "not something we can merge"
msgstr "nichts was wir zusammenführen können"
-#: builtin/merge.c:1311
+#: builtin/merge.c:1312
msgid "--abort expects no arguments"
msgstr "--abort akzeptiert keine Argumente"
-#: builtin/merge.c:1315
+#: builtin/merge.c:1316
msgid "There is no merge to abort (MERGE_HEAD missing)."
msgstr "Es gibt keinen Merge abzubrechen (MERGE_HEAD fehlt)"
-#: builtin/merge.c:1333
+#: builtin/merge.c:1334
msgid "--quit expects no arguments"
msgstr "--quit erwartet keine Argumente"
-#: builtin/merge.c:1346
+#: builtin/merge.c:1347
msgid "--continue expects no arguments"
msgstr "--continue erwartet keine Argumente"
-#: builtin/merge.c:1350
+#: builtin/merge.c:1351
msgid "There is no merge in progress (MERGE_HEAD missing)."
msgstr "Es ist kein Merge im Gange (MERGE_HEAD fehlt)."
-#: builtin/merge.c:1366
+#: builtin/merge.c:1367
msgid ""
"You have not concluded your merge (MERGE_HEAD exists).\n"
"Please, commit your changes before you merge."
@@ -17582,7 +17898,7 @@
"Sie haben Ihren Merge nicht abgeschlossen (MERGE_HEAD existiert).\n"
"Bitte committen Sie Ihre Änderungen, bevor Sie den Merge ausführen."
-#: builtin/merge.c:1373
+#: builtin/merge.c:1374
msgid ""
"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
"Please, commit your changes before you merge."
@@ -17590,105 +17906,147 @@
"Sie haben \"cherry-pick\" nicht abgeschlossen (CHERRY_PICK_HEAD existiert).\n"
"Bitte committen Sie Ihre Änderungen, bevor Sie den Merge ausführen."
-#: builtin/merge.c:1376
+#: builtin/merge.c:1377
msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
msgstr ""
"Sie haben \"cherry-pick\" nicht abgeschlossen (CHERRY_PICK_HEAD existiert)."
-#: builtin/merge.c:1390
+#: builtin/merge.c:1391
msgid "You cannot combine --squash with --no-ff."
msgstr "Sie können --squash nicht mit --no-ff kombinieren."
-#: builtin/merge.c:1392
+#: builtin/merge.c:1393
msgid "You cannot combine --squash with --commit."
msgstr "Sie können --squash nicht mit --commit kombinieren."
-#: builtin/merge.c:1408
+#: builtin/merge.c:1409
msgid "No commit specified and merge.defaultToUpstream not set."
msgstr "Kein Commit angegeben und merge.defaultToUpstream ist nicht gesetzt."
-#: builtin/merge.c:1425
+#: builtin/merge.c:1426
msgid "Squash commit into empty head not supported yet"
msgstr ""
"Bin auf einem Commit, der noch geboren wird; kann \"squash\" nicht ausführen."
-#: builtin/merge.c:1427
+#: builtin/merge.c:1428
msgid "Non-fast-forward commit does not make sense into an empty head"
msgstr ""
"Nicht vorzuspulender Commit kann nicht in einem leeren Branch verwendet "
"werden."
-#: builtin/merge.c:1432
+#: builtin/merge.c:1433
#, c-format
msgid "%s - not something we can merge"
msgstr "%s - nichts was wir zusammenführen können"
-#: builtin/merge.c:1434
+#: builtin/merge.c:1435
msgid "Can merge only exactly one commit into empty head"
msgstr "Kann nur exakt einen Commit in einem leeren Branch zusammenführen."
-#: builtin/merge.c:1515
+#: builtin/merge.c:1516
msgid "refusing to merge unrelated histories"
msgstr "Verweigere den Merge von nicht zusammenhängenden Historien."
-#: builtin/merge.c:1524
+#: builtin/merge.c:1525
msgid "Already up to date."
msgstr "Bereits aktuell."
-#: builtin/merge.c:1534
+#: builtin/merge.c:1535
#, c-format
msgid "Updating %s..%s\n"
msgstr "Aktualisiere %s..%s\n"
-#: builtin/merge.c:1580
+#: builtin/merge.c:1581
#, c-format
msgid "Trying really trivial in-index merge...\n"
msgstr "Probiere wirklich trivialen \"in-index\"-Merge ...\n"
-#: builtin/merge.c:1587
+#: builtin/merge.c:1588
#, c-format
msgid "Nope.\n"
msgstr "Nein.\n"
-#: builtin/merge.c:1612
+#: builtin/merge.c:1613
msgid "Already up to date. Yeeah!"
msgstr "Bereits aktuell."
-#: builtin/merge.c:1618
+#: builtin/merge.c:1619
msgid "Not possible to fast-forward, aborting."
msgstr "Vorspulen nicht möglich, breche ab."
-#: builtin/merge.c:1646 builtin/merge.c:1711
+#: builtin/merge.c:1647 builtin/merge.c:1712
#, c-format
msgid "Rewinding the tree to pristine...\n"
msgstr "Rücklauf des Verzeichnisses bis zum Ursprung ...\n"
-#: builtin/merge.c:1650
+#: builtin/merge.c:1651
#, c-format
msgid "Trying merge strategy %s...\n"
msgstr "Probiere Merge-Strategie %s ...\n"
-#: builtin/merge.c:1702
+#: builtin/merge.c:1703
#, c-format
msgid "No merge strategy handled the merge.\n"
msgstr "Keine Merge-Strategie behandelt diesen Merge.\n"
-#: builtin/merge.c:1704
+#: builtin/merge.c:1705
#, c-format
msgid "Merge with strategy %s failed.\n"
msgstr "Merge mit Strategie %s fehlgeschlagen.\n"
-#: builtin/merge.c:1713
+#: builtin/merge.c:1714
#, c-format
msgid "Using the %s to prepare resolving by hand.\n"
msgstr "Benutzen Sie \"%s\", um die Auflösung per Hand vorzubereiten.\n"
-#: builtin/merge.c:1727
+#: builtin/merge.c:1728
#, c-format
msgid "Automatic merge went well; stopped before committing as requested\n"
msgstr ""
"Automatischer Merge abgeschlossen; halte, wie gewünscht, vor dem Commit an\n"
+#: builtin/mktag.c:10
+msgid "git mktag"
+msgstr "git mktag"
+
+#: builtin/mktag.c:30
+#, c-format
+msgid "warning: tag input does not pass fsck: %s"
+msgstr "Warnung: Tag-Eingabe ungültig für fsck: %s"
+
+#: builtin/mktag.c:41
+#, c-format
+msgid "error: tag input does not pass fsck: %s"
+msgstr "Fehler: Tag-Eingabe ungültig für fsck: %s"
+
+#: builtin/mktag.c:44
+#, c-format
+msgid "%d (FSCK_IGNORE?) should never trigger this callback"
+msgstr "%d (FSCK_IGNORE?) sollte diesen Aufruf niemals auslösen"
+
+#: builtin/mktag.c:59
+#, c-format
+msgid "could not read tagged object '%s'"
+msgstr "konnte getaggtes Objekt '%s' nicht lesen"
+
+#: builtin/mktag.c:62
+#, c-format
+msgid "object '%s' tagged as '%s', but is a '%s' type"
+msgstr "Objekt '%s' als '%s' getaggt, aber ist ein '%s' Typ"
+
+#: builtin/mktag.c:99
+msgid "tag on stdin did not pass our strict fsck check"
+msgstr ""
+"Tag von der Standardeingabe für unsere strenge Überprüfung bei fsck ungültig"
+
+#: builtin/mktag.c:102
+msgid "tag on stdin did not refer to a valid object"
+msgstr "Tag von der Standard-Eingabe verweiste nicht auf gültiges Objekt"
+
+#: builtin/mktag.c:105 builtin/tag.c:232
+msgid "unable to write tag file"
+msgstr "konnte Tag-Datei nicht schreiben"
+
#: builtin/mktree.c:66
msgid "git mktree [-z] [--missing] [--batch]"
msgstr "git mktree [-z] [--missing] [--batch]"
@@ -17726,7 +18084,10 @@
"Während des Umpackens, sammle Paket-Dateien von geringerer Größe in "
"einenStapel, welcher größer ist als diese Größe"
-#: builtin/multi-pack-index.c:50 builtin/prune-packed.c:25
+#: builtin/multi-pack-index.c:50 builtin/notes.c:376 builtin/notes.c:431
+#: builtin/notes.c:509 builtin/notes.c:521 builtin/notes.c:598
+#: builtin/notes.c:665 builtin/notes.c:815 builtin/notes.c:963
+#: builtin/notes.c:985 builtin/prune-packed.c:25 builtin/tag.c:575
msgid "too many arguments"
msgstr "Zu viele Argumente."
@@ -17833,7 +18194,7 @@
msgid "Renaming %s to %s\n"
msgstr "Benenne %s nach %s um\n"
-#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:484
+#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:483
#, c-format
msgid "renaming '%s' failed"
msgstr "Umbenennung von '%s' fehlgeschlagen"
@@ -18026,7 +18387,7 @@
msgid "the note contents have been left in %s"
msgstr "Die Notiz-Inhalte wurden in %s belassen."
-#: builtin/notes.c:242 builtin/tag.c:533
+#: builtin/notes.c:242 builtin/tag.c:565
#, c-format
msgid "could not open or read '%s'"
msgstr "konnte '%s' nicht öffnen oder lesen"
@@ -18068,12 +18429,6 @@
"Ausführung von %s auf Notizen in %s (außerhalb von refs/notes/) "
"zurückgewiesen"
-#: builtin/notes.c:376 builtin/notes.c:431 builtin/notes.c:509
-#: builtin/notes.c:521 builtin/notes.c:598 builtin/notes.c:665
-#: builtin/notes.c:815 builtin/notes.c:963 builtin/notes.c:985
-msgid "too many parameters"
-msgstr "zu viele Parameter"
-
#: builtin/notes.c:389 builtin/notes.c:678
#, c-format
msgid "no note found for object %s."
@@ -18133,8 +18488,8 @@
"stdin)"
#: builtin/notes.c:517
-msgid "too few parameters"
-msgstr "zu wenig Parameter"
+msgid "too few arguments"
+msgstr "zu wenige Argumente"
#: builtin/notes.c:538
#, c-format
@@ -18266,7 +18621,7 @@
"commit',\n"
"oder brechen Sie den Merge mit 'git notes merge --abort' ab.\n"
-#: builtin/notes.c:897 builtin/tag.c:546
+#: builtin/notes.c:897 builtin/tag.c:578
#, c-format
msgid "Failed to resolve '%s' as a valid ref."
msgstr "Konnte '%s' nicht als gültige Referenz auflösen."
@@ -18284,7 +18639,7 @@
msgid "read object names from the standard input"
msgstr "Objektnamen von der Standard-Eingabe lesen"
-#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:220
+#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:148
msgid "do not remove, show only"
msgstr "nicht löschen, nur anzeigen"
@@ -18300,7 +18655,7 @@
msgid "use notes from <notes-ref>"
msgstr "Notizen von <Notiz-Referenz> verwenden"
-#: builtin/notes.c:1034 builtin/stash.c:1604
+#: builtin/notes.c:1034 builtin/stash.c:1671
#, c-format
msgid "unknown subcommand: %s"
msgstr "Unbekannter Unterbefehl: %s"
@@ -18319,106 +18674,120 @@
"git pack-objects [<Optionen>...] <Basis-Name> [< <Referenzliste> | < "
"<Objektliste>]"
-#: builtin/pack-objects.c:443
+#: builtin/pack-objects.c:440
+#, c-format
+msgid ""
+"write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
+"pack %s"
+msgstr ""
+"write_reuse_object: konnte %s nicht finden, erwartet bei Offset %<PRIuMAX> "
+"in Paket %s"
+
+#: builtin/pack-objects.c:448
#, c-format
msgid "bad packed object CRC for %s"
msgstr "Ungültiges CRC für gepacktes Objekt %s."
-#: builtin/pack-objects.c:454
+#: builtin/pack-objects.c:459
#, c-format
msgid "corrupt packed object for %s"
msgstr "Fehlerhaftes gepacktes Objekt für %s."
-#: builtin/pack-objects.c:585
+#: builtin/pack-objects.c:590
#, c-format
msgid "recursive delta detected for object %s"
msgstr "Rekursiver Unterschied für Objekt %s festgestellt."
-#: builtin/pack-objects.c:796
+#: builtin/pack-objects.c:801
#, c-format
msgid "ordered %u objects, expected %<PRIu32>"
msgstr "%u Objekte geordnet, %<PRIu32> erwartet."
-#: builtin/pack-objects.c:1004
+#: builtin/pack-objects.c:896
+#, c-format
+msgid "expected object at offset %<PRIuMAX> in pack %s"
+msgstr "Objekt beim Offset %<PRIuMAX> in Paket %s erwartet"
+
+#: builtin/pack-objects.c:1015
msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
msgstr ""
"Deaktiviere Schreiben der Bitmap, Pakete wurden durch pack.packSizeLimit\n"
"aufgetrennt."
-#: builtin/pack-objects.c:1017
+#: builtin/pack-objects.c:1028
msgid "Writing objects"
msgstr "Schreibe Objekte"
-#: builtin/pack-objects.c:1078 builtin/update-index.c:90
+#: builtin/pack-objects.c:1089 builtin/update-index.c:90
#, c-format
msgid "failed to stat %s"
msgstr "Konnte '%s' nicht lesen"
-#: builtin/pack-objects.c:1131
+#: builtin/pack-objects.c:1141
#, c-format
msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
msgstr "Schrieb %<PRIu32> Objekte während %<PRIu32> erwartet waren."
-#: builtin/pack-objects.c:1348
+#: builtin/pack-objects.c:1358
msgid "disabling bitmap writing, as some objects are not being packed"
msgstr ""
"Deaktiviere Schreiben der Bitmap, da einige Objekte nicht in eine Pack-"
"Datei\n"
"geschrieben wurden."
-#: builtin/pack-objects.c:1796
+#: builtin/pack-objects.c:1806
#, c-format
msgid "delta base offset overflow in pack for %s"
msgstr "\"delta base offset\" Überlauf in Paket für %s"
-#: builtin/pack-objects.c:1805
+#: builtin/pack-objects.c:1815
#, c-format
msgid "delta base offset out of bound for %s"
msgstr "\"delta base offset\" liegt außerhalb des gültigen Bereichs für %s"
-#: builtin/pack-objects.c:2086
+#: builtin/pack-objects.c:2096
msgid "Counting objects"
msgstr "Zähle Objekte"
-#: builtin/pack-objects.c:2231
+#: builtin/pack-objects.c:2241
#, c-format
msgid "unable to parse object header of %s"
msgstr "Konnte Kopfbereich von Objekt '%s' nicht parsen."
-#: builtin/pack-objects.c:2301 builtin/pack-objects.c:2317
-#: builtin/pack-objects.c:2327
+#: builtin/pack-objects.c:2311 builtin/pack-objects.c:2327
+#: builtin/pack-objects.c:2337
#, c-format
msgid "object %s cannot be read"
msgstr "Objekt %s kann nicht gelesen werden."
-#: builtin/pack-objects.c:2304 builtin/pack-objects.c:2331
+#: builtin/pack-objects.c:2314 builtin/pack-objects.c:2341
#, c-format
msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
msgstr "Inkonsistente Objektlänge bei Objekt %s (%<PRIuMAX> vs %<PRIuMAX>)"
-#: builtin/pack-objects.c:2341
+#: builtin/pack-objects.c:2351
msgid "suboptimal pack - out of memory"
msgstr "ungünstiges Packet - Speicher voll"
-#: builtin/pack-objects.c:2656
+#: builtin/pack-objects.c:2666
#, c-format
msgid "Delta compression using up to %d threads"
msgstr "Delta-Kompression verwendet bis zu %d Threads."
-#: builtin/pack-objects.c:2795
+#: builtin/pack-objects.c:2805
#, c-format
msgid "unable to pack objects reachable from tag %s"
msgstr "Konnte keine Objekte packen, die von Tag %s erreichbar sind."
-#: builtin/pack-objects.c:2883
+#: builtin/pack-objects.c:2891
msgid "Compressing objects"
msgstr "Komprimiere Objekte"
-#: builtin/pack-objects.c:2889
+#: builtin/pack-objects.c:2897
msgid "inconsistency with delta count"
msgstr "Inkonsistenz mit der Anzahl von Deltas"
-#: builtin/pack-objects.c:2961
+#: builtin/pack-objects.c:2976
#, c-format
msgid ""
"value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
@@ -18427,7 +18796,7 @@
"Wert für uploadpack.blobpackfileuri muss in der Form '<Objekt-Hash> <Pack-"
"Hash> <URI>' vorliegen ('%s' erhalten)"
-#: builtin/pack-objects.c:2964
+#: builtin/pack-objects.c:2979
#, c-format
msgid ""
"object already configured in another uploadpack.blobpackfileuri (got '%s')"
@@ -18435,7 +18804,7 @@
"Objekt bereits in einem anderen uploadpack.blobpackfileuri konfiguriert "
"('%s' erhalten)"
-#: builtin/pack-objects.c:2993
+#: builtin/pack-objects.c:3008
#, c-format
msgid ""
"expected edge object ID, got garbage:\n"
@@ -18444,7 +18813,7 @@
"erwartete Randobjekt-ID, erhielt nutzlose Daten:\n"
" %s"
-#: builtin/pack-objects.c:2999
+#: builtin/pack-objects.c:3014
#, c-format
msgid ""
"expected object ID, got garbage:\n"
@@ -18453,250 +18822,250 @@
"erwartete Objekt-ID, erhielt nutzlose Daten:\n"
" %s"
-#: builtin/pack-objects.c:3097
+#: builtin/pack-objects.c:3112
msgid "invalid value for --missing"
msgstr "ungültiger Wert für --missing"
-#: builtin/pack-objects.c:3156 builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3171 builtin/pack-objects.c:3279
msgid "cannot open pack index"
msgstr "kann Paketindex nicht öffnen"
-#: builtin/pack-objects.c:3187
+#: builtin/pack-objects.c:3202
#, c-format
msgid "loose object at %s could not be examined"
msgstr "loses Objekt bei %s konnte nicht untersucht werden"
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3287
msgid "unable to force loose object"
msgstr "konnte loses Objekt nicht erzwingen"
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3380
#, c-format
msgid "not a rev '%s'"
msgstr "'%s' ist kein Commit"
-#: builtin/pack-objects.c:3368
+#: builtin/pack-objects.c:3383
#, c-format
msgid "bad revision '%s'"
msgstr "ungültiger Commit '%s'"
-#: builtin/pack-objects.c:3393
+#: builtin/pack-objects.c:3408
msgid "unable to add recent objects"
msgstr "konnte neuere Objekte nicht hinzufügen"
-#: builtin/pack-objects.c:3446
+#: builtin/pack-objects.c:3461
#, c-format
msgid "unsupported index version %s"
msgstr "nicht unterstützte Index-Version %s"
-#: builtin/pack-objects.c:3450
+#: builtin/pack-objects.c:3465
#, c-format
msgid "bad index version '%s'"
msgstr "ungültige Index-Version '%s'"
-#: builtin/pack-objects.c:3488
+#: builtin/pack-objects.c:3503
msgid "<version>[,<offset>]"
msgstr "<Version>[,<Offset>]"
-#: builtin/pack-objects.c:3489
+#: builtin/pack-objects.c:3504
msgid "write the pack index file in the specified idx format version"
msgstr ""
"die Index-Datei des Paketes in der angegebenen Indexformat-Version schreiben"
-#: builtin/pack-objects.c:3492
+#: builtin/pack-objects.c:3507
msgid "maximum size of each output pack file"
msgstr "maximale Größe für jede ausgegebene Paketdatei"
-#: builtin/pack-objects.c:3494
+#: builtin/pack-objects.c:3509
msgid "ignore borrowed objects from alternate object store"
msgstr "geliehene Objekte von alternativem Objektspeicher ignorieren"
-#: builtin/pack-objects.c:3496
+#: builtin/pack-objects.c:3511
msgid "ignore packed objects"
msgstr "gepackte Objekte ignorieren"
-#: builtin/pack-objects.c:3498
+#: builtin/pack-objects.c:3513
msgid "limit pack window by objects"
msgstr "Paketfenster durch Objekte begrenzen"
-#: builtin/pack-objects.c:3500
+#: builtin/pack-objects.c:3515
msgid "limit pack window by memory in addition to object limit"
msgstr ""
"Paketfenster, zusätzlich zur Objektbegrenzung, durch Speicher begrenzen"
-#: builtin/pack-objects.c:3502
+#: builtin/pack-objects.c:3517
msgid "maximum length of delta chain allowed in the resulting pack"
msgstr ""
"maximale Länge der erlaubten Differenzverkettung im resultierenden Paket"
-#: builtin/pack-objects.c:3504
+#: builtin/pack-objects.c:3519
msgid "reuse existing deltas"
msgstr "existierende Unterschiede wiederverwenden"
-#: builtin/pack-objects.c:3506
+#: builtin/pack-objects.c:3521
msgid "reuse existing objects"
msgstr "existierende Objekte wiederverwenden"
-#: builtin/pack-objects.c:3508
+#: builtin/pack-objects.c:3523
msgid "use OFS_DELTA objects"
msgstr "OFS_DELTA Objekte verwenden"
-#: builtin/pack-objects.c:3510
+#: builtin/pack-objects.c:3525
msgid "use threads when searching for best delta matches"
msgstr ""
"Threads bei der Suche nach den besten Übereinstimmungen bei Unterschieden "
"verwenden"
-#: builtin/pack-objects.c:3512
+#: builtin/pack-objects.c:3527
msgid "do not create an empty pack output"
msgstr "keine leeren Pakete erzeugen"
-#: builtin/pack-objects.c:3514
+#: builtin/pack-objects.c:3529
msgid "read revision arguments from standard input"
msgstr "Argumente bezüglich Commits von der Standard-Eingabe lesen"
-#: builtin/pack-objects.c:3516
+#: builtin/pack-objects.c:3531
msgid "limit the objects to those that are not yet packed"
msgstr "die Objekte zu solchen, die noch nicht gepackt wurden, begrenzen"
-#: builtin/pack-objects.c:3519
+#: builtin/pack-objects.c:3534
msgid "include objects reachable from any reference"
msgstr "Objekte einschließen, die von jeder Referenz erreichbar sind"
-#: builtin/pack-objects.c:3522
+#: builtin/pack-objects.c:3537
msgid "include objects referred by reflog entries"
msgstr ""
"Objekte einschließen, die von Einträgen des Reflogs referenziert werden"
-#: builtin/pack-objects.c:3525
+#: builtin/pack-objects.c:3540
msgid "include objects referred to by the index"
msgstr "Objekte einschließen, die vom Index referenziert werden"
-#: builtin/pack-objects.c:3528
+#: builtin/pack-objects.c:3543
msgid "output pack to stdout"
msgstr "Paket in die Standard-Ausgabe schreiben"
-#: builtin/pack-objects.c:3530
+#: builtin/pack-objects.c:3545
msgid "include tag objects that refer to objects to be packed"
msgstr "Tag-Objekte einschließen, die auf gepackte Objekte referenzieren"
-#: builtin/pack-objects.c:3532
+#: builtin/pack-objects.c:3547
msgid "keep unreachable objects"
msgstr "nicht erreichbare Objekte behalten"
-#: builtin/pack-objects.c:3534
+#: builtin/pack-objects.c:3549
msgid "pack loose unreachable objects"
msgstr "nicht erreichbare lose Objekte packen"
-#: builtin/pack-objects.c:3536
+#: builtin/pack-objects.c:3551
msgid "unpack unreachable objects newer than <time>"
msgstr "nicht erreichbare Objekte entpacken, die neuer als <Zeit> sind"
-#: builtin/pack-objects.c:3539
+#: builtin/pack-objects.c:3554
msgid "use the sparse reachability algorithm"
msgstr "den \"sparse\" Algorithmus zur Bestimmung der Erreichbarkeit benutzen"
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3556
msgid "create thin packs"
msgstr "dünnere Pakete erzeugen"
-#: builtin/pack-objects.c:3543
+#: builtin/pack-objects.c:3558
msgid "create packs suitable for shallow fetches"
msgstr ""
"Pakete geeignet für Abholung mit unvollständiger Historie (shallow) erzeugen"
-#: builtin/pack-objects.c:3545
+#: builtin/pack-objects.c:3560
msgid "ignore packs that have companion .keep file"
msgstr "Pakete ignorieren, die .keep Dateien haben"
-#: builtin/pack-objects.c:3547
+#: builtin/pack-objects.c:3562
msgid "ignore this pack"
msgstr "dieses Paket ignorieren"
-#: builtin/pack-objects.c:3549
+#: builtin/pack-objects.c:3564
msgid "pack compression level"
msgstr "Komprimierungsgrad für Paketierung"
-#: builtin/pack-objects.c:3551
+#: builtin/pack-objects.c:3566
msgid "do not hide commits by grafts"
msgstr "keine künstlichen Vorgänger-Commits (\"grafts\") verbergen"
-#: builtin/pack-objects.c:3553
+#: builtin/pack-objects.c:3568
msgid "use a bitmap index if available to speed up counting objects"
msgstr ""
"Bitmap-Index (falls verfügbar) zur Optimierung der Objektzählung benutzen"
-#: builtin/pack-objects.c:3555
+#: builtin/pack-objects.c:3570
msgid "write a bitmap index together with the pack index"
msgstr "Bitmap-Index zusammen mit Pack-Index schreiben"
-#: builtin/pack-objects.c:3559
+#: builtin/pack-objects.c:3574
msgid "write a bitmap index if possible"
msgstr "Bitmap-Index schreiben, wenn möglich"
-#: builtin/pack-objects.c:3563
+#: builtin/pack-objects.c:3578
msgid "handling for missing objects"
msgstr "Behandlung für fehlende Objekte"
-#: builtin/pack-objects.c:3566
+#: builtin/pack-objects.c:3581
msgid "do not pack objects in promisor packfiles"
msgstr ""
"keine Objekte aus Packdateien von partiell geklonten Remote-Repositories "
"packen"
-#: builtin/pack-objects.c:3568
+#: builtin/pack-objects.c:3583
msgid "respect islands during delta compression"
msgstr "Delta-Islands bei Delta-Kompression beachten"
-#: builtin/pack-objects.c:3570
+#: builtin/pack-objects.c:3585
msgid "protocol"
msgstr "Protokoll"
-#: builtin/pack-objects.c:3571
+#: builtin/pack-objects.c:3586
msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
msgstr ""
"jegliche konfigurierte uploadpack.blobpackfileuri für dieses Protkoll "
"ausschließen"
-#: builtin/pack-objects.c:3600
+#: builtin/pack-objects.c:3617
#, c-format
msgid "delta chain depth %d is too deep, forcing %d"
msgstr "Tiefe für Verkettung von Unterschieden %d ist zu tief, erzwinge %d"
-#: builtin/pack-objects.c:3605
+#: builtin/pack-objects.c:3622
#, c-format
msgid "pack.deltaCacheLimit is too high, forcing %d"
msgstr "pack.deltaCacheLimit ist zu hoch, erzwinge %d"
-#: builtin/pack-objects.c:3659
+#: builtin/pack-objects.c:3676
msgid "--max-pack-size cannot be used to build a pack for transfer"
msgstr ""
"--max-pack-size kann nicht für die Erstellung eines Pakets für eine "
"Übertragung\n"
"benutzt werden."
-#: builtin/pack-objects.c:3661
+#: builtin/pack-objects.c:3678
msgid "minimum pack size limit is 1 MiB"
msgstr "Minimales Limit für die Paketgröße ist 1 MiB."
-#: builtin/pack-objects.c:3666
+#: builtin/pack-objects.c:3683
msgid "--thin cannot be used to build an indexable pack"
msgstr ""
"--thin kann nicht benutzt werden, um ein indizierbares Paket zu erstellen."
-#: builtin/pack-objects.c:3669
+#: builtin/pack-objects.c:3686
msgid "--keep-unreachable and --unpack-unreachable are incompatible"
msgstr "--keep-unreachable und --unpack-unreachable sind inkompatibel"
-#: builtin/pack-objects.c:3675
+#: builtin/pack-objects.c:3692
msgid "cannot use --filter without --stdout"
msgstr "Kann --filter nicht ohne --stdout benutzen."
-#: builtin/pack-objects.c:3735
+#: builtin/pack-objects.c:3752
msgid "Enumerating objects"
msgstr "Objekte aufzählen"
-#: builtin/pack-objects.c:3766
+#: builtin/pack-objects.c:3783
#, c-format
msgid ""
"Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -18705,6 +19074,21 @@
"Gesamt %<PRIu32> (Delta %<PRIu32>), Wiederverwendet %<PRIu32> (Delta "
"%<PRIu32>), Pack wiederverwendet %<PRIu32>"
+#: builtin/pack-redundant.c:601
+msgid ""
+"'git pack-redundant' is nominated for removal.\n"
+"If you still use this command, please add an extra\n"
+"option, '--i-still-use-this', on the command line\n"
+"and let us know you still use it by sending an e-mail\n"
+"to <git@vger.kernel.org>. Thanks.\n"
+msgstr ""
+"'git pack-redundant' ist für die Entfernung vorgesehen.\n"
+"Wenn Sie diesen Befehl weiterhin verwenden, fügen Sie\n"
+"bitte eine zusätzliche Option '--i-still-use-this' in\n"
+"der Befehlszeile hinzu und lassen Sie uns wissen, dass\n"
+"Sie es immer noch verwenden, indem Sie eine E-Mail an\n"
+"<git@vger.kernel.org> senden. Danke.\n"
+
#: builtin/pack-refs.c:8
msgid "git pack-refs [<options>]"
msgstr "git pack-refs [<Optionen>]"
@@ -18764,7 +19148,7 @@
msgid "incorporate changes by rebasing rather than merging"
msgstr "Integration von Änderungen durch Rebase statt Merge"
-#: builtin/pull.c:158 builtin/rebase.c:490 builtin/revert.c:126
+#: builtin/pull.c:158 builtin/rebase.c:492 builtin/revert.c:126
msgid "allow fast-forward"
msgstr "Vorspulen erlauben"
@@ -18789,7 +19173,100 @@
msgid "Invalid value for pull.ff: %s"
msgstr "Ungültiger Wert für pull.ff: %s"
-#: builtin/pull.c:348
+#: builtin/pull.c:445
+msgid ""
+"There is no candidate for rebasing against among the refs that you just "
+"fetched."
+msgstr ""
+"Es gibt keinen Kandidaten für Rebase innerhalb der Referenzen, die eben "
+"angefordert wurden."
+
+#: builtin/pull.c:447
+msgid ""
+"There are no candidates for merging among the refs that you just fetched."
+msgstr ""
+"Es gibt keine Kandidaten für Merge innerhalb der Referenzen, die eben "
+"angefordert wurden."
+
+#: builtin/pull.c:448
+msgid ""
+"Generally this means that you provided a wildcard refspec which had no\n"
+"matches on the remote end."
+msgstr ""
+"Im Allgemeinen bedeutet das, dass Sie einen Refspec mit Wildcards angegeben\n"
+"haben, der auf der Gegenseite mit keinen Referenzen übereinstimmt."
+
+#: builtin/pull.c:451
+#, c-format
+msgid ""
+"You asked to pull from the remote '%s', but did not specify\n"
+"a branch. Because this is not the default configured remote\n"
+"for your current branch, you must specify a branch on the command line."
+msgstr ""
+"Sie führten \"pull\" von Remote-Repository '%s' aus, ohne einen\n"
+"Branch anzugeben. Da das nicht das konfigurierte Standard-Remote-\n"
+"Repository für den aktuellen Branch ist, müssen Sie einen Branch auf\n"
+"der Befehlszeile angeben."
+
+#: builtin/pull.c:456 builtin/rebase.c:1253
+msgid "You are not currently on a branch."
+msgstr "Im Moment auf keinem Branch."
+
+#: builtin/pull.c:458 builtin/pull.c:473
+msgid "Please specify which branch you want to rebase against."
+msgstr ""
+"Bitte geben Sie den Branch an, gegen welchen Sie \"rebase\" ausführen "
+"möchten."
+
+#: builtin/pull.c:460 builtin/pull.c:475
+msgid "Please specify which branch you want to merge with."
+msgstr "Bitte geben Sie den Branch an, welchen Sie zusammenführen möchten."
+
+#: builtin/pull.c:461 builtin/pull.c:476
+msgid "See git-pull(1) for details."
+msgstr "Siehe git-pull(1) für weitere Details."
+
+#: builtin/pull.c:463 builtin/pull.c:469 builtin/pull.c:478
+#: builtin/rebase.c:1259
+msgid "<remote>"
+msgstr "<Remote-Repository>"
+
+#: builtin/pull.c:463 builtin/pull.c:478 builtin/pull.c:483
+msgid "<branch>"
+msgstr "<Branch>"
+
+#: builtin/pull.c:471 builtin/rebase.c:1251
+msgid "There is no tracking information for the current branch."
+msgstr "Es gibt keine Tracking-Informationen für den aktuellen Branch."
+
+#: builtin/pull.c:480
+msgid ""
+"If you wish to set tracking information for this branch you can do so with:"
+msgstr ""
+"Wenn Sie Tracking-Informationen für diesen Branch setzen möchten, können "
+"Sie\n"
+"dies tun mit:"
+
+#: builtin/pull.c:485
+#, c-format
+msgid ""
+"Your configuration specifies to merge with the ref '%s'\n"
+"from the remote, but no such ref was fetched."
+msgstr ""
+"Ihre Konfiguration gibt an, den Merge mit Referenz '%s'\n"
+"des Remote-Repositories durchzuführen, aber diese Referenz\n"
+"wurde nicht angefordert."
+
+#: builtin/pull.c:596
+#, c-format
+msgid "unable to access commit %s"
+msgstr "Konnte nicht auf Commit '%s' zugreifen."
+
+#: builtin/pull.c:902
+msgid "ignoring --verify-signatures for rebase"
+msgstr "Ignoriere --verify-signatures für Rebase"
+
+#: builtin/pull.c:930
msgid ""
"Pulling without specifying how to reconcile divergent branches is\n"
"discouraged. You can squelch this message by running one of the following\n"
@@ -18819,114 +19296,21 @@
"Option --rebase, --no-rebase oder --ff-only auf der Kommandozeile nutzen,\n"
"um das konfigurierte Standardverhalten pro Aufruf zu überschreiben.\n"
-#: builtin/pull.c:458
-msgid ""
-"There is no candidate for rebasing against among the refs that you just "
-"fetched."
-msgstr ""
-"Es gibt keinen Kandidaten für Rebase innerhalb der Referenzen, die eben "
-"angefordert wurden."
-
-#: builtin/pull.c:460
-msgid ""
-"There are no candidates for merging among the refs that you just fetched."
-msgstr ""
-"Es gibt keine Kandidaten für Merge innerhalb der Referenzen, die eben "
-"angefordert wurden."
-
-#: builtin/pull.c:461
-msgid ""
-"Generally this means that you provided a wildcard refspec which had no\n"
-"matches on the remote end."
-msgstr ""
-"Im Allgemeinen bedeutet das, dass Sie einen Refspec mit Wildcards angegeben\n"
-"haben, der auf der Gegenseite mit keinen Referenzen übereinstimmt."
-
-#: builtin/pull.c:464
-#, c-format
-msgid ""
-"You asked to pull from the remote '%s', but did not specify\n"
-"a branch. Because this is not the default configured remote\n"
-"for your current branch, you must specify a branch on the command line."
-msgstr ""
-"Sie führten \"pull\" von Remote-Repository '%s' aus, ohne einen\n"
-"Branch anzugeben. Da das nicht das konfigurierte Standard-Remote-\n"
-"Repository für den aktuellen Branch ist, müssen Sie einen Branch auf\n"
-"der Befehlszeile angeben."
-
-#: builtin/pull.c:469 builtin/rebase.c:1246
-msgid "You are not currently on a branch."
-msgstr "Im Moment auf keinem Branch."
-
-#: builtin/pull.c:471 builtin/pull.c:486
-msgid "Please specify which branch you want to rebase against."
-msgstr ""
-"Bitte geben Sie den Branch an, gegen welchen Sie \"rebase\" ausführen "
-"möchten."
-
-#: builtin/pull.c:473 builtin/pull.c:488
-msgid "Please specify which branch you want to merge with."
-msgstr "Bitte geben Sie den Branch an, welchen Sie zusammenführen möchten."
-
-#: builtin/pull.c:474 builtin/pull.c:489
-msgid "See git-pull(1) for details."
-msgstr "Siehe git-pull(1) für weitere Details."
-
-#: builtin/pull.c:476 builtin/pull.c:482 builtin/pull.c:491
-#: builtin/rebase.c:1252
-msgid "<remote>"
-msgstr "<Remote-Repository>"
-
-#: builtin/pull.c:476 builtin/pull.c:491 builtin/pull.c:496
-msgid "<branch>"
-msgstr "<Branch>"
-
-#: builtin/pull.c:484 builtin/rebase.c:1244
-msgid "There is no tracking information for the current branch."
-msgstr "Es gibt keine Tracking-Informationen für den aktuellen Branch."
-
-#: builtin/pull.c:493
-msgid ""
-"If you wish to set tracking information for this branch you can do so with:"
-msgstr ""
-"Wenn Sie Tracking-Informationen für diesen Branch setzen möchten, können "
-"Sie\n"
-"dies tun mit:"
-
-#: builtin/pull.c:498
-#, c-format
-msgid ""
-"Your configuration specifies to merge with the ref '%s'\n"
-"from the remote, but no such ref was fetched."
-msgstr ""
-"Ihre Konfiguration gibt an, den Merge mit Referenz '%s'\n"
-"des Remote-Repositories durchzuführen, aber diese Referenz\n"
-"wurde nicht angefordert."
-
-#: builtin/pull.c:609
-#, c-format
-msgid "unable to access commit %s"
-msgstr "Konnte nicht auf Commit '%s' zugreifen."
-
-#: builtin/pull.c:915
-msgid "ignoring --verify-signatures for rebase"
-msgstr "Ignoriere --verify-signatures für Rebase"
-
-#: builtin/pull.c:972
+#: builtin/pull.c:991
msgid "Updating an unborn branch with changes added to the index."
msgstr ""
"Aktualisiere einen ungeborenen Branch mit Änderungen, die zum Commit "
"vorgemerkt sind."
-#: builtin/pull.c:976
+#: builtin/pull.c:995
msgid "pull with rebase"
msgstr "Pull mit Rebase"
-#: builtin/pull.c:977
+#: builtin/pull.c:996
msgid "please commit or stash them."
msgstr "Bitte committen Sie die Änderungen oder benutzen Sie \"stash\"."
-#: builtin/pull.c:1002
+#: builtin/pull.c:1021
#, c-format
msgid ""
"fetch updated the current branch head.\n"
@@ -18936,7 +19320,7 @@
"\"fetch\" aktualisierte die Spitze des aktuellen Branches.\n"
"Spule Ihr Arbeitsverzeichnis von Commit %s vor."
-#: builtin/pull.c:1008
+#: builtin/pull.c:1027
#, c-format
msgid ""
"Cannot fast-forward your working tree.\n"
@@ -18953,15 +19337,15 @@
"$ git reset --hard\n"
"zur Wiederherstellung aus."
-#: builtin/pull.c:1023
+#: builtin/pull.c:1042
msgid "Cannot merge multiple branches into empty head."
msgstr "Kann nicht mehrere Branches in einen leeren Branch zusammenführen."
-#: builtin/pull.c:1027
+#: builtin/pull.c:1046
msgid "Cannot rebase onto multiple branches."
msgstr "Kann Rebase nicht auf mehrere Branches ausführen."
-#: builtin/pull.c:1041
+#: builtin/pull.c:1067
msgid "cannot rebase with locally recorded submodule modifications"
msgstr ""
"Kann Rebase nicht mit lokal aufgezeichneten Änderungen in Submodulen "
@@ -18977,7 +19361,7 @@
#: builtin/push.c:119
msgid "--delete only accepts plain target ref names"
-msgstr "Die Option --delete akzeptiert nur reine Referenznamen als Ziel."
+msgstr "--delete akzeptiert nur reine Referenznamen als Ziel"
#: builtin/push.c:164
msgid ""
@@ -19227,11 +19611,11 @@
#: builtin/push.c:601
msgid "--delete is incompatible with --all, --mirror and --tags"
-msgstr "Die Option --delete ist inkompatibel mit --all, --mirror und --tags."
+msgstr "--delete ist inkompatibel mit --all, --mirror und --tags"
#: builtin/push.c:603
msgid "--delete doesn't make sense without any refs"
-msgstr "Die Option --delete kann nur mit Referenzen verwendet werden."
+msgstr "--delete kann nur mit Referenzen verwendet werden"
#: builtin/push.c:623
#, c-format
@@ -19262,68 +19646,76 @@
#: builtin/push.c:639
msgid "--all and --tags are incompatible"
-msgstr "Die Optionen --all und --tags sind inkompatibel."
+msgstr "--all und --tags sind inkompatibel"
#: builtin/push.c:641
msgid "--all can't be combined with refspecs"
-msgstr "Die Option --all kann nicht mit Refspecs kombiniert werden."
+msgstr "--all kann nicht mit Refspecs kombiniert werden"
#: builtin/push.c:645
msgid "--mirror and --tags are incompatible"
-msgstr "Die Optionen --mirror und --tags sind inkompatibel."
+msgstr "--mirror und --tags sind inkompatibel"
#: builtin/push.c:647
msgid "--mirror can't be combined with refspecs"
-msgstr "Die Option --mirror kann nicht mit Refspecs kombiniert werden."
+msgstr "--mirror kann nicht mit Refspecs kombiniert werden"
#: builtin/push.c:650
msgid "--all and --mirror are incompatible"
-msgstr "Die Optionen --all und --mirror sind inkompatibel."
+msgstr "--all und --mirror sind inkompatibel"
#: builtin/push.c:657
msgid "push options must not have new line characters"
msgstr "Push-Optionen dürfen keine Zeilenvorschubzeichen haben"
-#: builtin/range-diff.c:8
+#: builtin/range-diff.c:9
msgid "git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"
msgstr ""
"git range-diff [<Optionen>] <alte-Basis>..<alte-Spitze> <neue-Basis>..<neue-"
"Spitze>"
-#: builtin/range-diff.c:9
+#: builtin/range-diff.c:10
msgid "git range-diff [<options>] <old-tip>...<new-tip>"
msgstr "git range-diff [<Optionen>] <alte-Spitze>...<neue-Spitze>"
-#: builtin/range-diff.c:10
+#: builtin/range-diff.c:11
msgid "git range-diff [<options>] <base> <old-tip> <new-tip>"
msgstr "git range-diff [<Optionen>] <Basis> <alte-Spitze> <neue-Spitze>"
-#: builtin/range-diff.c:22
+#: builtin/range-diff.c:28
msgid "Percentage by which creation is weighted"
msgstr "Prozentsatz mit welchem Erzeugung gewichtet wird"
-#: builtin/range-diff.c:24
+#: builtin/range-diff.c:30
msgid "use simple diff colors"
msgstr "einfache Diff-Farben benutzen"
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
msgid "notes"
msgstr "Notizen"
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
msgid "passed to 'git log'"
msgstr "an 'git log' übergeben"
-#: builtin/range-diff.c:50 builtin/range-diff.c:54
-#, c-format
-msgid "no .. in range: '%s'"
-msgstr "Kein .. im Bereich: '%s'"
+#: builtin/range-diff.c:35
+msgid "only emit output related to the first range"
+msgstr "nur Ausgaben anzeigen, die sich auf den ersten Bereich beziehen"
-#: builtin/range-diff.c:64
+#: builtin/range-diff.c:37
+msgid "only emit output related to the second range"
+msgstr "nur Ausgaben anzeigen, die sich auf den zweiten Bereich beziehen"
+
+#: builtin/range-diff.c:60 builtin/range-diff.c:64
+#, c-format
+msgid "not a commit range: '%s'"
+msgstr "kein Commit-Bereich: '%s'"
+
+#: builtin/range-diff.c:74
msgid "single arg format must be symmetric range"
msgstr "Format mit einfachem Argument muss symmetrischer Bereich sein."
-#: builtin/range-diff.c:79
+#: builtin/range-diff.c:89
msgid "need two commit ranges"
msgstr "Benötige zwei Commit-Bereiche."
@@ -19429,194 +19821,194 @@
msgid "git rebase --continue | --abort | --skip | --edit-todo"
msgstr "git rebase --continue | --abort | --skip | --edit-todo"
-#: builtin/rebase.c:193 builtin/rebase.c:217 builtin/rebase.c:244
+#: builtin/rebase.c:195 builtin/rebase.c:219 builtin/rebase.c:246
#, c-format
msgid "unusable todo list: '%s'"
msgstr "Unbenutzbare TODO-Liste: '%s'"
-#: builtin/rebase.c:310
+#: builtin/rebase.c:312
#, c-format
msgid "could not create temporary %s"
msgstr "Konnte temporäres Verzeichnis '%s' nicht erstellen."
-#: builtin/rebase.c:316
+#: builtin/rebase.c:318
msgid "could not mark as interactive"
msgstr "Markierung auf interaktiven Rebase fehlgeschlagen."
-#: builtin/rebase.c:369
+#: builtin/rebase.c:371
msgid "could not generate todo list"
msgstr "Konnte TODO-Liste nicht erzeugen."
-#: builtin/rebase.c:411
+#: builtin/rebase.c:413
msgid "a base commit must be provided with --upstream or --onto"
msgstr "Ein Basis-Commit muss mit --upstream oder --onto angegeben werden."
-#: builtin/rebase.c:480
+#: builtin/rebase.c:482
msgid "git rebase--interactive [<options>]"
msgstr "git rebase--interactive [<Optionen>]"
-#: builtin/rebase.c:493 builtin/rebase.c:1388
+#: builtin/rebase.c:495 builtin/rebase.c:1394
msgid "keep commits which start empty"
msgstr "behalte Commits, die leer beginnen"
-#: builtin/rebase.c:497 builtin/revert.c:128
+#: builtin/rebase.c:499 builtin/revert.c:128
msgid "allow commits with empty messages"
msgstr "Commits mit leerer Beschreibung erlauben"
-#: builtin/rebase.c:499
+#: builtin/rebase.c:501
msgid "rebase merge commits"
msgstr "Rebase auf Merge-Commits ausführen"
-#: builtin/rebase.c:501
+#: builtin/rebase.c:503
msgid "keep original branch points of cousins"
msgstr "originale Branch-Punkte der Cousins behalten"
-#: builtin/rebase.c:503
+#: builtin/rebase.c:505
msgid "move commits that begin with squash!/fixup!"
msgstr "Commits verschieben, die mit squash!/fixup! beginnen"
-#: builtin/rebase.c:504
+#: builtin/rebase.c:506
msgid "sign commits"
msgstr "Commits signieren"
-#: builtin/rebase.c:506 builtin/rebase.c:1327
+#: builtin/rebase.c:508 builtin/rebase.c:1333
msgid "display a diffstat of what changed upstream"
msgstr ""
"Zusammenfassung der Unterschiede gegenüber dem Upstream-Branch anzeigen"
-#: builtin/rebase.c:508
+#: builtin/rebase.c:510
msgid "continue rebase"
msgstr "Rebase fortsetzen"
-#: builtin/rebase.c:510
+#: builtin/rebase.c:512
msgid "skip commit"
msgstr "Commit auslassen"
-#: builtin/rebase.c:511
+#: builtin/rebase.c:513
msgid "edit the todo list"
msgstr "die TODO-Liste bearbeiten"
-#: builtin/rebase.c:513
+#: builtin/rebase.c:515
msgid "show the current patch"
msgstr "den aktuellen Patch anzeigen"
-#: builtin/rebase.c:516
+#: builtin/rebase.c:518
msgid "shorten commit ids in the todo list"
msgstr "Commit-IDs in der TODO-Liste verkürzen"
-#: builtin/rebase.c:518
+#: builtin/rebase.c:520
msgid "expand commit ids in the todo list"
msgstr "Commit-IDs in der TODO-Liste erweitern"
-#: builtin/rebase.c:520
+#: builtin/rebase.c:522
msgid "check the todo list"
msgstr "die TODO-Liste prüfen"
-#: builtin/rebase.c:522
+#: builtin/rebase.c:524
msgid "rearrange fixup/squash lines"
msgstr "fixup/squash-Zeilen umordnen"
-#: builtin/rebase.c:524
+#: builtin/rebase.c:526
msgid "insert exec commands in todo list"
msgstr "\"exec\"-Befehle in TODO-Liste einfügen"
-#: builtin/rebase.c:525
+#: builtin/rebase.c:527
msgid "onto"
msgstr "auf"
-#: builtin/rebase.c:528
+#: builtin/rebase.c:530
msgid "restrict-revision"
msgstr "Begrenzungscommit"
-#: builtin/rebase.c:528
+#: builtin/rebase.c:530
msgid "restrict revision"
msgstr "Begrenzungscommit"
-#: builtin/rebase.c:530
+#: builtin/rebase.c:532
msgid "squash-onto"
msgstr "squash-onto"
-#: builtin/rebase.c:531
+#: builtin/rebase.c:533
msgid "squash onto"
msgstr "squash onto"
-#: builtin/rebase.c:533
+#: builtin/rebase.c:535
msgid "the upstream commit"
msgstr "der Upstream-Commit"
-#: builtin/rebase.c:535
+#: builtin/rebase.c:537
msgid "head-name"
msgstr "head-Name"
-#: builtin/rebase.c:535
+#: builtin/rebase.c:537
msgid "head name"
msgstr "head-Name"
-#: builtin/rebase.c:540
+#: builtin/rebase.c:542
msgid "rebase strategy"
msgstr "Rebase-Strategie"
-#: builtin/rebase.c:541
+#: builtin/rebase.c:543
msgid "strategy-opts"
msgstr "Strategie-Optionen"
-#: builtin/rebase.c:542
+#: builtin/rebase.c:544
msgid "strategy options"
msgstr "Strategie-Optionen"
-#: builtin/rebase.c:543
+#: builtin/rebase.c:545
msgid "switch-to"
msgstr "wechseln zu"
-#: builtin/rebase.c:544
+#: builtin/rebase.c:546
msgid "the branch or commit to checkout"
msgstr "der Branch oder Commit zum Auschecken"
-#: builtin/rebase.c:545
+#: builtin/rebase.c:547
msgid "onto-name"
msgstr "onto-Name"
-#: builtin/rebase.c:545
+#: builtin/rebase.c:547
msgid "onto name"
msgstr "onto-Name"
-#: builtin/rebase.c:546
+#: builtin/rebase.c:548
msgid "cmd"
msgstr "Befehl"
-#: builtin/rebase.c:546
+#: builtin/rebase.c:548
msgid "the command to run"
msgstr "auszuführender Befehl"
-#: builtin/rebase.c:549 builtin/rebase.c:1421
+#: builtin/rebase.c:551 builtin/rebase.c:1427
msgid "automatically re-schedule any `exec` that fails"
msgstr "jeden fehlgeschlagenen `exec`-Befehl neu ansetzen"
-#: builtin/rebase.c:565
+#: builtin/rebase.c:567
msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
msgstr "--[no-]rebase-cousins hat ohne --rebase-merges keine Auswirkung"
-#: builtin/rebase.c:581
+#: builtin/rebase.c:583
#, c-format
msgid "%s requires the merge backend"
msgstr "%s erfordert das Merge-Backend"
-#: builtin/rebase.c:624
+#: builtin/rebase.c:626
#, c-format
msgid "could not get 'onto': '%s'"
msgstr "Konnte 'onto' nicht bestimmen: '%s'"
-#: builtin/rebase.c:641
+#: builtin/rebase.c:643
#, c-format
msgid "invalid orig-head: '%s'"
msgstr "Ungültiges orig-head: '%s'"
-#: builtin/rebase.c:666
+#: builtin/rebase.c:668
#, c-format
msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
msgstr "Ignoriere ungültiges allow_rerere_autoupdate: '%s'"
-#: builtin/rebase.c:811 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:813 git-rebase--preserve-merges.sh:81
msgid ""
"Resolve all conflicts manually, mark them as resolved with\n"
"\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -19632,7 +20024,7 @@
"Um abzubrechen und zurück zum Zustand vor \"git rebase\" zu gelangen,\n"
"führen Sie \"git rebase --abort\" aus."
-#: builtin/rebase.c:894
+#: builtin/rebase.c:896
#, c-format
msgid ""
"\n"
@@ -19652,7 +20044,7 @@
"Infolge dessen kann Git auf diesen Revisionen Rebase nicht\n"
"ausführen."
-#: builtin/rebase.c:1220
+#: builtin/rebase.c:1227
#, c-format
msgid ""
"unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
@@ -19661,7 +20053,7 @@
"nicht erkannter leerer Typ '%s'; Gültige Werte sind \"drop\", \"keep\", und "
"\"ask\"."
-#: builtin/rebase.c:1238
+#: builtin/rebase.c:1245
#, c-format
msgid ""
"%s\n"
@@ -19679,7 +20071,7 @@
" git rebase '<Branch>'\n"
"\n"
-#: builtin/rebase.c:1254
+#: builtin/rebase.c:1261
#, c-format
msgid ""
"If you wish to set tracking information for this branch you can do so with:\n"
@@ -19693,154 +20085,152 @@
" git branch --set-upstream-to=%s/<Branch> %s\n"
"\n"
-#: builtin/rebase.c:1284
+#: builtin/rebase.c:1291
msgid "exec commands cannot contain newlines"
msgstr "\"exec\"-Befehle können keine neuen Zeilen enthalten"
-#: builtin/rebase.c:1288
+#: builtin/rebase.c:1295
msgid "empty exec command"
msgstr "Leerer \"exec\"-Befehl."
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1324
msgid "rebase onto given branch instead of upstream"
msgstr "Rebase auf angegebenen Branch anstelle des Upstream-Branches ausführen"
-#: builtin/rebase.c:1320
+#: builtin/rebase.c:1326
msgid "use the merge-base of upstream and branch as the current base"
msgstr "Nutze die Merge-Basis von Upstream und Branch als die aktuelle Basis"
-#: builtin/rebase.c:1322
+#: builtin/rebase.c:1328
msgid "allow pre-rebase hook to run"
msgstr "Ausführung des pre-rebase-Hooks erlauben"
-#: builtin/rebase.c:1324
+#: builtin/rebase.c:1330
msgid "be quiet. implies --no-stat"
msgstr "weniger Ausgaben (impliziert --no-stat)"
-#: builtin/rebase.c:1330
+#: builtin/rebase.c:1336
msgid "do not show diffstat of what changed upstream"
msgstr ""
"Zusammenfassung der Unterschiede gegenüber dem Upstream-Branch verbergen"
-#: builtin/rebase.c:1333
+#: builtin/rebase.c:1339
msgid "add a Signed-off-by trailer to each commit"
msgstr "eine Signed-off-by Zeile zu jedem Commit hinzufügen"
-#: builtin/rebase.c:1336
+#: builtin/rebase.c:1342
msgid "make committer date match author date"
msgstr "Datum des Commit-Erstellers soll mit Datum des Autors übereinstimmen"
-#: builtin/rebase.c:1338
+#: builtin/rebase.c:1344
msgid "ignore author date and use current date"
msgstr "ignoriere Autor-Datum und nutze aktuelles Datum"
-#: builtin/rebase.c:1340
+#: builtin/rebase.c:1346
msgid "synonym of --reset-author-date"
msgstr "Synonym für --reset-author-date"
-#: builtin/rebase.c:1342 builtin/rebase.c:1346
+#: builtin/rebase.c:1348 builtin/rebase.c:1352
msgid "passed to 'git apply'"
msgstr "an 'git apply' übergeben"
-#: builtin/rebase.c:1344
+#: builtin/rebase.c:1350
msgid "ignore changes in whitespace"
msgstr "Whitespace-Änderungen ignorieren"
-#: builtin/rebase.c:1348 builtin/rebase.c:1351
+#: builtin/rebase.c:1354 builtin/rebase.c:1357
msgid "cherry-pick all commits, even if unchanged"
msgstr ""
"Cherry-Pick auf alle Commits ausführen, auch wenn diese unverändert sind"
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1359
msgid "continue"
msgstr "fortsetzen"
-#: builtin/rebase.c:1356
+#: builtin/rebase.c:1362
msgid "skip current patch and continue"
msgstr "den aktuellen Patch auslassen und fortfahren"
-#: builtin/rebase.c:1358
+#: builtin/rebase.c:1364
msgid "abort and check out the original branch"
msgstr "abbrechen und den ursprünglichen Branch auschecken"
-#: builtin/rebase.c:1361
+#: builtin/rebase.c:1367
msgid "abort but keep HEAD where it is"
msgstr "abbrechen, aber HEAD an aktueller Stelle belassen"
-#: builtin/rebase.c:1362
+#: builtin/rebase.c:1368
msgid "edit the todo list during an interactive rebase"
msgstr "TODO-Liste während eines interaktiven Rebase bearbeiten"
-#: builtin/rebase.c:1365
+#: builtin/rebase.c:1371
msgid "show the patch file being applied or merged"
msgstr "den Patch, der gerade angewendet oder zusammengeführt wird, anzeigen"
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1374
msgid "use apply strategies to rebase"
msgstr "Strategien von 'git am' bei Rebase verwenden"
-#: builtin/rebase.c:1372
+#: builtin/rebase.c:1378
msgid "use merging strategies to rebase"
msgstr "Merge-Strategien beim Rebase verwenden"
-#: builtin/rebase.c:1376
+#: builtin/rebase.c:1382
msgid "let the user edit the list of commits to rebase"
msgstr "den Benutzer die Liste der Commits für den Rebase bearbeiten lassen"
-#: builtin/rebase.c:1380
+#: builtin/rebase.c:1386
msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
-msgstr ""
-"(VERALTET) Versuche, Merges wiederherzustellen anstatt sie zu ignorieren"
+msgstr "(VERALTET) Versuche, Merges wiederherzustellen statt sie zu ignorieren"
-#: builtin/rebase.c:1385
+#: builtin/rebase.c:1391
msgid "how to handle commits that become empty"
msgstr "wie sollen Commits behandelt werden, die leer werden"
-#: builtin/rebase.c:1392
+#: builtin/rebase.c:1398
msgid "move commits that begin with squash!/fixup! under -i"
msgstr "bei -i Commits verschieben, die mit squash!/fixup! beginnen"
-#: builtin/rebase.c:1399
+#: builtin/rebase.c:1405
msgid "add exec lines after each commit of the editable list"
msgstr "exec-Zeilen nach jedem Commit der editierbaren Liste hinzufügen"
-#: builtin/rebase.c:1403
+#: builtin/rebase.c:1409
msgid "allow rebasing commits with empty messages"
msgstr "Rebase von Commits mit leerer Beschreibung erlauben"
-#: builtin/rebase.c:1407
+#: builtin/rebase.c:1413
msgid "try to rebase merges instead of skipping them"
-msgstr ""
-"versuchen, Rebase mit Merges auszuführen, anstatt diese zu überspringen"
+msgstr "versuchen, Rebase mit Merges auszuführen, statt diese zu überspringen"
-#: builtin/rebase.c:1410
+#: builtin/rebase.c:1416
msgid "use 'merge-base --fork-point' to refine upstream"
msgstr ""
"'git merge-base --fork-point' benutzen, um Upstream-Branch zu bestimmen"
-#: builtin/rebase.c:1412
+#: builtin/rebase.c:1418
msgid "use the given merge strategy"
msgstr "angegebene Merge-Strategie verwenden"
-#: builtin/rebase.c:1414 builtin/revert.c:115
+#: builtin/rebase.c:1420 builtin/revert.c:115
msgid "option"
msgstr "Option"
-#: builtin/rebase.c:1415
+#: builtin/rebase.c:1421
msgid "pass the argument through to the merge strategy"
msgstr "Argument zur Merge-Strategie durchreichen"
-#: builtin/rebase.c:1418
+#: builtin/rebase.c:1424
msgid "rebase all reachable commits up to the root(s)"
msgstr "Rebase auf alle erreichbaren Commits bis zum Root-Commit ausführen"
-#: builtin/rebase.c:1423
+#: builtin/rebase.c:1429
msgid "apply all changes, even those already present upstream"
msgstr ""
"alle Änderungen anwenden, auch jene, die bereits im Upstream-Branch "
"vorhanden sind"
-#: builtin/rebase.c:1440
+#: builtin/rebase.c:1446
msgid ""
"the rebase.useBuiltin support has been removed!\n"
"See its entry in 'git help config' for details."
@@ -19848,44 +20238,44 @@
"Die Unterstützung für rebase.useBuiltin wurde entfernt!\n"
"Siehe dessen Eintrag in 'git help config' für Details."
-#: builtin/rebase.c:1446
+#: builtin/rebase.c:1452
msgid "It looks like 'git am' is in progress. Cannot rebase."
msgstr "'git-am' scheint im Gange zu sein. Kann Rebase nicht durchführen."
-#: builtin/rebase.c:1487
+#: builtin/rebase.c:1493
msgid ""
"git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
msgstr ""
"'git rebase --preserve-merges' ist veraltet. Benutzen Sie stattdessen '--"
"rebase-merges'."
-#: builtin/rebase.c:1492
+#: builtin/rebase.c:1498
msgid "cannot combine '--keep-base' with '--onto'"
msgstr "'--keep-base' kann nicht mit '--onto' kombiniert werden"
-#: builtin/rebase.c:1494
+#: builtin/rebase.c:1500
msgid "cannot combine '--keep-base' with '--root'"
msgstr "'--keep-base' kann nicht mit '--root' kombiniert werden"
-#: builtin/rebase.c:1498
+#: builtin/rebase.c:1504
msgid "cannot combine '--root' with '--fork-point'"
msgstr "'--root' kann nicht mit '--fork-point' kombiniert werden"
-#: builtin/rebase.c:1501
+#: builtin/rebase.c:1507
msgid "No rebase in progress?"
msgstr "Kein Rebase im Gange?"
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1511
msgid "The --edit-todo action can only be used during interactive rebase."
msgstr ""
"Die --edit-todo Aktion kann nur während eines interaktiven Rebase verwendet "
"werden."
-#: builtin/rebase.c:1528 t/helper/test-fast-rebase.c:123
+#: builtin/rebase.c:1534 t/helper/test-fast-rebase.c:123
msgid "Cannot read HEAD"
msgstr "Kann HEAD nicht lesen"
-#: builtin/rebase.c:1540
+#: builtin/rebase.c:1546
msgid ""
"You must edit all merge conflicts and then\n"
"mark them as resolved using git add"
@@ -19893,16 +20283,16 @@
"Sie müssen alle Merge-Konflikte editieren und diese dann\n"
"mittels \"git add\" als aufgelöst markieren"
-#: builtin/rebase.c:1559
+#: builtin/rebase.c:1565
msgid "could not discard worktree changes"
msgstr "Konnte Änderungen im Arbeitsverzeichnis nicht verwerfen."
-#: builtin/rebase.c:1578
+#: builtin/rebase.c:1584
#, c-format
msgid "could not move back to %s"
msgstr "Konnte nicht zu %s zurückgehen."
-#: builtin/rebase.c:1624
+#: builtin/rebase.c:1630
#, c-format
msgid ""
"It seems that there is already a %s directory, and\n"
@@ -19923,138 +20313,138 @@
"und führen Sie diesen Befehl nochmal aus. Es wird angehalten, falls noch\n"
"etwas Schützenswertes vorhanden ist.\n"
-#: builtin/rebase.c:1652
+#: builtin/rebase.c:1658
msgid "switch `C' expects a numerical value"
msgstr "Schalter `C' erwartet einen numerischen Wert."
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1700
#, c-format
msgid "Unknown mode: %s"
msgstr "Unbekannter Modus: %s"
-#: builtin/rebase.c:1733
+#: builtin/rebase.c:1739
msgid "--strategy requires --merge or --interactive"
msgstr "--strategy erfordert --merge oder --interactive"
-#: builtin/rebase.c:1763
+#: builtin/rebase.c:1769
msgid "cannot combine apply options with merge options"
msgstr ""
"Optionen für \"am\" können nicht mit Optionen für \"merge\" kombiniert "
"werden."
-#: builtin/rebase.c:1776
+#: builtin/rebase.c:1782
#, c-format
msgid "Unknown rebase backend: %s"
msgstr "Unbekanntes Rebase-Backend: %s"
-#: builtin/rebase.c:1806
+#: builtin/rebase.c:1812
msgid "--reschedule-failed-exec requires --exec or --interactive"
msgstr "--reschedule-failed-exec erfordert --exec oder --interactive"
-#: builtin/rebase.c:1826
+#: builtin/rebase.c:1832
msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
msgstr ""
"'--preserve-merges' kann nicht mit '--rebase-merges' kombiniert werden."
-#: builtin/rebase.c:1830
+#: builtin/rebase.c:1836
msgid ""
"error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
msgstr ""
"Fehler: '--preserve-merges' kann nicht mit '--reschedule-failed-exec' "
"kombiniert werden."
-#: builtin/rebase.c:1854
+#: builtin/rebase.c:1860
#, c-format
msgid "invalid upstream '%s'"
msgstr "Ungültiger Upstream '%s'"
-#: builtin/rebase.c:1860
+#: builtin/rebase.c:1866
msgid "Could not create new root commit"
msgstr "Konnte neuen Root-Commit nicht erstellen."
-#: builtin/rebase.c:1886
+#: builtin/rebase.c:1892
#, c-format
msgid "'%s': need exactly one merge base with branch"
msgstr "'%s': benötige genau eine Merge-Basis mit dem Branch"
-#: builtin/rebase.c:1889
+#: builtin/rebase.c:1895
#, c-format
msgid "'%s': need exactly one merge base"
msgstr "'%s': benötige genau eine Merge-Basis"
-#: builtin/rebase.c:1897
+#: builtin/rebase.c:1903
#, c-format
msgid "Does not point to a valid commit '%s'"
msgstr "'%s' zeigt auf keinen gültigen Commit."
-#: builtin/rebase.c:1923
+#: builtin/rebase.c:1931
#, c-format
msgid "fatal: no such branch/commit '%s'"
msgstr "fatal: Branch/Commit '%s' nicht gefunden"
-#: builtin/rebase.c:1931 builtin/submodule--helper.c:40
+#: builtin/rebase.c:1939 builtin/submodule--helper.c:40
#: builtin/submodule--helper.c:2414
#, c-format
msgid "No such ref: %s"
msgstr "Referenz nicht gefunden: %s"
-#: builtin/rebase.c:1942
+#: builtin/rebase.c:1950
msgid "Could not resolve HEAD to a revision"
msgstr "Konnte HEAD zu keinem Commit auflösen."
-#: builtin/rebase.c:1963
+#: builtin/rebase.c:1971
msgid "Please commit or stash them."
msgstr "Bitte committen Sie die Änderungen oder benutzen Sie \"stash\"."
-#: builtin/rebase.c:1999
+#: builtin/rebase.c:2007
#, c-format
msgid "could not switch to %s"
msgstr "Konnte nicht zu %s wechseln."
-#: builtin/rebase.c:2010
+#: builtin/rebase.c:2018
msgid "HEAD is up to date."
msgstr "HEAD ist aktuell."
-#: builtin/rebase.c:2012
+#: builtin/rebase.c:2020
#, c-format
msgid "Current branch %s is up to date.\n"
msgstr "Aktueller Branch %s ist auf dem neuesten Stand.\n"
-#: builtin/rebase.c:2020
+#: builtin/rebase.c:2028
msgid "HEAD is up to date, rebase forced."
msgstr "HEAD ist aktuell, Rebase erzwungen."
-#: builtin/rebase.c:2022
+#: builtin/rebase.c:2030
#, c-format
msgid "Current branch %s is up to date, rebase forced.\n"
msgstr "Aktueller Branch %s ist auf dem neuesten Stand, Rebase erzwungen.\n"
-#: builtin/rebase.c:2030
+#: builtin/rebase.c:2038
msgid "The pre-rebase hook refused to rebase."
msgstr "Der \"pre-rebase hook\" hat den Rebase zurückgewiesen."
-#: builtin/rebase.c:2037
+#: builtin/rebase.c:2045
#, c-format
msgid "Changes to %s:\n"
msgstr "Änderungen zu %s:\n"
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2048
#, c-format
msgid "Changes from %s to %s:\n"
msgstr "Änderungen von %s zu %s:\n"
-#: builtin/rebase.c:2065
+#: builtin/rebase.c:2073
#, c-format
msgid "First, rewinding head to replay your work on top of it...\n"
msgstr ""
"Zunächst wird der Branch zurückgespult, um Ihre Änderungen darauf neu "
"anzuwenden...\n"
-#: builtin/rebase.c:2074
+#: builtin/rebase.c:2082
msgid "Could not detach HEAD"
msgstr "Konnte HEAD nicht loslösen."
-#: builtin/rebase.c:2083
+#: builtin/rebase.c:2091
#, c-format
msgid "Fast-forwarded %s to %s.\n"
msgstr "Spule %s vor zu %s.\n"
@@ -20151,36 +20541,36 @@
msgid "'%s' is not a valid timestamp"
msgstr "'%s' ist kein gültiger Zeitstempel"
-#: builtin/reflog.c:606
+#: builtin/reflog.c:609
#, c-format
msgid "Marking reachable objects..."
msgstr "Markiere nicht erreichbare Objekte..."
-#: builtin/reflog.c:644
+#: builtin/reflog.c:647
#, c-format
msgid "%s points nowhere!"
msgstr "%s zeigt auf nichts!"
-#: builtin/reflog.c:696
+#: builtin/reflog.c:699
msgid "no reflog specified to delete"
msgstr "Kein Reflog zum Löschen angegeben."
-#: builtin/reflog.c:705
+#: builtin/reflog.c:708
#, c-format
msgid "not a reflog: %s"
msgstr "Kein Reflog: %s"
-#: builtin/reflog.c:710
+#: builtin/reflog.c:713
#, c-format
msgid "no reflog for '%s'"
msgstr "Kein Reflog für '%s'."
-#: builtin/reflog.c:756
+#: builtin/reflog.c:759
#, c-format
msgid "invalid ref format: %s"
msgstr "Ungültiges Format für Referenzen: %s"
-#: builtin/reflog.c:765
+#: builtin/reflog.c:768
msgid "git reflog [ show | expire | delete | exists ]"
msgstr "git reflog [ show | expire | delete | exists ]"
@@ -20313,19 +20703,18 @@
#: builtin/remote.c:186
msgid "specifying a master branch makes no sense with --mirror"
msgstr ""
-"Die Option --mirror kann nicht mit der Angabe eines Hauptbranches verwendet "
-"werden."
+"--mirror kann nicht mit der Angabe eines Hauptbranches verwendet werden"
#: builtin/remote.c:188
msgid "specifying branches to track makes sense only with fetch mirrors"
msgstr ""
-"Die Angabe von zu folgenden Branches kann nur mit dem Anfordern von "
-"Spiegelarchiven verwendet werden."
+"die Angabe von zu folgenden Branches kann nur mit dem Anfordern von "
+"Spiegelarchiven verwendet werden"
#: builtin/remote.c:195 builtin/remote.c:700
#, c-format
msgid "remote %s already exists."
-msgstr "externes Repository %s existiert bereits"
+msgstr "externes Repository %s existiert bereits."
#: builtin/remote.c:240
#, c-format
@@ -20364,7 +20753,7 @@
#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:946
#, c-format
msgid "No such remote: '%s'"
-msgstr "Kein solches Remote-Repository: '%s'"
+msgstr "Remote-Repository nicht gefunden: '%s'"
#: builtin/remote.c:710
#, c-format
@@ -20651,7 +21040,7 @@
#: builtin/remote.c:1521 builtin/remote.c:1577 builtin/remote.c:1647
#, c-format
msgid "No such remote '%s'"
-msgstr "Kein solches Remote-Repository '%s'"
+msgstr "Remote-Repository '%s' nicht gefunden"
#: builtin/remote.c:1539
msgid "add branch"
@@ -20688,8 +21077,7 @@
#: builtin/remote.c:1632
msgid "--add --delete doesn't make sense"
-msgstr ""
-"Die Optionen --add und --delete können nicht gemeinsam verwendet werden."
+msgstr "--add und --delete können nicht gemeinsam verwendet werden"
#: builtin/remote.c:1673
#, c-format
@@ -20699,17 +21087,17 @@
#: builtin/remote.c:1681
#, c-format
msgid "No such URL found: %s"
-msgstr "Keine solche URL gefunden: %s"
+msgstr "URL nicht gefunden: %s"
#: builtin/remote.c:1683
msgid "Will not delete all non-push URLs"
msgstr "Werde keine URLs entfernen, die nicht für \"push\" bestimmt sind"
-#: builtin/repack.c:25
+#: builtin/repack.c:26
msgid "git repack [<options>]"
msgstr "git repack [<Optionen>]"
-#: builtin/repack.c:30
+#: builtin/repack.c:31
msgid ""
"Incremental repacks are incompatible with bitmap indexes. Use\n"
"--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -20718,124 +21106,124 @@
"--no-write-bitmap-index oder deaktivieren Sie die pack.writebitmaps\n"
"Konfiguration."
-#: builtin/repack.c:197
+#: builtin/repack.c:198
msgid "could not start pack-objects to repack promisor objects"
msgstr ""
"Konnte 'pack-objects' für das Neupacken von Objekten aus partiell geklonten\n"
"Remote-Repositories nicht starten."
-#: builtin/repack.c:268 builtin/repack.c:447
+#: builtin/repack.c:270 builtin/repack.c:446
msgid "repack: Expecting full hex object ID lines only from pack-objects."
msgstr ""
"repack: Erwarte Zeilen mit vollständiger Hex-Objekt-ID nur von pack-objects."
-#: builtin/repack.c:295
+#: builtin/repack.c:294
msgid "could not finish pack-objects to repack promisor objects"
msgstr ""
"Konnte 'pack-objects' für das Neupacken von Objekten aus partiell geklonten\n"
"Remote-Repositories nicht abschließen."
-#: builtin/repack.c:323
+#: builtin/repack.c:322
msgid "pack everything in a single pack"
msgstr "alles in eine einzige Pack-Datei packen"
-#: builtin/repack.c:325
+#: builtin/repack.c:324
msgid "same as -a, and turn unreachable objects loose"
msgstr "genau wie -a, unerreichbare Objekte werden aber nicht gelöscht"
-#: builtin/repack.c:328
+#: builtin/repack.c:327
msgid "remove redundant packs, and run git-prune-packed"
msgstr "redundante Pakete entfernen und \"git-prune-packed\" ausführen"
-#: builtin/repack.c:330
+#: builtin/repack.c:329
msgid "pass --no-reuse-delta to git-pack-objects"
msgstr "--no-reuse-delta an git-pack-objects übergeben"
-#: builtin/repack.c:332
+#: builtin/repack.c:331
msgid "pass --no-reuse-object to git-pack-objects"
msgstr "--no-reuse-object an git-pack-objects übergeben"
-#: builtin/repack.c:334
+#: builtin/repack.c:333
msgid "do not run git-update-server-info"
msgstr "git-update-server-info nicht ausführen"
-#: builtin/repack.c:337
+#: builtin/repack.c:336
msgid "pass --local to git-pack-objects"
msgstr "--local an git-pack-objects übergeben"
-#: builtin/repack.c:339
+#: builtin/repack.c:338
msgid "write bitmap index"
msgstr "Bitmap-Index schreiben"
-#: builtin/repack.c:341
+#: builtin/repack.c:340
msgid "pass --delta-islands to git-pack-objects"
msgstr "--delta-islands an git-pack-objects übergeben"
-#: builtin/repack.c:342
+#: builtin/repack.c:341
msgid "approxidate"
msgstr "Datumsangabe"
-#: builtin/repack.c:343
+#: builtin/repack.c:342
msgid "with -A, do not loosen objects older than this"
msgstr "mit -A, keine Objekte älter als dieses Datum löschen"
-#: builtin/repack.c:345
+#: builtin/repack.c:344
msgid "with -a, repack unreachable objects"
msgstr "mit -a, nicht erreichbare Objekte neu packen"
-#: builtin/repack.c:347
+#: builtin/repack.c:346
msgid "size of the window used for delta compression"
msgstr "Größe des Fensters für die Delta-Kompression"
-#: builtin/repack.c:348 builtin/repack.c:354
+#: builtin/repack.c:347 builtin/repack.c:353
msgid "bytes"
msgstr "Bytes"
-#: builtin/repack.c:349
+#: builtin/repack.c:348
msgid "same as the above, but limit memory size instead of entries count"
msgstr ""
-"gleiches wie oben, aber die Speichergröße anstatt der\n"
-"Anzahl der Einträge limitieren"
+"gleiches wie oben, aber die Speichergröße statt der Anzahl der Einträge "
+"limitieren"
-#: builtin/repack.c:351
+#: builtin/repack.c:350
msgid "limits the maximum delta depth"
msgstr "die maximale Delta-Tiefe limitieren"
-#: builtin/repack.c:353
+#: builtin/repack.c:352
msgid "limits the maximum number of threads"
msgstr "maximale Anzahl von Threads limitieren"
-#: builtin/repack.c:355
+#: builtin/repack.c:354
msgid "maximum size of each packfile"
msgstr "maximale Größe für jede Paketdatei"
-#: builtin/repack.c:357
+#: builtin/repack.c:356
msgid "repack objects in packs marked with .keep"
msgstr ""
"Objekte umpacken, die sich in mit .keep markierten Pack-Dateien befinden"
-#: builtin/repack.c:359
+#: builtin/repack.c:358
msgid "do not repack this pack"
msgstr "dieses Paket nicht neu packen"
-#: builtin/repack.c:369
+#: builtin/repack.c:368
msgid "cannot delete packs in a precious-objects repo"
msgstr "kann Pack-Dateien in precious-objects Repository nicht löschen"
-#: builtin/repack.c:373
+#: builtin/repack.c:372
msgid "--keep-unreachable and -A are incompatible"
msgstr "--keep-unreachable und -A sind inkompatibel"
-#: builtin/repack.c:456
+#: builtin/repack.c:455
msgid "Nothing new to pack."
msgstr "Nichts Neues zum Packen."
-#: builtin/repack.c:486
+#: builtin/repack.c:485
#, c-format
msgid "missing required file: %s"
msgstr "benötigte Datei fehlt: %s"
-#: builtin/repack.c:488
+#: builtin/repack.c:487
#, c-format
msgid "could not unlink: %s"
msgstr "konnte nicht löschen: %s"
@@ -20986,7 +21374,7 @@
"instead of --graft"
msgstr ""
"Der ursprüngliche Commit '%s' enthält Merge-Tag '%s', der verworfen\n"
-"wird; benutzen Sie --edit anstatt --graft"
+"wird; benutzen Sie --edit statt --graft"
#: builtin/replace.c:469
#, c-format
@@ -21170,8 +21558,8 @@
msgid "Cannot do a %s reset in the middle of a merge."
msgstr "Kann keinen '%s'-Reset durchführen, während ein Merge im Gange ist."
-#: builtin/reset.c:295 builtin/stash.c:520 builtin/stash.c:594
-#: builtin/stash.c:618
+#: builtin/reset.c:295 builtin/stash.c:587 builtin/stash.c:661
+#: builtin/stash.c:685
msgid "be quiet, only report errors"
msgstr "weniger Ausgaben, nur Fehler melden"
@@ -21256,20 +21644,20 @@
msgid "Could not write new index file."
msgstr "Konnte neue Index-Datei nicht schreiben."
-#: builtin/rev-list.c:499
+#: builtin/rev-list.c:534
msgid "cannot combine --exclude-promisor-objects and --missing"
msgstr ""
"--exclude-promisor-objects und --missing können nicht kombiniert werden."
-#: builtin/rev-list.c:560
+#: builtin/rev-list.c:595
msgid "object filtering requires --objects"
msgstr "Das Filtern von Objekten erfordert --objects."
-#: builtin/rev-list.c:610
+#: builtin/rev-list.c:651
msgid "rev-list does not support display of notes"
msgstr "rev-list unterstützt keine Anzeige von Notizen"
-#: builtin/rev-list.c:615
+#: builtin/rev-list.c:656
msgid "marked counting is incompatible with --objects"
msgstr "markiertes Zählen ist inkompatibel mit der Option --objects"
@@ -21518,53 +21906,53 @@
msgid "git log --pretty=short | git shortlog [<options>]"
msgstr "git log --pretty=short | git shortlog [<Optionen>]"
-#: builtin/shortlog.c:135
+#: builtin/shortlog.c:123
msgid "using multiple --group options with stdin is not supported"
msgstr "mehrere Optionen --group mit Standard-Eingabe wird nicht unterstützt"
-#: builtin/shortlog.c:145
+#: builtin/shortlog.c:133
msgid "using --group=trailer with stdin is not supported"
msgstr ""
"Nutzung von --group=trailer mit Standard-Eingabe wird nicht unterstützt"
-#: builtin/shortlog.c:335
+#: builtin/shortlog.c:323
#, c-format
msgid "unknown group type: %s"
msgstr "unbekannter Gruppen-Typ: %s"
-#: builtin/shortlog.c:363
-msgid "Group by committer rather than author"
-msgstr "über Commit-Ersteller anstatt Autor gruppieren"
+#: builtin/shortlog.c:351
+msgid "group by committer rather than author"
+msgstr "nach Commit-Ersteller statt Autor gruppieren"
-#: builtin/shortlog.c:366
+#: builtin/shortlog.c:354
msgid "sort output according to the number of commits per author"
msgstr "die Ausgabe entsprechend der Anzahl von Commits pro Autor sortieren"
-#: builtin/shortlog.c:368
-msgid "Suppress commit descriptions, only provides commit count"
+#: builtin/shortlog.c:356
+msgid "suppress commit descriptions, only provides commit count"
msgstr "Commit-Beschreibungen unterdrücken, nur Anzahl der Commits liefern"
-#: builtin/shortlog.c:370
-msgid "Show the email address of each author"
-msgstr "die E-Mail-Adresse von jedem Autor anzeigen"
+#: builtin/shortlog.c:358
+msgid "show the email address of each author"
+msgstr "die E-Mail-Adresse jedes Autors anzeigen"
-#: builtin/shortlog.c:371
+#: builtin/shortlog.c:359
msgid "<w>[,<i1>[,<i2>]]"
msgstr "<w>[,<i1>[,<i2>]]"
-#: builtin/shortlog.c:372
-msgid "Linewrap output"
+#: builtin/shortlog.c:360
+msgid "linewrap output"
msgstr "Ausgabe mit Zeilenumbrüchen"
-#: builtin/shortlog.c:374
+#: builtin/shortlog.c:362
msgid "field"
msgstr "Feld"
-#: builtin/shortlog.c:375
-msgid "Group by field"
-msgstr "Gruppieren über Feld"
+#: builtin/shortlog.c:363
+msgid "group by field"
+msgstr "Gruppieren nach Feld"
-#: builtin/shortlog.c:403
+#: builtin/shortlog.c:391
msgid "too many arguments given outside repository"
msgstr "zu viele Argumente außerhalb des Repositories angegeben"
@@ -21674,14 +22062,14 @@
#: builtin/show-branch.c:738
msgid "--reflog option needs one branch name"
-msgstr "Die Option --reflog benötigt einen Branchnamen."
+msgstr "die Option --reflog benötigt einen Branchnamen"
#: builtin/show-branch.c:741
#, c-format
msgid "only %d entry can be shown at one time."
msgid_plural "only %d entries can be shown at one time."
-msgstr[0] "nur %d Eintrag kann zur selben Zeit angezeigt werden"
-msgstr[1] "nur %d Einträge können zur selben Zeit angezeigt werden"
+msgstr[0] "nur %d Eintrag kann zur selben Zeit angezeigt werden."
+msgstr[1] "nur %d Einträge können zur selben Zeit angezeigt werden."
#: builtin/show-branch.c:745
#, c-format
@@ -21765,76 +22153,76 @@
msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
msgstr "git sparse-checkout (init|list|set|add|reapply|disable) <Optionen>"
-#: builtin/sparse-checkout.c:50
+#: builtin/sparse-checkout.c:45
msgid "git sparse-checkout list"
msgstr "git sparse-checkout list"
-#: builtin/sparse-checkout.c:76
+#: builtin/sparse-checkout.c:71
msgid "this worktree is not sparse (sparse-checkout file may not exist)"
msgstr ""
"dieses Arbeitsverzeichnis ist nicht partiell (Datei für partieller Checkout "
"existiert eventuell nicht)"
-#: builtin/sparse-checkout.c:228
+#: builtin/sparse-checkout.c:223
msgid "failed to create directory for sparse-checkout file"
msgstr ""
"Fehler beim Erstellen eines Verzeichnisses für Datei eines partiellen "
"Checkouts"
-#: builtin/sparse-checkout.c:269
+#: builtin/sparse-checkout.c:264
msgid "unable to upgrade repository format to enable worktreeConfig"
msgstr ""
"Repository-Format konnte nicht erweitert werden, um worktreeConfig zu "
"aktivieren"
-#: builtin/sparse-checkout.c:271
+#: builtin/sparse-checkout.c:266
msgid "failed to set extensions.worktreeConfig setting"
msgstr "Einstellung für extensions.worktreeConfig konnte nicht gesetzt werden"
-#: builtin/sparse-checkout.c:288
+#: builtin/sparse-checkout.c:283
msgid "git sparse-checkout init [--cone]"
msgstr "git sparse-checkout init [--cone]"
-#: builtin/sparse-checkout.c:307
+#: builtin/sparse-checkout.c:302
msgid "initialize the sparse-checkout in cone mode"
msgstr "initialisiere den partiellen Checkout im Cone-Modus"
-#: builtin/sparse-checkout.c:344
+#: builtin/sparse-checkout.c:339
#, c-format
msgid "failed to open '%s'"
msgstr "Fehler beim Öffnen von '%s'"
-#: builtin/sparse-checkout.c:401
+#: builtin/sparse-checkout.c:396
#, c-format
msgid "could not normalize path %s"
msgstr "konnte Pfad '%s' nicht normalisieren"
-#: builtin/sparse-checkout.c:413
+#: builtin/sparse-checkout.c:408
msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
msgstr "git sparse-checkout (set|add) (--stdin | <Muster>)"
-#: builtin/sparse-checkout.c:438
+#: builtin/sparse-checkout.c:433
#, c-format
msgid "unable to unquote C-style string '%s'"
msgstr "konnte Anführungszeichen von C-Style Zeichenkette '%s' nicht entfernen"
-#: builtin/sparse-checkout.c:492 builtin/sparse-checkout.c:516
+#: builtin/sparse-checkout.c:487 builtin/sparse-checkout.c:511
msgid "unable to load existing sparse-checkout patterns"
msgstr "konnte die existierenden Muster des partiellen Checkouts nicht laden"
-#: builtin/sparse-checkout.c:561
+#: builtin/sparse-checkout.c:556
msgid "read patterns from standard in"
msgstr "Muster von der Standard-Eingabe lesen"
-#: builtin/sparse-checkout.c:576
+#: builtin/sparse-checkout.c:571
msgid "git sparse-checkout reapply"
msgstr "git sparse-checkout reapply"
-#: builtin/sparse-checkout.c:595
+#: builtin/sparse-checkout.c:590
msgid "git sparse-checkout disable"
msgstr "git sparse-checkout disable"
-#: builtin/sparse-checkout.c:623
+#: builtin/sparse-checkout.c:618
msgid "error while refreshing working directory"
msgstr "Fehler während der Aktualisierung des Arbeitsverzeichnisses."
@@ -21924,156 +22312,168 @@
msgstr "'%s' ist kein gültiger Referenzname."
#: builtin/stash.c:225
-msgid "git stash clear with parameters is unimplemented"
+msgid "git stash clear with arguments is unimplemented"
msgstr "git stash clear mit Parametern ist nicht implementiert"
-#: builtin/stash.c:404
+#: builtin/stash.c:429
+#, c-format
+msgid ""
+"WARNING: Untracked file in way of tracked file! Renaming\n"
+" %s -> %s\n"
+" to make room.\n"
+msgstr ""
+"WARNUNG: Nicht versionierte Datei im Weg von versionierter Datei! "
+"Umbenennung\n"
+" %s -> %s\n"
+" um Platz zu schaffen.\n"
+
+#: builtin/stash.c:490
msgid "cannot apply a stash in the middle of a merge"
msgstr "Kann Stash nicht anwenden, solange ein Merge im Gange ist"
-#: builtin/stash.c:415
+#: builtin/stash.c:501
#, c-format
msgid "could not generate diff %s^!."
msgstr "Konnte keinen Diff erzeugen %s^!."
-#: builtin/stash.c:422
+#: builtin/stash.c:508
msgid "conflicts in index. Try without --index."
msgstr "Konflikte im Index. Versuchen Sie es ohne --index."
-#: builtin/stash.c:428
+#: builtin/stash.c:514
msgid "could not save index tree"
msgstr "Konnte Index-Verzeichnis nicht speichern"
-#: builtin/stash.c:437
+#: builtin/stash.c:523
msgid "could not restore untracked files from stash"
msgstr "Konnte unversionierte Dateien vom Stash nicht wiederherstellen."
-#: builtin/stash.c:451
+#: builtin/stash.c:537
#, c-format
msgid "Merging %s with %s"
msgstr "Führe %s mit %s zusammen"
-#: builtin/stash.c:461
+#: builtin/stash.c:547
msgid "Index was not unstashed."
msgstr "Index wurde nicht aus dem Stash zurückgeladen."
-#: builtin/stash.c:522 builtin/stash.c:620
+#: builtin/stash.c:589 builtin/stash.c:687
msgid "attempt to recreate the index"
msgstr "Versuche Index wiederherzustellen."
-#: builtin/stash.c:566
+#: builtin/stash.c:633
#, c-format
msgid "Dropped %s (%s)"
msgstr "%s (%s) gelöscht"
-#: builtin/stash.c:569
+#: builtin/stash.c:636
#, c-format
msgid "%s: Could not drop stash entry"
msgstr "%s: Konnte Stash-Eintrag nicht löschen"
-#: builtin/stash.c:582
+#: builtin/stash.c:649
#, c-format
msgid "'%s' is not a stash reference"
msgstr "'%s' ist keine Stash-Referenz"
-#: builtin/stash.c:632
+#: builtin/stash.c:699
msgid "The stash entry is kept in case you need it again."
msgstr ""
"Der Stash-Eintrag wird für den Fall behalten, dass Sie diesen nochmal "
"benötigen."
-#: builtin/stash.c:655
+#: builtin/stash.c:722
msgid "No branch name specified"
msgstr "Kein Branchname spezifiziert"
-#: builtin/stash.c:799 builtin/stash.c:836
+#: builtin/stash.c:866 builtin/stash.c:903
#, c-format
msgid "Cannot update %s with %s"
msgstr "Kann nicht %s mit %s aktualisieren."
-#: builtin/stash.c:817 builtin/stash.c:1471 builtin/stash.c:1536
+#: builtin/stash.c:884 builtin/stash.c:1538 builtin/stash.c:1603
msgid "stash message"
msgstr "Stash-Beschreibung"
-#: builtin/stash.c:827
+#: builtin/stash.c:894
msgid "\"git stash store\" requires one <commit> argument"
msgstr "\"git stash store\" erwartet ein Argument <Commit>"
-#: builtin/stash.c:1042
+#: builtin/stash.c:1109
msgid "No changes selected"
msgstr "Keine Änderungen ausgewählt"
-#: builtin/stash.c:1142
+#: builtin/stash.c:1209
msgid "You do not have the initial commit yet"
msgstr "Sie haben bisher noch keinen initialen Commit"
-#: builtin/stash.c:1169
+#: builtin/stash.c:1236
msgid "Cannot save the current index state"
msgstr "Kann den aktuellen Zustand des Index nicht speichern"
-#: builtin/stash.c:1178
+#: builtin/stash.c:1245
msgid "Cannot save the untracked files"
msgstr "Kann die unversionierten Dateien nicht speichern"
-#: builtin/stash.c:1189 builtin/stash.c:1198
+#: builtin/stash.c:1256 builtin/stash.c:1265
msgid "Cannot save the current worktree state"
msgstr "Kann den aktuellen Zustand des Arbeitsverzeichnisses nicht speichern"
-#: builtin/stash.c:1226
+#: builtin/stash.c:1293
msgid "Cannot record working tree state"
msgstr "Kann Zustand des Arbeitsverzeichnisses nicht aufzeichnen"
-#: builtin/stash.c:1275
+#: builtin/stash.c:1342
msgid "Can't use --patch and --include-untracked or --all at the same time"
msgstr ""
"Kann nicht gleichzeitig --patch und --include-untracked oder --all verwenden"
-#: builtin/stash.c:1291
+#: builtin/stash.c:1358
msgid "Did you forget to 'git add'?"
msgstr "Haben Sie vielleicht 'git add' vergessen?"
-#: builtin/stash.c:1306
+#: builtin/stash.c:1373
msgid "No local changes to save"
msgstr "Keine lokalen Änderungen zum Speichern"
-#: builtin/stash.c:1313
+#: builtin/stash.c:1380
msgid "Cannot initialize stash"
msgstr "Kann \"stash\" nicht initialisieren"
-#: builtin/stash.c:1328
+#: builtin/stash.c:1395
msgid "Cannot save the current status"
msgstr "Kann den aktuellen Status nicht speichern"
-#: builtin/stash.c:1333
+#: builtin/stash.c:1400
#, c-format
msgid "Saved working directory and index state %s"
msgstr "Arbeitsverzeichnis und Index-Status %s gespeichert."
-#: builtin/stash.c:1423
+#: builtin/stash.c:1490
msgid "Cannot remove worktree changes"
msgstr "Kann Änderungen im Arbeitsverzeichnis nicht löschen"
-#: builtin/stash.c:1462 builtin/stash.c:1527
+#: builtin/stash.c:1529 builtin/stash.c:1594
msgid "keep index"
msgstr "behalte Index"
-#: builtin/stash.c:1464 builtin/stash.c:1529
+#: builtin/stash.c:1531 builtin/stash.c:1596
msgid "stash in patch mode"
msgstr "Stash in Patch-Modus"
-#: builtin/stash.c:1465 builtin/stash.c:1530
+#: builtin/stash.c:1532 builtin/stash.c:1597
msgid "quiet mode"
msgstr "weniger Ausgaben"
-#: builtin/stash.c:1467 builtin/stash.c:1532
+#: builtin/stash.c:1534 builtin/stash.c:1599
msgid "include untracked files in stash"
msgstr "unversionierte Dateien in Stash einbeziehen"
-#: builtin/stash.c:1469 builtin/stash.c:1534
+#: builtin/stash.c:1536 builtin/stash.c:1601
msgid "include ignore files"
msgstr "ignorierte Dateien einbeziehen"
-#: builtin/stash.c:1569
+#: builtin/stash.c:1636
msgid ""
"the stash.useBuiltin support has been removed!\n"
"See its entry in 'git help config' for details."
@@ -22154,13 +22554,12 @@
"."
#: builtin/submodule--helper.c:565
-msgid "Suppress output of entering each submodule command"
-msgstr ""
-"Ausgaben beim Betreten und der Befehlsausführung in einem Submodul "
-"unterdrücken"
+msgid "suppress output of entering each submodule command"
+msgstr "Ausgaben beim Betreten eines Submodul-Befehls unterdrücken"
-#: builtin/submodule--helper.c:567 builtin/submodule--helper.c:1487
-msgid "Recurse into nested submodules"
+#: builtin/submodule--helper.c:567 builtin/submodule--helper.c:888
+#: builtin/submodule--helper.c:1487
+msgid "recurse into nested submodules"
msgstr "Rekursion in verschachtelte Submodule durchführen"
#: builtin/submodule--helper.c:572
@@ -22200,7 +22599,7 @@
"Konfiguration."
#: builtin/submodule--helper.c:709
-msgid "Suppress output for initializing a submodule"
+msgid "suppress output for initializing a submodule"
msgstr "Ausgaben bei Initialisierung eines Submoduls unterdrücken"
#: builtin/submodule--helper.c:714
@@ -22223,19 +22622,15 @@
msgstr "Fehler bei Rekursion in Submodul '%s'."
#: builtin/submodule--helper.c:886 builtin/submodule--helper.c:1623
-msgid "Suppress submodule status output"
-msgstr "Ausgabe über Submodul-Status unterdrücken"
+msgid "suppress submodule status output"
+msgstr "Ausgabe des Submodul-Status unterdrücken"
#: builtin/submodule--helper.c:887
msgid ""
-"Use commit stored in the index instead of the one stored in the submodule "
+"use commit stored in the index instead of the one stored in the submodule "
"HEAD"
msgstr ""
-"Benutze den Commit, der im Index gespeichert ist, statt den im Submodul HEAD"
-
-#: builtin/submodule--helper.c:888
-msgid "recurse into nested submodules"
-msgstr "Rekursion in verschachtelte Submodule durchführen"
+"den Commit benutzen, der im Index gespeichert ist, statt den im Submodul HEAD"
#: builtin/submodule--helper.c:893
msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
@@ -22321,7 +22716,7 @@
msgstr "Fehler beim Aktualisieren des Remote-Repositories für Submodul '%s'"
#: builtin/submodule--helper.c:1485
-msgid "Suppress output of synchronizing submodule url"
+msgid "suppress output of synchronizing submodule url"
msgstr "Ausgaben bei der Synchronisierung der Submodul-URLs unterdrücken"
#: builtin/submodule--helper.c:1492
@@ -22368,13 +22763,13 @@
msgstr "Submodul '%s' (%s) für Pfad '%s' ausgetragen.\n"
#: builtin/submodule--helper.c:1624
-msgid "Remove submodule working trees even if they contain local changes"
+msgid "remove submodule working trees even if they contain local changes"
msgstr ""
"Arbeitsverzeichnisse von Submodulen löschen, auch wenn lokale Änderungen "
"vorliegen"
#: builtin/submodule--helper.c:1625
-msgid "Unregister all submodules"
+msgid "unregister all submodules"
msgstr "alle Submodule austragen"
#: builtin/submodule--helper.c:1630
@@ -22527,11 +22922,10 @@
msgstr "rebase, merge, checkout oder none"
#: builtin/submodule--helper.c:2340
-msgid "Create a shallow clone truncated to the specified number of revisions"
+msgid "create a shallow clone truncated to the specified number of revisions"
msgstr ""
-"Erstellung eines Klons mit unvollständiger Historie (shallow), abgeschnitten "
-"bei\n"
-"der angegebenen Anzahl von Commits."
+"einen Klon mit unvollständiger Historie (shallow) erstellen, abgeschnitten "
+"bei der angegebenen Anzahl von Commits"
#: builtin/submodule--helper.c:2343
msgid "parallel jobs"
@@ -22605,7 +22999,7 @@
"Arbeitsverzeichnis befindet."
#: builtin/submodule--helper.c:2681
-msgid "Suppress output for setting url of a submodule"
+msgid "suppress output for setting url of a submodule"
msgstr "Ausgaben beim Setzen der URL eines Submoduls unterdrücken"
#: builtin/submodule--helper.c:2685
@@ -22638,7 +23032,7 @@
msgid "--branch and --default are mutually exclusive"
msgstr "--branch und --default schließen sich gegenseitig aus"
-#: builtin/submodule--helper.c:2792 git.c:438 git.c:711
+#: builtin/submodule--helper.c:2792 git.c:441 git.c:714
#, c-format
msgid "%s doesn't support --super-prefix"
msgstr "%s unterstützt kein --super-prefix"
@@ -22710,12 +23104,12 @@
msgid "tag '%s' not found."
msgstr "Tag '%s' nicht gefunden."
-#: builtin/tag.c:105
+#: builtin/tag.c:124
#, c-format
msgid "Deleted tag '%s' (was %s)\n"
msgstr "Tag '%s' gelöscht (war %s)\n"
-#: builtin/tag.c:135
+#: builtin/tag.c:159
#, c-format
msgid ""
"\n"
@@ -22728,7 +23122,7 @@
" %s\n"
"ein. Zeilen, die mit '%c' beginnen, werden ignoriert.\n"
-#: builtin/tag.c:139
+#: builtin/tag.c:163
#, c-format
msgid ""
"\n"
@@ -22743,15 +23137,11 @@
"ein. Zeilen, die mit '%c' beginnen, werden behalten; Sie dürfen diese\n"
"selbst entfernen wenn Sie möchten.\n"
-#: builtin/tag.c:198
+#: builtin/tag.c:230
msgid "unable to sign the tag"
msgstr "konnte Tag nicht signieren"
-#: builtin/tag.c:200
-msgid "unable to write tag file"
-msgstr "konnte Tag-Datei nicht schreiben"
-
-#: builtin/tag.c:216
+#: builtin/tag.c:248
#, c-format
msgid ""
"You have created a nested tag. The object referred to by your new tag is\n"
@@ -22765,138 +23155,134 @@
"\n"
"\tgit tag -f %s %s^{}"
-#: builtin/tag.c:232
+#: builtin/tag.c:264
msgid "bad object type."
msgstr "ungültiger Objekt-Typ"
-#: builtin/tag.c:285
+#: builtin/tag.c:317
msgid "no tag message?"
msgstr "keine Tag-Beschreibung?"
-#: builtin/tag.c:292
+#: builtin/tag.c:324
#, c-format
msgid "The tag message has been left in %s\n"
msgstr "Die Tag-Beschreibung wurde in %s gelassen\n"
-#: builtin/tag.c:403
+#: builtin/tag.c:435
msgid "list tag names"
msgstr "Tagnamen auflisten"
-#: builtin/tag.c:405
+#: builtin/tag.c:437
msgid "print <n> lines of each tag message"
msgstr "<n> Zeilen jeder Tag-Beschreibung anzeigen"
-#: builtin/tag.c:407
+#: builtin/tag.c:439
msgid "delete tags"
msgstr "Tags löschen"
-#: builtin/tag.c:408
+#: builtin/tag.c:440
msgid "verify tags"
msgstr "Tags überprüfen"
-#: builtin/tag.c:410
+#: builtin/tag.c:442
msgid "Tag creation options"
msgstr "Optionen für Erstellung von Tags"
-#: builtin/tag.c:412
+#: builtin/tag.c:444
msgid "annotated tag, needs a message"
msgstr "annotiertes Tag, benötigt eine Beschreibung"
-#: builtin/tag.c:414
+#: builtin/tag.c:446
msgid "tag message"
msgstr "Tag-Beschreibung"
-#: builtin/tag.c:416
+#: builtin/tag.c:448
msgid "force edit of tag message"
msgstr "Bearbeitung der Tag-Beschreibung erzwingen"
-#: builtin/tag.c:417
+#: builtin/tag.c:449
msgid "annotated and GPG-signed tag"
msgstr "annotiertes und GPG-signiertes Tag"
-#: builtin/tag.c:420
+#: builtin/tag.c:452
msgid "use another key to sign the tag"
msgstr "einen anderen Schlüssel verwenden, um das Tag zu signieren"
-#: builtin/tag.c:421
+#: builtin/tag.c:453
msgid "replace the tag if exists"
msgstr "das Tag ersetzen, wenn es existiert"
-#: builtin/tag.c:422 builtin/update-ref.c:505
+#: builtin/tag.c:454 builtin/update-ref.c:505
msgid "create a reflog"
msgstr "Reflog erstellen"
-#: builtin/tag.c:424
+#: builtin/tag.c:456
msgid "Tag listing options"
msgstr "Optionen für Auflistung der Tags"
-#: builtin/tag.c:425
+#: builtin/tag.c:457
msgid "show tag list in columns"
msgstr "Liste der Tags in Spalten anzeigen"
-#: builtin/tag.c:426 builtin/tag.c:428
+#: builtin/tag.c:458 builtin/tag.c:460
msgid "print only tags that contain the commit"
msgstr "nur Tags ausgeben, die diesen Commit beinhalten"
-#: builtin/tag.c:427 builtin/tag.c:429
+#: builtin/tag.c:459 builtin/tag.c:461
msgid "print only tags that don't contain the commit"
msgstr "nur Tags ausgeben, die diesen Commit nicht enthalten"
-#: builtin/tag.c:430
+#: builtin/tag.c:462
msgid "print only tags that are merged"
msgstr "nur Tags ausgeben, die gemerged wurden"
-#: builtin/tag.c:431
+#: builtin/tag.c:463
msgid "print only tags that are not merged"
msgstr "nur Tags ausgeben, die nicht gemerged wurden"
-#: builtin/tag.c:435
+#: builtin/tag.c:467
msgid "print only tags of the object"
msgstr "nur Tags von dem Objekt ausgeben"
-#: builtin/tag.c:483
+#: builtin/tag.c:515
msgid "--column and -n are incompatible"
msgstr "--column und -n sind inkompatibel"
-#: builtin/tag.c:505
+#: builtin/tag.c:537
msgid "-n option is only allowed in list mode"
-msgstr "Die Option -n ist nur im Listenmodus erlaubt."
+msgstr "die Option -n ist nur im Listenmodus erlaubt"
-#: builtin/tag.c:507
+#: builtin/tag.c:539
msgid "--contains option is only allowed in list mode"
-msgstr "Die Option --contains ist nur im Listenmodus erlaubt."
+msgstr "--contains ist nur im Listenmodus erlaubt"
-#: builtin/tag.c:509
+#: builtin/tag.c:541
msgid "--no-contains option is only allowed in list mode"
-msgstr "Die Option --no-contains ist nur im Listenmodus erlaubt."
+msgstr "--no-contains ist nur im Listenmodus erlaubt"
-#: builtin/tag.c:511
+#: builtin/tag.c:543
msgid "--points-at option is only allowed in list mode"
-msgstr "Die Option --points-at ist nur im Listenmodus erlaubt."
+msgstr "--points-at ist nur im Listenmodus erlaubt"
-#: builtin/tag.c:513
+#: builtin/tag.c:545
msgid "--merged and --no-merged options are only allowed in list mode"
-msgstr "Die Optionen --merged und --no-merged sind nur im Listenmodus erlaubt."
+msgstr "--merged und --no-merged sind nur im Listenmodus erlaubt"
-#: builtin/tag.c:524
+#: builtin/tag.c:556
msgid "only one -F or -m option is allowed."
msgstr "nur eine -F oder -m Option ist erlaubt."
-#: builtin/tag.c:543
-msgid "too many params"
-msgstr "zu viele Parameter"
-
-#: builtin/tag.c:549
+#: builtin/tag.c:581
#, c-format
msgid "'%s' is not a valid tag name."
msgstr "'%s' ist kein gültiger Tagname."
-#: builtin/tag.c:554
+#: builtin/tag.c:586
#, c-format
msgid "tag '%s' already exists"
msgstr "Tag '%s' existiert bereits"
-#: builtin/tag.c:585
+#: builtin/tag.c:617
#, c-format
msgid "Updated tag '%s' (was %s)\n"
msgstr "Tag '%s' aktualisiert (war %s)\n"
@@ -23122,24 +23508,24 @@
"core.splitIndex is set to false; remove or change it, if you really want to "
"enable split index"
msgstr ""
-"core.splitIndex ist auf 'false' gesetzt. Entfernen oder ändern Sie dies,\n"
-"wenn sie wirklich das Splitting des Index aktivieren möchten."
+"core.splitIndex ist auf 'false' gesetzt; entfernen oder ändern Sie dies,\n"
+"wenn sie wirklich das Splitting des Index aktivieren möchten"
#: builtin/update-index.c:1182
msgid ""
"core.splitIndex is set to true; remove or change it, if you really want to "
"disable split index"
msgstr ""
-"core.splitIndex ist auf 'true' gesetzt. Entfernen oder ändern Sie dies,\n"
-"wenn Sie wirklich das Splitting des Index deaktivieren möchten."
+"core.splitIndex ist auf 'true' gesetzt; entfernen oder ändern Sie dies,\n"
+"wenn Sie wirklich das Splitting des Index deaktivieren möchten"
#: builtin/update-index.c:1194
msgid ""
"core.untrackedCache is set to true; remove or change it, if you really want "
"to disable the untracked cache"
msgstr ""
-"core.untrackedCache ist auf 'true' gesetzt. Entfernen oder ändern Sie dies,\n"
-"wenn Sie wirklich den Cache für unversionierte Dateien deaktivieren möchten."
+"core.untrackedCache ist auf 'true' gesetzt; entfernen oder ändern Sie dies,\n"
+"wenn Sie wirklich den Cache für unversionierte Dateien deaktivieren möchten"
#: builtin/update-index.c:1198
msgid "Untracked cache disabled"
@@ -23150,9 +23536,9 @@
"core.untrackedCache is set to false; remove or change it, if you really want "
"to enable the untracked cache"
msgstr ""
-"core.untrackedCache ist auf 'false' gesetzt. Entfernen oder ändern Sie "
+"core.untrackedCache ist auf 'false' gesetzt; entfernen oder ändern Sie "
"dies,\n"
-"wenn sie wirklich den Cache für unversionierte Dateien aktivieren möchten."
+"wenn sie wirklich den Cache für unversionierte Dateien aktivieren möchten"
#: builtin/update-index.c:1210
#, c-format
@@ -23162,9 +23548,9 @@
#: builtin/update-index.c:1218
msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
msgstr ""
-"core.fsmonitor nicht gesetzt. Setzen Sie es, wenn Sie den Dateisystem-"
+"core.fsmonitor nicht gesetzt; setzen Sie es, wenn Sie den Dateisystem-"
"Monitor\n"
-"wirklich aktivieren möchten."
+"wirklich aktivieren möchten"
#: builtin/update-index.c:1222
msgid "fsmonitor enabled"
@@ -23174,7 +23560,7 @@
msgid ""
"core.fsmonitor is set; remove it if you really want to disable fsmonitor"
msgstr ""
-"core.fsmonitor ist gesetzt. Löschen Sie es, wenn Sie den Dateisystem-"
+"core.fsmonitor ist gesetzt; löschen Sie es, wenn Sie den Dateisystem-"
"Monitor\n"
"wirklich deaktivieren möchten."
@@ -23273,89 +23659,63 @@
msgid "print tag contents"
msgstr "Tag-Inhalte ausgeben"
-#: builtin/worktree.c:17
+#: builtin/worktree.c:18
msgid "git worktree add [<options>] <path> [<commit-ish>]"
msgstr "git worktree add [<Optionen>] <Pfad> [<Commit-Angabe>]"
-#: builtin/worktree.c:18
+#: builtin/worktree.c:19
msgid "git worktree list [<options>]"
msgstr "git worktree list [<Optionen>]"
-#: builtin/worktree.c:19
+#: builtin/worktree.c:20
msgid "git worktree lock [<options>] <path>"
msgstr "git worktree lock [<Optionen>] <Pfad>"
-#: builtin/worktree.c:20
+#: builtin/worktree.c:21
msgid "git worktree move <worktree> <new-path>"
msgstr "git worktree move <Arbeitsverzeichnis> <neuer-Pfad>"
-#: builtin/worktree.c:21
+#: builtin/worktree.c:22
msgid "git worktree prune [<options>]"
msgstr "git worktree prune [<Optionen>]"
-#: builtin/worktree.c:22
+#: builtin/worktree.c:23
msgid "git worktree remove [<options>] <worktree>"
msgstr "git worktree remove [<Optionen>] <Arbeitsverzeichnis>"
-#: builtin/worktree.c:23
+#: builtin/worktree.c:24
msgid "git worktree unlock <path>"
msgstr "git worktree unlock <Pfad>"
-#: builtin/worktree.c:60 builtin/worktree.c:973
+#: builtin/worktree.c:61 builtin/worktree.c:933
#, c-format
msgid "failed to delete '%s'"
msgstr "Fehler beim Löschen von '%s'"
-#: builtin/worktree.c:85
-msgid "not a valid directory"
-msgstr "kein gültiges Verzeichnis"
-
-#: builtin/worktree.c:91
-msgid "gitdir file does not exist"
-msgstr "gitdir-Datei existiert nicht"
-
-#: builtin/worktree.c:96 builtin/worktree.c:105
-#, c-format
-msgid "unable to read gitdir file (%s)"
-msgstr "konnte gitdir-Datei nicht lesen (%s)"
-
-#: builtin/worktree.c:115
-#, c-format
-msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
-msgstr "read() zu kurz (%<PRIuMAX> Bytes erwartet, %<PRIuMAX> gelesen)"
-
-#: builtin/worktree.c:123
-msgid "invalid gitdir file"
-msgstr "ungültige gitdir-Datei"
-
-#: builtin/worktree.c:131
-msgid "gitdir file points to non-existent location"
-msgstr "gitdir-Datei verweist auf nicht existierenden Ort"
-
-#: builtin/worktree.c:146
+#: builtin/worktree.c:74
#, c-format
msgid "Removing %s/%s: %s"
msgstr "Entferne %s/%s: %s"
-#: builtin/worktree.c:221
+#: builtin/worktree.c:149
msgid "report pruned working trees"
msgstr "entfernte Arbeitsverzeichnisse ausgeben"
-#: builtin/worktree.c:223
+#: builtin/worktree.c:151
msgid "expire working trees older than <time>"
msgstr "Arbeitsverzeichnisse älter als <Zeit> verfallen lassen"
-#: builtin/worktree.c:293
+#: builtin/worktree.c:221
#, c-format
msgid "'%s' already exists"
msgstr "'%s' existiert bereits"
-#: builtin/worktree.c:302
+#: builtin/worktree.c:230
#, c-format
msgid "unusable worktree destination '%s'"
msgstr "nicht nutzbares Ziel des Arbeitsverzeichnisses '%s'"
-#: builtin/worktree.c:307
+#: builtin/worktree.c:235
#, c-format
msgid ""
"'%s' is a missing but locked worktree;\n"
@@ -23365,7 +23725,7 @@
"Benutzen Sie '%s -f -f' zum Überschreiben, oder 'unlock' und 'prune'\n"
"oder 'remove' zum Löschen."
-#: builtin/worktree.c:309
+#: builtin/worktree.c:237
#, c-format
msgid ""
"'%s' is a missing but already registered worktree;\n"
@@ -23375,124 +23735,137 @@
"Benutzen Sie '%s -f' zum Überschreiben, oder 'prune' oder 'remove' zum\n"
"Löschen."
-#: builtin/worktree.c:360
+#: builtin/worktree.c:288
#, c-format
msgid "could not create directory of '%s'"
msgstr "Konnte Verzeichnis '%s' nicht erstellen."
-#: builtin/worktree.c:494 builtin/worktree.c:500
+#: builtin/worktree.c:422 builtin/worktree.c:428
#, c-format
msgid "Preparing worktree (new branch '%s')"
msgstr "Bereite Arbeitsverzeichnis vor (neuer Branch '%s')"
-#: builtin/worktree.c:496
+#: builtin/worktree.c:424
#, c-format
msgid "Preparing worktree (resetting branch '%s'; was at %s)"
msgstr "Bereite Arbeitsverzeichnis vor (setze Branch '%s' um; war bei %s)"
-#: builtin/worktree.c:505
+#: builtin/worktree.c:433
#, c-format
msgid "Preparing worktree (checking out '%s')"
msgstr "Bereite Arbeitsverzeichnis vor (checke '%s' aus)"
-#: builtin/worktree.c:511
+#: builtin/worktree.c:439
#, c-format
msgid "Preparing worktree (detached HEAD %s)"
msgstr "Bereite Arbeitsverzeichnis vor (losgelöster HEAD %s)"
-#: builtin/worktree.c:552
+#: builtin/worktree.c:480
msgid "checkout <branch> even if already checked out in other worktree"
msgstr ""
"<Branch> auschecken, auch wenn dieser bereits in einem anderen "
"Arbeitsverzeichnis ausgecheckt ist"
-#: builtin/worktree.c:555
+#: builtin/worktree.c:483
msgid "create a new branch"
msgstr "neuen Branch erstellen"
-#: builtin/worktree.c:557
+#: builtin/worktree.c:485
msgid "create or reset a branch"
msgstr "Branch erstellen oder umsetzen"
-#: builtin/worktree.c:559
+#: builtin/worktree.c:487
msgid "populate the new working tree"
msgstr "das neue Arbeitsverzeichnis auschecken"
-#: builtin/worktree.c:560
+#: builtin/worktree.c:488
msgid "keep the new working tree locked"
msgstr "das neue Arbeitsverzeichnis gesperrt lassen"
-#: builtin/worktree.c:563
+#: builtin/worktree.c:491
msgid "set up tracking mode (see git-branch(1))"
msgstr "Modus zum Folgen von Branches einstellen (siehe git-branch(1))"
-#: builtin/worktree.c:566
+#: builtin/worktree.c:494
msgid "try to match the new branch name with a remote-tracking branch"
msgstr ""
"versuchen, eine Übereinstimmung des Branch-Namens mit einem\n"
"Remote-Tracking-Branch herzustellen"
-#: builtin/worktree.c:574
+#: builtin/worktree.c:502
msgid "-b, -B, and --detach are mutually exclusive"
msgstr "-b, -B und --detach schließen sich gegenseitig aus"
-#: builtin/worktree.c:635
+#: builtin/worktree.c:563
msgid "--[no-]track can only be used if a new branch is created"
msgstr ""
"--[no]-track kann nur verwendet werden, wenn ein neuer Branch erstellt wird."
-#: builtin/worktree.c:758
+#: builtin/worktree.c:680
+msgid "show extended annotations and reasons, if available"
+msgstr "erweiterte Anmerkungen und Gründe anzeigen, falls vorhanden"
+
+#: builtin/worktree.c:682
+msgid "add 'prunable' annotation to worktrees older than <time>"
+msgstr ""
+"'prunable'-Anmerkung zu Arbeitsverzeichnissen älter als <Zeit> hinzufügen"
+
+#: builtin/worktree.c:691
+msgid "--verbose and --porcelain are mutually exclusive"
+msgstr "--verbose und --porcelain schließen sich gegenseitig aus"
+
+#: builtin/worktree.c:718
msgid "reason for locking"
msgstr "Sperrgrund"
-#: builtin/worktree.c:770 builtin/worktree.c:803 builtin/worktree.c:877
-#: builtin/worktree.c:1001
+#: builtin/worktree.c:730 builtin/worktree.c:763 builtin/worktree.c:837
+#: builtin/worktree.c:961
#, c-format
msgid "'%s' is not a working tree"
msgstr "'%s' ist kein Arbeitsverzeichnis"
-#: builtin/worktree.c:772 builtin/worktree.c:805
+#: builtin/worktree.c:732 builtin/worktree.c:765
msgid "The main working tree cannot be locked or unlocked"
msgstr "Das Hauptarbeitsverzeichnis kann nicht gesperrt oder entsperrt werden."
-#: builtin/worktree.c:777
+#: builtin/worktree.c:737
#, c-format
msgid "'%s' is already locked, reason: %s"
msgstr "'%s' ist bereits gesperrt, Grund: %s"
-#: builtin/worktree.c:779
+#: builtin/worktree.c:739
#, c-format
msgid "'%s' is already locked"
msgstr "'%s' ist bereits gesperrt"
-#: builtin/worktree.c:807
+#: builtin/worktree.c:767
#, c-format
msgid "'%s' is not locked"
msgstr "'%s' ist nicht gesperrt"
-#: builtin/worktree.c:848
+#: builtin/worktree.c:808
msgid "working trees containing submodules cannot be moved or removed"
msgstr ""
"Arbeitsverzeichnisse, die Submodule enthalten, können nicht verschoben oder\n"
"entfernt werden."
-#: builtin/worktree.c:856
+#: builtin/worktree.c:816
msgid "force move even if worktree is dirty or locked"
msgstr ""
"Verschieben erzwingen, auch wenn das Arbeitsverzeichnis geändert oder "
"gesperrt ist"
-#: builtin/worktree.c:879 builtin/worktree.c:1003
+#: builtin/worktree.c:839 builtin/worktree.c:963
#, c-format
msgid "'%s' is a main working tree"
msgstr "'%s' ist ein Hauptarbeitsverzeichnis"
-#: builtin/worktree.c:884
+#: builtin/worktree.c:844
#, c-format
msgid "could not figure out destination name from '%s'"
msgstr "Konnte Zielname aus '%s' nicht bestimmen."
-#: builtin/worktree.c:897
+#: builtin/worktree.c:857
#, c-format
msgid ""
"cannot move a locked working tree, lock reason: %s\n"
@@ -23502,7 +23875,7 @@
"Benutzen Sie 'move -f -f' zum Überschreiben oder entsperren Sie zuerst\n"
"das Arbeitsverzeichnis."
-#: builtin/worktree.c:899
+#: builtin/worktree.c:859
msgid ""
"cannot move a locked working tree;\n"
"use 'move -f -f' to override or unlock first"
@@ -23511,40 +23884,40 @@
"Benutzen Sie 'move -f -f' zum Überschreiben oder entsperren Sie zuerst\n"
"das Arbeitsverzeichnis."
-#: builtin/worktree.c:902
+#: builtin/worktree.c:862
#, c-format
msgid "validation failed, cannot move working tree: %s"
msgstr "Validierung fehlgeschlagen, kann Arbeitszeichnis nicht verschieben: %s"
-#: builtin/worktree.c:907
+#: builtin/worktree.c:867
#, c-format
msgid "failed to move '%s' to '%s'"
msgstr "Fehler beim Verschieben von '%s' nach '%s'"
-#: builtin/worktree.c:953
+#: builtin/worktree.c:913
#, c-format
msgid "failed to run 'git status' on '%s'"
msgstr "Fehler beim Ausführen von 'git status' auf '%s'"
-#: builtin/worktree.c:957
+#: builtin/worktree.c:917
#, c-format
msgid "'%s' contains modified or untracked files, use --force to delete it"
msgstr ""
"'%s' enthält geänderte oder nicht versionierte Dateien, benutzen Sie --force "
"zum Löschen"
-#: builtin/worktree.c:962
+#: builtin/worktree.c:922
#, c-format
msgid "failed to run 'git status' on '%s', code %d"
msgstr "Fehler beim Ausführen von 'git status' auf '%s'. Code: %d"
-#: builtin/worktree.c:985
+#: builtin/worktree.c:945
msgid "force removal even if worktree is dirty or locked"
msgstr ""
"Löschen erzwingen, auch wenn das Arbeitsverzeichnis geändert oder gesperrt "
"ist"
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:968
#, c-format
msgid ""
"cannot remove a locked working tree, lock reason: %s\n"
@@ -23554,7 +23927,7 @@
"Benutzen Sie 'remove -f -f' zum Überschreiben oder entsperren Sie zuerst\n"
"das Arbeitsverzeichnis."
-#: builtin/worktree.c:1010
+#: builtin/worktree.c:970
msgid ""
"cannot remove a locked working tree;\n"
"use 'remove -f -f' to override or unlock first"
@@ -23563,17 +23936,17 @@
"Benutzen Sie 'remove -f -f' zum Überschreiben oder entsperren Sie zuerst\n"
"das Arbeitsverzeichnis."
-#: builtin/worktree.c:1013
+#: builtin/worktree.c:973
#, c-format
msgid "validation failed, cannot remove working tree: %s"
msgstr "Validierung fehlgeschlagen, kann Arbeitsverzeichnis nicht löschen: %s"
-#: builtin/worktree.c:1037
+#: builtin/worktree.c:997
#, c-format
msgid "repair: %s: %s"
msgstr "repariere: %s: %s"
-#: builtin/worktree.c:1040
+#: builtin/worktree.c:1000
#, c-format
msgid "error: %s: %s"
msgstr "Fehler: %s: %s"
@@ -23594,15 +23967,23 @@
msgid "only useful for debugging"
msgstr "nur nützlich für Fehlersuche"
-#: http-fetch.c:114
+#: http-fetch.c:118
#, c-format
msgid "argument to --packfile must be a valid hash (got '%s')"
msgstr "Argument für --packfile muss ein gültiger Hash sein ('%s' erhalten)"
-#: http-fetch.c:122
+#: http-fetch.c:128
msgid "not a git repository"
msgstr "kein Git-Repository"
+#: http-fetch.c:134
+msgid "--packfile requires --index-pack-args"
+msgstr "--packfile benötigt --index-pack-args"
+
+#: http-fetch.c:143
+msgid "--index-pack-args can only be used with --packfile"
+msgstr "--index-pack-args kann nur mit --packfile benutzt werden"
+
#: t/helper/test-fast-rebase.c:141
msgid "unhandled options"
msgstr "unbehandelte Optionen"
@@ -23635,6 +24016,7 @@
" [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--"
"bare]\n"
" [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
+" [--super-prefix=<path>] [--config-env=<name>=<envvar>]\n"
" <command> [<args>]"
msgstr ""
"git [--version] [--help] [-C <Pfad>] [-c <Name>=<Wert>]\n"
@@ -23642,9 +24024,10 @@
" [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--"
"bare]\n"
" [--git-dir=<Pfad>] [--work-tree=<Pfad>] [--namespace=<Name>]\n"
+" [--super-prefix=<Pfad>] [--config-env=<Name>=<Variable>]\n"
" <Befehl> [<Argumente>]"
-#: git.c:35
+#: git.c:36
msgid ""
"'git help -a' and 'git help -g' list available subcommands and some\n"
"concept guides. See 'git help <command>' or 'git help <concept>'\n"
@@ -23657,47 +24040,47 @@
"Konzept zu erfahren.\n"
"Benutzen Sie 'git help git' für einen Überblick des Systems."
-#: git.c:187
+#: git.c:188
#, c-format
msgid "no directory given for --git-dir\n"
msgstr "Kein Verzeichnis für --git-dir angegeben.\n"
-#: git.c:201
+#: git.c:202
#, c-format
msgid "no namespace given for --namespace\n"
msgstr "Kein Namespace für --namespace angegeben.\n"
-#: git.c:215
+#: git.c:216
#, c-format
msgid "no directory given for --work-tree\n"
msgstr "Kein Verzeichnis für --work-tree angegeben.\n"
-#: git.c:229
+#: git.c:230
#, c-format
msgid "no prefix given for --super-prefix\n"
msgstr "Kein Präfix für --super-prefix angegeben.\n"
-#: git.c:251
+#: git.c:252
#, c-format
msgid "-c expects a configuration string\n"
msgstr "-c erwartet einen Konfigurationsstring.\n"
-#: git.c:289
+#: git.c:292
#, c-format
msgid "no directory given for -C\n"
msgstr "Kein Verzeichnis für -C angegeben.\n"
-#: git.c:315
+#: git.c:318
#, c-format
msgid "unknown option: %s\n"
msgstr "Unbekannte Option: %s\n"
-#: git.c:364
+#: git.c:367
#, c-format
msgid "while expanding alias '%s': '%s'"
msgstr "beim Erweitern von Alias '%s': '%s'"
-#: git.c:373
+#: git.c:376
#, c-format
msgid ""
"alias '%s' changes environment variables.\n"
@@ -23706,39 +24089,39 @@
"Alias '%s' ändert Umgebungsvariablen.\n"
"Sie können '!git' im Alias benutzen, um dies zu tun."
-#: git.c:380
+#: git.c:383
#, c-format
msgid "empty alias for %s"
msgstr "leerer Alias für %s"
-#: git.c:383
+#: git.c:386
#, c-format
msgid "recursive alias: %s"
msgstr "rekursiver Alias: %s"
-#: git.c:465
+#: git.c:468
msgid "write failure on standard output"
msgstr "Fehler beim Schreiben in die Standard-Ausgabe."
-#: git.c:467
+#: git.c:470
msgid "unknown write failure on standard output"
msgstr "Unbekannter Fehler beim Schreiben in die Standard-Ausgabe."
-#: git.c:469
+#: git.c:472
msgid "close failed on standard output"
msgstr "Fehler beim Schließen der Standard-Ausgabe."
-#: git.c:820
+#: git.c:823
#, c-format
msgid "alias loop detected: expansion of '%s' does not terminate:%s"
msgstr "Alias-Schleife erkannt: Erweiterung von '%s' schließt nicht ab:%s"
-#: git.c:870
+#: git.c:873
#, c-format
msgid "cannot handle %s as a builtin"
msgstr "Kann %s nicht als eingebauten Befehl behandeln."
-#: git.c:883
+#: git.c:886
#, c-format
msgid ""
"usage: %s\n"
@@ -23747,12 +24130,12 @@
"Verwendung: %s\n"
"\n"
-#: git.c:903
+#: git.c:906
#, c-format
msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
-msgstr "Erweiterung von Alias '%s' fehlgeschlagen; '%s' ist kein Git-Befehl.\n"
+msgstr "Erweiterung von Alias '%s' fehlgeschlagen; '%s' ist kein Git-Befehl\n"
-#: git.c:915
+#: git.c:918
#, c-format
msgid "failed to run command '%s': %s\n"
msgstr "Fehler beim Ausführen von Befehl '%s': %s\n"
@@ -23819,17 +24202,17 @@
#: remote-curl.c:408
msgid "invalid server response; expected service, got flush packet"
-msgstr "Ungültige Antwort des Servers. Service erwartet, Flush-Paket bekommen"
+msgstr "ungültige Antwort des Servers; Service erwartet, Flush-Paket bekommen"
#: remote-curl.c:439
#, c-format
msgid "invalid server response; got '%s'"
-msgstr "Ungültige Serverantwort; '%s' bekommen"
+msgstr "ungültige Serverantwort; '%s' bekommen"
#: remote-curl.c:499
#, c-format
msgid "repository '%s' not found"
-msgstr "Repository '%s' nicht gefunden."
+msgstr "Repository '%s' nicht gefunden"
#: remote-curl.c:503
#, c-format
@@ -23992,11 +24375,11 @@
msgstr ""
"Mit der Option --pathspec-from-file sind Pfade durch NUL-Zeichen getrennt"
-#: ref-filter.h:96
+#: ref-filter.h:99
msgid "key"
msgstr "Schüssel"
-#: ref-filter.h:96
+#: ref-filter.h:99
msgid "field name to sort on"
msgstr "sortiere nach diesem Feld"
@@ -24005,14 +24388,6 @@
msgstr ""
"Index, wenn möglich, mit wiederverwendeter Konfliktauflösung aktualisieren"
-#: wt-status.h:80
-msgid "HEAD detached at "
-msgstr "HEAD losgelöst bei "
-
-#: wt-status.h:81
-msgid "HEAD detached from "
-msgstr "HEAD losgelöst von "
-
#: command-list.h:50
msgid "Add file contents to the index"
msgstr "Dateiinhalte zum Commit vormerken"
@@ -24365,8 +24740,8 @@
msgstr "multi-pack-indexes schreiben und überprüfen"
#: command-list.h:132
-msgid "Creates a tag object"
-msgstr "ein Tag-Objekt erstellen"
+msgid "Creates a tag object with extra validation"
+msgstr "Erstellt ein Tag-Objekt mit zusätzlicher Validierung"
#: command-list.h:133
msgid "Build a tree-object from ls-tree formatted text"
@@ -24683,69 +25058,55 @@
msgstr "Spezifikation von bewusst ignorierten, unversionierten Dateien"
#: command-list.h:209
+msgid "Map author/committer names and/or E-Mail addresses"
+msgstr "Autor/Commit-Ersteller und/oder E-Mail-Adressen zuordnen"
+
+#: command-list.h:210
msgid "Defining submodule properties"
msgstr "Definition von Submodul-Eigenschaften"
-#: command-list.h:210
+#: command-list.h:211
msgid "Git namespaces"
msgstr "Git Namensbereiche"
-#: command-list.h:211
+#: command-list.h:212
msgid "Helper programs to interact with remote repositories"
msgstr "Hilfsprogramme zur Interaktion mit Remote-Repositories"
-#: command-list.h:212
+#: command-list.h:213
msgid "Git Repository Layout"
msgstr "Git Repository Aufbau"
-#: command-list.h:213
+#: command-list.h:214
msgid "Specifying revisions and ranges for Git"
msgstr "Spezifikation von Commits und Bereichen für Git"
-#: command-list.h:214
+#: command-list.h:215
msgid "Mounting one repository inside another"
msgstr "Einbinden eines Repositories in ein anderes"
-#: command-list.h:215
+#: command-list.h:216
msgid "A tutorial introduction to Git: part two"
msgstr "eine einführende Anleitung zu Git: Teil zwei"
-#: command-list.h:216
+#: command-list.h:217
msgid "A tutorial introduction to Git"
msgstr "eine einführende Anleitung zu Git"
-#: command-list.h:217
+#: command-list.h:218
msgid "An overview of recommended workflows with Git"
msgstr "Eine Übersicht über empfohlene Arbeitsabläufe mit Git"
-#: git-bisect.sh:48
-#, sh-format
-msgid "Bad rev input: $arg"
-msgstr "Ungültige Referenz-Eingabe: $arg"
-
-#: git-bisect.sh:82
-msgid "No logfile given"
-msgstr "Keine Log-Datei gegeben"
-
-#: git-bisect.sh:83
-#, sh-format
-msgid "cannot read $file for replaying"
-msgstr "kann $file nicht für das Abspielen lesen"
-
-#: git-bisect.sh:105
-msgid "?? what are you talking about?"
-msgstr "?? Was reden Sie da?"
-
-#: git-bisect.sh:115
+#: git-bisect.sh:68
msgid "bisect run failed: no command provided."
msgstr "'bisect run' fehlgeschlagen: kein Befehl angegeben."
-#: git-bisect.sh:120
+#: git-bisect.sh:73
#, sh-format
msgid "running $command"
msgstr "führe $command aus"
-#: git-bisect.sh:127
+#: git-bisect.sh:80
#, sh-format
msgid ""
"bisect run failed:\n"
@@ -24754,11 +25115,11 @@
"'bisect run' fehlgeschlagen:\n"
"Exit-Code $res von '$command' ist < 0 oder >= 128"
-#: git-bisect.sh:152
+#: git-bisect.sh:105
msgid "bisect run cannot continue any more"
msgstr "'bisect run' kann nicht mehr fortgesetzt werden"
-#: git-bisect.sh:158
+#: git-bisect.sh:111
#, sh-format
msgid ""
"bisect run failed:\n"
@@ -24767,14 +25128,10 @@
"'bisect run' fehlgeschlagen:\n"
"'bisect-state $state' wurde mit Fehlerwert $res beendet"
-#: git-bisect.sh:165
+#: git-bisect.sh:118
msgid "bisect run success"
msgstr "'bisect run' erfolgreich ausgeführt"
-#: git-bisect.sh:173
-msgid "We are not bisecting."
-msgstr "Keine binäre Suche im Gange."
-
#: git-merge-octopus.sh:46
msgid ""
"Error: Your local changes to the following files would be overwritten by "
@@ -25842,7 +26199,7 @@
"\n"
" * \"./%s\" angeben, wenn Sie eine Datei meinen, oder\n"
" * die Option --format-patch angeben, wenn Sie einen Commit-Bereich "
-"meinen\n"
+"meinen.\n"
#: git-send-email.perl:678
#, perl-format
@@ -25856,7 +26213,7 @@
"warning: no patches were sent\n"
msgstr ""
"fatal: %s: %s\n"
-"Warnung: Es wurden keine Patches versendet.\n"
+"Warnung: Es wurden keine Patches versendet\n"
#: git-send-email.perl:713
msgid ""
@@ -25865,7 +26222,7 @@
"\n"
msgstr ""
"\n"
-"keine Patch-Dateien angegeben!\n"
+"Keine Patch-Dateien angegeben!\n"
"\n"
#: git-send-email.perl:726
diff --git a/po/es.po b/po/es.po
index 41a72ca..dc895bf 100644
--- a/po/es.po
+++ b/po/es.po
@@ -7,8 +7,8 @@
msgstr ""
"Project-Id-Version: Git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2020-07-10 09:53+0800\n"
-"PO-Revision-Date: 2020-07-26 10:11-0500\n"
+"POT-Creation-Date: 2021-03-04 22:41+0800\n"
+"PO-Revision-Date: 2021-03-07 18:29-0500\n"
"Last-Translator: christopher.diaz.riv@gmail.com\n"
"Language-Team: CodeLabora <codelabora@gmail.com>\n"
"Language: es\n"
@@ -16,235 +16,235 @@
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 2.3\n"
+"X-Generator: Poedit 2.4.1\n"
-#: add-interactive.c:368
+#: add-interactive.c:376
#, c-format
msgid "Huh (%s)?"
msgstr "¿Ahh (%s)?"
-#: add-interactive.c:521 add-interactive.c:822 reset.c:65 sequencer.c:3142
-#: sequencer.c:3581 sequencer.c:3723 builtin/rebase.c:1518
-#: builtin/rebase.c:1919
+#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3292
+#: sequencer.c:3743 sequencer.c:3898 builtin/rebase.c:1538
+#: builtin/rebase.c:1963
msgid "could not read index"
msgstr "no se pudo leer índice"
-#: add-interactive.c:576 git-add--interactive.perl:269
+#: add-interactive.c:584 git-add--interactive.perl:269
#: git-add--interactive.perl:294
msgid "binary"
msgstr "binario"
-#: add-interactive.c:634 git-add--interactive.perl:278
+#: add-interactive.c:642 git-add--interactive.perl:278
#: git-add--interactive.perl:332
msgid "nothing"
msgstr "nada"
-#: add-interactive.c:635 git-add--interactive.perl:314
+#: add-interactive.c:643 git-add--interactive.perl:314
#: git-add--interactive.perl:329
msgid "unchanged"
msgstr "sin cambios"
-#: add-interactive.c:672 git-add--interactive.perl:643
+#: add-interactive.c:680 git-add--interactive.perl:641
msgid "Update"
msgstr "Actualizar"
-#: add-interactive.c:689 add-interactive.c:877
+#: add-interactive.c:697 add-interactive.c:885
#, c-format
msgid "could not stage '%s'"
msgstr "no se pudo poner en stage '%s'"
-#: add-interactive.c:695 add-interactive.c:884 reset.c:89 sequencer.c:3336
+#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3486
msgid "could not write index"
msgstr "no se pudo escribir índice"
-#: add-interactive.c:698 git-add--interactive.perl:628
+#: add-interactive.c:706 git-add--interactive.perl:626
#, c-format, perl-format
msgid "updated %d path\n"
msgid_plural "updated %d paths\n"
msgstr[0] "actualizada %d ruta\n"
msgstr[1] "actualizadas %d rutas\n"
-#: add-interactive.c:716 git-add--interactive.perl:678
+#: add-interactive.c:724 git-add--interactive.perl:676
#, c-format, perl-format
msgid "note: %s is untracked now.\n"
msgstr "nota: %s no es rastreado ahora.\n"
-#: add-interactive.c:721 apply.c:4110 builtin/checkout.c:294
+#: add-interactive.c:729 apply.c:4125 builtin/checkout.c:295
#: builtin/reset.c:145
#, c-format
msgid "make_cache_entry failed for path '%s'"
msgstr "make_cache_entry falló para la ruta '%s'"
-#: add-interactive.c:751 git-add--interactive.perl:655
+#: add-interactive.c:759 git-add--interactive.perl:653
msgid "Revert"
msgstr "Revertir"
-#: add-interactive.c:767
+#: add-interactive.c:775
msgid "Could not parse HEAD^{tree}"
-msgstr "no se pudo analizar HEAD^{tree}"
+msgstr "No se pudo analizar HEAD^{tree}"
-#: add-interactive.c:805 git-add--interactive.perl:631
+#: add-interactive.c:813 git-add--interactive.perl:629
#, c-format, perl-format
msgid "reverted %d path\n"
msgid_plural "reverted %d paths\n"
msgstr[0] "revertida %d ruta\n"
msgstr[1] "revertidas %d rutas\n"
-#: add-interactive.c:856 git-add--interactive.perl:695
+#: add-interactive.c:864 git-add--interactive.perl:693
#, c-format
msgid "No untracked files.\n"
msgstr "No hay archivos sin rastrear.\n"
-#: add-interactive.c:860 git-add--interactive.perl:689
+#: add-interactive.c:868 git-add--interactive.perl:687
msgid "Add untracked"
msgstr "Agregar no rastreados"
-#: add-interactive.c:887 git-add--interactive.perl:625
+#: add-interactive.c:895 git-add--interactive.perl:623
#, c-format, perl-format
msgid "added %d path\n"
msgid_plural "added %d paths\n"
msgstr[0] "agregada %d ruta\n"
msgstr[1] "agregadas %d rutas\n"
-#: add-interactive.c:917
+#: add-interactive.c:925
#, c-format
msgid "ignoring unmerged: %s"
msgstr "ignorando lo no fusionado: %s"
-#: add-interactive.c:929 add-patch.c:1691 git-add--interactive.perl:1368
+#: add-interactive.c:937 add-patch.c:1751 git-add--interactive.perl:1369
#, c-format
msgid "Only binary files changed.\n"
msgstr "Solo cambiaron archivos binarios.\n"
-#: add-interactive.c:931 add-patch.c:1689 git-add--interactive.perl:1370
+#: add-interactive.c:939 add-patch.c:1749 git-add--interactive.perl:1371
#, c-format
msgid "No changes.\n"
msgstr "Sin cambios.\n"
-#: add-interactive.c:935 git-add--interactive.perl:1378
+#: add-interactive.c:943 git-add--interactive.perl:1379
msgid "Patch update"
msgstr "Actualización del parche"
-#: add-interactive.c:974 git-add--interactive.perl:1771
+#: add-interactive.c:982 git-add--interactive.perl:1792
msgid "Review diff"
msgstr "Revisión de diff"
-#: add-interactive.c:1002
+#: add-interactive.c:1010
msgid "show paths with changes"
msgstr "mostrar rutas con cambios"
-#: add-interactive.c:1004
+#: add-interactive.c:1012
msgid "add working tree state to the staged set of changes"
msgstr "agregar estado del árbol de trabajo al conjunto de cambios en stage"
-#: add-interactive.c:1006
+#: add-interactive.c:1014
msgid "revert staged set of changes back to the HEAD version"
msgstr "revertir conjunto de cambios en stage a la versión de HEAD"
-#: add-interactive.c:1008
+#: add-interactive.c:1016
msgid "pick hunks and update selectively"
msgstr "elegir hunks y actualizar de forma selectiva"
-#: add-interactive.c:1010
+#: add-interactive.c:1018
msgid "view diff between HEAD and index"
msgstr "ver diff entre HEAD e index"
-#: add-interactive.c:1012
+#: add-interactive.c:1020
msgid "add contents of untracked files to the staged set of changes"
msgstr ""
"agregar contenidos de archivos sin rastrear al conjunto de cambios de stage"
-#: add-interactive.c:1020 add-interactive.c:1069
+#: add-interactive.c:1028 add-interactive.c:1077
msgid "Prompt help:"
msgstr "Mostrar ayuda:"
-#: add-interactive.c:1022
+#: add-interactive.c:1030
msgid "select a single item"
msgstr "selecciona un único objeto"
-#: add-interactive.c:1024
+#: add-interactive.c:1032
msgid "select a range of items"
msgstr "selecciona un rango de objetos"
-#: add-interactive.c:1026
+#: add-interactive.c:1034
msgid "select multiple ranges"
msgstr "selecciona multiples rangos"
-#: add-interactive.c:1028 add-interactive.c:1073
+#: add-interactive.c:1036 add-interactive.c:1081
msgid "select item based on unique prefix"
msgstr "seleccionar objeto basado en prefijo único"
-#: add-interactive.c:1030
+#: add-interactive.c:1038
msgid "unselect specified items"
msgstr "quitar objetos especificados"
-#: add-interactive.c:1032
+#: add-interactive.c:1040
msgid "choose all items"
msgstr "escoger todos los objetos"
-#: add-interactive.c:1034
+#: add-interactive.c:1042
msgid "(empty) finish selecting"
msgstr "(vacío) finalizar selección"
-#: add-interactive.c:1071
+#: add-interactive.c:1079
msgid "select a numbered item"
msgstr "selecciona un objeto numerado"
-#: add-interactive.c:1075
+#: add-interactive.c:1083
msgid "(empty) select nothing"
msgstr "(vacío) selecciona nada"
-#: add-interactive.c:1083 builtin/clean.c:816 git-add--interactive.perl:1868
+#: add-interactive.c:1091 builtin/clean.c:816 git-add--interactive.perl:1896
msgid "*** Commands ***"
msgstr "*** Comandos ***"
-#: add-interactive.c:1084 builtin/clean.c:817 git-add--interactive.perl:1865
+#: add-interactive.c:1092 builtin/clean.c:817 git-add--interactive.perl:1893
msgid "What now"
msgstr "Ahora que"
-#: add-interactive.c:1136 git-add--interactive.perl:213
+#: add-interactive.c:1144 git-add--interactive.perl:213
msgid "staged"
msgstr "rastreado"
-#: add-interactive.c:1136 git-add--interactive.perl:213
+#: add-interactive.c:1144 git-add--interactive.perl:213
msgid "unstaged"
msgstr "no rastreado"
-#: add-interactive.c:1136 apply.c:4967 apply.c:4970 builtin/am.c:2250
-#: builtin/am.c:2253 builtin/clone.c:123 builtin/fetch.c:145
-#: builtin/merge.c:276 builtin/pull.c:190 builtin/submodule--helper.c:409
-#: builtin/submodule--helper.c:1394 builtin/submodule--helper.c:1397
-#: builtin/submodule--helper.c:1902 builtin/submodule--helper.c:1905
-#: builtin/submodule--helper.c:2148 bugreport.c:135
+#: add-interactive.c:1144 apply.c:4987 apply.c:4990 builtin/am.c:2257
+#: builtin/am.c:2260 builtin/bugreport.c:134 builtin/clone.c:124
+#: builtin/fetch.c:150 builtin/merge.c:285 builtin/pull.c:190
+#: builtin/submodule--helper.c:409 builtin/submodule--helper.c:1818
+#: builtin/submodule--helper.c:1821 builtin/submodule--helper.c:2326
+#: builtin/submodule--helper.c:2329 builtin/submodule--helper.c:2572
#: git-add--interactive.perl:213
msgid "path"
msgstr "ruta"
-#: add-interactive.c:1143
+#: add-interactive.c:1151
msgid "could not refresh index"
msgstr "no se pudo refrescar el index"
-#: add-interactive.c:1157 builtin/clean.c:781 git-add--interactive.perl:1782
+#: add-interactive.c:1165 builtin/clean.c:781 git-add--interactive.perl:1803
#, c-format
msgid "Bye.\n"
msgstr "Adiós.\n"
-#: add-patch.c:34 git-add--interactive.perl:1430
+#: add-patch.c:34 git-add--interactive.perl:1431
#, c-format, perl-format
msgid "Stage mode change [y,n,q,a,d%s,?]? "
msgstr "¿Cambio de modo de stage [y,n,q,a,d%s,?]? "
-#: add-patch.c:35 git-add--interactive.perl:1431
+#: add-patch.c:35 git-add--interactive.perl:1432
#, c-format, perl-format
msgid "Stage deletion [y,n,q,a,d%s,?]? "
msgstr "¿Aplicar stage al borrado [y,n,q,a,d%s,?]? "
-#: add-patch.c:36 git-add--interactive.perl:1432
+#: add-patch.c:36 git-add--interactive.perl:1433
#, c-format, perl-format
msgid "Stage addition [y,n,q,a,d%s,?]? "
msgstr "¿Agregar al stage [y,n,q,a,d%s,?]? "
-#: add-patch.c:37 git-add--interactive.perl:1433
+#: add-patch.c:37 git-add--interactive.perl:1434
#, c-format, perl-format
msgid "Stage this hunk [y,n,q,a,d%s,?]? "
msgstr "¿Aplicar stage a este hunk [y,n,q,a,d%s,?]? "
@@ -272,22 +272,22 @@
"d - no aplicar stage a este hunk o a ninguno de los posteriores en este "
"archivo\n"
-#: add-patch.c:56 git-add--interactive.perl:1436
+#: add-patch.c:56 git-add--interactive.perl:1437
#, c-format, perl-format
msgid "Stash mode change [y,n,q,a,d%s,?]? "
msgstr "¿Aplicar stash al cambio de modo [y,n,q,a,d%s,?]? "
-#: add-patch.c:57 git-add--interactive.perl:1437
+#: add-patch.c:57 git-add--interactive.perl:1438
#, c-format, perl-format
msgid "Stash deletion [y,n,q,a,d%s,?]? "
msgstr "¿Aplicar stash al borrado [y,n,q,a,d%s,?]? "
-#: add-patch.c:58 git-add--interactive.perl:1438
+#: add-patch.c:58 git-add--interactive.perl:1439
#, c-format, perl-format
msgid "Stash addition [y,n,q,a,d%s,?]? "
msgstr "¿Agregar al stash [y,n,q,a,d%s,?]? "
-#: add-patch.c:59 git-add--interactive.perl:1439
+#: add-patch.c:59 git-add--interactive.perl:1440
#, c-format, perl-format
msgid "Stash this hunk [y,n,q,a,d%s,?]? "
msgstr "¿Aplicar stash a este hunk [y,n,q,a,d%s,?]? "
@@ -314,22 +314,22 @@
"a - aplicar stash a este hunk y a todos los posteriores en el archivo\n"
"d - no aplicar stash a este hunk o ninguno de los posteriores en el archivo\n"
-#: add-patch.c:80 git-add--interactive.perl:1442
+#: add-patch.c:80 git-add--interactive.perl:1443
#, c-format, perl-format
msgid "Unstage mode change [y,n,q,a,d%s,?]? "
msgstr "¿Sacar cambio de modo del stage [y,n,q,a,d%s,?]? "
-#: add-patch.c:81 git-add--interactive.perl:1443
+#: add-patch.c:81 git-add--interactive.perl:1444
#, c-format, perl-format
msgid "Unstage deletion [y,n,q,a,d%s,?]? "
msgstr "¿Sacar borrado del stage [y,n,q,a,d%s,?]? "
-#: add-patch.c:82 git-add--interactive.perl:1444
+#: add-patch.c:82 git-add--interactive.perl:1445
#, c-format, perl-format
msgid "Unstage addition [y,n,q,a,d%s,?]? "
msgstr "¿Quitar adición al stage [y,n,q,a,d%s,?]? "
-#: add-patch.c:83 git-add--interactive.perl:1445
+#: add-patch.c:83 git-add--interactive.perl:1446
#, c-format, perl-format
msgid "Unstage this hunk [y,n,q,a,d%s,?]? "
msgstr "¿Sacar este hunk del stage [y,n,q,a,d%s,?]? "
@@ -357,22 +357,22 @@
"d - no sacar del area de stage este hunk o ninguno de los posteriores en el "
"archivo\n"
-#: add-patch.c:103 git-add--interactive.perl:1448
+#: add-patch.c:103 git-add--interactive.perl:1449
#, c-format, perl-format
msgid "Apply mode change to index [y,n,q,a,d%s,?]? "
msgstr "¿Aplicar cambio de modo al índice [y,n,q,a,d%s,?]? "
-#: add-patch.c:104 git-add--interactive.perl:1449
+#: add-patch.c:104 git-add--interactive.perl:1450
#, c-format, perl-format
msgid "Apply deletion to index [y,n,q,a,d%s,?]? "
msgstr "¿Aplicar borrado al índice [y,n,q,a,d%s,?]? "
-#: add-patch.c:105 git-add--interactive.perl:1450
+#: add-patch.c:105 git-add--interactive.perl:1451
#, c-format, perl-format
msgid "Apply addition to index [y,n,q,a,d%s,?]? "
msgstr "¿Aplicar adición al índice [y,n,q,a,d%s,?]? "
-#: add-patch.c:106 git-add--interactive.perl:1451
+#: add-patch.c:106 git-add--interactive.perl:1452
#, c-format, perl-format
msgid "Apply this hunk to index [y,n,q,a,d%s,?]? "
msgstr "¿Aplicar este hunk al índice [y,n,q,a,d%s,?]? "
@@ -399,26 +399,26 @@
"a - aplicar este hunk y todos los posteriores en el archivo\n"
"d - no aplicar este hunko ninguno de los posteriores en el archivo\n"
-#: add-patch.c:126 git-add--interactive.perl:1454
-#: git-add--interactive.perl:1472
+#: add-patch.c:126 git-add--interactive.perl:1455
+#: git-add--interactive.perl:1473
#, c-format, perl-format
msgid "Discard mode change from worktree [y,n,q,a,d%s,?]? "
msgstr "¿Descartar cambio de modo del árbol de trabajo [y,n,q,a,d%s,?]? "
-#: add-patch.c:127 git-add--interactive.perl:1455
-#: git-add--interactive.perl:1473
+#: add-patch.c:127 git-add--interactive.perl:1456
+#: git-add--interactive.perl:1474
#, c-format, perl-format
msgid "Discard deletion from worktree [y,n,q,a,d%s,?]? "
msgstr "¿Descartar borrado del árbol de trabajo [y,n,q,a,d%s,?]? "
-#: add-patch.c:128 git-add--interactive.perl:1456
-#: git-add--interactive.perl:1474
+#: add-patch.c:128 git-add--interactive.perl:1457
+#: git-add--interactive.perl:1475
#, c-format, perl-format
msgid "Discard addition from worktree [y,n,q,a,d%s,?]? "
msgstr "¿Descartar adición del árbol de trabajo [y,n,q,a,d%s,?]? "
-#: add-patch.c:129 git-add--interactive.perl:1457
-#: git-add--interactive.perl:1475
+#: add-patch.c:129 git-add--interactive.perl:1458
+#: git-add--interactive.perl:1476
#, c-format, perl-format
msgid "Discard this hunk from worktree [y,n,q,a,d%s,?]? "
msgstr "¿Descartar este hunk del árbol de trabajo [y,n,q,a,d%s,?]? "
@@ -445,23 +445,23 @@
"a - descartar este hunk y todos los posteriores en este archivo\n"
"d - no descartar este hunk o ninguno de los posteriores en el archivo\n"
-#: add-patch.c:149 add-patch.c:194 git-add--interactive.perl:1460
+#: add-patch.c:149 add-patch.c:194 git-add--interactive.perl:1461
#, c-format, perl-format
msgid "Discard mode change from index and worktree [y,n,q,a,d%s,?]? "
msgstr ""
"¿Descartar cambio de modo del índice y el árbol de trabajo [y,n,q,a,d%s,?]? "
-#: add-patch.c:150 add-patch.c:195 git-add--interactive.perl:1461
+#: add-patch.c:150 add-patch.c:195 git-add--interactive.perl:1462
#, c-format, perl-format
msgid "Discard deletion from index and worktree [y,n,q,a,d%s,?]? "
msgstr "¿Descartar borrado del índice y el árbol de trabajo [y,n,q,a,d%s,?]? "
-#: add-patch.c:151 add-patch.c:196 git-add--interactive.perl:1462
+#: add-patch.c:151 add-patch.c:196 git-add--interactive.perl:1463
#, c-format, perl-format
msgid "Discard addition from index and worktree [y,n,q,a,d%s,?]? "
msgstr "¿Descartar adición del índice y el árbol de trabajo [y,n,q,a,d%s,?]? "
-#: add-patch.c:152 add-patch.c:197 git-add--interactive.perl:1463
+#: add-patch.c:152 add-patch.c:197 git-add--interactive.perl:1464
#, c-format, perl-format
msgid "Discard this hunk from index and worktree [y,n,q,a,d%s,?]? "
msgstr ""
@@ -481,24 +481,24 @@
"a - descartar este hunk y todos los posteriores en este archivo\n"
"d - no descartar este hunk o ninguno posterior en el archivo\n"
-#: add-patch.c:171 add-patch.c:216 git-add--interactive.perl:1466
+#: add-patch.c:171 add-patch.c:216 git-add--interactive.perl:1467
#, c-format, perl-format
msgid "Apply mode change to index and worktree [y,n,q,a,d%s,?]? "
msgstr ""
"¿Aplicar cambio de modo para el índice y el árbol de trabajo [y,n,q,a,d"
"%s,?]? "
-#: add-patch.c:172 add-patch.c:217 git-add--interactive.perl:1467
+#: add-patch.c:172 add-patch.c:217 git-add--interactive.perl:1468
#, c-format, perl-format
msgid "Apply deletion to index and worktree [y,n,q,a,d%s,?]? "
msgstr "¿Aplicar borrado al índice y al árbol de trabajo [y,n,q,a,d%s,?]? "
-#: add-patch.c:173 add-patch.c:218 git-add--interactive.perl:1468
+#: add-patch.c:173 add-patch.c:218 git-add--interactive.perl:1469
#, c-format, perl-format
msgid "Apply addition to index and worktree [y,n,q,a,d%s,?]? "
msgstr "¿Aplicar adición al índice y al árbol de trabajo [y,n,q,a,d%s,?]? "
-#: add-patch.c:174 add-patch.c:219 git-add--interactive.perl:1469
+#: add-patch.c:174 add-patch.c:219 git-add--interactive.perl:1470
#, c-format, perl-format
msgid "Apply this hunk to index and worktree [y,n,q,a,d%s,?]? "
msgstr "¿Aplicar este hunk al índice y árbol de trabajo [y,n,q,a,d,/%s,?]? "
@@ -531,34 +531,34 @@
"a - aplicar este hunk y todos los posteriores en el archivo\n"
"d - no aplicar este hunk o ninguno de los siguientes en este archivo\n"
-#: add-patch.c:328
+#: add-patch.c:342
#, c-format
msgid "could not parse hunk header '%.*s'"
msgstr "no se puede analizar hunk header '%.*s'"
-#: add-patch.c:347 add-patch.c:351
+#: add-patch.c:361 add-patch.c:365
#, c-format
msgid "could not parse colored hunk header '%.*s'"
msgstr "no se puede analizar hunk header '%.*s'"
-#: add-patch.c:405
+#: add-patch.c:419
msgid "could not parse diff"
msgstr "no se puede analizar diff"
-#: add-patch.c:424
+#: add-patch.c:438
msgid "could not parse colored diff"
msgstr "no se pudo analizar diff a colores"
-#: add-patch.c:438
+#: add-patch.c:452
#, c-format
msgid "failed to run '%s'"
msgstr "falló al ejecutar '%s'"
-#: add-patch.c:602
+#: add-patch.c:611
msgid "mismatched output from interactive.diffFilter"
msgstr "output de interactive.diffFilter no concuerda"
-#: add-patch.c:603
+#: add-patch.c:612
msgid ""
"Your filter must maintain a one-to-one correspondence\n"
"between its input and output lines."
@@ -566,7 +566,7 @@
"Tu filtro tiene que mantener correspondencia de uno a uno\n"
"entre las líneas de entrada y salida."
-#: add-patch.c:776
+#: add-patch.c:790
#, c-format
msgid ""
"expected context line #%d in\n"
@@ -575,7 +575,7 @@
"se esperaba línea de contexto #%d en\n"
"%.*s"
-#: add-patch.c:791
+#: add-patch.c:805
#, c-format
msgid ""
"hunks do not overlap:\n"
@@ -588,11 +588,11 @@
"\tno acaba con:\n"
"%.*s"
-#: add-patch.c:1067 git-add--interactive.perl:1114
+#: add-patch.c:1081 git-add--interactive.perl:1115
msgid "Manual hunk edit mode -- see bottom for a quick guide.\n"
msgstr "Modo de edición manual de hunk -- vea abajo para una guía rápida.\n"
-#: add-patch.c:1071
+#: add-patch.c:1085
#, c-format
msgid ""
"---\n"
@@ -606,7 +606,7 @@
"Lineas comenzando con %c serán eliminadas.\n"
#. TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
-#: add-patch.c:1085 git-add--interactive.perl:1128
+#: add-patch.c:1099 git-add--interactive.perl:1129
msgid ""
"If it does not apply cleanly, you will be given an opportunity to\n"
"edit again. If all lines of the hunk are removed, then the edit is\n"
@@ -616,11 +616,11 @@
"editar nuevamente. Si todas las líneas del hunk son eliminadas, entonces \n"
"la edición es abortada y el hunk queda sin cambios.\n"
-#: add-patch.c:1118
+#: add-patch.c:1132
msgid "could not parse hunk header"
msgstr "no se puede analizar hunk header"
-#: add-patch.c:1163
+#: add-patch.c:1177
msgid "'git apply --cached' failed"
msgstr "falló 'git apply --cached'"
@@ -636,26 +636,26 @@
#. Consider translating (saying "no" discards!) as
#. (saying "n" for "no" discards!) if the translation
#. of the word "no" does not start with n.
-#: add-patch.c:1232 git-add--interactive.perl:1241
+#: add-patch.c:1246 git-add--interactive.perl:1242
msgid ""
"Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? "
msgstr ""
"Tu hunk editado no aplica. ¿Editar nuevamente (¡decir \"no\" descarta!) [y/"
"n]? "
-#: add-patch.c:1275
+#: add-patch.c:1289
msgid "The selected hunks do not apply to the index!"
msgstr "¡Los hunks seleccionados no aplican al índice!"
-#: add-patch.c:1276 git-add--interactive.perl:1345
+#: add-patch.c:1290 git-add--interactive.perl:1346
msgid "Apply them to the worktree anyway? "
msgstr "¿Aplicarlos al árbol de trabajo de todas maneras? "
-#: add-patch.c:1283 git-add--interactive.perl:1348
+#: add-patch.c:1297 git-add--interactive.perl:1349
msgid "Nothing was applied.\n"
msgstr "Nada fue aplicado.\n"
-#: add-patch.c:1340
+#: add-patch.c:1354
msgid ""
"j - leave this hunk undecided, see next undecided hunk\n"
"J - leave this hunk undecided, see next hunk\n"
@@ -677,73 +677,73 @@
"e - editar manualmente el hunk actual\n"
"? - imprimir ayuda\n"
-#: add-patch.c:1463 add-patch.c:1473
+#: add-patch.c:1516 add-patch.c:1526
msgid "No previous hunk"
msgstr "No el anterior hunk"
-#: add-patch.c:1468 add-patch.c:1478
+#: add-patch.c:1521 add-patch.c:1531
msgid "No next hunk"
msgstr "No el siguiente hunk"
-#: add-patch.c:1484
+#: add-patch.c:1537
msgid "No other hunks to goto"
msgstr "No hay más pedazos para el ir"
-#: add-patch.c:1495 git-add--interactive.perl:1594
+#: add-patch.c:1548 git-add--interactive.perl:1606
msgid "go to which hunk (<ret> to see more)? "
msgstr "¿a que hunk ir (<enter> para ver más)? "
-#: add-patch.c:1496 git-add--interactive.perl:1596
+#: add-patch.c:1549 git-add--interactive.perl:1608
msgid "go to which hunk? "
msgstr "¿a que hunk ir? "
-#: add-patch.c:1507
+#: add-patch.c:1560
#, c-format
msgid "Invalid number: '%s'"
msgstr "Numero inválido: '%s'"
-#: add-patch.c:1512
+#: add-patch.c:1565
#, c-format
msgid "Sorry, only %d hunk available."
msgid_plural "Sorry, only %d hunks available."
msgstr[0] "Lo siento, solo %d hunk disponible."
msgstr[1] "Lo siento, solo %d hunks disponibles."
-#: add-patch.c:1521
+#: add-patch.c:1574
msgid "No other hunks to search"
msgstr "No hay más pedazos para buscar"
-#: add-patch.c:1527 git-add--interactive.perl:1640
+#: add-patch.c:1580 git-add--interactive.perl:1661
msgid "search for regex? "
msgstr "¿buscar para regexp? "
-#: add-patch.c:1542
+#: add-patch.c:1595
#, c-format
msgid "Malformed search regexp %s: %s"
msgstr "Regexp para la búsqueda mal formado %s: %s"
-#: add-patch.c:1559
+#: add-patch.c:1612
msgid "No hunk matches the given pattern"
-msgstr "No hay hunks que concuerden con el patrón entregado."
+msgstr "No hay hunks que concuerden con el patrón entregado"
-#: add-patch.c:1566
+#: add-patch.c:1619
msgid "Sorry, cannot split this hunk"
msgstr "Perdón, no se puede dividir este pedazo"
-#: add-patch.c:1570
+#: add-patch.c:1623
#, c-format
msgid "Split into %d hunks."
msgstr "Cortar en %d hunk."
-#: add-patch.c:1574
+#: add-patch.c:1627
msgid "Sorry, cannot edit this hunk"
msgstr "Perdón, no se puede editar este pedazo"
-#: add-patch.c:1625
+#: add-patch.c:1679
msgid "'git apply' failed"
msgstr "falló 'git apply'"
-#: advice.c:140
+#: advice.c:143
#, c-format
msgid ""
"\n"
@@ -752,38 +752,38 @@
"\n"
"Desactivar este mensaje con \"git config advice.%s false\""
-#: advice.c:156
+#: advice.c:159
#, c-format
msgid "%shint: %.*s%s\n"
msgstr "%sayuda: %.*s%s\n"
-#: advice.c:247
+#: advice.c:250
msgid "Cherry-picking is not possible because you have unmerged files."
msgstr ""
"No es posible ejecutar cherry-picking porque tienes archivos sin fusionar."
-#: advice.c:249
+#: advice.c:252
msgid "Committing is not possible because you have unmerged files."
msgstr "No es posible realizar un commit porque tienes archivos sin fusionar."
-#: advice.c:251
+#: advice.c:254
msgid "Merging is not possible because you have unmerged files."
msgstr "No es posible hacer merge porque tienes archivos sin fusionar."
-#: advice.c:253
+#: advice.c:256
msgid "Pulling is not possible because you have unmerged files."
msgstr "No es posible hacer pull porque tienes archivos sin fusionar."
-#: advice.c:255
+#: advice.c:258
msgid "Reverting is not possible because you have unmerged files."
msgstr "No es posible revertir porque tienes archivos sin fusionar."
-#: advice.c:257
+#: advice.c:260
#, c-format
msgid "It is not possible to %s because you have unmerged files."
msgstr "No es posible %s porque tienes archivos sin fusionar."
-#: advice.c:265
+#: advice.c:268
msgid ""
"Fix them up in the work tree, and then use 'git add/rm <file>'\n"
"as appropriate to mark resolution and make a commit."
@@ -791,23 +791,23 @@
"Corrígelos en el árbol de trabajo y entonces usa 'git add/rm <archivo>',\n"
"como sea apropiado, para marcar la resolución y realizar un commit."
-#: advice.c:273
+#: advice.c:276
msgid "Exiting because of an unresolved conflict."
msgstr "Saliendo porque existe un conflicto sin resolver."
-#: advice.c:278 builtin/merge.c:1353
+#: advice.c:281 builtin/merge.c:1370
msgid "You have not concluded your merge (MERGE_HEAD exists)."
msgstr "No has concluido tu fusión (MERGE_HEAD existe)."
-#: advice.c:280
+#: advice.c:283
msgid "Please, commit your changes before merging."
msgstr "Por favor, realiza un commit antes de fusionar."
-#: advice.c:281
+#: advice.c:284
msgid "Exiting because of unfinished merge."
msgstr "Saliendo por una fusión inconclusa."
-#: advice.c:287
+#: advice.c:290
#, c-format
msgid ""
"Note: switching to '%s'.\n"
@@ -1107,7 +1107,8 @@
msgid "cannot checkout %s"
msgstr "no se puede hacer checkout a %s"
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:61 setup.c:308
+#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:86 pack-revindex.c:213
+#: setup.c:308
#, c-format
msgid "failed to read %s"
msgstr "no se pudo leer %s"
@@ -1127,7 +1128,7 @@
msgid "%s: does not exist in index"
msgstr "%s: no existe en el índice"
-#: apply.c:3537 apply.c:3708
+#: apply.c:3537 apply.c:3708 apply.c:3952
#, c-format
msgid "%s: does not match index"
msgstr "%s: no concuerda con el índice"
@@ -1177,182 +1178,182 @@
msgid "%s has type %o, expected %o"
msgstr "%s tiene tipo %o, se esperaba %o"
-#: apply.c:3878 apply.c:3880 read-cache.c:830 read-cache.c:856
-#: read-cache.c:1325
+#: apply.c:3892 apply.c:3894 read-cache.c:832 read-cache.c:858
+#: read-cache.c:1313
#, c-format
msgid "invalid path '%s'"
msgstr "ruta inválida '%s'"
-#: apply.c:3936
+#: apply.c:3950
#, c-format
msgid "%s: already exists in index"
msgstr "%s: ya existe en el índice"
-#: apply.c:3939
+#: apply.c:3954
#, c-format
msgid "%s: already exists in working directory"
msgstr "%s: ya existe en el directorio de trabajo"
-#: apply.c:3959
+#: apply.c:3974
#, c-format
msgid "new mode (%o) of %s does not match old mode (%o)"
msgstr "nuevo modo (%o) de %s no concuerda con el viejo modo (%o)"
-#: apply.c:3964
+#: apply.c:3979
#, c-format
msgid "new mode (%o) of %s does not match old mode (%o) of %s"
msgstr "nuevo modo (%o) de %s no concuerda con el viejo modo (%o) de %s"
-#: apply.c:3984
+#: apply.c:3999
#, c-format
msgid "affected file '%s' is beyond a symbolic link"
msgstr "archivo afectado '%s' está tras un enlace simbólico"
-#: apply.c:3988
+#: apply.c:4003
#, c-format
msgid "%s: patch does not apply"
msgstr "%s: el parche no aplica"
-#: apply.c:4003
+#: apply.c:4018
#, c-format
msgid "Checking patch %s..."
msgstr "Revisando el parche %s..."
-#: apply.c:4095
+#: apply.c:4110
#, c-format
msgid "sha1 information is lacking or useless for submodule %s"
msgstr "falta información del sha1 o es inútil para el submódulo %s"
-#: apply.c:4102
+#: apply.c:4117
#, c-format
msgid "mode change for %s, which is not in current HEAD"
msgstr "modo cambiado para %s, el cual no se encuentra en el HEAD actual"
-#: apply.c:4105
+#: apply.c:4120
#, c-format
msgid "sha1 information is lacking or useless (%s)."
msgstr "falta información sha1 o es inútil (%s)."
-#: apply.c:4114
+#: apply.c:4129
#, c-format
msgid "could not add %s to temporary index"
msgstr "no se pudo añadir %s al índice temporal"
-#: apply.c:4124
+#: apply.c:4139
#, c-format
msgid "could not write temporary index to %s"
msgstr "no se pudo escribir un índice temporal para %s"
-#: apply.c:4262
+#: apply.c:4277
#, c-format
msgid "unable to remove %s from index"
msgstr "no se puede eliminar %s del índice"
-#: apply.c:4296
+#: apply.c:4311
#, c-format
msgid "corrupt patch for submodule %s"
msgstr "parche corrupto para el submódulo %s"
-#: apply.c:4302
+#: apply.c:4317
#, c-format
msgid "unable to stat newly created file '%s'"
msgstr "no es posible establecer el archivo recién creado '%s'"
-#: apply.c:4310
+#: apply.c:4325
#, c-format
msgid "unable to create backing store for newly created file %s"
msgstr ""
"no es posible crear una copia de seguridad para el archivo recién creado %s"
-#: apply.c:4316 apply.c:4461
+#: apply.c:4331 apply.c:4476
#, c-format
msgid "unable to add cache entry for %s"
msgstr "no es posible agregar una entrada en el cache para %s"
-#: apply.c:4359
+#: apply.c:4374 builtin/bisect--helper.c:523
#, c-format
msgid "failed to write to '%s'"
msgstr "falló escribir para '%s'"
-#: apply.c:4363
+#: apply.c:4378
#, c-format
msgid "closing file '%s'"
msgstr "cerrando archivo '%s'"
-#: apply.c:4433
+#: apply.c:4448
#, c-format
msgid "unable to write file '%s' mode %o"
msgstr "no es posible escribir el archivo '%s' modo %o"
-#: apply.c:4531
+#: apply.c:4546
#, c-format
msgid "Applied patch %s cleanly."
msgstr "Parche %s aplicado limpiamente."
-#: apply.c:4539
+#: apply.c:4554
msgid "internal error"
msgstr "error interno"
-#: apply.c:4542
+#: apply.c:4557
#, c-format
msgid "Applying patch %%s with %d reject..."
msgid_plural "Applying patch %%s with %d rejects..."
msgstr[0] "Aplicando parche %%s con %d rechazo..."
msgstr[1] "Aplicando parche %%s con %d rechazos..."
-#: apply.c:4553
+#: apply.c:4568
#, c-format
msgid "truncating .rej filename to %.*s.rej"
msgstr "truncando el nombre de archivo .rej a %.*s.rej"
-#: apply.c:4561 builtin/fetch.c:902 builtin/fetch.c:1195
+#: apply.c:4576 builtin/fetch.c:933 builtin/fetch.c:1334
#, c-format
msgid "cannot open %s"
msgstr "no se puede abrir %s"
-#: apply.c:4575
+#: apply.c:4590
#, c-format
msgid "Hunk #%d applied cleanly."
msgstr "Hunk #%d aplicado limpiamente."
-#: apply.c:4579
+#: apply.c:4594
#, c-format
msgid "Rejected hunk #%d."
msgstr "Hunk #%d rechazado."
-#: apply.c:4698
+#: apply.c:4718
#, c-format
msgid "Skipped patch '%s'."
msgstr "Parche '%s' saltado."
-#: apply.c:4706
+#: apply.c:4726
msgid "unrecognized input"
msgstr "input no reconocido"
-#: apply.c:4726
+#: apply.c:4746
msgid "unable to read index file"
msgstr "no es posible leer el archivo índice"
-#: apply.c:4883
+#: apply.c:4903
#, c-format
msgid "can't open patch '%s': %s"
msgstr "no se puede abrir el parche '%s': %s"
-#: apply.c:4910
+#: apply.c:4930
#, c-format
msgid "squelched %d whitespace error"
msgid_plural "squelched %d whitespace errors"
msgstr[0] "%d error de espacios en blanco aplastado"
msgstr[1] "%d errores de espacios en blanco aplastados"
-#: apply.c:4916 apply.c:4931
+#: apply.c:4936 apply.c:4951
#, c-format
msgid "%d line adds whitespace errors."
msgid_plural "%d lines add whitespace errors."
msgstr[0] "%d línea agrega errores de espacios en blanco."
msgstr[1] "%d líneas agregan errores de espacios en blanco."
-#: apply.c:4924
+#: apply.c:4944
#, c-format
msgid "%d line applied after fixing whitespace errors."
msgid_plural "%d lines applied after fixing whitespace errors."
@@ -1361,185 +1362,180 @@
msgstr[1] ""
"%d líneas aplicadas después de arreglar los errores de espacios en blanco."
-#: apply.c:4940 builtin/add.c:612 builtin/mv.c:301 builtin/rm.c:406
+#: apply.c:4960 builtin/add.c:626 builtin/mv.c:304 builtin/rm.c:406
msgid "Unable to write new index file"
msgstr "No es posible escribir el archivo índice"
-#: apply.c:4968
+#: apply.c:4988
msgid "don't apply changes matching the given path"
msgstr "no aplicar cambios que concuerden con la ruta suministrada"
-#: apply.c:4971
+#: apply.c:4991
msgid "apply changes matching the given path"
msgstr "aplicar cambios que concuerden con la ruta suministrada"
-#: apply.c:4973 builtin/am.c:2259
+#: apply.c:4993 builtin/am.c:2266
msgid "num"
msgstr "num"
-#: apply.c:4974
+#: apply.c:4994
msgid "remove <num> leading slashes from traditional diff paths"
msgstr "eliminar <num> slashes iniciales de las rutas diff tradicionales"
-#: apply.c:4977
+#: apply.c:4997
msgid "ignore additions made by the patch"
msgstr "ignorar adiciones hechas por el parche"
-#: apply.c:4979
+#: apply.c:4999
msgid "instead of applying the patch, output diffstat for the input"
msgstr "en lugar de aplicar el parche, mostrar diffstat para la entrada"
-#: apply.c:4983
+#: apply.c:5003
msgid "show number of added and deleted lines in decimal notation"
msgstr "mostrar el numero de líneas agregadas y eliminadas en notación decimal"
-#: apply.c:4985
+#: apply.c:5005
msgid "instead of applying the patch, output a summary for the input"
msgstr "en lugar de aplicar el parche, mostrar un resumen para la entrada"
-#: apply.c:4987
+#: apply.c:5007
msgid "instead of applying the patch, see if the patch is applicable"
msgstr "en lugar de aplicar el parche, ver si el parche es aplicable"
-#: apply.c:4989
+#: apply.c:5009
msgid "make sure the patch is applicable to the current index"
msgstr "asegurar que el parche es aplicable al índice actual"
-#: apply.c:4991
+#: apply.c:5011
msgid "mark new files with `git add --intent-to-add`"
msgstr "marca los nuevos archivos con `git add --intent-to-add`"
-#: apply.c:4993
+#: apply.c:5013
msgid "apply a patch without touching the working tree"
msgstr "aplicar un parche sin tocar el árbol de trabajo"
-#: apply.c:4995
+#: apply.c:5015
msgid "accept a patch that touches outside the working area"
msgstr "aceptar un parche que toca fuera del área de trabajo"
-#: apply.c:4998
+#: apply.c:5018
msgid "also apply the patch (use with --stat/--summary/--check)"
msgstr "también aplicar el parche ( usar con --stat/--summary/--check"
-#: apply.c:5000
+#: apply.c:5020
msgid "attempt three-way merge if a patch does not apply"
msgstr "intentar merge de tres-vías si el parche no aplica"
-#: apply.c:5002
+#: apply.c:5022
msgid "build a temporary index based on embedded index information"
msgstr ""
"construir un índice temporal basado en la información del índice incrustado"
-#: apply.c:5005 builtin/checkout-index.c:173 builtin/ls-files.c:525
+#: apply.c:5025 builtin/checkout-index.c:195 builtin/ls-files.c:540
msgid "paths are separated with NUL character"
msgstr "rutas están separadas con un carácter NULL"
-#: apply.c:5007
+#: apply.c:5027
msgid "ensure at least <n> lines of context match"
msgstr "asegurar que al menos concuerden <n> líneas del contexto concuerden"
-#: apply.c:5008 builtin/am.c:2238 builtin/interpret-trailers.c:98
+#: apply.c:5028 builtin/am.c:2245 builtin/interpret-trailers.c:98
#: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3530 builtin/rebase.c:1332
+#: builtin/pack-objects.c:3577 builtin/rebase.c:1352
msgid "action"
msgstr "acción"
-#: apply.c:5009
+#: apply.c:5029
msgid "detect new or modified lines that have whitespace errors"
msgstr ""
"detectar líneas nuevas o modificadas que contienen errores de espacios en "
"blanco"
-#: apply.c:5012 apply.c:5015
+#: apply.c:5032 apply.c:5035
msgid "ignore changes in whitespace when finding context"
msgstr ""
"ignorar cambios en los espacios en blanco cuando se encuentra el contexto"
-#: apply.c:5018
+#: apply.c:5038
msgid "apply the patch in reverse"
msgstr "aplicar el parche en reversa"
-#: apply.c:5020
+#: apply.c:5040
msgid "don't expect at least one line of context"
msgstr "no espera al menos una línea del contexto"
-#: apply.c:5022
+#: apply.c:5042
msgid "leave the rejected hunks in corresponding *.rej files"
msgstr "dejar los hunks rechazados en los archivos *.rej correspontientes"
-#: apply.c:5024
+#: apply.c:5044
msgid "allow overlapping hunks"
msgstr "permitir solapamiento de hunks"
-#: apply.c:5025 builtin/add.c:323 builtin/check-ignore.c:22
-#: builtin/commit.c:1366 builtin/count-objects.c:98 builtin/fsck.c:775
-#: builtin/log.c:2186 builtin/mv.c:123 builtin/read-tree.c:128
+#: apply.c:5045 builtin/add.c:337 builtin/check-ignore.c:22
+#: builtin/commit.c:1364 builtin/count-objects.c:98 builtin/fsck.c:757
+#: builtin/log.c:2286 builtin/mv.c:123 builtin/read-tree.c:128
msgid "be verbose"
msgstr "ser verboso"
-#: apply.c:5027
+#: apply.c:5047
msgid "tolerate incorrectly detected missing new-line at the end of file"
msgstr ""
"tolerar nuevas líneas faltantes detectadas incorrectamente al final del "
"archivo"
-#: apply.c:5030
+#: apply.c:5050
msgid "do not trust the line counts in the hunk headers"
msgstr "no confiar en el conteo de líneas en los headers del hunk"
-#: apply.c:5032 builtin/am.c:2247
+#: apply.c:5052 builtin/am.c:2254
msgid "root"
msgstr "raíz"
-#: apply.c:5033
+#: apply.c:5053
msgid "prepend <root> to all filenames"
msgstr "anteponer <root> a todos los nombres de archivos"
-#: archive-tar.c:125 archive-zip.c:351
+#: archive-tar.c:125 archive-zip.c:345
#, c-format
msgid "cannot stream blob %s"
msgstr "no se puede transmitir el blob %s"
-#: archive-tar.c:266 archive-zip.c:369
+#: archive-tar.c:265 archive-zip.c:358
#, c-format
msgid "unsupported file mode: 0%o (SHA1: %s)"
msgstr "modo de archivo no soportado: 0%o (SHA1: %s)"
-#: archive-tar.c:293 archive-zip.c:359
-#, c-format
-msgid "cannot read %s"
-msgstr "no se puede leer %s"
-
-#: archive-tar.c:465
+#: archive-tar.c:450
#, c-format
msgid "unable to start '%s' filter"
msgstr "no se puede comenzar filtro '%s'"
-#: archive-tar.c:468
+#: archive-tar.c:453
msgid "unable to redirect descriptor"
msgstr "incapaz de redirigir descriptor"
-#: archive-tar.c:475
+#: archive-tar.c:460
#, c-format
msgid "'%s' filter reported error"
msgstr "filtro '%s' reportó un error"
-#: archive-zip.c:319
+#: archive-zip.c:318
#, c-format
msgid "path is not valid UTF-8: %s"
msgstr "ruta no válida UTF-8: %s"
-#: archive-zip.c:323
+#: archive-zip.c:322
#, c-format
msgid "path too long (%d chars, SHA1: %s): %s"
msgstr "ruta muy larga (%d chars, SHA1: %s): %s"
-#: archive-zip.c:480 builtin/pack-objects.c:243 builtin/pack-objects.c:246
+#: archive-zip.c:469 builtin/pack-objects.c:244 builtin/pack-objects.c:247
#, c-format
msgid "deflate error (%d)"
msgstr "error al desinflar (%d)"
-#: archive-zip.c:615
+#: archive-zip.c:603
#, c-format
msgid "timestamp too large for this system: %<PRIuMAX>"
msgstr "timestamp muy largo para este sistema: %<PRIuMAX>"
@@ -1563,134 +1559,156 @@
msgid "git archive --remote <repo> [--exec <cmd>] --list"
msgstr "git archive --remote <repo> [--exec <comando>] --list"
-#: archive.c:377 builtin/add.c:181 builtin/add.c:588 builtin/rm.c:315
+#: archive.c:192
+#, c-format
+msgid "cannot read %s"
+msgstr "no se puede leer %s"
+
+#: archive.c:345 sequencer.c:459 sequencer.c:1744 sequencer.c:2894
+#: sequencer.c:3335 sequencer.c:3444 builtin/am.c:249 builtin/commit.c:786
+#: builtin/merge.c:1139
+#, c-format
+msgid "could not read '%s'"
+msgstr "no se pudo leer '%s'"
+
+#: archive.c:430 builtin/add.c:189 builtin/add.c:602 builtin/rm.c:315
#, c-format
msgid "pathspec '%s' did not match any files"
msgstr "ruta especificada '%s' no concordó con ninguna carpeta"
-#: archive.c:401
+#: archive.c:454
#, c-format
msgid "no such ref: %.*s"
msgstr "no existe el ref: %.*s"
-#: archive.c:407
+#: archive.c:460
#, c-format
msgid "not a valid object name: %s"
msgstr "nombre de objeto no válido: %s"
-#: archive.c:420
+#: archive.c:473
#, c-format
msgid "not a tree object: %s"
msgstr "no es un objeto tree: %s"
-#: archive.c:432
+#: archive.c:485
msgid "current working directory is untracked"
msgstr "directorio de trabajo actual no rastreado"
-#: archive.c:464
+#: archive.c:526
+#, c-format
+msgid "File not found: %s"
+msgstr "Archivo no encontrado: %s"
+
+#: archive.c:528
+#, c-format
+msgid "Not a regular file: %s"
+msgstr "No es un archivo regular: %s"
+
+#: archive.c:555
msgid "fmt"
msgstr "fmt"
-#: archive.c:464
+#: archive.c:555
msgid "archive format"
msgstr "formato del archivo"
-#: archive.c:465 builtin/log.c:1674
+#: archive.c:556 builtin/log.c:1764
msgid "prefix"
msgstr "prefijo"
-#: archive.c:466
+#: archive.c:557
msgid "prepend prefix to each pathname in the archive"
msgstr "anteponer prefijo a cada ruta en el archivo"
-#: archive.c:467 builtin/blame.c:861 builtin/blame.c:865 builtin/blame.c:866
-#: builtin/commit-tree.c:117 builtin/config.c:130 builtin/fast-export.c:1208
-#: builtin/fast-export.c:1210 builtin/fast-export.c:1214 builtin/grep.c:907
-#: builtin/hash-object.c:105 builtin/ls-files.c:561 builtin/ls-files.c:564
-#: builtin/notes.c:412 builtin/notes.c:578 builtin/read-tree.c:123
-#: parse-options.h:190
+#: archive.c:558 archive.c:561 builtin/blame.c:884 builtin/blame.c:888
+#: builtin/blame.c:889 builtin/commit-tree.c:117 builtin/config.c:135
+#: builtin/fast-export.c:1207 builtin/fast-export.c:1209
+#: builtin/fast-export.c:1213 builtin/grep.c:920 builtin/hash-object.c:105
+#: builtin/ls-files.c:576 builtin/ls-files.c:579 builtin/notes.c:412
+#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:190
msgid "file"
msgstr "carpeta"
-#: archive.c:468 builtin/archive.c:90
+#: archive.c:559
+msgid "add untracked file to archive"
+msgstr "incluir archivos sin seguimiento al archivo"
+
+#: archive.c:562 builtin/archive.c:90
msgid "write the archive to this file"
msgstr "escribe el archivo en esta carpeta"
-#: archive.c:470
+#: archive.c:564
msgid "read .gitattributes in working directory"
msgstr "leer .gitattributes en el directorio de trabajo"
-#: archive.c:471
+#: archive.c:565
msgid "report archived files on stderr"
msgstr "reportar archivos archivados por stderr"
-#: archive.c:472
-msgid "store only"
-msgstr "solo guardar"
+#: archive.c:567
+msgid "set compression level"
+msgstr "configurar nivel de compresión"
-#: archive.c:473
-msgid "compress faster"
-msgstr "comprimir más rápido"
-
-#: archive.c:481
-msgid "compress better"
-msgstr "comprimir mejor"
-
-#: archive.c:484
+#: archive.c:570
msgid "list supported archive formats"
msgstr "listar los formatos de carpeta soportados"
-#: archive.c:486 builtin/archive.c:91 builtin/clone.c:113 builtin/clone.c:116
-#: builtin/submodule--helper.c:1406 builtin/submodule--helper.c:1911
+#: archive.c:572 builtin/archive.c:91 builtin/clone.c:114 builtin/clone.c:117
+#: builtin/submodule--helper.c:1830 builtin/submodule--helper.c:2335
msgid "repo"
msgstr "repo"
-#: archive.c:487 builtin/archive.c:92
+#: archive.c:573 builtin/archive.c:92
msgid "retrieve the archive from remote repository <repo>"
msgstr "obtener la carpeta del repositorio remoto <repo>"
-#: archive.c:488 builtin/archive.c:93 builtin/difftool.c:715
+#: archive.c:574 builtin/archive.c:93 builtin/difftool.c:714
#: builtin/notes.c:498
msgid "command"
msgstr "comando"
-#: archive.c:489 builtin/archive.c:94
+#: archive.c:575 builtin/archive.c:94
msgid "path to the remote git-upload-archive command"
msgstr "ruta para el comando git-upload-archivo remoto"
-#: archive.c:496
+#: archive.c:582
msgid "Unexpected option --remote"
msgstr "Opción inesperada --remote"
-#: archive.c:498
+#: archive.c:584
msgid "Option --exec can only be used together with --remote"
msgstr "Opción --exec solo puede ser utilizada con --remote"
-#: archive.c:500
+#: archive.c:586
msgid "Unexpected option --output"
msgstr "Opción inesperada --output"
-#: archive.c:522
+#: archive.c:588
+msgid "Options --add-file and --remote cannot be used together"
+msgstr "Opciones --add-file y --remote no pueden ser usadas juntas"
+
+#: archive.c:610
#, c-format
msgid "Unknown archive format '%s'"
msgstr "Formato de carpeta desconocido '%s'"
-#: archive.c:529
+#: archive.c:619
#, c-format
msgid "Argument not supported for format '%s': -%d"
msgstr "Argumento no soportado para formato '%s': -%d"
-#: attr.c:212
+#: attr.c:202
#, c-format
msgid "%.*s is not a valid attribute name"
msgstr "%.*s no es un nombre de atributo válido"
-#: attr.c:369
+#: attr.c:359
#, c-format
msgid "%s not allowed: %s:%d"
msgstr "%s no permitido: %s:%d"
-#: attr.c:409
+#: attr.c:399
msgid ""
"Negative patterns are ignored in git attributes\n"
"Use '\\!' for literal leading exclamation."
@@ -1698,22 +1716,22 @@
"Los patrones negativos son ignorados en los atributos de git\n"
"Usa '\\!' para comenzar literalmente con exclamación."
-#: bisect.c:468
+#: bisect.c:489
#, c-format
msgid "Badly quoted content in file '%s': %s"
msgstr "Revisa las comillas en el archivo '%s': %s"
-#: bisect.c:678
+#: bisect.c:699
#, c-format
msgid "We cannot bisect more!\n"
msgstr "¡No podemos biseccionar más!\n"
-#: bisect.c:745
+#: bisect.c:766
#, c-format
msgid "Not a valid commit name %s"
msgstr "No es un nombre de commit válido %s"
-#: bisect.c:770
+#: bisect.c:791
#, c-format
msgid ""
"The merge base %s is bad.\n"
@@ -1722,7 +1740,7 @@
"La base de fisión %s está mal.\n"
"Esto quiere decir que el bug ha sido arreglado entre %s y [%s].\n"
-#: bisect.c:775
+#: bisect.c:796
#, c-format
msgid ""
"The merge base %s is new.\n"
@@ -1731,7 +1749,7 @@
"La base de fisión %s es nueva.\n"
"Esta propiedad ha cambiado entre %s y [%s].\n"
-#: bisect.c:780
+#: bisect.c:801
#, c-format
msgid ""
"The merge base %s is %s.\n"
@@ -1740,7 +1758,7 @@
"La base de fisión %s es %s.\n"
"Esto quiere decir que el primer '%s' commit está entre %s y [%s].\n"
-#: bisect.c:788
+#: bisect.c:809
#, c-format
msgid ""
"Some %s revs are not ancestors of the %s rev.\n"
@@ -1751,7 +1769,7 @@
"git bisect no puede trabajar bien en este caso.\n"
"¿Tal vez confundiste la revisión %s y %s?\n"
-#: bisect.c:801
+#: bisect.c:822
#, c-format
msgid ""
"the merge base between %s and [%s] must be skipped.\n"
@@ -1762,45 +1780,45 @@
"Así que no podemos estar seguros que el primer %s commit está entre%s y %s.\n"
"Vamos a continuar de todas maneras."
-#: bisect.c:840
+#: bisect.c:861
#, c-format
msgid "Bisecting: a merge base must be tested\n"
msgstr "Biseccionando: una base de fisión debe ser probada\n"
-#: bisect.c:890
+#: bisect.c:911
#, c-format
msgid "a %s revision is needed"
msgstr "una %s revisión es necesaria"
-#: bisect.c:920 builtin/notes.c:177 builtin/tag.c:255
+#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:287
#, c-format
msgid "could not create file '%s'"
msgstr "no se pudo crear el archivo '%s'"
-#: bisect.c:966 builtin/merge.c:151
+#: bisect.c:987 builtin/merge.c:153
#, c-format
msgid "could not read file '%s'"
msgstr "no se pudo leer el archivo '%s'"
-#: bisect.c:997
+#: bisect.c:1027
msgid "reading bisect refs failed"
msgstr "falló leer las refs de bisect"
-#: bisect.c:1019
+#: bisect.c:1057
#, c-format
msgid "%s was both %s and %s\n"
msgstr "%s fue tanto %s como %s\n"
-#: bisect.c:1028
+#: bisect.c:1066
#, c-format
msgid ""
"No testable commit found.\n"
-"Maybe you started with bad path parameters?\n"
+"Maybe you started with bad path arguments?\n"
msgstr ""
"No se encontró commit que se pueda probar.\n"
"¿Quizás iniciaste con parámetros de rutas incorrectos?\n"
-#: bisect.c:1057
+#: bisect.c:1095
#, c-format
msgid "(roughly %d step)"
msgid_plural "(roughly %d steps)"
@@ -1810,7 +1828,7 @@
#. TRANSLATORS: the last %s will be replaced with "(roughly %d
#. steps)" translation.
#.
-#: bisect.c:1063
+#: bisect.c:1101
#, 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"
@@ -1830,11 +1848,11 @@
msgstr ""
"--reverse y --first-parent juntos requieren especificar el último commit"
-#: blame.c:2821 bundle.c:187 ref-filter.c:2200 remote.c:1924 sequencer.c:2018
-#: sequencer.c:4466 submodule.c:847 builtin/commit.c:1047 builtin/log.c:405
-#: builtin/log.c:1012 builtin/log.c:1541 builtin/log.c:1945 builtin/log.c:2235
-#: builtin/merge.c:415 builtin/pack-objects.c:3348 builtin/pack-objects.c:3363
-#: builtin/shortlog.c:192
+#: blame.c:2821 bundle.c:213 ref-filter.c:2206 remote.c:2041 sequencer.c:2146
+#: sequencer.c:4641 submodule.c:856 builtin/commit.c:1045 builtin/log.c:411
+#: builtin/log.c:1016 builtin/log.c:1624 builtin/log.c:2045 builtin/log.c:2335
+#: builtin/merge.c:424 builtin/pack-objects.c:3395 builtin/pack-objects.c:3410
+#: builtin/shortlog.c:255
msgid "revision walk setup failed"
msgstr "falló la configuración del camino de revisión"
@@ -2004,366 +2022,384 @@
msgid "HEAD of working tree %s is not updated"
msgstr "HEAD del árbol de trabajo %s no está actualizada"
-#: bundle.c:47
+#: bundle.c:41
#, c-format
-msgid "'%s' does not look like a v2 bundle file"
-msgstr "'%s' no se ve como un archivo bundle v2"
+msgid "unrecognized bundle hash algorithm: %s"
+msgstr "algoritmo bundle hash desconocido %s"
-#: bundle.c:69
-msgid "unknown hash algorithm length"
-msgstr "largo del algoritmo hash desconocido"
+#: bundle.c:45
+#, c-format
+msgid "unknown capability '%s'"
+msgstr "capacidad desconocida '%s'"
-#: bundle.c:84
+#: bundle.c:71
+#, c-format
+msgid "'%s' does not look like a v2 or v3 bundle file"
+msgstr "'%s' no se ve como un archivo bundle v2 o v3"
+
+#: bundle.c:110
#, c-format
msgid "unrecognized header: %s%s (%d)"
msgstr "header no reconocido %s%s (%d)"
-#: bundle.c:110 rerere.c:480 rerere.c:690 sequencer.c:2270 sequencer.c:3034
+#: bundle.c:136 rerere.c:464 rerere.c:674 sequencer.c:2398 sequencer.c:3184
#: builtin/commit.c:814
#, c-format
msgid "could not open '%s'"
msgstr "no se pudo abrir '%s'"
-#: bundle.c:163
+#: bundle.c:189
msgid "Repository lacks these prerequisite commits:"
msgstr "Al repositorio le falta estos commits prerrequisito:"
-#: bundle.c:166
+#: bundle.c:192
msgid "need a repository to verify a bundle"
msgstr "se necesita un repositorio para verificar un bundle"
-#: bundle.c:217
+#: bundle.c:243
#, c-format
msgid "The bundle contains this ref:"
msgid_plural "The bundle contains these %d refs:"
msgstr[0] "El bundle contiene esta referencia:"
msgstr[1] "El bundle contiene estas %d referencias:"
-#: bundle.c:224
+#: bundle.c:250
msgid "The bundle records a complete history."
msgstr "El bundle registra una historia completa."
-#: bundle.c:226
+#: bundle.c:252
#, c-format
msgid "The bundle requires this ref:"
msgid_plural "The bundle requires these %d refs:"
msgstr[0] "El bundle requiere esta referencia:"
msgstr[1] "El bundle requiere estas %d referencias:"
-#: bundle.c:293
+#: bundle.c:319
msgid "unable to dup bundle descriptor"
msgstr "incapaz de duplicar bundle descriptor"
-#: bundle.c:300
+#: bundle.c:326
msgid "Could not spawn pack-objects"
msgstr "No se pudo crear los pack-objetcts"
-#: bundle.c:311
+#: bundle.c:337
msgid "pack-objects died"
msgstr "pack-objects murió"
-#: bundle.c:353
-msgid "rev-list died"
-msgstr "rev-list murió"
-
-#: bundle.c:402
+#: bundle.c:386
#, c-format
msgid "ref '%s' is excluded by the rev-list options"
msgstr "referencia '%s' es excluida por las opciones de rev-list"
-#: bundle.c:481 builtin/log.c:208 builtin/log.c:1834 builtin/shortlog.c:306
+#: bundle.c:490
+#, c-format
+msgid "unsupported bundle version %d"
+msgstr "versión de bundle no soportada %d"
+
+#: bundle.c:492
+#, c-format
+msgid "cannot write bundle version %d with algorithm %s"
+msgstr "no se puede escribir la versión de paquete %d con el algoritmo %s"
+
+#: bundle.c:510 builtin/log.c:210 builtin/log.c:1926 builtin/shortlog.c:396
#, c-format
msgid "unrecognized argument: %s"
msgstr "argumento no reconocido: %s"
-#: bundle.c:489
+#: bundle.c:539
msgid "Refusing to create empty bundle."
msgstr "Rechazando crear un bundle vacío."
-#: bundle.c:499
+#: bundle.c:549
#, c-format
msgid "cannot create '%s'"
msgstr "no se puede crear '%s'"
-#: bundle.c:524
+#: bundle.c:574
msgid "index-pack died"
msgstr "index-pack murió"
+#: chunk-format.c:113
+msgid "terminating chunk id appears earlier than expected"
+msgstr "terminando porque el id del chunk aparece antes de lo esperado"
+
+#: chunk-format.c:122
+#, c-format
+msgid "improper chunk offset(s) %<PRIx64> and %<PRIx64>"
+msgstr "offset para chunk incorrecto %<PRIx64> y %<PRIx64>"
+
+#: chunk-format.c:129
+#, c-format
+msgid "duplicate chunk ID %<PRIx32> found"
+msgstr "se encontró ID de chuck %<PRIx32> duplicado"
+
+#: chunk-format.c:143
+#, c-format
+msgid "final chunk has non-zero id %<PRIx32>"
+msgstr "chunk final tiene un id distinto de cero %<PRIx32>"
+
#: color.c:329
#, c-format
msgid "invalid color value: %.*s"
msgstr "color inválido: %.*s"
-#: commit-graph.c:238
+#: commit-graph.c:197 midx.c:46
+msgid "invalid hash version"
+msgstr "versión de hash inválida"
+
+#: commit-graph.c:255
msgid "commit-graph file is too small"
msgstr "archivo commit-graph es muy pequeño"
-#: commit-graph.c:303
+#: commit-graph.c:348
#, c-format
msgid "commit-graph signature %X does not match signature %X"
msgstr "firma %X en commit-graph no concuerda con firma %X"
-#: commit-graph.c:310
+#: commit-graph.c:355
#, c-format
msgid "commit-graph version %X does not match version %X"
msgstr "versión de commit-graph %X no concuerda con versión %X"
-#: commit-graph.c:317
+#: commit-graph.c:362
#, c-format
msgid "commit-graph hash version %X does not match version %X"
msgstr "versión de hash de commit-graph %X no concuerda con versión %X"
-#: commit-graph.c:339
-msgid "commit-graph chunk lookup table entry missing; file may be incomplete"
-msgstr ""
-"falta tabla de lookup del chunk en commit-graph; el archivo puede estar "
-"incompleto"
-
-#: commit-graph.c:349
+#: commit-graph.c:379
#, c-format
-msgid "commit-graph improper chunk offset %08x%08x"
-msgstr "offset del chunk de commit-graph inapropiado %08x%08x"
+msgid "commit-graph file is too small to hold %u chunks"
+msgstr "commit-graph file es demasiado pequeño para almacenar %u chunks"
-#: commit-graph.c:417
-#, c-format
-msgid "commit-graph chunk id %08x appears multiple times"
-msgstr "id de chunk de commit-graph %08x parece tener múltiples tiempos"
-
-#: commit-graph.c:491
+#: commit-graph.c:472
msgid "commit-graph has no base graphs chunk"
msgstr "commit-graph no tiene una chunk base de graphs"
-#: commit-graph.c:501
+#: commit-graph.c:482
msgid "commit-graph chain does not match"
msgstr "cadena commit-graph no concuerda"
-#: commit-graph.c:549
+#: commit-graph.c:530
#, c-format
msgid "invalid commit-graph chain: line '%s' not a hash"
msgstr "cadena de commit-graph inválida: línea '%s' no es un hash"
-#: commit-graph.c:573
+#: commit-graph.c:554
msgid "unable to find all commit-graph files"
msgstr "no es posible encontrar los archivos commit-graph"
-#: commit-graph.c:706 commit-graph.c:770
+#: commit-graph.c:735 commit-graph.c:772
msgid "invalid commit position. commit-graph is likely corrupt"
msgstr "posición de commit inválida. commit-graph está probablemente corrupto"
-#: commit-graph.c:727
+#: commit-graph.c:756
#, c-format
msgid "could not find commit %s"
msgstr "no se pudo encontrar commit %s"
-#: commit-graph.c:1009 builtin/am.c:1292
+#: commit-graph.c:789
+msgid "commit-graph requires overflow generation data but has none"
+msgstr ""
+"commit-graph requiere datos de generación de desbordamiento pero no tiene "
+"ninguno"
+
+#: commit-graph.c:1065 builtin/am.c:1292
#, c-format
msgid "unable to parse commit %s"
msgstr "no es posible analizar el commit %s"
-#: commit-graph.c:1157
-msgid "Writing changed paths Bloom filters index"
-msgstr "Escribiendo cambios de ruta del índice de filtros Bloom"
-
-#: commit-graph.c:1182
-msgid "Writing changed paths Bloom filters data"
-msgstr "Escribiendo cambios de ruta de datos de filtros Bloom"
-
-#: commit-graph.c:1221 builtin/pack-objects.c:2832
+#: commit-graph.c:1327 builtin/pack-objects.c:2872
#, c-format
msgid "unable to get type of object %s"
msgstr "incapaz de obtener el tipo de objeto: %s"
-#: commit-graph.c:1257
+#: commit-graph.c:1358
msgid "Loading known commits in commit graph"
msgstr "Cargando commits conocidos en commit graph"
-#: commit-graph.c:1274
+#: commit-graph.c:1375
msgid "Expanding reachable commits in commit graph"
msgstr "Expandiendo commits alcanzables en commit graph"
-#: commit-graph.c:1294
+#: commit-graph.c:1395
msgid "Clearing commit marks in commit graph"
msgstr "Limpiando marcas de commits en commit graph"
-#: commit-graph.c:1313
+#: commit-graph.c:1414
+msgid "Computing commit graph topological levels"
+msgstr "Calculando niveles topológicos de commit graph"
+
+#: commit-graph.c:1467
msgid "Computing commit graph generation numbers"
msgstr "Calculando números de generación de commit graph"
-#: commit-graph.c:1367
+#: commit-graph.c:1548
msgid "Computing commit changed paths Bloom filters"
msgstr "Calculando números de generación de commit graph"
-#: commit-graph.c:1423
+#: commit-graph.c:1625
msgid "Collecting referenced commits"
msgstr "Recolectando commits referenciados"
-#: commit-graph.c:1447
+#: commit-graph.c:1650
#, c-format
msgid "Finding commits for commit graph in %d pack"
msgid_plural "Finding commits for commit graph in %d packs"
msgstr[0] "Encontrando commits para commit graph en %d pack"
msgstr[1] "Encontrando commits para commit graph en %d packs"
-#: commit-graph.c:1460
+#: commit-graph.c:1663
#, c-format
msgid "error adding pack %s"
msgstr "error agregando pack %s"
-#: commit-graph.c:1464
+#: commit-graph.c:1667
#, c-format
msgid "error opening index for %s"
msgstr "error abriendo index para %s"
-#: commit-graph.c:1503
+#: commit-graph.c:1704
msgid "Finding commits for commit graph among packed objects"
msgstr "Encontrando commits para commit graph entre los objetos empaquetados"
-#: commit-graph.c:1518
-msgid "Counting distinct commits in commit graph"
-msgstr "Contando commits distintos en commit graph"
-
-#: commit-graph.c:1550
+#: commit-graph.c:1722
msgid "Finding extra edges in commit graph"
msgstr "Encontrando esquinas extra en commit graph"
-#: commit-graph.c:1599
+#: commit-graph.c:1771
msgid "failed to write correct number of base graph ids"
msgstr "falló al escribir el número correcto de ids de base graph"
-#: commit-graph.c:1633 midx.c:812
+#: commit-graph.c:1802 midx.c:794
#, c-format
msgid "unable to create leading directories of %s"
msgstr "no se pudo crear directorios principales para %s"
-#: commit-graph.c:1646
+#: commit-graph.c:1815
msgid "unable to create temporary graph layer"
msgstr "no es posible crear un una capa de gráfico temporal"
-#: commit-graph.c:1651
+#: commit-graph.c:1820
#, c-format
msgid "unable to adjust shared permissions for '%s'"
msgstr "no se pudo poner permisos a '%s'"
-#: commit-graph.c:1728
+#: commit-graph.c:1879
#, c-format
msgid "Writing out commit graph in %d pass"
msgid_plural "Writing out commit graph in %d passes"
msgstr[0] "Escribiendo commit graph en %d paso"
msgstr[1] "Escribiendo commit graph en %d pasos"
-#: commit-graph.c:1773
+#: commit-graph.c:1915
msgid "unable to open commit-graph chain file"
msgstr "no se pudo abrir la cadena de archivos commit-graph"
-#: commit-graph.c:1789
+#: commit-graph.c:1931
msgid "failed to rename base commit-graph file"
msgstr "no se pudo renombrar el archivo base commit-graph"
-#: commit-graph.c:1809
+#: commit-graph.c:1951
msgid "failed to rename temporary commit-graph file"
msgstr "falló al renombrar el archivo temporal commit-graph"
-#: commit-graph.c:1935
+#: commit-graph.c:2084
msgid "Scanning merged commits"
msgstr "Escaneando commits fusionados"
-#: commit-graph.c:1946
-#, c-format
-msgid "unexpected duplicate commit id %s"
-msgstr "id de commit duplicado inesperado %s"
-
-#: commit-graph.c:1969
+#: commit-graph.c:2128
msgid "Merging commit-graph"
msgstr "Fusionando commit-graph"
-#: commit-graph.c:2156
-#, c-format
-msgid "the commit graph format cannot write %d commits"
-msgstr "el formato de gráficos de commit no pudede escribir %d commits"
+#: commit-graph.c:2235
+msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
+msgstr ""
+"intentando escribir un commit-graph, pero 'core.commitGraph' está "
+"deshabilitado"
-#: commit-graph.c:2167
+#: commit-graph.c:2342
msgid "too many commits to write graph"
msgstr "demasiados commits para escribir el gráfico"
-#: commit-graph.c:2260
+#: commit-graph.c:2440
msgid "the commit-graph file has incorrect checksum and is likely corrupt"
msgstr ""
"el archivo de commit-graph tiene checksums incorrectos y probablemente está "
"corrupto"
-#: commit-graph.c:2270
+#: commit-graph.c:2450
#, c-format
msgid "commit-graph has incorrect OID order: %s then %s"
msgstr "commit-graph tiene un orden de OID incorrecto: %s luego %s"
-#: commit-graph.c:2280 commit-graph.c:2295
+#: commit-graph.c:2460 commit-graph.c:2475
#, c-format
msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
msgstr "commit-graph tiene un valor fanout incorrecto: fanout[%d] = %u != %u"
-#: commit-graph.c:2287
+#: commit-graph.c:2467
#, c-format
msgid "failed to parse commit %s from commit-graph"
msgstr "falló al analizar commit %s para commit-graph"
-#: commit-graph.c:2305
+#: commit-graph.c:2485
msgid "Verifying commits in commit graph"
msgstr "Verificando commits en commit graph"
-#: commit-graph.c:2320
+#: commit-graph.c:2500
#, c-format
msgid "failed to parse commit %s from object database for commit-graph"
msgstr ""
"falló al analizar el commit %s de la base de datos de objetos para commit-"
"graph"
-#: commit-graph.c:2327
+#: commit-graph.c:2507
#, c-format
msgid "root tree OID for commit %s in commit-graph is %s != %s"
msgstr "árbol raíz OID para commit %s en commit-graph es %s != %s"
-#: commit-graph.c:2337
+#: commit-graph.c:2517
#, c-format
msgid "commit-graph parent list for commit %s is too long"
msgstr "lista padre de commit-graph para commit %s es muy larga"
-#: commit-graph.c:2346
+#: commit-graph.c:2526
#, c-format
msgid "commit-graph parent for %s is %s != %s"
msgstr "padre de commit-graph para %s es %s != %s"
-#: commit-graph.c:2360
+#: commit-graph.c:2540
#, c-format
msgid "commit-graph parent list for commit %s terminates early"
msgstr "lista padre de commit-graph para commit %s termina antes"
-#: commit-graph.c:2365
+#: commit-graph.c:2545
#, c-format
msgid ""
"commit-graph has generation number zero for commit %s, but non-zero elsewhere"
msgstr ""
"commit-graph ha generado número cero para %s, pero no-cero para los demás"
-#: commit-graph.c:2369
+#: commit-graph.c:2549
#, c-format
msgid ""
"commit-graph has non-zero generation number for commit %s, but zero elsewhere"
msgstr ""
"commit-graph tiene generación no-cero para %s, pero cero para los demás"
-#: commit-graph.c:2385
+#: commit-graph.c:2566
#, c-format
-msgid "commit-graph generation for commit %s is %u != %u"
-msgstr "generación commit-graph para commit %s es %u != %u"
+msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
+msgstr "generación commit-graph para commit %s es %<PRIuMAX> < %<PRIuMAX>"
-#: commit-graph.c:2391
+#: commit-graph.c:2572
#, c-format
msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
msgstr ""
"fecha de commit para commit %s en commit-graph es %<PRIuMAX> != %<PRIuMAX>"
-#: commit.c:52 sequencer.c:2739 builtin/am.c:359 builtin/am.c:403
-#: builtin/am.c:1371 builtin/am.c:2013 builtin/replace.c:457
+#: commit.c:52 sequencer.c:2887 builtin/am.c:359 builtin/am.c:403
+#: builtin/am.c:1371 builtin/am.c:2018 builtin/replace.c:457
#, c-format
msgid "could not parse %s"
msgstr "no se puede analizar %s"
@@ -2393,27 +2429,27 @@
"Apapa este mensaje ejecutando\n"
"\"git config advice.graftFileDeprecated false\""
-#: commit.c:1172
+#: commit.c:1223
#, c-format
msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
msgstr "Commit %s tiene una firma GPG no confiable, pretendidamente por %s."
-#: commit.c:1176
+#: commit.c:1227
#, c-format
msgid "Commit %s has a bad GPG signature allegedly by %s."
msgstr "Commit %s tiene una mala firma GPG pretendidamente por %s."
-#: commit.c:1179
+#: commit.c:1230
#, c-format
msgid "Commit %s does not have a GPG signature."
msgstr "Commit %s no tiene una firma GPG."
-#: commit.c:1182
+#: commit.c:1233
#, c-format
msgid "Commit %s has a good GPG signature by %s\n"
msgstr "El Commit %s tiene una buena firma GPG por %s\n"
-#: commit.c:1436
+#: commit.c:1487
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"
@@ -2428,7 +2464,7 @@
msgid "memory exhausted"
msgstr "memoria agotada"
-#: config.c:125
+#: config.c:126
#, c-format
msgid ""
"exceeded maximum include depth (%d) while including\n"
@@ -2443,293 +2479,337 @@
"\t%s\n"
"Esto puede ser causado por inclusiones circulares."
-#: config.c:141
+#: config.c:142
#, c-format
msgid "could not expand include path '%s'"
msgstr "no se pudo expandir rutas de inclusión '%s'"
-#: config.c:152
+#: config.c:153
msgid "relative config includes must come from files"
msgstr "inclusiones de configuración relativas tienen que venir de archivos"
-#: config.c:198
+#: config.c:199
msgid "relative config include conditionals must come from files"
msgstr ""
"la configuración relativa incluye condicionales que deben venir de archivos"
-#: config.c:378
+#: config.c:396
+#, c-format
+msgid "invalid config format: %s"
+msgstr "formato config inválido: %s"
+
+#: config.c:400
+#, c-format
+msgid "missing environment variable name for configuration '%.*s'"
+msgstr "falta el nombre de la variable de entorno para la configuración '%.*s'"
+
+#: config.c:405
+#, c-format
+msgid "missing environment variable '%s' for configuration '%.*s'"
+msgstr "Falta la variable de entorno '%s' para la configuración '%.*s'"
+
+#: config.c:442
#, c-format
msgid "key does not contain a section: %s"
msgstr "llave no contiene una sección: %s"
-#: config.c:384
+#: config.c:448
#, c-format
msgid "key does not contain variable name: %s"
msgstr "llave no contiene el nombre de variable: %s"
-#: config.c:408 sequencer.c:2456
+#: config.c:472 sequencer.c:2588
#, c-format
msgid "invalid key: %s"
msgstr "llave inválida: %s"
-#: config.c:414
+#: config.c:478
#, c-format
msgid "invalid key (newline): %s"
msgstr "llave inválida (nueva línea): %s"
-#: config.c:450 config.c:462
+#: config.c:511
+msgid "empty config key"
+msgstr "clave de config vacía"
+
+#: config.c:529 config.c:541
#, c-format
msgid "bogus config parameter: %s"
msgstr "parámetro de configuración malogrado: %s"
-#: config.c:497
+#: config.c:555 config.c:572 config.c:579 config.c:588
#, c-format
msgid "bogus format in %s"
msgstr "formato malogrado en %s"
-#: config.c:836
+#: config.c:622
+#, c-format
+msgid "bogus count in %s"
+msgstr "conteo malogrado en %s"
+
+#: config.c:626
+#, c-format
+msgid "too many entries in %s"
+msgstr "demasiadas entradas en %s"
+
+#: config.c:636
+#, c-format
+msgid "missing config key %s"
+msgstr "llave de configuración faltante %s"
+
+#: config.c:644
+#, c-format
+msgid "missing config value %s"
+msgstr "valor de config faltante para %s"
+
+#: config.c:995
#, c-format
msgid "bad config line %d in blob %s"
msgstr "mala línea de config %d en el blob %s"
-#: config.c:840
+#: config.c:999
#, c-format
msgid "bad config line %d in file %s"
msgstr "mala línea de config %d en el archivo %s"
-#: config.c:844
+#: config.c:1003
#, c-format
msgid "bad config line %d in standard input"
msgstr "mala línea de config %d en la entrada standard"
-#: config.c:848
+#: config.c:1007
#, c-format
msgid "bad config line %d in submodule-blob %s"
msgstr "mala línea de config %d en el submódulo-blob %s"
-#: config.c:852
+#: config.c:1011
#, c-format
msgid "bad config line %d in command line %s"
msgstr "mala línea de config %d en la línea de comando %s"
-#: config.c:856
+#: config.c:1015
#, c-format
msgid "bad config line %d in %s"
msgstr "mala línea de config %d en %s"
-#: config.c:993
+#: config.c:1152
msgid "out of range"
msgstr "fuera de rango"
-#: config.c:993
+#: config.c:1152
msgid "invalid unit"
msgstr "unidad inválida"
-#: config.c:994
+#: config.c:1153
#, c-format
msgid "bad numeric config value '%s' for '%s': %s"
msgstr "mal valor de config numérica '%s' para '%s': %s"
-#: config.c:1013
+#: config.c:1163
#, c-format
msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
msgstr "mal valor de config numérica '%s' para '%s' en el blob %s: %s"
-#: config.c:1016
+#: config.c:1166
#, c-format
msgid "bad numeric config value '%s' for '%s' in file %s: %s"
msgstr "mal valor de config numérica '%s' para '%s' en el archivo %s: %s"
-#: config.c:1019
+#: config.c:1169
#, c-format
msgid "bad numeric config value '%s' for '%s' in standard input: %s"
msgstr "mal valor de config numérica '%s' para '%s' en la entrada standard: %s"
-#: config.c:1022
+#: config.c:1172
#, c-format
msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
msgstr ""
"mal valor de config numérica '%s' para '%s' en el submódulo-blob %s: %s"
-#: config.c:1025
+#: config.c:1175
#, c-format
msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
msgstr ""
"mal valor de config numérica '%s' para '%s' en la línea de comando %s: %s"
-#: config.c:1028
+#: config.c:1178
#, c-format
msgid "bad numeric config value '%s' for '%s' in %s: %s"
msgstr "mal valor de config numérica '%s' para '%s' en %s: %s"
-#: config.c:1123
+#: config.c:1194
+#, c-format
+msgid "bad boolean config value '%s' for '%s'"
+msgstr "mal valor de config booleana '%s' para '%s'"
+
+#: config.c:1289
#, c-format
msgid "failed to expand user dir in: '%s'"
msgstr "falló al expandir el directorio de usuario en: '%s'"
-#: config.c:1132
+#: config.c:1298
#, c-format
msgid "'%s' for '%s' is not a valid timestamp"
msgstr "'%s' para '%s' no es una marca de tiempo válida"
-#: config.c:1223
+#: config.c:1391
#, c-format
msgid "abbrev length out of range: %d"
msgstr "largo de abreviatura fuera de rango: %d"
-#: config.c:1237 config.c:1248
+#: config.c:1405 config.c:1416
#, c-format
msgid "bad zlib compression level %d"
msgstr "nivel de compresión de zlib erróneo %d"
-#: config.c:1340
+#: config.c:1508
msgid "core.commentChar should only be one character"
msgstr "core.commentChar debería tener solo un caracter"
-#: config.c:1373
+#: config.c:1541
#, c-format
msgid "invalid mode for object creation: %s"
msgstr "modo inválido de creación de objetos: %s"
-#: config.c:1445
+#: config.c:1613
#, c-format
msgid "malformed value for %s"
msgstr "valor malformado para %s"
-#: config.c:1471
+#: config.c:1639
#, c-format
msgid "malformed value for %s: %s"
msgstr "valor malformado para %s: %s"
-#: config.c:1472
+#: config.c:1640
msgid "must be one of nothing, matching, simple, upstream or current"
msgstr "debe ser uno de nothing, matching, simple, upstream o current"
-#: config.c:1533 builtin/pack-objects.c:3617
+#: config.c:1701 builtin/pack-objects.c:3666
#, c-format
msgid "bad pack compression level %d"
msgstr "nivel de compresión de pack erróneo %d"
-#: config.c:1655
+#: config.c:1823
#, c-format
msgid "unable to load config blob object '%s'"
msgstr "incapaz de cargar configuración de objeto blob '%s'"
-#: config.c:1658
+#: config.c:1826
#, c-format
msgid "reference '%s' does not point to a blob"
msgstr "referencia '%s' no apunta a un blob"
-#: config.c:1675
+#: config.c:1843
#, c-format
msgid "unable to resolve config blob '%s'"
msgstr "no se posible resolver configuración de blob '%s'"
-#: config.c:1705
+#: config.c:1873
#, c-format
msgid "failed to parse %s"
msgstr "no se pudo analizar %s"
-#: config.c:1759
+#: config.c:1927
msgid "unable to parse command-line config"
msgstr "no es posible analizar la configuración de la línea de comando"
-#: config.c:2113
+#: config.c:2290
msgid "unknown error occurred while reading the configuration files"
msgstr ""
"error desconocido ocurrió mientras se leían los archivos de configuración"
-#: config.c:2283
+#: config.c:2464
#, c-format
msgid "Invalid %s: '%s'"
msgstr "Inválido %s: '%s'"
-#: config.c:2328
+#: config.c:2509
#, c-format
msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
msgstr "valor splitIndex.maxPercentChange '%d' debe estar entre 0 y 100"
-#: config.c:2374
+#: config.c:2555
#, c-format
msgid "unable to parse '%s' from command-line config"
msgstr "no es posible analizar '%s' de la configuración de la línea de comando"
-#: config.c:2376
+#: config.c:2557
#, c-format
msgid "bad config variable '%s' in file '%s' at line %d"
msgstr "mala variable de config '%s' en el archivo '%s' en la línea %d"
-#: config.c:2457
+#: config.c:2641
#, c-format
msgid "invalid section name '%s'"
msgstr "nombre de sección inválido '%s'"
-#: config.c:2489
+#: config.c:2673
#, c-format
msgid "%s has multiple values"
msgstr "%s tiene múltiples valores"
-#: config.c:2518
+#: config.c:2702
#, c-format
msgid "failed to write new configuration file %s"
msgstr "falló al escribir nuevo archivo de configuración %s"
-#: config.c:2770 config.c:3094
+#: config.c:2954 config.c:3280
#, c-format
msgid "could not lock config file %s"
msgstr "no se pudo bloquear archivo de configuración %s"
-#: config.c:2781
+#: config.c:2965
#, c-format
msgid "opening %s"
msgstr "abriendo %s"
-#: config.c:2816 builtin/config.c:344
+#: config.c:3002 builtin/config.c:361
#, c-format
msgid "invalid pattern: %s"
msgstr "patrón inválido: %s"
-#: config.c:2841
+#: config.c:3027
#, c-format
msgid "invalid config file %s"
msgstr "archivo de configuración inválido: %s"
-#: config.c:2854 config.c:3107
+#: config.c:3040 config.c:3293
#, c-format
msgid "fstat on %s failed"
msgstr "fstat en %s falló"
-#: config.c:2865
+#: config.c:3051
#, c-format
msgid "unable to mmap '%s'"
msgstr "no es posible hacer mmap '%s'"
-#: config.c:2874 config.c:3112
+#: config.c:3060 config.c:3298
#, c-format
msgid "chmod on %s failed"
msgstr "chmod en %s falló"
-#: config.c:2959 config.c:3209
+#: config.c:3145 config.c:3395
#, c-format
msgid "could not write config file %s"
msgstr "no se pudo escribir el archivo de configuración %s"
-#: config.c:2993
+#: config.c:3179
#, c-format
msgid "could not set '%s' to '%s'"
msgstr "no se pudo configurar '%s' a '%s'"
-#: config.c:2995 builtin/remote.c:655 builtin/remote.c:849 builtin/remote.c:857
+#: config.c:3181 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
#, c-format
msgid "could not unset '%s'"
msgstr "no se pudo desactivar '%s'"
-#: config.c:3085
+#: config.c:3271
#, c-format
msgid "invalid section name: %s"
msgstr "sección de nombre inválida: %s"
-#: config.c:3252
+#: config.c:3438
#, c-format
msgid "missing value for '%s'"
msgstr "valor faltante para '%s'"
@@ -2791,45 +2871,45 @@
msgid "protocol error: unexpected '%s'"
msgstr "error de protocolo: '%s' inesperado"
-#: connect.c:473
+#: connect.c:497
#, c-format
msgid "unknown object format '%s' specified by server"
msgstr "formato de objeto desconocido '%s' ha sido provisto por el servidor"
-#: connect.c:500
+#: connect.c:526
#, c-format
msgid "invalid ls-refs response: %s"
msgstr "respuesta de referencias ls-refs inválida: %s"
-#: connect.c:504
+#: connect.c:530
msgid "expected flush after ref listing"
msgstr "flush esperado tras listado de refs"
-#: connect.c:507
+#: connect.c:533
msgid "expected response end packet after ref listing"
msgstr "se esperaba un paquete final luego del ref listing"
-#: connect.c:640
+#: connect.c:666
#, c-format
msgid "protocol '%s' is not supported"
msgstr "protocolo '%s' no es soportado"
-#: connect.c:691
+#: connect.c:717
msgid "unable to set SO_KEEPALIVE on socket"
msgstr "no es posible configurar SO_KEEPALIVE en el socket"
-#: connect.c:731 connect.c:794
+#: connect.c:757 connect.c:820
#, c-format
msgid "Looking up %s ... "
msgstr "Revisando %s... "
-#: connect.c:735
+#: connect.c:761
#, c-format
msgid "unable to look up %s (port %s) (%s)"
msgstr "no se puede revisar %s (puerto %s) (%s)"
#. TRANSLATORS: this is the end of "Looking up %s ... "
-#: connect.c:739 connect.c:810
+#: connect.c:765 connect.c:836
#, c-format
msgid ""
"done.\n"
@@ -2838,7 +2918,7 @@
"hecho.\n"
"Conectando a %s (puerto %s) ... "
-#: connect.c:761 connect.c:838
+#: connect.c:787 connect.c:864
#, c-format
msgid ""
"unable to connect to %s:\n"
@@ -2848,74 +2928,78 @@
"%s"
#. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:767 connect.c:844
+#: connect.c:793 connect.c:870
msgid "done."
msgstr "hecho."
-#: connect.c:798
+#: connect.c:824
#, c-format
msgid "unable to look up %s (%s)"
msgstr "no es posible revisar %s (%s)"
-#: connect.c:804
+#: connect.c:830
#, c-format
msgid "unknown port %s"
msgstr "puerto desconocido %s"
-#: connect.c:941 connect.c:1271
+#: connect.c:967 connect.c:1299
#, c-format
msgid "strange hostname '%s' blocked"
msgstr "hostname extraño '%s' bloqueado"
-#: connect.c:943
+#: connect.c:969
#, c-format
msgid "strange port '%s' blocked"
msgstr "puerto extraño '%s' bloqueado"
-#: connect.c:953
+#: connect.c:979
#, c-format
msgid "cannot start proxy %s"
msgstr "no se puede comenzar proxy %s"
-#: connect.c:1024
+#: connect.c:1050
msgid "no path specified; see 'git help pull' for valid url syntax"
msgstr ""
"no hay ruta especificada; vea 'git help pull' para sintaxis de url válidas"
-#: connect.c:1219
+#: connect.c:1190
+msgid "newline is forbidden in git:// hosts and repo paths"
+msgstr "la nueva línea está prohibida en git://hosts y rutas de repositorio"
+
+#: connect.c:1247
msgid "ssh variant 'simple' does not support -4"
msgstr "variante 'simple' de ssh no soporta -4"
-#: connect.c:1231
+#: connect.c:1259
msgid "ssh variant 'simple' does not support -6"
msgstr "variante 'simple' de ssh no soporta -6"
-#: connect.c:1248
+#: connect.c:1276
msgid "ssh variant 'simple' does not support setting port"
msgstr "variante ssh 'simple' no soporta configurar puerto"
-#: connect.c:1360
+#: connect.c:1388
#, c-format
msgid "strange pathname '%s' blocked"
msgstr "ruta extraña '%s' bloqueada"
-#: connect.c:1407
+#: connect.c:1436
msgid "unable to fork"
msgstr "no es posible hacer fork"
-#: connected.c:109 builtin/fsck.c:209 builtin/prune.c:45
+#: connected.c:108 builtin/fsck.c:191 builtin/prune.c:45
msgid "Checking connectivity"
msgstr "Verificando conectividad"
-#: connected.c:121
+#: connected.c:120
msgid "Could not run 'git rev-list'"
msgstr "No se pudo correr 'git rev-list'"
-#: connected.c:141
+#: connected.c:144
msgid "failed write to rev-list"
msgstr "falló escribir a rev-list"
-#: connected.c:148
+#: connected.c:149
msgid "failed to close rev-list's stdin"
msgstr "falló al cerrar la entrada standard de rev-list"
@@ -2990,40 +3074,40 @@
msgid "encoding '%s' from %s to %s and back is not the same"
msgstr "codificación '%s' de %s a %s y de vuelta no son iguales"
-#: convert.c:668
+#: convert.c:665
#, c-format
msgid "cannot fork to run external filter '%s'"
msgstr "no se puede hacer fork para ejecutar filtros externos '%s'"
-#: convert.c:688
+#: convert.c:685
#, c-format
msgid "cannot feed the input to external filter '%s'"
msgstr "no se pueden alimentar de input a los filtros externos '%s'"
-#: convert.c:695
+#: convert.c:692
#, c-format
msgid "external filter '%s' failed %d"
msgstr "filtro externo '%s' falló %d"
-#: convert.c:730 convert.c:733
+#: convert.c:727 convert.c:730
#, c-format
msgid "read from external filter '%s' failed"
msgstr "lectura de filtro externo '%s' falló"
-#: convert.c:736 convert.c:791
+#: convert.c:733 convert.c:788
#, c-format
msgid "external filter '%s' failed"
msgstr "filtro externo '%s' falló"
-#: convert.c:840
+#: convert.c:837
msgid "unexpected filter type"
msgstr "tipo de filtro inesperado"
-#: convert.c:851
+#: convert.c:848
msgid "path name too long for external filter"
msgstr "nombre de ruta muy largo para filtro externo"
-#: convert.c:943
+#: convert.c:940
#, c-format
msgid ""
"external filter '%s' is not available anymore although not all paths have "
@@ -3032,16 +3116,16 @@
"filtro externo '%s' ya no está disponible aunque no todas las rutas han sido "
"filtradas"
-#: convert.c:1243
+#: convert.c:1240
msgid "true/false are no valid working-tree-encodings"
msgstr "true/false no son working-tree-encodings válidos"
-#: convert.c:1431 convert.c:1465
+#: convert.c:1428 convert.c:1462
#, c-format
msgid "%s: clean filter '%s' failed"
msgstr "%s: falló al limpiar filtro '%s'"
-#: convert.c:1511
+#: convert.c:1508
#, c-format
msgid "%s: smudge filter %s failed"
msgstr "%s: filtro smudge %s falló"
@@ -3059,17 +3143,17 @@
msgid "refusing to work with credential missing protocol field"
msgstr "rehusando trabajar con credenciales faltantes en el campo protocolo"
-#: credential.c:396
+#: credential.c:394
#, c-format
msgid "url contains a newline in its %s component: %s"
msgstr "url contiene un espace de línea en su componente %s: %s"
-#: credential.c:440
+#: credential.c:438
#, c-format
msgid "url has no scheme: %s"
msgstr "url no tiene scheme: %s"
-#: credential.c:513
+#: credential.c:511
#, c-format
msgid "credential url cannot be parsed: %s"
msgstr "url credencial no puede ser analizada: %s"
@@ -3166,6 +3250,31 @@
msgid "Marked %d islands, done.\n"
msgstr "%d islas marcadas, listo.\n"
+#: diff-merges.c:70
+#, c-format
+msgid "unknown value for --diff-merges: %s"
+msgstr "valor desconocido para --diff-merges: %s"
+
+#: diff-lib.c:534
+msgid "--merge-base does not work with ranges"
+msgstr "--merge-base no funciona con rangos"
+
+#: diff-lib.c:536
+msgid "--merge-base only works with commits"
+msgstr "--merge-base solo funciona con confirmaciones"
+
+#: diff-lib.c:553
+msgid "unable to get HEAD"
+msgstr "no es posible obtener HEAD"
+
+#: diff-lib.c:560
+msgid "no merge base found"
+msgstr "no se encontró base de fusión"
+
+#: diff-lib.c:562
+msgid "multiple merge bases found"
+msgstr "múltiples bases de fusión encontradas"
+
#: diff-no-index.c:238
msgid "git diff --no-index [<options>] <path> <path>"
msgstr "git diff --no-index [<opciones>] <path> <path>"
@@ -3229,35 +3338,35 @@
"Errores en la variable de config 'diff.dirstat' encontrados:\n"
"%s"
-#: diff.c:4243
+#: diff.c:4276
#, c-format
msgid "external diff died, stopping at %s"
msgstr "diff externo murió, deteniendo en %s"
-#: diff.c:4589
+#: diff.c:4628
msgid "--name-only, --name-status, --check and -s are mutually exclusive"
msgstr "--name-only, --name-status, --check y -s son mutuamente exclusivas"
-#: diff.c:4592
+#: diff.c:4631
msgid "-G, -S and --find-object are mutually exclusive"
msgstr "-G, -S y --find-object son mutuamente exclusivas"
-#: diff.c:4670
+#: diff.c:4710
msgid "--follow requires exactly one pathspec"
msgstr "--follow requiere exactamente un pathspec"
-#: diff.c:4718
+#: diff.c:4758
#, c-format
msgid "invalid --stat value: %s"
msgstr "valor --stat inválido: %s"
-#: diff.c:4723 diff.c:4728 diff.c:4733 diff.c:4738 diff.c:5250
-#: parse-options.c:197 parse-options.c:201
+#: diff.c:4763 diff.c:4768 diff.c:4773 diff.c:4778 diff.c:5306
+#: parse-options.c:197 parse-options.c:201 builtin/commit-graph.c:180
#, c-format
msgid "%s expects a numerical value"
msgstr "%s espera un valor numérico"
-#: diff.c:4755
+#: diff.c:4795
#, c-format
msgid ""
"Failed to parse --dirstat/-X option parameter:\n"
@@ -3266,42 +3375,42 @@
"Falló al analizar parámetro de opción --dirstat/-X:\n"
"%s"
-#: diff.c:4840
+#: diff.c:4880
#, c-format
msgid "unknown change class '%c' in --diff-filter=%s"
msgstr "cambio de clase desconocido '%c' en --diff-filter=%s"
-#: diff.c:4864
+#: diff.c:4904
#, c-format
msgid "unknown value after ws-error-highlight=%.*s"
msgstr "valor desconocido luego de ws-error-highlight=%.*s"
-#: diff.c:4878
+#: diff.c:4918
#, c-format
msgid "unable to resolve '%s'"
msgstr "no se puede resolver '%s'"
-#: diff.c:4928 diff.c:4934
+#: diff.c:4968 diff.c:4974
#, c-format
msgid "%s expects <n>/<m> form"
msgstr "%s espera forma <n>/<m>"
-#: diff.c:4946
+#: diff.c:4986
#, c-format
msgid "%s expects a character, got '%s'"
msgstr "%s esperaba un char, se obtuvo '%s'"
-#: diff.c:4967
+#: diff.c:5007
#, c-format
msgid "bad --color-moved argument: %s"
msgstr "mal argumento --color-moved: %s"
-#: diff.c:4986
+#: diff.c:5026
#, c-format
msgid "invalid mode '%s' in --color-moved-ws"
msgstr "modo inválido '%s' en --color-moved-ws"
-#: diff.c:5026
+#: diff.c:5066
msgid ""
"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
"\"histogram\""
@@ -3309,154 +3418,159 @@
"opción diff-algorithm acepta \"myers\", \"minimal\", \"patience\" e "
"\"histogram\""
-#: diff.c:5062 diff.c:5082
+#: diff.c:5102 diff.c:5122
#, c-format
msgid "invalid argument to %s"
msgstr "argumento inválido para %s"
-#: diff.c:5219
+#: diff.c:5226
+#, c-format
+msgid "invalid regex given to -I: '%s'"
+msgstr "regex inválido para -I: '%s'"
+
+#: diff.c:5275
#, c-format
msgid "failed to parse --submodule option parameter: '%s'"
msgstr "falló al analizar parámetro de opción --submodule: '%s'"
-#: diff.c:5275
+#: diff.c:5331
#, c-format
msgid "bad --word-diff argument: %s"
msgstr "mal argumento --word-diff: %s"
-#: diff.c:5298
+#: diff.c:5367
msgid "Diff output format options"
msgstr "Opciones de formato de salida para diff"
-#: diff.c:5300 diff.c:5306
+#: diff.c:5369 diff.c:5375
msgid "generate patch"
msgstr "generar parche"
-#: diff.c:5303 builtin/log.c:177
+#: diff.c:5372 builtin/log.c:179
msgid "suppress diff output"
msgstr "suprimir salida de diff"
-#: diff.c:5308 diff.c:5422 diff.c:5429
+#: diff.c:5377 diff.c:5491 diff.c:5498
msgid "<n>"
msgstr "<n>"
-#: diff.c:5309 diff.c:5312
+#: diff.c:5378 diff.c:5381
msgid "generate diffs with <n> lines context"
msgstr "genera diffs con <n> líneas de contexto"
-#: diff.c:5314
+#: diff.c:5383
msgid "generate the diff in raw format"
msgstr "genera el diff en formato raw"
-#: diff.c:5317
+#: diff.c:5386
msgid "synonym for '-p --raw'"
msgstr "sinónimo para '-p --stat'"
-#: diff.c:5321
+#: diff.c:5390
msgid "synonym for '-p --stat'"
msgstr "sinónimo para '-p --stat'"
-#: diff.c:5325
+#: diff.c:5394
msgid "machine friendly --stat"
msgstr "--stat amigable para máquina"
-#: diff.c:5328
+#: diff.c:5397
msgid "output only the last line of --stat"
msgstr "mostrar solo la última línea para --stat"
-#: diff.c:5330 diff.c:5338
+#: diff.c:5399 diff.c:5407
msgid "<param1,param2>..."
msgstr "<param1,param2>..."
-#: diff.c:5331
+#: diff.c:5400
msgid ""
"output the distribution of relative amount of changes for each sub-directory"
msgstr ""
"muestra la distribución de cantidades de cambios relativa para cada "
"subdirectorio"
-#: diff.c:5335
+#: diff.c:5404
msgid "synonym for --dirstat=cumulative"
msgstr "sinónimo para --dirstat=cumulative"
-#: diff.c:5339
+#: diff.c:5408
msgid "synonym for --dirstat=files,param1,param2..."
msgstr "sinonimo para --dirstat=archivos,param1,param2..."
-#: diff.c:5343
+#: diff.c:5412
msgid "warn if changes introduce conflict markers or whitespace errors"
msgstr ""
"advierte si cambios introducen conflictos de markers o errores de espacios "
"en blanco"
-#: diff.c:5346
+#: diff.c:5415
msgid "condensed summary such as creations, renames and mode changes"
msgstr ""
"resumen condensado de creaciones, cambios de nombres y cambios de modos"
-#: diff.c:5349
+#: diff.c:5418
msgid "show only names of changed files"
msgstr "mostrar solo nombres de archivos cambiados"
-#: diff.c:5352
+#: diff.c:5421
msgid "show only names and status of changed files"
msgstr "mostrar solo nombres y estados de archivos cambiados"
-#: diff.c:5354
+#: diff.c:5423
msgid "<width>[,<name-width>[,<count>]]"
msgstr "<ancho>[,<nombre-ancho>[,<cantidad>]]"
-#: diff.c:5355
+#: diff.c:5424
msgid "generate diffstat"
msgstr "generar diffstat"
-#: diff.c:5357 diff.c:5360 diff.c:5363
+#: diff.c:5426 diff.c:5429 diff.c:5432
msgid "<width>"
msgstr "<ancho>"
-#: diff.c:5358
+#: diff.c:5427
msgid "generate diffstat with a given width"
msgstr "genera diffstat con un ancho dado"
-#: diff.c:5361
+#: diff.c:5430
msgid "generate diffstat with a given name width"
msgstr "genera diffstat con un nombre de ancho dado"
-#: diff.c:5364
+#: diff.c:5433
msgid "generate diffstat with a given graph width"
msgstr "genera diffstat con un ancho de graph dado"
-#: diff.c:5366
+#: diff.c:5435
msgid "<count>"
msgstr "<cantidad>"
-#: diff.c:5367
+#: diff.c:5436
msgid "generate diffstat with limited lines"
msgstr "genera diffstat con líneas limitadas"
-#: diff.c:5370
+#: diff.c:5439
msgid "generate compact summary in diffstat"
msgstr "genera un resumen compacto de diffstat"
-#: diff.c:5373
+#: diff.c:5442
msgid "output a binary diff that can be applied"
msgstr "muestra un diff binario que puede ser aplicado"
-#: diff.c:5376
+#: diff.c:5445
msgid "show full pre- and post-image object names on the \"index\" lines"
msgstr ""
"mostrar todo un pre- y post-image de nombres de objetos en las líneas \"index"
"\""
-#: diff.c:5378
+#: diff.c:5447
msgid "show colored diff"
msgstr "mostrar diff colorido"
-#: diff.c:5379
+#: diff.c:5448
msgid "<kind>"
msgstr "<tipo>"
-#: diff.c:5380
+#: diff.c:5449
msgid ""
"highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
"diff"
@@ -3464,7 +3578,7 @@
"resaltar errores de espacios en blanco en las líneas 'context', 'old' o "
"'new' del diff"
-#: diff.c:5383
+#: diff.c:5452
msgid ""
"do not munge pathnames and use NULs as output field terminators in --raw or "
"--numstat"
@@ -3472,89 +3586,89 @@
"no consolidar los pathnames y usar NULs como terminadores de campos en --raw "
"o --numstat"
-#: diff.c:5386 diff.c:5389 diff.c:5392 diff.c:5498
+#: diff.c:5455 diff.c:5458 diff.c:5461 diff.c:5570
msgid "<prefix>"
msgstr "<prefijo>"
-#: diff.c:5387
+#: diff.c:5456
msgid "show the given source prefix instead of \"a/\""
msgstr "mostrar el prefijo de fuente dado en lugar de \"a/\""
-#: diff.c:5390
+#: diff.c:5459
msgid "show the given destination prefix instead of \"b/\""
msgstr "mostrar el prefijo de destino en lugar de \"b/\""
-#: diff.c:5393
+#: diff.c:5462
msgid "prepend an additional prefix to every line of output"
msgstr "anteponer un prefijo adicional a cada línea mostrada"
-#: diff.c:5396
+#: diff.c:5465
msgid "do not show any source or destination prefix"
msgstr "no mostrar ningún prefijo de fuente o destino"
-#: diff.c:5399
+#: diff.c:5468
msgid "show context between diff hunks up to the specified number of lines"
msgstr ""
"muestra el contexto entre hunks de diff hasta el número especificado de "
"líneas"
-#: diff.c:5403 diff.c:5408 diff.c:5413
+#: diff.c:5472 diff.c:5477 diff.c:5482
msgid "<char>"
msgstr "<char>"
-#: diff.c:5404
+#: diff.c:5473
msgid "specify the character to indicate a new line instead of '+'"
msgstr "especifica el char para indicar una nueva línea en lugar de '+'"
-#: diff.c:5409
+#: diff.c:5478
msgid "specify the character to indicate an old line instead of '-'"
msgstr "especifica el char para indicar una línea vieja en lugar de '-'"
-#: diff.c:5414
+#: diff.c:5483
msgid "specify the character to indicate a context instead of ' '"
msgstr "especifica el char para indicar un contexto en lugar de ' '"
-#: diff.c:5417
+#: diff.c:5486
msgid "Diff rename options"
msgstr "Opciones de diff rename"
-#: diff.c:5418
+#: diff.c:5487
msgid "<n>[/<m>]"
msgstr "<n>[/<m>]"
-#: diff.c:5419
+#: diff.c:5488
msgid "break complete rewrite changes into pairs of delete and create"
msgstr "descomponer los cambios de reescritura en pares de borrar y crear"
-#: diff.c:5423
+#: diff.c:5492
msgid "detect renames"
msgstr "detectar renombrados"
-#: diff.c:5427
+#: diff.c:5496
msgid "omit the preimage for deletes"
msgstr "omite la preimage para borrados"
-#: diff.c:5430
+#: diff.c:5499
msgid "detect copies"
msgstr "detectar copias"
-#: diff.c:5434
+#: diff.c:5503
msgid "use unmodified files as source to find copies"
msgstr "usa archivos no modificados como fuente para encontrar copias"
-#: diff.c:5436
+#: diff.c:5505
msgid "disable rename detection"
msgstr "deshabilita detección de renombres"
-#: diff.c:5439
+#: diff.c:5508
msgid "use empty blobs as rename source"
msgstr "usa blobs vacíos como fuente de renombre"
-#: diff.c:5441
+#: diff.c:5510
msgid "continue listing the history of a file beyond renames"
msgstr "continua listando el historial de un archivo más allá de renombres"
-#: diff.c:5444
+#: diff.c:5513
msgid ""
"prevent rename/copy detection if the number of rename/copy targets exceeds "
"given limit"
@@ -3562,155 +3676,159 @@
"previene detección de renombre/copias si el número de objetivos para "
"renombres/copias excede el límite dado"
-#: diff.c:5446
+#: diff.c:5515
msgid "Diff algorithm options"
msgstr "Opciones de algoritmos de diff"
-#: diff.c:5448
+#: diff.c:5517
msgid "produce the smallest possible diff"
msgstr "produce el diff más pequeño posible"
-#: diff.c:5451
+#: diff.c:5520
msgid "ignore whitespace when comparing lines"
msgstr "ignorar espacios en blanco cuando comparando líneas"
-#: diff.c:5454
+#: diff.c:5523
msgid "ignore changes in amount of whitespace"
msgstr "ignorar cambios en la cantidad de líneas en blanco"
-#: diff.c:5457
+#: diff.c:5526
msgid "ignore changes in whitespace at EOL"
msgstr "ignorar cambios en espacios en blanco en EOL"
-#: diff.c:5460
+#: diff.c:5529
msgid "ignore carrier-return at the end of line"
msgstr "ignora carrier-return al final de la línea"
-#: diff.c:5463
+#: diff.c:5532
msgid "ignore changes whose lines are all blank"
msgstr "ignora cambios cuyas líneas son todas en blanco"
-#: diff.c:5466
+#: diff.c:5534 diff.c:5556 diff.c:5559 diff.c:5604
+msgid "<regex>"
+msgstr "<regex>"
+
+#: diff.c:5535
+msgid "ignore changes whose all lines match <regex>"
+msgstr "ignora cambios cuyas líneas concuerdan con <regex>"
+
+#: diff.c:5538
msgid "heuristic to shift diff hunk boundaries for easy reading"
msgstr "heurística para cambiar los límites de hunk para una fácil lectura"
-#: diff.c:5469
+#: diff.c:5541
msgid "generate diff using the \"patience diff\" algorithm"
msgstr "genera un diff usando algoritmo \"patience diff\""
-#: diff.c:5473
+#: diff.c:5545
msgid "generate diff using the \"histogram diff\" algorithm"
msgstr "genera un diff usando algoritmo \"histogram diff\""
-#: diff.c:5475
+#: diff.c:5547
msgid "<algorithm>"
msgstr "<algoritmo>"
-#: diff.c:5476
+#: diff.c:5548
msgid "choose a diff algorithm"
msgstr "escoge un algoritmo para diff"
-#: diff.c:5478
+#: diff.c:5550
msgid "<text>"
msgstr "<texto>"
-#: diff.c:5479
+#: diff.c:5551
msgid "generate diff using the \"anchored diff\" algorithm"
msgstr "genera un diff usando algoritmo \"anchored diff\""
-#: diff.c:5481 diff.c:5490 diff.c:5493
+#: diff.c:5553 diff.c:5562 diff.c:5565
msgid "<mode>"
msgstr "<modo>"
-#: diff.c:5482
+#: diff.c:5554
msgid "show word diff, using <mode> to delimit changed words"
msgstr ""
"muestra diff por palabras usando <modo> para delimitar las palabras cambiadas"
-#: diff.c:5484 diff.c:5487 diff.c:5532
-msgid "<regex>"
-msgstr "<regex>"
-
-#: diff.c:5485
+#: diff.c:5557
msgid "use <regex> to decide what a word is"
msgstr "usa <regex> para decidir que palabra es"
-#: diff.c:5488
+#: diff.c:5560
msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
msgstr "equivalente a --word-diff=color --word-diff-regex=<regex>"
-#: diff.c:5491
+#: diff.c:5563
msgid "moved lines of code are colored differently"
msgstr "líneas movidas de código están coloreadas diferente"
-#: diff.c:5494
+#: diff.c:5566
msgid "how white spaces are ignored in --color-moved"
msgstr "como espacios en blanco son ignorados en --color-moved"
-#: diff.c:5497
+#: diff.c:5569
msgid "Other diff options"
msgstr "Otras opciones de diff"
-#: diff.c:5499
+#: diff.c:5571
msgid "when run from subdir, exclude changes outside and show relative paths"
msgstr ""
"cuando ejecutado desde un subdir, excluye cambios del exterior y muestra "
"paths relativos"
-#: diff.c:5503
+#: diff.c:5575
msgid "treat all files as text"
msgstr "tratar todos los archivos como texto"
-#: diff.c:5505
+#: diff.c:5577
msgid "swap two inputs, reverse the diff"
msgstr "cambia dos inputs, invierte el diff"
-#: diff.c:5507
+#: diff.c:5579
msgid "exit with 1 if there were differences, 0 otherwise"
msgstr "termina con 1 si hubieron diferencias, de lo contrario con 0"
-#: diff.c:5509
+#: diff.c:5581
msgid "disable all output of the program"
msgstr "deshabilita todo el output del programa"
-#: diff.c:5511
+#: diff.c:5583
msgid "allow an external diff helper to be executed"
msgstr "permite la ejecución de un diff helper externo"
-#: diff.c:5513
+#: diff.c:5585
msgid "run external text conversion filters when comparing binary files"
msgstr ""
"ejecuta filtros de conversión de texto externos cuando comparando binarios"
-#: diff.c:5515
+#: diff.c:5587
msgid "<when>"
msgstr "<cuando>"
-#: diff.c:5516
+#: diff.c:5588
msgid "ignore changes to submodules in the diff generation"
msgstr "ignorar cambios a submódulos en la generación de diff"
-#: diff.c:5519
+#: diff.c:5591
msgid "<format>"
msgstr "<formato>"
-#: diff.c:5520
+#: diff.c:5592
msgid "specify how differences in submodules are shown"
msgstr "especifica como son mostradas las diferencias en submódulos"
-#: diff.c:5524
+#: diff.c:5596
msgid "hide 'git add -N' entries from the index"
msgstr "ocultar entradas 'git add -N' del index"
-#: diff.c:5527
+#: diff.c:5599
msgid "treat 'git add -N' entries as real in the index"
msgstr "trata entradas 'git add -N' como reales en el index"
-#: diff.c:5529
+#: diff.c:5601
msgid "<string>"
msgstr "<string>"
-#: diff.c:5530
+#: diff.c:5602
msgid ""
"look for differences that change the number of occurrences of the specified "
"string"
@@ -3718,7 +3836,7 @@
"busca por diferencias que cambien el número de ocurrencias para el string "
"especificado"
-#: diff.c:5533
+#: diff.c:5605
msgid ""
"look for differences that change the number of occurrences of the specified "
"regex"
@@ -3726,23 +3844,35 @@
"busca por diferencias que cambien el número de ocurrencias para el regex "
"especificado"
-#: diff.c:5536
+#: diff.c:5608
msgid "show all changes in the changeset with -S or -G"
msgstr "mostrar todos los cambios en el changeset con -S o -G"
-#: diff.c:5539
+#: diff.c:5611
msgid "treat <string> in -S as extended POSIX regular expression"
msgstr "tratar <string> en -S como una expresión regular extendida de POSIX"
-#: diff.c:5542
+#: diff.c:5614
msgid "control the order in which files appear in the output"
msgstr "controlar el orden en el que los archivos aparecen en la salida"
-#: diff.c:5543
+#: diff.c:5615 diff.c:5618
+msgid "<path>"
+msgstr "<ruta>"
+
+#: diff.c:5616
+msgid "show the change in the specified path first"
+msgstr "mostrar el cambio en la ruta especificada primero"
+
+#: diff.c:5619
+msgid "skip the output to the specified path"
+msgstr "saltar el output de la ruta especificada"
+
+#: diff.c:5621
msgid "<object-id>"
msgstr "<id-objeto>"
-#: diff.c:5544
+#: diff.c:5622
msgid ""
"look for differences that change the number of occurrences of the specified "
"object"
@@ -3750,33 +3880,33 @@
"busca por diferencias que cambien el número de ocurrencias para el objeto "
"especificado"
-#: diff.c:5546
+#: diff.c:5624
msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
-#: diff.c:5547
+#: diff.c:5625
msgid "select files by diff type"
msgstr "selecciona archivos por tipo de diff"
-#: diff.c:5549
+#: diff.c:5627
msgid "<file>"
msgstr "<archivo>"
-#: diff.c:5550
+#: diff.c:5628
msgid "Output to a specific file"
msgstr "Output a un archivo específico"
-#: diff.c:6205
+#: diff.c:6285
msgid "inexact rename detection was skipped due to too many files."
msgstr ""
"detección de cambio de nombre inexacta fue saltada por haber muchos archivos."
-#: diff.c:6208
+#: diff.c:6288
msgid "only found copies from modified paths due to too many files."
msgstr ""
"solo se encontraron copias de rutas modificadas por haber muchos archivos."
-#: diff.c:6211
+#: diff.c:6291
#, c-format
msgid ""
"you may want to set your %s variable to at least %d and retry the command."
@@ -3789,65 +3919,70 @@
msgid "failed to read orderfile '%s'"
msgstr "falló al leer orden de archivos '%s'"
-#: diffcore-rename.c:592
+#: diffcore-rename.c:786
msgid "Performing inexact rename detection"
msgstr "Realizando una detección de cambios de nombre inexacta"
-#: dir.c:573
+#: diffcore-rotate.c:29
+#, c-format
+msgid "No such path '%s' in the diff"
+msgstr "No hay ruta '%s' en el diff"
+
+#: dir.c:578
#, c-format
msgid "pathspec '%s' did not match any file(s) known to git"
msgstr ""
"ruta especificada '%s' no concordó con ningún archivo(s) conocido por git"
-#: dir.c:713 dir.c:742 dir.c:755
+#: dir.c:718 dir.c:747 dir.c:760
#, c-format
msgid "unrecognized pattern: '%s'"
msgstr "patrón desconocido: '%s'"
-#: dir.c:772 dir.c:786
+#: dir.c:777 dir.c:791
#, c-format
msgid "unrecognized negative pattern: '%s'"
msgstr "patrón negativo no reconocido: '%s'"
-#: dir.c:804
+#: dir.c:809
#, c-format
msgid "your sparse-checkout file may have issues: pattern '%s' is repeated"
msgstr ""
"tu archivo sparse-checkout tal vez tenga errores: patrón '%s' está repetido"
-#: dir.c:814
+#: dir.c:819
msgid "disabling cone pattern matching"
msgstr "deshabilitar coincidencia de patrónes cono"
-#: dir.c:1191
+#: dir.c:1198
#, c-format
msgid "cannot use %s as an exclude file"
msgstr "no se puede usar %s como archivo de exclusión"
-#: dir.c:2296
+#: dir.c:2305
#, c-format
msgid "could not open directory '%s'"
msgstr "no se pudo abrir el directorio '%s'"
-#: dir.c:2596
+#: dir.c:2605
msgid "failed to get kernel name and information"
msgstr "falló al conseguir la información y nombre del kernel"
-#: dir.c:2720
+#: dir.c:2729
msgid "untracked cache is disabled on this system or location"
msgstr "untracked cache está desactivado en este sistema o ubicación"
-#: dir.c:3502
+#: dir.c:3534
#, c-format
msgid "index file corrupt in repo %s"
msgstr "archivo índice corrompido en repositorio %s"
-#: dir.c:3547 dir.c:3552
+#: dir.c:3579 dir.c:3584
#, c-format
msgid "could not create directories for %s"
msgstr "no se pudo crear directorios para %s"
-#: dir.c:3581
+#: dir.c:3613
#, c-format
msgid "could not migrate git directory from '%s' to '%s'"
msgstr "no se pudo migrar el directorio git de '%s' a '%s'"
@@ -3866,12 +4001,12 @@
msgid "could not stat file '%s'"
msgstr "no se pudo establecer el archivo '%s'"
-#: environment.c:150
+#: environment.c:152
#, c-format
msgid "bad git namespace path \"%s\""
msgstr "ruta de namespace de git mala \"%s\""
-#: environment.c:337
+#: environment.c:335
#, c-format
msgid "could not set GIT_DIR to '%s'"
msgstr "no se pudo configurar GIT_DIR a '%s'"
@@ -3881,260 +4016,264 @@
msgid "too many args to run %s"
msgstr "demasiados argumentos para correr %s"
-#: fetch-pack.c:152
+#: fetch-pack.c:177
msgid "git fetch-pack: expected shallow list"
msgstr "git fetch-pack: lista poco profunda esperada"
-#: fetch-pack.c:155
+#: fetch-pack.c:180
msgid "git fetch-pack: expected a flush packet after shallow list"
msgstr ""
"git fetch-pack: se esperaba un flush packet luego de la lista superficial"
-#: fetch-pack.c:166
+#: fetch-pack.c:191
msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
msgstr "git fetch-pack: se esperaba ACK/NAK, se obtuvo un flush packet"
-#: fetch-pack.c:186
+#: fetch-pack.c:211
#, c-format
msgid "git fetch-pack: expected ACK/NAK, got '%s'"
msgstr "git fetch-pack: se esperaba ACK/NAK, se obtuvo '%s'"
-#: fetch-pack.c:197
+#: fetch-pack.c:222
msgid "unable to write to remote"
msgstr "no se puede escribir al remoto"
-#: fetch-pack.c:259
+#: fetch-pack.c:283
msgid "--stateless-rpc requires multi_ack_detailed"
msgstr "--stateless-rpc requiere multi_ack_detailed"
-#: fetch-pack.c:358 fetch-pack.c:1408
+#: fetch-pack.c:378 fetch-pack.c:1457
#, c-format
msgid "invalid shallow line: %s"
msgstr "línea poco profunda inválida: %s"
-#: fetch-pack.c:364 fetch-pack.c:1414
+#: fetch-pack.c:384 fetch-pack.c:1463
#, c-format
msgid "invalid unshallow line: %s"
msgstr "línea superficial inválida: %s"
-#: fetch-pack.c:366 fetch-pack.c:1416
+#: fetch-pack.c:386 fetch-pack.c:1465
#, c-format
msgid "object not found: %s"
msgstr "objeto no encontrado: %s"
-#: fetch-pack.c:369 fetch-pack.c:1419
+#: fetch-pack.c:389 fetch-pack.c:1468
#, c-format
msgid "error in object: %s"
msgstr "error en objeto: %s"
-#: fetch-pack.c:371 fetch-pack.c:1421
+#: fetch-pack.c:391 fetch-pack.c:1470
#, c-format
msgid "no shallow found: %s"
msgstr "superficie no encontrada: %s"
-#: fetch-pack.c:374 fetch-pack.c:1425
+#: fetch-pack.c:394 fetch-pack.c:1474
#, c-format
msgid "expected shallow/unshallow, got %s"
msgstr "se esperaba shallow/unshallow, se obtuvo %s"
-#: fetch-pack.c:416
+#: fetch-pack.c:434
#, c-format
msgid "got %s %d %s"
msgstr "se obtuvo %s %d %s"
-#: fetch-pack.c:433
+#: fetch-pack.c:451
#, c-format
msgid "invalid commit %s"
msgstr "commit inválido %s"
-#: fetch-pack.c:464
+#: fetch-pack.c:482
msgid "giving up"
msgstr "rindiéndose"
-#: fetch-pack.c:477 progress.c:336
+#: fetch-pack.c:495 progress.c:339
msgid "done"
msgstr "listo"
-#: fetch-pack.c:489
+#: fetch-pack.c:507
#, c-format
msgid "got %s (%d) %s"
msgstr "se obtuvo %s (%d) %s"
-#: fetch-pack.c:535
+#: fetch-pack.c:543
#, c-format
msgid "Marking %s as complete"
msgstr "Marcando %s como completa"
-#: fetch-pack.c:756
+#: fetch-pack.c:758
#, c-format
msgid "already have %s (%s)"
msgstr "ya se tiene %s (%s)"
-#: fetch-pack.c:821
+#: fetch-pack.c:844
msgid "fetch-pack: unable to fork off sideband demultiplexer"
msgstr "fetch-pack: no se puede extraer un demultiplexor de banda lateral"
-#: fetch-pack.c:829
+#: fetch-pack.c:852
msgid "protocol error: bad pack header"
msgstr "error de protocolo: paquete de header erróneo"
-#: fetch-pack.c:910
+#: fetch-pack.c:946
#, c-format
msgid "fetch-pack: unable to fork off %s"
msgstr "fetch-pack: no se puede quitar %s"
-#: fetch-pack.c:927
+#: fetch-pack.c:952
+msgid "fetch-pack: invalid index-pack output"
+msgstr "fetch-pack: salida de paquete de índice no válida"
+
+#: fetch-pack.c:969
#, c-format
msgid "%s failed"
msgstr "%s falló"
-#: fetch-pack.c:929
+#: fetch-pack.c:971
msgid "error in sideband demultiplexer"
msgstr "error en demultiplexor de banda lateral"
-#: fetch-pack.c:976
+#: fetch-pack.c:1031
#, c-format
msgid "Server version is %.*s"
msgstr "Versión de servidor es %.*s"
-#: fetch-pack.c:981 fetch-pack.c:987 fetch-pack.c:990 fetch-pack.c:996
-#: fetch-pack.c:1000 fetch-pack.c:1004 fetch-pack.c:1008 fetch-pack.c:1012
-#: fetch-pack.c:1016 fetch-pack.c:1020 fetch-pack.c:1024 fetch-pack.c:1028
-#: fetch-pack.c:1034 fetch-pack.c:1040 fetch-pack.c:1045 fetch-pack.c:1050
+#: fetch-pack.c:1039 fetch-pack.c:1045 fetch-pack.c:1048 fetch-pack.c:1054
+#: fetch-pack.c:1058 fetch-pack.c:1062 fetch-pack.c:1066 fetch-pack.c:1070
+#: fetch-pack.c:1074 fetch-pack.c:1078 fetch-pack.c:1082 fetch-pack.c:1086
+#: fetch-pack.c:1092 fetch-pack.c:1098 fetch-pack.c:1103 fetch-pack.c:1108
#, c-format
msgid "Server supports %s"
msgstr "El servidor soporta %s"
-#: fetch-pack.c:983
+#: fetch-pack.c:1041
msgid "Server does not support shallow clients"
msgstr "El servidor no soporta clientes superficiales"
-#: fetch-pack.c:1043
+#: fetch-pack.c:1101
msgid "Server does not support --shallow-since"
msgstr "El servidor no soporta --shalow-since"
-#: fetch-pack.c:1048
+#: fetch-pack.c:1106
msgid "Server does not support --shallow-exclude"
msgstr "El servidor no soporta --shalow-exclude"
-#: fetch-pack.c:1052
+#: fetch-pack.c:1110
msgid "Server does not support --deepen"
msgstr "El servidor no soporta --deepen"
-#: fetch-pack.c:1054
+#: fetch-pack.c:1112
msgid "Server does not support this repository's object format"
msgstr "El servidor no soporta el formato de objetos de este repositorio"
-#: fetch-pack.c:1071
+#: fetch-pack.c:1125
msgid "no common commits"
msgstr "no hay commits comunes"
-#: fetch-pack.c:1083 fetch-pack.c:1639
+#: fetch-pack.c:1138 fetch-pack.c:1682
msgid "git fetch-pack: fetch failed."
msgstr "git fetch-pack: fetch falló."
-#: fetch-pack.c:1211
+#: fetch-pack.c:1265
#, c-format
msgid "mismatched algorithms: client %s; server %s"
msgstr "algoritmos no compatibles: cliente %s; servidor %s"
-#: fetch-pack.c:1215
+#: fetch-pack.c:1269
#, c-format
msgid "the server does not support algorithm '%s'"
msgstr "servidor no soporta el algoritmo '%s'"
-#: fetch-pack.c:1235
+#: fetch-pack.c:1289
msgid "Server does not support shallow requests"
msgstr "El servidor no soporta peticiones superficiales"
-#: fetch-pack.c:1242
+#: fetch-pack.c:1296
msgid "Server supports filter"
msgstr "El servidor soporta filtro"
-#: fetch-pack.c:1286
+#: fetch-pack.c:1335
msgid "unable to write request to remote"
msgstr "no se puede escribir request al remoto"
-#: fetch-pack.c:1304
+#: fetch-pack.c:1353
#, c-format
msgid "error reading section header '%s'"
msgstr "error leyendo sección header '%s'"
-#: fetch-pack.c:1310
+#: fetch-pack.c:1359
#, c-format
msgid "expected '%s', received '%s'"
msgstr "se esperaba '%s', se recibió '%s'"
-#: fetch-pack.c:1371
+#: fetch-pack.c:1420
#, c-format
msgid "unexpected acknowledgment line: '%s'"
msgstr "línea de confirmación inesperada: '%s'"
-#: fetch-pack.c:1376
+#: fetch-pack.c:1425
#, c-format
msgid "error processing acks: %d"
msgstr "error procesando acks: %d"
-#: fetch-pack.c:1386
+#: fetch-pack.c:1435
msgid "expected packfile to be sent after 'ready'"
msgstr "espere que el packfile sea mandado luego del 'listo'"
-#: fetch-pack.c:1388
+#: fetch-pack.c:1437
msgid "expected no other sections to be sent after no 'ready'"
msgstr "espere que ninguna otra sección sea enviada luego del 'listo'"
-#: fetch-pack.c:1430
+#: fetch-pack.c:1479
#, c-format
msgid "error processing shallow info: %d"
msgstr "error procesando información superficial: %d"
-#: fetch-pack.c:1477
+#: fetch-pack.c:1526
#, c-format
msgid "expected wanted-ref, got '%s'"
msgstr "se esperaba wanted-ref, se obtuvo '%s'"
-#: fetch-pack.c:1482
+#: fetch-pack.c:1531
#, c-format
msgid "unexpected wanted-ref: '%s'"
msgstr "wanted-ref inesperado: '%s'"
-#: fetch-pack.c:1487
+#: fetch-pack.c:1536
#, c-format
msgid "error processing wanted refs: %d"
msgstr "error procesando refs deseadas: %d"
-#: fetch-pack.c:1517
+#: fetch-pack.c:1566
msgid "git fetch-pack: expected response end packet"
msgstr "git fetch-pack: se espera un paquete final de respuesta"
-#: fetch-pack.c:1921
+#: fetch-pack.c:1960
msgid "no matching remote head"
msgstr "no concuerda el head remoto"
-#: fetch-pack.c:1944 builtin/clone.c:692
+#: fetch-pack.c:1983 builtin/clone.c:693
msgid "remote did not send all necessary objects"
msgstr "remoto no mando todos los objetos necesarios"
-#: fetch-pack.c:1971
+#: fetch-pack.c:2010
#, c-format
msgid "no such remote ref %s"
msgstr "no existe ref remota %s"
-#: fetch-pack.c:1974
+#: fetch-pack.c:2013
#, c-format
msgid "Server does not allow request for unadvertised object %s"
msgstr "El servidor no permite solicitudes de objetos inadvertidos %s"
-#: gpg-interface.c:272
+#: gpg-interface.c:273
msgid "could not create temporary file"
msgstr "no se pudo crear archivo temporal"
-#: gpg-interface.c:275
+#: gpg-interface.c:276
#, c-format
msgid "failed writing detached signature to '%s'"
msgstr "falló al escribir la firma separada para '%s'"
-#: gpg-interface.c:457
+#: gpg-interface.c:470
msgid "gpg failed to sign the data"
msgstr "gpg falló al firmar la data"
@@ -4143,7 +4282,7 @@
msgid "ignore invalid color '%.*s' in log.graphColors"
msgstr "ignora color inválido '%.*s' en log.graphColors"
-#: grep.c:668
+#: grep.c:543
msgid ""
"given pattern contains NULL byte (via -f <file>). This is only supported "
"with -P under PCRE v2"
@@ -4151,18 +4290,18 @@
"el patrón provisto contiene bytes NULL (via -f <archivo>). Esto solo es "
"soportado con -P bajo PCRE v2"
-#: grep.c:2128
+#: grep.c:1906
#, c-format
msgid "'%s': unable to read %s"
msgstr "'%s': no es posible leer %s"
-#: grep.c:2145 setup.c:176 builtin/clone.c:411 builtin/diff.c:89
+#: grep.c:1923 setup.c:176 builtin/clone.c:412 builtin/diff.c:90
#: builtin/rm.c:135
#, c-format
msgid "failed to stat '%s'"
msgstr "falló al marcar '%s'"
-#: grep.c:2156
+#: grep.c:1934
#, c-format
msgid "'%s': short read"
msgstr "'%s': lectura corta"
@@ -4219,41 +4358,41 @@
msgid "Low-level Commands / Internal Helpers"
msgstr "Comandos de bajo nivel / Auxiliares internos"
-#: help.c:298
+#: help.c:300
#, c-format
msgid "available git commands in '%s'"
msgstr "comandos disponibles de git en '%s'"
-#: help.c:305
+#: help.c:307
msgid "git commands available from elsewhere on your $PATH"
msgstr "comandos disponibles de git desde otro lugar en tu $PATH"
-#: help.c:314
+#: help.c:316
msgid "These are common Git commands used in various situations:"
msgstr "Estos son comandos comunes de Git usados en varias situaciones:"
-#: help.c:363 git.c:99
+#: help.c:365 git.c:100
#, c-format
msgid "unsupported command listing type '%s'"
msgstr "comando de listado de tipos no soportado '%s'"
-#: help.c:403
-msgid "The common Git guides are:"
-msgstr "Las guías comunes de Git son:"
+#: help.c:405
+msgid "The Git concept guides are:"
+msgstr "Las guías de conceptos de Git son:"
-#: help.c:427
+#: help.c:429
msgid "See 'git help <command>' to read about a specific subcommand"
msgstr "Vea 'git help <comando>' para leer sobre los subcomandos específicos"
-#: help.c:432
+#: help.c:434
msgid "External commands"
msgstr "Comandos externos"
-#: help.c:447
+#: help.c:449
msgid "Command aliases"
msgstr "Aliases de comando"
-#: help.c:511
+#: help.c:527
#, c-format
msgid ""
"'%s' appears to be a git command, but we were not\n"
@@ -4262,31 +4401,31 @@
"'%s' parece ser un comando de git, pero no hemos\n"
"podido ejecutarlo. ¿Tal vez git-%s se ha roto?"
-#: help.c:570
-msgid "Uh oh. Your system reports no Git commands at all."
-msgstr "Oh oh. Tu sistema no reporta ningún comando de Git."
-
-#: help.c:592
-#, c-format
-msgid "WARNING: You called a Git command named '%s', which does not exist."
-msgstr "PELIGRO: Has llamado a un comando de Git '%s', el cual no existe."
-
-#: help.c:597
-#, c-format
-msgid "Continuing under the assumption that you meant '%s'."
-msgstr "Continuando asumiendo que quisiste decir '%s'."
-
-#: help.c:602
-#, c-format
-msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
-msgstr "Continuando en %0.1f segundos, asumiendo que tu dijiste '%s'."
-
-#: help.c:610
+#: help.c:543 help.c:631
#, c-format
msgid "git: '%s' is not a git command. See 'git --help'."
msgstr "git: '%s'no es un comando de git. Mira 'git --help'."
-#: help.c:614
+#: help.c:591
+msgid "Uh oh. Your system reports no Git commands at all."
+msgstr "Oh oh. Tu sistema no reporta ningún comando de Git."
+
+#: help.c:613
+#, c-format
+msgid "WARNING: You called a Git command named '%s', which does not exist."
+msgstr "PELIGRO: Has llamado a un comando de Git '%s', el cual no existe."
+
+#: help.c:618
+#, c-format
+msgid "Continuing under the assumption that you meant '%s'."
+msgstr "Continuando asumiendo que quisiste decir '%s'."
+
+#: help.c:623
+#, c-format
+msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
+msgstr "Continuando en %0.1f segundos, asumiendo que tu dijiste '%s'."
+
+#: help.c:635
msgid ""
"\n"
"The most similar command is"
@@ -4300,16 +4439,16 @@
"\n"
"Los comandos más similares son"
-#: help.c:654
+#: help.c:675
msgid "git version [<options>]"
msgstr "git versión [<opciones>]"
-#: help.c:709
+#: help.c:730
#, c-format
msgid "%s: %s - %s"
msgstr "%s: %s - %s"
-#: help.c:713
+#: help.c:734
msgid ""
"\n"
"Did you mean this?"
@@ -4323,7 +4462,15 @@
"\n"
"¿Quisiste decir alguno de estos?"
-#: ident.c:349
+#: ident.c:353
+msgid "Author identity unknown\n"
+msgstr "Identidad del autor desconocido\n"
+
+#: ident.c:356
+msgid "Committer identity unknown\n"
+msgstr "Se desconoce la identidad del autor\n"
+
+#: ident.c:362
msgid ""
"\n"
"*** Please tell me who you are.\n"
@@ -4349,66 +4496,66 @@
"Omite --global para configurar tu identidad solo en este repositorio.\n"
"\n"
-#: ident.c:379
+#: ident.c:397
msgid "no email was given and auto-detection is disabled"
msgstr "no se entrego ningún email y la detección automática está desactivada"
-#: ident.c:384
+#: ident.c:402
#, c-format
msgid "unable to auto-detect email address (got '%s')"
msgstr "no es posible auto-detectar la dirección de correo (se obtuvo '%s')"
-#: ident.c:401
+#: ident.c:419
msgid "no name was given and auto-detection is disabled"
msgstr "no se entrego ningún nombre y la detección automática está desactivada"
-#: ident.c:407
+#: ident.c:425
#, c-format
msgid "unable to auto-detect name (got '%s')"
msgstr "no es posible auto-detectar el nombre (se obtuvo '%s')"
-#: ident.c:415
+#: ident.c:433
#, c-format
msgid "empty ident name (for <%s>) not allowed"
msgstr "no se puede tener un nombre vacío (para <%s>)"
-#: ident.c:421
+#: ident.c:439
#, c-format
msgid "name consists only of disallowed characters: %s"
msgstr "el nombre consiste solo de caracteres no permitidos: %s"
-#: ident.c:436 builtin/commit.c:634
+#: ident.c:454 builtin/commit.c:634
#, c-format
msgid "invalid date format: %s"
msgstr "formato de fecha inválido: %s"
-#: list-objects-filter-options.c:58
+#: list-objects-filter-options.c:81
msgid "expected 'tree:<depth>'"
msgstr "se esperaba 'tree:<depth>'"
-#: list-objects-filter-options.c:73
+#: list-objects-filter-options.c:96
msgid "sparse:path filters support has been dropped"
msgstr "soporte para filtros sparse:path ha sido discontinuado"
-#: list-objects-filter-options.c:86
+#: list-objects-filter-options.c:109
#, c-format
msgid "invalid filter-spec '%s'"
msgstr "filtro -spec inválido '%s'"
-#: list-objects-filter-options.c:102
+#: list-objects-filter-options.c:125
#, c-format
msgid "must escape char in sub-filter-spec: '%c'"
msgstr "tienes que escapar el caracter en sub-filter-spec: '%c'"
-#: list-objects-filter-options.c:144
+#: list-objects-filter-options.c:167
msgid "expected something after combine:"
msgstr "se espera algo luego de combine:"
-#: list-objects-filter-options.c:226
+#: list-objects-filter-options.c:249
msgid "multiple filter-specs cannot be combined"
msgstr "no se pueden combinar múltiples tipos de especificaciones de filtro"
-#: list-objects-filter-options.c:330
+#: list-objects-filter-options.c:361
msgid "unable to upgrade repository format to support partial clone"
msgstr ""
"no es posible actualizar el formato del repositorio para soportar clonado "
@@ -4464,10 +4611,266 @@
msgid "Unable to create '%s.lock': %s"
msgstr "No se pudo crear '%s.lock': %s"
-#: ls-refs.c:109
+#: ls-refs.c:37
+#, c-format
+msgid "invalid value '%s' for lsrefs.unborn"
+msgstr "valor inválido '%s' para lsrefs.unborn"
+
+#: ls-refs.c:167
msgid "expected flush after ls-refs arguments"
msgstr "se esperaba un flush luego de argumentos ls-refs"
+#: merge-ort.c:888 merge-recursive.c:1191
+#, c-format
+msgid "Failed to merge submodule %s (not checked out)"
+msgstr "Falló al fusionar el submódulo %s (no revisado)"
+
+#: merge-ort.c:897 merge-recursive.c:1198
+#, c-format
+msgid "Failed to merge submodule %s (commits not present)"
+msgstr "Falló al fusionar el submódulo %s (commits no presentes)"
+
+#: merge-ort.c:906 merge-recursive.c:1205
+#, c-format
+msgid "Failed to merge submodule %s (commits don't follow merge-base)"
+msgstr "Falló el fusionar submódulo %s (commits no siguen la fusión base)"
+
+#: merge-ort.c:916 merge-ort.c:923
+#, c-format
+msgid "Note: Fast-forwarding submodule %s to %s"
+msgstr "Nota: Fast-forward de submódulo %s a %s"
+
+#: merge-ort.c:944
+#, c-format
+msgid "Failed to merge submodule %s"
+msgstr "falló al fusionar el submódulo %s"
+
+#: merge-ort.c:951
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but a possible merge resolution exists:\n"
+"%s\n"
+msgstr ""
+"Falló al fusionar el submódulo %s, pero existen posibles soluciones de "
+"fusión:\n"
+"%s\n"
+
+#: merge-ort.c:955 merge-recursive.c:1259
+#, c-format
+msgid ""
+"If this is correct simply add it to the index for example\n"
+"by using:\n"
+"\n"
+" git update-index --cacheinfo 160000 %s \"%s\"\n"
+"\n"
+"which will accept this suggestion.\n"
+msgstr ""
+"Si esto es correcto simplemente agrégalo al índice por ejemplo\n"
+"usando:\n"
+"\n"
+" git update-index --cacheinfo 160000 %s \"%s\"\n"
+"\n"
+"el cual aceptará esta sugerencia.\n"
+
+#: merge-ort.c:968
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but multiple possible merges exist:\n"
+"%s"
+msgstr ""
+"Falló al fusionar el submódulo %s, pero existen múltipes fusiones posibles:\n"
+"%s"
+
+#: merge-ort.c:1127 merge-recursive.c:1341
+msgid "Failed to execute internal merge"
+msgstr "Falló al ejecutar la fusión interna"
+
+#: merge-ort.c:1132 merge-recursive.c:1346
+#, c-format
+msgid "Unable to add %s to database"
+msgstr "No es posible agregar %s a la base de datos"
+
+#: merge-ort.c:1139 merge-recursive.c:1378
+#, c-format
+msgid "Auto-merging %s"
+msgstr "Auto-fusionando %s"
+
+#: merge-ort.c:1278 merge-recursive.c:2100
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
+"implicit directory rename(s) putting the following path(s) there: %s."
+msgstr ""
+"CONFLICTO (cambio de nombre de directorio implícito): Archivo/directorio "
+"existente en %s se interpone con el cambio de nombres implícito, poniendo "
+"la(s) siguiente(s) ruta(s) aquí: %s."
+
+#: merge-ort.c:1288 merge-recursive.c:2110
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
+"implicit directory renames tried to put these paths there: %s"
+msgstr ""
+"CONFLICTO (cambio de nombre implícito): No se puede mapear más de una ruta "
+"para %s; cambio de nombre implícito intentó poner estas rutas: %s"
+
+#: merge-ort.c:1471
+#, c-format
+msgid ""
+"CONFLICT (directory rename split): Unclear where to rename %s to; it was "
+"renamed to multiple other directories, with no destination getting a "
+"majority of the files."
+msgstr ""
+"CONFLICTO (división de cambio de nombre de directorio): No está claro dónde "
+"cambiar el nombre de %s; se le cambió el nombre a varios otros directorios, "
+"sin que ningún destino obtenga la mayoría de los archivos."
+
+#: merge-ort.c:1637 merge-recursive.c:2447
+#, c-format
+msgid ""
+"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
+"renamed."
+msgstr ""
+"PELIGRO: Evitando aplicar %s -> %s renombrado a %s, porque %s mismo fue "
+"renombrado."
+
+#: merge-ort.c:1781 merge-recursive.c:3215
+#, c-format
+msgid ""
+"Path updated: %s added in %s inside a directory that was renamed in %s; "
+"moving it to %s."
+msgstr ""
+"Path actualizado: %s agregado en %s dentro de un directorio que fue "
+"renombrado en %s; moviéndolo a %s."
+
+#: merge-ort.c:1788 merge-recursive.c:3222
+#, c-format
+msgid ""
+"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
+"%s; moving it to %s."
+msgstr ""
+"Path actualizado: %s renombrado a %s en %s, dentro de un directorio que fue "
+"renombrado en %s; moviéndolo a %s."
+
+#: merge-ort.c:1801 merge-recursive.c:3218
+#, c-format
+msgid ""
+"CONFLICT (file location): %s added in %s inside a directory that was renamed "
+"in %s, suggesting it should perhaps be moved to %s."
+msgstr ""
+"CONFLICTO (ubicación de archivo): %s agregado en %s dentro de un directorio "
+"que fue renombrado en %s, sugerimos que debería ser movido a %s."
+
+#: merge-ort.c:1809 merge-recursive.c:3225
+#, c-format
+msgid ""
+"CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
+"was renamed in %s, suggesting it should perhaps be moved to %s."
+msgstr ""
+"CONFLICTO (ubicación de archivo): %s renombrado a %s en %s, dentro de un "
+"directorio que fue renombrado en %s, sugiriendo que tal vez debería ser "
+"movido a %s."
+
+#: merge-ort.c:1952
+#, c-format
+msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
+msgstr ""
+"CONFLICTO (renombrar / renombrar): %s renombrado a %s en %s y %s en %s."
+
+#: merge-ort.c:2047
+#, c-format
+msgid ""
+"CONFLICT (rename involved in collision): rename of %s -> %s has content "
+"conflicts AND collides with another path; this may result in nested conflict "
+"markers."
+msgstr ""
+"CONFLICTO (cambio de nombre involucrado en colisión): cambio de nombre de%s -"
+">%s tiene conflictos de contenido Y colisiona con otra ruta; esto puede "
+"resultar en marcadores de conflicto anidados."
+
+#: merge-ort.c:2066 merge-ort.c:2090
+#, c-format
+msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
+msgstr ""
+"CONFLICTO (renombrar / eliminar): %s renombrado a %s en %s, pero eliminado "
+"en %s."
+
+#: merge-ort.c:2735
+#, c-format
+msgid ""
+"CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
+"%s instead."
+msgstr ""
+"CONFLICTO (archivo / directorio): directorio en el camino de%s de%s; "
+"moviéndolo a%s en su lugar."
+
+#: merge-ort.c:2808
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed %s "
+"of them so each can be recorded somewhere."
+msgstr ""
+"CONFLICTO (tipos distintos):%s tenía tipos diferentes en cada lado; "
+"renombrado%s de ellos para que cada uno pueda ser grabado en algún lugar."
+
+#: merge-ort.c:2812
+msgid "both"
+msgstr "ambos"
+
+#: merge-ort.c:2812
+msgid "one"
+msgstr "uno"
+
+#: merge-ort.c:2907 merge-recursive.c:3052
+msgid "content"
+msgstr "contenido"
+
+#: merge-ort.c:2909 merge-recursive.c:3056
+msgid "add/add"
+msgstr "agregar/agregar"
+
+#: merge-ort.c:2911 merge-recursive.c:3101
+msgid "submodule"
+msgstr "submódulo"
+
+#: merge-ort.c:2913 merge-recursive.c:3102
+#, c-format
+msgid "CONFLICT (%s): Merge conflict in %s"
+msgstr "CONFLICTO (%s): Conflicto de fusión en %s"
+
+#: merge-ort.c:2938
+#, c-format
+msgid ""
+"CONFLICT (modify/delete): %s deleted in %s and modified in %s. Version %s "
+"of %s left in tree."
+msgstr ""
+"CONFLICTO (modificar / eliminar): %s eliminado en %s y modificado en %s. "
+"Versión %s de %s restante en el árbol."
+
+#. TRANSLATORS: The %s arguments are: 1) tree hash of a merge
+#. base, and 2-3) the trees for the two trees we're merging.
+#.
+#: merge-ort.c:3406
+#, c-format
+msgid "collecting merge info failed for trees %s, %s, %s"
+msgstr ""
+"La recopilación de información de fusión falló para los árboles %s, %s, %s"
+
+#: merge-ort-wrappers.c:13 merge-recursive.c:3661
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by merge:\n"
+" %s"
+msgstr ""
+"Los cambios locales de los siguientes archivos serán sobreescritos por "
+"merge:\n"
+" %s"
+
+#: merge-ort-wrappers.c:33 merge-recursive.c:3436
+#, c-format
+msgid "Already up to date!"
+msgstr "¡Ya está actualizado!"
+
#: merge-recursive.c:356
msgid "(bad commit)\n"
msgstr "(commit erróneo)\n"
@@ -4526,21 +4929,6 @@
msgid "do not know what to do with %06o %s '%s'"
msgstr "no se que hacer con %06o %s '%s'"
-#: merge-recursive.c:1191
-#, c-format
-msgid "Failed to merge submodule %s (not checked out)"
-msgstr "Falló al fusionar el submódulo %s (no revisado)"
-
-#: merge-recursive.c:1198
-#, c-format
-msgid "Failed to merge submodule %s (commits not present)"
-msgstr "Falló al fusionar el submódulo %s (commits no presentes)"
-
-#: merge-recursive.c:1205
-#, c-format
-msgid "Failed to merge submodule %s (commits don't follow merge-base)"
-msgstr "Falló el fusionar submódulo %s (commits no siguen la fusión base)"
-
#: merge-recursive.c:1213 merge-recursive.c:1225
#, c-format
msgid "Fast-forwarding submodule %s to the following commit:"
@@ -4566,42 +4954,11 @@
msgid "Found a possible merge resolution for the submodule:\n"
msgstr "Se encontró una posible solución de fusión para el submódulo:\n"
-#: merge-recursive.c:1259
-#, c-format
-msgid ""
-"If this is correct simply add it to the index for example\n"
-"by using:\n"
-"\n"
-" git update-index --cacheinfo 160000 %s \"%s\"\n"
-"\n"
-"which will accept this suggestion.\n"
-msgstr ""
-"Si esto es correcto simplemente agrégalo al índice por ejemplo\n"
-"usando:\n"
-"\n"
-" git update-index --cacheinfo 160000 %s \"%s\"\n"
-"\n"
-"el cual aceptará esta sugerencia.\n"
-
#: merge-recursive.c:1268
#, c-format
msgid "Failed to merge submodule %s (multiple merges found)"
msgstr "Falló al fusionar el submódulo %s (fusiones múltiples encontradas)"
-#: merge-recursive.c:1341
-msgid "Failed to execute internal merge"
-msgstr "Falló al ejecutar la fusión interna"
-
-#: merge-recursive.c:1346
-#, c-format
-msgid "Unable to add %s to database"
-msgstr "No es posible agregar %s a la base de datos"
-
-#: merge-recursive.c:1378
-#, c-format
-msgid "Auto-merging %s"
-msgstr "Auto-fusionando %s"
-
#: merge-recursive.c:1402
#, c-format
msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
@@ -4713,25 +5070,6 @@
"colocar %s porque el directorio %s fue renombrado a otros múltiples "
"directorios, sin ningún que contenga la mayoría de archivos."
-#: merge-recursive.c:2100
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
-"implicit directory rename(s) putting the following path(s) there: %s."
-msgstr ""
-"CONFLICTO (cambio de nombre de directorio implícito): Archivo/directorio "
-"existente en %s se interpone con el cambio de nombres implícito, poniendo "
-"la(s) siguiente(s) ruta(s) aquí: %s."
-
-#: merge-recursive.c:2110
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
-"implicit directory renames tried to put these paths there: %s"
-msgstr ""
-"CONFLICTO (cambio de nombre implícito): No se puede mapear más de una ruta "
-"para %s; cambio de nombre implícito intentó poner estas rutas: %s"
-
#: merge-recursive.c:2202
#, c-format
msgid ""
@@ -4741,15 +5079,6 @@
"CONFLICTO (renombrar/renombrar): Renombrar directorio %s->%s en %s. "
"Renombrar directorio %s->%s en %s"
-#: merge-recursive.c:2447
-#, c-format
-msgid ""
-"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
-"renamed."
-msgstr ""
-"PELIGRO: Evitando aplicar %s -> %s renombrado a %s, porque %s mismo fue "
-"renombrado."
-
#: merge-recursive.c:2973
#, c-format
msgid "cannot read object %s"
@@ -4768,70 +5097,16 @@
msgid "modified"
msgstr "modificado"
-#: merge-recursive.c:3052
-msgid "content"
-msgstr "contenido"
-
-#: merge-recursive.c:3056
-msgid "add/add"
-msgstr "agregar/agregar"
-
#: merge-recursive.c:3079
#, c-format
msgid "Skipped %s (merged same as existing)"
msgstr "Saltado %s (fusionado como existente)"
-#: merge-recursive.c:3101 git-submodule.sh:959
-msgid "submodule"
-msgstr "submódulo"
-
-#: merge-recursive.c:3102
-#, c-format
-msgid "CONFLICT (%s): Merge conflict in %s"
-msgstr "CONFLICTO (%s): Conflicto de fusión en %s"
-
#: merge-recursive.c:3132
#, c-format
msgid "Adding as %s instead"
msgstr "Agregando más bien como %s"
-#: merge-recursive.c:3215
-#, c-format
-msgid ""
-"Path updated: %s added in %s inside a directory that was renamed in %s; "
-"moving it to %s."
-msgstr ""
-"Path actualizado: %s agregado en %s dentro de un directorio que fue "
-"renombrado en %s; moviéndolo a %s."
-
-#: merge-recursive.c:3218
-#, c-format
-msgid ""
-"CONFLICT (file location): %s added in %s inside a directory that was renamed "
-"in %s, suggesting it should perhaps be moved to %s."
-msgstr ""
-"CONFLICTO (ubicación de archivo): %s agregado en %s dentro de un directorio "
-"que fue renombrado en %s, sugerimos que debería ser movido a %s."
-
-#: merge-recursive.c:3222
-#, c-format
-msgid ""
-"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
-"%s; moving it to %s."
-msgstr ""
-"Path actualizado: %s renombrado a %s en %s, dentro de un directorio que fue "
-"renombrado en %s; moviéndolo a %s."
-
-#: merge-recursive.c:3225
-#, c-format
-msgid ""
-"CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
-"was renamed in %s, suggesting it should perhaps be moved to %s."
-msgstr ""
-"CONFLICTO (ubicación de archivo): %s renombrado a %s en %s, dentro de un "
-"directorio que fue renombrado en %s, sugiriendo que tal vez debería ser "
-"movido a %s."
-
#: merge-recursive.c:3339
#, c-format
msgid "Removing %s"
@@ -4862,46 +5137,33 @@
msgid "CONFLICT (add/add): Merge conflict in %s"
msgstr "CONFLICTO (add/add): Conflicto de merge en %s"
-#: merge-recursive.c:3436
-msgid "Already up to date!"
-msgstr "¡Ya está actualizado!"
-
#: merge-recursive.c:3445
#, c-format
msgid "merging of trees %s and %s failed"
msgstr "falló la fusión de los árboles %s y %s"
-#: merge-recursive.c:3549
+#: merge-recursive.c:3539
msgid "Merging:"
msgstr "Fusionando:"
-#: merge-recursive.c:3562
+#: merge-recursive.c:3552
#, c-format
msgid "found %u common ancestor:"
msgid_plural "found %u common ancestors:"
msgstr[0] "se encontró %u ancestro común:"
msgstr[1] "se encontraron %u ancestros comunes:"
-#: merge-recursive.c:3612
+#: merge-recursive.c:3602
msgid "merge returned no commit"
msgstr "la fusión no devolvió ningún commit"
-#: merge-recursive.c:3671
-#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by merge:\n"
-" %s"
-msgstr ""
-"Los cambios locales de los siguientes archivos serán sobreescritos por "
-"merge:\n"
-" %s"
-
-#: merge-recursive.c:3768
+#: merge-recursive.c:3758
#, c-format
msgid "Could not parse object '%s'"
msgstr "No se pudo analizar el objeto '%s'"
-#: merge-recursive.c:3786 builtin/merge.c:705 builtin/merge.c:885
+#: merge-recursive.c:3776 builtin/merge.c:712 builtin/merge.c:896
+#: builtin/stash.c:471
msgid "Unable to write index."
msgstr "Incapaz de escribir el índice."
@@ -4909,187 +5171,181 @@
msgid "failed to read the cache"
msgstr "falló al leer la cache"
-#: merge.c:108 rerere.c:720 builtin/am.c:1878 builtin/am.c:1912
-#: builtin/checkout.c:559 builtin/checkout.c:822 builtin/clone.c:816
+#: merge.c:109 rerere.c:704 builtin/am.c:1883 builtin/am.c:1917
+#: builtin/checkout.c:575 builtin/checkout.c:828 builtin/clone.c:817
#: builtin/stash.c:265
msgid "unable to write new index file"
msgstr "no es posible escribir el archivo índice"
-#: midx.c:68
+#: midx.c:62
+msgid "multi-pack-index OID fanout is of the wrong size"
+msgstr ""
+"El abanico de OID de índice de paquetes múltiples es del tamaño incorrecto"
+
+#: midx.c:93
#, c-format
msgid "multi-pack-index file %s is too small"
msgstr "archivo multi-pack-index %s es muy pequeño"
-#: midx.c:84
+#: midx.c:109
#, c-format
msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
msgstr "firma de multi-pack-index 0x%08x no concuerda con firma 0x%08x"
-#: midx.c:89
+#: midx.c:114
#, c-format
msgid "multi-pack-index version %d not recognized"
msgstr "versión %d de multi-pack-index no reconocida"
-#: midx.c:94
+#: midx.c:119
#, c-format
-msgid "hash version %u does not match"
-msgstr "versión de hash %u no concuerda"
-
-#: midx.c:108
-msgid "invalid chunk offset (too large)"
-msgstr "offset inválido del conjunto (muy grande)"
-
-#: midx.c:132
-msgid "terminating multi-pack-index chunk id appears earlier than expected"
+msgid "multi-pack-index hash version %u does not match version %u"
msgstr ""
-"terminando multi-pack-index porque el id del conjunto aparece antes de lo "
-"esperado"
+"La versión de hash de índice de paquetes múltiples %u no coincide con la "
+"versión %u"
-#: midx.c:145
+#: midx.c:136
msgid "multi-pack-index missing required pack-name chunk"
msgstr "multi-pack-index le falta el conjunto pack-name requerido"
-#: midx.c:147
+#: midx.c:138
msgid "multi-pack-index missing required OID fanout chunk"
msgstr "multi-pack-index le falta el conjunto OID fanout requerido"
-#: midx.c:149
+#: midx.c:140
msgid "multi-pack-index missing required OID lookup chunk"
msgstr "multi-pack-index le falta el conjunto OID fanout requerido"
-#: midx.c:151
+#: midx.c:142
msgid "multi-pack-index missing required object offsets chunk"
msgstr "multi-pack-index le falta el conjunto de offset del objeto requerido"
-#: midx.c:165
+#: midx.c:158
#, c-format
msgid "multi-pack-index pack names out of order: '%s' before '%s'"
msgstr "multi-pack-index nombres de paquete fuera de orden:'%s' antes '%s'"
-#: midx.c:208
+#: midx.c:202
#, c-format
msgid "bad pack-int-id: %u (%u total packs)"
msgstr "mal pack-int-id: %u (%u paquetes totales)"
-#: midx.c:258
+#: midx.c:252
msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
msgstr "multi-pack-index guarda un offset de 64-bit, pero off_t es muy pequeño"
-#: midx.c:286
-msgid "error preparing packfile from multi-pack-index"
-msgstr "error preparando packfile de multi-pack-index"
-
-#: midx.c:470
+#: midx.c:467
#, c-format
msgid "failed to add packfile '%s'"
msgstr "falló al agregar packfile '%s'"
-#: midx.c:476
+#: midx.c:473
#, c-format
msgid "failed to open pack-index '%s'"
msgstr "falló al abrir pack-index '%s'"
-#: midx.c:536
+#: midx.c:533
#, c-format
msgid "failed to locate object %d in packfile"
msgstr "falló al ubicar objeto %d en packfile"
-#: midx.c:840
+#: midx.c:821
msgid "Adding packfiles to multi-pack-index"
msgstr "Agregando packfiles a multi-pack-index"
-#: midx.c:873
+#: midx.c:855
#, c-format
msgid "did not see pack-file %s to drop"
msgstr "no se vió pack-file %s caer"
-#: midx.c:925
+#: midx.c:904
msgid "no pack files to index."
msgstr "no hay archivos pack para indexar."
-#: midx.c:977
-msgid "Writing chunks to multi-pack-index"
-msgstr "Escribiendo chunks a multi-pack-index"
-
-#: midx.c:1056
+#: midx.c:965
#, c-format
msgid "failed to clear multi-pack-index at %s"
msgstr "falló al limpiar multi-pack-index en %s"
-#: midx.c:1112
+#: midx.c:1021
+msgid "multi-pack-index file exists, but failed to parse"
+msgstr ""
+"El archivo de índice de paquetes múltiples existe, pero no se pudo analizar"
+
+#: midx.c:1029
msgid "Looking for referenced packfiles"
msgstr "Buscando por packfiles referidos"
-#: midx.c:1127
+#: midx.c:1044
#, c-format
msgid ""
"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
msgstr ""
"oid fanout fuera de orden: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
-#: midx.c:1132
+#: midx.c:1049
msgid "the midx contains no oid"
msgstr "el midx no contiene oid"
-#: midx.c:1141
+#: midx.c:1058
msgid "Verifying OID order in multi-pack-index"
msgstr "Verificando orden de OID en multi-pack-index"
-#: midx.c:1150
+#: midx.c:1067
#, c-format
msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
msgstr "oid lookup fuera de orden: oid[%d] = %s >= %s = oid[%d]"
-#: midx.c:1170
+#: midx.c:1087
msgid "Sorting objects by packfile"
msgstr "Ordenando objetos por packfile"
-#: midx.c:1177
+#: midx.c:1094
msgid "Verifying object offsets"
msgstr "Verificando offsets de objetos"
-#: midx.c:1193
+#: midx.c:1110
#, c-format
msgid "failed to load pack entry for oid[%d] = %s"
msgstr "fallo al cargar entrada pack para oid[%d] = %s"
-#: midx.c:1199
+#: midx.c:1116
#, c-format
msgid "failed to load pack-index for packfile %s"
msgstr "falló al cargar el pack-index para packfile %s"
-#: midx.c:1208
+#: midx.c:1125
#, c-format
msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
msgstr "offset para objeto incorrecto oid[%d] = %s: %<PRIx64> != %<PRIx64>"
-#: midx.c:1233
+#: midx.c:1150
msgid "Counting referenced objects"
msgstr "Contando objetos no referenciados"
-#: midx.c:1243
+#: midx.c:1160
msgid "Finding and deleting unreferenced packfiles"
msgstr "Encontrando y borrando packfiles sin referencias"
-#: midx.c:1433
+#: midx.c:1351
msgid "could not start pack-objects"
msgstr "no se pudo empezar los pack-objetcts"
-#: midx.c:1452
+#: midx.c:1371
msgid "could not finish pack-objects"
msgstr "no se pudo finalizar pack-objetcts"
-#: name-hash.c:537
+#: name-hash.c:538
#, c-format
msgid "unable to create lazy_dir thread: %s"
msgstr "no es posible crear hilo lazy_dir: %s"
-#: name-hash.c:559
+#: name-hash.c:560
#, c-format
msgid "unable to create lazy_name thread: %s"
msgstr "no es posible crear hilo lazy_name: %s"
-#: name-hash.c:565
+#: name-hash.c:566
#, c-format
msgid "unable to join lazy_name thread: %s"
msgstr "no es posible unir hilo lazy_name: %s"
@@ -5136,6 +5392,363 @@
msgid "Bad %s value: '%s'"
msgstr "Valor erróneo para %s: '%s'"
+#: object-file.c:480
+#, c-format
+msgid "object directory %s does not exist; check .git/objects/info/alternates"
+msgstr "objeto directorio %s no existe; revisa .git/objects/info/alternates"
+
+#: object-file.c:531
+#, c-format
+msgid "unable to normalize alternate object path: %s"
+msgstr "incapaz de normalizar la ruta de objeto alterno: %s"
+
+#: object-file.c:603
+#, c-format
+msgid "%s: ignoring alternate object stores, nesting too deep"
+msgstr "%s: ignorando espacios de objetos alternos, anidado muy profundo"
+
+#: object-file.c:610
+#, c-format
+msgid "unable to normalize object directory: %s"
+msgstr "incapaz de normalizar directorio de objeto: %s"
+
+#: object-file.c:653
+msgid "unable to fdopen alternates lockfile"
+msgstr "no es posible hacer fdopen en lockfile alternos"
+
+#: object-file.c:671
+msgid "unable to read alternates file"
+msgstr "no es posible leer archivos alternos"
+
+#: object-file.c:678
+msgid "unable to move new alternates file into place"
+msgstr "no es posible mover archivos alternos en el lugar"
+
+#: object-file.c:713
+#, c-format
+msgid "path '%s' does not exist"
+msgstr "ruta '%s' no existe"
+
+#: object-file.c:734
+#, c-format
+msgid "reference repository '%s' as a linked checkout is not supported yet."
+msgstr ""
+"repositorio de referencia '%s' como un checkout vinculado no es soportado "
+"todavía."
+
+#: object-file.c:740
+#, c-format
+msgid "reference repository '%s' is not a local repository."
+msgstr "repositorio de referencia '%s' no es un repositorio local."
+
+#: object-file.c:746
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr "repositorio de referencia '%s' es superficial (shallow)"
+
+#: object-file.c:754
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr "repositorio de referencia '% s' está injertado"
+
+#: object-file.c:814
+#, c-format
+msgid "invalid line while parsing alternate refs: %s"
+msgstr "línea inválida mientras se analizaban refs alternas: %s"
+
+#: object-file.c:964
+#, c-format
+msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
+msgstr "intentando usar mmap %<PRIuMAX> sobre límite %<PRIuMAX>"
+
+#: object-file.c:985
+msgid "mmap failed"
+msgstr "mmap falló"
+
+#: object-file.c:1149
+#, c-format
+msgid "object file %s is empty"
+msgstr "archivo de objeto %s está vacío"
+
+#: object-file.c:1284 object-file.c:2477
+#, c-format
+msgid "corrupt loose object '%s'"
+msgstr "objeto perdido corrupto '%s'"
+
+#: object-file.c:1286 object-file.c:2481
+#, c-format
+msgid "garbage at end of loose object '%s'"
+msgstr "basura al final del objeto perdido '%s'"
+
+#: object-file.c:1328
+msgid "invalid object type"
+msgstr "tipo de objeto inválido"
+
+#: object-file.c:1412
+#, c-format
+msgid "unable to unpack %s header with --allow-unknown-type"
+msgstr "no es posible desempacar header %s con --allow-unknown-type"
+
+#: object-file.c:1415
+#, c-format
+msgid "unable to unpack %s header"
+msgstr "incapaz de desempaquetar header %s"
+
+#: object-file.c:1421
+#, c-format
+msgid "unable to parse %s header with --allow-unknown-type"
+msgstr "no es posible analizar header %s con --allow-unknown-type"
+
+#: object-file.c:1424
+#, c-format
+msgid "unable to parse %s header"
+msgstr "incapaz de analizar header %s"
+
+#: object-file.c:1651
+#, c-format
+msgid "failed to read object %s"
+msgstr "falló al leer objeto %s"
+
+#: object-file.c:1655
+#, c-format
+msgid "replacement %s not found for %s"
+msgstr "reemplazo %s no encontrado para %s"
+
+#: object-file.c:1659
+#, c-format
+msgid "loose object %s (stored in %s) is corrupt"
+msgstr "objeto perdido %s (guardado en %s) está corrompido"
+
+#: object-file.c:1663
+#, c-format
+msgid "packed object %s (stored in %s) is corrupt"
+msgstr "paquete de objeto %s (guardado en %s) está corrompido"
+
+#: object-file.c:1768
+#, c-format
+msgid "unable to write file %s"
+msgstr "no es posible escribir archivo %s"
+
+#: object-file.c:1775
+#, c-format
+msgid "unable to set permission to '%s'"
+msgstr "no se pudo poner permisos a '%s'"
+
+#: object-file.c:1782
+msgid "file write error"
+msgstr "falló de escritura"
+
+#: object-file.c:1802
+msgid "error when closing loose object file"
+msgstr "error cerrando el archivo de objeto suelto"
+
+#: object-file.c:1867
+#, c-format
+msgid "insufficient permission for adding an object to repository database %s"
+msgstr ""
+"permisos insuficientes para agregar un objeto a la base de datos del "
+"repositorio %s"
+
+#: object-file.c:1869
+msgid "unable to create temporary file"
+msgstr "no es posible crear un archivo temporal"
+
+#: object-file.c:1893
+msgid "unable to write loose object file"
+msgstr "no es posible escribir el archivo de objeto suelto"
+
+#: object-file.c:1899
+#, c-format
+msgid "unable to deflate new object %s (%d)"
+msgstr "no es posible desinflar el objeto nuevo %s (%d)"
+
+#: object-file.c:1903
+#, c-format
+msgid "deflateEnd on object %s failed (%d)"
+msgstr "deflateEnd en objeto %s falló (%d)"
+
+#: object-file.c:1907
+#, c-format
+msgid "confused by unstable object source data for %s"
+msgstr "confundido por fuente de data de objetos inestable para %s"
+
+#: object-file.c:1917 builtin/pack-objects.c:1097
+#, c-format
+msgid "failed utime() on %s"
+msgstr "falló utime() en %s"
+
+#: object-file.c:1994
+#, c-format
+msgid "cannot read object for %s"
+msgstr "no se pudo leer el objeto para %s"
+
+#: object-file.c:2045
+msgid "corrupt commit"
+msgstr "commit corrupto"
+
+#: object-file.c:2053
+msgid "corrupt tag"
+msgstr "tag corrupto"
+
+#: object-file.c:2153
+#, c-format
+msgid "read error while indexing %s"
+msgstr "error leyendo al indexar %s"
+
+#: object-file.c:2156
+#, c-format
+msgid "short read while indexing %s"
+msgstr "lectura corta al indexar %s"
+
+#: object-file.c:2229 object-file.c:2239
+#, c-format
+msgid "%s: failed to insert into database"
+msgstr "%s: falló al insertar en la base de datos"
+
+#: object-file.c:2245
+#, c-format
+msgid "%s: unsupported file type"
+msgstr "%s: tipo de archivo no soportado"
+
+#: object-file.c:2269
+#, c-format
+msgid "%s is not a valid object"
+msgstr "%s no es objeto válido"
+
+#: object-file.c:2271
+#, c-format
+msgid "%s is not a valid '%s' object"
+msgstr "%s no es un objeto '%s' válido"
+
+#: object-file.c:2298 builtin/index-pack.c:192
+#, c-format
+msgid "unable to open %s"
+msgstr "no es posible abrir %s"
+
+#: object-file.c:2488 object-file.c:2541
+#, c-format
+msgid "hash mismatch for %s (expected %s)"
+msgstr "hash no concuerda para %s (se esperaba %s)"
+
+#: object-file.c:2512
+#, c-format
+msgid "unable to mmap %s"
+msgstr "no es posible hacer mmap a %s"
+
+#: object-file.c:2517
+#, c-format
+msgid "unable to unpack header of %s"
+msgstr "incapaz de desempaquetar header de %s"
+
+#: object-file.c:2523
+#, c-format
+msgid "unable to parse header of %s"
+msgstr "incapaz de analizar header de %s"
+
+#: object-file.c:2534
+#, c-format
+msgid "unable to unpack contents of %s"
+msgstr "no es posible desempaquetar contenidos de %s"
+
+#: object-name.c:486
+#, c-format
+msgid "short object ID %s is ambiguous"
+msgstr "El ID de objeto corto %s es ambiguo"
+
+#: object-name.c:497
+msgid "The candidates are:"
+msgstr "Los candidatos son:"
+
+#: object-name.c:796
+msgid ""
+"Git normally never creates a ref that ends with 40 hex characters\n"
+"because it will be ignored when you just specify 40-hex. These refs\n"
+"may be created by mistake. For example,\n"
+"\n"
+" git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
+"examine these refs and maybe delete them. Turn this message off by\n"
+"running \"git config advice.objectNameWarning false\""
+msgstr ""
+"Git normalmente nunca crea una ref que termine con 40 caracteres hex\n"
+"porque esto sería ignorado cuando solo se especifiquen 40-hex. Estas refs\n"
+"tal vez sean creadas por error. Por ejemplo,\n"
+"\n"
+" git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"donde \"$br\" está de alguna manera vacía y una ref de 40-hex es creada. Por "
+"favor\n"
+"examina estas refs y tal vez bórralas. Silencia este mensaje \n"
+"ejecutando \"git config advice.objectNameWarning false\""
+
+#: object-name.c:916
+#, c-format
+msgid "log for '%.*s' only goes back to %s"
+msgstr "log para '%.*s' solo va hasta %s"
+
+#: object-name.c:924
+#, c-format
+msgid "log for '%.*s' only has %d entries"
+msgstr "log para '%.*s' solo tiene %d entradas"
+
+#: object-name.c:1702
+#, c-format
+msgid "path '%s' exists on disk, but not in '%.*s'"
+msgstr "la ruta '%s' existe en disco, pero no en '%.*s'"
+
+#: object-name.c:1708
+#, c-format
+msgid ""
+"path '%s' exists, but not '%s'\n"
+"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
+msgstr ""
+"ruta '%s' existe, pero no '%s'\n"
+"ayuda: ¿Quisiste decir '%.*s:%s' o '%.*s:./%s'?"
+
+#: object-name.c:1717
+#, c-format
+msgid "path '%s' does not exist in '%.*s'"
+msgstr "ruta '%s' no existe en '%.*s'"
+
+#: object-name.c:1745
+#, c-format
+msgid ""
+"path '%s' is in the index, but not at stage %d\n"
+"hint: Did you mean ':%d:%s'?"
+msgstr ""
+"ruta '%s' está en el index, pero no en stage %d\n"
+"ayuda:¿Quisiste decir: '%d:%s'?"
+
+#: object-name.c:1761
+#, c-format
+msgid ""
+"path '%s' is in the index, but not '%s'\n"
+"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
+msgstr ""
+"ruta '%s' está en el index, pero no '%s'\n"
+"ayuda:¿Quisiste decir ':%d:%s' o ':%d:./%s'?"
+
+#: object-name.c:1769
+#, c-format
+msgid "path '%s' exists on disk, but not in the index"
+msgstr "ruta '%s' existe en el disco, pero no en el index"
+
+#: object-name.c:1771
+#, c-format
+msgid "path '%s' does not exist (neither on disk nor in the index)"
+msgstr "ruta '%s' no existe (ni en disco ni en el index)"
+
+#: object-name.c:1784
+msgid "relative path syntax can't be used outside working tree"
+msgstr ""
+"la sintaxis de ruta relativa no se puede usar fuera del directorio de trabajo"
+
+#: object-name.c:1922
+#, c-format
+msgid "invalid object name '%.*s'."
+msgstr "nombre de objeto no válido: '%.*s'."
+
#: object.c:53
#, c-format
msgid "invalid object type \"%s\""
@@ -5161,22 +5774,71 @@
msgid "hash mismatch %s"
msgstr "hash no concuerda %s"
-#: pack-bitmap.c:815 pack-bitmap.c:821 builtin/pack-objects.c:2184
+#: pack-bitmap.c:843 pack-bitmap.c:849 builtin/pack-objects.c:2226
#, c-format
msgid "unable to get size of %s"
msgstr "no se pudo obtener el tamaño de %s"
-#: packfile.c:630
+#: pack-bitmap.c:1489 builtin/rev-list.c:92
+#, c-format
+msgid "unable to get disk usage of %s"
+msgstr "no se puede obtener el uso de disco de %s"
+
+#: pack-revindex.c:220
+#, c-format
+msgid "reverse-index file %s is too small"
+msgstr "El archivo de índice inverso %s es demasiado pequeño"
+
+#: pack-revindex.c:225
+#, c-format
+msgid "reverse-index file %s is corrupt"
+msgstr "El archivo de índice inverso %s está dañado"
+
+#: pack-revindex.c:233
+#, c-format
+msgid "reverse-index file %s has unknown signature"
+msgstr "El archivo de índice inverso %s tiene una firma desconocida"
+
+#: pack-revindex.c:237
+#, c-format
+msgid "reverse-index file %s has unsupported version %<PRIu32>"
+msgstr "archivo reverse-index %s tiene una versión no soportada %<PRIu32>"
+
+#: pack-revindex.c:242
+#, c-format
+msgid "reverse-index file %s has unsupported hash id %<PRIu32>"
+msgstr "archivo reverse-index %s tiene un id de hash no soportado %<PRIu32>"
+
+#: pack-write.c:236
+msgid "cannot both write and verify reverse index"
+msgstr "no puede escribir y verificar el índice inverso"
+
+#: pack-write.c:257
+#, c-format
+msgid "could not stat: %s"
+msgstr "no se pudo estad: %s"
+
+#: pack-write.c:269
+#, c-format
+msgid "failed to make %s readable"
+msgstr "no pudo hacer %s legible"
+
+#: pack-write.c:508
+#, c-format
+msgid "could not write '%s' promisor file"
+msgstr "no se pudo escribir el archivo promisor '%s'"
+
+#: packfile.c:625
msgid "offset before end of packfile (broken .idx?)"
msgstr "offset antes del final del paquete (broken .idx?)"
-#: packfile.c:1900
+#: packfile.c:1934
#, c-format
msgid "offset before start of pack index for %s (corrupt index?)"
msgstr ""
"offset antes del comienzo del índice del paquete para %s (¿índice corrupto?)"
-#: packfile.c:1904
+#: packfile.c:1938
#, c-format
msgid "offset beyond end of pack index for %s (truncated index?)"
msgstr ""
@@ -5197,7 +5859,7 @@
msgid "option `%s' expects \"always\", \"auto\", or \"never\""
msgstr "opción `%s' puede usar \"always\", \"auto\", o \"never\""
-#: parse-options-cb.c:130 parse-options-cb.c:147
+#: parse-options-cb.c:132 parse-options-cb.c:149
#, c-format
msgid "malformed object name '%s'"
msgstr "nombre de objeto mal formado '%s'"
@@ -5242,31 +5904,31 @@
msgid "did you mean `--%s` (with two dashes)?"
msgstr "¿quisiste decir `--%s` (con dos guiones)?"
-#: parse-options.c:663 parse-options.c:963
+#: parse-options.c:666 parse-options.c:971
#, c-format
msgid "alias of --%s"
msgstr "alias de --%s"
-#: parse-options.c:854
+#: parse-options.c:862
#, c-format
msgid "unknown option `%s'"
msgstr "opción `%s' desconocida"
-#: parse-options.c:856
+#: parse-options.c:864
#, c-format
msgid "unknown switch `%c'"
msgstr "switch desconocido `%c'"
-#: parse-options.c:858
+#: parse-options.c:866
#, c-format
msgid "unknown non-ascii option in string: `%s'"
msgstr "opción desconocida en string no ascii: `%s'"
-#: parse-options.c:882
+#: parse-options.c:890
msgid "..."
msgstr "..."
-#: parse-options.c:901
+#: parse-options.c:909
#, c-format
msgid "usage: %s"
msgstr "uso: %s"
@@ -5274,17 +5936,17 @@
#. TRANSLATORS: the colon here should align with the
#. one in "usage: %s" translation.
#.
-#: parse-options.c:907
+#: parse-options.c:915
#, c-format
msgid " or: %s"
msgstr " o: %s"
-#: parse-options.c:910
+#: parse-options.c:918
#, c-format
msgid " %s"
msgstr " %s"
-#: parse-options.c:949
+#: parse-options.c:957
msgid "-NUM"
msgstr "-NUM"
@@ -5423,29 +6085,37 @@
msgid "protocol error: bad line length %d"
msgstr "error de protocolo: mal largo de línea %d"
-#: pkt-line.c:373
+#: pkt-line.c:373 sideband.c:165
#, c-format
msgid "remote error: %s"
msgstr "error remoto: %s"
-#: preload-index.c:119
+#: preload-index.c:125
msgid "Refreshing index"
msgstr "Refrescando index"
-#: preload-index.c:138
+#: preload-index.c:144
#, c-format
msgid "unable to create threaded lstat: %s"
msgstr "no es posible crear lstat hilado: %s"
-#: pretty.c:982
+#: pretty.c:984
msgid "unable to parse --pretty format"
msgstr "incapaz de analizar el formato --pretty"
-#: promisor-remote.c:23
-msgid "Remote with no URL"
-msgstr "Remoto sin URL"
+#: promisor-remote.c:30
+msgid "promisor-remote: unable to fork off fetch subprocess"
+msgstr "promisor-remote: no se puede bifurcar el subproceso de recuperación"
-#: promisor-remote.c:58
+#: promisor-remote.c:35 promisor-remote.c:37
+msgid "promisor-remote: could not write to fetch subprocess"
+msgstr "proiso-remote: no se pudo escribir para recuperar el subproceso"
+
+#: promisor-remote.c:41
+msgid "promisor-remote: could not close stdin to fetch subprocess"
+msgstr "promisor-remote: no se pudo cerrar stdin para recuperar el subproceso"
+
+#: promisor-remote.c:53
#, c-format
msgid "promisor remote name cannot begin with '/': %s"
msgstr "nombre remoto promisor no puede comenzar con '/': %s"
@@ -5454,20 +6124,20 @@
msgid "Removing duplicate objects"
msgstr "Removiendo objetos duplicados"
-#: range-diff.c:77
+#: range-diff.c:78
msgid "could not start `log`"
msgstr "no se pudo comenzar `log`"
-#: range-diff.c:79
+#: range-diff.c:80
msgid "could not read `log` output"
msgstr "no se pudo leer output de `log`"
-#: range-diff.c:98 sequencer.c:5143
+#: range-diff.c:101 sequencer.c:5318
#, c-format
msgid "could not parse commit '%s'"
msgstr "no se pudo analizar commit '%s'"
-#: range-diff.c:112
+#: range-diff.c:115
#, c-format
msgid ""
"could not parse first line of `log` output: did not start with 'commit ': "
@@ -5476,65 +6146,69 @@
"no se pudo leer la primera línea de salida `log`: no comienza con 'commit ': "
"'%s'"
-#: range-diff.c:137
+#: range-diff.c:140
#, c-format
msgid "could not parse git header '%.*s'"
msgstr "no se puede analizar git header '%.*s'"
-#: range-diff.c:301
+#: range-diff.c:306
msgid "failed to generate diff"
msgstr "falló al generar diff"
-#: range-diff.c:534 range-diff.c:536
+#: range-diff.c:558
+msgid "--left-only and --right-only are mutually exclusive"
+msgstr "--left-only y --right-only son mutuamente exclusivas"
+
+#: range-diff.c:561 range-diff.c:563
#, c-format
msgid "could not parse log for '%s'"
msgstr "no se pudo leer el log para '%s'"
-#: read-cache.c:680
+#: read-cache.c:682
#, c-format
msgid "will not add file alias '%s' ('%s' already exists in index)"
msgstr "no agregará alias de archivo '%s' ('%s' ya existe en el index)"
-#: read-cache.c:696
+#: read-cache.c:698
msgid "cannot create an empty blob in the object database"
msgstr "no se puede crear un blob vacío en la base de datos de objetos"
-#: read-cache.c:718
+#: read-cache.c:720
#, c-format
msgid "%s: can only add regular files, symbolic links or git-directories"
msgstr ""
"%s: solo puede agregar archivos regulares, symbolic links o git-directories"
-#: read-cache.c:723
+#: read-cache.c:725
#, c-format
msgid "'%s' does not have a commit checked out"
msgstr "'%s' no tiene un commit checked out"
-#: read-cache.c:775
+#: read-cache.c:777
#, c-format
msgid "unable to index file '%s'"
msgstr "no es posible indexar archivo '%s'"
-#: read-cache.c:794
+#: read-cache.c:796
#, c-format
msgid "unable to add '%s' to index"
msgstr "no es posible agregar '%s' al index"
-#: read-cache.c:805
+#: read-cache.c:807
#, c-format
msgid "unable to stat '%s'"
msgstr "incapaz de correr stat en '%s'"
-#: read-cache.c:1330
+#: read-cache.c:1318
#, c-format
msgid "'%s' appears as both a file and as a directory"
msgstr "'%s' parece ser un directorio y un archivo a la vez"
-#: read-cache.c:1536
+#: read-cache.c:1532
msgid "Refresh index"
msgstr "Refrescar index"
-#: read-cache.c:1651
+#: read-cache.c:1657
#, c-format
msgid ""
"index.version set, but the value is invalid.\n"
@@ -5543,7 +6217,7 @@
"index.version configurado, pero el valor no es válido.\n"
"Usando versión %i"
-#: read-cache.c:1661
+#: read-cache.c:1667
#, c-format
msgid ""
"GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -5552,139 +6226,139 @@
"GIT_INDEX_VERSION configurado, pero el valor no es válido.\n"
"Usando versión %i"
-#: read-cache.c:1717
+#: read-cache.c:1723
#, c-format
msgid "bad signature 0x%08x"
msgstr "mala firma 0x%08x"
-#: read-cache.c:1720
+#: read-cache.c:1726
#, c-format
msgid "bad index version %d"
msgstr "mala versión del índice %d"
-#: read-cache.c:1729
+#: read-cache.c:1735
msgid "bad index file sha1 signature"
msgstr "mala firma sha1 del archivo index"
-#: read-cache.c:1759
+#: read-cache.c:1765
#, c-format
msgid "index uses %.4s extension, which we do not understand"
msgstr "index usa %.4s extensiones, cosa que no entendemos"
-#: read-cache.c:1761
+#: read-cache.c:1767
#, c-format
msgid "ignoring %.4s extension"
msgstr "ignorando extensión %.4s"
-#: read-cache.c:1798
+#: read-cache.c:1804
#, c-format
msgid "unknown index entry format 0x%08x"
msgstr "formato de index desconocido 0x%08x"
-#: read-cache.c:1814
+#: read-cache.c:1820
#, c-format
msgid "malformed name field in the index, near path '%s'"
msgstr "campo nombre malformado en el index, cerca a ruta '%s'"
-#: read-cache.c:1871
+#: read-cache.c:1877
msgid "unordered stage entries in index"
msgstr "entradas en stage desordenadas en index"
-#: read-cache.c:1874
+#: read-cache.c:1880
#, c-format
msgid "multiple stage entries for merged file '%s'"
msgstr "múltiples entradas extrañas para archivo fusionado '%s'"
-#: read-cache.c:1877
+#: read-cache.c:1883
#, c-format
msgid "unordered stage entries for '%s'"
msgstr "entradas de stage desordenadas para '%s'"
-#: read-cache.c:1983 read-cache.c:2271 rerere.c:565 rerere.c:599 rerere.c:1111
-#: submodule.c:1619 builtin/add.c:532 builtin/check-ignore.c:181
-#: builtin/checkout.c:488 builtin/checkout.c:674 builtin/clean.c:991
-#: builtin/commit.c:364 builtin/diff-tree.c:121 builtin/grep.c:507
-#: builtin/mv.c:145 builtin/reset.c:247 builtin/rm.c:290
+#: read-cache.c:1989 read-cache.c:2280 rerere.c:549 rerere.c:583 rerere.c:1095
+#: submodule.c:1634 builtin/add.c:546 builtin/check-ignore.c:181
+#: builtin/checkout.c:504 builtin/checkout.c:690 builtin/clean.c:991
+#: builtin/commit.c:364 builtin/diff-tree.c:122 builtin/grep.c:505
+#: builtin/mv.c:146 builtin/reset.c:247 builtin/rm.c:290
#: builtin/submodule--helper.c:332
msgid "index file corrupt"
msgstr "archivo índice corrompido"
-#: read-cache.c:2124
+#: read-cache.c:2133
#, c-format
msgid "unable to create load_cache_entries thread: %s"
msgstr "no es posible crear hilo load_cache_entries: %s"
-#: read-cache.c:2137
+#: read-cache.c:2146
#, c-format
msgid "unable to join load_cache_entries thread: %s"
msgstr "no es posible unir hilo load_cache_entires: %s"
-#: read-cache.c:2170
+#: read-cache.c:2179
#, c-format
msgid "%s: index file open failed"
msgstr "%s: falló al abrir el archivo index"
-#: read-cache.c:2174
+#: read-cache.c:2183
#, c-format
msgid "%s: cannot stat the open index"
msgstr "%s: no se puede hacer stat del index abierto"
-#: read-cache.c:2178
+#: read-cache.c:2187
#, c-format
msgid "%s: index file smaller than expected"
msgstr "%s: archivo index más pequeño de lo esperado"
-#: read-cache.c:2182
+#: read-cache.c:2191
#, c-format
msgid "%s: unable to map index file"
msgstr "%s: no se pudo mapear el archivo index"
-#: read-cache.c:2224
+#: read-cache.c:2233
#, c-format
msgid "unable to create load_index_extensions thread: %s"
msgstr "no es posible crear hilo load_index_extensions: %s"
-#: read-cache.c:2251
+#: read-cache.c:2260
#, c-format
msgid "unable to join load_index_extensions thread: %s"
msgstr "no es posible unir hilo load_index_extensions: %s"
-#: read-cache.c:2283
+#: read-cache.c:2292
#, c-format
msgid "could not freshen shared index '%s'"
msgstr "no se pudo refrescar el index compartido '%s'"
-#: read-cache.c:2330
+#: read-cache.c:2339
#, c-format
msgid "broken index, expect %s in %s, got %s"
msgstr "index roto, se esperaba %s en %s, se obtuvo %s"
-#: read-cache.c:3026 strbuf.c:1171 wrapper.c:630 builtin/merge.c:1130
+#: read-cache.c:3035 strbuf.c:1171 wrapper.c:633 builtin/merge.c:1141
#, c-format
msgid "could not close '%s'"
msgstr "no se pudo cerrar '%s'"
-#: read-cache.c:3129 sequencer.c:2355 sequencer.c:4066
+#: read-cache.c:3138 sequencer.c:2487 sequencer.c:4239
#, c-format
msgid "could not stat '%s'"
msgstr "no se pudo definir '%s'"
-#: read-cache.c:3142
+#: read-cache.c:3151
#, c-format
msgid "unable to open git dir: %s"
msgstr "no es posible abrir el directorio de git: %s"
-#: read-cache.c:3154
+#: read-cache.c:3163
#, c-format
msgid "unable to unlink: %s"
msgstr "no es posible eliminar el vinculo: %s"
-#: read-cache.c:3179
+#: read-cache.c:3188
#, c-format
msgid "cannot fix permission bits on '%s'"
msgstr "no se pudo arreglar bits de permisos en '%s'"
-#: read-cache.c:3328
+#: read-cache.c:3337
#, c-format
msgid "%s: cannot drop to stage #0"
msgstr "%s: no se puede eliminar a stage #0"
@@ -5755,7 +6429,7 @@
msgstr[0] "Rebase %s en %s (%d comando)"
msgstr[1] "Rebase %s en %s (%d comandos)"
-#: rebase-interactive.c:72 git-rebase--preserve-merges.sh:228
+#: rebase-interactive.c:72 git-rebase--preserve-merges.sh:218
msgid ""
"\n"
"Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
@@ -5763,7 +6437,7 @@
"\n"
"No eliminar ninguna línea. Usa 'drop' explícitamente para borrar un commit \n"
-#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:232
+#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:222
msgid ""
"\n"
"If you remove a line here THAT COMMIT WILL BE LOST.\n"
@@ -5771,7 +6445,7 @@
"\n"
"Si eliminas una línea aquí EL COMMIT SE PERDERÁ.\n"
-#: rebase-interactive.c:81 git-rebase--preserve-merges.sh:871
+#: rebase-interactive.c:81 git-rebase--preserve-merges.sh:861
msgid ""
"\n"
"You are editing the todo file of an ongoing interactive rebase.\n"
@@ -5785,7 +6459,7 @@
" git rebase --continue\n"
"\n"
-#: rebase-interactive.c:86 git-rebase--preserve-merges.sh:948
+#: rebase-interactive.c:86 git-rebase--preserve-merges.sh:938
msgid ""
"\n"
"However, if you remove everything, the rebase will be aborted.\n"
@@ -5795,14 +6469,14 @@
"Como sea, si quieres borrar todo, el rebase será abortado.\n"
"\n"
-#: rebase-interactive.c:110 rerere.c:485 rerere.c:692 sequencer.c:3463
-#: sequencer.c:3489 sequencer.c:5248 builtin/fsck.c:347 builtin/rebase.c:258
+#: rebase-interactive.c:110 rerere.c:469 rerere.c:676 sequencer.c:3615
+#: sequencer.c:3641 sequencer.c:5424 builtin/fsck.c:329 builtin/rebase.c:272
#, c-format
msgid "could not write '%s'"
msgstr "no se pudo escribir '%s'"
-#: rebase-interactive.c:116 builtin/rebase.c:190 builtin/rebase.c:216
-#: builtin/rebase.c:240
+#: rebase-interactive.c:116 builtin/rebase.c:204 builtin/rebase.c:230
+#: builtin/rebase.c:254
#, c-format
msgid "could not write '%s'."
msgstr "no se pudo escribir '%s'."
@@ -5834,14 +6508,14 @@
"Los posibles comportamientos son: ignore,warn,error.\n"
"\n"
-#: rebase-interactive.c:233 rebase-interactive.c:238 sequencer.c:2274
-#: builtin/rebase.c:176 builtin/rebase.c:201 builtin/rebase.c:227
-#: builtin/rebase.c:252
+#: rebase-interactive.c:233 rebase-interactive.c:238 sequencer.c:2402
+#: builtin/rebase.c:190 builtin/rebase.c:215 builtin/rebase.c:241
+#: builtin/rebase.c:266
#, c-format
msgid "could not read '%s'."
msgstr "no se puede leer '%s'."
-#: ref-filter.c:42 wt-status.c:1977
+#: ref-filter.c:42 wt-status.c:1975
msgid "gone"
msgstr "desaparecido"
@@ -5860,238 +6534,248 @@
msgid "ahead %d, behind %d"
msgstr "delante %d, detrás %d"
-#: ref-filter.c:165
+#: ref-filter.c:175
#, c-format
msgid "expected format: %%(color:<color>)"
msgstr "formato esperado: %%(color:<color>)"
-#: ref-filter.c:167
+#: ref-filter.c:177
#, c-format
msgid "unrecognized color: %%(color:%s)"
msgstr "color no reconocido: %%(color:%s)"
-#: ref-filter.c:189
+#: ref-filter.c:199
#, c-format
msgid "Integer value expected refname:lstrip=%s"
msgstr "Valor entero esperado refname:lstrip=%s"
-#: ref-filter.c:193
+#: ref-filter.c:203
#, c-format
msgid "Integer value expected refname:rstrip=%s"
msgstr "Valor entero esperado refname:rstrip=%s"
-#: ref-filter.c:195
+#: ref-filter.c:205
#, c-format
msgid "unrecognized %%(%s) argument: %s"
msgstr "argumento: %s no reconocido %%(%s)"
-#: ref-filter.c:250
+#: ref-filter.c:260
#, c-format
msgid "%%(objecttype) does not take arguments"
msgstr "%%(objecttype) no toma ningún argumento"
-#: ref-filter.c:272
+#: ref-filter.c:282
#, c-format
msgid "unrecognized %%(objectsize) argument: %s"
msgstr "%%(objectsize) no reconocido argumento: %s"
-#: ref-filter.c:280
+#: ref-filter.c:290
#, c-format
msgid "%%(deltabase) does not take arguments"
msgstr "%%(deltabase) no toma argumentos"
-#: ref-filter.c:292
+#: ref-filter.c:302
#, c-format
msgid "%%(body) does not take arguments"
msgstr "%%(body) no toma ningún argumento"
-#: ref-filter.c:301
+#: ref-filter.c:315
#, c-format
-msgid "%%(subject) does not take arguments"
-msgstr "%%(subject) no toma ningún argumento"
+msgid "unrecognized %%(subject) argument: %s"
+msgstr "argumento %%(sujeto) no reconocido: %s"
-#: ref-filter.c:323
+#: ref-filter.c:334
+#, c-format
+msgid "expected %%(trailers:key=<value>)"
+msgstr "se esperaba %%(trailers:key=<value>)"
+
+#: ref-filter.c:336
#, c-format
msgid "unknown %%(trailers) argument: %s"
msgstr "%%(trailers) desconocidos, argumento: %s"
-#: ref-filter.c:352
+#: ref-filter.c:367
#, c-format
msgid "positive value expected contents:lines=%s"
msgstr "valor positivo esperado contents:lines=%s"
-#: ref-filter.c:354
+#: ref-filter.c:369
#, c-format
msgid "unrecognized %%(contents) argument: %s"
msgstr "argumento %s no reconocido %%(contents)"
-#: ref-filter.c:369
+#: ref-filter.c:384
#, c-format
-msgid "positive value expected objectname:short=%s"
-msgstr "valor positivo esperado objectname:short=%s"
+msgid "positive value expected '%s' in %%(%s)"
+msgstr "valor positivo esperado '%s' en %% (%s)"
-#: ref-filter.c:373
+#: ref-filter.c:388
#, c-format
-msgid "unrecognized %%(objectname) argument: %s"
-msgstr "argumento: %s no reconocido %%(objectname)"
+msgid "unrecognized argument '%s' in %%(%s)"
+msgstr "argumento no reconocido:'%s' en %%(%s)"
-#: ref-filter.c:403
+#: ref-filter.c:402
+#, c-format
+msgid "unrecognized email option: %s"
+msgstr "opción de email desconocida: %s"
+
+#: ref-filter.c:432
#, c-format
msgid "expected format: %%(align:<width>,<position>)"
msgstr "formato esperado: %%(align:<ancho>,<posición>)"
-#: ref-filter.c:415
+#: ref-filter.c:444
#, c-format
msgid "unrecognized position:%s"
msgstr "posición desconocida: %s"
-#: ref-filter.c:422
+#: ref-filter.c:451
#, c-format
msgid "unrecognized width:%s"
msgstr "ancho desconocido: %s"
-#: ref-filter.c:431
+#: ref-filter.c:460
#, c-format
msgid "unrecognized %%(align) argument: %s"
msgstr "argumento no reconocido para %%(align): %s"
-#: ref-filter.c:439
+#: ref-filter.c:468
#, c-format
msgid "positive width expected with the %%(align) atom"
msgstr "se esperaba un ancho positivo con el átomo %%(align)"
-#: ref-filter.c:457
+#: ref-filter.c:486
#, c-format
msgid "unrecognized %%(if) argument: %s"
msgstr "argumento: %s no reconocido %%(if)"
-#: ref-filter.c:559
+#: ref-filter.c:588
#, c-format
msgid "malformed field name: %.*s"
msgstr "nombre mal formado de campo: %.*s"
-#: ref-filter.c:586
+#: ref-filter.c:615
#, c-format
msgid "unknown field name: %.*s"
msgstr "nombre de campo desconocido: %.*s"
-#: ref-filter.c:590
+#: ref-filter.c:619
#, c-format
msgid ""
"not a git repository, but the field '%.*s' requires access to object data"
msgstr ""
"no es un repositorio git, pero el campo '%.*s' requiere acceso al objeto data"
-#: ref-filter.c:714
+#: ref-filter.c:743
#, c-format
msgid "format: %%(if) atom used without a %%(then) atom"
msgstr "formato: átomo %%(if) usado sin un átomo %%(then)"
-#: ref-filter.c:777
+#: ref-filter.c:806
#, c-format
msgid "format: %%(then) atom used without an %%(if) atom"
msgstr "formato: átomo %%(then) usado sin átomo %%(if)"
-#: ref-filter.c:779
+#: ref-filter.c:808
#, c-format
msgid "format: %%(then) atom used more than once"
msgstr "formato: átomo %%(then) usado más de una vez"
-#: ref-filter.c:781
+#: ref-filter.c:810
#, c-format
msgid "format: %%(then) atom used after %%(else)"
msgstr "formato: átomo %%(then) usado después de %%(else)"
-#: ref-filter.c:809
+#: ref-filter.c:838
#, c-format
msgid "format: %%(else) atom used without an %%(if) atom"
msgstr "formato: átomo %%(else) usado sin un átomo %%(if)"
-#: ref-filter.c:811
+#: ref-filter.c:840
#, c-format
msgid "format: %%(else) atom used without a %%(then) atom"
msgstr "formato: átomo %%(else) usado sin un átomo %%(then)"
-#: ref-filter.c:813
+#: ref-filter.c:842
#, c-format
msgid "format: %%(else) atom used more than once"
msgstr "formato: átomo %%(else) usado más de una vez"
-#: ref-filter.c:828
+#: ref-filter.c:857
#, c-format
msgid "format: %%(end) atom used without corresponding atom"
msgstr "formato: átomo %%(end) usado sin átomo correspondiente"
-#: ref-filter.c:885
+#: ref-filter.c:914
#, c-format
msgid "malformed format string %s"
msgstr "formato de cadena mal formado %s"
-#: ref-filter.c:1486
+#: ref-filter.c:1555
#, c-format
-msgid "no branch, rebasing %s"
-msgstr "no hay rama, rebasando %s"
+msgid "(no branch, rebasing %s)"
+msgstr "(no hay rama, rebasando %s)"
-#: ref-filter.c:1489
+#: ref-filter.c:1558
#, c-format
-msgid "no branch, rebasing detached HEAD %s"
-msgstr "(o hay rama, rebasando con HEAD desacoplado %s"
+msgid "(no branch, rebasing detached HEAD %s)"
+msgstr "(no una rama, rebasando con HEAD desacoplado %s)"
-#: ref-filter.c:1492
+#: ref-filter.c:1561
#, c-format
-msgid "no branch, bisect started on %s"
-msgstr "no hay rama, comenzando biseccón en %s"
+msgid "(no branch, bisect started on %s)"
+msgstr "(no hay rama, comenzando biseccón en %s)"
-#: ref-filter.c:1502
-msgid "no branch"
-msgstr "sin rama"
+#: ref-filter.c:1565
+#, c-format
+msgid "(HEAD detached at %s)"
+msgstr "(HEAD desacoplado en %s)"
-#: ref-filter.c:1538 ref-filter.c:1747
+#: ref-filter.c:1568
+#, c-format
+msgid "(HEAD detached from %s)"
+msgstr "(HEAD desacoplado de %s)"
+
+#: ref-filter.c:1571
+msgid "(no branch)"
+msgstr "(sin rama)"
+
+#: ref-filter.c:1603 ref-filter.c:1812
#, c-format
msgid "missing object %s for %s"
msgstr "falta objeto %s para %s"
-#: ref-filter.c:1548
+#: ref-filter.c:1613
#, c-format
msgid "parse_object_buffer failed on %s for %s"
msgstr "parse_object_buffer falló en %s para %s"
-#: ref-filter.c:2001
+#: ref-filter.c:1996
#, c-format
msgid "malformed object at '%s'"
msgstr "objeto mal formado en '%s'"
-#: ref-filter.c:2090
+#: ref-filter.c:2085
#, c-format
msgid "ignoring ref with broken name %s"
msgstr "ignorando referencia con nombre roto %s"
-#: ref-filter.c:2095 refs.c:657
+#: ref-filter.c:2090 refs.c:676
#, c-format
msgid "ignoring broken ref %s"
msgstr "ignorando referencia rota %s"
-#: ref-filter.c:2395
+#: ref-filter.c:2430
#, c-format
msgid "format: %%(end) atom missing"
msgstr "formato: falta átomo %%(end)"
-#: ref-filter.c:2495
-#, c-format
-msgid "option `%s' is incompatible with --merged"
-msgstr "opción `%s' es incompatible con --merged"
-
-#: ref-filter.c:2498
-#, c-format
-msgid "option `%s' is incompatible with --no-merged"
-msgstr "opción `%s' es incompatible con --no-merged"
-
-#: ref-filter.c:2508
+#: ref-filter.c:2529
#, c-format
msgid "malformed object name %s"
msgstr "nombre de objeto mal formado %s"
-#: ref-filter.c:2513
+#: ref-filter.c:2534
#, c-format
msgid "option `%s' must point to a commit"
msgstr "opción '%s' debe apuntar a un commit"
@@ -6101,172 +6785,163 @@
msgid "%s does not point to a valid object!"
msgstr "¡%s no apunta a ningún objeto válido!"
-#: refs.c:572
+#: refs.c:566
+#, c-format
+msgid ""
+"Using '%s' as the name for the initial branch. This default branch name\n"
+"is subject to change. To configure the initial branch name to use in all\n"
+"of your new repositories, which will suppress this warning, call:\n"
+"\n"
+"\tgit config --global init.defaultBranch <name>\n"
+"\n"
+"Names commonly chosen instead of 'master' are 'main', 'trunk' and\n"
+"'development'. The just-created branch can be renamed via this command:\n"
+"\n"
+"\tgit branch -m <name>\n"
+msgstr ""
+"Usando '%s' como el nombre de la rama inicial. Este nombre de rama "
+"predeterminado\n"
+"está sujeto a cambios. Para configurar el nombre de la rama inicial para "
+"usar en todos\n"
+"de sus nuevos repositorios, que suprimirán esta advertencia, llame a:\n"
+"\n"
+"\tgit config --global init.defaultBranch <nombre>\n"
+"\n"
+"Los nombres comúnmente elegidos en lugar de 'maestro' son 'principal', "
+"'troncal' y\n"
+"'desarrollo'. Se puede cambiar el nombre de la rama recién creada mediante "
+"este comando:\n"
+"\n"
+"\tgit branch -m <nombre>\n"
+
+#: refs.c:588
#, c-format
msgid "could not retrieve `%s`"
msgstr "no se pudo recibir `%s`"
-#: refs.c:579
+#: refs.c:598
#, c-format
msgid "invalid branch name: %s = %s"
-msgstr "Nombre de rama inválido: %s = %s"
+msgstr "nombre de rama inválido: %s = %s"
-#: refs.c:655
+#: refs.c:674
#, c-format
msgid "ignoring dangling symref %s"
msgstr "ignorando referencia rota %s"
-#: refs.c:792
-#, c-format
-msgid "could not open '%s' for writing: %s"
-msgstr "no se pudo abrir '%s' para escritura: %s"
-
-#: refs.c:802 refs.c:853
-#, c-format
-msgid "could not read ref '%s'"
-msgstr "no se pudo leer la referencia '%s'"
-
-#: refs.c:808
-#, c-format
-msgid "ref '%s' already exists"
-msgstr "ref '%s' ya existe"
-
-#: refs.c:813
-#, c-format
-msgid "unexpected object ID when writing '%s'"
-msgstr "ID de objecto inesperado al escribir '%s'"
-
-#: refs.c:821 sequencer.c:408 sequencer.c:2721 sequencer.c:2925
-#: sequencer.c:2939 sequencer.c:3195 sequencer.c:5159 strbuf.c:1168
-#: wrapper.c:628
-#, c-format
-msgid "could not write to '%s'"
-msgstr "no se pudo escribir en '%s'"
-
-#: refs.c:848 strbuf.c:1166 wrapper.c:196 wrapper.c:366 builtin/am.c:719
-#: builtin/rebase.c:852
-#, c-format
-msgid "could not open '%s' for writing"
-msgstr "no se pudo abrir '%s' para escritura"
-
-#: refs.c:855
-#, c-format
-msgid "unexpected object ID when deleting '%s'"
-msgstr "ID de objecto inesperado al borrar '%s'"
-
-#: refs.c:986
+#: refs.c:922
#, c-format
msgid "log for ref %s has gap after %s"
msgstr "log de ref %s tiene un vacío tras %s"
-#: refs.c:992
+#: refs.c:929
#, c-format
msgid "log for ref %s unexpectedly ended on %s"
msgstr "log de ref %s finalizado inesperadamente en %s"
-#: refs.c:1051
+#: refs.c:994
#, c-format
msgid "log for %s is empty"
msgstr "log de %s está vacío"
-#: refs.c:1143
+#: refs.c:1086
#, c-format
msgid "refusing to update ref with bad name '%s'"
msgstr "rehusando actualizar ref con mal nombre '%s'"
-#: refs.c:1219
+#: refs.c:1157
#, c-format
msgid "update_ref failed for ref '%s': %s"
msgstr "update_ref falló para ref '%s': %s"
-#: refs.c:2011
+#: refs.c:2051
#, c-format
msgid "multiple updates for ref '%s' not allowed"
msgstr "múltiples actualizaciones para ref '%s' no permitidas"
-#: refs.c:2098
+#: refs.c:2131
msgid "ref updates forbidden inside quarantine environment"
msgstr "actualizaciones de ref prohibidas dentro de ambiente de cuarentena"
-#: refs.c:2109
+#: refs.c:2142
msgid "ref updates aborted by hook"
msgstr "ref update abortado por el hook"
-#: refs.c:2209 refs.c:2239
+#: refs.c:2242 refs.c:2272
#, c-format
msgid "'%s' exists; cannot create '%s'"
msgstr "'%s' existe; no se puede crear '%s'"
-#: refs.c:2215 refs.c:2250
+#: refs.c:2248 refs.c:2283
#, c-format
msgid "cannot process '%s' and '%s' at the same time"
msgstr "no se puede procesar '%s' y '%s' al mismo tiempo"
-#: refs/files-backend.c:1233
+#: refs/files-backend.c:1228
#, c-format
msgid "could not remove reference %s"
msgstr "no se pudo eliminar la referencia %s"
-#: refs/files-backend.c:1247 refs/packed-backend.c:1541
-#: refs/packed-backend.c:1551
+#: refs/files-backend.c:1242 refs/packed-backend.c:1542
+#: refs/packed-backend.c:1552
#, c-format
msgid "could not delete reference %s: %s"
msgstr "no se pudo eliminar la referencia %s: %s"
-#: refs/files-backend.c:1250 refs/packed-backend.c:1554
+#: refs/files-backend.c:1245 refs/packed-backend.c:1555
#, c-format
msgid "could not delete references: %s"
msgstr "no se pudo eliminar la referencia: %s"
-#: refspec.c:137
+#: refspec.c:170
#, c-format
msgid "invalid refspec '%s'"
msgstr "refspec inválido: '%s'"
-#: remote.c:355
+#: remote.c:351
#, c-format
msgid "config remote shorthand cannot begin with '/': %s"
msgstr "config remote shorthand no puede comenzar con '/': %s"
-#: remote.c:403
+#: remote.c:399
msgid "more than one receivepack given, using the first"
msgstr "más de un receivepack dado, usando el primero"
-#: remote.c:411
+#: remote.c:407
msgid "more than one uploadpack given, using the first"
msgstr "más de un uploadpack dado, usando el primero"
-#: remote.c:594
+#: remote.c:590
#, c-format
msgid "Cannot fetch both %s and %s to %s"
msgstr "No se pueden traer ambos %s y %s a %s"
-#: remote.c:598
+#: remote.c:594
#, c-format
msgid "%s usually tracks %s, not %s"
msgstr "%s por lo general hace seguimiento a %s, no a %s"
-#: remote.c:602
+#: remote.c:598
#, c-format
msgid "%s tracks both %s and %s"
msgstr "%s hace seguimiento tanto a %s como a %s"
-#: remote.c:670
+#: remote.c:666
#, c-format
msgid "key '%s' of pattern had no '*'"
msgstr "llave '%s' de patrón no tuvo '*'"
-#: remote.c:680
+#: remote.c:676
#, c-format
msgid "value '%s' of pattern has no '*'"
msgstr "valor '%s' del patrón no tiene '*'"
-#: remote.c:986
+#: remote.c:1083
#, c-format
msgid "src refspec %s does not match any"
msgstr "src refsoec %s: no concuerda con ninguno"
-#: remote.c:991
+#: remote.c:1088
#, c-format
msgid "src refspec %s matches more than one"
msgstr "src refspec %s concuerda con más de uno"
@@ -6275,7 +6950,7 @@
#. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
#. the <src>.
#.
-#: remote.c:1006
+#: remote.c:1103
#, c-format
msgid ""
"The destination you provided is not a full refname (i.e.,\n"
@@ -6299,7 +6974,7 @@
"Ninguno funcionó así que nos dimos por vencidos. Tienes que especificar el "
"full ref."
-#: remote.c:1026
+#: remote.c:1123
#, c-format
msgid ""
"The <src> part of the refspec is a commit object.\n"
@@ -6310,7 +6985,7 @@
"¿Quisiste crear un branch nuevo mediante un push a\n"
"'%s:refs/heads/%s'?"
-#: remote.c:1031
+#: remote.c:1128
#, c-format
msgid ""
"The <src> part of the refspec is a tag object.\n"
@@ -6321,7 +6996,7 @@
"Did you mean to create a new tag by pushing to\n"
"'%s:refs/tags/%s'?"
-#: remote.c:1036
+#: remote.c:1133
#, c-format
msgid ""
"The <src> part of the refspec is a tree object.\n"
@@ -6332,7 +7007,7 @@
"¿Quisiste crear un tag nuevo mediante un push a\n"
"'%s:refs/heads/%s'?"
-#: remote.c:1041
+#: remote.c:1138
#, c-format
msgid ""
"The <src> part of the refspec is a blob object.\n"
@@ -6343,115 +7018,115 @@
"¿Quisiste crear un tag nuevo mediante un push a\n"
"'%s:refs/heads/%s'?"
-#: remote.c:1077
+#: remote.c:1174
#, c-format
msgid "%s cannot be resolved to branch"
msgstr "%s no puede ser resolver a un branch"
-#: remote.c:1088
+#: remote.c:1185
#, c-format
msgid "unable to delete '%s': remote ref does not exist"
msgstr "no es posible borrar '%s': ref remoto no existe"
-#: remote.c:1100
+#: remote.c:1197
#, c-format
msgid "dst refspec %s matches more than one"
msgstr "dst refspec %s concuerda con más de uno"
-#: remote.c:1107
+#: remote.c:1204
#, c-format
msgid "dst ref %s receives from more than one src"
msgstr "dst ref %s recibe de más de un src"
-#: remote.c:1610 remote.c:1711
+#: remote.c:1724 remote.c:1825
msgid "HEAD does not point to a branch"
msgstr "HEAD no apunta a ninguna rama"
-#: remote.c:1619
+#: remote.c:1733
#, c-format
msgid "no such branch: '%s'"
msgstr "no existe tal rama: '%s'"
-#: remote.c:1622
+#: remote.c:1736
#, c-format
msgid "no upstream configured for branch '%s'"
msgstr "no se ha configurado upstream para la rama '%s'"
-#: remote.c:1628
+#: remote.c:1742
#, c-format
msgid "upstream branch '%s' not stored as a remote-tracking branch"
msgstr "la rama '%s' de upstream no es guardad como rama de rastreo remoto"
-#: remote.c:1643
+#: remote.c:1757
#, c-format
msgid "push destination '%s' on remote '%s' has no local tracking branch"
msgstr ""
"destino de push '%s' en el remoto '%s' no tiene una rama de rastreo local"
-#: remote.c:1655
+#: remote.c:1769
#, c-format
msgid "branch '%s' has no remote for pushing"
msgstr "la rama '%s' no tiene remoto para enviar"
-#: remote.c:1665
+#: remote.c:1779
#, c-format
msgid "push refspecs for '%s' do not include '%s'"
msgstr "refspecs del push para '%s' no incluyen '%s'"
-#: remote.c:1678
+#: remote.c:1792
msgid "push has no destination (push.default is 'nothing')"
msgstr "push no tiene destino (push.default es 'nada')"
-#: remote.c:1700
+#: remote.c:1814
msgid "cannot resolve 'simple' push to a single destination"
msgstr "no se puede resolver push 'simple' para un destino único"
-#: remote.c:1826
+#: remote.c:1943
#, c-format
msgid "couldn't find remote ref %s"
msgstr "no se puedo encontrar ref remota %s"
-#: remote.c:1839
+#: remote.c:1956
#, c-format
msgid "* Ignoring funny ref '%s' locally"
msgstr "* Ignorando ref graciosa '%s' localmente"
-#: remote.c:2002
+#: remote.c:2119
#, c-format
msgid "Your branch is based on '%s', but the upstream is gone.\n"
msgstr "Tu rama está basada en '%s', pero upstream ha desaparecido.\n"
-#: remote.c:2006
+#: remote.c:2123
msgid " (use \"git branch --unset-upstream\" to fixup)\n"
msgstr " (usa \"git branch --unset-upstream\" para arreglar)\n"
-#: remote.c:2009
+#: remote.c:2126
#, c-format
msgid "Your branch is up to date with '%s'.\n"
msgstr "Tu rama está actualizada con '%s'.\n"
-#: remote.c:2013
+#: remote.c:2130
#, c-format
msgid "Your branch and '%s' refer to different commits.\n"
msgstr "Tu rama y '%s' refieren a commits diferentes.\n"
-#: remote.c:2016
+#: remote.c:2133
#, c-format
msgid " (use \"%s\" for details)\n"
msgstr " (usa \"%s\" para detalles)\n"
-#: remote.c:2020
+#: remote.c:2137
#, 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] "Tu rama está adelantada a '%s' por %d commit.\n"
msgstr[1] "Tu rama está adelantada a '%s' por %d commits.\n"
-#: remote.c:2026
+#: remote.c:2143
msgid " (use \"git push\" to publish your local commits)\n"
msgstr " (usa \"git push\" para publicar tus commits locales)\n"
-#: remote.c:2029
+#: remote.c:2146
#, c-format
msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
msgid_plural ""
@@ -6461,11 +7136,11 @@
msgstr[1] ""
"Tu rama está detrás de '%s' por %d commits, y puede ser avanzada rápido.\n"
-#: remote.c:2037
+#: remote.c:2154
msgid " (use \"git pull\" to update your local branch)\n"
msgstr " (usa \"git pull\" para actualizar tu rama local)\n"
-#: remote.c:2040
+#: remote.c:2157
#, c-format
msgid ""
"Your branch and '%s' have diverged,\n"
@@ -6480,11 +7155,11 @@
"Tu rama y '%s' han divergido,\n"
"y tienen %d y %d commits diferentes cada una respectivamente.\n"
-#: remote.c:2050
+#: remote.c:2167
msgid " (use \"git pull\" to merge the remote branch into yours)\n"
msgstr " (usa \"git pull\" para fusionar la rama remota en la tuya)\n"
-#: remote.c:2241
+#: remote.c:2359
#, c-format
msgid "cannot parse expected object name '%s'"
msgstr "no se puede leer el nombre de objeto '%s'"
@@ -6504,101 +7179,96 @@
msgid "replace depth too high for object %s"
msgstr "remplazar profundiad muy elevada para objeto %s"
-#: repository.c:94 builtin/init-db.c:188
-#, c-format
-msgid "The hash algorithm %s is not supported in this build."
-msgstr "El algoritmo hash %s no está soportado en este build."
-
-#: rerere.c:217 rerere.c:226 rerere.c:229
+#: rerere.c:201 rerere.c:210 rerere.c:213
msgid "corrupt MERGE_RR"
msgstr "MERGE_RR corrupto"
-#: rerere.c:264 rerere.c:269
+#: rerere.c:248 rerere.c:253
msgid "unable to write rerere record"
msgstr "incapaz de escribir entrada rerere"
-#: rerere.c:495
+#: rerere.c:479
#, c-format
msgid "there were errors while writing '%s' (%s)"
msgstr "hubieron errores mientras se escribía '%s' (%s)"
-#: rerere.c:498
+#: rerere.c:482
#, c-format
msgid "failed to flush '%s'"
msgstr "falló al hacer flush '%s'"
-#: rerere.c:503 rerere.c:1039
+#: rerere.c:487 rerere.c:1023
#, c-format
msgid "could not parse conflict hunks in '%s'"
msgstr "no se pudo analizar hunks en conflicto en '%s'"
-#: rerere.c:684
+#: rerere.c:668
#, c-format
msgid "failed utime() on '%s'"
msgstr "falló utime() en '%s'"
-#: rerere.c:694
+#: rerere.c:678
#, c-format
msgid "writing '%s' failed"
msgstr "escribiendo '%s' falló"
-#: rerere.c:714
+#: rerere.c:698
#, c-format
msgid "Staged '%s' using previous resolution."
msgstr "'%s' puesto en stage usando resolución previa."
-#: rerere.c:753
+#: rerere.c:737
#, c-format
msgid "Recorded resolution for '%s'."
msgstr "Resolución guardada para '%s'."
-#: rerere.c:788
+#: rerere.c:772
#, c-format
msgid "Resolved '%s' using previous resolution."
msgstr "'%s' resuelto usando resolución previa."
-#: rerere.c:803
+#: rerere.c:787
#, c-format
msgid "cannot unlink stray '%s'"
msgstr "no se puede desvincular stray '%s'"
-#: rerere.c:807
+#: rerere.c:791
#, c-format
msgid "Recorded preimage for '%s'"
msgstr "Resolución precargada para '%s'"
-#: rerere.c:881 submodule.c:2078 builtin/log.c:1891
-#: builtin/submodule--helper.c:1454 builtin/submodule--helper.c:1466
+#: rerere.c:865 submodule.c:2088 builtin/log.c:1991
+#: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:1890
#, c-format
msgid "could not create directory '%s'"
msgstr "no se pudo crear el directorio '%s'"
-#: rerere.c:1057
+#: rerere.c:1041
#, c-format
msgid "failed to update conflicted state in '%s'"
msgstr "falló al actualizar estado conflictivo en '%s'"
-#: rerere.c:1068 rerere.c:1075
+#: rerere.c:1052 rerere.c:1059
#, c-format
msgid "no remembered resolution for '%s'"
msgstr "resolución para '%s' no recordada"
-#: rerere.c:1077
+#: rerere.c:1061
#, c-format
msgid "cannot unlink '%s'"
msgstr "no se puede desvincular '%s'"
-#: rerere.c:1087
+#: rerere.c:1071
#, c-format
msgid "Updated preimage for '%s'"
msgstr "Actualizada preimagen para '%s'"
-#: rerere.c:1096
+#: rerere.c:1080
#, c-format
msgid "Forgot resolution for '%s'\n"
msgstr "Se olvidó resolución para '%s'\n"
-#: rerere.c:1199
+#: rerere.c:1191
msgid "unable to open rr-cache directory"
msgstr "no es posible abrir directorio rr-cache"
@@ -6606,38 +7276,38 @@
msgid "could not determine HEAD revision"
msgstr "no se pudo determinar revisión HEAD"
-#: reset.c:70 reset.c:76 sequencer.c:3318
+#: reset.c:70 reset.c:76 sequencer.c:3468
#, c-format
msgid "failed to find tree of %s"
msgstr "falló al encontrar árbol de %s"
-#: revision.c:2661
+#: revision.c:2338
+msgid "--unpacked=<packfile> no longer supported"
+msgstr "--unpacked=<packfile> ya no es soportado"
+
+#: revision.c:2668
msgid "your current branch appears to be broken"
msgstr "tu rama actual parece estar rota"
-#: revision.c:2664
+#: revision.c:2671
#, c-format
msgid "your current branch '%s' does not have any commits yet"
msgstr "tu rama actual '%s' no tiene ningún commit todavía"
-#: revision.c:2873
-msgid "--first-parent is incompatible with --bisect"
-msgstr "--first-parent es incompatible con --bisect"
-
#: revision.c:2877
msgid "-L does not yet support diff formats besides -p and -s"
msgstr "-L no soporta todavía formatos de diff fuera de -p y -s"
-#: run-command.c:763
+#: run-command.c:767
msgid "open /dev/null failed"
msgstr "falló al abrir /dev/null"
-#: run-command.c:1269
+#: run-command.c:1274
#, c-format
msgid "cannot create async thread: %s"
msgstr "no es posible crear hilo async: %s"
-#: run-command.c:1333
+#: run-command.c:1338
#, c-format
msgid ""
"The '%s' hook was ignored because it's not set as executable.\n"
@@ -6647,34 +7317,34 @@
"Puedes desactivar esta advertencias con `git config advice.ignoredHook "
"false`."
-#: send-pack.c:145
+#: send-pack.c:146
msgid "unexpected flush packet while reading remote unpack status"
msgstr ""
"flush packet inesperado mientras se leía estatus de desempaquetado remoto"
-#: send-pack.c:147
+#: send-pack.c:148
#, c-format
msgid "unable to parse remote unpack status: %s"
msgstr "no es posible analizar el estado de desempaquetado remoto: %s"
-#: send-pack.c:149
+#: send-pack.c:150
#, c-format
msgid "remote unpack failed: %s"
msgstr "desempaquetado remoto falló: %s"
-#: send-pack.c:308
+#: send-pack.c:374
msgid "failed to sign the push certificate"
msgstr "falló al firmar el certificado de push"
-#: send-pack.c:394
+#: send-pack.c:467
msgid "the receiving end does not support this repository's hash algorithm"
msgstr "el destino no soporta el algoritmo de hash de este repositorio"
-#: send-pack.c:403
+#: send-pack.c:476
msgid "the receiving end does not support --signed push"
msgstr "el final receptor no soporta --signed push"
-#: send-pack.c:405
+#: send-pack.c:478
msgid ""
"not sending a push certificate since the receiving end does not support --"
"signed push"
@@ -6682,47 +7352,47 @@
"no se manda un certificado de push ya que el destino no soporta push firmado "
"(--signed )"
-#: send-pack.c:417
+#: send-pack.c:490
msgid "the receiving end does not support --atomic push"
msgstr "el destino no soporta push atómicos (--atomic)"
-#: send-pack.c:422
+#: send-pack.c:495
msgid "the receiving end does not support push options"
msgstr "el destino no soporta opciones de push"
-#: sequencer.c:192
+#: sequencer.c:195
#, c-format
msgid "invalid commit message cleanup mode '%s'"
msgstr "mensaje de commit inválido, modo cleanup '%s'"
-#: sequencer.c:297
+#: sequencer.c:323
#, c-format
msgid "could not delete '%s'"
msgstr "no se pudo borrar '%s'"
-#: sequencer.c:316 builtin/rebase.c:743 builtin/rebase.c:1582 builtin/rm.c:385
+#: sequencer.c:343 builtin/rebase.c:757 builtin/rebase.c:1602 builtin/rm.c:385
#, c-format
msgid "could not remove '%s'"
msgstr "no se pudo eliminar'%s'"
-#: sequencer.c:326
+#: sequencer.c:353
msgid "revert"
msgstr "revertir"
-#: sequencer.c:328
+#: sequencer.c:355
msgid "cherry-pick"
msgstr "cherry-pick"
-#: sequencer.c:330
+#: sequencer.c:357
msgid "rebase"
msgstr "rebase"
-#: sequencer.c:332
+#: sequencer.c:359
#, c-format
msgid "unknown action: %d"
msgstr "acción desconocida: %d"
-#: sequencer.c:390
+#: sequencer.c:418
msgid ""
"after resolving the conflicts, mark the corrected paths\n"
"with 'git add <paths>' or 'git rm <paths>'"
@@ -6730,7 +7400,7 @@
"después de resolver los conflictos, marca las rutas corregidas\n"
"con 'git add <rutas>' o 'git rm <rutas>'"
-#: sequencer.c:393
+#: sequencer.c:421
msgid ""
"after resolving the conflicts, mark the corrected paths\n"
"with 'git add <paths>' or 'git rm <paths>'\n"
@@ -6740,43 +7410,43 @@
"con 'git add <rutas>' o 'git rm <rutas>'\n"
"y haz un commit del resultado con 'git commit'"
-#: sequencer.c:406 sequencer.c:2921
+#: sequencer.c:434 sequencer.c:3070
#, c-format
msgid "could not lock '%s'"
msgstr "no se pudo bloquear '%s'"
-#: sequencer.c:413
+#: sequencer.c:436 sequencer.c:2869 sequencer.c:3074 sequencer.c:3088
+#: sequencer.c:3345 sequencer.c:5334 strbuf.c:1168 wrapper.c:631
+#, c-format
+msgid "could not write to '%s'"
+msgstr "no se pudo escribir en '%s'"
+
+#: sequencer.c:441
#, c-format
msgid "could not write eol to '%s'"
msgstr "no se pudo escribir EOL en '%s'"
-#: sequencer.c:418 sequencer.c:2726 sequencer.c:2927 sequencer.c:2941
-#: sequencer.c:3203
+#: sequencer.c:446 sequencer.c:2874 sequencer.c:3076 sequencer.c:3090
+#: sequencer.c:3353
#, c-format
msgid "failed to finalize '%s'"
msgstr "falló al finalizar '%s'"
-#: sequencer.c:431 sequencer.c:1620 sequencer.c:2746 sequencer.c:3185
-#: sequencer.c:3294 builtin/am.c:249 builtin/commit.c:786 builtin/merge.c:1128
-#, c-format
-msgid "could not read '%s'"
-msgstr "no se pudo leer '%s'"
-
-#: sequencer.c:457
+#: sequencer.c:485
#, c-format
msgid "your local changes would be overwritten by %s."
msgstr "tus cambios locales serán sobreescritos por %s."
-#: sequencer.c:461
+#: sequencer.c:489
msgid "commit your changes or stash them to proceed."
msgstr "realiza un commit con tus cambios o aplica un stash para proceder."
-#: sequencer.c:493
+#: sequencer.c:521
#, c-format
msgid "%s: fast-forward"
msgstr "%s: avance rápido"
-#: sequencer.c:532 builtin/tag.c:566
+#: sequencer.c:560 builtin/tag.c:598
#, c-format
msgid "Invalid cleanup mode %s"
msgstr "Modo cleanup inválido %s"
@@ -6784,65 +7454,65 @@
#. TRANSLATORS: %s will be "revert", "cherry-pick" or
#. "rebase".
#.
-#: sequencer.c:626
+#: sequencer.c:670
#, c-format
msgid "%s: Unable to write new index file"
msgstr "%s: Incapaz de escribir el nuevo archivo índice"
-#: sequencer.c:643
+#: sequencer.c:684
msgid "unable to update cache tree"
msgstr "no es posible actualizar el árbol de la caché"
-#: sequencer.c:657
+#: sequencer.c:698
msgid "could not resolve HEAD commit"
msgstr "no se pudo resolver el commit de HEAD"
-#: sequencer.c:737
+#: sequencer.c:778
#, c-format
msgid "no key present in '%.*s'"
msgstr "no hay llave presente en '%.*s'"
-#: sequencer.c:748
+#: sequencer.c:789
#, c-format
msgid "unable to dequote value of '%s'"
msgstr "no es posible dequote para '%s'"
-#: sequencer.c:785 wrapper.c:198 wrapper.c:368 builtin/am.c:710
-#: builtin/am.c:802 builtin/merge.c:1125 builtin/rebase.c:896
+#: sequencer.c:826 wrapper.c:201 wrapper.c:371 builtin/am.c:710
+#: builtin/am.c:802 builtin/merge.c:1136 builtin/rebase.c:910
#, c-format
msgid "could not open '%s' for reading"
msgstr "no se pudo abrir '%s' para lectura"
-#: sequencer.c:795
+#: sequencer.c:836
msgid "'GIT_AUTHOR_NAME' already given"
msgstr "'GIT_AUTHOR_NAME' ya proporcionado"
-#: sequencer.c:800
+#: sequencer.c:841
msgid "'GIT_AUTHOR_EMAIL' already given"
msgstr "'GIT_AUTHOR_EMAIL' ya proporcionado"
-#: sequencer.c:805
+#: sequencer.c:846
msgid "'GIT_AUTHOR_DATE' already given"
msgstr "'GIT_AUTHOR_DATE' ya proporcionado"
-#: sequencer.c:809
+#: sequencer.c:850
#, c-format
msgid "unknown variable '%s'"
msgstr "variable desconocida '%s'"
-#: sequencer.c:814
+#: sequencer.c:855
msgid "missing 'GIT_AUTHOR_NAME'"
msgstr "falta 'GIT_AUTHOR_NAME'"
-#: sequencer.c:816
+#: sequencer.c:857
msgid "missing 'GIT_AUTHOR_EMAIL'"
msgstr "falta 'GIT_AUTHOR_EMAIL'"
-#: sequencer.c:818
+#: sequencer.c:859
msgid "missing 'GIT_AUTHOR_DATE'"
msgstr "falta 'GIT_AUTHOR_DATE'"
-#: sequencer.c:867
+#: sequencer.c:924
#, c-format
msgid ""
"you have staged changes in your working tree\n"
@@ -6872,11 +7542,11 @@
"\n"
" git rebase --continue\n"
-#: sequencer.c:1141
+#: sequencer.c:1211
msgid "'prepare-commit-msg' hook failed"
msgstr "hook 'prepare-commit-msg' falló"
-#: sequencer.c:1147
+#: sequencer.c:1217
msgid ""
"Your name and email address were configured automatically based\n"
"on your username and hostname. Please check that they are accurate.\n"
@@ -6903,7 +7573,7 @@
"\n"
" git commit --amend --reset-author\n"
-#: sequencer.c:1160
+#: sequencer.c:1230
msgid ""
"Your name and email address were configured automatically based\n"
"on your username and hostname. Please check that they are accurate.\n"
@@ -6927,329 +7597,338 @@
"\n"
" git commit --amend --reset-author\n"
-#: sequencer.c:1202
+#: sequencer.c:1272
msgid "couldn't look up newly created commit"
msgstr "no se pudo revisar el commit recién creado"
-#: sequencer.c:1204
+#: sequencer.c:1274
msgid "could not parse newly created commit"
msgstr "no se pudo analizar el commit recién creado"
-#: sequencer.c:1250
+#: sequencer.c:1320
msgid "unable to resolve HEAD after creating commit"
msgstr "no se pudo resolver HEAD tras crear el commit"
-#: sequencer.c:1252
+#: sequencer.c:1322
msgid "detached HEAD"
msgstr "HEAD desacoplado"
-#: sequencer.c:1256
+#: sequencer.c:1326
msgid " (root-commit)"
msgstr " (commit-raíz)"
-#: sequencer.c:1277
+#: sequencer.c:1347
msgid "could not parse HEAD"
msgstr "no se pudo analizar HEAD"
-#: sequencer.c:1279
+#: sequencer.c:1349
#, c-format
msgid "HEAD %s is not a commit!"
msgstr "¡HEAD %s no es un commit!"
-#: sequencer.c:1283 sequencer.c:1357 builtin/commit.c:1579
+#: sequencer.c:1353 sequencer.c:1431 builtin/commit.c:1577
msgid "could not parse HEAD commit"
msgstr "no se pudo analizar el commit de HEAD"
-#: sequencer.c:1335 sequencer.c:1980
+#: sequencer.c:1409 sequencer.c:2108
msgid "unable to parse commit author"
msgstr "no es posible analizar el autor del commit"
-#: sequencer.c:1346 builtin/am.c:1566 builtin/merge.c:695
+#: sequencer.c:1420 builtin/am.c:1566 builtin/merge.c:702
msgid "git write-tree failed to write a tree"
msgstr "git write-tree falló al escribir el árbol"
-#: sequencer.c:1379 sequencer.c:1450
+#: sequencer.c:1453 sequencer.c:1573
#, c-format
msgid "unable to read commit message from '%s'"
msgstr "no se puede leer el mensaje del commit de '%s'"
-#: sequencer.c:1406 builtin/am.c:1588 builtin/commit.c:1680 builtin/merge.c:894
-#: builtin/merge.c:919
+#: sequencer.c:1484 sequencer.c:1516
+#, c-format
+msgid "invalid author identity '%s'"
+msgstr "identidad de autor inválida '%s'"
+
+#: sequencer.c:1490
+msgid "corrupt author: missing date information"
+msgstr "autor corrupto: falta información"
+
+#: sequencer.c:1529 builtin/am.c:1593 builtin/commit.c:1678 builtin/merge.c:905
+#: builtin/merge.c:930 t/helper/test-fast-rebase.c:78
msgid "failed to write commit object"
msgstr "falló al escribir el objeto commit"
-#: sequencer.c:1433 sequencer.c:4118
+#: sequencer.c:1556 sequencer.c:4291 t/helper/test-fast-rebase.c:198
#, c-format
msgid "could not update %s"
msgstr "no se puede actualizar %s"
-#: sequencer.c:1481
+#: sequencer.c:1605
#, c-format
msgid "could not parse commit %s"
msgstr "no se pudo analizar commit %s"
-#: sequencer.c:1486
+#: sequencer.c:1610
#, c-format
msgid "could not parse parent commit %s"
msgstr "no se pudo analizar el commit padre %s"
-#: sequencer.c:1569 sequencer.c:1680
+#: sequencer.c:1693 sequencer.c:1804
#, c-format
msgid "unknown command: %d"
msgstr "comando desconocido: %d"
-#: sequencer.c:1627 sequencer.c:1652
+#: sequencer.c:1751 sequencer.c:1776
#, c-format
msgid "This is a combination of %d commits."
msgstr "Esta es una combinación de %d commits."
-#: sequencer.c:1637
+#: sequencer.c:1761
msgid "need a HEAD to fixup"
msgstr "se necesita un HEAD para arreglar"
-#: sequencer.c:1639 sequencer.c:3230
+#: sequencer.c:1763 sequencer.c:3380
msgid "could not read HEAD"
msgstr "no se pudo leer HEAD"
-#: sequencer.c:1641
+#: sequencer.c:1765
msgid "could not read HEAD's commit message"
msgstr "no se pudo leer el mensaje de commit de HEAD"
-#: sequencer.c:1647
+#: sequencer.c:1771
#, c-format
msgid "cannot write '%s'"
msgstr "no se puede escribir '%s'"
-#: sequencer.c:1654 git-rebase--preserve-merges.sh:496
+#: sequencer.c:1778 git-rebase--preserve-merges.sh:486
msgid "This is the 1st commit message:"
msgstr "Este es el mensaje del 1er commit:"
-#: sequencer.c:1662
+#: sequencer.c:1786
#, c-format
msgid "could not read commit message of %s"
msgstr "no se puede leer el mensaje del commit de %s"
-#: sequencer.c:1669
+#: sequencer.c:1793
#, c-format
msgid "This is the commit message #%d:"
msgstr "Este es el mensaje del commit #%d:"
-#: sequencer.c:1675
+#: sequencer.c:1799
#, c-format
msgid "The commit message #%d will be skipped:"
msgstr "El mensaje del commit #%d será saltado:"
-#: sequencer.c:1763
+#: sequencer.c:1887
msgid "your index file is unmerged."
msgstr "tu archivo índice no está fusionado."
-#: sequencer.c:1770
+#: sequencer.c:1894
msgid "cannot fixup root commit"
msgstr "no se puede arreglar el commit raíz"
-#: sequencer.c:1789
+#: sequencer.c:1913
#, c-format
msgid "commit %s is a merge but no -m option was given."
msgstr "el commit %s es una fusión pero no se proporcionó la opción -m."
-#: sequencer.c:1797 sequencer.c:1805
+#: sequencer.c:1921 sequencer.c:1929
#, c-format
msgid "commit %s does not have parent %d"
msgstr "el commit %s no tiene un padre %d"
-#: sequencer.c:1811
+#: sequencer.c:1935
#, c-format
msgid "cannot get commit message for %s"
msgstr "no se puede obtener el mensaje de commit para %s"
#. TRANSLATORS: The first %s will be a "todo" command like
#. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1830
+#: sequencer.c:1954
#, c-format
msgid "%s: cannot parse parent commit %s"
msgstr "%s: no se puede analizar el commit padre %s"
-#: sequencer.c:1895
+#: sequencer.c:2019
#, c-format
msgid "could not rename '%s' to '%s'"
msgstr "no se puede renombrar '%s' a '%s'"
-#: sequencer.c:1952
+#: sequencer.c:2079
#, c-format
msgid "could not revert %s... %s"
msgstr "no se pudo revertir %s... %s"
-#: sequencer.c:1953
+#: sequencer.c:2080
#, c-format
msgid "could not apply %s... %s"
msgstr "no se pudo aplicar %s... %s"
-#: sequencer.c:1972
+#: sequencer.c:2100
#, c-format
msgid "dropping %s %s -- patch contents already upstream\n"
msgstr "botando $%s %s -- contenidos del parche ya están en upstream\n"
-#: sequencer.c:2030
+#: sequencer.c:2158
#, c-format
msgid "git %s: failed to read the index"
msgstr "git %s: falló al leer el índice"
-#: sequencer.c:2037
+#: sequencer.c:2165
#, c-format
msgid "git %s: failed to refresh the index"
msgstr "git %s: falló al refrescar el índice"
-#: sequencer.c:2114
+#: sequencer.c:2242
#, c-format
msgid "%s does not accept arguments: '%s'"
msgstr "%s no acepta los argumentos: '%s'"
-#: sequencer.c:2123
+#: sequencer.c:2251
#, c-format
msgid "missing arguments for %s"
msgstr "faltan argumentos para para %s"
-#: sequencer.c:2154
+#: sequencer.c:2282
#, c-format
msgid "could not parse '%s'"
msgstr "no se puede analizar '%s'"
-#: sequencer.c:2215
+#: sequencer.c:2343
#, c-format
msgid "invalid line %d: %.*s"
msgstr "línea inválida %d: %.*s"
-#: sequencer.c:2226
+#: sequencer.c:2354
#, c-format
msgid "cannot '%s' without a previous commit"
msgstr "no se puede '%s' sin un commit previo"
-#: sequencer.c:2310
+#: sequencer.c:2440
msgid "cancelling a cherry picking in progress"
msgstr "cancelando cherry-pick en progreso"
-#: sequencer.c:2317
+#: sequencer.c:2449
msgid "cancelling a revert in progress"
msgstr "cancelando revert en progreso"
-#: sequencer.c:2361
+#: sequencer.c:2493
msgid "please fix this using 'git rebase --edit-todo'."
msgstr "por favor arregle esto usando 'git rebase --edit-todo'."
-#: sequencer.c:2363
+#: sequencer.c:2495
#, c-format
msgid "unusable instruction sheet: '%s'"
msgstr "hoja de instrucciones inutilizable: '%s'"
-#: sequencer.c:2368
+#: sequencer.c:2500
msgid "no commits parsed."
msgstr "ningún commit analizado."
-#: sequencer.c:2379
+#: sequencer.c:2511
msgid "cannot cherry-pick during a revert."
msgstr "no se puede realizar cherry-pick durante un revert."
-#: sequencer.c:2381
+#: sequencer.c:2513
msgid "cannot revert during a cherry-pick."
msgstr "no se puede realizar un revert durante un cherry-pick."
-#: sequencer.c:2459
+#: sequencer.c:2591
#, c-format
msgid "invalid value for %s: %s"
msgstr "valor inválido para %s: %s"
-#: sequencer.c:2556
+#: sequencer.c:2698
msgid "unusable squash-onto"
msgstr "squash-onto inservible"
-#: sequencer.c:2576
+#: sequencer.c:2718
#, c-format
msgid "malformed options sheet: '%s'"
msgstr "hoja de opciones mal formada: '%s'"
-#: sequencer.c:2664 sequencer.c:4469
+#: sequencer.c:2811 sequencer.c:4644
msgid "empty commit set passed"
msgstr "conjunto de commits vacío entregado"
-#: sequencer.c:2680
+#: sequencer.c:2828
msgid "revert is already in progress"
msgstr "revert ya está en progreso"
-#: sequencer.c:2682
+#: sequencer.c:2830
#, c-format
msgid "try \"git revert (--continue | %s--abort | --quit)\""
msgstr "intenta \"git revert (--continue | --quit | %s --abort)\""
-#: sequencer.c:2685
+#: sequencer.c:2833
msgid "cherry-pick is already in progress"
msgstr "cherry-pick ya está en progreso"
-#: sequencer.c:2687
+#: sequencer.c:2835
#, c-format
msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
msgstr "intenta \"git cherry-pick (--continue | --quit | %s --abort)\""
-#: sequencer.c:2701
+#: sequencer.c:2849
#, c-format
msgid "could not create sequencer directory '%s'"
msgstr "no se pudo crear un directorio secuenciador '%s'"
-#: sequencer.c:2716
+#: sequencer.c:2864
msgid "could not lock HEAD"
msgstr "no se pudo bloquear HEAD"
-#: sequencer.c:2776 sequencer.c:4206
+#: sequencer.c:2924 sequencer.c:4379
msgid "no cherry-pick or revert in progress"
msgstr "ningún cherry-pick o revert en progreso"
-#: sequencer.c:2778 sequencer.c:2789
+#: sequencer.c:2926 sequencer.c:2937
msgid "cannot resolve HEAD"
msgstr "no se puede resolver HEAD"
-#: sequencer.c:2780 sequencer.c:2824
+#: sequencer.c:2928 sequencer.c:2972
msgid "cannot abort from a branch yet to be born"
msgstr "no se puede abortar de una rama por nacer"
-#: sequencer.c:2810 builtin/grep.c:744
+#: sequencer.c:2958 builtin/grep.c:757
#, c-format
msgid "cannot open '%s'"
msgstr "no se puede abrir '%s'"
-#: sequencer.c:2812
+#: sequencer.c:2960
#, c-format
msgid "cannot read '%s': %s"
msgstr "no se puede leer '%s': %s"
-#: sequencer.c:2813
+#: sequencer.c:2961
msgid "unexpected end of file"
msgstr "final de archivo inesperado"
-#: sequencer.c:2819
+#: sequencer.c:2967
#, c-format
msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
msgstr "archivo HEAD de pre-cherry-pick guardado '%s' está corrupto"
-#: sequencer.c:2830
+#: sequencer.c:2978
msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
msgstr "Parece que se ha movido HEAD. No se hace rebobinado, ¡revisa tu HEAD!"
-#: sequencer.c:2871
+#: sequencer.c:3019
msgid "no revert in progress"
msgstr "no hay revert en progreso"
-#: sequencer.c:2879
+#: sequencer.c:3028
msgid "no cherry-pick in progress"
msgstr "ningún cherry-pick en progreso"
-#: sequencer.c:2889
+#: sequencer.c:3038
msgid "failed to skip the commit"
msgstr "falló al escribir el commit"
-#: sequencer.c:2896
+#: sequencer.c:3045
msgid "there is nothing to skip"
msgstr "no hay nada que saltar"
-#: sequencer.c:2899
+#: sequencer.c:3048
#, c-format
msgid ""
"have you committed already?\n"
@@ -7258,16 +7937,16 @@
"¿ya has hecho el commit?\n"
"intenta \"git %s --continue\""
-#: sequencer.c:3060 sequencer.c:4098
+#: sequencer.c:3210 sequencer.c:4271
msgid "cannot read HEAD"
msgstr "no se puede leer HEAD"
-#: sequencer.c:3077
+#: sequencer.c:3227
#, c-format
msgid "unable to copy '%s' to '%s'"
msgstr "no se pudo copiar '%s' a '%s'"
-#: sequencer.c:3085
+#: sequencer.c:3235
#, c-format
msgid ""
"You can amend the commit now, with\n"
@@ -7286,27 +7965,27 @@
"\n"
"\tgit rebase --continue\n"
-#: sequencer.c:3095
+#: sequencer.c:3245
#, c-format
msgid "Could not apply %s... %.*s"
msgstr "No se pudo aplicar %s... %.*s"
-#: sequencer.c:3102
+#: sequencer.c:3252
#, c-format
msgid "Could not merge %.*s"
msgstr "No se pudo fusionar %.*s"
-#: sequencer.c:3116 sequencer.c:3120 builtin/difftool.c:641
+#: sequencer.c:3266 sequencer.c:3270 builtin/difftool.c:640
#, c-format
msgid "could not copy '%s' to '%s'"
msgstr "no se pudo copiar '%s' a '%s'"
-#: sequencer.c:3132
+#: sequencer.c:3282
#, c-format
msgid "Executing: %s\n"
msgstr "Ejecutando: %s\n"
-#: sequencer.c:3147
+#: sequencer.c:3297
#, c-format
msgid ""
"execution failed: %s\n"
@@ -7321,11 +8000,11 @@
" git rebase --continue\n"
"\n"
-#: sequencer.c:3153
+#: sequencer.c:3303
msgid "and made changes to the index and/or the working tree\n"
msgstr "y se hicieron cambios al índice y/o árbol de trabajo\n"
-#: sequencer.c:3159
+#: sequencer.c:3309
#, c-format
msgid ""
"execution succeeded: %s\n"
@@ -7342,90 +8021,90 @@
" git rebase --continue\n"
"\n"
-#: sequencer.c:3220
+#: sequencer.c:3370
#, c-format
msgid "illegal label name: '%.*s'"
msgstr "nombre de label ilegal: '%.*s'"
-#: sequencer.c:3274
+#: sequencer.c:3424
msgid "writing fake root commit"
msgstr "escribiendo commit raíz falso"
-#: sequencer.c:3279
+#: sequencer.c:3429
msgid "writing squash-onto"
msgstr "escribiendo squash-onto"
-#: sequencer.c:3363
+#: sequencer.c:3513
#, c-format
msgid "could not resolve '%s'"
msgstr "no se pudo resolver '%s'"
-#: sequencer.c:3394
+#: sequencer.c:3546
msgid "cannot merge without a current revision"
msgstr "no se puede fusionar sin una versión actual"
-#: sequencer.c:3416
+#: sequencer.c:3568
#, c-format
msgid "unable to parse '%.*s'"
msgstr "no se puede analizar '%.*s'"
-#: sequencer.c:3425
+#: sequencer.c:3577
#, c-format
msgid "nothing to merge: '%.*s'"
msgstr "nada para fusionar: '%.*s'"
-#: sequencer.c:3437
+#: sequencer.c:3589
msgid "octopus merge cannot be executed on top of a [new root]"
msgstr "fusión octopus no puede ser ejecutada en la punta de un [nuevo root]"
-#: sequencer.c:3453
+#: sequencer.c:3605
#, c-format
msgid "could not get commit message of '%s'"
msgstr "no se puede leer el mensaje del commit '%s'"
-#: sequencer.c:3613
+#: sequencer.c:3788
#, c-format
msgid "could not even attempt to merge '%.*s'"
msgstr "no se pudo intentar fusionar '%.*s'"
-#: sequencer.c:3629
+#: sequencer.c:3804
msgid "merge: Unable to write new index file"
msgstr "fusión: No se puede escribir el nuevo archivo índice"
-#: sequencer.c:3703
+#: sequencer.c:3878
msgid "Cannot autostash"
msgstr "No se puede ejecutar autostash"
-#: sequencer.c:3706
+#: sequencer.c:3881
#, c-format
msgid "Unexpected stash response: '%s'"
msgstr "Respuesta de stash inesperada: '%s'"
-#: sequencer.c:3712
+#: sequencer.c:3887
#, c-format
msgid "Could not create directory for '%s'"
msgstr "No se pudo crear el directorio para '%s'"
-#: sequencer.c:3715
+#: sequencer.c:3890
#, c-format
msgid "Created autostash: %s\n"
msgstr "Autostash creado: %s\n"
-#: sequencer.c:3719
+#: sequencer.c:3894
msgid "could not reset --hard"
msgstr "no se pudo reset --hard"
-#: sequencer.c:3744
+#: sequencer.c:3919
#, c-format
msgid "Applied autostash.\n"
msgstr "Autostash aplicado.\n"
-#: sequencer.c:3756
+#: sequencer.c:3931
#, c-format
msgid "cannot store %s"
msgstr "no se puede guardar %s"
-#: sequencer.c:3759
+#: sequencer.c:3934
#, c-format
msgid ""
"%s\n"
@@ -7437,34 +8116,29 @@
"Puedes ejecutar \"git stash pop\" o \"git stash drop\" en cualquier "
"momento.\n"
-#: sequencer.c:3764
+#: sequencer.c:3939
msgid "Applying autostash resulted in conflicts."
msgstr "Apicar autostash resultó en conflictos."
-#: sequencer.c:3765
+#: sequencer.c:3940
msgid "Autostash exists; creating a new stash entry."
msgstr "Autostash existe; creando una nueva entrada stash."
-#: sequencer.c:3857
-#, c-format
-msgid "%s: not a valid OID"
-msgstr "%s no es OID válido"
-
-#: sequencer.c:3862 git-rebase--preserve-merges.sh:779
+#: sequencer.c:4033 git-rebase--preserve-merges.sh:769
msgid "could not detach HEAD"
msgstr "no se puede desacoplar HEAD"
-#: sequencer.c:3877
+#: sequencer.c:4048
#, c-format
msgid "Stopped at HEAD\n"
msgstr "Detenido en HEAD\n"
-#: sequencer.c:3879
+#: sequencer.c:4050
#, c-format
msgid "Stopped at %s\n"
msgstr "Detenido en %s\n"
-#: sequencer.c:3887
+#: sequencer.c:4058
#, c-format
msgid ""
"Could not execute the todo command\n"
@@ -7485,58 +8159,58 @@
" git rebase --edit-todo\n"
" git rebase --continue\n"
-#: sequencer.c:3931
+#: sequencer.c:4104
#, c-format
msgid "Rebasing (%d/%d)%s"
msgstr "Aplicando rebase (%d/%d)%s"
-#: sequencer.c:3976
+#: sequencer.c:4149
#, c-format
msgid "Stopped at %s... %.*s\n"
msgstr "Detenido en %s... %.*s\n"
-#: sequencer.c:4047
+#: sequencer.c:4220
#, c-format
msgid "unknown command %d"
msgstr "comando desconocido %d"
-#: sequencer.c:4106
+#: sequencer.c:4279
msgid "could not read orig-head"
msgstr "no se puede leer orig-head"
-#: sequencer.c:4111
+#: sequencer.c:4284
msgid "could not read 'onto'"
msgstr "no se puede leer 'onto'"
-#: sequencer.c:4125
+#: sequencer.c:4298
#, c-format
msgid "could not update HEAD to %s"
msgstr "no se puede actualizar HEAD a %s"
-#: sequencer.c:4185
+#: sequencer.c:4358
#, c-format
msgid "Successfully rebased and updated %s.\n"
msgstr "Rebase aplicado satisfactoriamente y actualizado %s.\n"
-#: sequencer.c:4218
+#: sequencer.c:4391
msgid "cannot rebase: You have unstaged changes."
msgstr "no se puede realizar rebase: Tienes cambios fuera del área de stage."
-#: sequencer.c:4227
+#: sequencer.c:4400
msgid "cannot amend non-existing commit"
msgstr "no se puede arreglar un commit no existente"
-#: sequencer.c:4229
+#: sequencer.c:4402
#, c-format
msgid "invalid file: '%s'"
msgstr "archivo inválido: '%s'"
-#: sequencer.c:4231
+#: sequencer.c:4404
#, c-format
msgid "invalid contents: '%s'"
msgstr "contenido inválido: '%s'"
-#: sequencer.c:4234
+#: sequencer.c:4407
msgid ""
"\n"
"You have uncommitted changes in your working tree. Please, commit them\n"
@@ -7547,50 +8221,50 @@
"un commit con estos\n"
"primero y luego ejecuta 'git rebase --continue' de nuevo."
-#: sequencer.c:4270 sequencer.c:4309
+#: sequencer.c:4443 sequencer.c:4482
#, c-format
msgid "could not write file: '%s'"
msgstr "no se pudo escribir el archivo: '%s'"
-#: sequencer.c:4324
+#: sequencer.c:4498
msgid "could not remove CHERRY_PICK_HEAD"
msgstr "no se puede eliminar CHERRY_PICK_HEAD"
-#: sequencer.c:4331
+#: sequencer.c:4505
msgid "could not commit staged changes."
msgstr "no se pudo realizar el commit con los cambios en el área de stage."
-#: sequencer.c:4446
+#: sequencer.c:4621
#, c-format
msgid "%s: can't cherry-pick a %s"
msgstr "%s: no se puede aplicar cherry-pick a un %s"
-#: sequencer.c:4450
+#: sequencer.c:4625
#, c-format
msgid "%s: bad revision"
msgstr "%s: revisión errónea"
-#: sequencer.c:4485
+#: sequencer.c:4660
msgid "can't revert as initial commit"
msgstr "no se puede revertir como commit inicial"
-#: sequencer.c:4962
+#: sequencer.c:5137
msgid "make_script: unhandled options"
msgstr "make_script: opciones desconocidas"
-#: sequencer.c:4965
+#: sequencer.c:5140
msgid "make_script: error preparing revisions"
msgstr "make_script: error preparando revisiones"
-#: sequencer.c:5206 sequencer.c:5223
+#: sequencer.c:5382 sequencer.c:5399
msgid "nothing to do"
msgstr "nada que hacer"
-#: sequencer.c:5242
+#: sequencer.c:5418
msgid "could not skip unnecessary pick commands"
msgstr "no se pudo saltar los comandos pick innecesarios"
-#: sequencer.c:5336
+#: sequencer.c:5512
msgid "the script was already rearranged."
msgstr "este script ya fue reorganizado."
@@ -7647,85 +8321,89 @@
msgid "this operation must be run in a work tree"
msgstr "esta operación debe ser realizada en un árbol de trabajo"
-#: setup.c:604
+#: setup.c:661
#, c-format
msgid "Expected git repo version <= %d, found %d"
msgstr "Se esperaba versión de git repo <= %d, encontrada %d"
-#: setup.c:612
+#: setup.c:669
msgid "unknown repository extensions found:"
msgstr "se encontró extensión de repositorio desconocida:"
-#: setup.c:631
+#: setup.c:681
+msgid "repo version is 0, but v1-only extensions found:"
+msgstr "versión de repo es 0, pero extensión v1-only encontrada:"
+
+#: setup.c:700
#, c-format
msgid "error opening '%s'"
msgstr "error abriendo '%s'"
-#: setup.c:633
+#: setup.c:702
#, c-format
msgid "too large to be a .git file: '%s'"
msgstr "muy grande para ser un archivo .git: '%s'"
-#: setup.c:635
+#: setup.c:704
#, c-format
msgid "error reading %s"
msgstr "error leyendo %s"
-#: setup.c:637
+#: setup.c:706
#, c-format
msgid "invalid gitfile format: %s"
msgstr "formato gitfile inválido: %s"
-#: setup.c:639
+#: setup.c:708
#, c-format
msgid "no path in gitfile: %s"
msgstr "no hay ruta en gitfile: %s"
-#: setup.c:641
+#: setup.c:710
#, c-format
msgid "not a git repository: %s"
msgstr "no es un repositorio git: %s"
-#: setup.c:743
+#: setup.c:812
#, c-format
msgid "'$%s' too big"
msgstr "'$%s' muy grande"
-#: setup.c:757
+#: setup.c:826
#, c-format
msgid "not a git repository: '%s'"
msgstr "no es un repositorio git: '%s'"
-#: setup.c:786 setup.c:788 setup.c:819
+#: setup.c:855 setup.c:857 setup.c:888
#, c-format
msgid "cannot chdir to '%s'"
msgstr "no se puede aplicar chdir a '%s'"
-#: setup.c:791 setup.c:847 setup.c:857 setup.c:896 setup.c:904
+#: setup.c:860 setup.c:916 setup.c:926 setup.c:965 setup.c:973
msgid "cannot come back to cwd"
msgstr "no se puede volver a cwd"
-#: setup.c:918
+#: setup.c:987
#, c-format
msgid "failed to stat '%*s%s%s'"
msgstr "falló al determinar '%*s%s%s'"
-#: setup.c:1156
+#: setup.c:1225
msgid "Unable to read current working directory"
msgstr "Incapaz de leer el directorio de trabajo actual"
-#: setup.c:1165 setup.c:1171
+#: setup.c:1234 setup.c:1240
#, c-format
msgid "cannot change to '%s'"
msgstr "no se puede cambiar a '%s'"
-#: setup.c:1176
+#: setup.c:1245
#, c-format
msgid "not a git repository (or any of the parent directories): %s"
msgstr ""
"no es un repositorio git (ni ninguno de los directorios superiores): %s"
-#: setup.c:1182
+#: setup.c:1251
#, c-format
msgid ""
"not a git repository (or any parent up to mount point %s)\n"
@@ -7735,7 +8413,7 @@
"Parando en el límite del sistema de archivos "
"(GIT_DISCOVERY_ACROSS_FILESYSTEM no establecido)."
-#: setup.c:1293
+#: setup.c:1362
#, c-format
msgid ""
"problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -7744,375 +8422,18 @@
"problema con el valor del modo de archivo core.sharedRepository (0%.3o).\n"
"El dueño de los archivos tiene que tener permisos de lectura y escritura."
-#: setup.c:1340
+#: setup.c:1409
msgid "open /dev/null or dup failed"
msgstr "falló al abrir /dev/null o dup"
-#: setup.c:1355
+#: setup.c:1424
msgid "fork failed"
msgstr "falló fork"
-#: setup.c:1360
+#: setup.c:1429
msgid "setsid failed"
msgstr "falló setsid"
-#: sha1-file.c:470
-#, c-format
-msgid "object directory %s does not exist; check .git/objects/info/alternates"
-msgstr "objeto directorio %s no existe; revisa .git/objects/info/alternates"
-
-#: sha1-file.c:521
-#, c-format
-msgid "unable to normalize alternate object path: %s"
-msgstr "incapaz de normalizar la ruta de objeto alterno: %s"
-
-#: sha1-file.c:593
-#, c-format
-msgid "%s: ignoring alternate object stores, nesting too deep"
-msgstr "%s: ignorando espacios de objetos alternos, anidado muy profundo"
-
-#: sha1-file.c:600
-#, c-format
-msgid "unable to normalize object directory: %s"
-msgstr "incapaz de normalizar directorio de objeto: %s"
-
-#: sha1-file.c:643
-msgid "unable to fdopen alternates lockfile"
-msgstr "no es posible hacer fdopen en lockfile alternos"
-
-#: sha1-file.c:661
-msgid "unable to read alternates file"
-msgstr "no es posible leer archivos alternos"
-
-#: sha1-file.c:668
-msgid "unable to move new alternates file into place"
-msgstr "no es posible mover archivos alternos en el lugar"
-
-#: sha1-file.c:703
-#, c-format
-msgid "path '%s' does not exist"
-msgstr "ruta '%s' no existe"
-
-#: sha1-file.c:724
-#, c-format
-msgid "reference repository '%s' as a linked checkout is not supported yet."
-msgstr ""
-"repositorio de referencia '%s' como un checkout vinculado no es soportado "
-"todavía."
-
-#: sha1-file.c:730
-#, c-format
-msgid "reference repository '%s' is not a local repository."
-msgstr "repositorio de referencia '%s' no es un repositorio local."
-
-#: sha1-file.c:736
-#, c-format
-msgid "reference repository '%s' is shallow"
-msgstr "repositorio de referencia '%s' es superficial (shallow)"
-
-#: sha1-file.c:744
-#, c-format
-msgid "reference repository '%s' is grafted"
-msgstr "repositorio de referencia '% s' está injertado"
-
-#: sha1-file.c:804
-#, c-format
-msgid "invalid line while parsing alternate refs: %s"
-msgstr "línea inválida mientras se analizaban refs alternas: %s"
-
-#: sha1-file.c:954
-#, c-format
-msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
-msgstr "intentando usar mmap %<PRIuMAX> sobre límite %<PRIuMAX>"
-
-#: sha1-file.c:975
-msgid "mmap failed"
-msgstr "mmap falló"
-
-#: sha1-file.c:1139
-#, c-format
-msgid "object file %s is empty"
-msgstr "archivo de objeto %s está vacío"
-
-#: sha1-file.c:1274 sha1-file.c:2454
-#, c-format
-msgid "corrupt loose object '%s'"
-msgstr "objeto perdido corrupto '%s'"
-
-#: sha1-file.c:1276 sha1-file.c:2458
-#, c-format
-msgid "garbage at end of loose object '%s'"
-msgstr "basura al final del objeto perdido '%s'"
-
-#: sha1-file.c:1318
-msgid "invalid object type"
-msgstr "tipo de objeto inválido"
-
-#: sha1-file.c:1402
-#, c-format
-msgid "unable to unpack %s header with --allow-unknown-type"
-msgstr "no es posible desempacar header %s con --allow-unknown-type"
-
-#: sha1-file.c:1405
-#, c-format
-msgid "unable to unpack %s header"
-msgstr "incapaz de desempaquetar header %s"
-
-#: sha1-file.c:1411
-#, c-format
-msgid "unable to parse %s header with --allow-unknown-type"
-msgstr "no es posible analizar header %s con --allow-unknown-type"
-
-#: sha1-file.c:1414
-#, c-format
-msgid "unable to parse %s header"
-msgstr "incapaz de analizar header %s"
-
-#: sha1-file.c:1640
-#, c-format
-msgid "failed to read object %s"
-msgstr "falló al leer objeto %s"
-
-#: sha1-file.c:1644
-#, c-format
-msgid "replacement %s not found for %s"
-msgstr "reemplazo %s no encontrado para %s"
-
-#: sha1-file.c:1648
-#, c-format
-msgid "loose object %s (stored in %s) is corrupt"
-msgstr "objeto perdido %s (guardado en %s) está corrompido"
-
-#: sha1-file.c:1652
-#, c-format
-msgid "packed object %s (stored in %s) is corrupt"
-msgstr "paquete de objeto %s (guardado en %s) está corrompido"
-
-#: sha1-file.c:1757
-#, c-format
-msgid "unable to write file %s"
-msgstr "no es posible escribir archivo %s"
-
-#: sha1-file.c:1764
-#, c-format
-msgid "unable to set permission to '%s'"
-msgstr "no se pudo poner permisos a '%s'"
-
-#: sha1-file.c:1771
-msgid "file write error"
-msgstr "falló de escritura"
-
-#: sha1-file.c:1791
-msgid "error when closing loose object file"
-msgstr "error cerrando el archivo de objeto suelto"
-
-#: sha1-file.c:1856
-#, c-format
-msgid "insufficient permission for adding an object to repository database %s"
-msgstr ""
-"permisos insuficientes para agregar un objeto a la base de datos del "
-"repositorio %s"
-
-#: sha1-file.c:1858
-msgid "unable to create temporary file"
-msgstr "no es posible crear un archivo temporal"
-
-#: sha1-file.c:1882
-msgid "unable to write loose object file"
-msgstr "no es posible escribir el archivo de objeto suelto"
-
-#: sha1-file.c:1888
-#, c-format
-msgid "unable to deflate new object %s (%d)"
-msgstr "no es posible desinflar el objeto nuevo %s (%d)"
-
-#: sha1-file.c:1892
-#, c-format
-msgid "deflateEnd on object %s failed (%d)"
-msgstr "deflateEnd en objeto %s falló (%d)"
-
-#: sha1-file.c:1896
-#, c-format
-msgid "confused by unstable object source data for %s"
-msgstr "confundido por fuente de data de objetos inestable para %s"
-
-#: sha1-file.c:1906 builtin/pack-objects.c:1085
-#, c-format
-msgid "failed utime() on %s"
-msgstr "falló utime() en %s"
-
-#: sha1-file.c:1983
-#, c-format
-msgid "cannot read object for %s"
-msgstr "no se pudo leer el objeto para %s"
-
-#: sha1-file.c:2022
-msgid "corrupt commit"
-msgstr "commit corrupto"
-
-#: sha1-file.c:2030
-msgid "corrupt tag"
-msgstr "tag corrupto"
-
-#: sha1-file.c:2130
-#, c-format
-msgid "read error while indexing %s"
-msgstr "error leyendo al indexar %s"
-
-#: sha1-file.c:2133
-#, c-format
-msgid "short read while indexing %s"
-msgstr "lectura corta al indexar %s"
-
-#: sha1-file.c:2206 sha1-file.c:2216
-#, c-format
-msgid "%s: failed to insert into database"
-msgstr "%s: falló al insertar en la base de datos"
-
-#: sha1-file.c:2222
-#, c-format
-msgid "%s: unsupported file type"
-msgstr "%s: tipo de archivo no soportado"
-
-#: sha1-file.c:2246
-#, c-format
-msgid "%s is not a valid object"
-msgstr "%s no es objeto válido"
-
-#: sha1-file.c:2248
-#, c-format
-msgid "%s is not a valid '%s' object"
-msgstr "%s no es un objeto '%s' válido"
-
-#: sha1-file.c:2275 builtin/index-pack.c:155
-#, c-format
-msgid "unable to open %s"
-msgstr "no es posible abrir %s"
-
-#: sha1-file.c:2465 sha1-file.c:2518
-#, c-format
-msgid "hash mismatch for %s (expected %s)"
-msgstr "hash no concuerda para %s (se esperaba %s)"
-
-#: sha1-file.c:2489
-#, c-format
-msgid "unable to mmap %s"
-msgstr "no es posible hacer mmap a %s"
-
-#: sha1-file.c:2494
-#, c-format
-msgid "unable to unpack header of %s"
-msgstr "incapaz de desempaquetar header de %s"
-
-#: sha1-file.c:2500
-#, c-format
-msgid "unable to parse header of %s"
-msgstr "incapaz de analizar header de %s"
-
-#: sha1-file.c:2511
-#, c-format
-msgid "unable to unpack contents of %s"
-msgstr "no es posible desempaquetar contenidos de %s"
-
-#: sha1-name.c:486
-#, c-format
-msgid "short SHA1 %s is ambiguous"
-msgstr "SHA1 %s corto es ambiguo"
-
-#: sha1-name.c:497
-msgid "The candidates are:"
-msgstr "Los candidatos son:"
-
-#: sha1-name.c:796
-msgid ""
-"Git normally never creates a ref that ends with 40 hex characters\n"
-"because it will be ignored when you just specify 40-hex. These refs\n"
-"may be created by mistake. For example,\n"
-"\n"
-" git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
-"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
-msgstr ""
-"Git normalmente nunca crea una ref que termine con 40 caracteres hex\n"
-"porque esto sería ignorado cuando solo se especifiquen 40-hex. Estas refs\n"
-"tal vez sean creadas por error. Por ejemplo,\n"
-"\n"
-" git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"donde \"$br\" está de alguna manera vacía y una ref de 40-hex es creada. Por "
-"favor\n"
-"examina estas refs y tal vez bórralas. Silencia este mensaje \n"
-"ejecutando \"git config advice.objectNameWarning false\""
-
-#: sha1-name.c:916
-#, c-format
-msgid "log for '%.*s' only goes back to %s"
-msgstr "log para '%.*s' solo va hasta %s"
-
-#: sha1-name.c:924
-#, c-format
-msgid "log for '%.*s' only has %d entries"
-msgstr "log para '%.*s' solo tiene %d entradas"
-
-#: sha1-name.c:1689
-#, c-format
-msgid "path '%s' exists on disk, but not in '%.*s'"
-msgstr "la ruta '%s' existe en disco, pero no en '%.*s'"
-
-#: sha1-name.c:1695
-#, c-format
-msgid ""
-"path '%s' exists, but not '%s'\n"
-"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
-msgstr ""
-"ruta '%s' existe, pero no '%s'\n"
-"ayuda: ¿Quisiste decir '%.*s:%s' o '%.*s:./%s'?"
-
-#: sha1-name.c:1704
-#, c-format
-msgid "path '%s' does not exist in '%.*s'"
-msgstr "ruta '%s' no existe en '%.*s'"
-
-#: sha1-name.c:1732
-#, c-format
-msgid ""
-"path '%s' is in the index, but not at stage %d\n"
-"hint: Did you mean ':%d:%s'?"
-msgstr ""
-"ruta '%s' está en el index, pero no en stage %d\n"
-"ayuda:¿Quisiste decir: '%d:%s'?"
-
-#: sha1-name.c:1748
-#, c-format
-msgid ""
-"path '%s' is in the index, but not '%s'\n"
-"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
-msgstr ""
-"ruta '%s' está en el index, pero no '%s'\n"
-"ayuda:¿Quisiste decir ':%d:%s' o ':%d:./%s'?"
-
-#: sha1-name.c:1756
-#, c-format
-msgid "path '%s' exists on disk, but not in the index"
-msgstr "ruta '%s' existe en el disco, pero no en el index"
-
-#: sha1-name.c:1758
-#, c-format
-msgid "path '%s' does not exist (neither on disk nor in the index)"
-msgstr "ruta '%s' no existe (ni en disco ni en el index)"
-
-#: sha1-name.c:1771
-msgid "relative path syntax can't be used outside working tree"
-msgstr ""
-"la sintaxis de ruta relativa no se puede usar fuera del directorio de trabajo"
-
-#: sha1-name.c:1909
-#, c-format
-msgid "invalid object name '%.*s'."
-msgstr "nombre de objeto no válido: '%.*s'."
-
#. TRANSLATORS: IEC 80000-13:2008 gibibyte
#: strbuf.c:848
#, c-format
@@ -8165,6 +8486,12 @@
msgstr[0] "%u bytes/s"
msgstr[1] "%u bytes/s"
+#: strbuf.c:1166 wrapper.c:199 wrapper.c:369 builtin/am.c:719
+#: builtin/rebase.c:866
+#, c-format
+msgid "could not open '%s' for writing"
+msgstr "no se pudo abrir '%s' para escritura"
+
#: strbuf.c:1175
#, c-format
msgid "could not edit '%s'"
@@ -8225,12 +8552,12 @@
msgid "Pathspec '%s' is in submodule '%.*s'"
msgstr "El patrón de ruta '%s' está en el submódulo '%.*s'"
-#: submodule.c:434
+#: submodule.c:435
#, c-format
msgid "bad --ignore-submodules argument: %s"
msgstr "mal argumento --ignore-submodules: %s"
-#: submodule.c:815
+#: submodule.c:817
#, c-format
msgid ""
"Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -8239,50 +8566,50 @@
"Submódulo en el commit %s en ruta: '%s' colisiona con un submódulo llamado "
"igual. Saltandolo."
-#: submodule.c:910
+#: submodule.c:920
#, c-format
msgid "submodule entry '%s' (%s) is a %s, not a commit"
msgstr "entrada de submódulo '%s' (%s) es un %s, no un commit"
-#: submodule.c:995
+#: submodule.c:1005
#, c-format
msgid ""
"Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
"submodule %s"
msgstr ""
-"no se pudo ejecutar comando 'git rev-list <commits> --not --remotes -n 1' en "
+"No se pudo ejecutar comando 'git rev-list <commits> --not --remotes -n 1' en "
"el submódulo %s"
-#: submodule.c:1118
+#: submodule.c:1128
#, c-format
msgid "process for submodule '%s' failed"
msgstr "proceso para submódulo '%s' falló"
-#: submodule.c:1147 builtin/branch.c:678 builtin/submodule--helper.c:2045
+#: submodule.c:1157 builtin/branch.c:689 builtin/submodule--helper.c:2469
msgid "Failed to resolve HEAD as a valid ref."
msgstr "Falló al resolver HEAD como un ref válido."
-#: submodule.c:1158
+#: submodule.c:1168
#, c-format
msgid "Pushing submodule '%s'\n"
msgstr "Empujando submódulo '%s'\n"
-#: submodule.c:1161
+#: submodule.c:1171
#, c-format
msgid "Unable to push submodule '%s'\n"
msgstr "No es posible hacer push al submódulo '%s'\n"
-#: submodule.c:1453
+#: submodule.c:1463
#, c-format
msgid "Fetching submodule %s%s\n"
msgstr "Haciendo fetch al submódulo %s%s\n"
-#: submodule.c:1483
+#: submodule.c:1497
#, c-format
msgid "Could not access submodule '%s'\n"
msgstr "No pudo acceder al submódulo '%s'\n"
-#: submodule.c:1637
+#: submodule.c:1652
#, c-format
msgid ""
"Errors during submodule fetch:\n"
@@ -8291,61 +8618,61 @@
"Errores durante el fetch del submódulo:\n"
"%s"
-#: submodule.c:1662
+#: submodule.c:1677
#, c-format
msgid "'%s' not recognized as a git repository"
msgstr "'%s' no reconocido como un repositorio git"
-#: submodule.c:1679
+#: submodule.c:1694
#, c-format
msgid "Could not run 'git status --porcelain=2' in submodule %s"
msgstr "No se pudo ejecutar 'git status --procelain=2' en el submódulo %s"
-#: submodule.c:1720
+#: submodule.c:1735
#, c-format
msgid "'git status --porcelain=2' failed in submodule %s"
msgstr "'git status --procelain=2' falló en el submódulo %s"
-#: submodule.c:1800
+#: submodule.c:1810
#, c-format
msgid "could not start 'git status' in submodule '%s'"
msgstr "no se pudo comenzar 'git status' en el submódulo '%s'"
-#: submodule.c:1813
+#: submodule.c:1823
#, c-format
msgid "could not run 'git status' in submodule '%s'"
msgstr "no se pudo ejecutar 'git status' en el submódulo '%s'"
-#: submodule.c:1828
+#: submodule.c:1838
#, c-format
msgid "Could not unset core.worktree setting in submodule '%s'"
msgstr "No se pudo quitar configuración core.worktree en submódulo '%s'"
-#: submodule.c:1855 submodule.c:2165
+#: submodule.c:1865 submodule.c:2175
#, c-format
msgid "could not recurse into submodule '%s'"
msgstr "no pudo recursar en el submódulo '%s'"
-#: submodule.c:1876
+#: submodule.c:1886
msgid "could not reset submodule index"
msgstr "no se pudo reiniciar el index del submódulo"
-#: submodule.c:1918
+#: submodule.c:1928
#, c-format
msgid "submodule '%s' has dirty index"
msgstr "submódulo '%s' tiene un índice corrupto"
-#: submodule.c:1970
+#: submodule.c:1980
#, c-format
msgid "Submodule '%s' could not be updated."
msgstr "Submódulo '%s' no pudo ser actualizado."
-#: submodule.c:2038
+#: submodule.c:2048
#, c-format
msgid "submodule git dir '%s' is inside git dir '%.*s'"
msgstr "submódulo git dir '%s' esta dentro de git dir '%.*s'"
-#: submodule.c:2059
+#: submodule.c:2069
#, c-format
msgid ""
"relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -8353,17 +8680,17 @@
"relocate_gitdir para el submódulo '%s' con más de un árbol de trabajo no "
"soportado"
-#: submodule.c:2071 submodule.c:2130
+#: submodule.c:2081 submodule.c:2140
#, c-format
msgid "could not lookup name for submodule '%s'"
msgstr "no se pudo resolver el nombre para el submódulo '%s'"
-#: submodule.c:2075
+#: submodule.c:2085
#, c-format
msgid "refusing to move '%s' into an existing git dir"
msgstr "rechazando mover '%s' dentro de un directorio git existente"
-#: submodule.c:2082
+#: submodule.c:2092
#, c-format
msgid ""
"Migrating git directory of '%s%s' from\n"
@@ -8374,65 +8701,65 @@
"'%s' hacia\n"
"'%s'\n"
-#: submodule.c:2210
+#: submodule.c:2220
msgid "could not start ls-files in .."
msgstr "no se pudo comenzar ls-files en .."
-#: submodule.c:2250
+#: submodule.c:2260
#, c-format
msgid "ls-tree returned unexpected return code %d"
msgstr "ls-tree devolvió un código %d inesperado"
-#: trailer.c:238
+#: trailer.c:236
#, c-format
msgid "running trailer command '%s' failed"
msgstr "ejecución del comando de remolque '%s' falló"
-#: trailer.c:485 trailer.c:490 trailer.c:495 trailer.c:549 trailer.c:553
-#: trailer.c:557
+#: trailer.c:483 trailer.c:488 trailer.c:493 trailer.c:547 trailer.c:551
+#: trailer.c:555
#, c-format
msgid "unknown value '%s' for key '%s'"
msgstr "valor '%s' desconocido para la clave '%s'"
-#: trailer.c:539 trailer.c:544 builtin/remote.c:298 builtin/remote.c:323
+#: trailer.c:537 trailer.c:542 builtin/remote.c:299 builtin/remote.c:324
#, c-format
msgid "more than one %s"
msgstr "más de un %s"
-#: trailer.c:730
+#: trailer.c:728
#, c-format
msgid "empty trailer token in trailer '%.*s'"
msgstr "token de remolque vacío en el trailer '%.*s'"
-#: trailer.c:750
+#: trailer.c:748
#, c-format
msgid "could not read input file '%s'"
msgstr "no se pudo leer el archivo de entrada '%s'"
-#: trailer.c:753
+#: trailer.c:751 builtin/mktag.c:91
msgid "could not read from stdin"
msgstr "no se pudo leer desde stdin"
-#: trailer.c:1011 wrapper.c:673
+#: trailer.c:1009 wrapper.c:676
#, c-format
msgid "could not stat %s"
msgstr "no se pudo definir %s"
-#: trailer.c:1013
+#: trailer.c:1011
#, c-format
msgid "file %s is not a regular file"
msgstr "el archivo %s no es un archivo regular"
-#: trailer.c:1015
+#: trailer.c:1013
#, c-format
msgid "file %s is not writable by user"
msgstr "el archivo %s no puede ser escrito por el usuario"
-#: trailer.c:1027
+#: trailer.c:1025
msgid "could not open temporary file"
msgstr "no se pudo abrir el archivo temporal"
-#: trailer.c:1067
+#: trailer.c:1065
#, c-format
msgid "could not rename temporary file to %s"
msgstr "no se pudo renombrar el archivo temporal a %s"
@@ -8481,7 +8808,7 @@
msgid "error while running fast-import"
msgstr "error al ejecutar fast-import"
-#: transport-helper.c:549 transport-helper.c:1156
+#: transport-helper.c:549 transport-helper.c:1237
#, c-format
msgid "could not read ref %s"
msgstr "no se pudo leer la referencia %s"
@@ -8499,7 +8826,7 @@
msgid "invalid remote service path"
msgstr "ruta de servicio remoto inválida"
-#: transport-helper.c:661 transport.c:1347
+#: transport-helper.c:661 transport.c:1447
msgid "operation not supported by protocol"
msgstr "operación no soportada por protocolo"
@@ -8508,59 +8835,68 @@
msgid "can't connect to subservice %s"
msgstr "no se puede conectar al subservicio %s"
-#: transport-helper.c:740
+#: transport-helper.c:745
+msgid "'option' without a matching 'ok/error' directive"
+msgstr "'opción' sin una directiva correspondiente 'ok/error'"
+
+#: transport-helper.c:788
#, c-format
msgid "expected ok/error, helper said '%s'"
msgstr "se esperaba ok/error, helper dijo '%s'"
-#: transport-helper.c:793
+#: transport-helper.c:845
#, c-format
msgid "helper reported unexpected status of %s"
msgstr "helper reportó estado inesperado de %s"
-#: transport-helper.c:854
+#: transport-helper.c:928
#, c-format
msgid "helper %s does not support dry-run"
msgstr "helper %s no soporta dry-run"
-#: transport-helper.c:857
+#: transport-helper.c:931
#, c-format
msgid "helper %s does not support --signed"
msgstr "helper %s no soporta --signed"
-#: transport-helper.c:860
+#: transport-helper.c:934
#, c-format
msgid "helper %s does not support --signed=if-asked"
msgstr "helper %s no soporta --signed=if-asked"
-#: transport-helper.c:865
+#: transport-helper.c:939
#, c-format
msgid "helper %s does not support --atomic"
msgstr "helper %s no soporta --atomic"
-#: transport-helper.c:871
+#: transport-helper.c:943
+#, c-format
+msgid "helper %s does not support --%s"
+msgstr "helper %s no soporta --%s"
+
+#: transport-helper.c:950
#, c-format
msgid "helper %s does not support 'push-option'"
msgstr "helper %s no soporta 'push-option'"
-#: transport-helper.c:970
+#: transport-helper.c:1050
msgid "remote-helper doesn't support push; refspec needed"
msgstr "remote-helper no soporta push; se necesita refspec"
-#: transport-helper.c:975
+#: transport-helper.c:1055
#, c-format
msgid "helper %s does not support 'force'"
msgstr "helper %s no soporta 'force'"
-#: transport-helper.c:1022
+#: transport-helper.c:1102
msgid "couldn't run fast-export"
msgstr "no se pudo ejecutar fast-export"
-#: transport-helper.c:1027
+#: transport-helper.c:1107
msgid "error while running fast-export"
msgstr "error al ejecutar fast-export"
-#: transport-helper.c:1052
+#: transport-helper.c:1132
#, c-format
msgid ""
"No refs in common and none specified; doing nothing.\n"
@@ -8569,52 +8905,52 @@
"No hay refs comunes y ninguno especificado; no se hace nada.\n"
"Tal vez deberías especificar un branch.\n"
-#: transport-helper.c:1133
+#: transport-helper.c:1214
#, c-format
msgid "unsupported object format '%s'"
msgstr "formado de objeto no soportado '%s'"
-#: transport-helper.c:1142
+#: transport-helper.c:1223
#, c-format
msgid "malformed response in ref list: %s"
msgstr "respuesta malformada en lista de refs: %s"
-#: transport-helper.c:1294
+#: transport-helper.c:1375
#, c-format
msgid "read(%s) failed"
msgstr "leer(%s) falló"
-#: transport-helper.c:1321
+#: transport-helper.c:1402
#, c-format
msgid "write(%s) failed"
msgstr "escribir(%s) falló"
-#: transport-helper.c:1370
+#: transport-helper.c:1451
#, c-format
msgid "%s thread failed"
msgstr "hilo %s falló"
-#: transport-helper.c:1374
+#: transport-helper.c:1455
#, c-format
msgid "%s thread failed to join: %s"
msgstr "hilo %s falló al unirse: %s"
-#: transport-helper.c:1393 transport-helper.c:1397
+#: transport-helper.c:1474 transport-helper.c:1478
#, c-format
msgid "can't start thread for copying data: %s"
msgstr "no se puede iniciar el hilo para copiar data: %s"
-#: transport-helper.c:1434
+#: transport-helper.c:1515
#, c-format
msgid "%s process failed to wait"
msgstr "proceso %s falló al esperar"
-#: transport-helper.c:1438
+#: transport-helper.c:1519
#, c-format
msgid "%s process failed"
msgstr "proceso %s falló"
-#: transport-helper.c:1456 transport-helper.c:1465
+#: transport-helper.c:1537 transport-helper.c:1546
msgid "can't start thread for copying data"
msgstr "no se puede iniciar hilo para copiar data"
@@ -8633,37 +8969,37 @@
msgid "transport: invalid depth option '%s'"
msgstr "transport: opción inválida '%s'"
-#: transport.c:272
+#: transport.c:269
msgid "see protocol.version in 'git help config' for more details"
msgstr "ver protocol.version en 'git help config' para más información"
-#: transport.c:273
+#: transport.c:270
msgid "server options require protocol version 2 or later"
msgstr "opciones del servidor requieren protocolo versión 2 o posterior"
-#: transport.c:631
+#: transport.c:727
msgid "could not parse transport.color.* config"
msgstr "no se pudo analizar valor de configuración transport.color.*"
-#: transport.c:704
+#: transport.c:802
msgid "support for protocol v2 not implemented yet"
msgstr "soporte para protocolo v2 no implementado todavía"
-#: transport.c:838
+#: transport.c:936
#, c-format
msgid "unknown value for config '%s': %s"
msgstr "valor desconocido para configuración '%s': %s"
-#: transport.c:904
+#: transport.c:1002
#, c-format
msgid "transport '%s' not allowed"
msgstr "transporte '%s' no permitido"
-#: transport.c:957
+#: transport.c:1055
msgid "git-over-rsync is no longer supported"
msgstr "git-over-rsync ya no es soportado"
-#: transport.c:1059
+#: transport.c:1157
#, c-format
msgid ""
"The following submodule paths contain changes that can\n"
@@ -8672,7 +9008,7 @@
"La siguiente ruta de submódulo contiene cambios que no\n"
"pueden ser encontrados en ningún remoto:\n"
-#: transport.c:1063
+#: transport.c:1161
#, c-format
msgid ""
"\n"
@@ -8699,27 +9035,27 @@
"para hacer un push al remoto.\n"
"\n"
-#: transport.c:1071
+#: transport.c:1169
msgid "Aborting."
msgstr "Abortando."
-#: transport.c:1216
+#: transport.c:1316
msgid "failed to push all needed submodules"
msgstr "falló al hacer push a todos los submódulos necesarios"
-#: tree-walk.c:32
+#: tree-walk.c:33
msgid "too-short tree object"
msgstr "objeto de árbol muy corto"
-#: tree-walk.c:38
+#: tree-walk.c:39
msgid "malformed mode in tree entry"
msgstr "modo mal formado en la entrada de árbol"
-#: tree-walk.c:42
+#: tree-walk.c:43
msgid "empty filename in tree entry"
msgstr "nombre de archivo vacío en la entrada de árbol"
-#: tree-walk.c:117
+#: tree-walk.c:118
msgid "too-short tree file"
msgstr "archivo de árbol muy corto"
@@ -8992,7 +9328,7 @@
msgid "Updating index flags"
msgstr "Actualizando flags del index"
-#: upload-pack.c:1415
+#: upload-pack.c:1543
msgid "expected flush after fetch arguments"
msgstr "se espera flush tras argumentos fetch"
@@ -9029,50 +9365,118 @@
msgid "Fetching objects"
msgstr "Haciendo fetch a objetos"
-#: worktree.c:248 builtin/am.c:2098
+#: worktree.c:238 builtin/am.c:2103
#, c-format
msgid "failed to read '%s'"
msgstr "falló al leer '%s'"
-#: worktree.c:295
+#: worktree.c:304
#, c-format
msgid "'%s' at main working tree is not the repository directory"
msgstr ""
"'%s' en el árbol de trabajo principal no es el directorio del repositorio"
-#: worktree.c:306
+#: worktree.c:315
#, c-format
msgid "'%s' file does not contain absolute path to the working tree location"
msgstr ""
"archivo '%s' no contiene una ruta absoluta a la ubicación del árbol de "
"trabajo"
-#: worktree.c:318
+#: worktree.c:327
#, c-format
msgid "'%s' does not exist"
msgstr "'%s' no existe"
-#: worktree.c:324
+#: worktree.c:333
#, c-format
msgid "'%s' is not a .git file, error code %d"
msgstr "'%s' no es un archivo .git, código de error %d"
-#: worktree.c:333
+#: worktree.c:342
#, c-format
msgid "'%s' does not point back to '%s'"
msgstr "'%s' no apunta de vuelta a '%s'"
-#: wrapper.c:194 wrapper.c:364
+#: worktree.c:608
+msgid "not a directory"
+msgstr "no es un directorio"
+
+#: worktree.c:617
+msgid ".git is not a file"
+msgstr ".git no es un archivo"
+
+#: worktree.c:619
+msgid ".git file broken"
+msgstr "archivo .git roto"
+
+#: worktree.c:621
+msgid ".git file incorrect"
+msgstr "archivo .git incorrecto"
+
+#: worktree.c:727
+msgid "not a valid path"
+msgstr "no es una ruta válida"
+
+#: worktree.c:733
+msgid "unable to locate repository; .git is not a file"
+msgstr "no es posible ubicar el repositorio; .git no es un archivo"
+
+#: worktree.c:737
+msgid "unable to locate repository; .git file does not reference a repository"
+msgstr ""
+"incapaz de localizar el repositorio; El archivo .git no hace referencia a un "
+"repositorio"
+
+#: worktree.c:741
+msgid "unable to locate repository; .git file broken"
+msgstr "no es posible ubicar el repositorio; archivo .git roto"
+
+#: worktree.c:747
+msgid "gitdir unreadable"
+msgstr "gitdir ilegible"
+
+#: worktree.c:751
+msgid "gitdir incorrect"
+msgstr "gitdir incorrecto"
+
+#: worktree.c:776
+msgid "not a valid directory"
+msgstr "no en un directorio válido"
+
+#: worktree.c:782
+msgid "gitdir file does not exist"
+msgstr "archivo gitdir no existe"
+
+#: worktree.c:787 worktree.c:796
+#, c-format
+msgid "unable to read gitdir file (%s)"
+msgstr "no es posible leer archivo gitdir (%s)"
+
+#: worktree.c:806
+#, c-format
+msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
+msgstr "lectura corta (se esperaba %<PRIuMAX> bytes, se leyó %<PRIuMAX>)"
+
+#: worktree.c:814
+msgid "invalid gitdir file"
+msgstr "archivo gitdir inválido"
+
+#: worktree.c:822
+msgid "gitdir file points to non-existent location"
+msgstr "archivo gitdir apunta a una ubicación inexistente"
+
+#: wrapper.c:197 wrapper.c:367
#, c-format
msgid "could not open '%s' for reading and writing"
msgstr "no se pudo abrir '%s' para lectura y escritura"
-#: wrapper.c:395 wrapper.c:596
+#: wrapper.c:398 wrapper.c:599
#, c-format
msgid "unable to access '%s'"
msgstr "no es posible acceder '%s'"
-#: wrapper.c:604
+#: wrapper.c:607
msgid "unable to get current working directory"
msgstr "no es posible obtener el directorio de trabajo actual"
@@ -9148,79 +9552,79 @@
msgstr ""
" (usa \"git %s <archivo>...\" para incluirlo a lo que se será confirmado)"
-#: wt-status.c:268
+#: wt-status.c:266
msgid "both deleted:"
msgstr "ambos borrados:"
-#: wt-status.c:270
+#: wt-status.c:268
msgid "added by us:"
msgstr "agregado por nosotros:"
-#: wt-status.c:272
+#: wt-status.c:270
msgid "deleted by them:"
msgstr "borrados por ellos:"
-#: wt-status.c:274
+#: wt-status.c:272
msgid "added by them:"
msgstr "agregado por ellos:"
-#: wt-status.c:276
+#: wt-status.c:274
msgid "deleted by us:"
msgstr "borrado por nosotros:"
-#: wt-status.c:278
+#: wt-status.c:276
msgid "both added:"
msgstr "ambos agregados:"
-#: wt-status.c:280
+#: wt-status.c:278
msgid "both modified:"
msgstr "ambos modificados:"
-#: wt-status.c:290
+#: wt-status.c:288
msgid "new file:"
msgstr "nuevo archivo:"
-#: wt-status.c:292
+#: wt-status.c:290
msgid "copied:"
msgstr "copiado:"
-#: wt-status.c:294
+#: wt-status.c:292
msgid "deleted:"
msgstr "borrado:"
-#: wt-status.c:296
+#: wt-status.c:294
msgid "modified:"
msgstr "modificado:"
-#: wt-status.c:298
+#: wt-status.c:296
msgid "renamed:"
msgstr "renombrado:"
-#: wt-status.c:300
+#: wt-status.c:298
msgid "typechange:"
msgstr "cambio de tipo:"
-#: wt-status.c:302
+#: wt-status.c:300
msgid "unknown:"
msgstr "desconocido:"
-#: wt-status.c:304
+#: wt-status.c:302
msgid "unmerged:"
msgstr "des-fusionado:"
-#: wt-status.c:384
+#: wt-status.c:382
msgid "new commits, "
msgstr "nuevos commits, "
-#: wt-status.c:386
+#: wt-status.c:384
msgid "modified content, "
msgstr "contenido modificado, "
-#: wt-status.c:388
+#: wt-status.c:386
msgid "untracked content, "
msgstr "contenido no rastreado, "
-#: wt-status.c:904
+#: wt-status.c:905
#, c-format
msgid "Your stash currently has %d entry"
msgid_plural "Your stash currently has %d entries"
@@ -9484,6 +9888,14 @@
msgid "rebase in progress; onto "
msgstr "rebase en progreso; en "
+#: wt-status.c:1747
+msgid "HEAD detached at "
+msgstr "HEAD desacoplada en "
+
+#: wt-status.c:1749
+msgid "HEAD detached from "
+msgstr "HEAD desacoplada de "
+
#: wt-status.c:1752
msgid "Not currently on any branch."
msgstr "Actualmente no estás en ninguna rama."
@@ -9534,12 +9946,12 @@
msgstr ""
"sin cambios agregados al commit (usa \"git add\" y/o \"git commit -a\")\n"
-#: wt-status.c:1812
+#: wt-status.c:1813
#, c-format
msgid "no changes added to commit\n"
msgstr "no se agregaron cambios al commit\n"
-#: wt-status.c:1815
+#: wt-status.c:1817
#, c-format
msgid ""
"nothing added to commit but untracked files present (use \"git add\" to "
@@ -9548,72 +9960,72 @@
"no hay nada agregado al commit pero hay archivos sin seguimiento presentes "
"(usa \"git add\" para hacerles seguimiento)\n"
-#: wt-status.c:1818
+#: wt-status.c:1821
#, c-format
msgid "nothing added to commit but untracked files present\n"
msgstr ""
"no hay nada agregado para confirmar, pero hay archivos sin seguimiento "
"presentes\n"
-#: wt-status.c:1821
+#: wt-status.c:1825
#, c-format
msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
msgstr ""
"no hay nada para confirmar (crea/copia archivos y usa \"git add\" para "
"hacerles seguimiento)\n"
-#: wt-status.c:1824 wt-status.c:1829
+#: wt-status.c:1829 wt-status.c:1835
#, c-format
msgid "nothing to commit\n"
msgstr "nada para hacer commit\n"
-#: wt-status.c:1827
+#: wt-status.c:1832
#, c-format
msgid "nothing to commit (use -u to show untracked files)\n"
msgstr ""
"nada para hacer commit (usa -u para mostrar los archivos no rastreados)\n"
-#: wt-status.c:1831
+#: wt-status.c:1837
#, c-format
msgid "nothing to commit, working tree clean\n"
msgstr "nada para hacer commit, el árbol de trabajo está limpio\n"
-#: wt-status.c:1944
+#: wt-status.c:1942
msgid "No commits yet on "
msgstr "No hay commits todavía en "
-#: wt-status.c:1948
+#: wt-status.c:1946
msgid "HEAD (no branch)"
msgstr "HEAD (sin rama)"
-#: wt-status.c:1979
+#: wt-status.c:1977
msgid "different"
msgstr "diferente"
-#: wt-status.c:1981 wt-status.c:1989
+#: wt-status.c:1979 wt-status.c:1987
msgid "behind "
msgstr "detrás "
-#: wt-status.c:1984 wt-status.c:1987
+#: wt-status.c:1982 wt-status.c:1985
msgid "ahead "
msgstr "adelante "
#. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2509
+#: wt-status.c:2507
#, c-format
msgid "cannot %s: You have unstaged changes."
msgstr "no se puede %s: Tienes cambios sin marcar."
-#: wt-status.c:2515
+#: wt-status.c:2513
msgid "additionally, your index contains uncommitted changes."
msgstr "adicionalmente, tu índice contiene cambios que no están en un commit."
-#: wt-status.c:2517
+#: wt-status.c:2515
#, c-format
msgid "cannot %s: Your index contains uncommitted changes."
msgstr "no se puede %s: Tu índice contiene cambios que no están en un commit."
-#: compat/precompose_utf8.c:58 builtin/clone.c:456
+#: compat/precompose_utf8.c:58 builtin/clone.c:457
#, c-format
msgid "failed to unlink '%s'"
msgstr "falló al desvincular '%s'"
@@ -9622,128 +10034,133 @@
msgid "git add [<options>] [--] <pathspec>..."
msgstr "git add [<opción>] [--] <especificación-de-ruta>..."
-#: builtin/add.c:88
+#: builtin/add.c:58
+#, c-format
+msgid "cannot chmod %cx '%s'"
+msgstr "no se puede aplicar chmod %cx '%s'"
+
+#: builtin/add.c:96
#, c-format
msgid "unexpected diff status %c"
msgstr "diff status inesperado %c"
-#: builtin/add.c:93 builtin/commit.c:285
+#: builtin/add.c:101 builtin/commit.c:285
msgid "updating files failed"
msgstr "falló la actualización de carpetas"
-#: builtin/add.c:103
+#: builtin/add.c:111
#, c-format
msgid "remove '%s'\n"
msgstr "eliminar '%s'\n"
-#: builtin/add.c:178
+#: builtin/add.c:186
msgid "Unstaged changes after refreshing the index:"
msgstr "Cambios fuera del área de stage tras refrescar el índice:"
-#: builtin/add.c:266 builtin/rev-parse.c:904
+#: builtin/add.c:280 builtin/rev-parse.c:991
msgid "Could not read the index"
msgstr "No se pudo leer el índice"
-#: builtin/add.c:277
+#: builtin/add.c:291
#, c-format
msgid "Could not open '%s' for writing."
msgstr "No se pudo abrir '%s' para escritura."
-#: builtin/add.c:281
+#: builtin/add.c:295
msgid "Could not write patch"
msgstr "No se puede escribir el parche"
-#: builtin/add.c:284
+#: builtin/add.c:298
msgid "editing patch failed"
msgstr "falló la edición del parche"
-#: builtin/add.c:287
+#: builtin/add.c:301
#, c-format
msgid "Could not stat '%s'"
msgstr "No se pudo definir '%s'"
-#: builtin/add.c:289
+#: builtin/add.c:303
msgid "Empty patch. Aborted."
msgstr "Parche vacío. Abortado."
-#: builtin/add.c:294
+#: builtin/add.c:308
#, c-format
msgid "Could not apply '%s'"
msgstr "No se pudo aplicar '%s'"
-#: builtin/add.c:302
+#: builtin/add.c:316
msgid "The following paths are ignored by one of your .gitignore files:\n"
msgstr ""
"Las siguientes rutas son ignoradas por uno de tus archivos .gitignore:\n"
-#: builtin/add.c:322 builtin/clean.c:904 builtin/fetch.c:164 builtin/mv.c:124
-#: builtin/prune-packed.c:14 builtin/pull.c:204 builtin/push.c:548
-#: builtin/remote.c:1421 builtin/rm.c:242 builtin/send-pack.c:165
+#: builtin/add.c:336 builtin/clean.c:904 builtin/fetch.c:169 builtin/mv.c:124
+#: builtin/prune-packed.c:14 builtin/pull.c:204 builtin/push.c:559
+#: builtin/remote.c:1427 builtin/rm.c:242 builtin/send-pack.c:190
msgid "dry run"
msgstr "dry run ( ejecución en seco)"
-#: builtin/add.c:325
+#: builtin/add.c:339
msgid "interactive picking"
msgstr "selección interactiva"
-#: builtin/add.c:326 builtin/checkout.c:1533 builtin/reset.c:308
+#: builtin/add.c:340 builtin/checkout.c:1546 builtin/reset.c:308
msgid "select hunks interactively"
msgstr "elegir hunks de forma interactiva"
-#: builtin/add.c:327
+#: builtin/add.c:341
msgid "edit current diff and apply"
msgstr "editar diff actual y aplicar"
-#: builtin/add.c:328
+#: builtin/add.c:342
msgid "allow adding otherwise ignored files"
msgstr "permitir agregar caso contrario ignorar archivos"
-#: builtin/add.c:329
+#: builtin/add.c:343
msgid "update tracked files"
msgstr "actualizado las carpetas rastreadas"
-#: builtin/add.c:330
+#: builtin/add.c:344
msgid "renormalize EOL of tracked files (implies -u)"
msgstr "renormalizar EOL de los archivos rastreados (implica -u)"
-#: builtin/add.c:331
+#: builtin/add.c:345
msgid "record only the fact that the path will be added later"
msgstr "grabar solo el hecho de que la ruta será agregada después"
-#: builtin/add.c:332
+#: builtin/add.c:346
msgid "add changes from all tracked and untracked files"
msgstr "agregar los cambios de todas las carpetas con y sin seguimiento"
-#: builtin/add.c:335
+#: builtin/add.c:349
msgid "ignore paths removed in the working tree (same as --no-all)"
msgstr ""
"ignorar rutas eliminadas en el árbol de trabajo (lo mismo que --no-all)"
-#: builtin/add.c:337
+#: builtin/add.c:351
msgid "don't add, only refresh the index"
msgstr "no agregar, solo actualizar el índice"
-#: builtin/add.c:338
+#: builtin/add.c:352
msgid "just skip files which cannot be added because of errors"
msgstr "saltar las carpetas que no pueden ser agregadas a causa de errores"
-#: builtin/add.c:339
+#: builtin/add.c:353
msgid "check if - even missing - files are ignored in dry run"
msgstr "comprobar si - incluso los archivos que faltan - se ignoran en dry run"
-#: builtin/add.c:341 builtin/update-index.c:1004
+#: builtin/add.c:355 builtin/update-index.c:1004
msgid "override the executable bit of the listed files"
msgstr "sobrescribir el bit ejecutable de los archivos listados"
-#: builtin/add.c:343
+#: builtin/add.c:357
msgid "warn when adding an embedded repository"
msgstr "avisar cuando se agrega un repositorio incrustado"
-#: builtin/add.c:345
+#: builtin/add.c:359
msgid "backend for `git stash -p`"
msgstr "backend para `git stash -p`"
-#: builtin/add.c:363
+#: builtin/add.c:377
#, c-format
msgid ""
"You've added another git repository inside your current repository.\n"
@@ -9774,12 +10191,12 @@
"\n"
"Vea \"git help submodule\" para más información."
-#: builtin/add.c:391
+#: builtin/add.c:405
#, c-format
msgid "adding embedded git repository: %s"
msgstr "agregando repositorio embebido: %s"
-#: builtin/add.c:410
+#: builtin/add.c:424
msgid ""
"Use -f if you really want to add them.\n"
"Turn this message off by running\n"
@@ -9789,47 +10206,47 @@
"Desactiva este mensaje ejecutando\n"
"\"git config advice.addIgnoredFile false\""
-#: builtin/add.c:419
+#: builtin/add.c:433
msgid "adding files failed"
msgstr "falló al agregar archivos"
-#: builtin/add.c:447 builtin/commit.c:345
+#: builtin/add.c:461 builtin/commit.c:345
msgid "--pathspec-from-file is incompatible with --interactive/--patch"
msgstr "--pathspec-from-file es incompatible con --interactive/--patch"
-#: builtin/add.c:464
+#: builtin/add.c:478
msgid "--pathspec-from-file is incompatible with --edit"
msgstr "--pathspec-from-file es incompatible con --edit"
-#: builtin/add.c:476
+#: builtin/add.c:490
msgid "-A and -u are mutually incompatible"
msgstr "-A y -u son mutuamente incompatibles"
-#: builtin/add.c:479
+#: builtin/add.c:493
msgid "Option --ignore-missing can only be used together with --dry-run"
msgstr "Opción --ignore-missing solo puede ser usada junto a --dry-run"
-#: builtin/add.c:483
+#: builtin/add.c:497
#, c-format
msgid "--chmod param '%s' must be either -x or +x"
msgstr "El parámetro '%s' para --chmod debe ser -x ó +x"
-#: builtin/add.c:501 builtin/checkout.c:1701 builtin/commit.c:351
-#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1506
+#: builtin/add.c:515 builtin/checkout.c:1714 builtin/commit.c:351
+#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1569
msgid "--pathspec-from-file is incompatible with pathspec arguments"
msgstr "--pathspec-from-file es incompatible con argumentos de pathspec"
-#: builtin/add.c:508 builtin/checkout.c:1713 builtin/commit.c:357
-#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1512
+#: builtin/add.c:522 builtin/checkout.c:1726 builtin/commit.c:357
+#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1575
msgid "--pathspec-file-nul requires --pathspec-from-file"
msgstr "--pathspec-file-nul requiere --pathspec-from-file"
-#: builtin/add.c:512
+#: builtin/add.c:526
#, c-format
msgid "Nothing specified, nothing added.\n"
msgstr "Nada especificado, nada agregado.\n"
-#: builtin/add.c:514
+#: builtin/add.c:528
msgid ""
"Maybe you wanted to say 'git add .'?\n"
"Turn this message off by running\n"
@@ -9887,7 +10304,7 @@
msgid "Patch format detection failed."
msgstr "Falló al detectar el formato del parche."
-#: builtin/am.c:953 builtin/clone.c:409
+#: builtin/am.c:953 builtin/clone.c:410
#, c-format
msgid "failed to create directory '%s'"
msgstr "falló al crear el directorio '%s'"
@@ -9963,12 +10380,12 @@
msgid "applying to an empty history"
msgstr "aplicando a un historial vacío"
-#: builtin/am.c:1621 builtin/am.c:1625
+#: builtin/am.c:1626 builtin/am.c:1630
#, c-format
msgid "cannot resume: %s does not exist."
msgstr "no se puede continuar: %s no existe."
-#: builtin/am.c:1643
+#: builtin/am.c:1648
msgid "Commit Body is:"
msgstr "Cuerpo de commit es:"
@@ -9976,39 +10393,39 @@
#. in your translation. The program will only accept English
#. input at this point.
#.
-#: builtin/am.c:1653
+#: builtin/am.c:1658
#, c-format
msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
msgstr "¿Aplicar? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
-#: builtin/am.c:1699 builtin/commit.c:395
+#: builtin/am.c:1704 builtin/commit.c:395
msgid "unable to write index file"
msgstr "no es posible escribir en el archivo índice"
-#: builtin/am.c:1703
+#: builtin/am.c:1708
#, c-format
msgid "Dirty index: cannot apply patches (dirty: %s)"
msgstr "Índice sucio: no se puede aplicar parches (sucio: %s)"
-#: builtin/am.c:1743 builtin/am.c:1811
+#: builtin/am.c:1748 builtin/am.c:1816
#, c-format
msgid "Applying: %.*s"
msgstr "Aplicando: %.*s"
-#: builtin/am.c:1760
+#: builtin/am.c:1765
msgid "No changes -- Patch already applied."
msgstr "Sin cambios -- parche ya aplicado."
-#: builtin/am.c:1766
+#: builtin/am.c:1771
#, c-format
msgid "Patch failed at %s %.*s"
msgstr "El parche falló en %s %.*s"
-#: builtin/am.c:1770
+#: builtin/am.c:1775
msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
msgstr "Use 'git am --show-current-patch=diff' para ver el parche fallido"
-#: builtin/am.c:1814
+#: builtin/am.c:1819
msgid ""
"No changes - did you forget to use 'git add'?\n"
"If there is nothing left to stage, chances are that something else\n"
@@ -10018,7 +10435,7 @@
"Si no hay nada en el área de stage, las posibilidad es que algo mas\n"
"ya haya introducido el mismo cambio; tal vez quieras omitir este parche."
-#: builtin/am.c:1821
+#: builtin/am.c:1826
msgid ""
"You still have unmerged paths in your index.\n"
"You should 'git add' each file with resolved conflicts to mark them as "
@@ -10031,17 +10448,17 @@
"Se puede ejecutar `git rm` en el archivo para aceptar \"borrado por ellos\" "
"en él."
-#: builtin/am.c:1928 builtin/am.c:1932 builtin/am.c:1944 builtin/reset.c:347
+#: builtin/am.c:1933 builtin/am.c:1937 builtin/am.c:1949 builtin/reset.c:347
#: builtin/reset.c:355
#, c-format
msgid "Could not parse object '%s'."
msgstr "No se pudo analizar el objeto '%s'."
-#: builtin/am.c:1980
+#: builtin/am.c:1985
msgid "failed to clean index"
msgstr "falló al limpiar el índice"
-#: builtin/am.c:2024
+#: builtin/am.c:2029
msgid ""
"You seem to have moved HEAD since the last 'am' failure.\n"
"Not rewinding to ORIG_HEAD"
@@ -10049,156 +10466,156 @@
"Parece haber movido HEAD desde el último falló 'am'.\n"
"No rebobinando a ORIG_HEAD"
-#: builtin/am.c:2131
+#: builtin/am.c:2136
#, c-format
msgid "Invalid value for --patch-format: %s"
msgstr "Valor inválido para --patch-format: %s"
-#: builtin/am.c:2171
+#: builtin/am.c:2178
#, c-format
msgid "Invalid value for --show-current-patch: %s"
msgstr "Valor inválido para --show-current-patch: %s"
-#: builtin/am.c:2175
+#: builtin/am.c:2182
#, c-format
msgid "--show-current-patch=%s is incompatible with --show-current-patch=%s"
msgstr "--show-current-patch=%s es incompatible con --show-current-patch=%s"
-#: builtin/am.c:2206
+#: builtin/am.c:2213
msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
msgstr "git am [<opciones>] [(<mbox> | <Directorio-de-correo>)...]"
-#: builtin/am.c:2207
+#: builtin/am.c:2214
msgid "git am [<options>] (--continue | --skip | --abort)"
msgstr "git am [<opciones>] (--continue | --skip | --abort)"
-#: builtin/am.c:2213
+#: builtin/am.c:2220
msgid "run interactively"
msgstr "ejecutar de manera interactiva"
-#: builtin/am.c:2215
+#: builtin/am.c:2222
msgid "historical option -- no-op"
msgstr "opción histórica -- no-op"
-#: builtin/am.c:2217
+#: builtin/am.c:2224
msgid "allow fall back on 3way merging if needed"
msgstr "permitir retroceso en fusión de 3-vías si es necesario"
-#: builtin/am.c:2218 builtin/init-db.c:559 builtin/prune-packed.c:16
-#: builtin/repack.c:306 builtin/stash.c:816
+#: builtin/am.c:2225 builtin/init-db.c:560 builtin/prune-packed.c:16
+#: builtin/repack.c:334 builtin/stash.c:882
msgid "be quiet"
msgstr "ser silencioso"
-#: builtin/am.c:2220
-msgid "add a Signed-off-by line to the commit message"
+#: builtin/am.c:2227
+msgid "add a Signed-off-by trailer to the commit message"
msgstr "agregar una línea \"Firmado-por\" al mensaje del commit"
-#: builtin/am.c:2223
+#: builtin/am.c:2230
msgid "recode into utf8 (default)"
msgstr "recodificar en utf8 (default)"
-#: builtin/am.c:2225
+#: builtin/am.c:2232
msgid "pass -k flag to git-mailinfo"
msgstr "pasar flag -k a git-mailinfo"
-#: builtin/am.c:2227
+#: builtin/am.c:2234
msgid "pass -b flag to git-mailinfo"
msgstr "pasar flag -b a git-mailinfo"
-#: builtin/am.c:2229
+#: builtin/am.c:2236
msgid "pass -m flag to git-mailinfo"
msgstr "pasar flag -m a git-mailinfo"
-#: builtin/am.c:2231
+#: builtin/am.c:2238
msgid "pass --keep-cr flag to git-mailsplit for mbox format"
msgstr "pasar flag --keep-cr a git-mailsplit para formato mbox"
-#: builtin/am.c:2234
+#: builtin/am.c:2241
msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
msgstr ""
"no pasar flag --keep-cr a git-mailsplit independientemente de am.keepcr"
-#: builtin/am.c:2237
+#: builtin/am.c:2244
msgid "strip everything before a scissors line"
msgstr "descubrir todo antes de una línea de tijeras"
-#: builtin/am.c:2239 builtin/am.c:2242 builtin/am.c:2245 builtin/am.c:2248
-#: builtin/am.c:2251 builtin/am.c:2254 builtin/am.c:2257 builtin/am.c:2260
-#: builtin/am.c:2266
+#: 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:2267
+#: builtin/am.c:2273
msgid "pass it through git-apply"
msgstr "pasarlo a través de git-apply"
-#: builtin/am.c:2256 builtin/commit.c:1397 builtin/fmt-merge-msg.c:17
-#: builtin/fmt-merge-msg.c:20 builtin/grep.c:891 builtin/merge.c:252
+#: builtin/am.c:2263 builtin/commit.c:1395 builtin/fmt-merge-msg.c:17
+#: builtin/fmt-merge-msg.c:20 builtin/grep.c:904 builtin/merge.c:261
#: builtin/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
-#: builtin/rebase.c:1329 builtin/repack.c:317 builtin/repack.c:321
-#: builtin/repack.c:323 builtin/show-branch.c:650 builtin/show-ref.c:172
-#: builtin/tag.c:404 parse-options.h:154 parse-options.h:175
+#: builtin/rebase.c:1347 builtin/repack.c:345 builtin/repack.c:349
+#: builtin/repack.c:351 builtin/show-branch.c:650 builtin/show-ref.c:172
+#: builtin/tag.c:436 parse-options.h:154 parse-options.h:175
#: parse-options.h:316
msgid "n"
msgstr "n"
-#: builtin/am.c:2262 builtin/branch.c:659 builtin/for-each-ref.c:38
-#: builtin/replace.c:556 builtin/tag.c:438 builtin/verify-tag.c:38
-#: bugreport.c:137
+#: builtin/am.c:2269 builtin/branch.c:670 builtin/bugreport.c:136
+#: builtin/for-each-ref.c:38 builtin/replace.c:556 builtin/tag.c:470
+#: builtin/verify-tag.c:38
msgid "format"
msgstr "formato"
-#: builtin/am.c:2263
+#: builtin/am.c:2270
msgid "format the patch(es) are in"
msgstr "formatear el parche(s)"
-#: builtin/am.c:2269
+#: builtin/am.c:2276
msgid "override error message when patch failure occurs"
msgstr "sobrescribir mensajes de error cuando fallos de parchado ocurran"
-#: builtin/am.c:2271
+#: builtin/am.c:2278
msgid "continue applying patches after resolving a conflict"
msgstr "continuar aplicando los parches tras resolver conflictos"
-#: builtin/am.c:2274
+#: builtin/am.c:2281
msgid "synonyms for --continue"
msgstr "sinónimos para --continue"
-#: builtin/am.c:2277
+#: builtin/am.c:2284
msgid "skip the current patch"
msgstr "saltar el parche actual"
-#: builtin/am.c:2280
-msgid "restore the original branch and abort the patching operation."
-msgstr "restaurar la rama original y abortar la operación de parchado."
-
-#: builtin/am.c:2283
-msgid "abort the patching operation but keep HEAD where it is."
-msgstr "abortar la operación de parchado pero mantener HEAD donde está."
-
#: builtin/am.c:2287
+msgid "restore the original branch and abort the patching operation"
+msgstr "restaurar la rama original y abortar la operación de parcheo"
+
+#: builtin/am.c:2290
+msgid "abort the patching operation but keep HEAD where it is"
+msgstr "abortar la operación de parcheo pero mantener HEAD donde está"
+
+#: builtin/am.c:2294
msgid "show the patch being applied"
msgstr "muestra el parche siendo aplicado"
-#: builtin/am.c:2292
+#: builtin/am.c:2299
msgid "lie about committer date"
msgstr "mentir sobre la fecha del committer"
-#: builtin/am.c:2294
+#: builtin/am.c:2301
msgid "use current timestamp for author date"
msgstr "usar el timestamp actual para la fecha del autor"
-#: builtin/am.c:2296 builtin/commit-tree.c:120 builtin/commit.c:1517
-#: builtin/merge.c:289 builtin/pull.c:175 builtin/rebase.c:524
-#: builtin/rebase.c:1380 builtin/revert.c:117 builtin/tag.c:419
+#: builtin/am.c:2303 builtin/commit-tree.c:120 builtin/commit.c:1515
+#: builtin/merge.c:298 builtin/pull.c:175 builtin/rebase.c:538
+#: builtin/rebase.c:1400 builtin/revert.c:117 builtin/tag.c:451
msgid "key-id"
msgstr "key-id"
-#: builtin/am.c:2297 builtin/rebase.c:525 builtin/rebase.c:1381
+#: builtin/am.c:2304 builtin/rebase.c:539 builtin/rebase.c:1401
msgid "GPG-sign commits"
msgstr "Commits con firma GPG"
-#: builtin/am.c:2300
+#: builtin/am.c:2307
msgid "(internal use for git-rebase)"
msgstr "(uso interno para git-rebase)"
-#: builtin/am.c:2318
+#: builtin/am.c:2325
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."
@@ -10206,16 +10623,16 @@
"La opción -b/--binary ha estado deshabilitada por mucho tiempo, y\n"
"será eliminada. Por favor no la use más."
-#: builtin/am.c:2325
+#: builtin/am.c:2332
msgid "failed to read the index"
msgstr "falló al leer el índice"
-#: builtin/am.c:2340
+#: builtin/am.c:2347
#, c-format
msgid "previous rebase directory %s still exists but mbox given."
msgstr "directorio de rebase previo %s todavía existe en el mbox dado."
-#: builtin/am.c:2364
+#: builtin/am.c:2371
#, c-format
msgid ""
"Stray %s directory found.\n"
@@ -10224,11 +10641,11 @@
"Directorio extraviado %s encontrado.\n"
"Use \"git am --abort\" para borrarlo."
-#: builtin/am.c:2370
+#: builtin/am.c:2377
msgid "Resolve operation not in progress, we are not resuming."
msgstr "Operación de resolución no está en progreso, no vamos a continuar."
-#: builtin/am.c:2380
+#: builtin/am.c:2387
msgid "interactive mode requires patches on the command line"
msgstr "modo interactivo requiere parches en la línea de comando"
@@ -10266,43 +10683,15 @@
msgid "git archive: expected a flush"
msgstr "git archive: se esperaba un flush"
-#: builtin/bisect--helper.c:22
-msgid "git bisect--helper --next-all [--no-checkout]"
-msgstr "git bisect--helper --next-all [--no-checkout]"
-
#: builtin/bisect--helper.c:23
-msgid "git bisect--helper --write-terms <bad_term> <good_term>"
-msgstr "git bisect--helper --write-terms <mal_término> <buen_término>"
-
-#: builtin/bisect--helper.c:24
-msgid "git bisect--helper --bisect-clean-state"
-msgstr "git bisect--helper --bisect-clean-state"
-
-#: builtin/bisect--helper.c:25
msgid "git bisect--helper --bisect-reset [<commit>]"
msgstr "git bisect--helper --bisect-reset [<commit>]"
-#: builtin/bisect--helper.c:26
-msgid ""
-"git bisect--helper --bisect-write [--no-log] <state> <revision> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-write [--no-log] <estado> <revision> <buen_term> "
-"<mal_term>"
-
-#: builtin/bisect--helper.c:27
-msgid ""
-"git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-check-and-set-terms <comando> <buen_term> "
-"<mal_term>"
-
-#: builtin/bisect--helper.c:28
+#: builtin/bisect--helper.c:24
msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
msgstr "git bisect--helper --bisect-next-check <buen_term> <mal_term> [<term>]"
-#: builtin/bisect--helper.c:29
+#: builtin/bisect--helper.c:25
msgid ""
"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
"term-new]"
@@ -10310,48 +10699,76 @@
"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
"term-new]"
+#: builtin/bisect--helper.c:26
+msgid ""
+"git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
+"=<term>] [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] "
+"[<paths>...]"
+msgstr ""
+"git bisect--helper --bisect-start [--term-{new,bad}=<término> --term-{old,"
+"good}=<término>] [--no-checkout] [--first-parent] [<malo> [<bueno>...]] [--] "
+"[<rutas>...]"
+
+#: builtin/bisect--helper.c:28
+msgid "git bisect--helper --bisect-next"
+msgstr "git bisect--helper --bisect-next"
+
+#: builtin/bisect--helper.c:29
+msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
+msgstr "git bisect--helper --bisect-state (bad|new) [<rev>]"
+
#: builtin/bisect--helper.c:30
-msgid ""
-"git bisect--helper --bisect-start [--term-{old,good}=<term> --term-{new,bad}"
-"=<term>][--no-checkout] [<bad> [<good>...]] [--] [<paths>...]"
-msgstr ""
-"git bisect--helper --bisect-start [--term-{old,good}=<término> --term-{new,"
-"bad}=<término>][--no-checkout] [<malo> [<bueno>...]] [--] [<rutas>...]"
+msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
+msgstr "git bisect--helper --bisect-state (good|old) [<rev>...]"
-#: builtin/bisect--helper.c:86
+#: builtin/bisect--helper.c:31
+msgid "git bisect--helper --bisect-replay <filename>"
+msgstr "git bisect--helper --bisect-replay <archivio>"
+
+#: builtin/bisect--helper.c:32
+msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
+msgstr "git bisect--helper --bisect-skip [(<rev>|<rango>)...]"
+
+#: builtin/bisect--helper.c:107
+#, c-format
+msgid "cannot open file '%s' in mode '%s'"
+msgstr "no se puede abrir archivo '%s' en modo '%s'"
+
+#: builtin/bisect--helper.c:114
+#, c-format
+msgid "could not write to file '%s'"
+msgstr "no se pudo escribir al archivo '%s'"
+
+#: builtin/bisect--helper.c:153
#, c-format
msgid "'%s' is not a valid term"
msgstr "'%s' no es un término válido"
-#: builtin/bisect--helper.c:90
+#: builtin/bisect--helper.c:157
#, c-format
msgid "can't use the builtin command '%s' as a term"
msgstr "no se puede usar el comando nativo '%s' como un término"
-#: builtin/bisect--helper.c:100
+#: builtin/bisect--helper.c:167
#, c-format
msgid "can't change the meaning of the term '%s'"
msgstr "no se puede cambiar el significado del término '%s'"
-#: builtin/bisect--helper.c:111
+#: builtin/bisect--helper.c:177
msgid "please use two different terms"
msgstr "por favor use dos términos diferentes"
-#: builtin/bisect--helper.c:118
-msgid "could not open the file BISECT_TERMS"
-msgstr "no se pudo abrir el archivo BISECT_TERMS"
-
-#: builtin/bisect--helper.c:155
+#: builtin/bisect--helper.c:193
#, c-format
msgid "We are not bisecting.\n"
msgstr "No estamos bisecando.\n"
-#: builtin/bisect--helper.c:163
+#: builtin/bisect--helper.c:201
#, c-format
msgid "'%s' is not a valid commit"
msgstr "'%s' no es un commit válido"
-#: builtin/bisect--helper.c:172
+#: builtin/bisect--helper.c:210
#, c-format
msgid ""
"could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
@@ -10359,27 +10776,27 @@
"no se pudo hacer check out al HEAD original '%s'. Intenta 'git bisect reset "
"<commit>'."
-#: builtin/bisect--helper.c:216
+#: builtin/bisect--helper.c:254
#, c-format
msgid "Bad bisect_write argument: %s"
msgstr "Mal argumento bisect_write: %s"
-#: builtin/bisect--helper.c:221
+#: builtin/bisect--helper.c:259
#, c-format
msgid "couldn't get the oid of the rev '%s'"
msgstr "no se puede obtener el oid de la rev '%s'"
-#: builtin/bisect--helper.c:233
+#: builtin/bisect--helper.c:271
#, c-format
msgid "couldn't open the file '%s'"
msgstr "no se pudo abrir el archivo '%s'"
-#: builtin/bisect--helper.c:259
+#: builtin/bisect--helper.c:297
#, c-format
msgid "Invalid command: you're currently in a %s/%s bisect"
msgstr "Comando inválido: actualmente se encuentra en un bisect %s/%s"
-#: builtin/bisect--helper.c:286
+#: builtin/bisect--helper.c:324
#, c-format
msgid ""
"You need to give me at least one %s and %s revision.\n"
@@ -10388,7 +10805,7 @@
"Tienes que dar al menos un %s y un %s revision.\n"
"Se puede ver \"git bisect %s\" y \"git bisect %s\" para eso."
-#: builtin/bisect--helper.c:290
+#: builtin/bisect--helper.c:328
#, c-format
msgid ""
"You need to start by \"git bisect start\".\n"
@@ -10399,7 +10816,7 @@
"Después tienes que entregar al menos un %s y una revision %s.\n"
"Puedes usar \"git bisect %s\" y \"git bisect %s\" para eso."
-#: builtin/bisect--helper.c:310
+#: builtin/bisect--helper.c:348
#, c-format
msgid "bisecting only with a %s commit"
msgstr "haciendo bisect solo con un commit %s"
@@ -10408,15 +10825,15 @@
#. translation. The program will only accept English input
#. at this point.
#.
-#: builtin/bisect--helper.c:318
+#: builtin/bisect--helper.c:356
msgid "Are you sure [Y/n]? "
msgstr "¿Estás seguro [Y/n]? "
-#: builtin/bisect--helper.c:379
+#: builtin/bisect--helper.c:417
msgid "no terms defined"
msgstr "no hay términos definidos"
-#: builtin/bisect--helper.c:382
+#: builtin/bisect--helper.c:420
#, c-format
msgid ""
"Your current terms are %s for the old state\n"
@@ -10425,7 +10842,7 @@
"Tus términos actuales son %s para el estado viejo\n"
"y %s para el estado nuevo.\n"
-#: builtin/bisect--helper.c:392
+#: builtin/bisect--helper.c:430
#, c-format
msgid ""
"invalid argument %s for 'git bisect terms'.\n"
@@ -10434,267 +10851,308 @@
"argumento inválido %s para 'git bisect terms'.\n"
"Las opciones soportadas son: --term-good|--term-old y --term-bad|--term-new."
-#: builtin/bisect--helper.c:460 builtin/bisect--helper.c:473
+#: builtin/bisect--helper.c:497 builtin/bisect--helper.c:1014
+msgid "revision walk setup failed\n"
+msgstr "la configuración del recorrido de revisión falló\n"
+
+#: builtin/bisect--helper.c:519
+#, c-format
+msgid "could not open '%s' for appending"
+msgstr "no se pudo abrir '%s' en modo append"
+
+#: builtin/bisect--helper.c:638 builtin/bisect--helper.c:651
msgid "'' is not a valid term"
msgstr "'' no es un término válido"
-#: builtin/bisect--helper.c:483
+#: builtin/bisect--helper.c:661
#, c-format
msgid "unrecognized option: '%s'"
msgstr "opción desconocida: '%s'"
-#: builtin/bisect--helper.c:487
+#: builtin/bisect--helper.c:665
#, c-format
msgid "'%s' does not appear to be a valid revision"
msgstr "'%s' no parece ser una revisión válida"
-#: builtin/bisect--helper.c:519
+#: builtin/bisect--helper.c:696
msgid "bad HEAD - I need a HEAD"
msgstr "mal HEAD - Necesito un HEAD"
-#: builtin/bisect--helper.c:534
+#: builtin/bisect--helper.c:711
#, c-format
msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
msgstr ""
"error al hacer checkout '%s'. Intente 'git bisect start <rama-válida>'."
-#: builtin/bisect--helper.c:555
+#: builtin/bisect--helper.c:732
msgid "won't bisect on cg-seek'ed tree"
msgstr "no se bisecará en un árbol con cg-seek"
-#: builtin/bisect--helper.c:558
+#: builtin/bisect--helper.c:735
msgid "bad HEAD - strange symbolic ref"
msgstr "mal HEAD - ref simbólico extraño"
-#: builtin/bisect--helper.c:582
+#: builtin/bisect--helper.c:755
#, c-format
msgid "invalid ref: '%s'"
msgstr "ref inválido: '%s'"
-#: builtin/bisect--helper.c:638
-msgid "perform 'git bisect next'"
-msgstr "realiza 'git bisect next'"
+#: builtin/bisect--helper.c:813
+msgid "You need to start by \"git bisect start\"\n"
+msgstr "Debes iniciar con \"git bisect start\"\n"
-#: builtin/bisect--helper.c:640
-msgid "write the terms to .git/BISECT_TERMS"
-msgstr "escribe los términos a .git/BISECT_TERMS"
+#. TRANSLATORS: Make sure to include [Y] and [n] in your
+#. translation. The program will only accept English input
+#. at this point.
+#.
+#: builtin/bisect--helper.c:824
+msgid "Do you want me to do it for you [Y/n]? "
+msgstr "¿Quieres que lo haga por ti [Y/n]? "
-#: builtin/bisect--helper.c:642
-msgid "cleanup the bisection state"
-msgstr "limpiar el estado de bisección"
+#: builtin/bisect--helper.c:842
+msgid "Please call `--bisect-state` with at least one argument"
+msgstr "Llame a `--bisect-state` con al menos un argumento"
-#: builtin/bisect--helper.c:644
-msgid "check for expected revs"
-msgstr "revisar por revs esperados"
+#: builtin/bisect--helper.c:855
+#, c-format
+msgid "'git bisect %s' can take only one argument."
+msgstr "'git bisect %s' solo puede tomar un argumento."
-#: builtin/bisect--helper.c:646
+#: builtin/bisect--helper.c:867 builtin/bisect--helper.c:878
+#, c-format
+msgid "Bad rev input: %s"
+msgstr "Mala entrada rev: %s"
+
+#: builtin/bisect--helper.c:912
+msgid "We are not bisecting."
+msgstr "No estamos bisecando."
+
+#: builtin/bisect--helper.c:962
+#, c-format
+msgid "'%s'?? what are you talking about?"
+msgstr "'%s'?? ¿De qué estás hablando?"
+
+#: builtin/bisect--helper.c:974
+#, c-format
+msgid "cannot read file '%s' for replaying"
+msgstr "no se puede leer '%s' para reproducir"
+
+#: builtin/bisect--helper.c:1047
msgid "reset the bisection state"
msgstr "reiniciar el estado de bisect"
-#: builtin/bisect--helper.c:648
-msgid "write out the bisection state in BISECT_LOG"
-msgstr "escribir el estado de bisect en BISECT_LOG"
-
-#: builtin/bisect--helper.c:650
-msgid "check and set terms in a bisection state"
-msgstr "revisar y configurar los terms en el estado de bisect"
-
-#: builtin/bisect--helper.c:652
+#: builtin/bisect--helper.c:1049
msgid "check whether bad or good terms exist"
msgstr "revisar si existen términos malos o buenos"
-#: builtin/bisect--helper.c:654
+#: builtin/bisect--helper.c:1051
msgid "print out the bisect terms"
msgstr "imprimir los terms del bisect"
-#: builtin/bisect--helper.c:656
+#: builtin/bisect--helper.c:1053
msgid "start the bisect session"
msgstr "comenzar la sesión de bisect"
-#: builtin/bisect--helper.c:658
-msgid "update BISECT_HEAD instead of checking out the current commit"
-msgstr "actualiza BISECT_HEAD en lugar de revisar el commit actual"
+#: builtin/bisect--helper.c:1055
+msgid "find the next bisection commit"
+msgstr "encontrar el siguiente commit de bisección"
-#: builtin/bisect--helper.c:660
+#: builtin/bisect--helper.c:1057
+msgid "mark the state of ref (or refs)"
+msgstr "marcar el estado de ref (o refs)"
+
+#: builtin/bisect--helper.c:1059
+msgid "list the bisection steps so far"
+msgstr "listar los pasos de bisección hasta ahora"
+
+#: builtin/bisect--helper.c:1061
+msgid "replay the bisection process from the given file"
+msgstr "reproducir el proceso de bisección del archivo dado"
+
+#: builtin/bisect--helper.c:1063
+msgid "skip some commits for checkout"
+msgstr "saltar algunos commits para checkout"
+
+#: builtin/bisect--helper.c:1065
msgid "no log for BISECT_WRITE"
msgstr "no hay log para BISECT_WRITE"
-#: builtin/bisect--helper.c:678
-msgid "--write-terms requires two arguments"
-msgstr "--write-terms requiere dos argumentos"
-
-#: builtin/bisect--helper.c:682
-msgid "--bisect-clean-state requires no arguments"
-msgstr "--bisect-clean-state no requiere argumentos"
-
-#: builtin/bisect--helper.c:689
+#: builtin/bisect--helper.c:1080
msgid "--bisect-reset requires either no argument or a commit"
msgstr "--bisect-reset requiere un commit o ningún argumento"
-#: builtin/bisect--helper.c:693
-msgid "--bisect-write requires either 4 or 5 arguments"
-msgstr "--bisect-write requiere entre 4 o 5 argumentos"
-
-#: builtin/bisect--helper.c:699
-msgid "--check-and-set-terms requires 3 arguments"
-msgstr "--bisect-clean-state no requiere argumentos"
-
-#: builtin/bisect--helper.c:705
+#: builtin/bisect--helper.c:1085
msgid "--bisect-next-check requires 2 or 3 arguments"
msgstr "--bisect-next-check requiere 2 o 3 argumentos"
-#: builtin/bisect--helper.c:711
+#: builtin/bisect--helper.c:1091
msgid "--bisect-terms requires 0 or 1 argument"
msgstr "--bisect-terms requiere 0 o 1 argumentos"
-#: builtin/blame.c:31
+#: builtin/bisect--helper.c:1100
+msgid "--bisect-next requires 0 arguments"
+msgstr "--bisect-next requiere 0 argumentos"
+
+#: builtin/bisect--helper.c:1111
+msgid "--bisect-log requires 0 arguments"
+msgstr "--bisect-log requiere 0 argumentos"
+
+#: builtin/bisect--helper.c:1116
+msgid "no logfile given"
+msgstr "ningún logfile proporcionado"
+
+#: builtin/blame.c:32
msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
msgstr "git blame [<opciones>] [<opciones-rev>] [<revision>] [--] <archivo>"
-#: builtin/blame.c:36
+#: builtin/blame.c:37
msgid "<rev-opts> are documented in git-rev-list(1)"
msgstr "<rev-opts> están documentadas en git-rev-list(1)"
-#: builtin/blame.c:409
+#: builtin/blame.c:410
#, c-format
msgid "expecting a color: %s"
msgstr "esperando un color: %s"
-#: builtin/blame.c:416
+#: builtin/blame.c:417
msgid "must end with a color"
msgstr "tiene que terminar con un color"
-#: builtin/blame.c:729
+#: builtin/blame.c:728
#, c-format
msgid "invalid color '%s' in color.blame.repeatedLines"
msgstr "color inválido '%s' en color.blame.repeatedLines"
-#: builtin/blame.c:747
+#: builtin/blame.c:746
msgid "invalid value for blame.coloring"
msgstr "valor inválido para blame.coloring"
-#: builtin/blame.c:822
+#: builtin/blame.c:845
#, c-format
msgid "cannot find revision %s to ignore"
msgstr "no se pudo encontrar revision %s para ignorar"
-#: builtin/blame.c:844
-msgid "Show blame entries as we find them, incrementally"
-msgstr "Mostrar las entradas blame como las encontramos, incrementalmente"
+#: builtin/blame.c:867
+msgid "show blame entries as we find them, incrementally"
+msgstr "mostrar las entradas blame como las encontramos, incrementalmente"
-#: builtin/blame.c:845
-msgid "Show blank SHA-1 for boundary commits (Default: off)"
-msgstr "Mostrar SHA-1 en blanco para commits extremos (Default: off)"
+#: builtin/blame.c:868
+msgid "do not show object names of boundary commits (Default: off)"
+msgstr "no mostrar nombres de objetos de commits extremos (Default: off)"
-#: builtin/blame.c:846
-msgid "Do not treat root commits as boundaries (Default: off)"
-msgstr "No tratar commits raíces como extremos (Default: off)"
+#: builtin/blame.c:869
+msgid "do not treat root commits as boundaries (Default: off)"
+msgstr "no tratar commits raíces como extremos (Default: off)"
-#: builtin/blame.c:847
-msgid "Show work cost statistics"
-msgstr "Mostrar estadísticas de costo de trabajo"
+#: builtin/blame.c:870
+msgid "show work cost statistics"
+msgstr "mostrar estadísticas de costo de trabajo"
-#: builtin/blame.c:848
-msgid "Force progress reporting"
-msgstr "Forzar el reporte de progreso"
+#: builtin/blame.c:871 builtin/checkout.c:1503 builtin/clone.c:92
+#: builtin/commit-graph.c:84 builtin/commit-graph.c:222 builtin/fetch.c:175
+#: builtin/merge.c:297 builtin/multi-pack-index.c:27 builtin/pull.c:119
+#: builtin/push.c:575 builtin/send-pack.c:198
+msgid "force progress reporting"
+msgstr "forzar el reporte de progreso"
-#: builtin/blame.c:849
-msgid "Show output score for blame entries"
-msgstr "Mostrar la puntuación de salida de las entradas de blame"
+#: builtin/blame.c:872
+msgid "show output score for blame entries"
+msgstr "mostrar la puntuación de salida de las entradas de blame"
-#: builtin/blame.c:850
-msgid "Show original filename (Default: auto)"
-msgstr "Mostrar nombre original del archivo (Default: auto)"
+#: builtin/blame.c:873
+msgid "show original filename (Default: auto)"
+msgstr "mostrar nombre original del archivo (Default: auto)"
-#: builtin/blame.c:851
-msgid "Show original linenumber (Default: off)"
-msgstr "Mostrar número de línea original (Default: off)"
+#: builtin/blame.c:874
+msgid "show original linenumber (Default: off)"
+msgstr "mostrar número de línea original (Default: off)"
-#: builtin/blame.c:852
-msgid "Show in a format designed for machine consumption"
-msgstr "Mostrar en un formato diseñado para consumo de máquina"
+#: builtin/blame.c:875
+msgid "show in a format designed for machine consumption"
+msgstr "mostrar en un formato diseñado para consumo de máquina"
-#: builtin/blame.c:853
-msgid "Show porcelain format with per-line commit information"
-msgstr "Mostrar en formato porcelana con información de commit por línea"
+#: builtin/blame.c:876
+msgid "show porcelain format with per-line commit information"
+msgstr "mostrar en formato porcelana con información de commit por línea"
-#: builtin/blame.c:854
-msgid "Use the same output mode as git-annotate (Default: off)"
-msgstr "Usar el mismo modo salida como git-annotate (Default: off)"
+#: builtin/blame.c:877
+msgid "use the same output mode as git-annotate (Default: off)"
+msgstr "usar el mismo modo salida como git-annotate (Default: off)"
-#: builtin/blame.c:855
-msgid "Show raw timestamp (Default: off)"
-msgstr "Mostrar timestamp en formato raw (Default: off)"
+#: builtin/blame.c:878
+msgid "show raw timestamp (Default: off)"
+msgstr "mostrar timestamp en formato raw (Default: off)"
-#: builtin/blame.c:856
-msgid "Show long commit SHA1 (Default: off)"
-msgstr "Mostrar SHA1 del commit en formato largo (Default: off)"
+#: builtin/blame.c:879
+msgid "show long commit SHA1 (Default: off)"
+msgstr "mostrar SHA1 del commit en formato largo (Default: off)"
-#: builtin/blame.c:857
-msgid "Suppress author name and timestamp (Default: off)"
-msgstr "Suprimir nombre del autor y timestamp (Default: off)"
+#: builtin/blame.c:880
+msgid "suppress author name and timestamp (Default: off)"
+msgstr "suprimir nombre del autor y timestamp (Default: off)"
-#: builtin/blame.c:858
-msgid "Show author email instead of name (Default: off)"
-msgstr "Mostrar en cambio el email del autor (Default: off)"
+#: builtin/blame.c:881
+msgid "show author email instead of name (Default: off)"
+msgstr "mostrar en cambio el email del autor (Default: off)"
-#: builtin/blame.c:859
-msgid "Ignore whitespace differences"
-msgstr "Ignorar diferencias de espacios en blanco"
+#: builtin/blame.c:882
+msgid "ignore whitespace differences"
+msgstr "ignorar diferencias de espacios en blanco"
-#: builtin/blame.c:860 builtin/log.c:1721
+#: builtin/blame.c:883 builtin/log.c:1812
msgid "rev"
msgstr "rev"
-#: builtin/blame.c:860
-msgid "Ignore <rev> when blaming"
-msgstr "Ignorar <rev> durante el blame"
+#: builtin/blame.c:883
+msgid "ignore <rev> when blaming"
+msgstr "ignorar <rev> durante el blame"
-#: builtin/blame.c:861
-msgid "Ignore revisions from <file>"
-msgstr "Ignorar revisiones de <archivo>"
+#: builtin/blame.c:884
+msgid "ignore revisions from <file>"
+msgstr "ignorar revisiones de <archivo>"
-#: builtin/blame.c:862
+#: builtin/blame.c:885
msgid "color redundant metadata from previous line differently"
msgstr "colorear metadata redundante de líneas previas de manera diferente"
-#: builtin/blame.c:863
+#: builtin/blame.c:886
msgid "color lines by age"
msgstr "colorear líneas por edad"
-#: builtin/blame.c:864
-msgid "Spend extra cycles to find better match"
-msgstr "Ocupo más ciclos para encontrar mejoras resultados"
+#: builtin/blame.c:887
+msgid "spend extra cycles to find better match"
+msgstr "ocupar más ciclos para encontrar mejoras resultados"
-#: builtin/blame.c:865
-msgid "Use revisions from <file> instead of calling git-rev-list"
-msgstr "Use revisiones desde <archivo> en lugar de llamar git-rev-list"
+#: builtin/blame.c:888
+msgid "use revisions from <file> instead of calling git-rev-list"
+msgstr "use revisiones desde <archivo> en lugar de llamar git-rev-list"
-#: builtin/blame.c:866
-msgid "Use <file>'s contents as the final image"
-msgstr "Usar contenido de <archivo> como imagen final"
+#: builtin/blame.c:889
+msgid "use <file>'s contents as the final image"
+msgstr "usar contenido de <archivo> como imagen final"
-#: builtin/blame.c:867 builtin/blame.c:868
+#: builtin/blame.c:890 builtin/blame.c:891
msgid "score"
msgstr "puntaje"
-#: builtin/blame.c:867
-msgid "Find line copies within and across files"
-msgstr "Encontrar copias de líneas entre y a través de archivos"
+#: builtin/blame.c:890
+msgid "find line copies within and across files"
+msgstr "encontrar copias de líneas entre y a través de archivos"
-#: builtin/blame.c:868
-msgid "Find line movements within and across files"
-msgstr "Encontrar movimientos de líneas entre y a través de archivos"
+#: builtin/blame.c:891
+msgid "find line movements within and across files"
+msgstr "encontrar movimientos de líneas entre y a través de archivos"
-#: builtin/blame.c:869
-msgid "n,m"
-msgstr "n,m"
+#: builtin/blame.c:892
+msgid "range"
+msgstr "rango"
-#: builtin/blame.c:869
-msgid "Process only line range n,m, counting from 1"
-msgstr "Procesar solo el rango de líneas n,m, contando desde 1"
+#: builtin/blame.c:893
+msgid "process only line range <start>,<end> or function :<funcname>"
+msgstr ""
+"Procesar solo el rango de líneas <inicio>,<fin> o función: <nombre-función>"
-#: builtin/blame.c:921
+#: builtin/blame.c:945
msgid "--progress can't be used with --incremental or porcelain formats"
msgstr "--progress no puede ser usado con --incremental o formatos porcelana"
@@ -10706,24 +11164,24 @@
#. your language may need more or fewer display
#. columns.
#.
-#: builtin/blame.c:972
+#: builtin/blame.c:996
msgid "4 years, 11 months ago"
msgstr "hace 4 años, 11 meses"
-#: builtin/blame.c:1087
+#: builtin/blame.c:1112
#, c-format
msgid "file %s has only %lu line"
msgid_plural "file %s has only %lu lines"
msgstr[0] "archivo %s tiene solo %lu línea"
msgstr[1] "archivo %s tiene solo %lu líneas"
-#: builtin/blame.c:1133
+#: builtin/blame.c:1157
msgid "Blaming lines"
msgstr "Blaming a líneas"
#: builtin/branch.c:29
-msgid "git branch [<options>] [-r | -a] [--merged | --no-merged]"
-msgstr "git branch [<opciones>] [-r | -a] [--merged | --no-merged]"
+msgid "git branch [<options>] [-r | -a] [--merged] [--no-merged]"
+msgstr "git branch [<opciones>] [-r | -a] [--merged] [--no-merged]"
#: builtin/branch.c:30
msgid "git branch [<options>] [-l] [-f] <branch-name> [<start-point>]"
@@ -10785,121 +11243,111 @@
msgid "Update of config-file failed"
msgstr "Falló de actualización de config-file"
-#: builtin/branch.c:220
+#: builtin/branch.c:223
msgid "cannot use -a with -d"
msgstr "no se puede usar-a con -d"
-#: builtin/branch.c:226
+#: builtin/branch.c:230
msgid "Couldn't look up commit object for HEAD"
msgstr "No se pudo revisar el objeto commit para HEAD"
-#: builtin/branch.c:240
+#: builtin/branch.c:244
#, c-format
msgid "Cannot delete branch '%s' checked out at '%s'"
msgstr "No se puede borrar rama '%s' que cuenta con checkout en '%s'"
-#: builtin/branch.c:255
+#: builtin/branch.c:259
#, c-format
msgid "remote-tracking branch '%s' not found."
msgstr "rama de rastreo remoto '%s' no encontrada."
-#: builtin/branch.c:256
+#: builtin/branch.c:260
#, c-format
msgid "branch '%s' not found."
msgstr "rama '%s' no encontrada."
-#: builtin/branch.c:271
-#, c-format
-msgid "Error deleting remote-tracking branch '%s'"
-msgstr "Error al eliminar la rama de rastreo remota '%s'"
-
-#: builtin/branch.c:272
-#, c-format
-msgid "Error deleting branch '%s'"
-msgstr "Error al eliminar la rama '%s'"
-
-#: builtin/branch.c:279
+#: builtin/branch.c:291
#, c-format
msgid "Deleted remote-tracking branch %s (was %s).\n"
msgstr "Eliminada la rama de rastreo remota %s (era %s).\n"
-#: builtin/branch.c:280
+#: builtin/branch.c:292
#, c-format
msgid "Deleted branch %s (was %s).\n"
msgstr "Eliminada la rama %s (era %s)..\n"
-#: builtin/branch.c:429 builtin/tag.c:61
+#: builtin/branch.c:438 builtin/tag.c:61
msgid "unable to parse format string"
msgstr "no es posible analizar el string de formato"
-#: builtin/branch.c:460
+#: builtin/branch.c:469
msgid "could not resolve HEAD"
msgstr "no se pudo resolver HEAD"
-#: builtin/branch.c:466
+#: builtin/branch.c:475
#, c-format
msgid "HEAD (%s) points outside of refs/heads/"
msgstr "HEAD (%s) apunta fuera de refs/heads/"
-#: builtin/branch.c:481
+#: builtin/branch.c:490
#, c-format
msgid "Branch %s is being rebased at %s"
msgstr "Rama %s está siendo rebasada en %s"
-#: builtin/branch.c:485
+#: builtin/branch.c:494
#, c-format
msgid "Branch %s is being bisected at %s"
msgstr "Rama %s está siendo bisecada en %s"
-#: builtin/branch.c:502
+#: builtin/branch.c:511
msgid "cannot copy the current branch while not on any."
msgstr "no se puede copiar la rama actual mientras no se está en ninguna."
-#: builtin/branch.c:504
+#: builtin/branch.c:513
msgid "cannot rename the current branch while not on any."
msgstr "no se puede renombrar la rama actual mientras no se está en ninguna."
-#: builtin/branch.c:515
+#: builtin/branch.c:524
#, c-format
msgid "Invalid branch name: '%s'"
msgstr "Nombre de rama inválido: '%s'"
-#: builtin/branch.c:542
+#: builtin/branch.c:553
msgid "Branch rename failed"
msgstr "Cambio de nombre de rama fallido"
-#: builtin/branch.c:544
+#: builtin/branch.c:555
msgid "Branch copy failed"
msgstr "Copiado de rama fallido"
-#: builtin/branch.c:548
+#: builtin/branch.c:559
#, c-format
msgid "Created a copy of a misnamed branch '%s'"
msgstr "Copia creada de la rama malnombrada '%s'"
-#: builtin/branch.c:551
+#: builtin/branch.c:562
#, c-format
msgid "Renamed a misnamed branch '%s' away"
msgstr "Rama mal llamada '%s' renombrada"
-#: builtin/branch.c:557
+#: builtin/branch.c:568
#, c-format
msgid "Branch renamed to %s, but HEAD is not updated!"
msgstr "¡Rama renombrada a %s, pero HEAD no está actualizado!"
-#: builtin/branch.c:566
+#: builtin/branch.c:577
msgid "Branch is renamed, but update of config-file failed"
msgstr ""
"La rama está renombrada, pero falló la actualización del archivo de "
"configuración"
-#: builtin/branch.c:568
+#: builtin/branch.c:579
msgid "Branch is copied, but update of config-file failed"
msgstr ""
"La rama está copiada, pero falló la actualización del archivo de "
"configuración"
-#: builtin/branch.c:584
+#: builtin/branch.c:595
#, c-format
msgid ""
"Please edit the description for the branch\n"
@@ -10910,180 +11358,180 @@
"%s\n"
"Las líneas que comiencen con '%c' serán eliminadas.\n"
-#: builtin/branch.c:618
+#: builtin/branch.c:629
msgid "Generic options"
msgstr "Opciones genéricas"
-#: builtin/branch.c:620
+#: builtin/branch.c:631
msgid "show hash and subject, give twice for upstream branch"
msgstr "mostrar hash y tema, dar dos veces para rama upstream"
-#: builtin/branch.c:621
+#: builtin/branch.c:632
msgid "suppress informational messages"
msgstr "suprimir mensajes informativos"
-#: builtin/branch.c:622
+#: builtin/branch.c:633
msgid "set up tracking mode (see git-pull(1))"
msgstr "configurando modo tracking (mirar git-pull(1))"
-#: builtin/branch.c:624
+#: builtin/branch.c:635
msgid "do not use"
msgstr "no usar"
-#: builtin/branch.c:626 builtin/rebase.c:520
+#: builtin/branch.c:637 builtin/rebase.c:534
msgid "upstream"
msgstr "upstream"
-#: builtin/branch.c:626
+#: builtin/branch.c:637
msgid "change the upstream info"
msgstr "cambiar info de upstream"
-#: builtin/branch.c:627
+#: builtin/branch.c:638
msgid "unset the upstream info"
msgstr "desconfigurando la info de upstream"
-#: builtin/branch.c:628
+#: builtin/branch.c:639
msgid "use colored output"
msgstr "usar salida con colores"
-#: builtin/branch.c:629
+#: builtin/branch.c:640
msgid "act on remote-tracking branches"
msgstr "actuar en ramas de traqueo remoto"
-#: builtin/branch.c:631 builtin/branch.c:633
+#: builtin/branch.c:642 builtin/branch.c:644
msgid "print only branches that contain the commit"
msgstr "mostrar solo ramas que contienen el commit"
-#: builtin/branch.c:632 builtin/branch.c:634
+#: builtin/branch.c:643 builtin/branch.c:645
msgid "print only branches that don't contain the commit"
msgstr "mostrar solo ramas que no contienen el commit"
-#: builtin/branch.c:637
+#: builtin/branch.c:648
msgid "Specific git-branch actions:"
msgstr "Acciones específicas de git-branch:"
-#: builtin/branch.c:638
+#: builtin/branch.c:649
msgid "list both remote-tracking and local branches"
msgstr "listar ramas de remote-tracking y locales"
-#: builtin/branch.c:640
+#: builtin/branch.c:651
msgid "delete fully merged branch"
msgstr "borrar ramas totalmente fusionadas"
-#: builtin/branch.c:641
+#: builtin/branch.c:652
msgid "delete branch (even if not merged)"
msgstr "borrar rama (incluso si no está fusionada)"
-#: builtin/branch.c:642
+#: builtin/branch.c:653
msgid "move/rename a branch and its reflog"
msgstr "mover/renombrar una rama y su reflog"
-#: builtin/branch.c:643
+#: builtin/branch.c:654
msgid "move/rename a branch, even if target exists"
msgstr "mover/renombrar una rama, incluso si el destino existe"
-#: builtin/branch.c:644
+#: builtin/branch.c:655
msgid "copy a branch and its reflog"
msgstr "copiar una rama y su reflog"
-#: builtin/branch.c:645
+#: builtin/branch.c:656
msgid "copy a branch, even if target exists"
msgstr "copiar una rama, incluso si el objetivo existe"
-#: builtin/branch.c:646
+#: builtin/branch.c:657
msgid "list branch names"
msgstr "listar nombres de ramas"
-#: builtin/branch.c:647
+#: builtin/branch.c:658
msgid "show current branch name"
msgstr "muestra el nombre de branch actual"
-#: builtin/branch.c:648
+#: builtin/branch.c:659
msgid "create the branch's reflog"
msgstr "crea el reflog de la rama"
-#: builtin/branch.c:650
+#: builtin/branch.c:661
msgid "edit the description for the branch"
msgstr "edita la descripción de la rama"
-#: builtin/branch.c:651
+#: builtin/branch.c:662
msgid "force creation, move/rename, deletion"
msgstr "fuerza la creación,movimiento/renombrado,borrado"
-#: builtin/branch.c:652
+#: builtin/branch.c:663
msgid "print only branches that are merged"
msgstr "muestra solo ramas que han sido fusionadas"
-#: builtin/branch.c:653
+#: builtin/branch.c:664
msgid "print only branches that are not merged"
msgstr "muestra solo ramas que no han sido fusionadas"
-#: builtin/branch.c:654
+#: builtin/branch.c:665
msgid "list branches in columns"
msgstr "muestra las ramas en columnas"
-#: builtin/branch.c:656 builtin/for-each-ref.c:42 builtin/notes.c:415
+#: builtin/branch.c:667 builtin/for-each-ref.c:42 builtin/notes.c:415
#: builtin/notes.c:418 builtin/notes.c:581 builtin/notes.c:584
-#: builtin/tag.c:434
+#: builtin/tag.c:466
msgid "object"
msgstr "objeto"
-#: builtin/branch.c:657
+#: builtin/branch.c:668
msgid "print only branches of the object"
msgstr "imprimir sólo las ramas del objeto"
-#: builtin/branch.c:658 builtin/for-each-ref.c:48 builtin/tag.c:441
+#: builtin/branch.c:669 builtin/for-each-ref.c:48 builtin/tag.c:473
msgid "sorting and filtering are case insensitive"
msgstr "ordenamiento y filtrado son case-insensitive"
-#: builtin/branch.c:659 builtin/for-each-ref.c:38 builtin/tag.c:439
+#: builtin/branch.c:670 builtin/for-each-ref.c:38 builtin/tag.c:471
#: builtin/verify-tag.c:38
msgid "format to use for the output"
msgstr "formato para usar para el output"
-#: builtin/branch.c:682 builtin/clone.c:789
+#: builtin/branch.c:693 builtin/clone.c:790
msgid "HEAD not found below refs/heads!"
msgstr "¡HEAD no encontrado abajo de refs/heads!"
-#: builtin/branch.c:706
+#: builtin/branch.c:717
msgid "--column and --verbose are incompatible"
msgstr "--column y --verbose son incompatibles"
-#: builtin/branch.c:721 builtin/branch.c:775 builtin/branch.c:784
+#: builtin/branch.c:732 builtin/branch.c:788 builtin/branch.c:797
msgid "branch name required"
msgstr "se necesita el nombre de la rama"
-#: builtin/branch.c:751
+#: builtin/branch.c:764
msgid "Cannot give description to detached HEAD"
msgstr "No se puede dar descripción al HEAD desacoplado"
-#: builtin/branch.c:756
+#: builtin/branch.c:769
msgid "cannot edit description of more than one branch"
msgstr "no se puede editar la descripción de más de una rama"
-#: builtin/branch.c:763
+#: builtin/branch.c:776
#, c-format
msgid "No commit on branch '%s' yet."
msgstr "Aún no hay commits en la rama '%s'."
-#: builtin/branch.c:766
+#: builtin/branch.c:779
#, c-format
msgid "No branch named '%s'."
msgstr "No hay ninguna rama llamada '%s'."
-#: builtin/branch.c:781
+#: builtin/branch.c:794
msgid "too many branches for a copy operation"
msgstr "demasiadas ramas para una operación de copiado"
-#: builtin/branch.c:790
+#: builtin/branch.c:803
msgid "too many arguments for a rename operation"
msgstr "demasiados argumentos para una operación de renombrado"
-#: builtin/branch.c:795
+#: builtin/branch.c:808
msgid "too many arguments to set new upstream"
msgstr "demasiados argumentos para configurar un nuevo upstream"
-#: builtin/branch.c:799
+#: builtin/branch.c:812
#, c-format
msgid ""
"could not set upstream of HEAD to %s when it does not point to any branch."
@@ -11091,32 +11539,32 @@
"no se pudo configurar upstream de HEAD a %s cuando este no apunta a ninguna "
"rama."
-#: builtin/branch.c:802 builtin/branch.c:825
+#: builtin/branch.c:815 builtin/branch.c:838
#, c-format
msgid "no such branch '%s'"
msgstr "no hay tal rama '%s'"
-#: builtin/branch.c:806
+#: builtin/branch.c:819
#, c-format
msgid "branch '%s' does not exist"
msgstr "la rama '%s' no existe"
-#: builtin/branch.c:819
+#: builtin/branch.c:832
msgid "too many arguments to unset upstream"
msgstr "demasiados argumentos para desconfigurar upstream"
-#: builtin/branch.c:823
+#: builtin/branch.c:836
msgid "could not unset upstream of HEAD when it does not point to any branch."
msgstr ""
"no se puede desconfigurar upstream de HEAD cuando este no apunta a ninguna "
"rama."
-#: builtin/branch.c:829
+#: builtin/branch.c:842
#, c-format
msgid "Branch '%s' has no upstream information"
msgstr "Rama '%s' no tiene información de upstream"
-#: builtin/branch.c:839
+#: builtin/branch.c:852
msgid ""
"The -a, and -r, options to 'git branch' do not take a branch name.\n"
"Did you mean to use: -a|-r --list <pattern>?"
@@ -11124,7 +11572,7 @@
"Las opciones -a, y -r, de 'git branch' no toman un nombre de rama.\n"
"¿Quisiste usar: -a|-r --list <patrón>?"
-#: builtin/branch.c:843
+#: builtin/branch.c:856
msgid ""
"the '--set-upstream' option is no longer supported. Please use '--track' or "
"'--set-upstream-to' instead."
@@ -11132,6 +11580,104 @@
"la opción '--set-upstream' ya no es soportada. Considere usar '--track' o '--"
"set-upstream-to' en cambio."
+#: builtin/bugreport.c:15
+msgid "git version:\n"
+msgstr "versión de git:\n"
+
+#: builtin/bugreport.c:21
+#, c-format
+msgid "uname() failed with error '%s' (%d)\n"
+msgstr "uname() falló con error '%s' (%d)\n"
+
+#: builtin/bugreport.c:31
+msgid "compiler info: "
+msgstr "información del compilador: "
+
+#: builtin/bugreport.c:34
+msgid "libc info: "
+msgstr "información de libc: "
+
+#: builtin/bugreport.c:80
+msgid "not run from a git repository - no hooks to show\n"
+msgstr "no ejecutado desde un repositorio git - no hay hooks para mostrar\n"
+
+#: builtin/bugreport.c:90
+msgid "git bugreport [-o|--output-directory <file>] [-s|--suffix <format>]"
+msgstr ""
+"git bugreport [-o|--output-directory <archivo>] [-s|--suffix <formato>]"
+
+#: builtin/bugreport.c:97
+msgid ""
+"Thank you for filling out a Git bug report!\n"
+"Please answer the following questions to help us understand your issue.\n"
+"\n"
+"What did you do before the bug happened? (Steps to reproduce your issue)\n"
+"\n"
+"What did you expect to happen? (Expected behavior)\n"
+"\n"
+"What happened instead? (Actual behavior)\n"
+"\n"
+"What's different between what you expected and what actually happened?\n"
+"\n"
+"Anything else you want to add:\n"
+"\n"
+"Please review the rest of the bug report below.\n"
+"You can delete any lines you don't wish to share.\n"
+msgstr ""
+"¡Gracias por prepara un reporte de bug de Git!\n"
+"Por favor responde las siguientes preguntas para ayudarnos a entender el "
+"problema.\n"
+"\n"
+"¿Qué hiciste antes de que sucediera el bug? (Pasos para reproducir el "
+"problema)\n"
+"\n"
+"¿Qué esperabas que sucediera? (Comportamiento esperado)\n"
+"\n"
+"¿Qué sucedio en lugar de eso? (Comportamiento real)\n"
+"\n"
+"¿Qué es diferente entre lo que esperabas y lo que pasó?\n"
+"\n"
+"Cualquier cosa que quieras agregar:\n"
+"\n"
+"Por favor revisa el resto del reporte abajo.\n"
+"Puedes borrar cualquier línea que no desees compartir.\n"
+
+#: builtin/bugreport.c:135
+msgid "specify a destination for the bugreport file"
+msgstr "especificar el destino para el archivo de reporte de bug"
+
+#: builtin/bugreport.c:137
+msgid "specify a strftime format suffix for the filename"
+msgstr "especificar el sufijo formato strftime para el nombre del archivo"
+
+#: builtin/bugreport.c:159
+#, c-format
+msgid "could not create leading directories for '%s'"
+msgstr "no se pudo crear directorios principales para '%s'"
+
+#: builtin/bugreport.c:166
+msgid "System Info"
+msgstr "Información del sistema"
+
+#: builtin/bugreport.c:169
+msgid "Enabled Hooks"
+msgstr "Activar Hooks"
+
+#: builtin/bugreport.c:176
+#, c-format
+msgid "couldn't create a new file at '%s'"
+msgstr "no se pudo crear un archivo en '%s'"
+
+#: builtin/bugreport.c:179
+#, c-format
+msgid "unable to write to %s"
+msgstr "no es posible escribir en %s"
+
+#: builtin/bugreport.c:189
+#, c-format
+msgid "Created new report at '%s'.\n"
+msgstr "Crear un nuevo reporte en '%s'.\n"
+
#: builtin/bundle.c:15 builtin/bundle.c:23
msgid "git bundle create [<options>] <file> <git-rev-list args>"
msgstr "git bundle create [<opciones>] <file> <git-rev-list args>"
@@ -11148,44 +11694,48 @@
msgid "git bundle unbundle <file> [<refname>...]"
msgstr "git bundle unbundle <archivo> [<nombre-de-ref>...]"
-#: builtin/bundle.c:66 builtin/pack-objects.c:3448
+#: builtin/bundle.c:67 builtin/pack-objects.c:3495
msgid "do not show progress meter"
msgstr "no mostrar medidor de progreso"
-#: builtin/bundle.c:68 builtin/pack-objects.c:3450
+#: builtin/bundle.c:69 builtin/pack-objects.c:3497
msgid "show progress meter"
msgstr "mostrar medidor de progreso"
-#: builtin/bundle.c:70 builtin/pack-objects.c:3452
+#: builtin/bundle.c:71 builtin/pack-objects.c:3499
msgid "show progress meter during object writing phase"
msgstr "mostrar medidor de progreso durante la fase de escritura de objeto"
-#: builtin/bundle.c:73 builtin/pack-objects.c:3455
+#: builtin/bundle.c:74 builtin/pack-objects.c:3502
msgid "similar to --all-progress when progress meter is shown"
msgstr "similar a --all-progress cuando medidor de progreso es mostrado"
-#: builtin/bundle.c:93
+#: builtin/bundle.c:76
+msgid "specify bundle format version"
+msgstr "especificar la versión del formato del paquete"
+
+#: builtin/bundle.c:96
msgid "Need a repository to create a bundle."
msgstr "Se necesita un repositorio para agrupar."
-#: builtin/bundle.c:104
+#: builtin/bundle.c:107
msgid "do not show bundle details"
msgstr "no mostrar detalles del bundle"
-#: builtin/bundle.c:119
+#: builtin/bundle.c:122
#, c-format
msgid "%s is okay\n"
msgstr "%s está bien\n"
-#: builtin/bundle.c:160
+#: builtin/bundle.c:163
msgid "Need a repository to unbundle."
msgstr "Se necesita un repositorio para desagrupar."
-#: builtin/bundle.c:168 builtin/remote.c:1686
+#: builtin/bundle.c:171 builtin/remote.c:1700
msgid "be verbose; must be placed before a subcommand"
msgstr "ser verboso; tiene que ser agregado antes de un subcomando"
-#: builtin/bundle.c:190 builtin/remote.c:1717
+#: builtin/bundle.c:193 builtin/remote.c:1731
#, c-format
msgid "Unknown subcommand: %s"
msgstr "Sub-comando desconocido: %s"
@@ -11238,7 +11788,7 @@
msgid "for blob objects, run filters on object's content"
msgstr "para objetos blob, ejecuta filters en el contenido del objeto"
-#: builtin/cat-file.c:648 git-submodule.sh:958
+#: builtin/cat-file.c:648
msgid "blob"
msgstr "blob"
@@ -11299,8 +11849,8 @@
msgid "terminate input and output records by a NUL character"
msgstr "terminar registros de entrada y salida con un carácter NUL"
-#: builtin/check-ignore.c:21 builtin/checkout.c:1486 builtin/gc.c:537
-#: builtin/worktree.c:561
+#: builtin/check-ignore.c:21 builtin/checkout.c:1499 builtin/gc.c:549
+#: builtin/worktree.c:489
msgid "suppress progress reporting"
msgstr "suprimir el reporte de progreso"
@@ -11353,56 +11903,56 @@
msgid "no contacts specified"
msgstr "contactos no especificados"
-#: builtin/checkout-index.c:131
+#: builtin/checkout-index.c:152
msgid "git checkout-index [<options>] [--] [<file>...]"
msgstr "git checkout-index [<opciones>] [--] [<archivo>...]"
-#: builtin/checkout-index.c:148
+#: builtin/checkout-index.c:169
msgid "stage should be between 1 and 3 or all"
msgstr "stage tiene que estar entre 1 y 3 o all"
-#: builtin/checkout-index.c:164
+#: builtin/checkout-index.c:186
msgid "check out all files in the index"
msgstr "revisar todos los archivos en el índice"
-#: builtin/checkout-index.c:165
+#: builtin/checkout-index.c:187
msgid "force overwrite of existing files"
msgstr "forzar sobreescritura de los archivos existentes"
-#: builtin/checkout-index.c:167
+#: builtin/checkout-index.c:189
msgid "no warning for existing files and files not in index"
msgstr ""
"no hay advertencias para los archivos existentes y los archivos no están en "
"el índice"
-#: builtin/checkout-index.c:169
+#: builtin/checkout-index.c:191
msgid "don't checkout new files"
msgstr "no revisar archivos nuevos"
-#: builtin/checkout-index.c:171
+#: builtin/checkout-index.c:193
msgid "update stat information in the index file"
msgstr "actualizar información de estado en el archivo índice"
-#: builtin/checkout-index.c:175
+#: builtin/checkout-index.c:197
msgid "read list of paths from the standard input"
msgstr "leer lista de rutas desde standard input"
-#: builtin/checkout-index.c:177
+#: builtin/checkout-index.c:199
msgid "write the content to temporary files"
msgstr "escribir el contenido en un archivo temporal"
-#: builtin/checkout-index.c:178 builtin/column.c:31
-#: builtin/submodule--helper.c:1400 builtin/submodule--helper.c:1403
-#: builtin/submodule--helper.c:1411 builtin/submodule--helper.c:1909
-#: builtin/worktree.c:754
+#: builtin/checkout-index.c:200 builtin/column.c:31
+#: builtin/submodule--helper.c:1824 builtin/submodule--helper.c:1827
+#: builtin/submodule--helper.c:1835 builtin/submodule--helper.c:2333
+#: builtin/worktree.c:717
msgid "string"
msgstr "string"
-#: builtin/checkout-index.c:179
+#: builtin/checkout-index.c:201
msgid "when creating files, prepend <string>"
msgstr "cuando cree archivos, anteponer <string>"
-#: builtin/checkout-index.c:181
+#: builtin/checkout-index.c:203
msgid "copy out the files from named stage"
msgstr "copiar los archivos del stage nombrado"
@@ -11437,83 +11987,83 @@
msgid "path '%s' does not have all necessary versions"
msgstr "ruta '%s' no tiene todas las versiones necesarias"
-#: builtin/checkout.c:256
+#: builtin/checkout.c:258
#, c-format
msgid "path '%s' does not have necessary versions"
msgstr "ruta '%s' no tiene versiones necesarias"
-#: builtin/checkout.c:274
+#: builtin/checkout.c:275
#, c-format
msgid "path '%s': cannot merge"
msgstr "ruta '%s': no se puede fusionar"
-#: builtin/checkout.c:290
+#: builtin/checkout.c:291
#, c-format
msgid "Unable to add merge result for '%s'"
msgstr "Incapaz de agregar resultados de fusión a '%s'"
-#: builtin/checkout.c:395
+#: builtin/checkout.c:396
#, c-format
msgid "Recreated %d merge conflict"
msgid_plural "Recreated %d merge conflicts"
msgstr[0] "Recreado %d conflicto de merge"
msgstr[1] "Recreados %d conflictos de merge"
-#: builtin/checkout.c:400
+#: builtin/checkout.c:401
#, c-format
msgid "Updated %d path from %s"
msgid_plural "Updated %d paths from %s"
msgstr[0] "Actualizada %d ruta para %s"
msgstr[1] "Actualizadas %d rutas para %s"
-#: builtin/checkout.c:407
+#: builtin/checkout.c:408
#, c-format
msgid "Updated %d path from the index"
msgid_plural "Updated %d paths from the index"
msgstr[0] "Actualizada %d ruta desde el index"
msgstr[1] "Actualizadas %d rutas desde el index"
-#: builtin/checkout.c:430 builtin/checkout.c:433 builtin/checkout.c:436
-#: builtin/checkout.c:440
+#: builtin/checkout.c:431 builtin/checkout.c:434 builtin/checkout.c:437
+#: builtin/checkout.c:441
#, c-format
msgid "'%s' cannot be used with updating paths"
msgstr "'%s' no puede ser usada con rutas actualizadas"
-#: builtin/checkout.c:443 builtin/checkout.c:446
+#: builtin/checkout.c:444 builtin/checkout.c:447
#, c-format
msgid "'%s' cannot be used with %s"
msgstr "'%s' no puede ser usado con %s"
-#: builtin/checkout.c:450
+#: builtin/checkout.c:451
#, c-format
msgid "Cannot update paths and switch to branch '%s' at the same time."
msgstr "No se puede actualizar rutas y cambiar a la rama '%s' al mismo tiempo."
-#: builtin/checkout.c:454
+#: builtin/checkout.c:455
#, c-format
msgid "neither '%s' or '%s' is specified"
msgstr "ni '%s' o '%s' están especificados"
-#: builtin/checkout.c:458
+#: builtin/checkout.c:459
#, c-format
msgid "'%s' must be used when '%s' is not specified"
msgstr "'%s' tiene que ser usado cuando '%s' no es especificado"
-#: builtin/checkout.c:463 builtin/checkout.c:468
+#: builtin/checkout.c:464 builtin/checkout.c:469
#, c-format
msgid "'%s' or '%s' cannot be used with %s"
msgstr "'%s' o '%s' no puede ser usado con %s"
-#: builtin/checkout.c:527 builtin/checkout.c:534
+#: builtin/checkout.c:543 builtin/checkout.c:550
#, c-format
msgid "path '%s' is unmerged"
msgstr "ruta '%s' no esta fusionada"
-#: builtin/checkout.c:702
+#: builtin/checkout.c:718
msgid "you need to resolve your current index first"
msgstr "necesitas resolver tu índice actual primero"
-#: builtin/checkout.c:756
+#: builtin/checkout.c:772
#, c-format
msgid ""
"cannot continue with staged changes in the following files:\n"
@@ -11522,50 +12072,50 @@
"no se puede continuar con los cambios en stage en los siguientes archivos:\n"
"%s"
-#: builtin/checkout.c:859
+#: builtin/checkout.c:865
#, c-format
msgid "Can not do reflog for '%s': %s\n"
msgstr "No se puede hacer reflog para '%s': %s\n"
-#: builtin/checkout.c:901
+#: builtin/checkout.c:907
msgid "HEAD is now at"
msgstr "HEAD está ahora en"
-#: builtin/checkout.c:905 builtin/clone.c:720
+#: builtin/checkout.c:911 builtin/clone.c:721 t/helper/test-fast-rebase.c:202
msgid "unable to update HEAD"
msgstr "no es posible actualizar HEAD"
-#: builtin/checkout.c:909
+#: builtin/checkout.c:915
#, c-format
msgid "Reset branch '%s'\n"
msgstr "Reiniciar rama '%s'\n"
-#: builtin/checkout.c:912
+#: builtin/checkout.c:918
#, c-format
msgid "Already on '%s'\n"
msgstr "Ya en '%s'\n"
-#: builtin/checkout.c:916
+#: builtin/checkout.c:922
#, c-format
msgid "Switched to and reset branch '%s'\n"
msgstr "Rama reiniciada y cambiada a '%s'\n"
-#: builtin/checkout.c:918 builtin/checkout.c:1342
+#: builtin/checkout.c:924 builtin/checkout.c:1355
#, c-format
msgid "Switched to a new branch '%s'\n"
msgstr "Cambiado a nueva rama '%s'\n"
-#: builtin/checkout.c:920
+#: builtin/checkout.c:926
#, c-format
msgid "Switched to branch '%s'\n"
msgstr "Cambiado a rama '%s'\n"
-#: builtin/checkout.c:971
+#: builtin/checkout.c:977
#, c-format
msgid " ... and %d more.\n"
msgstr " ... y %d más.\n"
-#: builtin/checkout.c:977
+#: builtin/checkout.c:983
#, c-format
msgid ""
"Warning: you are leaving %d commit behind, not connected to\n"
@@ -11588,7 +12138,7 @@
"\n"
"%s\n"
-#: builtin/checkout.c:996
+#: builtin/checkout.c:1002
#, c-format
msgid ""
"If you want to keep it by creating a new branch, this may be a good time\n"
@@ -11615,19 +12165,19 @@
" git branch <nombre-de-rama> %s\n"
"\n"
-#: builtin/checkout.c:1031
+#: builtin/checkout.c:1037
msgid "internal error in revision walk"
msgstr "error interno en camino de revisión"
-#: builtin/checkout.c:1035
+#: builtin/checkout.c:1041
msgid "Previous HEAD position was"
msgstr "La posición previa de HEAD era"
-#: builtin/checkout.c:1075 builtin/checkout.c:1337
+#: builtin/checkout.c:1081 builtin/checkout.c:1350
msgid "You are on a branch yet to be born"
msgstr "Estás en una rama por nacer"
-#: builtin/checkout.c:1150
+#: builtin/checkout.c:1163
#, c-format
msgid ""
"'%s' could be both a local file and a tracking branch.\n"
@@ -11636,7 +12186,7 @@
"'%s' puede ser tanto un archivo local como una rama de rastreo.\n"
"Por favor use -- (y opcionalmente --no-guess) para desambiguar"
-#: builtin/checkout.c:1157
+#: builtin/checkout.c:1170
msgid ""
"If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
"you can do so by fully qualifying the name with the --track option:\n"
@@ -11657,51 +12207,51 @@
"de nombre <nombre> remota, como 'origin', considera configurar\n"
"checkout.defaultRemote=origin en tu configuración."
-#: builtin/checkout.c:1167
+#: builtin/checkout.c:1180
#, c-format
msgid "'%s' matched multiple (%d) remote tracking branches"
msgstr "'%s' concordó con multiples (%d) ramas de rastreo remoto"
-#: builtin/checkout.c:1233
+#: builtin/checkout.c:1246
msgid "only one reference expected"
msgstr "solo una referencia esperada"
-#: builtin/checkout.c:1250
+#: builtin/checkout.c:1263
#, c-format
msgid "only one reference expected, %d given."
msgstr "solo una referencia esperada, %d entregadas."
-#: builtin/checkout.c:1296 builtin/worktree.c:342 builtin/worktree.c:510
+#: builtin/checkout.c:1309 builtin/worktree.c:270 builtin/worktree.c:438
#, c-format
msgid "invalid reference: %s"
msgstr "referencia inválida: %s"
-#: builtin/checkout.c:1309 builtin/checkout.c:1675
+#: builtin/checkout.c:1322 builtin/checkout.c:1688
#, c-format
msgid "reference is not a tree: %s"
msgstr "la referencia no es n árbol: %s"
-#: builtin/checkout.c:1356
+#: builtin/checkout.c:1369
#, c-format
msgid "a branch is expected, got tag '%s'"
msgstr "se esperaba un branch, se obtuvo tag '%s'"
-#: builtin/checkout.c:1358
+#: builtin/checkout.c:1371
#, c-format
msgid "a branch is expected, got remote branch '%s'"
msgstr "se espera una rama, se obtuvo una rama remota '%s'"
-#: builtin/checkout.c:1359 builtin/checkout.c:1367
+#: builtin/checkout.c:1372 builtin/checkout.c:1380
#, c-format
msgid "a branch is expected, got '%s'"
msgstr "se esperaba branch, se obuto '%s'"
-#: builtin/checkout.c:1362
+#: builtin/checkout.c:1375
#, c-format
msgid "a branch is expected, got commit '%s'"
msgstr "se espera una rama, se obtuvo commit '%s'"
-#: builtin/checkout.c:1378
+#: builtin/checkout.c:1391
msgid ""
"cannot switch branch while merging\n"
"Consider \"git merge --quit\" or \"git worktree add\"."
@@ -11709,7 +12259,7 @@
"no se puede cambiar de branch durante un merge\n"
"Considera \"git merge --quit\" o \"git worktree add\"."
-#: builtin/checkout.c:1382
+#: builtin/checkout.c:1395
msgid ""
"cannot switch branch in the middle of an am session\n"
"Consider \"git am --quit\" or \"git worktree add\"."
@@ -11717,7 +12267,7 @@
"no se puede cambiar de branch en medio de una sesión de am\n"
"Considera \"git am --quit\" o \"git worktree add\"."
-#: builtin/checkout.c:1386
+#: builtin/checkout.c:1399
msgid ""
"cannot switch branch while rebasing\n"
"Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -11725,7 +12275,7 @@
"no se puede cambiar de branch durante un rebase\n"
"Considera \"git rebase --quit\" o \"git worktree add\"."
-#: builtin/checkout.c:1390
+#: builtin/checkout.c:1403
msgid ""
"cannot switch branch while cherry-picking\n"
"Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -11733,7 +12283,7 @@
"no se puede cambiar de branch durante un cherry-pick\n"
"Considera \"git cherry-pick --quit\" o \"git worktree add\"."
-#: builtin/checkout.c:1394
+#: builtin/checkout.c:1407
msgid ""
"cannot switch branch while reverting\n"
"Consider \"git revert --quit\" or \"git worktree add\"."
@@ -11741,144 +12291,137 @@
"no se puede cambiar de branch durante un revert\n"
"Considera \"git revert --quit\" o \"git worktree add\"."
-#: builtin/checkout.c:1398
+#: builtin/checkout.c:1411
msgid "you are switching branch while bisecting"
msgstr "estás cambiando ramas durante un bisect"
-#: builtin/checkout.c:1405
+#: builtin/checkout.c:1418
msgid "paths cannot be used with switching branches"
msgstr "rutas no pueden ser usadas con cambios de rama"
-#: builtin/checkout.c:1408 builtin/checkout.c:1412 builtin/checkout.c:1416
+#: builtin/checkout.c:1421 builtin/checkout.c:1425 builtin/checkout.c:1429
#, c-format
msgid "'%s' cannot be used with switching branches"
msgstr "'%s' no puede ser usado con cambios de ramas"
-#: builtin/checkout.c:1420 builtin/checkout.c:1423 builtin/checkout.c:1426
-#: builtin/checkout.c:1431 builtin/checkout.c:1436
+#: builtin/checkout.c:1433 builtin/checkout.c:1436 builtin/checkout.c:1439
+#: builtin/checkout.c:1444 builtin/checkout.c:1449
#, c-format
msgid "'%s' cannot be used with '%s'"
msgstr "'%s' no puede ser usado con '%s'"
-#: builtin/checkout.c:1433
+#: builtin/checkout.c:1446
#, c-format
msgid "'%s' cannot take <start-point>"
msgstr "'%s' no puede tomar <punto de partida>"
-#: builtin/checkout.c:1441
+#: builtin/checkout.c:1454
#, c-format
msgid "Cannot switch branch to a non-commit '%s'"
msgstr "No se puede cambiar rama a un '%s' sin commits"
-#: builtin/checkout.c:1448
+#: builtin/checkout.c:1461
msgid "missing branch or commit argument"
msgstr "falta branch o commit como argumento"
-#: builtin/checkout.c:1490 builtin/clone.c:91 builtin/commit-graph.c:82
-#: builtin/commit-graph.c:189 builtin/fetch.c:168 builtin/merge.c:288
-#: builtin/multi-pack-index.c:27 builtin/pull.c:119 builtin/push.c:561
-#: builtin/send-pack.c:173
-msgid "force progress reporting"
-msgstr "forzar el reporte de progreso"
-
-#: builtin/checkout.c:1491
+#: builtin/checkout.c:1504
msgid "perform a 3-way merge with the new branch"
msgstr "realizar una fusión de tres vías con la rama nueva"
-#: builtin/checkout.c:1492 builtin/log.c:1709 parse-options.h:322
+#: builtin/checkout.c:1505 builtin/log.c:1799 parse-options.h:322
msgid "style"
msgstr "estilo"
-#: builtin/checkout.c:1493
+#: builtin/checkout.c:1506
msgid "conflict style (merge or diff3)"
msgstr "conflicto de estilos (merge o diff3)"
-#: builtin/checkout.c:1505 builtin/worktree.c:558
+#: builtin/checkout.c:1518 builtin/worktree.c:486
msgid "detach HEAD at named commit"
msgstr "desacoplar HEAD en el commit nombrado"
-#: builtin/checkout.c:1506
+#: builtin/checkout.c:1519
msgid "set upstream info for new branch"
msgstr "configurar info de upstream para una rama nueva"
-#: builtin/checkout.c:1508
+#: builtin/checkout.c:1521
msgid "force checkout (throw away local modifications)"
msgstr "forzar el checkout (descartar modificaciones locales)"
-#: builtin/checkout.c:1510
+#: builtin/checkout.c:1523
msgid "new-branch"
msgstr "nueva-rama"
-#: builtin/checkout.c:1510
+#: builtin/checkout.c:1523
msgid "new unparented branch"
msgstr "nueva rama no emparentada"
-#: builtin/checkout.c:1512 builtin/merge.c:292
+#: builtin/checkout.c:1525 builtin/merge.c:301
msgid "update ignored files (default)"
msgstr "actualizar archivos ignorados (default)"
-#: builtin/checkout.c:1515
+#: builtin/checkout.c:1528
msgid "do not check if another worktree is holding the given ref"
msgstr "no revise si otro árbol de trabajo contiene la ref entregada"
-#: builtin/checkout.c:1528
+#: builtin/checkout.c:1541
msgid "checkout our version for unmerged files"
msgstr "hacer checkout a nuestra versión para archivos sin fusionar"
-#: builtin/checkout.c:1531
+#: builtin/checkout.c:1544
msgid "checkout their version for unmerged files"
msgstr "hacer checkout a su versión para los archivos sin fusionar"
-#: builtin/checkout.c:1535
+#: builtin/checkout.c:1548
msgid "do not limit pathspecs to sparse entries only"
msgstr "no limitar pathspecs a dispersar entradas solamente"
-#: builtin/checkout.c:1590
+#: builtin/checkout.c:1603
#, c-format
msgid "-%c, -%c and --orphan are mutually exclusive"
msgstr "-%c, -%c y --orphan son mutuamente exclusivas"
-#: builtin/checkout.c:1594
+#: builtin/checkout.c:1607
msgid "-p and --overlay are mutually exclusive"
msgstr "-p y --overlay son mutuamente exclusivas"
-#: builtin/checkout.c:1631
+#: builtin/checkout.c:1644
msgid "--track needs a branch name"
msgstr "--track necesita el nombre de una rama"
-#: builtin/checkout.c:1636
+#: builtin/checkout.c:1649
#, c-format
msgid "missing branch name; try -%c"
msgstr "falta nombre de rama; prueba -%c"
-#: builtin/checkout.c:1668
+#: builtin/checkout.c:1681
#, c-format
msgid "could not resolve %s"
msgstr "no se pudo resolver %s"
-#: builtin/checkout.c:1684
+#: builtin/checkout.c:1697
msgid "invalid path specification"
msgstr "especificación de ruta inválida"
-#: builtin/checkout.c:1691
+#: builtin/checkout.c:1704
#, c-format
msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
msgstr "'%s' no es un commit y una rama '%s' no puede ser creada desde este"
-#: builtin/checkout.c:1695
+#: builtin/checkout.c:1708
#, c-format
msgid "git checkout: --detach does not take a path argument '%s'"
msgstr "git checkout: --detach no toma un argumento de ruta '%s'"
-#: builtin/checkout.c:1704
+#: builtin/checkout.c:1717
msgid "--pathspec-from-file is incompatible with --detach"
msgstr "--pathspec-from-file es incompatible con --detach"
-#: builtin/checkout.c:1707 builtin/reset.c:325 builtin/stash.c:1503
+#: builtin/checkout.c:1720 builtin/reset.c:325 builtin/stash.c:1566
msgid "--pathspec-from-file is incompatible with --patch"
msgstr "--pathspec-from-file es incompatible con --patch"
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1733
msgid ""
"git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
"checking out of the index."
@@ -11886,70 +12429,70 @@
"git checkout: --ours/--theirs, --force y --merge son incompatibles cuando\n"
"se revisa fuera del índice."
-#: builtin/checkout.c:1723
+#: builtin/checkout.c:1738
msgid "you must specify path(s) to restore"
msgstr "debes especificar path(s) para restaurar"
-#: builtin/checkout.c:1749 builtin/checkout.c:1751 builtin/checkout.c:1800
-#: builtin/checkout.c:1802 builtin/clone.c:121 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2295 builtin/worktree.c:554
-#: builtin/worktree.c:556
+#: builtin/checkout.c:1764 builtin/checkout.c:1766 builtin/checkout.c:1815
+#: builtin/checkout.c:1817 builtin/clone.c:122 builtin/remote.c:170
+#: builtin/remote.c:172 builtin/submodule--helper.c:2719 builtin/worktree.c:482
+#: builtin/worktree.c:484
msgid "branch"
msgstr "rama"
-#: builtin/checkout.c:1750
+#: builtin/checkout.c:1765
msgid "create and checkout a new branch"
msgstr "crear y hacer checkout a una nueva rama"
-#: builtin/checkout.c:1752
+#: builtin/checkout.c:1767
msgid "create/reset and checkout a branch"
msgstr "crear/reiniciar y hacer checkout a una rama"
-#: builtin/checkout.c:1753
+#: builtin/checkout.c:1768
msgid "create reflog for new branch"
msgstr "crear un reflog para una nueva rama"
-#: builtin/checkout.c:1755
+#: builtin/checkout.c:1770
msgid "second guess 'git checkout <no-such-branch>' (default)"
msgstr "adivinar segunda opción 'git checkout <no-hay-tal-rama>' (default)"
-#: builtin/checkout.c:1756
+#: builtin/checkout.c:1771
msgid "use overlay mode (default)"
msgstr "usar modo overlay (default)"
-#: builtin/checkout.c:1801
+#: builtin/checkout.c:1816
msgid "create and switch to a new branch"
msgstr "crear y hacer switch a una nueva rama"
-#: builtin/checkout.c:1803
+#: builtin/checkout.c:1818
msgid "create/reset and switch to a branch"
msgstr "crear/reiniciar y hacer switch a una rama"
-#: builtin/checkout.c:1805
+#: builtin/checkout.c:1820
msgid "second guess 'git switch <no-such-branch>'"
msgstr "adivinar segunda opción 'git checkout <no-hay-tal-rama>'"
-#: builtin/checkout.c:1807
+#: builtin/checkout.c:1822
msgid "throw away local modifications"
msgstr "descartar modificaciones locales"
-#: builtin/checkout.c:1841
+#: builtin/checkout.c:1856
msgid "which tree-ish to checkout from"
msgstr "de qué árbol hacer el checkout"
-#: builtin/checkout.c:1843
+#: builtin/checkout.c:1858
msgid "restore the index"
msgstr "restaurar el index"
-#: builtin/checkout.c:1845
+#: builtin/checkout.c:1860
msgid "restore the working tree (default)"
msgstr "restaurar el árbol de trabajo (default)"
-#: builtin/checkout.c:1847
+#: builtin/checkout.c:1862
msgid "ignore unmerged entries"
msgstr "ignorar entradas no fusionadas"
-#: builtin/checkout.c:1848
+#: builtin/checkout.c:1863
msgid "use overlay mode"
msgstr "usar modo overlay"
@@ -11989,7 +12532,7 @@
msgid "could not lstat %s\n"
msgstr "no se pudo lstat %s\n"
-#: builtin/clean.c:302 git-add--interactive.perl:595
+#: builtin/clean.c:302 git-add--interactive.perl:593
#, c-format
msgid ""
"Prompt help:\n"
@@ -12002,7 +12545,7 @@
"foo - selecciona un objeto basado en un prefijo único\n"
" - (vacío) no elegir nada\n"
-#: builtin/clean.c:306 git-add--interactive.perl:604
+#: builtin/clean.c:306 git-add--interactive.perl:602
#, c-format
msgid ""
"Prompt help:\n"
@@ -12023,8 +12566,8 @@
"* - escoger todos los objetos\n"
" - (vacío) terminar selección\n"
-#: builtin/clean.c:521 git-add--interactive.perl:570
-#: git-add--interactive.perl:575
+#: builtin/clean.c:521 git-add--interactive.perl:568
+#: git-add--interactive.perl:573
#, c-format, perl-format
msgid "Huh (%s)?\n"
msgstr "¿Ahh (%s)?\n"
@@ -12094,8 +12637,8 @@
msgstr "borrar directorios completos"
#: builtin/clean.c:909 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:909 builtin/log.c:182 builtin/log.c:184
-#: builtin/ls-files.c:558 builtin/name-rev.c:526 builtin/name-rev.c:528
+#: builtin/grep.c:922 builtin/log.c:184 builtin/log.c:186
+#: builtin/ls-files.c:573 builtin/name-rev.c:526 builtin/name-rev.c:528
#: builtin/show-ref.c:179
msgid "pattern"
msgstr "patrón"
@@ -12136,163 +12679,163 @@
msgid "git clone [<options>] [--] <repo> [<dir>]"
msgstr "git clone [<opciones>] [--] <repo> [<directorio>]"
-#: builtin/clone.c:93
+#: builtin/clone.c:94
msgid "don't create a checkout"
msgstr "no crear checkout"
-#: builtin/clone.c:94 builtin/clone.c:96 builtin/init-db.c:554
+#: builtin/clone.c:95 builtin/clone.c:97 builtin/init-db.c:555
msgid "create a bare repository"
msgstr "crear un repositorio vacío"
-#: builtin/clone.c:98
+#: builtin/clone.c:99
msgid "create a mirror repository (implies bare)"
msgstr "crear un repositorio espejo (implica vacío)"
-#: builtin/clone.c:100
+#: builtin/clone.c:101
msgid "to clone from a local repository"
msgstr "clonar de un repositorio local"
-#: builtin/clone.c:102
+#: builtin/clone.c:103
msgid "don't use local hardlinks, always copy"
msgstr "no usar hardlinks, siempre copiar"
-#: builtin/clone.c:104
+#: builtin/clone.c:105
msgid "setup as shared repository"
msgstr "configurar como repositorio compartido"
-#: builtin/clone.c:106
+#: builtin/clone.c:107
msgid "pathspec"
msgstr "pathspec"
-#: builtin/clone.c:106
+#: builtin/clone.c:107
msgid "initialize submodules in the clone"
msgstr "inicializar submódulos en el clonado"
-#: builtin/clone.c:110
+#: builtin/clone.c:111
msgid "number of submodules cloned in parallel"
msgstr "numero de submódulos clonados en paralelo"
-#: builtin/clone.c:111 builtin/init-db.c:551
+#: builtin/clone.c:112 builtin/init-db.c:552
msgid "template-directory"
msgstr "directorio-template"
-#: builtin/clone.c:112 builtin/init-db.c:552
+#: builtin/clone.c:113 builtin/init-db.c:553
msgid "directory from which templates will be used"
msgstr "directorio del cual los templates serán usados"
-#: builtin/clone.c:114 builtin/clone.c:116 builtin/submodule--helper.c:1407
-#: builtin/submodule--helper.c:1912
+#: builtin/clone.c:115 builtin/clone.c:117 builtin/submodule--helper.c:1831
+#: builtin/submodule--helper.c:2336
msgid "reference repository"
msgstr "repositorio de referencia"
-#: builtin/clone.c:118 builtin/submodule--helper.c:1409
-#: builtin/submodule--helper.c:1914
+#: builtin/clone.c:119 builtin/submodule--helper.c:1833
+#: builtin/submodule--helper.c:2338
msgid "use --reference only while cloning"
msgstr "usa--reference solamente si estás clonado"
-#: builtin/clone.c:119 builtin/column.c:27 builtin/init-db.c:562
-#: builtin/merge-file.c:46 builtin/pack-objects.c:3514 builtin/repack.c:329
+#: builtin/clone.c:120 builtin/column.c:27 builtin/init-db.c:563
+#: builtin/merge-file.c:46 builtin/pack-objects.c:3561 builtin/repack.c:357
msgid "name"
msgstr "nombre"
-#: builtin/clone.c:120
+#: builtin/clone.c:121
msgid "use <name> instead of 'origin' to track upstream"
msgstr "use <nombre> en lugar de 'origin' para rastrear upstream"
-#: builtin/clone.c:122
+#: builtin/clone.c:123
msgid "checkout <branch> instead of the remote's HEAD"
msgstr "checkout <rama> en lugar de HEAD remota"
-#: builtin/clone.c:124
+#: builtin/clone.c:125
msgid "path to git-upload-pack on the remote"
msgstr "ruta para git-upload-pack en el remoto"
-#: builtin/clone.c:125 builtin/fetch.c:169 builtin/grep.c:848
+#: builtin/clone.c:126 builtin/fetch.c:176 builtin/grep.c:861
#: builtin/pull.c:208
msgid "depth"
msgstr "profundidad"
-#: builtin/clone.c:126
+#: builtin/clone.c:127
msgid "create a shallow clone of that depth"
msgstr "crear un clon superficial para esa profundidad"
-#: builtin/clone.c:127 builtin/fetch.c:171 builtin/pack-objects.c:3503
+#: builtin/clone.c:128 builtin/fetch.c:178 builtin/pack-objects.c:3550
#: builtin/pull.c:211
msgid "time"
msgstr "tiempo"
-#: builtin/clone.c:128
+#: builtin/clone.c:129
msgid "create a shallow clone since a specific time"
msgstr "crear un clon superficial desde el tiempo específico"
-#: builtin/clone.c:129 builtin/fetch.c:173 builtin/fetch.c:196
-#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1304
+#: builtin/clone.c:130 builtin/fetch.c:180 builtin/fetch.c:203
+#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1323
msgid "revision"
msgstr "revision"
-#: builtin/clone.c:130 builtin/fetch.c:174 builtin/pull.c:215
+#: builtin/clone.c:131 builtin/fetch.c:181 builtin/pull.c:215
msgid "deepen history of shallow clone, excluding rev"
msgstr "ahondando historia de clon superficial, excluyendo rev"
-#: builtin/clone.c:132 builtin/submodule--helper.c:1419
-#: builtin/submodule--helper.c:1928
+#: builtin/clone.c:133 builtin/submodule--helper.c:1843
+#: builtin/submodule--helper.c:2352
msgid "clone only one branch, HEAD or --branch"
msgstr "clonar solo una rama,HEAD o --branch"
-#: builtin/clone.c:134
+#: builtin/clone.c:135
msgid "don't clone any tags, and make later fetches not to follow them"
msgstr "no clonar ningún tag, y hacer que los subsiguientes fetch no los sigan"
-#: builtin/clone.c:136
+#: builtin/clone.c:137
msgid "any cloned submodules will be shallow"
msgstr "cualquier submódulo clonado será superficial"
-#: builtin/clone.c:137 builtin/init-db.c:560
+#: builtin/clone.c:138 builtin/init-db.c:561
msgid "gitdir"
msgstr "gitdir"
-#: builtin/clone.c:138 builtin/init-db.c:561
+#: builtin/clone.c:139 builtin/init-db.c:562
msgid "separate git dir from working tree"
msgstr "separa git dir del árbol de trabajo"
-#: builtin/clone.c:139
+#: builtin/clone.c:140
msgid "key=value"
msgstr "llave=valor"
-#: builtin/clone.c:140
+#: builtin/clone.c:141
msgid "set config inside the new repository"
msgstr "configurar config dentro del nuevo repositorio"
-#: builtin/clone.c:142 builtin/fetch.c:191 builtin/ls-remote.c:76
-#: builtin/pull.c:230 builtin/push.c:570 builtin/send-pack.c:171
+#: builtin/clone.c:143 builtin/fetch.c:198 builtin/ls-remote.c:77
+#: builtin/pull.c:230 builtin/push.c:584 builtin/send-pack.c:196
msgid "server-specific"
msgstr "especifico-de-servidor"
-#: builtin/clone.c:142 builtin/fetch.c:191 builtin/ls-remote.c:76
-#: builtin/pull.c:231 builtin/push.c:570 builtin/send-pack.c:172
+#: builtin/clone.c:143 builtin/fetch.c:198 builtin/ls-remote.c:77
+#: builtin/pull.c:231 builtin/push.c:584 builtin/send-pack.c:197
msgid "option to transmit"
msgstr "opción para trasmitir"
-#: builtin/clone.c:143 builtin/fetch.c:192 builtin/pull.c:234
-#: builtin/push.c:571
+#: builtin/clone.c:144 builtin/fetch.c:199 builtin/pull.c:234
+#: builtin/push.c:585
msgid "use IPv4 addresses only"
msgstr "solo usar direcciones IPv4"
-#: builtin/clone.c:145 builtin/fetch.c:194 builtin/pull.c:237
-#: builtin/push.c:573
+#: builtin/clone.c:146 builtin/fetch.c:201 builtin/pull.c:237
+#: builtin/push.c:587
msgid "use IPv6 addresses only"
msgstr "solo usar direcciones IPv6"
-#: builtin/clone.c:149
+#: builtin/clone.c:150
msgid "any cloned submodules will use their remote-tracking branch"
msgstr "cualquier submódulo clonado usará su branch de rastreo remoto"
-#: builtin/clone.c:151
+#: builtin/clone.c:152
msgid "initialize sparse-checkout file to include only files at root"
msgstr ""
"inicializar archivo sparse-checkout para incluir solo archivos en la raíz"
-#: builtin/clone.c:287
+#: builtin/clone.c:288
msgid ""
"No directory name could be guessed.\n"
"Please specify a directory on the command line"
@@ -12300,42 +12843,42 @@
"No se pudo adivinar ningún nombre de directorio.\n"
"Por favor especifique un directorio en la línea de comando"
-#: builtin/clone.c:340
+#: builtin/clone.c:341
#, c-format
msgid "info: Could not add alternate for '%s': %s\n"
msgstr "info: No se pudo agregar un alterno para '%s': %s\n"
-#: builtin/clone.c:413
+#: builtin/clone.c:414
#, c-format
msgid "%s exists and is not a directory"
msgstr "%s existe pero no es un directorio"
-#: builtin/clone.c:431
+#: builtin/clone.c:432
#, c-format
msgid "failed to start iterator over '%s'"
msgstr "falló al iniciar el iterador sobre '%s'"
-#: builtin/clone.c:462
+#: builtin/clone.c:463
#, c-format
msgid "failed to create link '%s'"
msgstr "falló al crear link '%s'"
-#: builtin/clone.c:466
+#: builtin/clone.c:467
#, c-format
msgid "failed to copy file to '%s'"
msgstr "falló al copiar archivo a '%s'"
-#: builtin/clone.c:471
+#: builtin/clone.c:472
#, c-format
msgid "failed to iterate over '%s'"
msgstr "falló al iterar sobre '%s'"
-#: builtin/clone.c:498
+#: builtin/clone.c:499
#, c-format
msgid "done.\n"
msgstr "hecho.\n"
-#: builtin/clone.c:512
+#: builtin/clone.c:513
msgid ""
"Clone succeeded, but checkout failed.\n"
"You can inspect what was checked out with 'git status'\n"
@@ -12345,100 +12888,105 @@
"Puedes inspeccionar a qué se hizo checkout con 'git status'\n"
"y volver a intentarlo con 'git restore --source=HEAD :/'\n"
-#: builtin/clone.c:589
+#: builtin/clone.c:590
#, c-format
msgid "Could not find remote branch %s to clone."
msgstr "No se pudo encontrar la rama remota %s para clonar."
-#: builtin/clone.c:708
+#: builtin/clone.c:709
#, c-format
msgid "unable to update %s"
msgstr "incapaz de actualizar %s"
-#: builtin/clone.c:756
+#: builtin/clone.c:757
msgid "failed to initialize sparse-checkout"
msgstr "falló al inicializar sparse-checkout"
-#: builtin/clone.c:779
+#: builtin/clone.c:780
msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
msgstr ""
"remoto HEAD refiere a un ref inexistente, no se puede hacer checkout.\n"
-#: builtin/clone.c:811
+#: builtin/clone.c:812
msgid "unable to checkout working tree"
msgstr "no es posible realizar checkout en el árbol de trabajo"
-#: builtin/clone.c:868
+#: builtin/clone.c:887
msgid "unable to write parameters to config file"
msgstr "no es posible escribir parámetros al archivo config"
-#: builtin/clone.c:931
+#: builtin/clone.c:950
msgid "cannot repack to clean up"
msgstr "no se puede reempaquetar para limpiar"
-#: builtin/clone.c:933
+#: builtin/clone.c:952
msgid "cannot unlink temporary alternates file"
msgstr "no se puede desvincular archivos alternos temporales"
-#: builtin/clone.c:971 builtin/receive-pack.c:1982
+#: builtin/clone.c:993 builtin/receive-pack.c:2493
msgid "Too many arguments."
msgstr "Muchos argumentos."
-#: builtin/clone.c:975
+#: builtin/clone.c:997
msgid "You must specify a repository to clone."
msgstr "Tienes que especificar un repositorio para clonar."
-#: builtin/clone.c:988
+#: builtin/clone.c:1010
#, c-format
msgid "--bare and --origin %s options are incompatible."
msgstr "Las opciones --bare y --origin %s son incompatibles."
-#: builtin/clone.c:991
+#: builtin/clone.c:1013
msgid "--bare and --separate-git-dir are incompatible."
msgstr "--bare y --separate-git-dir son incompatibles."
-#: builtin/clone.c:1007
+#: builtin/clone.c:1026
#, c-format
msgid "repository '%s' does not exist"
msgstr "repositorio '%s' no existe"
-#: builtin/clone.c:1011 builtin/fetch.c:1794
+#: builtin/clone.c:1030 builtin/fetch.c:1951
#, c-format
msgid "depth %s is not a positive number"
msgstr "profundidad %s no es un numero positivo"
-#: builtin/clone.c:1021
+#: builtin/clone.c:1040
#, c-format
msgid "destination path '%s' already exists and is not an empty directory."
msgstr "la ruta de destino '%s' ya existe y no es un directorio vacío."
-#: builtin/clone.c:1033
+#: builtin/clone.c:1046
+#, c-format
+msgid "repository path '%s' already exists and is not an empty directory."
+msgstr "La ruta del repositorio '%s' ya existe y no es un directorio vacío."
+
+#: builtin/clone.c:1060
#, c-format
msgid "working tree '%s' already exists."
msgstr "directorio de trabajo '%s' ya existe."
-#: builtin/clone.c:1048 builtin/clone.c:1069 builtin/difftool.c:271
-#: builtin/log.c:1886 builtin/worktree.c:354 builtin/worktree.c:386
+#: builtin/clone.c:1075 builtin/clone.c:1096 builtin/difftool.c:271
+#: builtin/log.c:1986 builtin/worktree.c:282 builtin/worktree.c:314
#, c-format
msgid "could not create leading directories of '%s'"
msgstr "no se pudo crear directorios principales de '%s'"
-#: builtin/clone.c:1053
+#: builtin/clone.c:1080
#, c-format
msgid "could not create work tree dir '%s'"
msgstr "no se pudo crear un árbol de trabajo '%s'"
-#: builtin/clone.c:1073
+#: builtin/clone.c:1100
#, c-format
msgid "Cloning into bare repository '%s'...\n"
msgstr "Clonando en un repositorio vacío '%s'...\n"
-#: builtin/clone.c:1075
+#: builtin/clone.c:1102
#, c-format
msgid "Cloning into '%s'...\n"
msgstr "Clonando en '%s'...\n"
-#: builtin/clone.c:1099
+#: builtin/clone.c:1126
msgid ""
"clone --recursive is not compatible with both --reference and --reference-if-"
"able"
@@ -12446,36 +12994,41 @@
"clone --recursive no es compatible con --reference y --reference-if-able al "
"mismo tiempo"
-#: builtin/clone.c:1164
+#: builtin/clone.c:1170 builtin/remote.c:200 builtin/remote.c:705
+#, c-format
+msgid "'%s' is not a valid remote name"
+msgstr "'%s' no es un nombre remoto válido"
+
+#: builtin/clone.c:1211
msgid "--depth is ignored in local clones; use file:// instead."
msgstr "--depth es ignorada en clonaciones locales; usa file:// más bien."
-#: builtin/clone.c:1166
+#: builtin/clone.c:1213
msgid "--shallow-since is ignored in local clones; use file:// instead."
msgstr "--shallow-since es ignorado en el clon local; use file:// ."
-#: builtin/clone.c:1168
+#: builtin/clone.c:1215
msgid "--shallow-exclude is ignored in local clones; use file:// instead."
msgstr "--shallow-exclude es ignorado en clones locales; use file://."
-#: builtin/clone.c:1170
+#: builtin/clone.c:1217
msgid "--filter is ignored in local clones; use file:// instead."
msgstr "--filter es ignorado en clones locales; usa file:// en su lugar."
-#: builtin/clone.c:1173
+#: builtin/clone.c:1220
msgid "source repository is shallow, ignoring --local"
msgstr "repositorio fuente es superficial, ignorando --local"
-#: builtin/clone.c:1178
+#: builtin/clone.c:1225
msgid "--local is ignored"
msgstr "--local es ignorado"
-#: builtin/clone.c:1262 builtin/clone.c:1270
+#: builtin/clone.c:1315 builtin/clone.c:1323
#, c-format
msgid "Remote branch %s not found in upstream %s"
msgstr "Rama remota %s no encontrada en upstream %s"
-#: builtin/clone.c:1273
+#: builtin/clone.c:1326
msgid "You appear to have cloned an empty repository."
msgstr "Pareces haber clonado un repositorio sin contenido."
@@ -12511,102 +13064,106 @@
msgid "--command must be the first argument"
msgstr "--command debe ser el primer argumento"
-#: builtin/commit-graph.c:13 builtin/commit-graph.c:21
+#: builtin/commit-graph.c:13 builtin/commit-graph.c:22
msgid ""
"git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
msgstr ""
"git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
-#: builtin/commit-graph.c:14 builtin/commit-graph.c:26
+#: builtin/commit-graph.c:14 builtin/commit-graph.c:27
msgid ""
"git commit-graph write [--object-dir <objdir>] [--append] [--"
"split[=<strategy>]] [--reachable|--stdin-packs|--stdin-commits] [--changed-"
-"paths] [--[no-]progress] <split options>"
+"paths] [--[no-]max-new-filters <n>] [--[no-]progress] <split options>"
msgstr ""
-"git commit-graph write [--object-dir <objeto dir>] [--append] [--"
+"git commit-graph write [--object-dir <objdir>] [--append] [--"
"split[=<estrategia>]] [--reachable|--stdin-packs|--stdin-commits] [--changed-"
-"paths] [--[no-]progress] <opciones de split>"
+"paths] [--[no-]max-new-filters <n>] [--[no-]progress] <opciones de split>"
-#: builtin/commit-graph.c:62
+#: builtin/commit-graph.c:64
#, c-format
msgid "could not find object directory matching %s"
msgstr "no se pudo entoncrar el objeto directorio concordante con %s"
-#: builtin/commit-graph.c:78 builtin/commit-graph.c:177
-#: builtin/commit-graph.c:276 builtin/fetch.c:180 builtin/log.c:1678
+#: builtin/commit-graph.c:80 builtin/commit-graph.c:210
+#: builtin/commit-graph.c:316 builtin/fetch.c:187 builtin/log.c:1768
msgid "dir"
msgstr "dir"
-#: builtin/commit-graph.c:79 builtin/commit-graph.c:178
-#: builtin/commit-graph.c:277
-msgid "The object directory to store the graph"
-msgstr "El directorio de objetos para guardar el gráfico"
+#: builtin/commit-graph.c:81 builtin/commit-graph.c:211
+#: builtin/commit-graph.c:317
+msgid "the object directory to store the graph"
+msgstr "el directorio de objetos para guardar el gráfico"
-#: builtin/commit-graph.c:81
+#: builtin/commit-graph.c:83
msgid "if the commit-graph is split, only verify the tip file"
msgstr "si el commit-graph está cortado, solo verifica la punta del archivo"
-#: builtin/commit-graph.c:104
+#: builtin/commit-graph.c:106
#, c-format
msgid "Could not open commit-graph '%s'"
msgstr "No se pudo abrir commit-graph '%s'"
-#: builtin/commit-graph.c:138
+#: builtin/commit-graph.c:142
#, c-format
msgid "unrecognized --split argument, %s"
msgstr "argumento --split no reconocido, %s"
-#: builtin/commit-graph.c:151
+#: builtin/commit-graph.c:155
#, c-format
msgid "unexpected non-hex object ID: %s"
msgstr "ID de objeto no hex inesperado :%s"
-#: builtin/commit-graph.c:156
+#: builtin/commit-graph.c:160
#, c-format
msgid "invalid object: %s"
msgstr "no es un objeto válido: %s"
-#: builtin/commit-graph.c:180
+#: builtin/commit-graph.c:213
msgid "start walk at all refs"
msgstr "comenzar caminata en todas las refs"
-#: builtin/commit-graph.c:182
+#: builtin/commit-graph.c:215
msgid "scan pack-indexes listed by stdin for commits"
msgstr "escanear paquete de índices por stdin por commits"
-#: builtin/commit-graph.c:184
+#: builtin/commit-graph.c:217
msgid "start walk at commits listed by stdin"
msgstr "comenzar a caminar a los commits listados por stdin"
-#: builtin/commit-graph.c:186
+#: builtin/commit-graph.c:219
msgid "include all commits already in the commit-graph file"
msgstr "inclye todos los commits que ya están en el archivo commit-graph"
-#: builtin/commit-graph.c:188
+#: builtin/commit-graph.c:221
msgid "enable computation for changed paths"
msgstr "habilitar computación para rutas cambiadas"
-#: builtin/commit-graph.c:191
+#: builtin/commit-graph.c:224
msgid "allow writing an incremental commit-graph file"
msgstr "permitir escribir un archivo commit-graph incremental"
-#: builtin/commit-graph.c:195
+#: builtin/commit-graph.c:228
msgid "maximum number of commits in a non-base split commit-graph"
msgstr "máximo número de commits en un commit-graph sin base cortada"
-#: builtin/commit-graph.c:197
+#: builtin/commit-graph.c:230
msgid "maximum ratio between two levels of a split commit-graph"
msgstr "radio máximo entre dos niveles de corte de commit-graph"
-#: builtin/commit-graph.c:199
+#: builtin/commit-graph.c:232
msgid "only expire files older than a given date-time"
msgstr "expirar objetos más viejos a una fecha dada"
-#: builtin/commit-graph.c:215
+#: builtin/commit-graph.c:234
+msgid "maximum number of changed-path Bloom filters to compute"
+msgstr "número máximo de cambios de ruta de filtro Bloom para computar"
+
+#: builtin/commit-graph.c:255
msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs"
msgstr "use como máximo uno de --reachable, --stdin-commits, o --stdin-packs"
-#: builtin/commit-graph.c:245
+#: builtin/commit-graph.c:287
msgid "Collecting commits from input"
msgstr "Recolectando commits del input"
@@ -12623,7 +13180,7 @@
msgid "duplicate parent %s ignored"
msgstr "padre duplicado %s ignorado"
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:547
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:557
#, c-format
msgid "not a valid object name %s"
msgstr "no es un nombre de objeto válido %s"
@@ -12651,13 +13208,13 @@
msgid "id of a parent commit object"
msgstr "id del objeto commit padre"
-#: builtin/commit-tree.c:114 builtin/commit.c:1506 builtin/merge.c:273
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1474
-#: builtin/tag.c:413
+#: builtin/commit-tree.c:114 builtin/commit.c:1504 builtin/merge.c:282
+#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1537
+#: builtin/tag.c:445
msgid "message"
msgstr "mensaje"
-#: builtin/commit-tree.c:115 builtin/commit.c:1506
+#: builtin/commit-tree.c:115 builtin/commit.c:1504
msgid "commit message"
msgstr "mensaje del commit"
@@ -12665,7 +13222,7 @@
msgid "read commit log message from file"
msgstr "leer mensaje de commit desde un archivo"
-#: builtin/commit-tree.c:121 builtin/commit.c:1518 builtin/merge.c:290
+#: builtin/commit-tree.c:121 builtin/commit.c:1516 builtin/merge.c:299
#: builtin/pull.c:176 builtin/revert.c:118
msgid "GPG sign commit"
msgstr "Firmar commit con GPG"
@@ -12815,12 +13372,12 @@
"no es posible seleccionar un carácter de comentario que no es usado\n"
"en el mensaje de commit actual"
-#: builtin/commit.c:717 builtin/commit.c:750 builtin/commit.c:1099
+#: builtin/commit.c:717 builtin/commit.c:750 builtin/commit.c:1097
#, c-format
msgid "could not lookup commit %s"
msgstr "no se pudo revisar el commit %s"
-#: builtin/commit.c:729 builtin/shortlog.c:319
+#: builtin/commit.c:729 builtin/shortlog.c:413
#, c-format
msgid "(reading log message from standard input)\n"
msgstr "(leyendo mensajes de logs desde standard input)\n"
@@ -12846,37 +13403,35 @@
msgid "could not write commit template"
msgstr "no se pudo escribir el template del commit"
-#: builtin/commit.c:852
-#, c-format
+#: builtin/commit.c:853
msgid ""
"\n"
"It looks like you may be committing a merge.\n"
-"If this is not correct, please remove the file\n"
-"\t%s\n"
+"If this is not correct, please run\n"
+"\tgit update-ref -d MERGE_HEAD\n"
"and try again.\n"
msgstr ""
"\n"
-"Parece que estás haciendo un commit con una fusión dentro.\n"
-"Si esto no es correcto, por favor elimina el archivo\n"
-"\t%s\n"
-"y vuelve a intentar.\n"
+"Parece que está realizando una fusión.\n"
+"Si esto no es correcto, ejecute\n"
+"\tgit update-ref -d MERGE_HEAD\n"
+"e intenta de nuevo.\n"
-#: builtin/commit.c:857
-#, c-format
+#: builtin/commit.c:858
msgid ""
"\n"
"It looks like you may be committing a cherry-pick.\n"
-"If this is not correct, please remove the file\n"
-"\t%s\n"
+"If this is not correct, please run\n"
+"\tgit update-ref -d CHERRY_PICK_HEAD\n"
"and try again.\n"
msgstr ""
"\n"
-"Parece que puedes estar haciendo un commit a un cherry-pick.\n"
-"Si esto no es correcto, por favor elimina el archivo\n"
-"\t%s\n"
-"y vuelve a intentar.\n"
+"Parece que puede estar cometiendo una selección de cerebros.\n"
+"Si esto no es correcto, ejecute\n"
+"\tgit update-ref -d CHERRY_PICK_HEAD\n"
+"e intenta de nuevo.\n"
-#: builtin/commit.c:870
+#: builtin/commit.c:868
#, c-format
msgid ""
"Please enter the commit message for your changes. Lines starting\n"
@@ -12886,7 +13441,7 @@
" líneas que comiencen con '%c' serán ignoradas, y un mensaje\n"
" vacío aborta el commit.\n"
-#: builtin/commit.c:878
+#: builtin/commit.c:876
#, c-format
msgid ""
"Please enter the commit message for your changes. Lines starting\n"
@@ -12898,147 +13453,147 @@
" usted mismo si lo desea.\n"
"Un mensaje vacío aborta el commit.\n"
-#: builtin/commit.c:895
+#: builtin/commit.c:893
#, c-format
msgid "%sAuthor: %.*s <%.*s>"
msgstr "%sAutor: %.*s <%.*s>"
-#: builtin/commit.c:903
+#: builtin/commit.c:901
#, c-format
msgid "%sDate: %s"
msgstr "%sFecha: %s"
-#: builtin/commit.c:910
+#: builtin/commit.c:908
#, c-format
msgid "%sCommitter: %.*s <%.*s>"
msgstr "%sCommitter: %.*s <%.*s>"
-#: builtin/commit.c:928
+#: builtin/commit.c:926
msgid "Cannot read index"
msgstr "No se puede leer el índice"
-#: builtin/commit.c:999
+#: builtin/commit.c:997
msgid "Error building trees"
msgstr "Error al construir los árboles"
-#: builtin/commit.c:1013 builtin/tag.c:276
+#: builtin/commit.c:1011 builtin/tag.c:308
#, c-format
msgid "Please supply the message using either -m or -F option.\n"
msgstr "Por favor suministra el mensaje usando las opciones -m o -F.\n"
-#: builtin/commit.c:1057
+#: builtin/commit.c:1055
#, c-format
msgid "--author '%s' is not 'Name <email>' and matches no existing author"
msgstr ""
"--author '%s' no está en el formato 'Name <email>' y no concuerda con ningún "
"autor existente"
-#: builtin/commit.c:1071
+#: builtin/commit.c:1069
#, c-format
msgid "Invalid ignored mode '%s'"
msgstr "Modo ignorado inválido '%s'"
-#: builtin/commit.c:1089 builtin/commit.c:1333
+#: builtin/commit.c:1087 builtin/commit.c:1331
#, c-format
msgid "Invalid untracked files mode '%s'"
msgstr "Modo inválido de los archivos no rastreados '%s'"
-#: builtin/commit.c:1129
+#: builtin/commit.c:1127
msgid "--long and -z are incompatible"
msgstr "--long y -z son incompatibles"
-#: builtin/commit.c:1173
+#: builtin/commit.c:1171
msgid "Using both --reset-author and --author does not make sense"
msgstr "Usar ambos --reset-author y --author no tiene sentido"
-#: builtin/commit.c:1182
+#: builtin/commit.c:1180
msgid "You have nothing to amend."
msgstr "No tienes nada que enmendar."
-#: builtin/commit.c:1185
+#: builtin/commit.c:1183
msgid "You are in the middle of a merge -- cannot amend."
msgstr "Estás en medio de una fusión -- no puedes enmendar."
-#: builtin/commit.c:1187
+#: builtin/commit.c:1185
msgid "You are in the middle of a cherry-pick -- cannot amend."
msgstr "Está en medio de un cherry-pick -- no se puede enmendar."
-#: builtin/commit.c:1189
+#: builtin/commit.c:1187
msgid "You are in the middle of a rebase -- cannot amend."
msgstr "Estás en medio de una fusión -- no puedes enmendar."
-#: builtin/commit.c:1192
+#: builtin/commit.c:1190
msgid "Options --squash and --fixup cannot be used together"
msgstr "Opciones --squash y --fixup no pueden ser usadas juntas"
-#: builtin/commit.c:1202
+#: builtin/commit.c:1200
msgid "Only one of -c/-C/-F/--fixup can be used."
msgstr "Solo uno de -c/-C/-F/--fixup puede ser usado."
-#: builtin/commit.c:1204
+#: builtin/commit.c:1202
msgid "Option -m cannot be combined with -c/-C/-F."
msgstr "La opción -m no puede ser combinada con -c/-C/-F."
-#: builtin/commit.c:1213
+#: builtin/commit.c:1211
msgid "--reset-author can be used only with -C, -c or --amend."
msgstr "--reset-author sólo puede ser usada con -C, -c o --amend."
-#: builtin/commit.c:1231
+#: builtin/commit.c:1229
msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
msgstr ""
"Solo uno de --include/--only/--all/--interactive/--patch puede ser usado."
-#: builtin/commit.c:1237
+#: builtin/commit.c:1235
#, c-format
msgid "paths '%s ...' with -a does not make sense"
msgstr "paths '%s ...' con -a no tiene sentido"
-#: builtin/commit.c:1368 builtin/commit.c:1529
+#: builtin/commit.c:1366 builtin/commit.c:1527
msgid "show status concisely"
msgstr "mostrar status de manera concisa"
-#: builtin/commit.c:1370 builtin/commit.c:1531
+#: builtin/commit.c:1368 builtin/commit.c:1529
msgid "show branch information"
msgstr "mostrar información de la rama"
-#: builtin/commit.c:1372
+#: builtin/commit.c:1370
msgid "show stash information"
msgstr "mostrar información del stash"
-#: builtin/commit.c:1374 builtin/commit.c:1533
+#: builtin/commit.c:1372 builtin/commit.c:1531
msgid "compute full ahead/behind values"
msgstr "calcular todos los valores delante/atrás"
-#: builtin/commit.c:1376
+#: builtin/commit.c:1374
msgid "version"
msgstr "version"
-#: builtin/commit.c:1376 builtin/commit.c:1535 builtin/push.c:549
-#: builtin/worktree.c:722
+#: builtin/commit.c:1374 builtin/commit.c:1533 builtin/push.c:560
+#: builtin/worktree.c:679
msgid "machine-readable output"
msgstr "output formato-maquina"
-#: builtin/commit.c:1379 builtin/commit.c:1537
+#: builtin/commit.c:1377 builtin/commit.c:1535
msgid "show status in long format (default)"
msgstr "mostrar status en formato largo (default)"
-#: builtin/commit.c:1382 builtin/commit.c:1540
+#: builtin/commit.c:1380 builtin/commit.c:1538
msgid "terminate entries with NUL"
msgstr "terminar entradas con NUL"
-#: builtin/commit.c:1384 builtin/commit.c:1388 builtin/commit.c:1543
-#: builtin/fast-export.c:1199 builtin/fast-export.c:1202
-#: builtin/fast-export.c:1205 builtin/rebase.c:1392 parse-options.h:336
+#: builtin/commit.c:1382 builtin/commit.c:1386 builtin/commit.c:1541
+#: builtin/fast-export.c:1198 builtin/fast-export.c:1201
+#: builtin/fast-export.c:1204 builtin/rebase.c:1412 parse-options.h:336
msgid "mode"
msgstr "modo"
-#: builtin/commit.c:1385 builtin/commit.c:1543
+#: builtin/commit.c:1383 builtin/commit.c:1541
msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
msgstr ""
"mostrar archivos sin seguimiento, modos opcionales: all, normal, no. "
"(Predeterminado: all)"
-#: builtin/commit.c:1389
+#: builtin/commit.c:1387
msgid ""
"show ignored files, optional modes: traditional, matching, no. (Default: "
"traditional)"
@@ -13046,11 +13601,11 @@
"mostrar archivos ignorados, modos opcionales: traditional, matching, no. "
"(Predeterminado: traditional)"
-#: builtin/commit.c:1391 parse-options.h:192
+#: builtin/commit.c:1389 parse-options.h:192
msgid "when"
msgstr "cuando"
-#: builtin/commit.c:1392
+#: builtin/commit.c:1390
msgid ""
"ignore changes to submodules, optional when: all, dirty, untracked. "
"(Default: all)"
@@ -13058,173 +13613,173 @@
"ignorar cambios en submódulos, opcional cuando: all,dirty,untracked. "
"(Default: all)"
-#: builtin/commit.c:1394
+#: builtin/commit.c:1392
msgid "list untracked files in columns"
msgstr "listar en columnas los archivos sin seguimiento"
-#: builtin/commit.c:1395
+#: builtin/commit.c:1393
msgid "do not detect renames"
msgstr "no detectar renombrados"
-#: builtin/commit.c:1397
+#: builtin/commit.c:1395
msgid "detect renames, optionally set similarity index"
msgstr "detectar renombres, opcionalmente configurar similaridad de índice"
-#: builtin/commit.c:1417
+#: builtin/commit.c:1415
msgid "Unsupported combination of ignored and untracked-files arguments"
msgstr ""
"Combinación de argumentos de archivos ignorados y no rastreados no soportada"
-#: builtin/commit.c:1499
+#: builtin/commit.c:1497
msgid "suppress summary after successful commit"
msgstr "suprime summary tras un commit exitoso"
-#: builtin/commit.c:1500
+#: builtin/commit.c:1498
msgid "show diff in commit message template"
msgstr "mostrar diff en el template del mensaje de commit"
-#: builtin/commit.c:1502
+#: builtin/commit.c:1500
msgid "Commit message options"
msgstr "Opciones para el mensaje del commit"
-#: builtin/commit.c:1503 builtin/merge.c:277 builtin/tag.c:415
+#: builtin/commit.c:1501 builtin/merge.c:286 builtin/tag.c:447
msgid "read message from file"
msgstr "leer mensaje desde un archivo"
-#: builtin/commit.c:1504
+#: builtin/commit.c:1502
msgid "author"
msgstr "autor"
-#: builtin/commit.c:1504
+#: builtin/commit.c:1502
msgid "override author for commit"
msgstr "sobrescribe el autor del commit"
-#: builtin/commit.c:1505 builtin/gc.c:538
+#: builtin/commit.c:1503 builtin/gc.c:550
msgid "date"
msgstr "fecha"
-#: builtin/commit.c:1505
+#: builtin/commit.c:1503
msgid "override date for commit"
msgstr "sobrescribe la fecha del commit"
-#: builtin/commit.c:1507 builtin/commit.c:1508 builtin/commit.c:1509
-#: builtin/commit.c:1510 parse-options.h:328 ref-filter.h:92
+#: builtin/commit.c:1505 builtin/commit.c:1506 builtin/commit.c:1507
+#: builtin/commit.c:1508 parse-options.h:328 ref-filter.h:90
msgid "commit"
msgstr "confirmar"
-#: builtin/commit.c:1507
+#: builtin/commit.c:1505
msgid "reuse and edit message from specified commit"
msgstr "reusar y editar el mensaje de un commit especifico"
-#: builtin/commit.c:1508
+#: builtin/commit.c:1506
msgid "reuse message from specified commit"
msgstr "reusar el mensaje de un commit especifico"
-#: builtin/commit.c:1509
+#: builtin/commit.c:1507
msgid "use autosquash formatted message to fixup specified commit"
msgstr ""
"usar mensaje de formato autosquash para arreglar el commit especificado"
-#: builtin/commit.c:1510
+#: builtin/commit.c:1508
msgid "use autosquash formatted message to squash specified commit"
msgstr ""
"usar el mensaje de formato autosquash para realizar squash al commit "
"especificado"
-#: builtin/commit.c:1511
+#: builtin/commit.c:1509
msgid "the commit is authored by me now (used with -C/-c/--amend)"
msgstr "el autor del commit soy yo ahora (usado con -C/-c/--amend)"
-#: builtin/commit.c:1512 builtin/log.c:1655 builtin/merge.c:293
+#: builtin/commit.c:1510 builtin/log.c:1743 builtin/merge.c:302
#: builtin/pull.c:145 builtin/revert.c:110
-msgid "add Signed-off-by:"
-msgstr "agregar Signed-off-by: (firmado por)"
+msgid "add a Signed-off-by trailer"
+msgstr "agregar un firmado por al final"
-#: builtin/commit.c:1513
+#: builtin/commit.c:1511
msgid "use specified template file"
msgstr "usar archivo de template especificado"
-#: builtin/commit.c:1514
+#: builtin/commit.c:1512
msgid "force edit of commit"
msgstr "forzar la edición del commit"
-#: builtin/commit.c:1516
+#: builtin/commit.c:1514
msgid "include status in commit message template"
msgstr "incluir status en el template del mensaje de commit"
-#: builtin/commit.c:1521
+#: builtin/commit.c:1519
msgid "Commit contents options"
msgstr "Opciones para el contenido del commit"
-#: builtin/commit.c:1522
+#: builtin/commit.c:1520
msgid "commit all changed files"
msgstr "confirmar todos los archivos cambiados"
-#: builtin/commit.c:1523
+#: builtin/commit.c:1521
msgid "add specified files to index for commit"
msgstr "agregar archivos específicos al índice para confirmar"
-#: builtin/commit.c:1524
+#: builtin/commit.c:1522
msgid "interactively add files"
msgstr "agregar archivos interactivamente"
-#: builtin/commit.c:1525
+#: builtin/commit.c:1523
msgid "interactively add changes"
msgstr "agregar cambios interactivamente"
-#: builtin/commit.c:1526
+#: builtin/commit.c:1524
msgid "commit only specified files"
msgstr "sólo confirmar archivos específicos"
-#: builtin/commit.c:1527
+#: builtin/commit.c:1525
msgid "bypass pre-commit and commit-msg hooks"
msgstr "evitar los capturadores (hooks) de pre-commit y commit-msg"
-#: builtin/commit.c:1528
+#: builtin/commit.c:1526
msgid "show what would be committed"
msgstr "mostrar lo que sería incluido en el commit"
-#: builtin/commit.c:1541
+#: builtin/commit.c:1539
msgid "amend previous commit"
msgstr "enmendar commit previo"
-#: builtin/commit.c:1542
+#: builtin/commit.c:1540
msgid "bypass post-rewrite hook"
msgstr "gancho bypass post reescritura"
-#: builtin/commit.c:1549
+#: builtin/commit.c:1547
msgid "ok to record an empty change"
msgstr "ok al grabar un cambio vacío"
-#: builtin/commit.c:1551
+#: builtin/commit.c:1549
msgid "ok to record a change with an empty message"
msgstr "ok al grabar un cambio con un mensaje vacío"
-#: builtin/commit.c:1624
+#: builtin/commit.c:1622
#, c-format
msgid "Corrupt MERGE_HEAD file (%s)"
msgstr "Archivo MERGE_HEAD (%s) corrupto"
-#: builtin/commit.c:1631
+#: builtin/commit.c:1629
msgid "could not read MERGE_MODE"
msgstr "no se pudo leer MERGE_MODE"
-#: builtin/commit.c:1652
+#: builtin/commit.c:1650
#, c-format
msgid "could not read commit message: %s"
msgstr "no se pudo leer el mensaje de commit: %s"
-#: builtin/commit.c:1659
+#: builtin/commit.c:1657
#, c-format
msgid "Aborting commit due to empty commit message.\n"
msgstr "Abortando commit debido que el mensaje está en blanco.\n"
-#: builtin/commit.c:1664
+#: builtin/commit.c:1662
#, c-format
msgid "Aborting commit; you did not edit the message.\n"
msgstr "Abortando commit; no se ha editado el mensaje\n"
-#: builtin/commit.c:1698
+#: builtin/commit.c:1696
msgid ""
"repository has been updated, but unable to write\n"
"new_index file. Check that disk is not full and quota is\n"
@@ -13238,212 +13793,220 @@
msgid "git config [<options>]"
msgstr "git config [<opciones>]"
-#: builtin/config.c:104 builtin/env--helper.c:23
+#: builtin/config.c:109 builtin/env--helper.c:27
#, c-format
msgid "unrecognized --type argument, %s"
msgstr "argumento --type no reconocido, %s"
-#: builtin/config.c:116
+#: builtin/config.c:121
msgid "only one type at a time"
msgstr "solo un tipo a la vez"
-#: builtin/config.c:125
+#: builtin/config.c:130
msgid "Config file location"
msgstr "Ubicación del archivo configuración"
-#: builtin/config.c:126
+#: builtin/config.c:131
msgid "use global config file"
msgstr "usar archivo de config global"
-#: builtin/config.c:127
+#: builtin/config.c:132
msgid "use system config file"
msgstr "usar archivo de config del sistema"
-#: builtin/config.c:128
+#: builtin/config.c:133
msgid "use repository config file"
msgstr "usar archivo de config del repositorio"
-#: builtin/config.c:129
+#: builtin/config.c:134
msgid "use per-worktree config file"
msgstr "usar un archivo de config por árbol de trabajo"
-#: builtin/config.c:130
+#: builtin/config.c:135
msgid "use given config file"
msgstr "usar archivo config especificado"
-#: builtin/config.c:131
+#: builtin/config.c:136
msgid "blob-id"
msgstr "blob-id"
-#: builtin/config.c:131
+#: builtin/config.c:136
msgid "read config from given blob object"
msgstr "leer config del objeto blob suministrado"
-#: builtin/config.c:132
+#: builtin/config.c:137
msgid "Action"
msgstr "Acción"
-#: builtin/config.c:133
-msgid "get value: name [value-regex]"
-msgstr "obtener valor: nombre [valor-regex]"
+#: builtin/config.c:138
+msgid "get value: name [value-pattern]"
+msgstr "obtener valor: nombre [patrón de valor]"
-#: builtin/config.c:134
-msgid "get all values: key [value-regex]"
-msgstr "obtener todos los valores: llave [valores-regex]"
+#: builtin/config.c:139
+msgid "get all values: key [value-pattern]"
+msgstr "obtener todos los valores: clave [patrón de valor]"
-#: builtin/config.c:135
-msgid "get values for regexp: name-regex [value-regex]"
-msgstr "obtener valores para una regexp: nombre-regex [valor-regex]"
+#: builtin/config.c:140
+msgid "get values for regexp: name-regex [value-pattern]"
+msgstr "obtener valores para regexp: name-regex [value-pattern]"
-#: builtin/config.c:136
+#: builtin/config.c:141
msgid "get value specific for the URL: section[.var] URL"
msgstr "obtener valor especifico para el URL: sección[.var] URL"
-#: builtin/config.c:137
-msgid "replace all matching variables: name value [value_regex]"
+#: builtin/config.c:142
+msgid "replace all matching variables: name value [value-pattern]"
msgstr ""
-"remplazar todas las variables que concuerden: nombre valor [valor_regex]"
+"reemplazar todas las variables coincidentes: nombre valor [valor-patrón]"
-#: builtin/config.c:138
+#: builtin/config.c:143
msgid "add a new variable: name value"
msgstr "agregar nueva variable: nombre valor"
-#: builtin/config.c:139
-msgid "remove a variable: name [value-regex]"
-msgstr "borrar una variable. nombre [valor-regex]"
+#: builtin/config.c:144
+msgid "remove a variable: name [value-pattern]"
+msgstr "eliminar una variable: nombre [patrón de valor]"
-#: builtin/config.c:140
-msgid "remove all matches: name [value-regex]"
-msgstr "borrar todas las concurrencias: nombre [valor-regex]"
+#: builtin/config.c:145
+msgid "remove all matches: name [value-pattern]"
+msgstr "eliminar todas las coincidencias: nombre [patrón de valor]"
-#: builtin/config.c:141
+#: builtin/config.c:146
msgid "rename section: old-name new-name"
msgstr "renombrar sección: nombre-viejo nombre-nuevo"
-#: builtin/config.c:142
+#: builtin/config.c:147
msgid "remove a section: name"
msgstr "borrar una sección: nombre"
-#: builtin/config.c:143
+#: builtin/config.c:148
msgid "list all"
msgstr "listar todo"
-#: builtin/config.c:144
+#: builtin/config.c:149
+msgid "use string equality when comparing values to 'value-pattern'"
+msgstr "use la igualdad de cadenas al comparar valores con 'patrón de valor'"
+
+#: builtin/config.c:150
msgid "open an editor"
msgstr "abrir el editor"
-#: builtin/config.c:145
+#: builtin/config.c:151
msgid "find the color configured: slot [default]"
msgstr "encontrar el color configurado: slot [default]"
-#: builtin/config.c:146
+#: builtin/config.c:152
msgid "find the color setting: slot [stdout-is-tty]"
msgstr "encontrar las opciones del color: slot [stdout-es-tty]"
-#: builtin/config.c:147
+#: builtin/config.c:153
msgid "Type"
msgstr "Tipo"
-#: builtin/config.c:148 builtin/env--helper.c:38
+#: builtin/config.c:154 builtin/env--helper.c:43
msgid "value is given this type"
msgstr "al valor se ha dado este tipo"
-#: builtin/config.c:149
+#: builtin/config.c:155
msgid "value is \"true\" or \"false\""
msgstr "valor es \"true\" o \"false\""
-#: builtin/config.c:150
+#: builtin/config.c:156
msgid "value is decimal number"
msgstr "valor es un numero decimal"
-#: builtin/config.c:151
+#: builtin/config.c:157
msgid "value is --bool or --int"
msgstr "valor es --bool o --int"
-#: builtin/config.c:152
+#: builtin/config.c:158
+msgid "value is --bool or string"
+msgstr "el valor es --bool o cadena"
+
+#: builtin/config.c:159
msgid "value is a path (file or directory name)"
msgstr "valor es una ruta (archivo o nombre de directorio)"
-#: builtin/config.c:153
+#: builtin/config.c:160
msgid "value is an expiry date"
msgstr "valor es una fecha de expiración"
-#: builtin/config.c:154
+#: builtin/config.c:161
msgid "Other"
msgstr "Otro"
-#: builtin/config.c:155
+#: builtin/config.c:162
msgid "terminate values with NUL byte"
msgstr "terminar valores con un byte NULL"
-#: builtin/config.c:156
+#: builtin/config.c:163
msgid "show variable names only"
msgstr "mostrar solo nombres de variables"
-#: builtin/config.c:157
+#: builtin/config.c:164
msgid "respect include directives on lookup"
msgstr "respetar directivas include en la búsqueda"
-#: builtin/config.c:158
+#: builtin/config.c:165
msgid "show origin of config (file, standard input, blob, command line)"
msgstr "mostrar el origen de configuración (archivo, stdin, blob, comando)"
-#: builtin/config.c:159
+#: builtin/config.c:166
msgid "show scope of config (worktree, local, global, system, command)"
msgstr ""
"mostrar el scope de la configuración (worktree, local, global, system, "
"command)"
-#: builtin/config.c:160 builtin/env--helper.c:40
+#: builtin/config.c:167 builtin/env--helper.c:45
msgid "value"
msgstr "valor"
-#: builtin/config.c:160
+#: builtin/config.c:167
msgid "with --get, use default value when missing entry"
msgstr "con --get, usa el valor por defecto cuando falta una entrada"
-#: builtin/config.c:174
+#: builtin/config.c:181
#, c-format
msgid "wrong number of arguments, should be %d"
msgstr "número de argumentos inválidos, deberían ser %d"
-#: builtin/config.c:176
+#: builtin/config.c:183
#, c-format
msgid "wrong number of arguments, should be from %d to %d"
msgstr "número de argumentos inválidos, deberían ser de %d a %d"
-#: builtin/config.c:324
+#: builtin/config.c:339
#, c-format
msgid "invalid key pattern: %s"
msgstr "patrón de llave inválido: %s"
-#: builtin/config.c:360
+#: builtin/config.c:377
#, c-format
msgid "failed to format default config value: %s"
msgstr "falló al formatear el valor por defecto de configuración: %s"
-#: builtin/config.c:417
+#: builtin/config.c:441
#, c-format
msgid "cannot parse color '%s'"
msgstr "no se analizar color '%s'"
-#: builtin/config.c:459
+#: builtin/config.c:483
msgid "unable to parse default color value"
msgstr "no es posible analizar el valor por defecto de color"
-#: builtin/config.c:512 builtin/config.c:768
+#: builtin/config.c:536 builtin/config.c:833
msgid "not in a git directory"
msgstr "no en un directorio git"
-#: builtin/config.c:515
+#: builtin/config.c:539
msgid "writing to stdin is not supported"
msgstr "escribir en stdin no está soportado"
-#: builtin/config.c:518
+#: builtin/config.c:542
msgid "writing config blobs is not supported"
msgstr "escribir blobs de configuración no está soportado"
-#: builtin/config.c:603
+#: builtin/config.c:627
#, c-format
msgid ""
"# This is Git's per-user configuration file.\n"
@@ -13458,23 +14021,27 @@
"#\tname = %s\n"
"#\temail = %s\n"
-#: builtin/config.c:627
+#: builtin/config.c:652
msgid "only one config file at a time"
msgstr "solo un archivo de configuración a la vez"
-#: builtin/config.c:632
+#: builtin/config.c:658
msgid "--local can only be used inside a git repository"
msgstr "--local solo puedo ser usado dentro de un repositorio"
-#: builtin/config.c:635
+#: builtin/config.c:660
msgid "--blob can only be used inside a git repository"
msgstr "--blob solo puede ser usado dentro de un repositorio"
-#: builtin/config.c:655
+#: builtin/config.c:662
+msgid "--worktree can only be used inside a git repository"
+msgstr "--worktree solo se puede usar dentro de un repositorio de git"
+
+#: builtin/config.c:684
msgid "$HOME not set"
msgstr "$HOME no está configurado"
-#: builtin/config.c:679
+#: builtin/config.c:708
msgid ""
"--worktree cannot be used with multiple working trees unless the config\n"
"extension worktreeConfig is enabled. Please read \"CONFIGURATION FILE\"\n"
@@ -13486,52 +14053,56 @@
"\"\n"
"en \"git help worktree\" para más detalles"
-#: builtin/config.c:714
+#: builtin/config.c:743
msgid "--get-color and variable type are incoherent"
msgstr "--get-color y tipo de variable incoherente"
-#: builtin/config.c:719
+#: builtin/config.c:748
msgid "only one action at a time"
msgstr "solo una acción a la vez"
-#: builtin/config.c:732
+#: builtin/config.c:761
msgid "--name-only is only applicable to --list or --get-regexp"
msgstr "--name-only solo es aplicable para --list o --get-regexp"
-#: builtin/config.c:738
+#: builtin/config.c:767
msgid ""
"--show-origin is only applicable to --get, --get-all, --get-regexp, and --"
"list"
msgstr ""
"--show-origin solo es aplicable para --get, --get-all, --get-regexp, y --list"
-#: builtin/config.c:744
+#: builtin/config.c:773
msgid "--default is only applicable to --get"
msgstr "--default solo es aplicable para --get"
-#: builtin/config.c:757
+#: builtin/config.c:806
+msgid "--fixed-value only applies with 'value-pattern'"
+msgstr "--fixed-value solo se aplica con 'value-pattern'"
+
+#: builtin/config.c:822
#, c-format
msgid "unable to read config file '%s'"
msgstr "no se puede leer el archivo de configuración '%s'"
-#: builtin/config.c:760
+#: builtin/config.c:825
msgid "error processing config file(s)"
msgstr "error al procesar archivo(s) de configuración"
-#: builtin/config.c:770
+#: builtin/config.c:835
msgid "editing stdin is not supported"
msgstr "editar stdin no está soportado"
-#: builtin/config.c:772
+#: builtin/config.c:837
msgid "editing blobs is not supported"
msgstr "editar blobs no está soportado"
-#: builtin/config.c:786
+#: builtin/config.c:851
#, c-format
msgid "cannot create configuration file %s"
msgstr "no se puede crear el archivo de configuración %s"
-#: builtin/config.c:799
+#: builtin/config.c:864
#, c-format
msgid ""
"cannot overwrite multiple values with a single value\n"
@@ -13540,7 +14111,7 @@
"no se puede sobrescribir múltiples valores con un único valor\n"
"\tUse una regexp, --add o --replace-all para cambiar %s."
-#: builtin/config.c:873 builtin/config.c:884
+#: builtin/config.c:943 builtin/config.c:954
#, c-format
msgid "no such section: %s"
msgstr "no existe la sección: %s"
@@ -13553,6 +14124,38 @@
msgid "print sizes in human readable format"
msgstr "mostrar tamaños en formato legible para humano"
+#: builtin/credential-cache--daemon.c:226
+#, c-format
+msgid ""
+"The permissions on your socket directory are too loose; other\n"
+"users may be able to read your cached credentials. Consider running:\n"
+"\n"
+"\tchmod 0700 %s"
+msgstr ""
+"Los permisos en tu directorio de socket son demasiado flojos; otros\n"
+"usuarios pueden leer sus credenciales almacenadas en caché. Considera "
+"ejecutar:\n"
+"\n"
+"\tchmod 0700 %s"
+
+#: builtin/credential-cache--daemon.c:275
+msgid "print debugging messages to stderr"
+msgstr "mostrar mensajes de debug en stderr"
+
+#: builtin/credential-cache--daemon.c:315
+msgid "credential-cache--daemon unavailable; no unix socket support"
+msgstr "credential-cache--daemon no disponible; sin soporte de socket Unix"
+
+#: builtin/credential-cache.c:154
+msgid "credential-cache unavailable; no unix socket support"
+msgstr "credential-cache no disponible; sin soporte de socket Unix"
+
+#: builtin/credential-store.c:66
+#, c-format
+msgid "unable to get credential storage lock in %d ms"
+msgstr ""
+"no se puede obtener el bloqueo de almacenamiento de credenciales en %d ms"
+
#: builtin/describe.c:26
msgid "git describe [<options>] [<commit-ish>...]"
msgstr "git describe [<opciones>] [<commit-ish>...]"
@@ -13717,41 +14320,49 @@
msgid "--broken is incompatible with commit-ishes"
msgstr "--broken es incompatible con commit-ismos"
-#: builtin/diff.c:91
+#: builtin/diff-tree.c:155
+msgid "--stdin and --merge-base are mutually exclusive"
+msgstr "--stdin and --merge-baseson mutuamente exclusivas"
+
+#: builtin/diff-tree.c:157
+msgid "--merge-base only works with two commits"
+msgstr "--merge-base solo funciona con dos commits"
+
+#: builtin/diff.c:92
#, c-format
msgid "'%s': not a regular file or symlink"
msgstr "'%s': no es un archivo regular o un enlace simbólico"
-#: builtin/diff.c:242
+#: builtin/diff.c:259
#, c-format
msgid "invalid option: %s"
msgstr "opción inválida: %s"
-#: builtin/diff.c:359
+#: builtin/diff.c:376
#, c-format
msgid "%s...%s: no merge base"
msgstr "%s...%s: se neceista una base de fusión"
-#: builtin/diff.c:469
+#: builtin/diff.c:486
msgid "Not a git repository"
msgstr "No es un repositorio git"
-#: builtin/diff.c:514
+#: builtin/diff.c:532 builtin/grep.c:682
#, c-format
msgid "invalid object '%s' given."
msgstr "objeto '%s' entregado no es válido."
-#: builtin/diff.c:525
+#: builtin/diff.c:543
#, c-format
msgid "more than two blobs given: '%s'"
msgstr "más de dos blobs entregados: '%s'"
-#: builtin/diff.c:530
+#: builtin/diff.c:548
#, c-format
msgid "unhandled object '%s' given."
msgstr "objeto no manejado '%s' entregado."
-#: builtin/diff.c:564
+#: builtin/diff.c:582
#, c-format
msgid "%s...%s: multiple merge bases, using %s"
msgstr "%s...%s: múltiples bases de fusión, usando %s"
@@ -13780,7 +14391,7 @@
msgid "could not read object %s for symlink %s"
msgstr "no se pudo leer el objeto %s para el symlink %s"
-#: builtin/difftool.c:413
+#: builtin/difftool.c:412
msgid ""
"combined diff formats('-c' and '--cc') are not supported in\n"
"directory diff mode('-d' and '--dir-diff')."
@@ -13788,54 +14399,54 @@
"formatos combinados de diff ('-c' y '--cc') no soportados en\n"
"modo diff para directorio('-d' y '--dir-diff')."
-#: builtin/difftool.c:634
+#: builtin/difftool.c:633
#, c-format
msgid "both files modified: '%s' and '%s'."
msgstr "ambos archivos modificados: '%s' y '%s'."
-#: builtin/difftool.c:636
+#: builtin/difftool.c:635
msgid "working tree file has been left."
msgstr "archivo del árbol de trabajo ha sido dejado."
-#: builtin/difftool.c:647
+#: builtin/difftool.c:646
#, c-format
msgid "temporary files exist in '%s'."
msgstr "archivo temporal existe en '%s'."
-#: builtin/difftool.c:648
+#: builtin/difftool.c:647
msgid "you may want to cleanup or recover these."
msgstr "tal vez desees limpiar o recuperar estos."
-#: builtin/difftool.c:697
+#: builtin/difftool.c:696
msgid "use `diff.guitool` instead of `diff.tool`"
msgstr "use `diff.guitool` en lugar de `diff.tool`"
-#: builtin/difftool.c:699
+#: builtin/difftool.c:698
msgid "perform a full-directory diff"
msgstr "realizar un diff de todo el directorio"
-#: builtin/difftool.c:701
+#: builtin/difftool.c:700
msgid "do not prompt before launching a diff tool"
msgstr "no mostrar antes de lanzar una herramienta de diff"
-#: builtin/difftool.c:706
+#: builtin/difftool.c:705
msgid "use symlinks in dir-diff mode"
msgstr "usar enlaces simbólicos en modo dir-diff"
-#: builtin/difftool.c:707
+#: builtin/difftool.c:706
msgid "tool"
msgstr "herramienta"
-#: builtin/difftool.c:708
+#: builtin/difftool.c:707
msgid "use the specified diff tool"
msgstr "usar la herramienta de diff especificada"
-#: builtin/difftool.c:710
+#: builtin/difftool.c:709
msgid "print a list of diff tools that may be used with `--tool`"
msgstr ""
"mostrar una lista de herramientas de diff que pueden ser usadas con `--tool`"
-#: builtin/difftool.c:713
+#: builtin/difftool.c:712
msgid ""
"make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
"code"
@@ -13843,31 +14454,31 @@
"hacer que 'git-difftool' salga cuando una herramienta de diff retorne un "
"código de salida distinto de cero"
-#: builtin/difftool.c:716
+#: builtin/difftool.c:715
msgid "specify a custom command for viewing diffs"
msgstr "especificar un comando personalizado para ver diffs"
-#: builtin/difftool.c:717
+#: builtin/difftool.c:716
msgid "passed to `diff`"
msgstr "pasado a `diff`"
-#: builtin/difftool.c:732
+#: builtin/difftool.c:731
msgid "difftool requires worktree or --no-index"
msgstr "difftool requiere un árbol de trabajo o --no-index"
-#: builtin/difftool.c:739
+#: builtin/difftool.c:738
msgid "--dir-diff is incompatible with --no-index"
msgstr "--dirty-diff es incompatible con --no-index"
-#: builtin/difftool.c:742
+#: builtin/difftool.c:741
msgid "--gui, --tool and --extcmd are mutually exclusive"
msgstr "--gui, --tool y --extcmd son mutuamente exclusivas"
-#: builtin/difftool.c:750
+#: builtin/difftool.c:749
msgid "no <tool> given for --tool=<tool>"
msgstr "no se ha proporcionado <herramienta> para --tool=<herramienta>"
-#: builtin/difftool.c:757
+#: builtin/difftool.c:756
msgid "no <cmd> given for --extcmd=<cmd>"
msgstr "no se ha entregado <comando> para --extcmd=<comando>"
@@ -13875,24 +14486,24 @@
msgid "git env--helper --type=[bool|ulong] <options> <env-var>"
msgstr "git env--helper --type=[bool|ulong] <opciones> <env-var>"
-#: builtin/env--helper.c:37 builtin/hash-object.c:98
+#: builtin/env--helper.c:42 builtin/hash-object.c:98
msgid "type"
msgstr "tipo"
-#: builtin/env--helper.c:41
+#: builtin/env--helper.c:46
msgid "default for git_env_*(...) to fall back on"
msgstr "default para git_env_*(...) es hacer fallback en"
-#: builtin/env--helper.c:43
+#: builtin/env--helper.c:48
msgid "be quiet only use git_env_*() value as exit code"
msgstr "ser silencioso solo usar valor git_env_*() como código de salida"
-#: builtin/env--helper.c:62
+#: builtin/env--helper.c:67
#, c-format
msgid "option `--default' expects a boolean value with `--type=bool`, not `%s`"
msgstr "opción `--default' espera un valor boolean con `--type=bool`, no `%s`"
-#: builtin/env--helper.c:77
+#: builtin/env--helper.c:82
#, c-format
msgid ""
"option `--default' expects an unsigned long value with `--type=ulong`, not `"
@@ -13910,96 +14521,127 @@
"Error: No se puede exportar los tags anidados a menos que --mark-tags sea "
"especificado."
-#: builtin/fast-export.c:1178
+#: builtin/fast-export.c:1177
msgid "--anonymize-map token cannot be empty"
msgstr "token --anonymize-map no puede estar vacío"
-#: builtin/fast-export.c:1198
+#: builtin/fast-export.c:1197
msgid "show progress after <n> objects"
msgstr "mostrar progreso después de <n> objetos"
-#: builtin/fast-export.c:1200
+#: builtin/fast-export.c:1199
msgid "select handling of signed tags"
msgstr "seleccionar el manejo de tags firmados"
-#: builtin/fast-export.c:1203
+#: builtin/fast-export.c:1202
msgid "select handling of tags that tag filtered objects"
msgstr "seleccionar el manejo de tags que son tags de objetos filtrados"
-#: builtin/fast-export.c:1206
+#: builtin/fast-export.c:1205
msgid "select handling of commit messages in an alternate encoding"
msgstr "seleccionar el manejo de mensajes de commit en un encoding diferente"
-#: builtin/fast-export.c:1209
-msgid "Dump marks to this file"
-msgstr "Volcar marcas a este archivo"
+#: builtin/fast-export.c:1208
+msgid "dump marks to this file"
+msgstr "volcar marcas a este archivo"
-#: builtin/fast-export.c:1211
-msgid "Import marks from this file"
-msgstr "Importar marcas de este archivo"
+#: builtin/fast-export.c:1210
+msgid "import marks from this file"
+msgstr "importar marcas de este archivo"
-#: builtin/fast-export.c:1215
-msgid "Import marks from this file if it exists"
-msgstr "Importar marcas de este archivo si existe"
+#: builtin/fast-export.c:1214
+msgid "import marks from this file if it exists"
+msgstr "importar marcas de este archivo si existe"
-#: builtin/fast-export.c:1217
-msgid "Fake a tagger when tags lack one"
-msgstr "Falsificar un tagger cuando les falta uno"
+#: builtin/fast-export.c:1216
+msgid "fake a tagger when tags lack one"
+msgstr "falsificar un tagger cuando les falta uno"
-#: builtin/fast-export.c:1219
-msgid "Output full tree for each commit"
-msgstr "Mostrar todo el árbol para cada commit"
+#: builtin/fast-export.c:1218
+msgid "output full tree for each commit"
+msgstr "mostrar todo el árbol para cada commit"
+
+#: builtin/fast-export.c:1220
+msgid "use the done feature to terminate the stream"
+msgstr "use el feature done para terminar el stream"
#: builtin/fast-export.c:1221
-msgid "Use the done feature to terminate the stream"
-msgstr "Use el feature done para terminar el stream"
+msgid "skip output of blob data"
+msgstr "saltar el output de data blob"
-#: builtin/fast-export.c:1222
-msgid "Skip output of blob data"
-msgstr "Saltar el output de data blob"
-
-#: builtin/fast-export.c:1223 builtin/log.c:1724
+#: builtin/fast-export.c:1222 builtin/log.c:1815
msgid "refspec"
msgstr "refspec"
-#: builtin/fast-export.c:1224
-msgid "Apply refspec to exported refs"
-msgstr "Aplicar refspec para los refs exportados"
+#: builtin/fast-export.c:1223
+msgid "apply refspec to exported refs"
+msgstr "aplicar refspec para los refs exportados"
-#: builtin/fast-export.c:1225
+#: builtin/fast-export.c:1224
msgid "anonymize output"
msgstr "anonimizar la salida"
-#: builtin/fast-export.c:1226
+#: builtin/fast-export.c:1225
msgid "from:to"
msgstr "de:para"
-#: builtin/fast-export.c:1227
+#: builtin/fast-export.c:1226
msgid "convert <from> to <to> in anonymized output"
msgstr "convertir <de> a <para> en output anonimizado"
-#: builtin/fast-export.c:1230
-msgid "Reference parents which are not in fast-export stream by object id"
+#: builtin/fast-export.c:1229
+msgid "reference parents which are not in fast-export stream by object id"
msgstr ""
-"Padres de la referencia que no estan en fast-export stream por id de objeto"
+"padres de la referencia que no estan en fast-export stream por id de objeto"
-#: builtin/fast-export.c:1232
-msgid "Show original object ids of blobs/commits"
-msgstr "Mostrar ids de objetos originales para blobs/commits"
+#: builtin/fast-export.c:1231
+msgid "show original object ids of blobs/commits"
+msgstr "mostrar ids de objetos originales para blobs/commits"
-#: builtin/fast-export.c:1234
-msgid "Label tags with mark ids"
-msgstr "Marcar tags con ids de mark"
+#: builtin/fast-export.c:1233
+msgid "label tags with mark ids"
+msgstr "marcar tags con ids de mark"
-#: builtin/fast-export.c:1257
+#: builtin/fast-export.c:1256
msgid "--anonymize-map without --anonymize does not make sense"
msgstr "--anonymize-map sin --anonymize no tiene sentido"
-#: builtin/fast-export.c:1272
+#: builtin/fast-export.c:1271
msgid "Cannot pass both --import-marks and --import-marks-if-exists"
msgstr "No se puede pasar ambos --import-marks y --import-marks-if-exists"
-#: builtin/fetch-pack.c:245
+#: builtin/fast-import.c:3088
+#, c-format
+msgid "Missing from marks for submodule '%s'"
+msgstr "Faltan marcas from para el submódulo '%s'"
+
+#: builtin/fast-import.c:3090
+#, c-format
+msgid "Missing to marks for submodule '%s'"
+msgstr "Faltan marcas to para el submódulo '%s'"
+
+#: builtin/fast-import.c:3225
+#, c-format
+msgid "Expected 'mark' command, got %s"
+msgstr "Se esperaba comando 'mark', se obtuvo %s"
+
+#: builtin/fast-import.c:3230
+#, c-format
+msgid "Expected 'to' command, got %s"
+msgstr "Se esperaba comando 'to', se obtuvo %s"
+
+#: builtin/fast-import.c:3322
+msgid "Expected format name:filename for submodule rewrite option"
+msgstr ""
+"Formato esperado de nombre:nombre de archivo para la opción de sobreescribir "
+"submódulo"
+
+#: builtin/fast-import.c:3377
+#, c-format
+msgid "feature '%s' forbidden in input without --allow-unsafe-features"
+msgstr "característica '%s' prohibida en input sin --allow-unsafe-features"
+
+#: builtin/fetch-pack.c:242
#, c-format
msgid "Lockfile created but not reported: %s"
msgstr "Lockfile creado pero no reportado: %s"
@@ -14020,90 +14662,98 @@
msgid "git fetch --all [<options>]"
msgstr "git fetch --all [<opciones>]"
-#: builtin/fetch.c:117
+#: builtin/fetch.c:120
msgid "fetch.parallel cannot be negative"
msgstr "fetch.parallel no puede ser negativo"
-#: builtin/fetch.c:140 builtin/pull.c:185
+#: builtin/fetch.c:143 builtin/pull.c:185
msgid "fetch from all remotes"
msgstr "extraer de todos los remotos"
-#: builtin/fetch.c:142 builtin/pull.c:245
+#: builtin/fetch.c:145 builtin/pull.c:245
msgid "set upstream for git pull/fetch"
msgstr "configurar upstream para git pulll/fetch"
-#: builtin/fetch.c:144 builtin/pull.c:188
+#: builtin/fetch.c:147 builtin/pull.c:188
msgid "append to .git/FETCH_HEAD instead of overwriting"
msgstr "adjuntar a .git/FETCH_HEAD en lugar de sobrescribir"
-#: builtin/fetch.c:146 builtin/pull.c:191
+#: builtin/fetch.c:149
+msgid "use atomic transaction to update references"
+msgstr "usar transacción atómica para actualizar referencias"
+
+#: builtin/fetch.c:151 builtin/pull.c:191
msgid "path to upload pack on remote end"
msgstr "ruta para cargar el paquete al final del remoto"
-#: builtin/fetch.c:147
+#: builtin/fetch.c:152
msgid "force overwrite of local reference"
msgstr "forzar sobrescritura de referencia local"
-#: builtin/fetch.c:149
+#: builtin/fetch.c:154
msgid "fetch from multiple remotes"
msgstr "extraer de múltiples remotos"
-#: builtin/fetch.c:151 builtin/pull.c:195
+#: builtin/fetch.c:156 builtin/pull.c:195
msgid "fetch all tags and associated objects"
msgstr "extraer todos los tags y objetos asociados"
-#: builtin/fetch.c:153
+#: builtin/fetch.c:158
msgid "do not fetch all tags (--no-tags)"
msgstr "no extraer todos los tags (--no-tags)"
-#: builtin/fetch.c:155
+#: builtin/fetch.c:160
msgid "number of submodules fetched in parallel"
msgstr "número de submódulos extraídos en paralelo"
-#: builtin/fetch.c:157 builtin/pull.c:198
+#: builtin/fetch.c:162 builtin/pull.c:198
msgid "prune remote-tracking branches no longer on remote"
msgstr "limpiar ramas remotas rastreadas que ya no están en el remoto"
-#: builtin/fetch.c:159
+#: builtin/fetch.c:164
msgid "prune local tags no longer on remote and clobber changed tags"
msgstr ""
"limpiar tags locales que no se encuentran en el remoto y eliminar tags "
"cambiados"
-#: builtin/fetch.c:160 builtin/fetch.c:183 builtin/pull.c:122
+#: builtin/fetch.c:165 builtin/fetch.c:190 builtin/pull.c:122
msgid "on-demand"
msgstr "en demanda"
-#: builtin/fetch.c:161
+#: builtin/fetch.c:166
msgid "control recursive fetching of submodules"
msgstr "controlar extracción recursiva de submódulos"
-#: builtin/fetch.c:165 builtin/pull.c:206
+#: builtin/fetch.c:171
+msgid "write fetched references to the FETCH_HEAD file"
+msgstr "escribir referencias obtenidas en el archivo FETCH_HEAD"
+
+#: builtin/fetch.c:172 builtin/pull.c:206
msgid "keep downloaded pack"
msgstr "mantener el paquete descargado"
-#: builtin/fetch.c:167
+#: builtin/fetch.c:174
msgid "allow updating of HEAD ref"
msgstr "permitir actualizar la ref HEAD"
-#: builtin/fetch.c:170 builtin/fetch.c:176 builtin/pull.c:209
+#: builtin/fetch.c:177 builtin/fetch.c:183 builtin/pull.c:209
#: builtin/pull.c:218
msgid "deepen history of shallow clone"
msgstr "historia profunda de un clon superficial"
-#: builtin/fetch.c:172 builtin/pull.c:212
+#: builtin/fetch.c:179 builtin/pull.c:212
msgid "deepen history of shallow repository based on time"
msgstr "historia profunda de un repositorio superficial basado en tiempo"
-#: builtin/fetch.c:178 builtin/pull.c:221
+#: builtin/fetch.c:185 builtin/pull.c:221
msgid "convert to a complete repository"
msgstr "convertir a un repositorio completo"
-#: builtin/fetch.c:181
+#: builtin/fetch.c:188
msgid "prepend this to submodule path output"
msgstr "anteponer esto a salida de la ruta del submódulo"
-#: builtin/fetch.c:184
+#: builtin/fetch.c:191
msgid ""
"default for recursive fetching of submodules (lower priority than config "
"files)"
@@ -14111,94 +14761,98 @@
"default para extracción recursiva de submódulos (menor prioridad que "
"archivos de configuración)"
-#: builtin/fetch.c:188 builtin/pull.c:224
+#: builtin/fetch.c:195 builtin/pull.c:224
msgid "accept refs that update .git/shallow"
msgstr "aceptar refs que actualicen .git/shallow"
-#: builtin/fetch.c:189 builtin/pull.c:226
+#: builtin/fetch.c:196 builtin/pull.c:226
msgid "refmap"
msgstr "refmap"
-#: builtin/fetch.c:190 builtin/pull.c:227
+#: builtin/fetch.c:197 builtin/pull.c:227
msgid "specify fetch refmap"
msgstr "especificar extracción de refmap"
-#: builtin/fetch.c:197 builtin/pull.c:240
+#: builtin/fetch.c:204 builtin/pull.c:240
msgid "report that we have only objects reachable from this object"
msgstr "reporta que solo tenemos objetos alcanzables de este objeto"
-#: builtin/fetch.c:200
-msgid "run 'gc --auto' after fetching"
-msgstr "ejecutar 'gc --auto' tras el fetch"
+#: builtin/fetch.c:207 builtin/fetch.c:209
+msgid "run 'maintenance --auto' after fetching"
+msgstr "ejecute 'maintenance --auto' después de buscar"
-#: builtin/fetch.c:202 builtin/pull.c:243
+#: builtin/fetch.c:211 builtin/pull.c:243
msgid "check for forced-updates on all updated branches"
msgstr "verificar updates forzados en todos los branch actualizados"
-#: builtin/fetch.c:204
+#: builtin/fetch.c:213
msgid "write the commit-graph after fetching"
msgstr "escribir commit-graph luego del fetch"
-#: builtin/fetch.c:514
+#: builtin/fetch.c:215
+msgid "accept refspecs from stdin"
+msgstr "aceptar refspecs de stdin"
+
+#: builtin/fetch.c:526
msgid "Couldn't find remote ref HEAD"
msgstr "No se puedo encontrar ref remota HEAD"
-#: builtin/fetch.c:654
+#: builtin/fetch.c:697
#, c-format
msgid "configuration fetch.output contains invalid value %s"
msgstr "la configuración fetch.output contiene el valor inválido %s"
-#: builtin/fetch.c:752
+#: builtin/fetch.c:796
#, c-format
msgid "object %s not found"
msgstr "objeto %s no encontrado"
-#: builtin/fetch.c:756
+#: builtin/fetch.c:800
msgid "[up to date]"
msgstr "[actualizado]"
-#: builtin/fetch.c:769 builtin/fetch.c:785 builtin/fetch.c:857
+#: builtin/fetch.c:813 builtin/fetch.c:829 builtin/fetch.c:901
msgid "[rejected]"
msgstr "[rechazado]"
-#: builtin/fetch.c:770
+#: builtin/fetch.c:814
msgid "can't fetch in current branch"
msgstr "no se puede traer en la rama actual"
-#: builtin/fetch.c:780
+#: builtin/fetch.c:824
msgid "[tag update]"
msgstr "[actualización de tag]"
-#: builtin/fetch.c:781 builtin/fetch.c:818 builtin/fetch.c:840
-#: builtin/fetch.c:852
+#: builtin/fetch.c:825 builtin/fetch.c:862 builtin/fetch.c:884
+#: builtin/fetch.c:896
msgid "unable to update local ref"
msgstr "no se posible actualizar el ref local"
-#: builtin/fetch.c:785
+#: builtin/fetch.c:829
msgid "would clobber existing tag"
msgstr "podría golpear tag existente"
-#: builtin/fetch.c:807
+#: builtin/fetch.c:851
msgid "[new tag]"
msgstr "[nuevo tag]"
-#: builtin/fetch.c:810
+#: builtin/fetch.c:854
msgid "[new branch]"
msgstr "[nueva rama]"
-#: builtin/fetch.c:813
+#: builtin/fetch.c:857
msgid "[new ref]"
msgstr "[nueva referencia]"
-#: builtin/fetch.c:852
+#: builtin/fetch.c:896
msgid "forced update"
msgstr "actualización forzada"
-#: builtin/fetch.c:857
+#: builtin/fetch.c:901
msgid "non-fast-forward"
msgstr "avance lento"
-#: builtin/fetch.c:878
+#: builtin/fetch.c:1005
msgid ""
"Fetch normally indicates which branches had a forced update,\n"
"but that check has been disabled. To re-enable, use '--show-forced-updates'\n"
@@ -14209,7 +14863,7 @@
"show-forced-updates'\n"
"o ejecute 'git config fetch.showForcedUpdates true'."
-#: builtin/fetch.c:882
+#: builtin/fetch.c:1009
#, c-format
msgid ""
"It took %.2f seconds to check forced updates. You can use\n"
@@ -14222,22 +14876,22 @@
"false'\n"
"para evitar esta validación.\n"
-#: builtin/fetch.c:914
+#: builtin/fetch.c:1041
#, c-format
msgid "%s did not send all necessary objects\n"
msgstr "%s no envió todos los objetos necesarios\n"
-#: builtin/fetch.c:935
+#: builtin/fetch.c:1069
#, c-format
msgid "reject %s because shallow roots are not allowed to be updated"
msgstr "rechazado %s porque raíces superficiales no pueden ser actualizadas"
-#: builtin/fetch.c:1020 builtin/fetch.c:1158
+#: builtin/fetch.c:1146 builtin/fetch.c:1297
#, c-format
msgid "From %.*s\n"
msgstr "Desde %.*s\n"
-#: builtin/fetch.c:1031
+#: builtin/fetch.c:1168
#, c-format
msgid ""
"some local refs could not be updated; try running\n"
@@ -14246,56 +14900,56 @@
"algunos refs locales no pudieron ser actualizados; intente ejecutar\n"
" 'git remote prune %s' para eliminar cualquier rama vieja o conflictiva"
-#: builtin/fetch.c:1128
+#: builtin/fetch.c:1267
#, c-format
msgid " (%s will become dangling)"
msgstr " (%s se pondrá colgado)"
-#: builtin/fetch.c:1129
+#: builtin/fetch.c:1268
#, c-format
msgid " (%s has become dangling)"
msgstr " (%s se ha colgado)"
-#: builtin/fetch.c:1161
+#: builtin/fetch.c:1300
msgid "[deleted]"
msgstr "[eliminado]"
-#: builtin/fetch.c:1162 builtin/remote.c:1112
+#: builtin/fetch.c:1301 builtin/remote.c:1118
msgid "(none)"
msgstr "(nada)"
-#: builtin/fetch.c:1185
+#: builtin/fetch.c:1324
#, c-format
msgid "Refusing to fetch into current branch %s of non-bare repository"
msgstr "Rehusando extraer en la rama actual %s de un repositorio no vacío"
-#: builtin/fetch.c:1204
+#: builtin/fetch.c:1343
#, c-format
msgid "Option \"%s\" value \"%s\" is not valid for %s"
msgstr "Opción \"%s\" valor \"%s\" no es válido para %s"
-#: builtin/fetch.c:1207
+#: builtin/fetch.c:1346
#, c-format
msgid "Option \"%s\" is ignored for %s\n"
msgstr "Opción \"%s\" es ignorada por %s\n"
-#: builtin/fetch.c:1415
+#: builtin/fetch.c:1558
msgid "multiple branches detected, incompatible with --set-upstream"
msgstr "múltiples ramas detectadas, incompatible con --set-upstream"
-#: builtin/fetch.c:1430
+#: builtin/fetch.c:1573
msgid "not setting upstream for a remote remote-tracking branch"
msgstr "no configurar upstream para una rama de rastreo remoto"
-#: builtin/fetch.c:1432
+#: builtin/fetch.c:1575
msgid "not setting upstream for a remote tag"
msgstr "no configurar upstream para un tag remoto"
-#: builtin/fetch.c:1434
+#: builtin/fetch.c:1577
msgid "unknown branch type"
msgstr "tipo de branch desconocido"
-#: builtin/fetch.c:1436
+#: builtin/fetch.c:1579
msgid ""
"no source branch found.\n"
"you need to specify exactly one branch with the --set-upstream option."
@@ -14303,22 +14957,22 @@
"no se encontró rama fuente.\n"
"tienes que especificar exactamente una rama con la opción --set-upstream."
-#: builtin/fetch.c:1562 builtin/fetch.c:1625
+#: builtin/fetch.c:1708 builtin/fetch.c:1771
#, c-format
msgid "Fetching %s\n"
msgstr "Extrayendo %s\n"
-#: builtin/fetch.c:1572 builtin/fetch.c:1627 builtin/remote.c:101
+#: builtin/fetch.c:1718 builtin/fetch.c:1773 builtin/remote.c:101
#, c-format
msgid "Could not fetch %s"
msgstr "No se pudo extraer %s"
-#: builtin/fetch.c:1584
+#: builtin/fetch.c:1730
#, c-format
msgid "could not fetch '%s' (exit code: %d)\n"
msgstr "no se pudo hacer fetch a '%s' (código de salida: %d)\n"
-#: builtin/fetch.c:1687
+#: builtin/fetch.c:1834
msgid ""
"No remote repository specified. Please, specify either a URL or a\n"
"remote name from which new revisions should be fetched."
@@ -14326,44 +14980,44 @@
"No hay repositorio remoto especificado. Por favor, especifique un URL o un\n"
"nombre remoto del cual las nuevas revisiones deben ser extraídas."
-#: builtin/fetch.c:1724
+#: builtin/fetch.c:1870
msgid "You need to specify a tag name."
msgstr "Tienes que especificar un nombre de tag."
-#: builtin/fetch.c:1778
+#: builtin/fetch.c:1935
msgid "Negative depth in --deepen is not supported"
msgstr "Profundidad negativa en --deepen no soportada"
-#: builtin/fetch.c:1780
+#: builtin/fetch.c:1937
msgid "--deepen and --depth are mutually exclusive"
msgstr "--deepen y --depth son mutuamente exclusivas"
-#: builtin/fetch.c:1785
+#: builtin/fetch.c:1942
msgid "--depth and --unshallow cannot be used together"
msgstr "--depth y --unshallow no pueden ser usadas juntas"
-#: builtin/fetch.c:1787
+#: builtin/fetch.c:1944
msgid "--unshallow on a complete repository does not make sense"
msgstr "--unshallow no tiene sentido en un repositorio completo"
-#: builtin/fetch.c:1800
+#: builtin/fetch.c:1961
msgid "fetch --all does not take a repository argument"
msgstr "fetch --all no toma un argumento de repositorio"
-#: builtin/fetch.c:1802
+#: builtin/fetch.c:1963
msgid "fetch --all does not make sense with refspecs"
msgstr "fetch --all no tiene sentido con refspecs"
-#: builtin/fetch.c:1811
+#: builtin/fetch.c:1972
#, c-format
msgid "No such remote or remote group: %s"
msgstr "No existe el remoto o grupo remoto: %s"
-#: builtin/fetch.c:1818
+#: builtin/fetch.c:1979
msgid "Fetching a group and specifying refspecs does not make sense"
msgstr "Extraer un grupo y especificar un refspecs no tiene sentido"
-#: builtin/fetch.c:1836
+#: builtin/fetch.c:1997
msgid ""
"--filter can only be used with the remote configured in extensions."
"partialclone"
@@ -14371,6 +15025,14 @@
"--filter solo puede ser usado con el remoto configurado en extensions."
"partialClone"
+#: builtin/fetch.c:2001
+msgid "--atomic can only be used when fetching from one remote"
+msgstr "--atomic solo se puede usar cuando se busca desde un control remoto"
+
+#: builtin/fetch.c:2005
+msgid "--stdin can only be used when fetching from one remote"
+msgstr "--stdin solo se puede usar cuando se busca desde un control remoto"
+
#: builtin/fmt-merge-msg.c:7
msgid ""
"git fmt-merge-msg [-m <message>] [--log[=<n>] | --no-log] [--file <file>]"
@@ -14406,8 +15068,8 @@
msgstr "git for-each-ref [--points-at <objeto>]"
#: builtin/for-each-ref.c:12
-msgid "git for-each-ref [(--merged | --no-merged) [<commit>]]"
-msgstr "git for-each-ref [(--merged | --no-merged) [<commit>]]"
+msgid "git for-each-ref [--merged [<commit>]] [--no-merged [<commit>]]"
+msgstr "git for-each-ref [--merged [<commit>]] [--no-merged [<commit>]]"
#: builtin/for-each-ref.c:13
msgid "git for-each-ref [--contains [<commit>]] [--no-contains [<commit>]]"
@@ -14433,7 +15095,7 @@
msgid "show only <n> matched refs"
msgstr "mostrar solo <n> refs encontradas"
-#: builtin/for-each-ref.c:39 builtin/tag.c:440
+#: builtin/for-each-ref.c:39 builtin/tag.c:472
msgid "respect format colors"
msgstr "respetar el formato de colores"
@@ -14457,32 +15119,48 @@
msgid "print only refs which don't contain the commit"
msgstr "mostrar solo refs que no contienen el commit"
-#: builtin/fsck.c:69 builtin/fsck.c:148 builtin/fsck.c:149
+#: builtin/for-each-repo.c:9
+msgid "git for-each-repo --config=<config> <command-args>"
+msgstr "git for-each-repo --config=<config> <argumetnos-de-comando>"
+
+#: builtin/for-each-repo.c:37
+msgid "config"
+msgstr "config"
+
+#: builtin/for-each-repo.c:38
+msgid "config key storing a list of repository paths"
+msgstr "clave de configuración que almacena una lista de rutas de repositorio"
+
+#: builtin/for-each-repo.c:46
+msgid "missing --config=<config>"
+msgstr "falta --config=<config>"
+
+#: builtin/fsck.c:69 builtin/fsck.c:130 builtin/fsck.c:131
msgid "unknown"
msgstr "desconocido"
#. TRANSLATORS: e.g. error in tree 01bfda: <more explanation>
-#: builtin/fsck.c:101 builtin/fsck.c:121
+#: builtin/fsck.c:83 builtin/fsck.c:103
#, c-format
msgid "error in %s %s: %s"
msgstr "error en %s %s: %s"
#. TRANSLATORS: e.g. warning in tree 01bfda: <more explanation>
-#: builtin/fsck.c:115
+#: builtin/fsck.c:97
#, c-format
msgid "warning in %s %s: %s"
msgstr "peligro en %s %s: %s"
-#: builtin/fsck.c:144 builtin/fsck.c:147
+#: builtin/fsck.c:126 builtin/fsck.c:129
#, c-format
msgid "broken link from %7s %s"
msgstr "link roto de %7s %s"
-#: builtin/fsck.c:156
+#: builtin/fsck.c:138
msgid "wrong object type in link"
msgstr "tipo de objeto equivocado en link"
-#: builtin/fsck.c:172
+#: builtin/fsck.c:154
#, c-format
msgid ""
"broken link from %7s %s\n"
@@ -14491,240 +15169,240 @@
"link roto de %7s %s\n"
" a %7s %s"
-#: builtin/fsck.c:283
+#: builtin/fsck.c:265
#, c-format
msgid "missing %s %s"
msgstr "faltan %s %s"
-#: builtin/fsck.c:310
+#: builtin/fsck.c:292
#, c-format
msgid "unreachable %s %s"
msgstr "inalcanzable %s %s"
-#: builtin/fsck.c:330
+#: builtin/fsck.c:312
#, c-format
msgid "dangling %s %s"
msgstr "actualizando %s %s"
-#: builtin/fsck.c:340
+#: builtin/fsck.c:322
msgid "could not create lost-found"
msgstr "no se pudo crear lost-found"
-#: builtin/fsck.c:351
+#: builtin/fsck.c:333
#, c-format
msgid "could not finish '%s'"
msgstr "no se pudo finalizar '%s'"
-#: builtin/fsck.c:368
+#: builtin/fsck.c:350
#, c-format
msgid "Checking %s"
msgstr "Revisando %s"
-#: builtin/fsck.c:406
+#: builtin/fsck.c:388
#, c-format
msgid "Checking connectivity (%d objects)"
msgstr "Verificando conectividad (%d objetos)"
-#: builtin/fsck.c:425
+#: builtin/fsck.c:407
#, c-format
msgid "Checking %s %s"
msgstr "Revisando %s %s"
-#: builtin/fsck.c:430
+#: builtin/fsck.c:412
msgid "broken links"
msgstr "links rotos"
-#: builtin/fsck.c:439
+#: builtin/fsck.c:421
#, c-format
msgid "root %s"
msgstr "raíz %s"
-#: builtin/fsck.c:447
+#: builtin/fsck.c:429
#, c-format
msgid "tagged %s %s (%s) in %s"
msgstr "tag %s %s (%s) en %s"
-#: builtin/fsck.c:476
+#: builtin/fsck.c:458
#, c-format
msgid "%s: object corrupt or missing"
msgstr "%s: objecto corrupto o faltante"
-#: builtin/fsck.c:501
+#: builtin/fsck.c:483
#, c-format
msgid "%s: invalid reflog entry %s"
msgstr "%s: referencia inválida %s"
-#: builtin/fsck.c:515
+#: builtin/fsck.c:497
#, c-format
msgid "Checking reflog %s->%s"
msgstr "Revisando reflog %s->%s"
-#: builtin/fsck.c:549
+#: builtin/fsck.c:531
#, c-format
msgid "%s: invalid sha1 pointer %s"
msgstr "%s: puntero sha1 inválido %s"
-#: builtin/fsck.c:556
+#: builtin/fsck.c:538
#, c-format
msgid "%s: not a commit"
msgstr "%s: no es un commit"
-#: builtin/fsck.c:610
+#: builtin/fsck.c:592
msgid "notice: No default references"
msgstr "aviso: No hay referencias por defecto"
-#: builtin/fsck.c:625
+#: builtin/fsck.c:607
#, c-format
msgid "%s: object corrupt or missing: %s"
msgstr "%s: objeto corrupto o no encontrado: %s"
-#: builtin/fsck.c:638
+#: builtin/fsck.c:620
#, c-format
msgid "%s: object could not be parsed: %s"
msgstr "%s: no se puede analizar objeto: %s"
-#: builtin/fsck.c:658
+#: builtin/fsck.c:640
#, c-format
msgid "bad sha1 file: %s"
msgstr "mal sha1 de archivo: %s"
-#: builtin/fsck.c:673
+#: builtin/fsck.c:655
msgid "Checking object directory"
msgstr "Revisando directorio de objetos"
-#: builtin/fsck.c:676
+#: builtin/fsck.c:658
msgid "Checking object directories"
msgstr "Revisando objetos directorios"
-#: builtin/fsck.c:691
+#: builtin/fsck.c:673
#, c-format
msgid "Checking %s link"
msgstr "Revisando link %s"
-#: builtin/fsck.c:696 builtin/index-pack.c:843
+#: builtin/fsck.c:678 builtin/index-pack.c:865
#, c-format
msgid "invalid %s"
msgstr "%s inválido"
-#: builtin/fsck.c:703
+#: builtin/fsck.c:685
#, c-format
msgid "%s points to something strange (%s)"
msgstr "%s apunta a algo extraño (%s)"
-#: builtin/fsck.c:709
+#: builtin/fsck.c:691
#, c-format
msgid "%s: detached HEAD points at nothing"
msgstr "%s: HEAD desacoplado apunta a nada"
-#: builtin/fsck.c:713
+#: builtin/fsck.c:695
#, c-format
msgid "notice: %s points to an unborn branch (%s)"
msgstr "aviso: %s apunta a un branch no nacido (%s)"
-#: builtin/fsck.c:725
+#: builtin/fsck.c:707
msgid "Checking cache tree"
msgstr "Revisando el cache tree"
-#: builtin/fsck.c:730
+#: builtin/fsck.c:712
#, c-format
msgid "%s: invalid sha1 pointer in cache-tree"
msgstr "%s: puntero inválido sha1 en cache-tree"
-#: builtin/fsck.c:739
+#: builtin/fsck.c:721
msgid "non-tree in cache-tree"
msgstr "non-tree en cache-tree"
-#: builtin/fsck.c:770
+#: builtin/fsck.c:752
msgid "git fsck [<options>] [<object>...]"
msgstr "git fsck [<opciones>] [<objeto>...]"
-#: builtin/fsck.c:776
+#: builtin/fsck.c:758
msgid "show unreachable objects"
msgstr "mostrar objetos ilegibles"
-#: builtin/fsck.c:777
+#: builtin/fsck.c:759
msgid "show dangling objects"
msgstr "mostrar objetos colgados"
-#: builtin/fsck.c:778
+#: builtin/fsck.c:760
msgid "report tags"
msgstr "reportar tags"
-#: builtin/fsck.c:779
+#: builtin/fsck.c:761
msgid "report root nodes"
msgstr "reportar nodos raíz"
-#: builtin/fsck.c:780
+#: builtin/fsck.c:762
msgid "make index objects head nodes"
msgstr "hacer objetos índices cabezas de nodos"
-#: builtin/fsck.c:781
+#: builtin/fsck.c:763
msgid "make reflogs head nodes (default)"
msgstr "hacer reflogs cabeza de nodos (default)"
-#: builtin/fsck.c:782
+#: builtin/fsck.c:764
msgid "also consider packs and alternate objects"
msgstr "también considerar paquetes y objetos alternos"
-#: builtin/fsck.c:783
+#: builtin/fsck.c:765
msgid "check only connectivity"
msgstr "revisar solo conectividad"
-#: builtin/fsck.c:784
+#: builtin/fsck.c:766 builtin/mktag.c:78
msgid "enable more strict checking"
msgstr "habilitar revisión más estricta"
-#: builtin/fsck.c:786
+#: builtin/fsck.c:768
msgid "write dangling objects in .git/lost-found"
msgstr "escribir objetos colgados en .git/lost-found"
-#: builtin/fsck.c:787 builtin/prune.c:134
+#: builtin/fsck.c:769 builtin/prune.c:134
msgid "show progress"
msgstr "mostrar progreso"
-#: builtin/fsck.c:788
+#: builtin/fsck.c:770
msgid "show verbose names for reachable objects"
msgstr "mostrar nombres verboso para objetos alcanzables"
-#: builtin/fsck.c:847 builtin/index-pack.c:225
+#: builtin/fsck.c:829 builtin/index-pack.c:261
msgid "Checking objects"
msgstr "Revisando objetos"
-#: builtin/fsck.c:875
+#: builtin/fsck.c:857
#, c-format
msgid "%s: object missing"
msgstr "%s: objeto faltante"
-#: builtin/fsck.c:886
+#: builtin/fsck.c:868
#, c-format
msgid "invalid parameter: expected sha1, got '%s'"
msgstr "parámetro inválido: sha1 esperado, se obtuvo '%s'"
-#: builtin/gc.c:35
+#: builtin/gc.c:39
msgid "git gc [<options>]"
msgstr "git gc [<opciones>]"
-#: builtin/gc.c:90
+#: builtin/gc.c:93
#, c-format
msgid "Failed to fstat %s: %s"
msgstr "Falló el fstat %s: %s"
-#: builtin/gc.c:126
+#: builtin/gc.c:129
#, c-format
msgid "failed to parse '%s' value '%s'"
msgstr "falló al analizar '%s' valor '%s'"
-#: builtin/gc.c:475 builtin/init-db.c:57
+#: builtin/gc.c:487 builtin/init-db.c:58
#, c-format
msgid "cannot stat '%s'"
msgstr "no se pudo definir '%s'"
-#: builtin/gc.c:484 builtin/notes.c:240 builtin/tag.c:530
+#: builtin/gc.c:496 builtin/notes.c:240 builtin/tag.c:562
#, c-format
msgid "cannot read '%s'"
msgstr "no se puede leer '%s'"
-#: builtin/gc.c:491
+#: builtin/gc.c:503
#, c-format
msgid ""
"The last gc run reported the following. Please correct the root cause\n"
@@ -14739,54 +15417,54 @@
"\n"
"%s"
-#: builtin/gc.c:539
+#: builtin/gc.c:551
msgid "prune unreferenced objects"
msgstr "limpiar objetos no referenciados"
-#: builtin/gc.c:541
+#: builtin/gc.c:553
msgid "be more thorough (increased runtime)"
msgstr "ser más exhaustivo (aumentar runtime)"
-#: builtin/gc.c:542
+#: builtin/gc.c:554
msgid "enable auto-gc mode"
msgstr "habilitar modo auto-gc"
-#: builtin/gc.c:545
+#: builtin/gc.c:557
msgid "force running gc even if there may be another gc running"
msgstr "forzar la ejecución de gc incluso si puede haber otro gc ejecutándose"
-#: builtin/gc.c:548
+#: builtin/gc.c:560
msgid "repack all other packs except the largest pack"
msgstr "reempaquetar todos los otros paquetes excepto el paquete más grande"
-#: builtin/gc.c:565
+#: builtin/gc.c:576
#, c-format
msgid "failed to parse gc.logexpiry value %s"
msgstr "falló al analizar valor %s de gc.logexpirity"
-#: builtin/gc.c:576
+#: builtin/gc.c:587
#, c-format
msgid "failed to parse prune expiry value %s"
msgstr "falló al analizar valor %s de prune expiry"
-#: builtin/gc.c:596
+#: builtin/gc.c:607
#, c-format
msgid "Auto packing the repository in background for optimum performance.\n"
msgstr ""
"Auto empaquetado del repositorio en segundo plano para un performance "
"óptimo.\n"
-#: builtin/gc.c:598
+#: builtin/gc.c:609
#, c-format
msgid "Auto packing the repository for optimum performance.\n"
msgstr "Auto empaquetado del repositorio para performance óptimo.\n"
-#: builtin/gc.c:599
+#: builtin/gc.c:610
#, c-format
msgid "See \"git help gc\" for manual housekeeping.\n"
msgstr "Vea \"git help gc\" para limpieza manual.\n"
-#: builtin/gc.c:639
+#: builtin/gc.c:650
#, c-format
msgid ""
"gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
@@ -14794,23 +15472,187 @@
"gc ya está ejecutándose en la máquina '%s' pid %<PRIuMAX> (use --force so no "
"es así)"
-#: builtin/gc.c:694
+#: builtin/gc.c:705
msgid ""
"There are too many unreachable loose objects; run 'git prune' to remove them."
msgstr ""
"Hay muchos objetos sueltos inalcanzables; ejecute 'git prune' para "
"eliminarlos."
+#: builtin/gc.c:715
+msgid ""
+"git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
+msgstr ""
+"git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
+
+#: builtin/gc.c:745
+msgid "--no-schedule is not allowed"
+msgstr "--no-schedule no está permitido"
+
+#: builtin/gc.c:750
+#, c-format
+msgid "unrecognized --schedule argument '%s'"
+msgstr "argumento --schedule no reconocido, '%s'"
+
+#: builtin/gc.c:869
+msgid "failed to write commit-graph"
+msgstr "no se pudo escribir el commit-graph"
+
+#: builtin/gc.c:914
+msgid "failed to fill remotes"
+msgstr "falló al borrar remotos"
+
+#: builtin/gc.c:1037
+msgid "failed to start 'git pack-objects' process"
+msgstr "no pudo iniciar el proceso 'git pack-objects'"
+
+#: builtin/gc.c:1054
+msgid "failed to finish 'git pack-objects' process"
+msgstr "no pudo finalizar el proceso 'git pack-objects'"
+
+#: builtin/gc.c:1106
+msgid "failed to write multi-pack-index"
+msgstr "no se pudo escribir el índice de paquetes múltiples"
+
+#: builtin/gc.c:1124
+msgid "'git multi-pack-index expire' failed"
+msgstr "'git multi-pack-index expire' falló"
+
+#: builtin/gc.c:1185
+msgid "'git multi-pack-index repack' failed"
+msgstr "'git multi-pack-index repack' falló"
+
+#: builtin/gc.c:1194
+msgid ""
+"skipping incremental-repack task because core.multiPackIndex is disabled"
+msgstr ""
+"omitiendo la tarea de reempaquetado incremental porque core.multiPackIndex "
+"está deshabilitado"
+
+#: builtin/gc.c:1298
+#, c-format
+msgid "lock file '%s' exists, skipping maintenance"
+msgstr "el archivo de bloqueo '%s' existe, omitiendo el mantenimiento"
+
+#: builtin/gc.c:1328
+#, c-format
+msgid "task '%s' failed"
+msgstr "tarea '%s' falló"
+
+#: builtin/gc.c:1410
+#, c-format
+msgid "'%s' is not a valid task"
+msgstr "'%s' no es una tarea válida"
+
+#: builtin/gc.c:1415
+#, c-format
+msgid "task '%s' cannot be selected multiple times"
+msgstr "tarea '%s' no puede ser seleccionada múltipes veces"
+
+#: builtin/gc.c:1430
+msgid "run tasks based on the state of the repository"
+msgstr "ejecutar tareas basadas en el estado del repositorio"
+
+#: builtin/gc.c:1431
+msgid "frequency"
+msgstr "frecuencia"
+
+#: builtin/gc.c:1432
+msgid "run tasks based on frequency"
+msgstr "ejecutar tareas basado en frecuencia"
+
+#: builtin/gc.c:1435
+msgid "do not report progress or other information over stderr"
+msgstr "no reportar progreso u otra información por medio de stderr"
+
+#: builtin/gc.c:1436
+msgid "task"
+msgstr "tarea"
+
+#: builtin/gc.c:1437
+msgid "run a specific task"
+msgstr "ruta a tarea específica"
+
+#: builtin/gc.c:1454
+msgid "use at most one of --auto and --schedule=<frequency>"
+msgstr "usar como máximo una entre --auto y --schedule=<frecuencia>"
+
+#: builtin/gc.c:1497
+msgid "failed to run 'git config'"
+msgstr "no pudo ejecutar 'git config'"
+
+#: builtin/gc.c:1562
+#, c-format
+msgid "failed to expand path '%s'"
+msgstr "falló al expandir la ruta '%s'"
+
+#: builtin/gc.c:1591
+msgid "failed to start launchctl"
+msgstr "Falló al iniciar launchctl."
+
+#: builtin/gc.c:1628
+#, c-format
+msgid "failed to create directories for '%s'"
+msgstr "falló al crear directorios para '%s'"
+
+#: builtin/gc.c:1689
+#, c-format
+msgid "failed to bootstrap service %s"
+msgstr "falló al generar el servicio %s"
+
+#: builtin/gc.c:1760
+msgid "failed to create temp xml file"
+msgstr "no se pudo crear el archivo temp xml"
+
+#: builtin/gc.c:1850
+msgid "failed to start schtasks"
+msgstr "no pudo iniciar schtasks"
+
+#: builtin/gc.c:1894
+msgid "failed to run 'crontab -l'; your system might not support 'cron'"
+msgstr ""
+"no pudo ejecutar 'crontab -l'; es posible que su sistema no soporte 'cron'"
+
+#: builtin/gc.c:1911
+msgid "failed to run 'crontab'; your system might not support 'cron'"
+msgstr ""
+"no pudo ejecutar 'crontab'; es posible que su sistema no soporte 'cron'"
+
+#: builtin/gc.c:1915
+msgid "failed to open stdin of 'crontab'"
+msgstr "no pudo abrir stdin de 'crontab'"
+
+#: builtin/gc.c:1956
+msgid "'crontab' died"
+msgstr "'crontab' murió"
+
+#: builtin/gc.c:1990
+msgid "another process is scheduling background maintenance"
+msgstr "otro proceso está programando el mantenimiento en segundo plano"
+
+#: builtin/gc.c:2009
+msgid "failed to add repo to global config"
+msgstr "no se pudo agregar el repositorio a la configuración global"
+
+#: builtin/gc.c:2019
+msgid "git maintenance <subcommand> [<options>]"
+msgstr "git maintenance <subcomando> [<opciones>]"
+
+#: builtin/gc.c:2038
+#, c-format
+msgid "invalid subcommand: %s"
+msgstr "subcomando no válido: %s"
+
#: builtin/grep.c:30
msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
msgstr "git grep [<opciones>] [-e] <patrón> [<rev>...] [[--] <ruta>...]"
-#: builtin/grep.c:225
+#: builtin/grep.c:223
#, c-format
msgid "grep: failed to create thread: %s"
msgstr "grep: falló al crear el hilo: %s"
-#: builtin/grep.c:279
+#: builtin/grep.c:277
#, c-format
msgid "invalid number of threads specified (%d) for %s"
msgstr "número inválido de hilos especificado (%d) para %s"
@@ -14819,262 +15661,262 @@
#. variable for tweaking threads, currently
#. grep.threads
#.
-#: builtin/grep.c:287 builtin/index-pack.c:1537 builtin/index-pack.c:1727
-#: builtin/pack-objects.c:2904
+#: builtin/grep.c:285 builtin/index-pack.c:1589 builtin/index-pack.c:1808
+#: builtin/pack-objects.c:2944
#, c-format
msgid "no threads support, ignoring %s"
msgstr "no hay soporte para hilos, ignorando %s"
-#: builtin/grep.c:475 builtin/grep.c:600 builtin/grep.c:640
+#: builtin/grep.c:473 builtin/grep.c:601 builtin/grep.c:641
#, c-format
msgid "unable to read tree (%s)"
msgstr "no es posible leer el árbol (%s)"
-#: builtin/grep.c:655
+#: builtin/grep.c:656
#, c-format
msgid "unable to grep from object of type %s"
msgstr "no es posible realizar grep del objeto de tipo %s"
-#: builtin/grep.c:724
+#: builtin/grep.c:737
#, c-format
msgid "switch `%c' expects a numerical value"
msgstr "switch `%c' espera un valor numérico"
-#: builtin/grep.c:823
+#: builtin/grep.c:836
msgid "search in index instead of in the work tree"
msgstr "buscar en el índice en lugar del árbol de trabajo"
-#: builtin/grep.c:825
+#: builtin/grep.c:838
msgid "find in contents not managed by git"
msgstr "encontrar en contenidos no manejados por git"
-#: builtin/grep.c:827
+#: builtin/grep.c:840
msgid "search in both tracked and untracked files"
msgstr "buscar en archivos rastreados y no rastreados"
-#: builtin/grep.c:829
+#: builtin/grep.c:842
msgid "ignore files specified via '.gitignore'"
msgstr "ignorar archivos especificados via '.gitignore'"
-#: builtin/grep.c:831
+#: builtin/grep.c:844
msgid "recursively search in each submodule"
msgstr "búsqueda recursiva en cada submódulo"
-#: builtin/grep.c:834
+#: builtin/grep.c:847
msgid "show non-matching lines"
msgstr "mostrar líneas que no concuerdan"
-#: builtin/grep.c:836
+#: builtin/grep.c:849
msgid "case insensitive matching"
msgstr "búsqueda insensible a mayúsculas"
-#: builtin/grep.c:838
+#: builtin/grep.c:851
msgid "match patterns only at word boundaries"
msgstr "concordar patrón solo a los límites de las palabras"
-#: builtin/grep.c:840
+#: builtin/grep.c:853
msgid "process binary files as text"
msgstr "procesar archivos binarios como texto"
-#: builtin/grep.c:842
+#: builtin/grep.c:855
msgid "don't match patterns in binary files"
msgstr "no concordar patrones en archivos binarios"
-#: builtin/grep.c:845
+#: builtin/grep.c:858
msgid "process binary files with textconv filters"
msgstr "procesar archivos binarios con filtros textconv"
-#: builtin/grep.c:847
+#: builtin/grep.c:860
msgid "search in subdirectories (default)"
msgstr "buscar en subdirectorios (default)"
-#: builtin/grep.c:849
+#: builtin/grep.c:862
msgid "descend at most <depth> levels"
msgstr "descender como máximo <valor-de-profundiad> niveles"
-#: builtin/grep.c:853
+#: builtin/grep.c:866
msgid "use extended POSIX regular expressions"
msgstr "usar expresiones regulares POSIX extendidas"
-#: builtin/grep.c:856
+#: builtin/grep.c:869
msgid "use basic POSIX regular expressions (default)"
msgstr "usar expresiones regulares POSIX (default)"
-#: builtin/grep.c:859
+#: builtin/grep.c:872
msgid "interpret patterns as fixed strings"
msgstr "interpretar patrones como strings arreglados"
-#: builtin/grep.c:862
+#: builtin/grep.c:875
msgid "use Perl-compatible regular expressions"
msgstr "usar expresiones regulares compatibles con Perl"
-#: builtin/grep.c:865
+#: builtin/grep.c:878
msgid "show line numbers"
msgstr "mostrar números de línea"
-#: builtin/grep.c:866
+#: builtin/grep.c:879
msgid "show column number of first match"
msgstr "mostrar el número de columna de la primer coincidencia"
-#: builtin/grep.c:867
+#: builtin/grep.c:880
msgid "don't show filenames"
msgstr "no mostrar nombres de archivo"
-#: builtin/grep.c:868
+#: builtin/grep.c:881
msgid "show filenames"
msgstr "mostrar nombres de archivo"
-#: builtin/grep.c:870
+#: builtin/grep.c:883
msgid "show filenames relative to top directory"
msgstr "mostrar nombres de archivo relativos al directorio superior"
-#: builtin/grep.c:872
+#: builtin/grep.c:885
msgid "show only filenames instead of matching lines"
msgstr "mostrar solo nombres de archivos en lugar de líneas encontradas"
-#: builtin/grep.c:874
+#: builtin/grep.c:887
msgid "synonym for --files-with-matches"
msgstr "sinónimo para --files-with-matches"
-#: builtin/grep.c:877
+#: builtin/grep.c:890
msgid "show only the names of files without match"
msgstr "mostrar solo los nombres de archivos sin coincidencias"
-#: builtin/grep.c:879
+#: builtin/grep.c:892
msgid "print NUL after filenames"
msgstr "imprimir NUL después del nombre de archivo"
-#: builtin/grep.c:882
+#: builtin/grep.c:895
msgid "show only matching parts of a line"
msgstr "mostrar solo partes que concuerdan de una línea"
-#: builtin/grep.c:884
+#: builtin/grep.c:897
msgid "show the number of matches instead of matching lines"
msgstr "mostrar el número de concordancias en lugar de las líneas concordantes"
-#: builtin/grep.c:885
+#: builtin/grep.c:898
msgid "highlight matches"
msgstr "resaltar concordancias"
-#: builtin/grep.c:887
+#: builtin/grep.c:900
msgid "print empty line between matches from different files"
msgstr "imprimir una línea vacía entre coincidencias de diferentes archivos"
-#: builtin/grep.c:889
+#: builtin/grep.c:902
msgid "show filename only once above matches from same file"
msgstr ""
"mostrar el nombre de archivo solo una vez para concordancias en el mismo "
"archivo"
-#: builtin/grep.c:892
+#: builtin/grep.c:905
msgid "show <n> context lines before and after matches"
msgstr "mostrar <n> líneas de contexto antes y después de la concordancia"
-#: builtin/grep.c:895
+#: builtin/grep.c:908
msgid "show <n> context lines before matches"
msgstr "mostrar <n> líneas de contexto antes de las concordancias"
-#: builtin/grep.c:897
+#: builtin/grep.c:910
msgid "show <n> context lines after matches"
msgstr "mostrar <n> líneas de context después de las concordancias"
-#: builtin/grep.c:899
+#: builtin/grep.c:912
msgid "use <n> worker threads"
msgstr "usar <n> hilos de trabajo"
-#: builtin/grep.c:900
+#: builtin/grep.c:913
msgid "shortcut for -C NUM"
msgstr "atajo para -C NUM"
-#: builtin/grep.c:903
+#: builtin/grep.c:916
msgid "show a line with the function name before matches"
msgstr ""
"mostrar una línea con el nombre de la función antes de las concordancias"
-#: builtin/grep.c:905
+#: builtin/grep.c:918
msgid "show the surrounding function"
msgstr "mostrar la función circundante"
-#: builtin/grep.c:908
+#: builtin/grep.c:921
msgid "read patterns from file"
msgstr "leer patrones del archivo"
-#: builtin/grep.c:910
+#: builtin/grep.c:923
msgid "match <pattern>"
msgstr "concordar <patrón>"
-#: builtin/grep.c:912
+#: builtin/grep.c:925
msgid "combine patterns specified with -e"
msgstr "combinar patrones especificados con -e"
-#: builtin/grep.c:924
+#: builtin/grep.c:937
msgid "indicate hit with exit status without output"
msgstr "indicar concordancia con exit status sin output"
-#: builtin/grep.c:926
+#: builtin/grep.c:939
msgid "show only matches from files that match all patterns"
msgstr ""
"mostrar solo concordancias con archivos que concuerdan todos los patrones"
-#: builtin/grep.c:928
-msgid "show parse tree for grep expression"
-msgstr "mostrar árbol analizado para la expresión grep"
-
-#: builtin/grep.c:932
+#: builtin/grep.c:942
msgid "pager"
msgstr "paginador"
-#: builtin/grep.c:932
+#: builtin/grep.c:942
msgid "show matching files in the pager"
msgstr "mostrar archivos concordantes en el paginador"
-#: builtin/grep.c:936
+#: builtin/grep.c:946
msgid "allow calling of grep(1) (ignored by this build)"
msgstr "permitir el llamado de grep(1) (ignorado por esta build)"
-#: builtin/grep.c:1003
+#: builtin/grep.c:1012
msgid "no pattern given"
msgstr "no se ha entregado patrón"
-#: builtin/grep.c:1039
+#: builtin/grep.c:1048
msgid "--no-index or --untracked cannot be used with revs"
msgstr "--no-index o --untracked no se puede usar con revs"
-#: builtin/grep.c:1047
+#: builtin/grep.c:1056
#, c-format
msgid "unable to resolve revision: %s"
msgstr "no se posible resolver revisión: %s"
-#: builtin/grep.c:1077
+#: builtin/grep.c:1086
msgid "--untracked not supported with --recurse-submodules"
msgstr "--untracked no es soportada con --recurse-submodules"
-#: builtin/grep.c:1081
+#: builtin/grep.c:1090
msgid "invalid option combination, ignoring --threads"
msgstr "combinación de opciones inválida, ignorando --threads"
-#: builtin/grep.c:1084 builtin/pack-objects.c:3623
+#: builtin/grep.c:1093 builtin/pack-objects.c:3672
msgid "no threads support, ignoring --threads"
msgstr "no se soportan hilos, ignorando --threads"
-#: builtin/grep.c:1087 builtin/index-pack.c:1534 builtin/pack-objects.c:2901
+#: builtin/grep.c:1096 builtin/index-pack.c:1586 builtin/pack-objects.c:2941
#, c-format
msgid "invalid number of threads specified (%d)"
msgstr "número inválido de hilos especificado (%d)"
-#: builtin/grep.c:1121
+#: builtin/grep.c:1130
msgid "--open-files-in-pager only works on the worktree"
msgstr "--open-files-in-pager solo funciona en el árbol de trabajo"
-#: builtin/grep.c:1147
+#: builtin/grep.c:1156
msgid "--cached or --untracked cannot be used with --no-index"
msgstr "--cached o --untracked no pueden ser usadas con --no-index"
-#: builtin/grep.c:1153
+#: builtin/grep.c:1159
+msgid "--untracked cannot be used with --cached"
+msgstr "--untracked no se puede usar con --cached"
+
+#: builtin/grep.c:1165
msgid "--[no-]exclude-standard cannot be used for tracked contents"
msgstr "--[no-]exclude-standard no puede ser usada para contenido rastreado"
-#: builtin/grep.c:1161
+#: builtin/grep.c:1173
msgid "both --cached and trees are given"
msgstr "--cached y árboles han sido entregados"
@@ -15207,12 +16049,12 @@
msgid "no info viewer handled the request"
msgstr "ningún visor de info manejo la petición"
-#: builtin/help.c:520 builtin/help.c:531 git.c:337
+#: builtin/help.c:520 builtin/help.c:531 git.c:340
#, c-format
msgid "'%s' is aliased to '%s'"
msgstr "'%s' tiene el alias '%s'"
-#: builtin/help.c:534 git.c:367
+#: builtin/help.c:534 git.c:372
#, c-format
msgid "bad alias.%s string: %s"
msgstr "mal alias.%s string: %s"
@@ -15226,353 +16068,357 @@
msgid "'git help config' for more information"
msgstr "'git help config' para más información"
-#: builtin/index-pack.c:185
+#: builtin/index-pack.c:221
#, c-format
msgid "object type mismatch at %s"
msgstr "el tipo del objeto no concuerda en %s"
-#: builtin/index-pack.c:205
+#: builtin/index-pack.c:241
#, c-format
msgid "did not receive expected object %s"
msgstr "no se recibió el objeto esperado %s"
-#: builtin/index-pack.c:208
+#: builtin/index-pack.c:244
#, c-format
msgid "object %s: expected type %s, found %s"
msgstr "objeto %s: tipo esperado %s, encontrado %s"
-#: builtin/index-pack.c:258
+#: builtin/index-pack.c:294
#, c-format
msgid "cannot fill %d byte"
msgid_plural "cannot fill %d bytes"
msgstr[0] "no se puede llenar %d byte"
msgstr[1] "no se pueden llenar %d bytes"
-#: builtin/index-pack.c:268
+#: builtin/index-pack.c:304
msgid "early EOF"
msgstr "EOF temprano"
-#: builtin/index-pack.c:269
+#: builtin/index-pack.c:305
msgid "read error on input"
msgstr "leer error en input"
-#: builtin/index-pack.c:281
+#: builtin/index-pack.c:317
msgid "used more bytes than were available"
msgstr "se usaron más bytes de los disponibles"
-#: builtin/index-pack.c:288 builtin/pack-objects.c:618
+#: builtin/index-pack.c:324 builtin/pack-objects.c:624
msgid "pack too large for current definition of off_t"
msgstr "paquete muy grande para la definición actual de off_t"
-#: builtin/index-pack.c:291 builtin/unpack-objects.c:95
+#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
msgid "pack exceeds maximum allowed size"
msgstr "paquete excede el máximo tamaño permitido"
-#: builtin/index-pack.c:306 builtin/repack.c:250
+#: builtin/index-pack.c:342
#, c-format
msgid "unable to create '%s'"
msgstr "no se puede crear '%s'"
-#: builtin/index-pack.c:312
+#: builtin/index-pack.c:348
#, c-format
msgid "cannot open packfile '%s'"
msgstr "no se puede abrir el archivo de paquete '%s'"
-#: builtin/index-pack.c:326
+#: builtin/index-pack.c:362
msgid "pack signature mismatch"
msgstr "firma del paquete no concuerda"
-#: builtin/index-pack.c:328
+#: builtin/index-pack.c:364
#, c-format
msgid "pack version %<PRIu32> unsupported"
msgstr "versión de paquete %<PRIu32> no soportada"
-#: builtin/index-pack.c:346
+#: builtin/index-pack.c:382
#, c-format
msgid "pack has bad object at offset %<PRIuMAX>: %s"
msgstr "paquete tiene un mal objeto en el offset %<PRIuMAX>: %s"
-#: builtin/index-pack.c:466
+#: builtin/index-pack.c:488
#, c-format
msgid "inflate returned %d"
msgstr "inflate devolvió %d"
-#: builtin/index-pack.c:515
+#: builtin/index-pack.c:537
msgid "offset value overflow for delta base object"
msgstr "valor de offset desbordado para el objeto base delta"
-#: builtin/index-pack.c:523
+#: builtin/index-pack.c:545
msgid "delta base offset is out of bound"
msgstr "offset de base delta está fuera de límites"
-#: builtin/index-pack.c:531
+#: builtin/index-pack.c:553
#, c-format
msgid "unknown object type %d"
msgstr "tipo de objeto %d desconocido"
-#: builtin/index-pack.c:562
+#: builtin/index-pack.c:584
msgid "cannot pread pack file"
msgstr "no se puede propagar el paquete"
-#: builtin/index-pack.c:564
+#: builtin/index-pack.c:586
#, c-format
msgid "premature end of pack file, %<PRIuMAX> byte missing"
msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
msgstr[0] "final prematuro de archivo de paquete, %<PRIuMAX> byte faltante"
msgstr[1] "final prematuro de archivo de paquete, %<PRIuMAX> bytes faltantes"
-#: builtin/index-pack.c:590
+#: builtin/index-pack.c:612
msgid "serious inflate inconsistency"
msgstr "inconsistencia seria en inflate"
-#: builtin/index-pack.c:735 builtin/index-pack.c:741 builtin/index-pack.c:765
-#: builtin/index-pack.c:804 builtin/index-pack.c:813
+#: builtin/index-pack.c:757 builtin/index-pack.c:763 builtin/index-pack.c:787
+#: builtin/index-pack.c:826 builtin/index-pack.c:835
#, c-format
msgid "SHA1 COLLISION FOUND WITH %s !"
msgstr "¡COLISIÓN DE TIPO SHA1 ENCONTRADA CON %s !"
-#: builtin/index-pack.c:738 builtin/pack-objects.c:170
-#: builtin/pack-objects.c:230 builtin/pack-objects.c:325
+#: builtin/index-pack.c:760 builtin/pack-objects.c:171
+#: builtin/pack-objects.c:231 builtin/pack-objects.c:326
#, c-format
msgid "unable to read %s"
msgstr "no se posible leer %s"
-#: builtin/index-pack.c:802
+#: builtin/index-pack.c:824
#, c-format
msgid "cannot read existing object info %s"
msgstr "no se puede leer la información existente del objeto %s"
-#: builtin/index-pack.c:810
+#: builtin/index-pack.c:832
#, c-format
msgid "cannot read existing object %s"
msgstr "no se puede leer el objeto existente %s"
-#: builtin/index-pack.c:824
+#: builtin/index-pack.c:846
#, c-format
msgid "invalid blob object %s"
msgstr "objeto blob %s inválido"
-#: builtin/index-pack.c:827 builtin/index-pack.c:846
+#: builtin/index-pack.c:849 builtin/index-pack.c:868
msgid "fsck error in packed object"
msgstr "error de fsck en el objeto empaquetado"
-#: builtin/index-pack.c:848
+#: builtin/index-pack.c:870
#, c-format
msgid "Not all child objects of %s are reachable"
msgstr "No todos los objetos hijos de %s son alcanzables"
-#: builtin/index-pack.c:920 builtin/index-pack.c:951
+#: builtin/index-pack.c:931 builtin/index-pack.c:978
msgid "failed to apply delta"
msgstr "falló al aplicar delta"
-#: builtin/index-pack.c:1121
+#: builtin/index-pack.c:1161
msgid "Receiving objects"
msgstr "Recibiendo objetos"
-#: builtin/index-pack.c:1121
+#: builtin/index-pack.c:1161
msgid "Indexing objects"
msgstr "Indexando objetos"
-#: builtin/index-pack.c:1155
+#: builtin/index-pack.c:1195
msgid "pack is corrupted (SHA1 mismatch)"
msgstr "paquete está corrompido (SHA1 no concuerda)"
-#: builtin/index-pack.c:1160
+#: builtin/index-pack.c:1200
msgid "cannot fstat packfile"
msgstr "no se puede fstat al archivo de paquete"
-#: builtin/index-pack.c:1163
+#: builtin/index-pack.c:1203
msgid "pack has junk at the end"
msgstr "el paquete tiene basura al final"
-#: builtin/index-pack.c:1175
+#: builtin/index-pack.c:1215
msgid "confusion beyond insanity in parse_pack_objects()"
msgstr "confusión más allá de la locura en parse_pack_objects()"
-#: builtin/index-pack.c:1198
+#: builtin/index-pack.c:1238
msgid "Resolving deltas"
msgstr "Resolviendo deltas"
-#: builtin/index-pack.c:1208 builtin/pack-objects.c:2665
+#: builtin/index-pack.c:1249 builtin/pack-objects.c:2707
#, c-format
msgid "unable to create thread: %s"
msgstr "no es posible crear hilo: %s"
-#: builtin/index-pack.c:1249
+#: builtin/index-pack.c:1282
msgid "confusion beyond insanity"
msgstr "confusión más allá de la locura"
-#: builtin/index-pack.c:1255
+#: builtin/index-pack.c:1288
#, c-format
msgid "completed with %d local object"
msgid_plural "completed with %d local objects"
msgstr[0] "completado con %d objeto local"
msgstr[1] "completado con %d objetos locales"
-#: builtin/index-pack.c:1267
+#: builtin/index-pack.c:1300
#, c-format
msgid "Unexpected tail checksum for %s (disk corruption?)"
msgstr "Tail checksum para %s inesperada (¿corrupción de disco?)"
-#: builtin/index-pack.c:1271
+#: builtin/index-pack.c:1304
#, c-format
msgid "pack has %d unresolved delta"
msgid_plural "pack has %d unresolved deltas"
msgstr[0] "paquete tiene %d delta sin resolver"
msgstr[1] "paquete tiene %d deltas sin resolver"
-#: builtin/index-pack.c:1295
+#: builtin/index-pack.c:1328
#, c-format
msgid "unable to deflate appended object (%d)"
msgstr "no es posible desinflar el objeto adjunto (%d)"
-#: builtin/index-pack.c:1391
+#: builtin/index-pack.c:1424
#, c-format
msgid "local object %s is corrupt"
msgstr "objeto local %s está corrompido"
-#: builtin/index-pack.c:1405
+#: builtin/index-pack.c:1445
#, c-format
-msgid "packfile name '%s' does not end with '.pack'"
-msgstr "nombre '%s' de archivo de paquete no termina con '.pack'"
+msgid "packfile name '%s' does not end with '.%s'"
+msgstr "el nombre del archivo de paquete '%s' no termina con '.%s'"
-#: builtin/index-pack.c:1430
+#: builtin/index-pack.c:1469
#, c-format
msgid "cannot write %s file '%s'"
msgstr "no se puede escribir %s en el archivo '%s'"
-#: builtin/index-pack.c:1438
+#: builtin/index-pack.c:1477
#, c-format
msgid "cannot close written %s file '%s'"
msgstr "no se puede cerrar escrito %s en archivo '%s'"
-#: builtin/index-pack.c:1462
+#: builtin/index-pack.c:1503
msgid "error while closing pack file"
msgstr "error mientras se cierra el archivo paquete"
-#: builtin/index-pack.c:1476
+#: builtin/index-pack.c:1517
msgid "cannot store pack file"
msgstr "no se puede guardar el archivo paquete"
-#: builtin/index-pack.c:1484
+#: builtin/index-pack.c:1525
msgid "cannot store index file"
msgstr "no se puede guardar el archivo índice"
-#: builtin/index-pack.c:1528 builtin/pack-objects.c:2912
+#: builtin/index-pack.c:1534
+msgid "cannot store reverse index file"
+msgstr "no se puede almacenar el archivo de índice inverso"
+
+#: builtin/index-pack.c:1580 builtin/pack-objects.c:2952
#, c-format
msgid "bad pack.indexversion=%<PRIu32>"
msgstr "mal pack.indexversion=%<PRIu32>"
-#: builtin/index-pack.c:1592
+#: builtin/index-pack.c:1650
#, c-format
msgid "Cannot open existing pack file '%s'"
msgstr "No se puede abrir el archivo paquete existente '%s'"
-#: builtin/index-pack.c:1594
+#: builtin/index-pack.c:1652
#, c-format
msgid "Cannot open existing pack idx file for '%s'"
msgstr "No se puede abrir el índice del archivo paquete para '%s'"
-#: builtin/index-pack.c:1642
+#: builtin/index-pack.c:1700
#, c-format
msgid "non delta: %d object"
msgid_plural "non delta: %d objects"
msgstr[0] "no delta: %d objeto"
msgstr[1] "no delta: %d objetos"
-#: builtin/index-pack.c:1649
+#: builtin/index-pack.c:1707
#, c-format
msgid "chain length = %d: %lu object"
msgid_plural "chain length = %d: %lu objects"
msgstr[0] "largo de cadena = %d: %lu objeto"
msgstr[1] "largo de cadena = %d: %lu objetos"
-#: builtin/index-pack.c:1689
+#: builtin/index-pack.c:1765
msgid "Cannot come back to cwd"
msgstr "No se puede regresar a cwd"
-#: builtin/index-pack.c:1738 builtin/index-pack.c:1741
-#: builtin/index-pack.c:1757 builtin/index-pack.c:1761
+#: builtin/index-pack.c:1819 builtin/index-pack.c:1822
+#: builtin/index-pack.c:1838 builtin/index-pack.c:1842
#, c-format
msgid "bad %s"
msgstr "mal %s"
-#: builtin/index-pack.c:1767 builtin/init-db.c:392 builtin/init-db.c:621
+#: builtin/index-pack.c:1848 builtin/init-db.c:392 builtin/init-db.c:625
#, c-format
msgid "unknown hash algorithm '%s'"
msgstr "algoritmo hash desconocido '%s'"
-#: builtin/index-pack.c:1782
+#: builtin/index-pack.c:1867
msgid "--fix-thin cannot be used without --stdin"
msgstr "--fix-thin no puede ser usada sin --stdin"
-#: builtin/index-pack.c:1784
+#: builtin/index-pack.c:1869
msgid "--stdin requires a git repository"
msgstr "--stdin requiere un repositorio git"
-#: builtin/index-pack.c:1786
+#: builtin/index-pack.c:1871
msgid "--object-format cannot be used with --stdin"
msgstr "--object-format no se puede usar con --stdin"
-#: builtin/index-pack.c:1792
+#: builtin/index-pack.c:1886
msgid "--verify with no packfile name given"
msgstr "--verify no recibió ningún nombre de archivo de paquete"
-#: builtin/index-pack.c:1840 builtin/unpack-objects.c:582
+#: builtin/index-pack.c:1956 builtin/unpack-objects.c:582
msgid "fsck error in pack objects"
msgstr "error de fsck en objetos paquete"
-#: builtin/init-db.c:63
+#: builtin/init-db.c:64
#, c-format
msgid "cannot stat template '%s'"
msgstr "no se pudo definir template '%s'"
-#: builtin/init-db.c:68
+#: builtin/init-db.c:69
#, c-format
msgid "cannot opendir '%s'"
msgstr "no se puede abrir directorio '%s'"
-#: builtin/init-db.c:80
+#: builtin/init-db.c:81
#, c-format
msgid "cannot readlink '%s'"
msgstr "no se puede leer link '%s'"
-#: builtin/init-db.c:82
+#: builtin/init-db.c:83
#, c-format
msgid "cannot symlink '%s' '%s'"
msgstr "no se puede crear symlink '%s' '%s'"
-#: builtin/init-db.c:88
+#: builtin/init-db.c:89
#, c-format
msgid "cannot copy '%s' to '%s'"
msgstr "no se puede copiar '%s' a '%s'"
-#: builtin/init-db.c:92
+#: builtin/init-db.c:93
#, c-format
msgid "ignoring template %s"
msgstr "ignorando template %s"
-#: builtin/init-db.c:123
+#: builtin/init-db.c:124
#, c-format
msgid "templates not found in %s"
msgstr "template no encontrado en %s"
-#: builtin/init-db.c:138
+#: builtin/init-db.c:139
#, c-format
msgid "not copying templates from '%s': %s"
msgstr "no se copian templates de '%s': %s"
-#: builtin/init-db.c:276
+#: builtin/init-db.c:275
#, c-format
msgid "invalid initial branch name: '%s'"
msgstr "nombre de rama inicial inválido: '%s'"
-#: builtin/init-db.c:368
+#: builtin/init-db.c:367
#, c-format
msgid "unable to handle file type %d"
msgstr "no es posible manejar el tipo de archivo %d"
-#: builtin/init-db.c:371
+#: builtin/init-db.c:370
#, c-format
msgid "unable to move %s to %s"
msgstr "no se puede mover %s a %s"
@@ -15586,32 +16432,32 @@
msgid "%s already exists"
msgstr "%s ya existe"
-#: builtin/init-db.c:444
+#: builtin/init-db.c:445
#, c-format
msgid "re-init: ignored --initial-branch=%s"
msgstr "re-init: ignorando --initial-branch=%s"
-#: builtin/init-db.c:475
+#: builtin/init-db.c:476
#, c-format
msgid "Reinitialized existing shared Git repository in %s%s\n"
msgstr "Reinicializado el repositorio Git compartido existente en %s%s\n"
-#: builtin/init-db.c:476
+#: builtin/init-db.c:477
#, c-format
msgid "Reinitialized existing Git repository in %s%s\n"
msgstr "Reinicializado el repositorio Git existente en %s%s\n"
-#: builtin/init-db.c:480
+#: builtin/init-db.c:481
#, c-format
msgid "Initialized empty shared Git repository in %s%s\n"
msgstr "Inicializado repositorio Git compartido vacío en %s%s\n"
-#: builtin/init-db.c:481
+#: builtin/init-db.c:482
#, c-format
msgid "Initialized empty Git repository in %s%s\n"
msgstr "Inicializado repositorio Git vacío en %s%s\n"
-#: builtin/init-db.c:530
+#: builtin/init-db.c:531
msgid ""
"git init [-q | --quiet] [--bare] [--template=<template-directory>] [--"
"shared[=<permissions>]] [<directory>]"
@@ -15619,38 +16465,42 @@
"git init [-q | --quiet] [--bare] [--template=<directorio-template>] [--"
"shared[=<permisos>]] [<directorio>]"
-#: builtin/init-db.c:556
+#: builtin/init-db.c:557
msgid "permissions"
msgstr "permisos"
-#: builtin/init-db.c:557
+#: builtin/init-db.c:558
msgid "specify that the git repository is to be shared amongst several users"
msgstr ""
"especifica que el repositorio de git será compartido entre varios usuarios"
-#: builtin/init-db.c:563
+#: builtin/init-db.c:564
msgid "override the name of the initial branch"
msgstr "sobrescribir el nombre de la rama inicial"
-#: builtin/init-db.c:564
+#: builtin/init-db.c:565 builtin/verify-pack.c:74
msgid "hash"
msgstr "hash"
-#: builtin/init-db.c:565 builtin/show-index.c:22
+#: builtin/init-db.c:566 builtin/show-index.c:22 builtin/verify-pack.c:75
msgid "specify the hash algorithm to use"
msgstr "especificar el algoritmo hash a usar"
-#: builtin/init-db.c:598 builtin/init-db.c:603
+#: builtin/init-db.c:573
+msgid "--separate-git-dir and --bare are mutually exclusive"
+msgstr "--separate-git-dir y --bare son mutuamente excluyentes"
+
+#: builtin/init-db.c:602 builtin/init-db.c:607
#, c-format
msgid "cannot mkdir %s"
msgstr "no se pude crear directorio %s"
-#: builtin/init-db.c:607
+#: builtin/init-db.c:611 builtin/init-db.c:666
#, c-format
msgid "cannot chdir to %s"
msgstr "no se puede aplicar chdir a %s"
-#: builtin/init-db.c:634
+#: builtin/init-db.c:638
#, c-format
msgid ""
"%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
@@ -15659,11 +16509,15 @@
"%s (o --work-tree=<directorio>) no se permite sin especificar %s (o --git-"
"dir=<directorio>)"
-#: builtin/init-db.c:662
+#: builtin/init-db.c:690
#, c-format
msgid "Cannot access work tree '%s'"
msgstr "No se puede acceder al árbol de trabajo '%s'"
+#: builtin/init-db.c:695
+msgid "--separate-git-dir incompatible with bare repository"
+msgstr "--separate-git-dir incompatible con el repositorio desnudo"
+
#: builtin/interpret-trailers.c:16
msgid ""
"git interpret-trailers [--in-place] [--trim-empty] [(--trailer "
@@ -15728,126 +16582,130 @@
msgid "no input file given for in-place editing"
msgstr "no se entregó archivo de entrada para edición en lugar"
-#: builtin/log.c:57
+#: builtin/log.c:59
msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
msgstr "git log [<opciones>] [<rango-de-revisión>] [[--] <ruta>...]"
-#: builtin/log.c:58
+#: builtin/log.c:60
msgid "git show [<options>] <object>..."
msgstr "git show [<opciones>] <objeto>..."
-#: builtin/log.c:111
+#: builtin/log.c:113
#, c-format
msgid "invalid --decorate option: %s"
msgstr "opción --decorate inválida: %s"
-#: builtin/log.c:178
+#: builtin/log.c:180
msgid "show source"
msgstr "mostrar fuente"
-#: builtin/log.c:179
-msgid "Use mail map file"
-msgstr "Usar archivo de mapa de mail"
+#: builtin/log.c:181
+msgid "use mail map file"
+msgstr "usar archivo de mapa de mail"
-#: builtin/log.c:182
+#: builtin/log.c:184
msgid "only decorate refs that match <pattern>"
msgstr "solo decorar refs que concuerden con <patrón>"
-#: builtin/log.c:184
+#: builtin/log.c:186
msgid "do not decorate refs that match <pattern>"
msgstr "no decorar refs que concuerden con <patrón>"
-#: builtin/log.c:185
+#: builtin/log.c:187
msgid "decorate options"
msgstr "opciones de decorado"
-#: builtin/log.c:188
-msgid "Process line range n,m in file, counting from 1"
-msgstr "Procesar rango de líneas n,m en archivo, contando desde 1"
+#: builtin/log.c:190
+msgid ""
+"trace the evolution of line range <start>,<end> or function :<funcname> in "
+"<file>"
+msgstr ""
+"rastrear la evolución del rango de línea <inicio>, <fin> o función: <nombre-"
+"funcion> en <archivo>"
-#: builtin/log.c:298
+#: builtin/log.c:213
+msgid "-L<range>:<file> cannot be used with pathspec"
+msgstr "-L<rango>:<archivo> no se puede usar con pathspec"
+
+#: builtin/log.c:303
#, c-format
msgid "Final output: %d %s\n"
msgstr "Salida final: %d %s\n"
-#: builtin/log.c:556
+#: builtin/log.c:566
#, c-format
msgid "git show %s: bad file"
msgstr "git show %s: mal archivo"
-#: builtin/log.c:571 builtin/log.c:666
+#: builtin/log.c:581 builtin/log.c:671
#, c-format
msgid "could not read object %s"
msgstr "no se pudo leer objeto %s"
-#: builtin/log.c:691
+#: builtin/log.c:696
#, c-format
msgid "unknown type: %d"
msgstr "tipo desconocido: %d"
-#: builtin/log.c:835
+#: builtin/log.c:841
#, c-format
msgid "%s: invalid cover from description mode"
msgstr "%s: modo cover from description inválido"
-#: builtin/log.c:842
+#: builtin/log.c:848
msgid "format.headers without value"
msgstr "formate.headers. sin valor"
-#: builtin/log.c:957
-msgid "name of output directory is too long"
-msgstr "nombre del directorio de salida es muy largo"
-
-#: builtin/log.c:973
+#: builtin/log.c:977
#, c-format
msgid "cannot open patch file %s"
msgstr "no se puede abrir archivo patch %s"
-#: builtin/log.c:990
+#: builtin/log.c:994
msgid "need exactly one range"
msgstr "necesita exactamente un rango"
-#: builtin/log.c:1000
+#: builtin/log.c:1004
msgid "not a range"
msgstr "no es un rango"
-#: builtin/log.c:1164
+#: builtin/log.c:1168
msgid "cover letter needs email format"
msgstr "letras de portada necesita formato email"
-#: builtin/log.c:1170
+#: builtin/log.c:1174
msgid "failed to create cover-letter file"
msgstr "falló al crear los archivos cover-letter"
-#: builtin/log.c:1249
+#: builtin/log.c:1261
#, c-format
msgid "insane in-reply-to: %s"
msgstr "insano in-reply-to: %s"
-#: builtin/log.c:1276
+#: builtin/log.c:1288
msgid "git format-patch [<options>] [<since> | <revision-range>]"
msgstr "git format-patch [<opciones>] [<desde> | <rango-de-revisiones>]"
-#: builtin/log.c:1334
+#: builtin/log.c:1346
msgid "two output directories?"
msgstr "¿dos directorios de salida?"
-#: builtin/log.c:1445 builtin/log.c:2217 builtin/log.c:2219 builtin/log.c:2231
+#: builtin/log.c:1497 builtin/log.c:2317 builtin/log.c:2319 builtin/log.c:2331
#, c-format
msgid "unknown commit %s"
msgstr "commit desconocido %s"
-#: builtin/log.c:1455 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1508 builtin/replace.c:58 builtin/replace.c:207
#: builtin/replace.c:210
#, c-format
msgid "failed to resolve '%s' as a valid ref"
msgstr "falló al resolver '%s' como ref válida"
-#: builtin/log.c:1460
+#: builtin/log.c:1517
msgid "could not find exact merge base"
msgstr "no se pudo encontrar una base de fusión exacta"
-#: builtin/log.c:1464
+#: builtin/log.c:1527
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"
@@ -15859,281 +16717,290 @@
"O puedes especificar un commit base mediante --base=<id-commit-base> "
"manualmente"
-#: builtin/log.c:1484
+#: builtin/log.c:1550
msgid "failed to find exact merge base"
msgstr "falló al encontrar una base de fusión exacta"
-#: builtin/log.c:1495
+#: builtin/log.c:1567
msgid "base commit should be the ancestor of revision list"
msgstr "el commit base debe ser el ancestro de la lista de revisión"
-#: builtin/log.c:1499
+#: builtin/log.c:1577
msgid "base commit shouldn't be in revision list"
msgstr "el commit base no debe estar en la lista de revisión"
-#: builtin/log.c:1552
+#: builtin/log.c:1635
msgid "cannot get patch id"
msgstr "no se puede obtener id de patch"
-#: builtin/log.c:1604
-msgid "failed to infer range-diff ranges"
-msgstr "falló al inferir rangos range-diff"
+#: builtin/log.c:1692
+msgid "failed to infer range-diff origin of current series"
+msgstr "falló al inferir rangos range-diff de la serie actual"
-#: builtin/log.c:1650
+#: builtin/log.c:1694
+#, c-format
+msgid "using '%s' as range-diff origin of current series"
+msgstr "usando '%s' como origen de diferencia de rango de la serie actual"
+
+#: builtin/log.c:1738
msgid "use [PATCH n/m] even with a single patch"
msgstr "use [PATCH n/m] incluso con un único parche"
-#: builtin/log.c:1653
+#: builtin/log.c:1741
msgid "use [PATCH] even with multiple patches"
msgstr "use [PATCH] incluso con múltiples parches"
-#: builtin/log.c:1657
+#: builtin/log.c:1745
msgid "print patches to standard out"
msgstr "mostrar parches en standard out"
-#: builtin/log.c:1659
+#: builtin/log.c:1747
msgid "generate a cover letter"
msgstr "generar letra de cover"
-#: builtin/log.c:1661
+#: builtin/log.c:1749
msgid "use simple number sequence for output file names"
msgstr ""
"usar una secuencia simple de números para salida de nombres de archivos"
-#: builtin/log.c:1662
+#: builtin/log.c:1750
msgid "sfx"
msgstr "sfx"
-#: builtin/log.c:1663
+#: builtin/log.c:1751
msgid "use <sfx> instead of '.patch'"
msgstr "use <sfx> en lugar de '.patch'"
-#: builtin/log.c:1665
+#: builtin/log.c:1753
msgid "start numbering patches at <n> instead of 1"
msgstr "comenzar a numerar los parches desde <n> en lugar de 1"
-#: builtin/log.c:1667
+#: builtin/log.c:1755
msgid "mark the series as Nth re-roll"
msgstr "marcar las series como Nth re-roll"
-#: builtin/log.c:1669
-msgid "Use [RFC PATCH] instead of [PATCH]"
-msgstr "Use [RFC PATCH] en lugar de [PATCH]"
+#: builtin/log.c:1757
+msgid "max length of output filename"
+msgstr "tamaño máximo de nombre de archivo resultante"
-#: builtin/log.c:1672
+#: builtin/log.c:1759
+msgid "use [RFC PATCH] instead of [PATCH]"
+msgstr "use [RFC PATCH] en lugar de [PATCH]"
+
+#: builtin/log.c:1762
msgid "cover-from-description-mode"
msgstr "modo-cover-from-description"
-#: builtin/log.c:1673
+#: builtin/log.c:1763
msgid "generate parts of a cover letter based on a branch's description"
msgstr ""
"genera partes de una carta de presentación basado en la descripción de la "
"rama"
-#: builtin/log.c:1675
-msgid "Use [<prefix>] instead of [PATCH]"
-msgstr "Use [<prefijo>] en lugar de [PATCH]"
+#: builtin/log.c:1765
+msgid "use [<prefix>] instead of [PATCH]"
+msgstr "use [<prefijo>] en lugar de [PATCH]"
-#: builtin/log.c:1678
+#: builtin/log.c:1768
msgid "store resulting files in <dir>"
msgstr "guardar archivos resultantes en <dir>"
-#: builtin/log.c:1681
+#: builtin/log.c:1771
msgid "don't strip/add [PATCH]"
msgstr "no cortar/agregar [PATCH]"
-#: builtin/log.c:1684
+#: builtin/log.c:1774
msgid "don't output binary diffs"
msgstr "no mostrar diffs binarios"
-#: builtin/log.c:1686
+#: builtin/log.c:1776
msgid "output all-zero hash in From header"
msgstr "salida como hash de todos-ceros en la cabecera From"
-#: builtin/log.c:1688
+#: builtin/log.c:1778
msgid "don't include a patch matching a commit upstream"
msgstr "no incluya un parche que coincida con un commit en upstream"
-#: builtin/log.c:1690
+#: builtin/log.c:1780
msgid "show patch format instead of default (patch + stat)"
msgstr "mostrar formato de parche en lugar del default (parche + stat)"
-#: builtin/log.c:1692
+#: builtin/log.c:1782
msgid "Messaging"
msgstr "Mensajeando"
-#: builtin/log.c:1693
+#: builtin/log.c:1783
msgid "header"
msgstr "cabezal"
-#: builtin/log.c:1694
+#: builtin/log.c:1784
msgid "add email header"
msgstr "agregar cabecera email"
-#: builtin/log.c:1695 builtin/log.c:1696
+#: builtin/log.c:1785 builtin/log.c:1786
msgid "email"
msgstr "email"
-#: builtin/log.c:1695
+#: builtin/log.c:1785
msgid "add To: header"
msgstr "agregar cabecera To:"
-#: builtin/log.c:1696
+#: builtin/log.c:1786
msgid "add Cc: header"
msgstr "agregar cabecera Cc:"
-#: builtin/log.c:1697
+#: builtin/log.c:1787
msgid "ident"
msgstr "ident"
-#: builtin/log.c:1698
+#: builtin/log.c:1788
msgid "set From address to <ident> (or committer ident if absent)"
msgstr ""
"configurar dirección From a <ident> ( o identidad de committer si está "
"ausente)"
-#: builtin/log.c:1700
+#: builtin/log.c:1790
msgid "message-id"
msgstr "id de mensaje"
-#: builtin/log.c:1701
+#: builtin/log.c:1791
msgid "make first mail a reply to <message-id>"
msgstr "hacer primer mail una respuesta a <id de mensaje>"
-#: builtin/log.c:1702 builtin/log.c:1705
+#: builtin/log.c:1792 builtin/log.c:1795
msgid "boundary"
msgstr "límite"
-#: builtin/log.c:1703
+#: builtin/log.c:1793
msgid "attach the patch"
msgstr "adjuntar el parche"
-#: builtin/log.c:1706
+#: builtin/log.c:1796
msgid "inline the patch"
msgstr "poner el parche en línea"
-#: builtin/log.c:1710
+#: builtin/log.c:1800
msgid "enable message threading, styles: shallow, deep"
msgstr "habilitar hilos de mensajes, estilos: superficial, profundo"
-#: builtin/log.c:1712
+#: builtin/log.c:1802
msgid "signature"
msgstr "firma"
-#: builtin/log.c:1713
+#: builtin/log.c:1803
msgid "add a signature"
msgstr "agregar una firma"
-#: builtin/log.c:1714
+#: builtin/log.c:1804
msgid "base-commit"
msgstr "commit-base"
-#: builtin/log.c:1715
+#: builtin/log.c:1805
msgid "add prerequisite tree info to the patch series"
msgstr ""
"agregar información de árbol de requisitos previos a la serie de parches"
-#: builtin/log.c:1717
+#: builtin/log.c:1808
msgid "add a signature from a file"
msgstr "agregar una firma de un archivo"
-#: builtin/log.c:1718
+#: builtin/log.c:1809
msgid "don't print the patch filenames"
msgstr "no mostrar los nombres de archivos de los parches"
-#: builtin/log.c:1720
+#: builtin/log.c:1811
msgid "show progress while generating patches"
msgstr "mostrar medidor de progreso mientras se generan los parches"
-#: builtin/log.c:1722
+#: builtin/log.c:1813
msgid "show changes against <rev> in cover letter or single patch"
msgstr "muestra cambios contra <rev> en cover letter o en un solo parche"
-#: builtin/log.c:1725
+#: builtin/log.c:1816
msgid "show changes against <refspec> in cover letter or single patch"
msgstr "muestra cambios contra <refspec> en cover letter o en un solo parche"
-#: builtin/log.c:1727
+#: builtin/log.c:1818
msgid "percentage by which creation is weighted"
msgstr "porcentaje por el cual la creación es pesada"
-#: builtin/log.c:1812
+#: builtin/log.c:1904
#, c-format
msgid "invalid ident line: %s"
msgstr "línea de identificación inválida: %s"
-#: builtin/log.c:1827
+#: builtin/log.c:1919
msgid "-n and -k are mutually exclusive"
msgstr "-n y -k son mutuamente exclusivas"
-#: builtin/log.c:1829
+#: builtin/log.c:1921
msgid "--subject-prefix/--rfc and -k are mutually exclusive"
msgstr "--subject-prefix/--rfc y -k son mutuamente exclusivos"
-#: builtin/log.c:1837
+#: builtin/log.c:1929
msgid "--name-only does not make sense"
msgstr "--name-only no tiene sentido"
-#: builtin/log.c:1839
+#: builtin/log.c:1931
msgid "--name-status does not make sense"
msgstr "--name-status no tiene sentido"
-#: builtin/log.c:1841
+#: builtin/log.c:1933
msgid "--check does not make sense"
msgstr "--check no tiene sentido"
-#: builtin/log.c:1874
-msgid "standard output, or directory, which one?"
-msgstr "¿salida standard, o directorio, cual?"
+#: builtin/log.c:1955
+msgid "--stdout, --output, and --output-directory are mutually exclusive"
+msgstr "--stdout, --output, and --output-directory son mutuamente exclusivas"
-#: builtin/log.c:1978
+#: builtin/log.c:2078
msgid "--interdiff requires --cover-letter or single patch"
msgstr "--interdiff requiere --cover-letter o un parche único"
-#: builtin/log.c:1982
+#: builtin/log.c:2082
msgid "Interdiff:"
msgstr "Interdiff:"
-#: builtin/log.c:1983
+#: builtin/log.c:2083
#, c-format
msgid "Interdiff against v%d:"
msgstr "Interdiff contra v%d:"
-#: builtin/log.c:1989
+#: builtin/log.c:2089
msgid "--creation-factor requires --range-diff"
msgstr "--creation-factor requiere --range-diff"
-#: builtin/log.c:1993
+#: builtin/log.c:2093
msgid "--range-diff requires --cover-letter or single patch"
msgstr "--range-diff requiere --cover-letter o parche único"
-#: builtin/log.c:2001
+#: builtin/log.c:2101
msgid "Range-diff:"
msgstr "Range-diff:"
-#: builtin/log.c:2002
+#: builtin/log.c:2102
#, c-format
msgid "Range-diff against v%d:"
msgstr "Range-diff contra v%d:"
-#: builtin/log.c:2013
+#: builtin/log.c:2113
#, c-format
msgid "unable to read signature file '%s'"
msgstr "no se puede leer la firma del archivo '%s'"
-#: builtin/log.c:2049
+#: builtin/log.c:2149
msgid "Generating patches"
msgstr "Generando parches"
-#: builtin/log.c:2093
+#: builtin/log.c:2193
msgid "failed to create output files"
msgstr "falló al crear los archivos de salida"
-#: builtin/log.c:2152
+#: builtin/log.c:2252
msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
msgstr "git cherry [-v] [<upstream> [<head> [<límite>]]]"
-#: builtin/log.c:2206
+#: builtin/log.c:2306
#, c-format
msgid ""
"Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -16141,114 +17008,118 @@
"No se pudo encontrar una rama remota rastreada, por favor especifique "
"<upstream> manualmente.\n"
-#: builtin/ls-files.c:471
+#: builtin/ls-files.c:486
msgid "git ls-files [<options>] [<file>...]"
msgstr "git ls-files [<opciones>] [<archivo>...]"
-#: builtin/ls-files.c:527
+#: builtin/ls-files.c:542
msgid "identify the file status with tags"
msgstr "identifique el estado del archivo con tags"
-#: builtin/ls-files.c:529
+#: builtin/ls-files.c:544
msgid "use lowercase letters for 'assume unchanged' files"
msgstr "usar letras minúsculas para archivos 'asumidos sin cambios'"
-#: builtin/ls-files.c:531
+#: builtin/ls-files.c:546
msgid "use lowercase letters for 'fsmonitor clean' files"
msgstr "usar letras minúsculas para archivos de 'fsmonitor clean'"
-#: builtin/ls-files.c:533
+#: builtin/ls-files.c:548
msgid "show cached files in the output (default)"
msgstr "mostrar archivos en caché en la salida (default)"
-#: builtin/ls-files.c:535
+#: builtin/ls-files.c:550
msgid "show deleted files in the output"
msgstr "mostrar archivos borrados en la salida"
-#: builtin/ls-files.c:537
+#: builtin/ls-files.c:552
msgid "show modified files in the output"
msgstr "mostrar archivos modificados en la salida"
-#: builtin/ls-files.c:539
+#: builtin/ls-files.c:554
msgid "show other files in the output"
msgstr "mostrar otros archivos en la salida"
-#: builtin/ls-files.c:541
+#: builtin/ls-files.c:556
msgid "show ignored files in the output"
msgstr "mostrar archivos ignorados en la salida"
-#: builtin/ls-files.c:544
+#: builtin/ls-files.c:559
msgid "show staged contents' object name in the output"
msgstr ""
"mostrar contenido de nombres de objetos en el área de stage en la salida"
-#: builtin/ls-files.c:546
+#: builtin/ls-files.c:561
msgid "show files on the filesystem that need to be removed"
msgstr "mostrar archivos en el filesystem que necesitan ser borrados"
-#: builtin/ls-files.c:548
+#: builtin/ls-files.c:563
msgid "show 'other' directories' names only"
msgstr "mostrar solo nombres de 'directorios otros'"
-#: builtin/ls-files.c:550
+#: builtin/ls-files.c:565
msgid "show line endings of files"
msgstr "mostrar finales de línea de archivos"
-#: builtin/ls-files.c:552
+#: builtin/ls-files.c:567
msgid "don't show empty directories"
msgstr "no mostrar directorios vacíos"
-#: builtin/ls-files.c:555
+#: builtin/ls-files.c:570
msgid "show unmerged files in the output"
msgstr "mostrar archivos no fusionados en la salida"
-#: builtin/ls-files.c:557
+#: builtin/ls-files.c:572
msgid "show resolve-undo information"
msgstr "mostrar información resolver-deshacer"
-#: builtin/ls-files.c:559
+#: builtin/ls-files.c:574
msgid "skip files matching pattern"
msgstr "saltar archivos que concuerden con el patrón"
-#: builtin/ls-files.c:562
+#: builtin/ls-files.c:577
msgid "exclude patterns are read from <file>"
msgstr "excluir patrones leídos de <archivo>"
-#: builtin/ls-files.c:565
+#: builtin/ls-files.c:580
msgid "read additional per-directory exclude patterns in <file>"
msgstr ""
"leer patrones de exclusión de manera adicional por directorio en <archivo>"
-#: builtin/ls-files.c:567
+#: builtin/ls-files.c:582
msgid "add the standard git exclusions"
msgstr "agregar las exclusiones standard de git"
-#: builtin/ls-files.c:571
+#: builtin/ls-files.c:586
msgid "make the output relative to the project top directory"
msgstr "hacer la salida relativa al directorio principal del proyecto"
-#: builtin/ls-files.c:574
+#: builtin/ls-files.c:589
msgid "recurse through submodules"
msgstr "recurrir a través de submódulos"
-#: builtin/ls-files.c:576
+#: builtin/ls-files.c:591
msgid "if any <file> is not in the index, treat this as an error"
msgstr "si cualquier <archivo> no está en el índice, tratarlo como un error"
-#: builtin/ls-files.c:577
+#: builtin/ls-files.c:592
msgid "tree-ish"
msgstr "árbol-ismo"
-#: builtin/ls-files.c:578
+#: builtin/ls-files.c:593
msgid "pretend that paths removed since <tree-ish> are still present"
msgstr ""
"fingir que las rutas han sido borradas ya que todavía hay <árbol-ismos> "
"presentes"
-#: builtin/ls-files.c:580
+#: builtin/ls-files.c:595
msgid "show debugging data"
msgstr "mostrar data de debug"
+#: builtin/ls-files.c:597
+msgid "suppress duplicate entries"
+msgstr "suprimir entradas duplicadas"
+
#: builtin/ls-remote.c:9
msgid ""
"git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
@@ -16259,39 +17130,39 @@
" [-q | --quiet] [--exit-code] [--get-url]\n"
" [--symref] [<repositorio> [<refs>...]]"
-#: builtin/ls-remote.c:59
+#: builtin/ls-remote.c:60
msgid "do not print remote URL"
msgstr "no mostrar el URL remoto"
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1384
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1404
msgid "exec"
msgstr "ejecutar"
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63
+#: builtin/ls-remote.c:62 builtin/ls-remote.c:64
msgid "path of git-upload-pack on the remote host"
msgstr "ruta de git-upload-pack en el host remoto"
-#: builtin/ls-remote.c:65
+#: builtin/ls-remote.c:66
msgid "limit to tags"
msgstr "limitar a tags"
-#: builtin/ls-remote.c:66
+#: builtin/ls-remote.c:67
msgid "limit to heads"
msgstr "limitar a heads"
-#: builtin/ls-remote.c:67
+#: builtin/ls-remote.c:68
msgid "do not show peeled tags"
msgstr "no mostrar tags pelados"
-#: builtin/ls-remote.c:69
+#: builtin/ls-remote.c:70
msgid "take url.<base>.insteadOf into account"
msgstr "tomar url.<base>.insteadOf en cuenta"
-#: builtin/ls-remote.c:72
+#: builtin/ls-remote.c:73
msgid "exit with exit code 2 if no matching refs are found"
msgstr "salir con código de salida 2 si no se encuentran refs que concuerden"
-#: builtin/ls-remote.c:75
+#: builtin/ls-remote.c:76
msgid "show underlying ref in addition to the object pointed by it"
msgstr "mostrar ref subyacente en adición al objeto apuntado por él"
@@ -16448,193 +17319,193 @@
msgid "Merging %s with %s\n"
msgstr "Fusionando %s con %s\n"
-#: builtin/merge.c:56
+#: builtin/merge.c:58
msgid "git merge [<options>] [<commit>...]"
msgstr "git merge [<opciones>] [<commit>...]"
-#: builtin/merge.c:57
+#: builtin/merge.c:59
msgid "git merge --abort"
msgstr "git merge --abort"
-#: builtin/merge.c:58
+#: builtin/merge.c:60
msgid "git merge --continue"
msgstr "git merge --continue"
-#: builtin/merge.c:121
+#: builtin/merge.c:123
msgid "switch `m' requires a value"
msgstr "cambiar `m' requiere un valor"
-#: builtin/merge.c:144
+#: builtin/merge.c:146
#, c-format
msgid "option `%s' requires a value"
msgstr "opción `%s' requiere un valor"
-#: builtin/merge.c:190
+#: builtin/merge.c:199
#, c-format
msgid "Could not find merge strategy '%s'.\n"
msgstr "No se pudo encontrar estrategia de fusión '%s'.\n"
-#: builtin/merge.c:191
+#: builtin/merge.c:200
#, c-format
msgid "Available strategies are:"
msgstr "Estrategias disponibles son:"
-#: builtin/merge.c:196
+#: builtin/merge.c:205
#, c-format
msgid "Available custom strategies are:"
msgstr "Estrategias personalizadas disponibles son:"
-#: builtin/merge.c:247 builtin/pull.c:133
+#: builtin/merge.c:256 builtin/pull.c:133
msgid "do not show a diffstat at the end of the merge"
msgstr "no mostrar un diffstat al final de la fusión"
-#: builtin/merge.c:250 builtin/pull.c:136
+#: builtin/merge.c:259 builtin/pull.c:136
msgid "show a diffstat at the end of the merge"
msgstr "mostrar un diffstat al final de la fusión"
-#: builtin/merge.c:251 builtin/pull.c:139
+#: builtin/merge.c:260 builtin/pull.c:139
msgid "(synonym to --stat)"
msgstr "(sinónimo para --stat)"
-#: builtin/merge.c:253 builtin/pull.c:142
+#: builtin/merge.c:262 builtin/pull.c:142
msgid "add (at most <n>) entries from shortlog to merge commit message"
msgstr ""
"agregar (como máximo <n>) entradas del shortlog al mensaje del commit de "
"fusión"
-#: builtin/merge.c:256 builtin/pull.c:148
+#: builtin/merge.c:265 builtin/pull.c:148
msgid "create a single commit instead of doing a merge"
msgstr "crear un commit único en lugar de hacer una fusión"
-#: builtin/merge.c:258 builtin/pull.c:151
+#: builtin/merge.c:267 builtin/pull.c:151
msgid "perform a commit if the merge succeeds (default)"
msgstr "realizar un commit si la fusión es exitosa (default)"
-#: builtin/merge.c:260 builtin/pull.c:154
+#: builtin/merge.c:269 builtin/pull.c:154
msgid "edit message before committing"
msgstr "editar mensaje antes de realizar commit"
-#: builtin/merge.c:262
+#: builtin/merge.c:271
msgid "allow fast-forward (default)"
msgstr "permitir fast-forwars (default)"
-#: builtin/merge.c:264 builtin/pull.c:161
+#: builtin/merge.c:273 builtin/pull.c:161
msgid "abort if fast-forward is not possible"
msgstr "abortar si fast-forward no es posible"
-#: builtin/merge.c:268 builtin/pull.c:164
+#: builtin/merge.c:277 builtin/pull.c:164
msgid "verify that the named commit has a valid GPG signature"
msgstr "verificar que el commit nombrado tiene una firma GPG válida"
-#: builtin/merge.c:269 builtin/notes.c:787 builtin/pull.c:168
-#: builtin/rebase.c:527 builtin/rebase.c:1398 builtin/revert.c:114
+#: builtin/merge.c:278 builtin/notes.c:787 builtin/pull.c:168
+#: builtin/rebase.c:541 builtin/rebase.c:1418 builtin/revert.c:114
msgid "strategy"
msgstr "estrategia"
-#: builtin/merge.c:270 builtin/pull.c:169
+#: builtin/merge.c:279 builtin/pull.c:169
msgid "merge strategy to use"
msgstr "estrategia de fusión para usar"
-#: builtin/merge.c:271 builtin/pull.c:172
+#: builtin/merge.c:280 builtin/pull.c:172
msgid "option=value"
msgstr "opción=valor"
-#: builtin/merge.c:272 builtin/pull.c:173
+#: builtin/merge.c:281 builtin/pull.c:173
msgid "option for selected merge strategy"
msgstr "opción para la estrategia de fusión seleccionada"
-#: builtin/merge.c:274
+#: builtin/merge.c:283
msgid "merge commit message (for a non-fast-forward merge)"
msgstr "fusionar mensaje de commit (para una fusión no fast-forward)"
-#: builtin/merge.c:281
+#: builtin/merge.c:290
msgid "abort the current in-progress merge"
msgstr "abortar la fusión en progreso actual"
-#: builtin/merge.c:283
+#: builtin/merge.c:292
msgid "--abort but leave index and working tree alone"
msgstr "--abort pero deja el índice y el árbol de trabajo solos"
-#: builtin/merge.c:285
+#: builtin/merge.c:294
msgid "continue the current in-progress merge"
msgstr "continuar la fusión en progreso actual"
-#: builtin/merge.c:287 builtin/pull.c:180
+#: builtin/merge.c:296 builtin/pull.c:180
msgid "allow merging unrelated histories"
msgstr "permitir fusionar historias no relacionadas"
-#: builtin/merge.c:294
+#: builtin/merge.c:303
msgid "bypass pre-merge-commit and commit-msg hooks"
msgstr "hacer un bypass a hooks pre-merge-commit y commit-msg"
-#: builtin/merge.c:311
+#: builtin/merge.c:320
msgid "could not run stash."
msgstr "no se pudo ejecutar stash."
-#: builtin/merge.c:316
+#: builtin/merge.c:325
msgid "stash failed"
msgstr "stash falló"
-#: builtin/merge.c:321
+#: builtin/merge.c:330
#, c-format
msgid "not a valid object: %s"
msgstr "no es un objeto válido: %s"
-#: builtin/merge.c:343 builtin/merge.c:360
+#: builtin/merge.c:352 builtin/merge.c:369
msgid "read-tree failed"
msgstr "lectura de árbol falló"
-#: builtin/merge.c:390
+#: builtin/merge.c:399
msgid " (nothing to squash)"
msgstr " (nada para hacer squash)"
-#: builtin/merge.c:401
+#: builtin/merge.c:410
#, c-format
msgid "Squash commit -- not updating HEAD\n"
msgstr "Commit de squash -- no actualizando HEAD\n"
-#: builtin/merge.c:451
+#: builtin/merge.c:460
#, c-format
msgid "No merge message -- not updating HEAD\n"
msgstr "No hay mensaje de fusión -- no actualizando HEAD\n"
-#: builtin/merge.c:502
+#: builtin/merge.c:511
#, c-format
msgid "'%s' does not point to a commit"
msgstr "'%s' no apunta a ningún commit"
-#: builtin/merge.c:589
+#: builtin/merge.c:598
#, c-format
msgid "Bad branch.%s.mergeoptions string: %s"
msgstr "Mal string branch.%s.mergeoptions: %s"
-#: builtin/merge.c:716
+#: builtin/merge.c:724
msgid "Not handling anything other than two heads merge."
msgstr "No manejando nada más que fusión de dos heads."
-#: builtin/merge.c:730
+#: builtin/merge.c:737
#, c-format
msgid "Unknown option for merge-recursive: -X%s"
msgstr "Opción desconocida para merge-recursive: -X%s"
-#: builtin/merge.c:745
+#: builtin/merge.c:756 t/helper/test-fast-rebase.c:209
#, c-format
msgid "unable to write %s"
msgstr "no es posible escribir %s"
-#: builtin/merge.c:797
+#: builtin/merge.c:808
#, c-format
msgid "Could not read from '%s'"
msgstr "No se puedo leer de '%s'"
-#: builtin/merge.c:806
+#: builtin/merge.c:817
#, c-format
msgid "Not committing merge; use 'git commit' to complete the merge.\n"
msgstr ""
"No se realiza commit de la fusión; use 'git commit' para completar la "
"fusión.\n"
-#: builtin/merge.c:812
+#: builtin/merge.c:823
msgid ""
"Please enter a commit message to explain why this merge is necessary,\n"
"especially if it merges an updated upstream into a topic branch.\n"
@@ -16646,11 +17517,11 @@
"tópico.\n"
"\n"
-#: builtin/merge.c:817
+#: builtin/merge.c:828
msgid "An empty message aborts the commit.\n"
msgstr "Un mensaje vacío aborta el commit.\n"
-#: builtin/merge.c:820
+#: builtin/merge.c:831
#, c-format
msgid ""
"Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -16659,74 +17530,74 @@
"Líneas comenzando con '%c' serán ignoradas, y un mensaje vacío aborta\n"
" el commit.\n"
-#: builtin/merge.c:873
+#: builtin/merge.c:884
msgid "Empty commit message."
msgstr "Mensaje de commit vacío."
-#: builtin/merge.c:888
+#: builtin/merge.c:899
#, c-format
msgid "Wonderful.\n"
msgstr "Maravilloso.\n"
-#: builtin/merge.c:949
+#: builtin/merge.c:960
#, c-format
msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
msgstr ""
"Fusión automática falló; arregle los conflictos y luego realice un commit "
"con el resultado.\n"
-#: builtin/merge.c:988
+#: builtin/merge.c:999
msgid "No current branch."
msgstr "No rama actual."
-#: builtin/merge.c:990
+#: builtin/merge.c:1001
msgid "No remote for the current branch."
msgstr "No hay remoto para la rama actual."
-#: builtin/merge.c:992
+#: builtin/merge.c:1003
msgid "No default upstream defined for the current branch."
msgstr "Por defecto, no hay un upstream definido para la rama actual."
-#: builtin/merge.c:997
+#: builtin/merge.c:1008
#, c-format
msgid "No remote-tracking branch for %s from %s"
msgstr "No hay rama de rastreo remoto para %s de %s"
-#: builtin/merge.c:1054
+#: builtin/merge.c:1065
#, c-format
msgid "Bad value '%s' in environment '%s'"
msgstr "Valor erróneo '%s' en el entorno '%s'"
-#: builtin/merge.c:1157
+#: builtin/merge.c:1168
#, c-format
msgid "not something we can merge in %s: %s"
msgstr "nada que podamos fusionar en %s: %s"
-#: builtin/merge.c:1191
+#: builtin/merge.c:1202
msgid "not something we can merge"
msgstr "nada que podamos fusionar"
-#: builtin/merge.c:1295
+#: builtin/merge.c:1312
msgid "--abort expects no arguments"
msgstr "--abort no espera argumentos"
-#: builtin/merge.c:1299
+#: builtin/merge.c:1316
msgid "There is no merge to abort (MERGE_HEAD missing)."
msgstr "No hay una fusión para abortar (falta MERGE_HEAD)"
-#: builtin/merge.c:1317
+#: builtin/merge.c:1334
msgid "--quit expects no arguments"
msgstr "--quit no espera argumentos"
-#: builtin/merge.c:1330
+#: builtin/merge.c:1347
msgid "--continue expects no arguments"
msgstr "--continue no espera argumentos"
-#: builtin/merge.c:1334
+#: builtin/merge.c:1351
msgid "There is no merge in progress (MERGE_HEAD missing)."
msgstr "No hay fusión en progreso (falta MERGE_HEAD)."
-#: builtin/merge.c:1350
+#: builtin/merge.c:1367
msgid ""
"You have not concluded your merge (MERGE_HEAD exists).\n"
"Please, commit your changes before you merge."
@@ -16734,7 +17605,7 @@
"No has concluido la fusión (existe MERGE_HEAD).\n"
"Por favor, realiza un commit con los cambios antes de fusionar."
-#: builtin/merge.c:1357
+#: builtin/merge.c:1374
msgid ""
"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
"Please, commit your changes before you merge."
@@ -16742,102 +17613,143 @@
"No has concluido el cherry-pick (existe CHERRY_PICK_HEAD).\n"
"Por favor, realiza un commit con los cambios antes de fusionar."
-#: builtin/merge.c:1360
+#: builtin/merge.c:1377
msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
msgstr "No has concluido el cherry-pick (existe CHERRY_PICK_HEAD)."
-#: builtin/merge.c:1374
+#: builtin/merge.c:1391
msgid "You cannot combine --squash with --no-ff."
msgstr "No se puede combinar --squash con --no-ff."
-#: builtin/merge.c:1376
+#: builtin/merge.c:1393
msgid "You cannot combine --squash with --commit."
msgstr "No se puede combinar --squash con --commit."
-#: builtin/merge.c:1392
+#: builtin/merge.c:1409
msgid "No commit specified and merge.defaultToUpstream not set."
msgstr ""
"No hay commit especificado y merge.defaultToUpstream no está configurado."
-#: builtin/merge.c:1409
+#: builtin/merge.c:1426
msgid "Squash commit into empty head not supported yet"
msgstr "Commit aplastado dentro de un head vacío no es soportado todavía"
-#: builtin/merge.c:1411
+#: builtin/merge.c:1428
msgid "Non-fast-forward commit does not make sense into an empty head"
msgstr "Commit no fast-forward no tiene sentido dentro de un head vacío"
-#: builtin/merge.c:1416
+#: builtin/merge.c:1433
#, c-format
msgid "%s - not something we can merge"
msgstr "%s - nada que podamos fusionar"
-#: builtin/merge.c:1418
+#: builtin/merge.c:1435
msgid "Can merge only exactly one commit into empty head"
msgstr "Solo se puede fusionar exactamente un commit en un head vacío"
-#: builtin/merge.c:1499
+#: builtin/merge.c:1516
msgid "refusing to merge unrelated histories"
msgstr "rehusando fusionar historias no relacionadas"
-#: builtin/merge.c:1508
+#: builtin/merge.c:1525
msgid "Already up to date."
msgstr "Ya está actualizado."
-#: builtin/merge.c:1518
+#: builtin/merge.c:1535
#, c-format
msgid "Updating %s..%s\n"
msgstr "Actualizando %s..%s\n"
-#: builtin/merge.c:1564
+#: builtin/merge.c:1581
#, c-format
msgid "Trying really trivial in-index merge...\n"
msgstr "Intentando fusión en índice realmente trivial...\n"
-#: builtin/merge.c:1571
+#: builtin/merge.c:1588
#, c-format
msgid "Nope.\n"
msgstr "Nop.\n"
-#: builtin/merge.c:1596
+#: builtin/merge.c:1613
msgid "Already up to date. Yeeah!"
msgstr "Ya está actualizado. ¡Oh, yeaahh!"
-#: builtin/merge.c:1602
+#: builtin/merge.c:1619
msgid "Not possible to fast-forward, aborting."
msgstr "No es posible hacer fast-forward, abortando."
-#: builtin/merge.c:1630 builtin/merge.c:1695
+#: builtin/merge.c:1647 builtin/merge.c:1712
#, c-format
msgid "Rewinding the tree to pristine...\n"
msgstr "Rebobinando el árbol a original...\n"
-#: builtin/merge.c:1634
+#: builtin/merge.c:1651
#, c-format
msgid "Trying merge strategy %s...\n"
msgstr "Intentando estrategia de fusión %s...\n"
-#: builtin/merge.c:1686
+#: builtin/merge.c:1703
#, c-format
msgid "No merge strategy handled the merge.\n"
msgstr "Ninguna estrategia de fusión manejó la fusión.\n"
-#: builtin/merge.c:1688
+#: builtin/merge.c:1705
#, c-format
msgid "Merge with strategy %s failed.\n"
msgstr "Fusionar con estrategia %s falló.\n"
-#: builtin/merge.c:1697
+#: builtin/merge.c:1714
#, c-format
msgid "Using the %s to prepare resolving by hand.\n"
msgstr "Usando el %s para preparar resolución a mano.\n"
-#: builtin/merge.c:1711
+#: builtin/merge.c:1728
#, c-format
msgid "Automatic merge went well; stopped before committing as requested\n"
msgstr ""
"Fusión automática fue bien; detenida antes del commit como se solicitó\n"
+#: builtin/mktag.c:10
+msgid "git mktag"
+msgstr "git mktag"
+
+#: builtin/mktag.c:30
+#, c-format
+msgid "warning: tag input does not pass fsck: %s"
+msgstr "peligro: información de tag no pasa fsck: %s"
+
+#: builtin/mktag.c:41
+#, c-format
+msgid "error: tag input does not pass fsck: %s"
+msgstr "error: valor de tag no pasa fsck: %s"
+
+#: builtin/mktag.c:44
+#, c-format
+msgid "%d (FSCK_IGNORE?) should never trigger this callback"
+msgstr "%d (FSCK_IGNORE?) nunca debería activar esta devolución de llamada"
+
+#: builtin/mktag.c:59
+#, c-format
+msgid "could not read tagged object '%s'"
+msgstr "no se pudo leer objeto de tag '%s'"
+
+#: builtin/mktag.c:62
+#, c-format
+msgid "object '%s' tagged as '%s', but is a '%s' type"
+msgstr "objeto '%s' es taggeado como '%s', pero es un tipo '%s'"
+
+#: builtin/mktag.c:99
+msgid "tag on stdin did not pass our strict fsck check"
+msgstr "etiqueta en stdin no pasó nuestro estricto control fsck"
+
+#: builtin/mktag.c:102
+msgid "tag on stdin did not refer to a valid object"
+msgstr "tag en stdin no se refería a un objeto válido"
+
+#: builtin/mktag.c:105 builtin/tag.c:232
+msgid "unable to write tag file"
+msgstr "incapaz de escribir el archivo de tag"
+
#: builtin/mktree.c:66
msgid "git mktree [-z] [--missing] [--batch]"
msgstr "git mktree [-z] [--missing] [--batch]"
@@ -16874,7 +17786,10 @@
"durante el repack, recolectar los pack-files de tamaño menor en un batch que "
"es más grande que este tamaño"
-#: builtin/multi-pack-index.c:50 builtin/prune-packed.c:25
+#: builtin/multi-pack-index.c:50 builtin/notes.c:376 builtin/notes.c:431
+#: builtin/notes.c:509 builtin/notes.c:521 builtin/notes.c:598
+#: builtin/notes.c:665 builtin/notes.c:815 builtin/notes.c:963
+#: builtin/notes.c:985 builtin/prune-packed.c:25 builtin/tag.c:575
msgid "too many arguments"
msgstr "muchos argumentos"
@@ -16915,68 +17830,72 @@
msgid "skip move/rename errors"
msgstr "saltar errores de mover/renombrar"
-#: builtin/mv.c:169
+#: builtin/mv.c:170
#, c-format
msgid "destination '%s' is not a directory"
msgstr "destino '%s' no es un directorio"
-#: builtin/mv.c:180
+#: builtin/mv.c:181
#, c-format
msgid "Checking rename of '%s' to '%s'\n"
msgstr "Revisando cambio de nombre de '%s' a '%s'\n"
-#: builtin/mv.c:184
+#: builtin/mv.c:185
msgid "bad source"
msgstr "mala fuente"
-#: builtin/mv.c:187
+#: builtin/mv.c:188
msgid "can not move directory into itself"
msgstr "no se pude mover un directorio en sí mismo"
-#: builtin/mv.c:190
+#: builtin/mv.c:191
msgid "cannot move directory over file"
msgstr "no se puede mover un directorio dentro de un archivo"
-#: builtin/mv.c:199
+#: builtin/mv.c:200
msgid "source directory is empty"
msgstr "directorio de fuente está vacío"
-#: builtin/mv.c:224
+#: builtin/mv.c:225
msgid "not under version control"
msgstr "no se encuentra bajo control de versión"
#: builtin/mv.c:227
+msgid "conflicted"
+msgstr "en conflicto"
+
+#: builtin/mv.c:230
msgid "destination exists"
msgstr "destino existe"
-#: builtin/mv.c:235
+#: builtin/mv.c:238
#, c-format
msgid "overwriting '%s'"
msgstr "sobrescribiendo '%s'"
-#: builtin/mv.c:238
+#: builtin/mv.c:241
msgid "Cannot overwrite"
msgstr "No se puede sobrescribir"
-#: builtin/mv.c:241
+#: builtin/mv.c:244
msgid "multiple sources for the same target"
msgstr "múltiples fuentes para el mismo objetivo"
-#: builtin/mv.c:243
+#: builtin/mv.c:246
msgid "destination directory does not exist"
msgstr "el directorio de destino no existe"
-#: builtin/mv.c:250
+#: builtin/mv.c:253
#, c-format
msgid "%s, source=%s, destination=%s"
msgstr "%s, fuente=%s, destino=%s"
-#: builtin/mv.c:271
+#: builtin/mv.c:274
#, c-format
msgid "Renaming %s to %s\n"
msgstr "Renombrando %s a %s\n"
-#: builtin/mv.c:277 builtin/remote.c:781 builtin/repack.c:520
+#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:483
#, c-format
msgid "renaming '%s' failed"
msgstr "renombrando '%s' falló"
@@ -16994,8 +17913,8 @@
msgstr "git name-rev [<opciones>] --stdin"
#: builtin/name-rev.c:524
-msgid "print only names (no SHA-1)"
-msgstr "imprimir sólo nombres (sin SHA-1)"
+msgid "print only ref-based names (no object names)"
+msgstr "imprimir solo nombres basados en referencias (sin nombres de objetos)"
#: builtin/name-rev.c:525
msgid "only use tags to name the commits"
@@ -17170,7 +18089,7 @@
msgid "the note contents have been left in %s"
msgstr "los contenidos de nota han sido dejados en %s"
-#: builtin/notes.c:242 builtin/tag.c:533
+#: builtin/notes.c:242 builtin/tag.c:565
#, c-format
msgid "could not open or read '%s'"
msgstr "no se pudo abrir o leer '%s'"
@@ -17210,12 +18129,6 @@
msgid "refusing to %s notes in %s (outside of refs/notes/)"
msgstr "rechazando %s notas en %s (fuera de refs/notes/)"
-#: builtin/notes.c:376 builtin/notes.c:431 builtin/notes.c:509
-#: builtin/notes.c:521 builtin/notes.c:598 builtin/notes.c:665
-#: builtin/notes.c:815 builtin/notes.c:963 builtin/notes.c:985
-msgid "too many parameters"
-msgstr "demasiados parámetros"
-
#: builtin/notes.c:389 builtin/notes.c:678
#, c-format
msgid "no note found for object %s."
@@ -17273,8 +18186,8 @@
msgstr "cargar configuración de reescritura para <comando> (implica --stdin)"
#: builtin/notes.c:517
-msgid "too few parameters"
-msgstr "muy pocos parámetros"
+msgid "too few arguments"
+msgstr "muy pocos argumentos"
#: builtin/notes.c:538
#, c-format
@@ -17403,7 +18316,7 @@
"commit con el resultado 'git notes merge --commit', o aborte la fusión con "
"'git notes merge --abort'.\n"
-#: builtin/notes.c:897 builtin/tag.c:546
+#: builtin/notes.c:897 builtin/tag.c:578
#, c-format
msgid "Failed to resolve '%s' as a valid ref."
msgstr "Falló al resolver '%s' como una ref válida."
@@ -17421,7 +18334,7 @@
msgid "read object names from the standard input"
msgstr "leer nombres de objetos de standard input"
-#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:220
+#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:148
msgid "do not remove, show only"
msgstr "no eliminar, solo mostrar"
@@ -17437,125 +18350,139 @@
msgid "use notes from <notes-ref>"
msgstr "usar notas desde <referencia-de-notas>"
-#: builtin/notes.c:1034 builtin/stash.c:1608
+#: builtin/notes.c:1034 builtin/stash.c:1671
#, c-format
msgid "unknown subcommand: %s"
msgstr "subcomando desconocido: %s"
-#: builtin/pack-objects.c:53
+#: builtin/pack-objects.c:54
msgid ""
"git pack-objects --stdout [<options>...] [< <ref-list> | < <object-list>]"
msgstr ""
"git pack-objects --stdout [<opciones>...] [< <lista-de-ref> | < <lista-de-"
"objetos>]"
-#: builtin/pack-objects.c:54
+#: builtin/pack-objects.c:55
msgid ""
"git pack-objects [<options>...] <base-name> [< <ref-list> | < <object-list>]"
msgstr ""
"git pack-objects [<opciones>...] <nombre-base> [< <lista-de-refs> | < <lista-"
"de-objetos>]"
-#: builtin/pack-objects.c:442
+#: builtin/pack-objects.c:440
+#, c-format
+msgid ""
+"write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
+"pack %s"
+msgstr ""
+"write_reuse_object: no se pudo localizar %s, se esperaba en el "
+"desplazamiento %<PRIuMAX> en el paquete %s"
+
+#: builtin/pack-objects.c:448
#, c-format
msgid "bad packed object CRC for %s"
msgstr "mal paquete de objeto CRC para %s"
-#: builtin/pack-objects.c:453
+#: builtin/pack-objects.c:459
#, c-format
msgid "corrupt packed object for %s"
msgstr "objeto empaquetado corrupto para %s"
-#: builtin/pack-objects.c:584
+#: builtin/pack-objects.c:590
#, c-format
msgid "recursive delta detected for object %s"
msgstr "delta recursivo encontrado para objeto %s"
-#: builtin/pack-objects.c:795
+#: builtin/pack-objects.c:801
#, c-format
msgid "ordered %u objects, expected %<PRIu32>"
msgstr "%u objetos ordenados, esperados %<PRIu32>"
-#: builtin/pack-objects.c:1003
+#: builtin/pack-objects.c:896
+#, c-format
+msgid "expected object at offset %<PRIuMAX> in pack %s"
+msgstr "objeto esperado en el desplazamiento %<PRIuMAX> en el paquete %s"
+
+#: builtin/pack-objects.c:1015
msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
msgstr ""
"deshabilitando escritura bitmap, paquetes son divididos debido a pack."
"packSizeLimit"
-#: builtin/pack-objects.c:1016
+#: builtin/pack-objects.c:1028
msgid "Writing objects"
msgstr "Escribiendo objetos"
-#: builtin/pack-objects.c:1077 builtin/update-index.c:90
+#: builtin/pack-objects.c:1089 builtin/update-index.c:90
#, c-format
msgid "failed to stat %s"
msgstr "falló al iniciar %s"
-#: builtin/pack-objects.c:1130
+#: builtin/pack-objects.c:1141
#, c-format
msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
msgstr "%<PRIu32> objetos escritos mientras se esperaban %<PRIu32>"
-#: builtin/pack-objects.c:1347
+#: builtin/pack-objects.c:1358
msgid "disabling bitmap writing, as some objects are not being packed"
msgstr ""
"deshabilitando escritura bitmap, ya que algunos objetos no están siendo "
"empaquetados"
-#: builtin/pack-objects.c:1774
+#: builtin/pack-objects.c:1806
#, c-format
msgid "delta base offset overflow in pack for %s"
msgstr "overflow de offset en la base de delta en paquete para %s"
-#: builtin/pack-objects.c:1783
+#: builtin/pack-objects.c:1815
#, c-format
msgid "delta base offset out of bound for %s"
msgstr "outbound de offset en la base de delta para %s"
-#: builtin/pack-objects.c:2054
+#: builtin/pack-objects.c:2096
msgid "Counting objects"
msgstr "Contando objetos"
-#: builtin/pack-objects.c:2199
+#: builtin/pack-objects.c:2241
#, c-format
msgid "unable to parse object header of %s"
msgstr "incapaz de analizar header del objeto %s"
-#: builtin/pack-objects.c:2269 builtin/pack-objects.c:2285
-#: builtin/pack-objects.c:2295
+#: builtin/pack-objects.c:2311 builtin/pack-objects.c:2327
+#: builtin/pack-objects.c:2337
#, c-format
msgid "object %s cannot be read"
msgstr "objeto %s no puede ser leído"
-#: builtin/pack-objects.c:2272 builtin/pack-objects.c:2299
+#: builtin/pack-objects.c:2314 builtin/pack-objects.c:2341
#, c-format
msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
msgstr ""
"objeto %s inconsistente con el largo del objeto (%<PRIuMAX> vs %<PRIuMAX>)"
-#: builtin/pack-objects.c:2309
+#: builtin/pack-objects.c:2351
msgid "suboptimal pack - out of memory"
msgstr "suboptimal pack - fuera de memoria"
-#: builtin/pack-objects.c:2624
+#: builtin/pack-objects.c:2666
#, c-format
msgid "Delta compression using up to %d threads"
msgstr "Compresión delta usando hasta %d hilos"
-#: builtin/pack-objects.c:2763
+#: builtin/pack-objects.c:2805
#, c-format
msgid "unable to pack objects reachable from tag %s"
msgstr "no es posible empaquetar objetos alcanzables desde tag %s"
-#: builtin/pack-objects.c:2851
+#: builtin/pack-objects.c:2891
msgid "Compressing objects"
msgstr "Comprimiendo objetos"
-#: builtin/pack-objects.c:2857
+#: builtin/pack-objects.c:2897
msgid "inconsistency with delta count"
msgstr "inconsistencia con la cuenta de delta"
-#: builtin/pack-objects.c:2929
+#: builtin/pack-objects.c:2976
#, c-format
msgid ""
"value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
@@ -17564,7 +18491,7 @@
"valor para uploadpack.blobpackfileuri tiene que ser de la forma '<hash-de-"
"objeto> <hash-de-pack> <uri>' (se tuvo '%s')"
-#: builtin/pack-objects.c:2932
+#: builtin/pack-objects.c:2979
#, c-format
msgid ""
"object already configured in another uploadpack.blobpackfileuri (got '%s')"
@@ -17572,7 +18499,7 @@
"objeto ya está configurado en otro uploadpack.blobpackfileuri (se obtuvo "
"'%s')"
-#: builtin/pack-objects.c:2961
+#: builtin/pack-objects.c:3008
#, c-format
msgid ""
"expected edge object ID, got garbage:\n"
@@ -17581,7 +18508,7 @@
"se espseraba ID de objeto al borde, se obtuvo basura:\n"
"%s"
-#: builtin/pack-objects.c:2967
+#: builtin/pack-objects.c:3014
#, c-format
msgid ""
"expected object ID, got garbage:\n"
@@ -17590,240 +18517,240 @@
"se esperaba ID de objeto, se obtuvo basuta:\n"
"%s"
-#: builtin/pack-objects.c:3065
+#: builtin/pack-objects.c:3112
msgid "invalid value for --missing"
msgstr "valor inválido para --missing"
-#: builtin/pack-objects.c:3124 builtin/pack-objects.c:3232
+#: builtin/pack-objects.c:3171 builtin/pack-objects.c:3279
msgid "cannot open pack index"
msgstr "no se puede abrir índice de paquetes"
-#: builtin/pack-objects.c:3155
+#: builtin/pack-objects.c:3202
#, c-format
msgid "loose object at %s could not be examined"
msgstr "objeto perdido en %s no pudo ser examinado"
-#: builtin/pack-objects.c:3240
+#: builtin/pack-objects.c:3287
msgid "unable to force loose object"
msgstr "incapaz de forzar un objeto perdido"
-#: builtin/pack-objects.c:3333
+#: builtin/pack-objects.c:3380
#, c-format
msgid "not a rev '%s'"
msgstr "no es una rev '%s'"
-#: builtin/pack-objects.c:3336
+#: builtin/pack-objects.c:3383
#, c-format
msgid "bad revision '%s'"
msgstr "mala revisión '%s'"
-#: builtin/pack-objects.c:3361
+#: builtin/pack-objects.c:3408
msgid "unable to add recent objects"
msgstr "incapaz de añadir objetos recientes"
-#: builtin/pack-objects.c:3414
+#: builtin/pack-objects.c:3461
#, c-format
msgid "unsupported index version %s"
msgstr "versión de índice no soportada %s"
-#: builtin/pack-objects.c:3418
+#: builtin/pack-objects.c:3465
#, c-format
msgid "bad index version '%s'"
msgstr "mala versión del índice '%s'"
-#: builtin/pack-objects.c:3456
+#: builtin/pack-objects.c:3503
msgid "<version>[,<offset>]"
msgstr "<versión>[,<offset>]"
-#: builtin/pack-objects.c:3457
+#: builtin/pack-objects.c:3504
msgid "write the pack index file in the specified idx format version"
msgstr ""
"escribir el índice de paquete en la versión de formato idx especificado"
-#: builtin/pack-objects.c:3460
+#: builtin/pack-objects.c:3507
msgid "maximum size of each output pack file"
msgstr "tamaño máximo de cada paquete resultante"
-#: builtin/pack-objects.c:3462
+#: builtin/pack-objects.c:3509
msgid "ignore borrowed objects from alternate object store"
msgstr "ignorar objetos prestados de otros almacenes de objetos"
-#: builtin/pack-objects.c:3464
+#: builtin/pack-objects.c:3511
msgid "ignore packed objects"
msgstr "ignorar objetos paquete"
-#: builtin/pack-objects.c:3466
+#: builtin/pack-objects.c:3513
msgid "limit pack window by objects"
msgstr "limitar ventana de paquete por objetos"
-#: builtin/pack-objects.c:3468
+#: builtin/pack-objects.c:3515
msgid "limit pack window by memory in addition to object limit"
msgstr "limitar ventana de paquete por memoria en adición a límite de objetos"
-#: builtin/pack-objects.c:3470
+#: builtin/pack-objects.c:3517
msgid "maximum length of delta chain allowed in the resulting pack"
msgstr "longitud máxima de cadena delta permitida en el paquete resultante"
-#: builtin/pack-objects.c:3472
+#: builtin/pack-objects.c:3519
msgid "reuse existing deltas"
msgstr "reusar deltas existentes"
-#: builtin/pack-objects.c:3474
+#: builtin/pack-objects.c:3521
msgid "reuse existing objects"
msgstr "reutilizar objetos existentes"
-#: builtin/pack-objects.c:3476
+#: builtin/pack-objects.c:3523
msgid "use OFS_DELTA objects"
msgstr "usar objetos OFS_DELTA"
-#: builtin/pack-objects.c:3478
+#: builtin/pack-objects.c:3525
msgid "use threads when searching for best delta matches"
msgstr "usar hilos cuando se busque para mejores concordancias de delta"
-#: builtin/pack-objects.c:3480
+#: builtin/pack-objects.c:3527
msgid "do not create an empty pack output"
msgstr "no crear un paquete resultante vacío"
-#: builtin/pack-objects.c:3482
+#: builtin/pack-objects.c:3529
msgid "read revision arguments from standard input"
msgstr "leer argumentos de revisión de standard input"
-#: builtin/pack-objects.c:3484
+#: builtin/pack-objects.c:3531
msgid "limit the objects to those that are not yet packed"
msgstr "limitar los objetos a aquellos que no han sido empaquetados todavía"
-#: builtin/pack-objects.c:3487
+#: builtin/pack-objects.c:3534
msgid "include objects reachable from any reference"
msgstr "incluir objetos alcanzables por cualquier referencia"
-#: builtin/pack-objects.c:3490
+#: builtin/pack-objects.c:3537
msgid "include objects referred by reflog entries"
msgstr "incluir objetos referidos por entradas de reflog"
-#: builtin/pack-objects.c:3493
+#: builtin/pack-objects.c:3540
msgid "include objects referred to by the index"
msgstr "incluir objetos referidos por el índice"
-#: builtin/pack-objects.c:3496
+#: builtin/pack-objects.c:3543
msgid "output pack to stdout"
msgstr "mostrar paquete en stdout"
-#: builtin/pack-objects.c:3498
+#: builtin/pack-objects.c:3545
msgid "include tag objects that refer to objects to be packed"
msgstr "incluir objetos tag que refieren a objetos a ser empaquetados"
-#: builtin/pack-objects.c:3500
+#: builtin/pack-objects.c:3547
msgid "keep unreachable objects"
msgstr "mantener objetos inalcanzables"
-#: builtin/pack-objects.c:3502
+#: builtin/pack-objects.c:3549
msgid "pack loose unreachable objects"
msgstr "empaquetar objetos sueltos inalcanzables"
-#: builtin/pack-objects.c:3504
+#: builtin/pack-objects.c:3551
msgid "unpack unreachable objects newer than <time>"
msgstr "desempaquetar objetos inalcanzables más nuevos que <tiempo>"
-#: builtin/pack-objects.c:3507
+#: builtin/pack-objects.c:3554
msgid "use the sparse reachability algorithm"
msgstr "usar el algoritmo sparse reachability"
-#: builtin/pack-objects.c:3509
+#: builtin/pack-objects.c:3556
msgid "create thin packs"
msgstr "crear paquetes delgados"
-#: builtin/pack-objects.c:3511
+#: builtin/pack-objects.c:3558
msgid "create packs suitable for shallow fetches"
msgstr "crear paquetes adecuados para fetches superficiales"
-#: builtin/pack-objects.c:3513
+#: builtin/pack-objects.c:3560
msgid "ignore packs that have companion .keep file"
msgstr "ignorar paquetes que tienen un archivo .keep acompañante"
-#: builtin/pack-objects.c:3515
+#: builtin/pack-objects.c:3562
msgid "ignore this pack"
msgstr "ignorar este paquete"
-#: builtin/pack-objects.c:3517
+#: builtin/pack-objects.c:3564
msgid "pack compression level"
msgstr "nivel de compresión del paquete"
-#: builtin/pack-objects.c:3519
+#: builtin/pack-objects.c:3566
msgid "do not hide commits by grafts"
msgstr "no ocultar commits por injertos"
-#: builtin/pack-objects.c:3521
+#: builtin/pack-objects.c:3568
msgid "use a bitmap index if available to speed up counting objects"
msgstr ""
"usar un índice bitmap si está disponible para acelerar la cuenta de objetos"
-#: builtin/pack-objects.c:3523
+#: builtin/pack-objects.c:3570
msgid "write a bitmap index together with the pack index"
msgstr "escribir un índice de bitmap junto al índice de paquete"
-#: builtin/pack-objects.c:3527
+#: builtin/pack-objects.c:3574
msgid "write a bitmap index if possible"
msgstr "escribir un índice de bitmap si es posible"
-#: builtin/pack-objects.c:3531
+#: builtin/pack-objects.c:3578
msgid "handling for missing objects"
msgstr "manejo de objetos perdidos"
-#: builtin/pack-objects.c:3534
+#: builtin/pack-objects.c:3581
msgid "do not pack objects in promisor packfiles"
msgstr "no se puede empaquetar objetos en packfiles promisores"
-#: builtin/pack-objects.c:3536
+#: builtin/pack-objects.c:3583
msgid "respect islands during delta compression"
msgstr "respetar islas durante la compresión delta"
-#: builtin/pack-objects.c:3538
+#: builtin/pack-objects.c:3585
msgid "protocol"
msgstr "protocolo"
-#: builtin/pack-objects.c:3539
+#: builtin/pack-objects.c:3586
msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
msgstr ""
"excluyendo cualquier uploadpack.blobpackfileuri configurado con este "
"protocolo"
-#: builtin/pack-objects.c:3568
+#: builtin/pack-objects.c:3617
#, c-format
msgid "delta chain depth %d is too deep, forcing %d"
msgstr "profundidad de cadena de delta %d es muy profunda, forzando %d"
-#: builtin/pack-objects.c:3573
+#: builtin/pack-objects.c:3622
#, c-format
msgid "pack.deltaCacheLimit is too high, forcing %d"
msgstr "pack.deltaCacheLimit es muy grande, forzando %d"
-#: builtin/pack-objects.c:3627
+#: builtin/pack-objects.c:3676
msgid "--max-pack-size cannot be used to build a pack for transfer"
msgstr ""
"--max-pack-size no puede ser usado para construir un paquete para "
"transferencia"
-#: builtin/pack-objects.c:3629
+#: builtin/pack-objects.c:3678
msgid "minimum pack size limit is 1 MiB"
msgstr "tamaño mínimo del paquete es 1 MiB"
-#: builtin/pack-objects.c:3634
+#: builtin/pack-objects.c:3683
msgid "--thin cannot be used to build an indexable pack"
msgstr "--thin no puede ser usado para construir un paquete indexable"
-#: builtin/pack-objects.c:3637
+#: builtin/pack-objects.c:3686
msgid "--keep-unreachable and --unpack-unreachable are incompatible"
msgstr "--keep-unreachable y --unpack-unreachable son incompatibles"
-#: builtin/pack-objects.c:3643
+#: builtin/pack-objects.c:3692
msgid "cannot use --filter without --stdout"
msgstr "no se puede usar--filter sin --stdout"
-#: builtin/pack-objects.c:3703
+#: builtin/pack-objects.c:3752
msgid "Enumerating objects"
msgstr "Enumerando objetos"
-#: builtin/pack-objects.c:3734
+#: builtin/pack-objects.c:3783
#, c-format
msgid ""
"Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -17832,6 +18759,20 @@
"Total %<PRIu32> (delta %<PRIu32>), reusado %<PRIu32> (delta %<PRIu32>), pack-"
"reusado %<PRIu32>"
+#: builtin/pack-redundant.c:601
+msgid ""
+"'git pack-redundant' is nominated for removal.\n"
+"If you still use this command, please add an extra\n"
+"option, '--i-still-use-this', on the command line\n"
+"and let us know you still use it by sending an e-mail\n"
+"to <git@vger.kernel.org>. Thanks.\n"
+msgstr ""
+"'git pack-redundant' está nominado para su eliminación.\n"
+"Si todavía usa este comando, agregue un extra\n"
+"opción, '--i-still-use-this', en la línea de comando\n"
+"y háganos saber que todavía lo usa enviando un correo electrónico\n"
+"a <git@vger.kernel.org>. Gracias.\n"
+
#: builtin/pack-refs.c:8
msgid "git pack-refs [<options>]"
msgstr "git pack-refs [<opciones>]"
@@ -17890,7 +18831,7 @@
msgid "incorporate changes by rebasing rather than merging"
msgstr "incorporar cambios por rebase en lugar de fusión"
-#: builtin/pull.c:158 builtin/rebase.c:478 builtin/revert.c:126
+#: builtin/pull.c:158 builtin/rebase.c:492 builtin/revert.c:126
msgid "allow fast-forward"
msgstr "permitir fast-forward"
@@ -17915,7 +18856,93 @@
msgid "Invalid value for pull.ff: %s"
msgstr "Valor inválido para pull.ff: %s"
-#: builtin/pull.c:349
+#: builtin/pull.c:445
+msgid ""
+"There is no candidate for rebasing against among the refs that you just "
+"fetched."
+msgstr "No hay candidato para rebasar entre las refs que has bajado con fetch."
+
+#: builtin/pull.c:447
+msgid ""
+"There are no candidates for merging among the refs that you just fetched."
+msgstr ""
+"No hay candidatos para fusionar entre las refs que has bajado con fetch."
+
+#: builtin/pull.c:448
+msgid ""
+"Generally this means that you provided a wildcard refspec which had no\n"
+"matches on the remote end."
+msgstr ""
+"Generalmente esto significa que has proveído un wildcard de refspec que no "
+"tiene\n"
+"concordancia en el final remoto."
+
+#: builtin/pull.c:451
+#, c-format
+msgid ""
+"You asked to pull from the remote '%s', but did not specify\n"
+"a branch. Because this is not the default configured remote\n"
+"for your current branch, you must specify a branch on the command line."
+msgstr ""
+"Se ha solicitado un pull del remoto '%s', pero no se ha especificado\n"
+"una rama. Porque este no es el remoto configurado por default\n"
+"para tu rama actual, tienes que especificar una rama en la línea de comando."
+
+#: builtin/pull.c:456 builtin/rebase.c:1253
+msgid "You are not currently on a branch."
+msgstr "No te encuentras actualmente en la rama."
+
+#: builtin/pull.c:458 builtin/pull.c:473
+msgid "Please specify which branch you want to rebase against."
+msgstr "Por favor especifica a qué rama quieres rebasar."
+
+#: builtin/pull.c:460 builtin/pull.c:475
+msgid "Please specify which branch you want to merge with."
+msgstr "Por favor especifica a qué rama quieres fusionar."
+
+#: builtin/pull.c:461 builtin/pull.c:476
+msgid "See git-pull(1) for details."
+msgstr "Ver git-pull(1) para detalles."
+
+#: builtin/pull.c:463 builtin/pull.c:469 builtin/pull.c:478
+#: builtin/rebase.c:1259
+msgid "<remote>"
+msgstr "<remoto>"
+
+#: builtin/pull.c:463 builtin/pull.c:478 builtin/pull.c:483
+msgid "<branch>"
+msgstr "<rama>"
+
+#: builtin/pull.c:471 builtin/rebase.c:1251
+msgid "There is no tracking information for the current branch."
+msgstr "No hay información de rastreo para la rama actual."
+
+#: builtin/pull.c:480
+msgid ""
+"If you wish to set tracking information for this branch you can do so with:"
+msgstr ""
+"Si deseas configurar el rastreo de información para esta rama, puedes "
+"hacerlo con:"
+
+#: builtin/pull.c:485
+#, c-format
+msgid ""
+"Your configuration specifies to merge with the ref '%s'\n"
+"from the remote, but no such ref was fetched."
+msgstr ""
+"Tu configuración especifica fusionar con la ref '%s'\n"
+"de tu remoto, pero no se pudo hacer fetch a esa ref."
+
+#: builtin/pull.c:596
+#, c-format
+msgid "unable to access commit %s"
+msgstr "no es posible acceder al commit %s"
+
+#: builtin/pull.c:902
+msgid "ignoring --verify-signatures for rebase"
+msgstr "ignorando --verify-signatures para rebase"
+
+#: builtin/pull.c:930
msgid ""
"Pulling without specifying how to reconcile divergent branches is\n"
"discouraged. You can squelch this message by running one of the following\n"
@@ -17945,106 +18972,19 @@
"por defecto en cada invocación.\n"
"\n"
-#: builtin/pull.c:459
-msgid ""
-"There is no candidate for rebasing against among the refs that you just "
-"fetched."
-msgstr "No hay candidato para rebasar entre las refs que has bajado con fetch."
-
-#: builtin/pull.c:461
-msgid ""
-"There are no candidates for merging among the refs that you just fetched."
-msgstr ""
-"No hay candidatos para fusionar entre las refs que has bajado con fetch."
-
-#: builtin/pull.c:462
-msgid ""
-"Generally this means that you provided a wildcard refspec which had no\n"
-"matches on the remote end."
-msgstr ""
-"Generalmente esto significa que has proveído un wildcard de refspec que no "
-"tiene\n"
-"concordancia en el final remoto."
-
-#: builtin/pull.c:465
-#, c-format
-msgid ""
-"You asked to pull from the remote '%s', but did not specify\n"
-"a branch. Because this is not the default configured remote\n"
-"for your current branch, you must specify a branch on the command line."
-msgstr ""
-"Se ha solicitado un pull del remoto '%s', pero no se ha especificado\n"
-"una rama. Porque este no es el remoto configurado por default\n"
-"para tu rama actual, tienes que especificar una rama en la línea de comando."
-
-#: builtin/pull.c:470 builtin/rebase.c:1234 git-parse-remote.sh:73
-msgid "You are not currently on a branch."
-msgstr "No te encuentras actualmente en la rama."
-
-#: builtin/pull.c:472 builtin/pull.c:487 git-parse-remote.sh:79
-msgid "Please specify which branch you want to rebase against."
-msgstr "Por favor especifica a qué rama quieres rebasar."
-
-#: builtin/pull.c:474 builtin/pull.c:489 git-parse-remote.sh:82
-msgid "Please specify which branch you want to merge with."
-msgstr "Por favor especifica a qué rama quieres fusionar."
-
-#: builtin/pull.c:475 builtin/pull.c:490
-msgid "See git-pull(1) for details."
-msgstr "Ver git-pull(1) para detalles."
-
-#: builtin/pull.c:477 builtin/pull.c:483 builtin/pull.c:492
-#: builtin/rebase.c:1240 git-parse-remote.sh:64
-msgid "<remote>"
-msgstr "<remoto>"
-
-#: builtin/pull.c:477 builtin/pull.c:492 builtin/pull.c:497
-#: git-parse-remote.sh:65
-msgid "<branch>"
-msgstr "<rama>"
-
-#: builtin/pull.c:485 builtin/rebase.c:1232 git-parse-remote.sh:75
-msgid "There is no tracking information for the current branch."
-msgstr "No hay información de rastreo para la rama actual."
-
-#: builtin/pull.c:494 git-parse-remote.sh:95
-msgid ""
-"If you wish to set tracking information for this branch you can do so with:"
-msgstr ""
-"Si deseas configurar el rastreo de información para esta rama, puedes "
-"hacerlo con:"
-
-#: builtin/pull.c:499
-#, c-format
-msgid ""
-"Your configuration specifies to merge with the ref '%s'\n"
-"from the remote, but no such ref was fetched."
-msgstr ""
-"Tu configuración especifica fusionar con la ref '%s'\n"
-"de tu remoto, pero no se pudo hacer fetch a esa ref."
-
-#: builtin/pull.c:610
-#, c-format
-msgid "unable to access commit %s"
-msgstr "no es posible acceder al commit %s"
-
-#: builtin/pull.c:895
-msgid "ignoring --verify-signatures for rebase"
-msgstr "ignorando --verify-signatures para rebase"
-
-#: builtin/pull.c:955
+#: builtin/pull.c:991
msgid "Updating an unborn branch with changes added to the index."
msgstr "Actualizando una rama no nata con cambios agregados al índice."
-#: builtin/pull.c:959
+#: builtin/pull.c:995
msgid "pull with rebase"
msgstr "pull con rebase"
-#: builtin/pull.c:960
+#: builtin/pull.c:996
msgid "please commit or stash them."
msgstr "por favor realiza un commit o un stash con ellos."
-#: builtin/pull.c:985
+#: builtin/pull.c:1021
#, c-format
msgid ""
"fetch updated the current branch head.\n"
@@ -18055,7 +18995,7 @@
"realizando fast-forward al árbol de trabajo\n"
"desde commit %s."
-#: builtin/pull.c:991
+#: builtin/pull.c:1027
#, c-format
msgid ""
"Cannot fast-forward your working tree.\n"
@@ -18072,15 +19012,15 @@
"$ git reset --hard\n"
"para recuperar."
-#: builtin/pull.c:1006
+#: builtin/pull.c:1042
msgid "Cannot merge multiple branches into empty head."
msgstr "No se puede fusionar múltiples ramas en un head vacío."
-#: builtin/pull.c:1010
+#: builtin/pull.c:1046
msgid "Cannot rebase onto multiple branches."
msgstr "No se puede rebasar en múltiples ramas."
-#: builtin/pull.c:1018
+#: builtin/pull.c:1067
msgid "cannot rebase with locally recorded submodule modifications"
msgstr ""
"no se puede rebasar con modificaciones de submódulos grabadas localmente"
@@ -18090,15 +19030,15 @@
msgstr ""
"git push [<opciones>] [<repositorio> [<especificaciones-de-referencia>...]]"
-#: builtin/push.c:112
+#: builtin/push.c:111
msgid "tag shorthand without <tag>"
msgstr "taquigrafía de tag sin <tag>"
-#: builtin/push.c:122
+#: builtin/push.c:119
msgid "--delete only accepts plain target ref names"
msgstr "--delete solo acepta como objetivos nombres de ref planos"
-#: builtin/push.c:168
+#: builtin/push.c:164
msgid ""
"\n"
"To choose either option permanently, see push.default in 'git help config'."
@@ -18107,7 +19047,7 @@
"Para elegir si la opción es permanente, mira push.default en 'git help "
"config'."
-#: builtin/push.c:171
+#: builtin/push.c:167
#, c-format
msgid ""
"The upstream branch of your current branch does not match\n"
@@ -18132,7 +19072,7 @@
" git push %s HEAD\n"
"%s"
-#: builtin/push.c:186
+#: builtin/push.c:182
#, c-format
msgid ""
"You are not currently on a branch.\n"
@@ -18147,7 +19087,7 @@
"\n"
"\tgit push %s HEAD:<nombre-de-rama-remota>\n"
-#: builtin/push.c:200
+#: builtin/push.c:194
#, c-format
msgid ""
"The current branch %s has no upstream branch.\n"
@@ -18161,12 +19101,12 @@
"\n"
"\tgit push --set-upstream %s %s\n"
-#: builtin/push.c:208
+#: builtin/push.c:202
#, c-format
msgid "The current branch %s has multiple upstream branches, refusing to push."
msgstr "La rama actual %s tiene múltiples ramas upstream, rechazando el push."
-#: builtin/push.c:211
+#: builtin/push.c:205
#, c-format
msgid ""
"You are pushing to remote '%s', which is not the upstream of\n"
@@ -18177,13 +19117,13 @@
"la rama actual '%s', sin decirme qué poner en el push\n"
"para actualizar en qué rama de remoto."
-#: builtin/push.c:270
+#: builtin/push.c:260
msgid ""
"You didn't specify any refspecs to push, and push.default is \"nothing\"."
msgstr ""
"No se especificó ningún refspecs para hacer push, y push.default es \"nada\"."
-#: builtin/push.c:277
+#: builtin/push.c:267
msgid ""
"Updates were rejected because the tip of your current branch is behind\n"
"its remote counterpart. Integrate the remote changes (e.g.\n"
@@ -18195,7 +19135,7 @@
"'git pull ...') antes de hacer push de nuevo.\n"
"Mira 'Note about fast-forwards' en 'git push --help' para más detalles."
-#: builtin/push.c:283
+#: builtin/push.c:273
msgid ""
"Updates were rejected because a pushed branch tip is behind its remote\n"
"counterpart. Check out this branch and integrate the remote changes\n"
@@ -18208,7 +19148,7 @@
"(ejem. 'git pull ...') antes de volver a hacer push.\n"
"Vea las 'Notes about fast-forwards' en 'git push --help' para más detalles."
-#: builtin/push.c:289
+#: builtin/push.c:279
msgid ""
"Updates were rejected because the remote contains work that you do\n"
"not have locally. This is usually caused by another repository pushing\n"
@@ -18222,12 +19162,12 @@
"remotos (ej. 'git pull ...') antes de volver a hacer push.\n"
"Vea 'Notes about fast-forwards0 en 'git push --help' para detalles."
-#: builtin/push.c:296
+#: builtin/push.c:286
msgid "Updates were rejected because the tag already exists in the remote."
msgstr ""
"Actualizaciones fueron rechazadas porque el tag ya existe en el remoto."
-#: builtin/push.c:299
+#: builtin/push.c:289
msgid ""
"You cannot update a remote ref that points at a non-commit object,\n"
"or update a remote ref to make it point at a non-commit object,\n"
@@ -18237,99 +19177,117 @@
"o actualizar un ref remoto para hacer que apunte a un objeto no-commit,\n"
"sin usar la opción '--force'.\n"
-#: builtin/push.c:361
+#: builtin/push.c:294
+msgid ""
+"Updates were rejected because the tip of the remote-tracking\n"
+"branch has been updated since the last checkout. You may want\n"
+"to integrate those changes locally (e.g., 'git pull ...')\n"
+"before forcing an update.\n"
+msgstr ""
+"Las actualizaciones se rechazaron porque la sugerencia del seguimiento "
+"remoto\n"
+"rama se ha actualizado desde la última vez que se realizó la compra. Es "
+"posible que desee\n"
+"para integrar esos cambios localmente (por ejemplo, 'git pull ...')\n"
+"antes de forzar una actualización.\n"
+
+#: builtin/push.c:364
#, c-format
msgid "Pushing to %s\n"
msgstr "Haciendo push a %s\n"
-#: builtin/push.c:368
+#: builtin/push.c:371
#, c-format
msgid "failed to push some refs to '%s'"
msgstr "falló el push de algunas referencias a '%s'"
-#: builtin/push.c:542
+#: builtin/push.c:553
msgid "repository"
msgstr "repositorio"
-#: builtin/push.c:543 builtin/send-pack.c:164
+#: builtin/push.c:554 builtin/send-pack.c:189
msgid "push all refs"
msgstr "realizar push a todas las refs"
-#: builtin/push.c:544 builtin/send-pack.c:166
+#: builtin/push.c:555 builtin/send-pack.c:191
msgid "mirror all refs"
msgstr "realizar mirror a todas las refs"
-#: builtin/push.c:546
+#: builtin/push.c:557
msgid "delete refs"
msgstr "borrar refs"
-#: builtin/push.c:547
+#: builtin/push.c:558
msgid "push tags (can't be used with --all or --mirror)"
msgstr "realizar push a tags (no puede ser usado con --all o --mirror)"
-#: builtin/push.c:550 builtin/send-pack.c:167
+#: builtin/push.c:561 builtin/send-pack.c:192
msgid "force updates"
msgstr "forzar actualizaciones"
-#: builtin/push.c:551 builtin/send-pack.c:179
+#: builtin/push.c:562 builtin/send-pack.c:204
msgid "<refname>:<expect>"
msgstr "<refname>:<expect>"
-#: builtin/push.c:552 builtin/send-pack.c:180
+#: builtin/push.c:563 builtin/send-pack.c:205
msgid "require old value of ref to be at this value"
msgstr "requiere haber valor viejo de ref en este valor"
-#: builtin/push.c:555
+#: builtin/push.c:566 builtin/send-pack.c:208
+msgid "require remote updates to be integrated locally"
+msgstr "requieren que las actualizaciones remotas se integren localmente"
+
+#: builtin/push.c:569
msgid "control recursive pushing of submodules"
msgstr "controlar push recursivo de submódulos"
-#: builtin/push.c:556 builtin/send-pack.c:174
+#: builtin/push.c:570 builtin/send-pack.c:199
msgid "use thin pack"
msgstr "usar empaquetado delgado"
-#: builtin/push.c:557 builtin/push.c:558 builtin/send-pack.c:161
-#: builtin/send-pack.c:162
+#: builtin/push.c:571 builtin/push.c:572 builtin/send-pack.c:186
+#: builtin/send-pack.c:187
msgid "receive pack program"
msgstr "recibir programa de paquete"
-#: builtin/push.c:559
+#: builtin/push.c:573
msgid "set upstream for git pull/status"
msgstr "configurar upstream para git pulll/status"
-#: builtin/push.c:562
+#: builtin/push.c:576
msgid "prune locally removed refs"
msgstr "recortando refs eliminadas localmente"
-#: builtin/push.c:564
+#: builtin/push.c:578
msgid "bypass pre-push hook"
msgstr "hacer un bypass al hook pre-push"
-#: builtin/push.c:565
+#: builtin/push.c:579
msgid "push missing but relevant tags"
msgstr "realizar push de tags faltantes pero relevantes"
-#: builtin/push.c:567 builtin/send-pack.c:168
+#: builtin/push.c:581 builtin/send-pack.c:193
msgid "GPG sign the push"
msgstr "Firmar con GPG el push"
-#: builtin/push.c:569 builtin/send-pack.c:175
+#: builtin/push.c:583 builtin/send-pack.c:200
msgid "request atomic transaction on remote side"
msgstr "solicitar transacción atómica en el lado remoto"
-#: builtin/push.c:587
+#: builtin/push.c:601
msgid "--delete is incompatible with --all, --mirror and --tags"
msgstr "--delete es incompatible con --all, --mirror y --tags"
-#: builtin/push.c:589
+#: builtin/push.c:603
msgid "--delete doesn't make sense without any refs"
msgstr "--delete no tiene sentido sin ninguna referencia"
-#: builtin/push.c:609
+#: builtin/push.c:623
#, c-format
msgid "bad repository '%s'"
msgstr "mal repositorio '%s'"
-#: builtin/push.c:610
+#: builtin/push.c:624
msgid ""
"No configured push destination.\n"
"Either specify the URL from the command-line or configure a remote "
@@ -18351,70 +19309,78 @@
"\n"
" git push <nombre>\n"
-#: builtin/push.c:625
+#: builtin/push.c:639
msgid "--all and --tags are incompatible"
msgstr "--all y --tags son incompatibles"
-#: builtin/push.c:627
+#: builtin/push.c:641
msgid "--all can't be combined with refspecs"
msgstr "--all no puede ser combinada con refspecs"
-#: builtin/push.c:631
+#: builtin/push.c:645
msgid "--mirror and --tags are incompatible"
msgstr "--mirror y --tags son incompatibles"
-#: builtin/push.c:633
+#: builtin/push.c:647
msgid "--mirror can't be combined with refspecs"
msgstr "--mirror no puede ser combinado con refspecs"
-#: builtin/push.c:636
+#: builtin/push.c:650
msgid "--all and --mirror are incompatible"
msgstr "--all y --mirror son incompatibles"
-#: builtin/push.c:640
+#: builtin/push.c:657
msgid "push options must not have new line characters"
msgstr "opciones de push no pueden tener caracteres de línea nueva"
-#: builtin/range-diff.c:8
+#: builtin/range-diff.c:9
msgid "git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"
msgstr ""
"git range-diff [<opciones>] <base-vieja>..<punta-vieja> <base-nueva>..<punta-"
"nueva>"
-#: builtin/range-diff.c:9
+#: builtin/range-diff.c:10
msgid "git range-diff [<options>] <old-tip>...<new-tip>"
msgstr "git range-diff [<opciones>] <punta-vieja>...<punta-nueva>"
-#: builtin/range-diff.c:10
+#: builtin/range-diff.c:11
msgid "git range-diff [<options>] <base> <old-tip> <new-tip>"
msgstr "git range-diff [<opciones>] <base> <punta-vieja> <punta-nueva>"
-#: builtin/range-diff.c:22
+#: builtin/range-diff.c:28
msgid "Percentage by which creation is weighted"
msgstr "Porcentaje por el cual la creación es pesada"
-#: builtin/range-diff.c:24
+#: builtin/range-diff.c:30
msgid "use simple diff colors"
msgstr "usar colores simples de diff"
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
msgid "notes"
msgstr "notas"
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
msgid "passed to 'git log'"
msgstr "pasado a 'git log'"
-#: builtin/range-diff.c:50 builtin/range-diff.c:54
-#, c-format
-msgid "no .. in range: '%s'"
-msgstr "no .. en rango: '%s'"
+#: builtin/range-diff.c:35
+msgid "only emit output related to the first range"
+msgstr "solo emite salida relacionada con el primer rango"
-#: builtin/range-diff.c:64
+#: builtin/range-diff.c:37
+msgid "only emit output related to the second range"
+msgstr "solo emite salida relacionada con el segundo rango"
+
+#: builtin/range-diff.c:60 builtin/range-diff.c:64
+#, c-format
+msgid "not a commit range: '%s'"
+msgstr "no es un rango de commit: '%s'"
+
+#: builtin/range-diff.c:74
msgid "single arg format must be symmetric range"
msgstr "argumento único de formato debe ser un rango simétrico"
-#: builtin/range-diff.c:79
+#: builtin/range-diff.c:89
msgid "need two commit ranges"
msgstr "se necesitan dos rangos de commits"
@@ -18519,193 +19485,193 @@
msgid "git rebase --continue | --abort | --skip | --edit-todo"
msgstr "git rebase --continue | --abort | --skip | --edit-todo"
-#: builtin/rebase.c:181 builtin/rebase.c:205 builtin/rebase.c:232
+#: builtin/rebase.c:195 builtin/rebase.c:219 builtin/rebase.c:246
#, c-format
msgid "unusable todo list: '%s'"
msgstr "lista de pendientes inutilizable: '%s'"
-#: builtin/rebase.c:298
+#: builtin/rebase.c:312
#, c-format
msgid "could not create temporary %s"
msgstr "no se pudo crear archivo temporal %s"
-#: builtin/rebase.c:304
+#: builtin/rebase.c:318
msgid "could not mark as interactive"
msgstr "no se pudo marcar como interactivo"
-#: builtin/rebase.c:358
+#: builtin/rebase.c:371
msgid "could not generate todo list"
msgstr "no se pudo generar lista de pendientes"
-#: builtin/rebase.c:399
+#: builtin/rebase.c:413
msgid "a base commit must be provided with --upstream or --onto"
msgstr "un commit base tiene que ser provisto con --upstream o --onto"
-#: builtin/rebase.c:468
+#: builtin/rebase.c:482
msgid "git rebase--interactive [<options>]"
msgstr "git rebase--interactive [<opciones>]"
-#: builtin/rebase.c:481 builtin/rebase.c:1374
+#: builtin/rebase.c:495 builtin/rebase.c:1394
msgid "keep commits which start empty"
msgstr "mantener commits que comienzan con vacío"
-#: builtin/rebase.c:485 builtin/revert.c:128
+#: builtin/rebase.c:499 builtin/revert.c:128
msgid "allow commits with empty messages"
msgstr "permitir commits con mensajes vacíos"
-#: builtin/rebase.c:487
+#: builtin/rebase.c:501
msgid "rebase merge commits"
msgstr "rebasando commits de fusión"
-#: builtin/rebase.c:489
+#: builtin/rebase.c:503
msgid "keep original branch points of cousins"
msgstr "mantener puntos originales de la rama de sus primos"
-#: builtin/rebase.c:491
+#: builtin/rebase.c:505
msgid "move commits that begin with squash!/fixup!"
msgstr "mover commits que comienzan con squash!/fixup!"
-#: builtin/rebase.c:492
+#: builtin/rebase.c:506
msgid "sign commits"
msgstr "firmar commits"
-#: builtin/rebase.c:494 builtin/rebase.c:1314
+#: builtin/rebase.c:508 builtin/rebase.c:1333
msgid "display a diffstat of what changed upstream"
msgstr "mostrar un diffstat de lo que cambió en upstream"
-#: builtin/rebase.c:496
+#: builtin/rebase.c:510
msgid "continue rebase"
msgstr "continuar rebase"
-#: builtin/rebase.c:498
+#: builtin/rebase.c:512
msgid "skip commit"
msgstr "saltar commit"
-#: builtin/rebase.c:499
+#: builtin/rebase.c:513
msgid "edit the todo list"
msgstr "editar la lista de pendientes"
-#: builtin/rebase.c:501
+#: builtin/rebase.c:515
msgid "show the current patch"
msgstr "mostrar el parche actual"
-#: builtin/rebase.c:504
+#: builtin/rebase.c:518
msgid "shorten commit ids in the todo list"
msgstr "ids de commits cortos en la lista de pendientes"
-#: builtin/rebase.c:506
+#: builtin/rebase.c:520
msgid "expand commit ids in the todo list"
msgstr "expandir ids de commits en la lista de pendientes"
-#: builtin/rebase.c:508
+#: builtin/rebase.c:522
msgid "check the todo list"
msgstr "revisar la lista de pendientes"
-#: builtin/rebase.c:510
+#: builtin/rebase.c:524
msgid "rearrange fixup/squash lines"
msgstr "reorganizar líneas fixup/squash"
-#: builtin/rebase.c:512
+#: builtin/rebase.c:526
msgid "insert exec commands in todo list"
msgstr "insertar comando exec en la lista de pendientes"
-#: builtin/rebase.c:513
+#: builtin/rebase.c:527
msgid "onto"
msgstr "hacia"
-#: builtin/rebase.c:516
+#: builtin/rebase.c:530
msgid "restrict-revision"
msgstr "restrict-revision"
-#: builtin/rebase.c:516
+#: builtin/rebase.c:530
msgid "restrict revision"
msgstr "restringir revision"
-#: builtin/rebase.c:518
+#: builtin/rebase.c:532
msgid "squash-onto"
msgstr "squash-onto"
-#: builtin/rebase.c:519
+#: builtin/rebase.c:533
msgid "squash onto"
msgstr "squash hacia"
-#: builtin/rebase.c:521
+#: builtin/rebase.c:535
msgid "the upstream commit"
msgstr "el commit de upstream"
-#: builtin/rebase.c:523
+#: builtin/rebase.c:537
msgid "head-name"
msgstr "head-name"
-#: builtin/rebase.c:523
+#: builtin/rebase.c:537
msgid "head name"
msgstr "nombre de head"
-#: builtin/rebase.c:528
+#: builtin/rebase.c:542
msgid "rebase strategy"
msgstr "estrategia de rebase"
-#: builtin/rebase.c:529
+#: builtin/rebase.c:543
msgid "strategy-opts"
msgstr "strategy-opts"
-#: builtin/rebase.c:530
+#: builtin/rebase.c:544
msgid "strategy options"
msgstr "opciones de estrategia"
-#: builtin/rebase.c:531
+#: builtin/rebase.c:545
msgid "switch-to"
msgstr "cambiar a"
-#: builtin/rebase.c:532
+#: builtin/rebase.c:546
msgid "the branch or commit to checkout"
msgstr "la rama o commit para hacer checkout"
-#: builtin/rebase.c:533
+#: builtin/rebase.c:547
msgid "onto-name"
msgstr "hacia-nombre"
-#: builtin/rebase.c:533
+#: builtin/rebase.c:547
msgid "onto name"
msgstr "hacia nombre"
-#: builtin/rebase.c:534
+#: builtin/rebase.c:548
msgid "cmd"
msgstr "cmd"
-#: builtin/rebase.c:534
+#: builtin/rebase.c:548
msgid "the command to run"
msgstr "el comando para ejecutar"
-#: builtin/rebase.c:537 builtin/rebase.c:1407
+#: builtin/rebase.c:551 builtin/rebase.c:1427
msgid "automatically re-schedule any `exec` that fails"
msgstr "reprogramar automaticamente cualquier `exec` que falle"
-#: builtin/rebase.c:553
+#: builtin/rebase.c:567
msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
msgstr "--[no-]rebase-cousins no tiene efecto sin --rebase-merges"
-#: builtin/rebase.c:569
+#: builtin/rebase.c:583
#, c-format
msgid "%s requires the merge backend"
msgstr "%s requiere un backend de fusión"
-#: builtin/rebase.c:612
+#: builtin/rebase.c:626
#, c-format
msgid "could not get 'onto': '%s'"
msgstr "no se pudo conseguir 'onto': '%s'"
-#: builtin/rebase.c:629
+#: builtin/rebase.c:643
#, c-format
msgid "invalid orig-head: '%s'"
msgstr "orig-head inválido: '%s'"
-#: builtin/rebase.c:654
+#: builtin/rebase.c:668
#, c-format
msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
msgstr "ignorando inválido allow_rerere_autoupdate: '%s'"
-#: builtin/rebase.c:799 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:813 git-rebase--preserve-merges.sh:81
msgid ""
"Resolve all conflicts manually, mark them as resolved with\n"
"\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -18720,7 +19686,7 @@
"Para abortar y regresar al estado previo al \"git rebase\", ejecuta \"git "
"rebase --abort\"."
-#: builtin/rebase.c:882
+#: builtin/rebase.c:896
#, c-format
msgid ""
"\n"
@@ -18739,7 +19705,7 @@
"\n"
"Como resultado, git no puede hacer rebase con ellos."
-#: builtin/rebase.c:1208
+#: builtin/rebase.c:1227
#, c-format
msgid ""
"unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
@@ -18748,7 +19714,7 @@
"tipo '%s' vacío y desconocido; valores válidos son \"drop\", \"keep\", y "
"\"ask\"."
-#: builtin/rebase.c:1226
+#: builtin/rebase.c:1245
#, c-format
msgid ""
"%s\n"
@@ -18765,7 +19731,7 @@
" git rebase '<rama>'\n"
"\n"
-#: builtin/rebase.c:1242
+#: builtin/rebase.c:1261
#, c-format
msgid ""
"If you wish to set tracking information for this branch you can do so with:\n"
@@ -18778,137 +19744,149 @@
" git branch --set-upstream-to=%s/<rama> %s\n"
"\n"
-#: builtin/rebase.c:1272
+#: builtin/rebase.c:1291
msgid "exec commands cannot contain newlines"
msgstr "comandos exec no pueden contener newlines"
-#: builtin/rebase.c:1276
+#: builtin/rebase.c:1295
msgid "empty exec command"
msgstr "comando exec vacío"
-#: builtin/rebase.c:1305
+#: builtin/rebase.c:1324
msgid "rebase onto given branch instead of upstream"
msgstr "haciendo rebase hacia rama dada en lugar de upstream"
-#: builtin/rebase.c:1307
+#: builtin/rebase.c:1326
msgid "use the merge-base of upstream and branch as the current base"
msgstr "usar la base de fusión de upstream y la rama como base actual"
-#: builtin/rebase.c:1309
+#: builtin/rebase.c:1328
msgid "allow pre-rebase hook to run"
msgstr "permitir ejecutar hook pre-rebase"
-#: builtin/rebase.c:1311
+#: builtin/rebase.c:1330
msgid "be quiet. implies --no-stat"
msgstr "ser silencioso implica --no-stat"
-#: builtin/rebase.c:1317
+#: builtin/rebase.c:1336
msgid "do not show diffstat of what changed upstream"
msgstr "no mostrar un diffstat de lo que cambió en upstream"
-#: builtin/rebase.c:1320
-msgid "add a Signed-off-by: line to each commit"
+#: builtin/rebase.c:1339
+msgid "add a Signed-off-by trailer to each commit"
msgstr "agregar una línea \"Firmado-por\" al mensaje de cada commit"
-#: builtin/rebase.c:1322 builtin/rebase.c:1326 builtin/rebase.c:1328
-msgid "passed to 'git am'"
-msgstr "pasado a 'git am'"
+#: builtin/rebase.c:1342
+msgid "make committer date match author date"
+msgstr "hacer que la fecha del commit concuerde con la fecha de autoría"
-#: builtin/rebase.c:1330 builtin/rebase.c:1332
+#: builtin/rebase.c:1344
+msgid "ignore author date and use current date"
+msgstr "ignorar la fecha del autor y usar la fecha actual"
+
+#: builtin/rebase.c:1346
+msgid "synonym of --reset-author-date"
+msgstr "sinónimo para --reset-author-date"
+
+#: builtin/rebase.c:1348 builtin/rebase.c:1352
msgid "passed to 'git apply'"
msgstr "pasado a 'git-apply'"
-#: builtin/rebase.c:1334 builtin/rebase.c:1337
+#: builtin/rebase.c:1350
+msgid "ignore changes in whitespace"
+msgstr "ignorar cambios en espacios en blanco"
+
+#: builtin/rebase.c:1354 builtin/rebase.c:1357
msgid "cherry-pick all commits, even if unchanged"
msgstr "cherry-pick todos los commits, incluso si no han cambiado"
-#: builtin/rebase.c:1339
+#: builtin/rebase.c:1359
msgid "continue"
msgstr "continuar"
-#: builtin/rebase.c:1342
+#: builtin/rebase.c:1362
msgid "skip current patch and continue"
msgstr "saltar el parche y continuar"
-#: builtin/rebase.c:1344
+#: builtin/rebase.c:1364
msgid "abort and check out the original branch"
msgstr "aborta y revisa la rama original"
-#: builtin/rebase.c:1347
+#: builtin/rebase.c:1367
msgid "abort but keep HEAD where it is"
msgstr "aborta pero mantiene HEAD donde está"
-#: builtin/rebase.c:1348
+#: builtin/rebase.c:1368
msgid "edit the todo list during an interactive rebase"
msgstr "editar la lista de pendientes durante el rebase interactivo"
-#: builtin/rebase.c:1351
+#: builtin/rebase.c:1371
msgid "show the patch file being applied or merged"
msgstr "muestra el archivo parche siendo aplicado o fusionado"
-#: builtin/rebase.c:1354
+#: builtin/rebase.c:1374
msgid "use apply strategies to rebase"
msgstr "usar estrategias de apply para el rebase"
-#: builtin/rebase.c:1358
+#: builtin/rebase.c:1378
msgid "use merging strategies to rebase"
msgstr "usar estrategias de fusión para el rebase"
-#: builtin/rebase.c:1362
+#: builtin/rebase.c:1382
msgid "let the user edit the list of commits to rebase"
msgstr "permitir al usuario editar la lista de commits para rebasar"
-#: builtin/rebase.c:1366
+#: builtin/rebase.c:1386
msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
msgstr "(DEPRECADO) intentar recrear merges en lugar de ignorarlos"
-#: builtin/rebase.c:1371
+#: builtin/rebase.c:1391
msgid "how to handle commits that become empty"
msgstr "como manejar commits que se vuelven vacíos"
-#: builtin/rebase.c:1378
+#: builtin/rebase.c:1398
msgid "move commits that begin with squash!/fixup! under -i"
msgstr "mover commits que comienzan con squash!/fixup! bajo -i"
-#: builtin/rebase.c:1385
+#: builtin/rebase.c:1405
msgid "add exec lines after each commit of the editable list"
msgstr "agregar líneas exec tras cada acommit de la lista editable"
-#: builtin/rebase.c:1389
+#: builtin/rebase.c:1409
msgid "allow rebasing commits with empty messages"
msgstr "permitir rebase commits con mensajes vacíos"
-#: builtin/rebase.c:1393
+#: builtin/rebase.c:1413
msgid "try to rebase merges instead of skipping them"
msgstr "intentar fusiones por rebase en lugar de saltarlas"
-#: builtin/rebase.c:1396
+#: builtin/rebase.c:1416
msgid "use 'merge-base --fork-point' to refine upstream"
msgstr "use 'merge-base --fork-point' para refinar upstream"
-#: builtin/rebase.c:1398
+#: builtin/rebase.c:1418
msgid "use the given merge strategy"
msgstr "usar la estrategia de merge dada"
-#: builtin/rebase.c:1400 builtin/revert.c:115
+#: builtin/rebase.c:1420 builtin/revert.c:115
msgid "option"
msgstr "opción"
-#: builtin/rebase.c:1401
+#: builtin/rebase.c:1421
msgid "pass the argument through to the merge strategy"
msgstr "pasar el argumento para la estrategia de fusión"
-#: builtin/rebase.c:1404
+#: builtin/rebase.c:1424
msgid "rebase all reachable commits up to the root(s)"
msgstr "hacer rebase a todos los commits alcanzables hasta la raíz(raíces)"
-#: builtin/rebase.c:1409
+#: builtin/rebase.c:1429
msgid "apply all changes, even those already present upstream"
msgstr ""
"aplicar todos los cambios, incluso aquellos que ya están presentes en "
"upstream"
-#: builtin/rebase.c:1426
+#: builtin/rebase.c:1446
msgid ""
"the rebase.useBuiltin support has been removed!\n"
"See its entry in 'git help config' for details."
@@ -18916,42 +19894,42 @@
"el soporte para rebase.useBuiltin ha sido eliminado!\n"
"Vea su entrada en 'git help config' para detalles."
-#: builtin/rebase.c:1432
+#: builtin/rebase.c:1452
msgid "It looks like 'git am' is in progress. Cannot rebase."
msgstr "Parece que 'git am' está en progreso. No se puede rebasar."
-#: builtin/rebase.c:1473
+#: builtin/rebase.c:1493
msgid ""
"git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
msgstr ""
"git rebase --preserve-merges está deprecado. Use --rebase-merges en su lugar."
-#: builtin/rebase.c:1478
+#: builtin/rebase.c:1498
msgid "cannot combine '--keep-base' with '--onto'"
msgstr "no se puede combinar '--keep-base' con '--onto'"
-#: builtin/rebase.c:1480
+#: builtin/rebase.c:1500
msgid "cannot combine '--keep-base' with '--root'"
msgstr "no se puede combinar '--keep-base' con '--root'"
-#: builtin/rebase.c:1484
+#: builtin/rebase.c:1504
msgid "cannot combine '--root' with '--fork-point'"
msgstr "no se puede combinar '--root' con '--fork-point'"
-#: builtin/rebase.c:1487
+#: builtin/rebase.c:1507
msgid "No rebase in progress?"
msgstr "¿No hay rebase en progreso?"
-#: builtin/rebase.c:1491
+#: builtin/rebase.c:1511
msgid "The --edit-todo action can only be used during interactive rebase."
msgstr ""
"La acción --edit-todo sólo puede ser usada al rebasar interactivamente."
-#: builtin/rebase.c:1514
+#: builtin/rebase.c:1534 t/helper/test-fast-rebase.c:123
msgid "Cannot read HEAD"
msgstr "No se puede leer el HEAD"
-#: builtin/rebase.c:1526
+#: builtin/rebase.c:1546
msgid ""
"You must edit all merge conflicts and then\n"
"mark them as resolved using git add"
@@ -18959,16 +19937,16 @@
"Tienes que editar todos los conflictos de fusión y luego\n"
"marcarlos como resueltos usando git add"
-#: builtin/rebase.c:1545
+#: builtin/rebase.c:1565
msgid "could not discard worktree changes"
msgstr "no se pudo descartar los cambios del árbol de trabajo"
-#: builtin/rebase.c:1564
+#: builtin/rebase.c:1584
#, c-format
msgid "could not move back to %s"
msgstr "no se puede regresar a %s"
-#: builtin/rebase.c:1610
+#: builtin/rebase.c:1630
#, c-format
msgid ""
"It seems that there is already a %s directory, and\n"
@@ -18989,135 +19967,135 @@
"y ejecútame nuevamente. Me estoy deteniendo en caso de que tengas\n"
"algo de valor ahí.\n"
-#: builtin/rebase.c:1638
+#: builtin/rebase.c:1658
msgid "switch `C' expects a numerical value"
msgstr "switch `C' espera un valor numérico"
-#: builtin/rebase.c:1680
+#: builtin/rebase.c:1700
#, c-format
msgid "Unknown mode: %s"
msgstr "Modo desconocido: %s"
-#: builtin/rebase.c:1702
+#: builtin/rebase.c:1739
msgid "--strategy requires --merge or --interactive"
msgstr "--strategy requiere --merge o --interactive"
-#: builtin/rebase.c:1732
+#: builtin/rebase.c:1769
msgid "cannot combine apply options with merge options"
msgstr "no se pueden combinar opciones de apply con opciones de merge"
-#: builtin/rebase.c:1745
+#: builtin/rebase.c:1782
#, c-format
msgid "Unknown rebase backend: %s"
msgstr "Backend de rebase desconocido: %s"
-#: builtin/rebase.c:1770
+#: builtin/rebase.c:1812
msgid "--reschedule-failed-exec requires --exec or --interactive"
msgstr "--reschedule-failed-exec requiere --exec o --interactive"
-#: builtin/rebase.c:1790
+#: builtin/rebase.c:1832
msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
msgstr "no se puede combinar '--preserve-merges' con '--rebase-merges'"
-#: builtin/rebase.c:1794
+#: builtin/rebase.c:1836
msgid ""
"error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
msgstr ""
"error: no se puede combinar '--preserve-merges' con '--reschedule-failed-"
"exec'"
-#: builtin/rebase.c:1818
+#: builtin/rebase.c:1860
#, c-format
msgid "invalid upstream '%s'"
msgstr "upstream inválido '%s'"
-#: builtin/rebase.c:1824
+#: builtin/rebase.c:1866
msgid "Could not create new root commit"
msgstr "No se pudo crear commit raíz nuevo"
-#: builtin/rebase.c:1850
+#: builtin/rebase.c:1892
#, c-format
msgid "'%s': need exactly one merge base with branch"
msgstr "'%s': necesita exactamente una base de fusión con rama"
-#: builtin/rebase.c:1853
+#: builtin/rebase.c:1895
#, c-format
msgid "'%s': need exactly one merge base"
msgstr "'%s': necesita exactamente una base de fusión"
-#: builtin/rebase.c:1861
+#: builtin/rebase.c:1903
#, c-format
msgid "Does not point to a valid commit '%s'"
msgstr "No apunta a un commit válido '%s'"
-#: builtin/rebase.c:1887
+#: builtin/rebase.c:1931
#, c-format
msgid "fatal: no such branch/commit '%s'"
msgstr "fatal: no existe la rama/commit: '%s'"
-#: builtin/rebase.c:1895 builtin/submodule--helper.c:40
-#: builtin/submodule--helper.c:1990
+#: builtin/rebase.c:1939 builtin/submodule--helper.c:40
+#: builtin/submodule--helper.c:2414
#, c-format
msgid "No such ref: %s"
msgstr "No existe ref: %s"
-#: builtin/rebase.c:1906
+#: builtin/rebase.c:1950
msgid "Could not resolve HEAD to a revision"
msgstr "No se pudo resolver HEAD a una revisión"
-#: builtin/rebase.c:1927
+#: builtin/rebase.c:1971
msgid "Please commit or stash them."
msgstr "Por favor, confírmalos o guárdalos."
-#: builtin/rebase.c:1963
+#: builtin/rebase.c:2007
#, c-format
msgid "could not switch to %s"
msgstr "no se pudo cambiar a %s"
-#: builtin/rebase.c:1974
+#: builtin/rebase.c:2018
msgid "HEAD is up to date."
msgstr "HEAD está actualizado."
-#: builtin/rebase.c:1976
+#: builtin/rebase.c:2020
#, c-format
msgid "Current branch %s is up to date.\n"
msgstr "La rama actual %s está actualizada.\n"
-#: builtin/rebase.c:1984
+#: builtin/rebase.c:2028
msgid "HEAD is up to date, rebase forced."
msgstr "HEAD está actualizado, rebase forzado."
-#: builtin/rebase.c:1986
+#: builtin/rebase.c:2030
#, c-format
msgid "Current branch %s is up to date, rebase forced.\n"
msgstr "Rama actual %s está actualizada, rebase forzado.\n"
-#: builtin/rebase.c:1994
+#: builtin/rebase.c:2038
msgid "The pre-rebase hook refused to rebase."
msgstr "El hook pre-rebase rechazó el rebase."
-#: builtin/rebase.c:2001
+#: builtin/rebase.c:2045
#, c-format
msgid "Changes to %s:\n"
msgstr "Cambios a %s:\n"
-#: builtin/rebase.c:2004
+#: builtin/rebase.c:2048
#, c-format
msgid "Changes from %s to %s:\n"
msgstr "Cambios desde %s a %s:\n"
-#: builtin/rebase.c:2029
+#: builtin/rebase.c:2073
#, c-format
msgid "First, rewinding head to replay your work on top of it...\n"
msgstr ""
"En primer lugar, rebobinando HEAD para después reproducir tus cambios encima "
"de ésta...\n"
-#: builtin/rebase.c:2038
+#: builtin/rebase.c:2082
msgid "Could not detach HEAD"
msgstr "No se puede desacoplar HEAD"
-#: builtin/rebase.c:2047
+#: builtin/rebase.c:2091
#, c-format
msgid "Fast-forwarded %s to %s.\n"
msgstr "Avance rápido de %s a %s.\n"
@@ -19126,7 +20104,7 @@
msgid "git receive-pack <git-dir>"
msgstr "git receive-pack <git-dir>"
-#: builtin/receive-pack.c:844
+#: builtin/receive-pack.c:1276
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"
@@ -19159,7 +20137,7 @@
"Para suprimir este mensaje y mantener el comportamiento predeterminado,\n"
"configura 'receive.denyCurrentBranch' a 'refuse'."
-#: builtin/receive-pack.c:864
+#: builtin/receive-pack.c:1296
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"
@@ -19180,11 +20158,11 @@
"\n"
"Para suprimir este mensaje, puedes configurarlo en 'refuse'."
-#: builtin/receive-pack.c:1970
+#: builtin/receive-pack.c:2481
msgid "quiet"
msgstr "tranquilo"
-#: builtin/receive-pack.c:1984
+#: builtin/receive-pack.c:2495
msgid "You must specify a directory."
msgstr "Se tiene que especificar un directorio."
@@ -19215,36 +20193,36 @@
msgid "'%s' is not a valid timestamp"
msgstr "'%s' no es una marca de tiempo válida"
-#: builtin/reflog.c:606
+#: builtin/reflog.c:609
#, c-format
msgid "Marking reachable objects..."
msgstr "Marcando objectos alcanzables..."
-#: builtin/reflog.c:644
+#: builtin/reflog.c:647
#, c-format
msgid "%s points nowhere!"
msgstr "¡%s apunta a ningún lado!"
-#: builtin/reflog.c:696
+#: builtin/reflog.c:699
msgid "no reflog specified to delete"
msgstr "no reflog especificado para borrar"
-#: builtin/reflog.c:705
+#: builtin/reflog.c:708
#, c-format
msgid "not a reflog: %s"
msgstr "no es una reflog: %s"
-#: builtin/reflog.c:710
+#: builtin/reflog.c:713
#, c-format
msgid "no reflog for '%s'"
msgstr "no reflog para '%s'"
-#: builtin/reflog.c:756
+#: builtin/reflog.c:759
#, c-format
msgid "invalid ref format: %s"
msgstr "formato inválido: %s"
-#: builtin/reflog.c:765
+#: builtin/reflog.c:768
msgid "git reflog [ show | expire | delete | exists ]"
msgstr "git reflog [ show | expire | delete | exists ]"
@@ -19382,40 +20360,35 @@
msgid "specifying branches to track makes sense only with fetch mirrors"
msgstr "especificar ramas para rastrear solo tiene sentido con fetch mirrors"
-#: builtin/remote.c:195 builtin/remote.c:696
+#: builtin/remote.c:195 builtin/remote.c:700
#, c-format
msgid "remote %s already exists."
msgstr "remoto %s ya existe."
-#: builtin/remote.c:199 builtin/remote.c:700
-#, c-format
-msgid "'%s' is not a valid remote name"
-msgstr "'%s' no es un nombre remoto válido"
-
-#: builtin/remote.c:239
+#: builtin/remote.c:240
#, c-format
msgid "Could not setup master '%s'"
msgstr "No se pudo configurar master '%s'"
-#: builtin/remote.c:354
+#: builtin/remote.c:355
#, c-format
msgid "Could not get fetch map for refspec %s"
msgstr "No se pudo realizar el fetch al mapa para refspec %s"
-#: builtin/remote.c:453 builtin/remote.c:461
+#: builtin/remote.c:454 builtin/remote.c:462
msgid "(matching)"
msgstr "(concordando)"
-#: builtin/remote.c:465
+#: builtin/remote.c:466
msgid "(delete)"
msgstr "(eliminar)"
-#: builtin/remote.c:653
+#: builtin/remote.c:655
#, c-format
msgid "could not set '%s'"
msgstr "no se pudo configurar '%s'"
-#: builtin/remote.c:658
+#: builtin/remote.c:660
#, c-format
msgid ""
"The %s configuration remote.pushDefault in:\n"
@@ -19426,17 +20399,17 @@
"\t%s:%d\n"
"ahora nombra al remoto inexistente '%s'"
-#: builtin/remote.c:689 builtin/remote.c:832 builtin/remote.c:940
+#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:946
#, c-format
msgid "No such remote: '%s'"
msgstr "No existe el remoto '%s'"
-#: builtin/remote.c:706
+#: builtin/remote.c:710
#, c-format
msgid "Could not rename config section '%s' to '%s'"
msgstr "No se pudo renombrar la sección de configuración '%s' a '%s'"
-#: builtin/remote.c:726
+#: builtin/remote.c:730
#, c-format
msgid ""
"Not updating non-default fetch refspec\n"
@@ -19447,17 +20420,17 @@
"\t%s\n"
"\tPor favor actualice la configuración manualmente si es necesario."
-#: builtin/remote.c:766
+#: builtin/remote.c:770
#, c-format
msgid "deleting '%s' failed"
msgstr "borrando '%s' falló"
-#: builtin/remote.c:800
+#: builtin/remote.c:804
#, c-format
msgid "creating '%s' failed"
msgstr "creando '%s' falló"
-#: builtin/remote.c:876
+#: builtin/remote.c:882
msgid ""
"Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
"to delete it, use:"
@@ -19472,118 +20445,118 @@
"eliminadas;\n"
"para borrarlas, use:"
-#: builtin/remote.c:890
+#: builtin/remote.c:896
#, c-format
msgid "Could not remove config section '%s'"
msgstr "No se pudo borrar la sección de configuración '%s'"
-#: builtin/remote.c:993
+#: builtin/remote.c:999
#, c-format
msgid " new (next fetch will store in remotes/%s)"
msgstr " nuevo (siguiente fetch se guardará en remotes/%s)"
-#: builtin/remote.c:996
+#: builtin/remote.c:1002
msgid " tracked"
msgstr " rastreada"
-#: builtin/remote.c:998
+#: builtin/remote.c:1004
msgid " stale (use 'git remote prune' to remove)"
msgstr " viejo ( use 'git remote prune' para eliminar)"
-#: builtin/remote.c:1000
+#: builtin/remote.c:1006
msgid " ???"
msgstr " ???"
-#: builtin/remote.c:1041
+#: builtin/remote.c:1047
#, c-format
msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
msgstr "inválido branch.%s.merge; no se puede rebasar en > 1 rama"
-#: builtin/remote.c:1050
+#: builtin/remote.c:1056
#, c-format
msgid "rebases interactively onto remote %s"
msgstr "rebasa interactivamente en remoto %s"
-#: builtin/remote.c:1052
+#: builtin/remote.c:1058
#, c-format
msgid "rebases interactively (with merges) onto remote %s"
msgstr "rebasa interactivamente (con fusiones) en remoto %s"
-#: builtin/remote.c:1055
+#: builtin/remote.c:1061
#, c-format
msgid "rebases onto remote %s"
msgstr "rebasa sobre el remoto %s"
-#: builtin/remote.c:1059
+#: builtin/remote.c:1065
#, c-format
msgid " merges with remote %s"
msgstr " se fusiona con remoto %s"
-#: builtin/remote.c:1062
+#: builtin/remote.c:1068
#, c-format
msgid "merges with remote %s"
msgstr "fusiona con remoto %s"
-#: builtin/remote.c:1065
+#: builtin/remote.c:1071
#, c-format
msgid "%-*s and with remote %s\n"
msgstr "%-*s y con el remoto %s\n"
-#: builtin/remote.c:1108
+#: builtin/remote.c:1114
msgid "create"
msgstr "crear"
-#: builtin/remote.c:1111
+#: builtin/remote.c:1117
msgid "delete"
msgstr "borrar"
-#: builtin/remote.c:1115
+#: builtin/remote.c:1121
msgid "up to date"
msgstr "actualizado"
-#: builtin/remote.c:1118
+#: builtin/remote.c:1124
msgid "fast-forwardable"
msgstr "puede realizar fast-forward"
-#: builtin/remote.c:1121
+#: builtin/remote.c:1127
msgid "local out of date"
msgstr "desactualizado local"
-#: builtin/remote.c:1128
+#: builtin/remote.c:1134
#, c-format
msgid " %-*s forces to %-*s (%s)"
msgstr " %-*s fuerza a %-*s (%s)"
-#: builtin/remote.c:1131
+#: builtin/remote.c:1137
#, c-format
msgid " %-*s pushes to %-*s (%s)"
msgstr " %-*s publica a %-*s (%s)"
-#: builtin/remote.c:1135
+#: builtin/remote.c:1141
#, c-format
msgid " %-*s forces to %s"
msgstr " %-*s fuerza a %s"
-#: builtin/remote.c:1138
+#: builtin/remote.c:1144
#, c-format
msgid " %-*s pushes to %s"
msgstr " %-*s publica a %s"
-#: builtin/remote.c:1206
+#: builtin/remote.c:1212
msgid "do not query remotes"
msgstr "no consultar remotos"
-#: builtin/remote.c:1233
+#: builtin/remote.c:1239
#, c-format
msgid "* remote %s"
msgstr "* remoto %s"
-#: builtin/remote.c:1234
+#: builtin/remote.c:1240
#, c-format
msgid " Fetch URL: %s"
msgstr " URL para obtener: %s"
-#: builtin/remote.c:1235 builtin/remote.c:1251 builtin/remote.c:1390
+#: builtin/remote.c:1241 builtin/remote.c:1257 builtin/remote.c:1396
msgid "(no URL)"
msgstr "(sin URL)"
@@ -19591,185 +20564,185 @@
#. with the one in " Fetch URL: %s"
#. translation.
#.
-#: builtin/remote.c:1249 builtin/remote.c:1251
+#: builtin/remote.c:1255 builtin/remote.c:1257
#, c-format
msgid " Push URL: %s"
msgstr " URL para publicar: %s"
-#: builtin/remote.c:1253 builtin/remote.c:1255 builtin/remote.c:1257
+#: builtin/remote.c:1259 builtin/remote.c:1261 builtin/remote.c:1263
#, c-format
msgid " HEAD branch: %s"
msgstr " Rama HEAD: %s"
-#: builtin/remote.c:1253
+#: builtin/remote.c:1259
msgid "(not queried)"
msgstr "(no consultado)"
-#: builtin/remote.c:1255
+#: builtin/remote.c:1261
msgid "(unknown)"
msgstr "(desconocido)"
-#: builtin/remote.c:1259
+#: builtin/remote.c:1265
#, c-format
msgid ""
" HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
msgstr ""
" HEAD en rama ( HEAD remoto es ambiguo, puede ser uno de los siguientes):\n"
-#: builtin/remote.c:1271
+#: builtin/remote.c:1277
#, c-format
msgid " Remote branch:%s"
msgid_plural " Remote branches:%s"
msgstr[0] " Rama remota:%s"
msgstr[1] " Ramas remotas:%s"
-#: builtin/remote.c:1274 builtin/remote.c:1300
+#: builtin/remote.c:1280 builtin/remote.c:1306
msgid " (status not queried)"
msgstr " (estado no consultado)"
-#: builtin/remote.c:1283
+#: builtin/remote.c:1289
msgid " Local branch configured for 'git pull':"
msgid_plural " Local branches configured for 'git pull':"
msgstr[0] " Rama local configurada para 'git pull':"
msgstr[1] " Ramas locales configuradas para 'git pull':"
-#: builtin/remote.c:1291
+#: builtin/remote.c:1297
msgid " Local refs will be mirrored by 'git push'"
msgstr " Las referencias locales serán reflejadas por 'git push'"
-#: builtin/remote.c:1297
+#: builtin/remote.c:1303
#, c-format
msgid " Local ref configured for 'git push'%s:"
msgid_plural " Local refs configured for 'git push'%s:"
msgstr[0] " Referencia local configurada para 'git push'%s:"
msgstr[1] " Referencias locales configuradas para 'git push'%s:"
-#: builtin/remote.c:1318
+#: builtin/remote.c:1324
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr "configurar refs/remotes/<nombre>/HEAD de acuerdo al remoto"
-#: builtin/remote.c:1320
+#: builtin/remote.c:1326
msgid "delete refs/remotes/<name>/HEAD"
msgstr "borrar refs/remotos/<nombre>/HEAD"
-#: builtin/remote.c:1335
+#: builtin/remote.c:1341
msgid "Cannot determine remote HEAD"
msgstr "No se puede determinar el HEAD remoto"
-#: builtin/remote.c:1337
+#: builtin/remote.c:1343
msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
msgstr "Múltiples ramas HEAD remotas. Por favor escoja una explícitamente con:"
-#: builtin/remote.c:1347
+#: builtin/remote.c:1353
#, c-format
msgid "Could not delete %s"
msgstr "No se pudo borrar %s"
-#: builtin/remote.c:1355
+#: builtin/remote.c:1361
#, c-format
msgid "Not a valid ref: %s"
msgstr "No es un ref válido: %s"
-#: builtin/remote.c:1357
+#: builtin/remote.c:1363
#, c-format
msgid "Could not setup %s"
msgstr "No se pudo configurar %s"
-#: builtin/remote.c:1375
+#: builtin/remote.c:1381
#, c-format
msgid " %s will become dangling!"
msgstr " ¡%s será colgado!"
-#: builtin/remote.c:1376
+#: builtin/remote.c:1382
#, c-format
msgid " %s has become dangling!"
msgstr " ¡%s ha sido colgado!"
-#: builtin/remote.c:1386
+#: builtin/remote.c:1392
#, c-format
msgid "Pruning %s"
msgstr "Recortando %s"
-#: builtin/remote.c:1387
+#: builtin/remote.c:1393
#, c-format
msgid "URL: %s"
msgstr "URL: %s"
-#: builtin/remote.c:1403
+#: builtin/remote.c:1409
#, c-format
msgid " * [would prune] %s"
msgstr " * [ejecutará prune] %s"
-#: builtin/remote.c:1406
+#: builtin/remote.c:1412
#, c-format
msgid " * [pruned] %s"
msgstr " * [prune realizado] %s"
-#: builtin/remote.c:1451
+#: builtin/remote.c:1457
msgid "prune remotes after fetching"
msgstr "recortar remotos tras realizar fetch"
-#: builtin/remote.c:1514 builtin/remote.c:1568 builtin/remote.c:1636
+#: builtin/remote.c:1521 builtin/remote.c:1577 builtin/remote.c:1647
#, c-format
msgid "No such remote '%s'"
msgstr "No existe el remoto '%s'"
-#: builtin/remote.c:1530
+#: builtin/remote.c:1539
msgid "add branch"
msgstr "agregar rama"
-#: builtin/remote.c:1537
+#: builtin/remote.c:1546
msgid "no remote specified"
msgstr "no hay remotos especificados"
-#: builtin/remote.c:1554
+#: builtin/remote.c:1563
msgid "query push URLs rather than fetch URLs"
msgstr "consultar URLs de push en lugar de URLs de fetch"
-#: builtin/remote.c:1556
+#: builtin/remote.c:1565
msgid "return all URLs"
msgstr "retornar todos los URLs"
-#: builtin/remote.c:1584
+#: builtin/remote.c:1595
#, c-format
msgid "no URLs configured for remote '%s'"
msgstr "no hay URLs configurados para remoto '%s'"
-#: builtin/remote.c:1610
+#: builtin/remote.c:1621
msgid "manipulate push URLs"
msgstr "manipular URLs de push"
-#: builtin/remote.c:1612
+#: builtin/remote.c:1623
msgid "add URL"
msgstr "agregar URL"
-#: builtin/remote.c:1614
+#: builtin/remote.c:1625
msgid "delete URLs"
msgstr "borrar URLs"
-#: builtin/remote.c:1621
+#: builtin/remote.c:1632
msgid "--add --delete doesn't make sense"
msgstr "--add --delete no tiene sentido"
-#: builtin/remote.c:1660
+#: builtin/remote.c:1673
#, c-format
msgid "Invalid old URL pattern: %s"
msgstr "Patrón de URL viejo inválido: %s"
-#: builtin/remote.c:1668
+#: builtin/remote.c:1681
#, c-format
msgid "No such URL found: %s"
msgstr "No se encontró URL: %s"
-#: builtin/remote.c:1670
+#: builtin/remote.c:1683
msgid "Will not delete all non-push URLs"
msgstr "No borrará todos los URLs de no-push"
-#: builtin/repack.c:25
+#: builtin/repack.c:26
msgid "git repack [<options>]"
msgstr "git repack [<opciones>]"
-#: builtin/repack.c:30
+#: builtin/repack.c:31
msgid ""
"Incremental repacks are incompatible with bitmap indexes. Use\n"
"--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -19777,137 +20750,123 @@
"Re empaquetados incrementales son incompatibles con índices bitmap. Use \n"
"--no-write-bitmap-index o deshabilite la configuración pack.writebitmaps."
-#: builtin/repack.c:193
+#: builtin/repack.c:198
msgid "could not start pack-objects to repack promisor objects"
msgstr "no se puede iniciar pack-objects para reempaquetar objetos promisores"
-#: builtin/repack.c:232 builtin/repack.c:418
+#: builtin/repack.c:270 builtin/repack.c:446
msgid "repack: Expecting full hex object ID lines only from pack-objects."
msgstr ""
"repack: Esperando líneas de ID de objeto en full hex solo desde pack-objects."
-#: builtin/repack.c:256
+#: builtin/repack.c:294
msgid "could not finish pack-objects to repack promisor objects"
msgstr ""
"no se puede finalizar pack-objects para reempaquetar objetos promisores"
-#: builtin/repack.c:294
+#: builtin/repack.c:322
msgid "pack everything in a single pack"
msgstr "empaquetar todo en un único paquete"
-#: builtin/repack.c:296
+#: builtin/repack.c:324
msgid "same as -a, and turn unreachable objects loose"
msgstr "lo mismo que -a, y pierde objetos inaccesibles"
-#: builtin/repack.c:299
+#: builtin/repack.c:327
msgid "remove redundant packs, and run git-prune-packed"
msgstr "eliminar paquetes redundantes, y ejecutar git-prune-packed"
-#: builtin/repack.c:301
+#: builtin/repack.c:329
msgid "pass --no-reuse-delta to git-pack-objects"
msgstr "pasar --no-reuse-delta a git-pack-objects"
-#: builtin/repack.c:303
+#: builtin/repack.c:331
msgid "pass --no-reuse-object to git-pack-objects"
msgstr "pasar --no-reuse-object a git-pack-objects"
-#: builtin/repack.c:305
+#: builtin/repack.c:333
msgid "do not run git-update-server-info"
msgstr "no ejecutar git-update-server-info"
-#: builtin/repack.c:308
+#: builtin/repack.c:336
msgid "pass --local to git-pack-objects"
msgstr "pasar --local a git-pack-objects"
-#: builtin/repack.c:310
+#: builtin/repack.c:338
msgid "write bitmap index"
msgstr "escribir un índice de bitmap"
-#: builtin/repack.c:312
+#: builtin/repack.c:340
msgid "pass --delta-islands to git-pack-objects"
msgstr "pasar --delta-islands a git-pack-objects"
-#: builtin/repack.c:313
+#: builtin/repack.c:341
msgid "approxidate"
msgstr "aproxime"
-#: builtin/repack.c:314
+#: builtin/repack.c:342
msgid "with -A, do not loosen objects older than this"
msgstr "con -A, no perder objetos más antiguos que este"
-#: builtin/repack.c:316
+#: builtin/repack.c:344
msgid "with -a, repack unreachable objects"
msgstr "con -a, re empaquetar objetos inalcanzables"
-#: builtin/repack.c:318
+#: builtin/repack.c:346
msgid "size of the window used for delta compression"
msgstr "tamaño de la ventana usado para la compresión delta"
-#: builtin/repack.c:319 builtin/repack.c:325
+#: builtin/repack.c:347 builtin/repack.c:353
msgid "bytes"
msgstr "bytes"
-#: builtin/repack.c:320
+#: builtin/repack.c:348
msgid "same as the above, but limit memory size instead of entries count"
msgstr ""
"lo mismo que arriba, pero limita el tamaño de memoria en lugar de contar "
"entradas"
-#: builtin/repack.c:322
+#: builtin/repack.c:350
msgid "limits the maximum delta depth"
msgstr "limita la profundidad máxima del delta"
-#: builtin/repack.c:324
+#: builtin/repack.c:352
msgid "limits the maximum number of threads"
msgstr "limita el número máximo de hilos"
-#: builtin/repack.c:326
+#: builtin/repack.c:354
msgid "maximum size of each packfile"
msgstr "tamaño máximo de cada paquete"
-#: builtin/repack.c:328
+#: builtin/repack.c:356
msgid "repack objects in packs marked with .keep"
msgstr "re-empaquetar objetos en paquetes marcados con .keep"
-#: builtin/repack.c:330
+#: builtin/repack.c:358
msgid "do not repack this pack"
msgstr "no reempaquetar este paquete"
-#: builtin/repack.c:340
+#: builtin/repack.c:368
msgid "cannot delete packs in a precious-objects repo"
msgstr "no se pueden borrar paquetes en un repositorio de objetos-preciosos"
-#: builtin/repack.c:344
+#: builtin/repack.c:372
msgid "--keep-unreachable and -A are incompatible"
msgstr "--keep-unreachable y -A son incompatibles"
-#: builtin/repack.c:427
+#: builtin/repack.c:455
msgid "Nothing new to pack."
msgstr "Nada nuevo para empaquetar."
-#: builtin/repack.c:488
+#: builtin/repack.c:485
#, c-format
-msgid ""
-"WARNING: Some packs in use have been renamed by\n"
-"WARNING: prefixing old- to their name, in order to\n"
-"WARNING: replace them with the new version of the\n"
-"WARNING: file. But the operation failed, and the\n"
-"WARNING: attempt to rename them back to their\n"
-"WARNING: original names also failed.\n"
-"WARNING: Please rename them in %s manually:\n"
-msgstr ""
-"WARNING: Algunos packs en uso han sido renombrados\n"
-"WARNING: agregando el prefijo old- a sus nombres,para\n"
-"WARNING: reemplazarlos con la nueva versión del\n"
-"WARNING: archivo. Pero la operación falló, y el intento\n"
-"WARNING: de renombrarlos a sus nombres originales\n"
-"WARNING: también falló.\n"
-"WARNING: Por favor renombralos en %s manualmente:\n"
+msgid "missing required file: %s"
+msgstr "falta archivo requerido: %s"
-#: builtin/repack.c:536
+#: builtin/repack.c:487
#, c-format
-msgid "failed to remove '%s'"
-msgstr "falló al eliminar'%s'"
+msgid "could not unlink: %s"
+msgstr "no se pudo desvincular: %s"
#: builtin/replace.c:22
msgid "git replace [-f] <object> <replacement>"
@@ -20237,8 +21196,8 @@
msgid "Cannot do a %s reset in the middle of a merge."
msgstr "No se puede realziar un reset %s en medio de una fusión."
-#: builtin/reset.c:295 builtin/stash.c:520 builtin/stash.c:595
-#: builtin/stash.c:619
+#: builtin/reset.c:295 builtin/stash.c:587 builtin/stash.c:661
+#: builtin/stash.c:685
msgid "be quiet, only report errors"
msgstr "ser silencioso, solo reportar errores"
@@ -20323,19 +21282,19 @@
msgid "Could not write new index file."
msgstr "No se puede escribir un nuevo archivo índice."
-#: builtin/rev-list.c:499
+#: builtin/rev-list.c:534
msgid "cannot combine --exclude-promisor-objects and --missing"
msgstr "no se puede combinar --exclude-promisor-objects y --missing"
-#: builtin/rev-list.c:560
+#: builtin/rev-list.c:595
msgid "object filtering requires --objects"
msgstr "filtrado de objetos requiere --objects"
-#: builtin/rev-list.c:610
+#: builtin/rev-list.c:651
msgid "rev-list does not support display of notes"
msgstr "rev-list no soporta mostrar notas"
-#: builtin/rev-list.c:615
+#: builtin/rev-list.c:656
msgid "marked counting is incompatible with --objects"
msgstr "conteo de marcas es incompatible con --objects"
@@ -20448,11 +21407,11 @@
msgid "keep redundant, empty commits"
msgstr "mantener commits redundantes, vacíos"
-#: builtin/revert.c:232
+#: builtin/revert.c:239
msgid "revert failed"
msgstr "falló al revertir"
-#: builtin/revert.c:245
+#: builtin/revert.c:252
msgid "cherry-pick failed"
msgstr "cherry-pick falló"
@@ -20554,55 +21513,76 @@
"[<ref>...]\n"
" --all y especificaciones <ref> explícitas son mutuamente exclusivas."
-#: builtin/send-pack.c:163
+#: builtin/send-pack.c:188
msgid "remote name"
msgstr "nombre remoto"
-#: builtin/send-pack.c:176
+#: builtin/send-pack.c:201
msgid "use stateless RPC protocol"
msgstr "usar protocolo RPC sin estado"
-#: builtin/send-pack.c:177
+#: builtin/send-pack.c:202
msgid "read refs from stdin"
msgstr "leer refs de stdin"
-#: builtin/send-pack.c:178
+#: builtin/send-pack.c:203
msgid "print status from remote helper"
msgstr "mostrar status del remote helper"
-#: builtin/shortlog.c:14
+#: builtin/shortlog.c:16
msgid "git shortlog [<options>] [<revision-range>] [[--] <path>...]"
msgstr "git shortlog [<opciones>] [<rango-de-revisión>] [[--] <ruta>...]"
-#: builtin/shortlog.c:15
+#: builtin/shortlog.c:17
msgid "git log --pretty=short | git shortlog [<options>]"
msgstr "git log --pretty=short | git shorlog [<opciones>]"
-#: builtin/shortlog.c:264
-msgid "Group by committer rather than author"
-msgstr "Agrupar por committer en lugar de autor"
+#: builtin/shortlog.c:123
+msgid "using multiple --group options with stdin is not supported"
+msgstr "no se admite el uso de múltiples opciones de grupo --group con stdin"
-#: builtin/shortlog.c:266
+#: builtin/shortlog.c:133
+msgid "using --group=trailer with stdin is not supported"
+msgstr "el uso de --group = trailer con stdin no es compatible"
+
+#: builtin/shortlog.c:323
+#, c-format
+msgid "unknown group type: %s"
+msgstr "tipo de grupo desconocido: %s"
+
+#: builtin/shortlog.c:351
+msgid "group by committer rather than author"
+msgstr "agrupar por committer en lugar de autor"
+
+#: builtin/shortlog.c:354
msgid "sort output according to the number of commits per author"
msgstr "ordenar salida de acuerdo al número de commits por autor"
-#: builtin/shortlog.c:268
-msgid "Suppress commit descriptions, only provides commit count"
-msgstr "Suprimir descripción de commits, solo proveer cuenta de commits"
+#: builtin/shortlog.c:356
+msgid "suppress commit descriptions, only provides commit count"
+msgstr "suprimir descripción de commits, solo proveer cuenta de commits"
-#: builtin/shortlog.c:270
-msgid "Show the email address of each author"
-msgstr "Mostrar la dirección de correo de cada autor"
+#: builtin/shortlog.c:358
+msgid "show the email address of each author"
+msgstr "mostrar la dirección de correo de cada autor"
-#: builtin/shortlog.c:271
+#: builtin/shortlog.c:359
msgid "<w>[,<i1>[,<i2>]]"
msgstr "<w>[,<i1>[,<i2>]]"
-#: builtin/shortlog.c:272
-msgid "Linewrap output"
-msgstr "Salida de línea"
+#: builtin/shortlog.c:360
+msgid "linewrap output"
+msgstr "salida de línea"
-#: builtin/shortlog.c:301
+#: builtin/shortlog.c:362
+msgid "field"
+msgstr "campo"
+
+#: builtin/shortlog.c:363
+msgid "group by field"
+msgstr "agrupar por campo"
+
+#: builtin/shortlog.c:391
msgid "too many arguments given outside repository"
msgstr "demasiados argumentos dados fuera del repositorio"
@@ -20797,62 +21777,74 @@
msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
msgstr "git sparse-checkout (init|list|set|add|reapply|disable) <opciones>"
-#: builtin/sparse-checkout.c:64
+#: builtin/sparse-checkout.c:45
+msgid "git sparse-checkout list"
+msgstr "git sparse-checkout list"
+
+#: builtin/sparse-checkout.c:71
msgid "this worktree is not sparse (sparse-checkout file may not exist)"
msgstr ""
"este árbol de trabajo no tiene sparse (archivo sparese-checkout tal vez no "
"existe)"
-#: builtin/sparse-checkout.c:216
+#: builtin/sparse-checkout.c:223
msgid "failed to create directory for sparse-checkout file"
msgstr "falló al crear directorio para el archivo sparse-checkout"
-#: builtin/sparse-checkout.c:257
+#: builtin/sparse-checkout.c:264
msgid "unable to upgrade repository format to enable worktreeConfig"
msgstr ""
"no es posible actualizar el formato de repositorio para habilitar "
"worktreeConfig"
-#: builtin/sparse-checkout.c:259
+#: builtin/sparse-checkout.c:266
msgid "failed to set extensions.worktreeConfig setting"
msgstr "falló al configurar opción extensions.worktreeConfig"
-#: builtin/sparse-checkout.c:276
+#: builtin/sparse-checkout.c:283
msgid "git sparse-checkout init [--cone]"
msgstr "git sparse-checkout init [--cone]"
-#: builtin/sparse-checkout.c:295
+#: builtin/sparse-checkout.c:302
msgid "initialize the sparse-checkout in cone mode"
msgstr "inicializa el sparse-checkout en modo cono"
-#: builtin/sparse-checkout.c:332
+#: builtin/sparse-checkout.c:339
#, c-format
msgid "failed to open '%s'"
msgstr "falló al abrir '%s'"
-#: builtin/sparse-checkout.c:389
+#: builtin/sparse-checkout.c:396
#, c-format
msgid "could not normalize path %s"
msgstr "no se pudo normalizar la ruta %s"
-#: builtin/sparse-checkout.c:401
+#: builtin/sparse-checkout.c:408
msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
msgstr "git sparse-checkout (set|add) (--stdin | <patrones>)"
-#: builtin/sparse-checkout.c:426
+#: builtin/sparse-checkout.c:433
#, c-format
msgid "unable to unquote C-style string '%s'"
msgstr "no es posible dequote para la cadena de estilo C '%s'"
-#: builtin/sparse-checkout.c:480 builtin/sparse-checkout.c:504
+#: builtin/sparse-checkout.c:487 builtin/sparse-checkout.c:511
msgid "unable to load existing sparse-checkout patterns"
msgstr "no se pudo cargar patrones de sparse-checkout existentes"
-#: builtin/sparse-checkout.c:549
+#: builtin/sparse-checkout.c:556
msgid "read patterns from standard in"
msgstr "leer patrones de standard in"
-#: builtin/sparse-checkout.c:586
+#: builtin/sparse-checkout.c:571
+msgid "git sparse-checkout reapply"
+msgstr "git sparse-checkout reapply"
+
+#: builtin/sparse-checkout.c:590
+msgid "git sparse-checkout disable"
+msgstr "git sparse-checkout disable"
+
+#: builtin/sparse-checkout.c:618
msgid "error while refreshing working directory"
msgstr "error al refrescar directorio de trabajo"
@@ -20942,153 +21934,165 @@
msgstr "%s no es una referencia válida"
#: builtin/stash.c:225
-msgid "git stash clear with parameters is unimplemented"
-msgstr "git stash clear con parámetros no está implementado"
+msgid "git stash clear with arguments is unimplemented"
+msgstr "git stash clear con argumentos no está implementado"
-#: builtin/stash.c:404
+#: builtin/stash.c:429
+#, c-format
+msgid ""
+"WARNING: Untracked file in way of tracked file! Renaming\n"
+" %s -> %s\n"
+" to make room.\n"
+msgstr ""
+"ADVERTENCIA: Archivo sin seguimiento en forma de archivo con seguimiento. "
+"Renombrar\n"
+" %s ->%s\n"
+" Para hacer espacio.\n"
+
+#: builtin/stash.c:490
msgid "cannot apply a stash in the middle of a merge"
msgstr "no se puede aplicar un stash en medio de un merge"
-#: builtin/stash.c:415
+#: builtin/stash.c:501
#, c-format
msgid "could not generate diff %s^!."
msgstr "no se pudo generar diff %s^!."
-#: builtin/stash.c:422
-msgid "conflicts in index.Try without --index."
+#: builtin/stash.c:508
+msgid "conflicts in index. Try without --index."
msgstr "conflictos en índice. Intente sin --index."
-#: builtin/stash.c:428
+#: builtin/stash.c:514
msgid "could not save index tree"
msgstr "no se puede guardar el índice del árbol"
-#: builtin/stash.c:437
+#: builtin/stash.c:523
msgid "could not restore untracked files from stash"
msgstr "no se pueden restaurar archivos no rastreados de la entrada stash"
-#: builtin/stash.c:451
+#: builtin/stash.c:537
#, c-format
msgid "Merging %s with %s"
msgstr "Fusionando %s con %s"
-#: builtin/stash.c:461
+#: builtin/stash.c:547
msgid "Index was not unstashed."
msgstr "El índice no fue sacado de stash."
-#: builtin/stash.c:522 builtin/stash.c:621
+#: builtin/stash.c:589 builtin/stash.c:687
msgid "attempt to recreate the index"
msgstr "intento de recrear el index"
-#: builtin/stash.c:555
+#: builtin/stash.c:633
#, c-format
msgid "Dropped %s (%s)"
msgstr "Botado %s (%s)"
-#: builtin/stash.c:558
+#: builtin/stash.c:636
#, c-format
msgid "%s: Could not drop stash entry"
msgstr "%s: No se pudo borrar entrada stash"
-#: builtin/stash.c:583
+#: builtin/stash.c:649
#, c-format
msgid "'%s' is not a stash reference"
msgstr "'%s' no es una referencia stash"
-#: builtin/stash.c:633
+#: builtin/stash.c:699
msgid "The stash entry is kept in case you need it again."
msgstr "La entrada de stash se guardó en caso de ser necesario nuevamente."
-#: builtin/stash.c:656
+#: builtin/stash.c:722
msgid "No branch name specified"
msgstr "No se especificó el nombre de la rama"
-#: builtin/stash.c:800 builtin/stash.c:837
+#: builtin/stash.c:866 builtin/stash.c:903
#, c-format
msgid "Cannot update %s with %s"
msgstr "No se puede actualizar %s con %s"
-#: builtin/stash.c:818 builtin/stash.c:1475 builtin/stash.c:1540
+#: builtin/stash.c:884 builtin/stash.c:1538 builtin/stash.c:1603
msgid "stash message"
msgstr "mensaje de stash"
-#: builtin/stash.c:828
+#: builtin/stash.c:894
msgid "\"git stash store\" requires one <commit> argument"
msgstr "\"git stash store\" requiere un argumento <commit>"
-#: builtin/stash.c:1046
+#: builtin/stash.c:1109
msgid "No changes selected"
msgstr "Sin cambios seleccionados"
-#: builtin/stash.c:1146
+#: builtin/stash.c:1209
msgid "You do not have the initial commit yet"
msgstr "Aún no tienes un commit inicial"
-#: builtin/stash.c:1173
+#: builtin/stash.c:1236
msgid "Cannot save the current index state"
msgstr "No se puede guardar el estado actual del índice"
-#: builtin/stash.c:1182
+#: builtin/stash.c:1245
msgid "Cannot save the untracked files"
msgstr "No se pueden guardar los archivos no rastreados"
-#: builtin/stash.c:1193 builtin/stash.c:1202
+#: builtin/stash.c:1256 builtin/stash.c:1265
msgid "Cannot save the current worktree state"
msgstr "No se puede guardar el estado actual del árbol de trabajo"
-#: builtin/stash.c:1230
+#: builtin/stash.c:1293
msgid "Cannot record working tree state"
msgstr "No se puede grabar el estado del árbol de trabajo"
-#: builtin/stash.c:1279
+#: builtin/stash.c:1342
msgid "Can't use --patch and --include-untracked or --all at the same time"
msgstr "No se puede usar --patch y --include-untracked o --all al mismo tiempo"
-#: builtin/stash.c:1295
+#: builtin/stash.c:1358
msgid "Did you forget to 'git add'?"
msgstr "¿Olvidaste 'git add'?"
-#: builtin/stash.c:1310
+#: builtin/stash.c:1373
msgid "No local changes to save"
msgstr "No hay cambios locales para guardar"
-#: builtin/stash.c:1317
+#: builtin/stash.c:1380
msgid "Cannot initialize stash"
msgstr "No se puede inicializar stash"
-#: builtin/stash.c:1332
+#: builtin/stash.c:1395
msgid "Cannot save the current status"
msgstr "No se puede guardar el estado actual"
-#: builtin/stash.c:1337
+#: builtin/stash.c:1400
#, c-format
msgid "Saved working directory and index state %s"
msgstr "Directorio de trabajo guardado y estado de índice %s"
-#: builtin/stash.c:1427
+#: builtin/stash.c:1490
msgid "Cannot remove worktree changes"
msgstr "No se pueden eliminar cambios del árbol de trabajo"
-#: builtin/stash.c:1466 builtin/stash.c:1531
+#: builtin/stash.c:1529 builtin/stash.c:1594
msgid "keep index"
msgstr "mantener index"
-#: builtin/stash.c:1468 builtin/stash.c:1533
+#: builtin/stash.c:1531 builtin/stash.c:1596
msgid "stash in patch mode"
msgstr "stash en modo patch"
-#: builtin/stash.c:1469 builtin/stash.c:1534
+#: builtin/stash.c:1532 builtin/stash.c:1597
msgid "quiet mode"
msgstr "modo tranquilo"
-#: builtin/stash.c:1471 builtin/stash.c:1536
+#: builtin/stash.c:1534 builtin/stash.c:1599
msgid "include untracked files in stash"
msgstr "incluir archivos sin seguimiento en stash"
-#: builtin/stash.c:1473 builtin/stash.c:1538
+#: builtin/stash.c:1536 builtin/stash.c:1601
msgid "include ignore files"
msgstr "incluir archivos ignorados"
-#: builtin/stash.c:1573
+#: builtin/stash.c:1636
msgid ""
"the stash.useBuiltin support has been removed!\n"
"See its entry in 'git help config' for details."
@@ -21113,7 +22117,7 @@
msgid "prepend comment character and space to each line"
msgstr "anteponer carácter de comentario y espacio a cada línea"
-#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:1999
+#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2423
#, c-format
msgid "Expecting a full ref name, got %s"
msgstr "Se esperaba un nombre de ref completo, se obtuvo %s"
@@ -21127,7 +22131,7 @@
msgid "cannot strip one component off url '%s'"
msgstr "no se puede quitar un componente del url '%s'"
-#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1395
+#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1819
msgid "alternative anchor for relative paths"
msgstr "ancho alternativo para rutas relativas"
@@ -21135,8 +22139,8 @@
msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
msgstr "git submodule--helper list [--prefix=<ruta>] [<ruta>...]"
-#: builtin/submodule--helper.c:472 builtin/submodule--helper.c:630
-#: builtin/submodule--helper.c:653
+#: builtin/submodule--helper.c:472 builtin/submodule--helper.c:629
+#: builtin/submodule--helper.c:652
#, c-format
msgid "No url found for submodule path '%s' in .gitmodules"
msgstr "No se encontró url para la ruta del submódulo '%s' en .gitmodules"
@@ -21167,12 +22171,13 @@
"."
#: builtin/submodule--helper.c:565
-msgid "Suppress output of entering each submodule command"
-msgstr "Suprime la salida al inicializar cada comando de submódulo"
+msgid "suppress output of entering each submodule command"
+msgstr "suprime la salida al inicializar cada comando de submódulo"
-#: builtin/submodule--helper.c:567 builtin/submodule--helper.c:1063
-msgid "Recurse into nested submodules"
-msgstr "Recursar en submódulos anidados"
+#: builtin/submodule--helper.c:567 builtin/submodule--helper.c:888
+#: builtin/submodule--helper.c:1487
+msgid "recurse into nested submodules"
+msgstr "recursar en submódulos anidados"
#: builtin/submodule--helper.c:572
msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
@@ -21187,105 +22192,158 @@
"no se pudo encontrar configuración '%s'. Asumiendo que este repositorio es "
"su propio upstream autoritativo."
-#: builtin/submodule--helper.c:667
+#: builtin/submodule--helper.c:666
#, c-format
msgid "Failed to register url for submodule path '%s'"
msgstr "Falló al registrar el url para la ruta del submódulo '%s'"
-#: builtin/submodule--helper.c:671
+#: builtin/submodule--helper.c:670
#, c-format
msgid "Submodule '%s' (%s) registered for path '%s'\n"
msgstr "Submódulo '%s' (%s) registrado para ruta '%s'\n"
-#: builtin/submodule--helper.c:681
+#: builtin/submodule--helper.c:680
#, c-format
msgid "warning: command update mode suggested for submodule '%s'\n"
msgstr ""
"peligro: modo de actualización de comandos sugerido para el submódulo '%s'\n"
-#: builtin/submodule--helper.c:688
+#: builtin/submodule--helper.c:687
#, c-format
msgid "Failed to register update mode for submodule path '%s'"
msgstr ""
"Error al registrar el modo de actualización para la ruta del submódulo '%s'"
-#: builtin/submodule--helper.c:710
-msgid "Suppress output for initializing a submodule"
-msgstr "Suprime la salida para inicializar un submódulo"
+#: builtin/submodule--helper.c:709
+msgid "suppress output for initializing a submodule"
+msgstr "suprime la salida para inicializar un submódulo"
-#: builtin/submodule--helper.c:715
+#: builtin/submodule--helper.c:714
msgid "git submodule--helper init [<options>] [<path>]"
msgstr "git submodule--helper init [<opciones>] [<path>]"
-#: builtin/submodule--helper.c:789 builtin/submodule--helper.c:924
+#: builtin/submodule--helper.c:787 builtin/submodule--helper.c:922
#, c-format
msgid "no submodule mapping found in .gitmodules for path '%s'"
msgstr ""
"no se ha encontrado mapeo de submódulos en .gitmodules para la ruta '%s'"
-#: builtin/submodule--helper.c:837
+#: builtin/submodule--helper.c:835
#, c-format
msgid "could not resolve HEAD ref inside the submodule '%s'"
msgstr "no pudo resolver ref de HEAD dentro del submódulo '%s'"
-#: builtin/submodule--helper.c:864 builtin/submodule--helper.c:1033
+#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1457
#, c-format
msgid "failed to recurse into submodule '%s'"
msgstr "falló al recursar en el submódulo '%s'"
-#: builtin/submodule--helper.c:888 builtin/submodule--helper.c:1199
-msgid "Suppress submodule status output"
-msgstr "Suprimir output del estado del submódulo"
+#: builtin/submodule--helper.c:886 builtin/submodule--helper.c:1623
+msgid "suppress submodule status output"
+msgstr "suprimir output del estado del submódulo"
-#: builtin/submodule--helper.c:889
+#: builtin/submodule--helper.c:887
msgid ""
-"Use commit stored in the index instead of the one stored in the submodule "
+"use commit stored in the index instead of the one stored in the submodule "
"HEAD"
msgstr ""
-"Usar el commit guardado en el índice en lugar del guardado en el submódulo "
+"usar el commit guardado en el índice en lugar del guardado en el submódulo "
"HEAD"
-#: builtin/submodule--helper.c:890
-msgid "recurse into nested submodules"
-msgstr "recursar en submódulos anidados"
-
-#: builtin/submodule--helper.c:895
+#: builtin/submodule--helper.c:893
msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
msgstr "git submodule status [--quiet] [--cached] [--recursive] [<ruta>...]"
-#: builtin/submodule--helper.c:919
+#: builtin/submodule--helper.c:917
msgid "git submodule--helper name <path>"
msgstr "git submodule--helper name <ruta>"
-#: builtin/submodule--helper.c:983
+#: builtin/submodule--helper.c:989
+#, c-format
+msgid "* %s %s(blob)->%s(submodule)"
+msgstr "* %s %s(blob)->%s(submodule)"
+
+#: builtin/submodule--helper.c:992
+#, c-format
+msgid "* %s %s(submodule)->%s(blob)"
+msgstr "* %s %s(submodule)->%s(blob)"
+
+#: builtin/submodule--helper.c:1005
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: builtin/submodule--helper.c:1055
+#, c-format
+msgid "couldn't hash object from '%s'"
+msgstr "no se pudo realizar hash del objeto '%s'"
+
+#: builtin/submodule--helper.c:1059
+#, c-format
+msgid "unexpected mode %o\n"
+msgstr "modo %o inesperado\n"
+
+#: builtin/submodule--helper.c:1300
+msgid "use the commit stored in the index instead of the submodule HEAD"
+msgstr ""
+"usar el commit guardado en el índice en lugar del guardado en el submódulo "
+"HEAD"
+
+#: builtin/submodule--helper.c:1302
+msgid "to compare the commit in the index with that in the submodule HEAD"
+msgstr ""
+"usar el commit guardado en el índice para comparar con el guardado en el "
+"submódulo HEAD"
+
+#: builtin/submodule--helper.c:1304
+msgid "skip submodules with 'ignore_config' value set to 'all'"
+msgstr "omitir submódulos con el valor 'ignore_config' establecido en 'all'"
+
+#: builtin/submodule--helper.c:1306
+msgid "limit the summary size"
+msgstr "limitar el tamaño de resumen"
+
+#: builtin/submodule--helper.c:1311
+msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
+msgstr "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
+
+#: builtin/submodule--helper.c:1335
+msgid "could not fetch a revision for HEAD"
+msgstr "no se puede obtener la revisión para HEAD"
+
+#: builtin/submodule--helper.c:1340
+msgid "--cached and --files are mutually exclusive"
+msgstr "--cached y --files son mutuamente exclusivos"
+
+#: builtin/submodule--helper.c:1407
#, c-format
msgid "Synchronizing submodule url for '%s'\n"
msgstr "Sincronizando url del submódulo para '%s'\n"
-#: builtin/submodule--helper.c:989
+#: builtin/submodule--helper.c:1413
#, c-format
msgid "failed to register url for submodule path '%s'"
msgstr "falló al registrar el url para la ruta del submódulo '%s'"
-#: builtin/submodule--helper.c:1003
+#: builtin/submodule--helper.c:1427
#, c-format
msgid "failed to get the default remote for submodule '%s'"
msgstr "error al conseguir el remoto por defecto para el submódulo '%s'"
-#: builtin/submodule--helper.c:1014
+#: builtin/submodule--helper.c:1438
#, c-format
msgid "failed to update remote for submodule '%s'"
msgstr "error al actualizar el remoto para el submódulo '%s'"
-#: builtin/submodule--helper.c:1061
-msgid "Suppress output of synchronizing submodule url"
-msgstr "Suprime la salida del url del submódulo que se sincroniza"
+#: builtin/submodule--helper.c:1485
+msgid "suppress output of synchronizing submodule url"
+msgstr "suprime la salida del url del submódulo que se sincroniza"
-#: builtin/submodule--helper.c:1068
+#: builtin/submodule--helper.c:1492
msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
msgstr "git submodule--helper sync [--quiet] [--recursive] [<ruta>]"
-#: builtin/submodule--helper.c:1122
+#: builtin/submodule--helper.c:1546
#, c-format
msgid ""
"Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you "
@@ -21294,7 +22352,7 @@
"El árbol de trabajo del submódulo '%s' contiene un directorio .git (use 'rm -"
"rf' si realmente quieres eliminarlo incluyendo todo en su historia)"
-#: builtin/submodule--helper.c:1134
+#: builtin/submodule--helper.c:1558
#, c-format
msgid ""
"Submodule work tree '%s' contains local modifications; use '-f' to discard "
@@ -21303,46 +22361,46 @@
"El árbol de trabajo del submódulo '%s' contiene modificaciones locales; usa "
"'-f' para descartarlas"
-#: builtin/submodule--helper.c:1142
+#: builtin/submodule--helper.c:1566
#, c-format
msgid "Cleared directory '%s'\n"
msgstr "Directorio '%s' limpiado\n"
-#: builtin/submodule--helper.c:1144
+#: builtin/submodule--helper.c:1568
#, c-format
msgid "Could not remove submodule work tree '%s'\n"
msgstr "No se pudo eliminar el árbol de trabajo del submódulo '%s'\n"
-#: builtin/submodule--helper.c:1155
+#: builtin/submodule--helper.c:1579
#, c-format
msgid "could not create empty submodule directory %s"
msgstr "no se pudo crear directorio vacío de submódulo %s"
-#: builtin/submodule--helper.c:1171
+#: builtin/submodule--helper.c:1595
#, c-format
msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
msgstr "Submódulo '%s' (%s) no registrado para ruta '%s'\n"
-#: builtin/submodule--helper.c:1200
-msgid "Remove submodule working trees even if they contain local changes"
+#: builtin/submodule--helper.c:1624
+msgid "remove submodule working trees even if they contain local changes"
msgstr ""
-"Remover árboles de trabajo de submódulos incluso si contienen cambios locales"
+"remover árboles de trabajo de submódulos incluso si contienen cambios locales"
-#: builtin/submodule--helper.c:1201
-msgid "Unregister all submodules"
-msgstr "Quitar todos los submódulos"
+#: builtin/submodule--helper.c:1625
+msgid "unregister all submodules"
+msgstr "quitar todos los submódulos"
-#: builtin/submodule--helper.c:1206
+#: builtin/submodule--helper.c:1630
msgid ""
"git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
msgstr ""
"git submodule deinit [--quiet] [-f | --force] [--all | [--] [<ruta>...]]"
-#: builtin/submodule--helper.c:1220
+#: builtin/submodule--helper.c:1644
msgid "Use '--all' if you really want to deinitialize all submodules"
msgstr "Usa '--all' si realmente quieres des-inicializar todos los submódulos"
-#: builtin/submodule--helper.c:1289
+#: builtin/submodule--helper.c:1713
msgid ""
"An alternate computed from a superproject's alternate is invalid.\n"
"To allow Git to clone without an alternate in such a case, set\n"
@@ -21356,46 +22414,46 @@
"con\n"
"'--reference-if-able' en lugar de '--reference'."
-#: builtin/submodule--helper.c:1328 builtin/submodule--helper.c:1331
+#: builtin/submodule--helper.c:1752 builtin/submodule--helper.c:1755
#, c-format
msgid "submodule '%s' cannot add alternate: %s"
msgstr "submódulo '%s' no puede agregar alterno: %s"
-#: builtin/submodule--helper.c:1367
+#: builtin/submodule--helper.c:1791
#, c-format
msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
msgstr "Valor '%s' para submodule.alternateErrorStrategy no es reconocido"
-#: builtin/submodule--helper.c:1374
+#: builtin/submodule--helper.c:1798
#, c-format
msgid "Value '%s' for submodule.alternateLocation is not recognized"
msgstr "Valor '%s' para submodule.alternateLocation no es reconocido"
-#: builtin/submodule--helper.c:1398
+#: builtin/submodule--helper.c:1822
msgid "where the new submodule will be cloned to"
msgstr "a donde el nuevo submódulo será clonado"
-#: builtin/submodule--helper.c:1401
+#: builtin/submodule--helper.c:1825
msgid "name of the new submodule"
msgstr "nombre del nuevo submódulo"
-#: builtin/submodule--helper.c:1404
+#: builtin/submodule--helper.c:1828
msgid "url where to clone the submodule from"
msgstr "url de dónde clonar el submódulo"
-#: builtin/submodule--helper.c:1412
+#: builtin/submodule--helper.c:1836
msgid "depth for shallow clones"
msgstr "profundidad para clones superficiales"
-#: builtin/submodule--helper.c:1415 builtin/submodule--helper.c:1924
+#: builtin/submodule--helper.c:1839 builtin/submodule--helper.c:2348
msgid "force cloning progress"
msgstr "forzar el proceso de clonado"
-#: builtin/submodule--helper.c:1417 builtin/submodule--helper.c:1926
+#: builtin/submodule--helper.c:1841 builtin/submodule--helper.c:2350
msgid "disallow cloning into non-empty directory"
msgstr "no permitir clonar en directorios no vacíos"
-#: builtin/submodule--helper.c:1424
+#: builtin/submodule--helper.c:1848
msgid ""
"git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
"<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
@@ -21405,104 +22463,104