Git 2.34.3
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff --git a/.github/workflows/l10n.yml b/.github/workflows/l10n.yml
new file mode 100644
index 0000000..27f72f0
--- /dev/null
+++ b/.github/workflows/l10n.yml
@@ -0,0 +1,105 @@
+name: git-l10n
+
+on: [push, pull_request_target]
+
+jobs:
+ git-po-helper:
+ if: >-
+ endsWith(github.repository, '/git-po') ||
+ contains(github.head_ref, 'l10n') ||
+ contains(github.ref, 'l10n')
+ runs-on: ubuntu-latest
+ permissions:
+ pull-requests: write
+ steps:
+ - name: Setup base and head objects
+ id: setup-tips
+ run: |
+ if test "${{ github.event_name }}" = "pull_request_target"
+ then
+ base=${{ github.event.pull_request.base.sha }}
+ head=${{ github.event.pull_request.head.sha }}
+ else
+ base=${{ github.event.before }}
+ head=${{ github.event.after }}
+ fi
+ echo "::set-output name=base::$base"
+ echo "::set-output name=head::$head"
+ - name: Run partial clone
+ run: |
+ git -c init.defaultBranch=master init --bare .
+ git remote add \
+ --mirror=fetch \
+ origin \
+ https://github.com/${{ github.repository }}
+ # Fetch tips that may be unreachable from github.ref:
+ # - For a forced push, "$base" may be unreachable.
+ # - For a "pull_request_target" event, "$head" may be unreachable.
+ args=
+ for commit in \
+ ${{ steps.setup-tips.outputs.base }} \
+ ${{ steps.setup-tips.outputs.head }}
+ do
+ case $commit in
+ *[^0]*)
+ args="$args $commit"
+ ;;
+ *)
+ # Should not fetch ZERO-OID.
+ ;;
+ esac
+ done
+ git -c protocol.version=2 fetch \
+ --progress \
+ --no-tags \
+ --no-write-fetch-head \
+ --filter=blob:none \
+ origin \
+ ${{ github.ref }} \
+ $args
+ - uses: actions/setup-go@v2
+ with:
+ go-version: '>=1.16'
+ - name: Install git-po-helper
+ run: go install github.com/git-l10n/git-po-helper@main
+ - name: Install other dependencies
+ run: |
+ sudo apt-get update -q &&
+ sudo apt-get install -q -y gettext
+ - name: Run git-po-helper
+ id: check-commits
+ run: |
+ exit_code=0
+ git-po-helper check-commits \
+ --github-action-event="${{ github.event_name }}" -- \
+ ${{ steps.setup-tips.outputs.base }}..${{ steps.setup-tips.outputs.head }} \
+ >git-po-helper.out 2>&1 || exit_code=$?
+ if test $exit_code -ne 0 || grep -q WARNING git-po-helper.out
+ then
+ # Remove ANSI colors which are proper for console logs but not
+ # proper for PR comment.
+ echo "COMMENT_BODY<<EOF" >>$GITHUB_ENV
+ perl -pe 's/\e\[[0-9;]*m//g; s/\bEOF$//g' git-po-helper.out >>$GITHUB_ENV
+ echo "EOF" >>$GITHUB_ENV
+ fi
+ cat git-po-helper.out
+ exit $exit_code
+ - name: Create comment in pull request for report
+ uses: mshick/add-pr-comment@v1
+ if: >-
+ always() &&
+ github.event_name == 'pull_request_target' &&
+ env.COMMENT_BODY != ''
+ with:
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
+ repo-token-user-login: 'github-actions[bot]'
+ message: >
+ ${{ steps.check-commits.outcome == 'failure' && 'Errors and warnings' || 'Warnings' }}
+ found by [git-po-helper](https://github.com/git-l10n/git-po-helper#readme) in workflow
+ [#${{ github.run_number }}](${{ env.GITHUB_SERVER_URL }}/${{ github.repository }}/actions/runs/${{ github.run_id }}):
+
+ ```
+
+ ${{ env.COMMENT_BODY }}
+
+ ```
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index b053b01..6ed6a9e 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -88,7 +88,7 @@
env:
HOME: ${{runner.workspace}}
NO_PERL: 1
- run: ci/make-test-artifacts.sh artifacts
+ run: . /etc/profile && ci/make-test-artifacts.sh artifacts
- name: zip up tracked files
run: git archive -o artifacts/tracked.tar.gz HEAD
- name: upload tracked files and build artifacts
@@ -115,7 +115,7 @@
- uses: git-for-windows/setup-git-for-windows-sdk@v1
- name: test
shell: bash
- run: ci/run-test-slice.sh ${{matrix.nr}} 10
+ run: . /etc/profile && ci/run-test-slice.sh ${{matrix.nr}} 10
- name: ci/print-test-failures.sh
if: failure()
shell: bash
@@ -198,8 +198,7 @@
shell: bash
env:
NO_SVN_TESTS: 1
- GIT_TEST_SKIP_REBASE_P: 1
- run: ci/run-test-slice.sh ${{matrix.nr}} 10
+ run: . /etc/profile && ci/run-test-slice.sh ${{matrix.nr}} 10
- name: ci/print-test-failures.sh
if: failure()
shell: bash
@@ -232,6 +231,9 @@
- jobname: linux-gcc-default
cc: gcc
pool: ubuntu-latest
+ - jobname: linux-leaks
+ cc: gcc
+ pool: ubuntu-latest
env:
CC: ${{matrix.vector.cc}}
jobname: ${{matrix.vector.jobname}}
diff --git a/.gitignore b/.gitignore
index 311841f..054249b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -125,7 +125,6 @@
/git-range-diff
/git-read-tree
/git-rebase
-/git-rebase--preserve-merges
/git-receive-pack
/git-reflog
/git-remote
@@ -190,6 +189,7 @@
/gitweb/static/gitweb.min.*
/config-list.h
/command-list.h
+/hook-list.h
*.tar.gz
*.dsc
*.deb
@@ -224,6 +224,7 @@
*.lib
*.res
*.sln
+*.sp
*.suo
*.ncb
*.vcproj
diff --git a/Documentation/.gitignore b/Documentation/.gitignore
index 9022d48..1c3771e 100644
--- a/Documentation/.gitignore
+++ b/Documentation/.gitignore
@@ -14,4 +14,5 @@
SubmittingPatches.txt
tmp-doc-diff/
GIT-ASCIIDOCFLAGS
+/.build/
/GIT-EXCLUDED-PROGRAMS
diff --git a/Documentation/Makefile b/Documentation/Makefile
index f5605b7..ed656db 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -90,6 +90,7 @@
TECH_DOCS += MyFirstContribution
TECH_DOCS += MyFirstObjectWalk
TECH_DOCS += SubmittingPatches
+TECH_DOCS += technical/bundle-format
TECH_DOCS += technical/hash-function-transition
TECH_DOCS += technical/http-protocol
TECH_DOCS += technical/index-format
@@ -225,6 +226,7 @@
ifneq ($(findstring $(MAKEFLAGS),s),s)
ifndef V
+ QUIET = @
QUIET_ASCIIDOC = @echo ' ' ASCIIDOC $@;
QUIET_XMLTO = @echo ' ' XMLTO $@;
QUIET_DB2TEXI = @echo ' ' DB2TEXI $@;
@@ -232,11 +234,15 @@
QUIET_DBLATEX = @echo ' ' DBLATEX $@;
QUIET_XSLTPROC = @echo ' ' XSLTPROC $@;
QUIET_GEN = @echo ' ' GEN $@;
- QUIET_LINT = @echo ' ' LINT $@;
QUIET_STDERR = 2> /dev/null
QUIET_SUBDIR0 = +@subdir=
QUIET_SUBDIR1 = ;$(NO_SUBDIR) echo ' ' SUBDIR $$subdir; \
$(MAKE) $(PRINT_DIR) -C $$subdir
+
+ QUIET_LINT_GITLINK = @echo ' ' LINT GITLINK $<;
+ QUIET_LINT_MANSEC = @echo ' ' LINT MAN SEC $<;
+ QUIET_LINT_MANEND = @echo ' ' LINT MAN END $<;
+
export V
endif
endif
@@ -284,7 +290,7 @@
../GIT-VERSION-FILE: FORCE
$(QUIET_SUBDIR0)../ $(QUIET_SUBDIR1) GIT-VERSION-FILE
-ifneq ($(MAKECMDGOALS),clean)
+ifneq ($(filter-out lint-docs clean,$(MAKECMDGOALS)),)
-include ../GIT-VERSION-FILE
endif
@@ -343,6 +349,7 @@
fi
clean:
+ $(RM) -rf .build/
$(RM) *.xml *.xml+ *.html *.html+ *.1 *.5 *.7
$(RM) *.texi *.texi+ *.texi++ git.info gitman.info
$(RM) *.pdf
@@ -456,14 +463,61 @@
print-man1:
@for i in $(MAN1_TXT); do echo $$i; done
-lint-docs::
- $(QUIET_LINT)$(PERL_PATH) lint-gitlink.perl \
+## Lint: Common
+.build:
+ $(QUIET)mkdir $@
+.build/lint-docs: | .build
+ $(QUIET)mkdir $@
+
+## Lint: gitlink
+.build/lint-docs/gitlink: | .build/lint-docs
+ $(QUIET)mkdir $@
+.build/lint-docs/gitlink/howto: | .build/lint-docs/gitlink
+ $(QUIET)mkdir $@
+.build/lint-docs/gitlink/config: | .build/lint-docs/gitlink
+ $(QUIET)mkdir $@
+LINT_DOCS_GITLINK = $(patsubst %.txt,.build/lint-docs/gitlink/%.ok,$(HOWTO_TXT) $(DOC_DEP_TXT))
+$(LINT_DOCS_GITLINK): | .build/lint-docs/gitlink
+$(LINT_DOCS_GITLINK): | .build/lint-docs/gitlink/howto
+$(LINT_DOCS_GITLINK): | .build/lint-docs/gitlink/config
+$(LINT_DOCS_GITLINK): lint-gitlink.perl
+$(LINT_DOCS_GITLINK): .build/lint-docs/gitlink/%.ok: %.txt
+ $(QUIET_LINT_GITLINK)$(PERL_PATH) lint-gitlink.perl \
+ $< \
$(HOWTO_TXT) $(DOC_DEP_TXT) \
--section=1 $(MAN1_TXT) \
--section=5 $(MAN5_TXT) \
- --section=7 $(MAN7_TXT); \
- $(PERL_PATH) lint-man-end-blurb.perl $(MAN_TXT); \
- $(PERL_PATH) lint-man-section-order.perl $(MAN_TXT);
+ --section=7 $(MAN7_TXT) >$@
+.PHONY: lint-docs-gitlink
+lint-docs-gitlink: $(LINT_DOCS_GITLINK)
+
+## Lint: man-end-blurb
+.build/lint-docs/man-end-blurb: | .build/lint-docs
+ $(QUIET)mkdir $@
+LINT_DOCS_MAN_END_BLURB = $(patsubst %.txt,.build/lint-docs/man-end-blurb/%.ok,$(MAN_TXT))
+$(LINT_DOCS_MAN_END_BLURB): | .build/lint-docs/man-end-blurb
+$(LINT_DOCS_MAN_END_BLURB): lint-man-end-blurb.perl
+$(LINT_DOCS_MAN_END_BLURB): .build/lint-docs/man-end-blurb/%.ok: %.txt
+ $(QUIET_LINT_MANEND)$(PERL_PATH) lint-man-end-blurb.perl $< >$@
+.PHONY: lint-docs-man-end-blurb
+lint-docs-man-end-blurb: $(LINT_DOCS_MAN_END_BLURB)
+
+## Lint: man-section-order
+.build/lint-docs/man-section-order: | .build/lint-docs
+ $(QUIET)mkdir $@
+LINT_DOCS_MAN_SECTION_ORDER = $(patsubst %.txt,.build/lint-docs/man-section-order/%.ok,$(MAN_TXT))
+$(LINT_DOCS_MAN_SECTION_ORDER): | .build/lint-docs/man-section-order
+$(LINT_DOCS_MAN_SECTION_ORDER): lint-man-section-order.perl
+$(LINT_DOCS_MAN_SECTION_ORDER): .build/lint-docs/man-section-order/%.ok: %.txt
+ $(QUIET_LINT_MANSEC)$(PERL_PATH) lint-man-section-order.perl $< >$@
+.PHONY: lint-docs-man-section-order
+lint-docs-man-section-order: $(LINT_DOCS_MAN_SECTION_ORDER)
+
+## Lint: list of targets above
+.PHONY: lint-docs
+lint-docs: lint-docs-gitlink
+lint-docs: lint-docs-man-end-blurb
+lint-docs: lint-docs-man-section-order
ifeq ($(wildcard po/Makefile),po/Makefile)
doc-l10n install-l10n::
diff --git a/Documentation/MyFirstContribution.txt b/Documentation/MyFirstContribution.txt
index 015cf24..b20bc8e 100644
--- a/Documentation/MyFirstContribution.txt
+++ b/Documentation/MyFirstContribution.txt
@@ -1029,22 +1029,42 @@
[[v2-git-send-email]]
=== Sending v2
-Skip ahead to <<reviewing,Responding to Reviews>> for information on how to
-handle comments from reviewers. Continue this section when your topic branch is
-shaped the way you want it to look for your patchset v2.
+This section will focus on how to send a v2 of your patchset. To learn what
+should go into v2, skip ahead to <<reviewing,Responding to Reviews>> for
+information on how to handle comments from reviewers.
-When you're ready with the next iteration of your patch, the process is fairly
-similar.
-
-First, generate your v2 patches again:
+We'll reuse our `psuh` topic branch for v2. Before we make any changes, we'll
+mark the tip of our v1 branch for easy reference:
----
-$ git format-patch -v2 --cover-letter -o psuh/ master..psuh
+$ git checkout psuh
+$ git branch psuh-v1
----
-This will add your v2 patches, all named like `v2-000n-my-commit-subject.patch`,
-to the `psuh/` directory. You may notice that they are sitting alongside the v1
-patches; that's fine, but be careful when you are ready to send them.
+Refine your patch series by using `git rebase -i` to adjust commits based upon
+reviewer comments. Once the patch series is ready for submission, generate your
+patches again, but with some new flags:
+
+----
+$ git format-patch -v2 --cover-letter -o psuh/ --range-diff master..psuh-v1 master..
+----
+
+The `--range-diff master..psuh-v1` parameter tells `format-patch` to include a
+range-diff between `psuh-v1` and `psuh` in the cover letter (see
+linkgit:git-range-diff[1]). This helps tell reviewers about the differences
+between your v1 and v2 patches.
+
+The `-v2` parameter tells `format-patch` to output your patches
+as version "2". For instance, you may notice that your v2 patches are
+all named like `v2-000n-my-commit-subject.patch`. `-v2` will also format
+your patches by prefixing them with "[PATCH v2]" instead of "[PATCH]",
+and your range-diff will be prefaced with "Range-diff against v1".
+
+Afer you run this command, `format-patch` will output the patches to the `psuh/`
+directory, alongside the v1 patches. Using a single directory makes it easy to
+refer to the old v1 patches while proofreading the v2 patches, but you will need
+to be careful to send out only the v2 patches. We will use a pattern like
+"psuh/v2-*.patch" (not "psuh/*.patch", which would match v1 and v2 patches).
Edit your cover letter again. Now is a good time to mention what's different
between your last version and now, if it's something significant. You do not
@@ -1082,7 +1102,7 @@
----
$ git send-email --to=target@example.com
--in-reply-to="<foo.12345.author@example.com>"
- psuh/v2*
+ psuh/v2-*.patch
----
[[single-patch]]
diff --git a/Documentation/RelNotes/2.34.0.txt b/Documentation/RelNotes/2.34.0.txt
new file mode 100644
index 0000000..75d4fdf
--- /dev/null
+++ b/Documentation/RelNotes/2.34.0.txt
@@ -0,0 +1,438 @@
+Git 2.34 Release Notes
+======================
+
+Updates since Git 2.33
+----------------------
+
+Backward compatibility notes
+
+ * The "--preserve-merges" option of "git rebase" has been removed.
+
+
+UI, Workflows & Features
+
+ * Pathname expansion (like "~username/") learned a way to specify a
+ location relative to Git installation (e.g. its $sharedir which is
+ $(prefix)/share), with "%(prefix)".
+
+ * The `ort` strategy is used instead of `recursive` as the default
+ merge strategy.
+
+ * The userdiff pattern for "java" language has been updated.
+
+ * "git rebase" by default skips changes that are equivalent to
+ commits that are already in the history the branch is rebased onto;
+ give messages when this happens to let the users be aware of
+ skipped commits, and also teach them how to tell "rebase" to keep
+ duplicated changes.
+
+ * The advice message that "git cherry-pick" gives when it asks
+ conflicted replay of a commit to be resolved by the end user has
+ been updated.
+
+ * After "git clone --recurse-submodules", all submodules are cloned
+ but they are not by default recursed into by other commands. With
+ submodule.stickyRecursiveClone configuration set, submodule.recurse
+ configuration is set to true in a repository created by "clone"
+ with "--recurse-submodules" option.
+
+ * The logic for auto-correction of misspelt subcommands learned to go
+ interactive when the help.autocorrect configuration variable is set
+ to 'prompt'.
+
+ * "git maintenance" scheduler learned to use systemd timers as a
+ possible backend.
+
+ * "git diff --submodule=diff" showed failure from run_command() when
+ trying to run diff inside a submodule, when the user manually
+ removes the submodule directory.
+
+ * "git bundle unbundle" learned to show progress display.
+
+ * In cone mode, the sparse-index code path learned to remove ignored
+ files (like build artifacts) outside the sparse cone, allowing the
+ entire directory outside the sparse cone to be removed, which is
+ especially useful when the sparse patterns change.
+
+ * Taking advantage of the CGI interface, http-backend has been
+ updated to enable protocol v2 automatically when the other side
+ asks for it.
+
+ * The credential-cache helper has been adjusted to Windows.
+
+ * The error in "git help no-such-git-command" is handled better.
+
+ * The unicode character width table (used for output alignment) has
+ been updated.
+
+ * The ref iteration code used to optionally allow dangling refs to be
+ shown, which has been tightened up.
+
+ * "git add", "git mv", and "git rm" have been adjusted to avoid
+ updating paths outside of the sparse-checkout definition unless
+ the user specifies a "--sparse" option.
+
+ * "git repack" has been taught to generate multi-pack reachability
+ bitmaps.
+
+ * "git fsck" has been taught to report mismatch between expected and
+ actual types of an object better.
+
+ * In addition to GnuPG, ssh public crypto can be used for object and
+ push-cert signing. Note that this feature cannot be used with
+ ssh-keygen from OpenSSH 8.7, whose support for it is broken. Avoid
+ using it unless you update to OpenSSH 8.8.
+
+ * "git log --grep=string --author=name" learns to highlight hits just
+ like "git grep string" does.
+
+
+
+Performance, Internal Implementation, Development Support etc.
+
+ * "git bisect" spawned "git show-branch" only to pretty-print the
+ title of the commit after checking out the next version to be
+ tested; this has been rewritten in C.
+
+ * "git add" can work better with the sparse index.
+
+ * Support for ancient versions of cURL library (pre 7.19.4) has been
+ dropped.
+
+ * A handful of tests that assumed implementation details of files
+ backend for refs have been cleaned up.
+
+ * trace2 logs learned to show parent process name to see in what
+ context Git was invoked.
+
+ * Loading of ref tips to prepare for common ancestry negotiation in
+ "git fetch-pack" has been optimized by taking advantage of the
+ commit graph when available.
+
+ * Remind developers that the userdiff patterns should be kept simple
+ and permissive, assuming that the contents they apply are always
+ syntactically correct.
+
+ * The current implementation of GIT_TEST_FAIL_PREREQS is broken in
+ that checking for the lack of a prerequisite would not work. Avoid
+ the use of "if ! test_have_prereq X" in a test script.
+
+ * The revision traversal API has been optimized by taking advantage
+ of the commit-graph, when available, to determine if a commit is
+ reachable from any of the existing refs.
+
+ * "git fetch --quiet" optimization to avoid useless computation of
+ info that will never be displayed.
+
+ * Callers from older advice_config[] based API has been updated to
+ use the newer advice_if_enabled() and advice_enabled() API.
+
+ * Teach "test_pause" and "debug" helpers to allow using the HOME and
+ TERM environment variables the user usually uses.
+
+ * "make INSTALL_STRIP=-s install" allows the installation step to use
+ "install -s" to strip the binaries as they get installed.
+
+ * Code that handles large number of refs in the "git fetch" code
+ path has been optimized.
+
+ * The reachability bitmap file used to be generated only for a single
+ pack, but now we've learned to generate bitmaps for history that
+ span across multiple packfiles.
+
+ * The code to make "git grep" recurse into submodules has been
+ updated to migrate away from the "add submodule's object store as
+ an alternate object store" mechanism (which is suboptimal).
+
+ * The tracing of process ancestry information has been enhanced.
+
+ * Reduce number of write(2) system calls while sending the
+ ref advertisement.
+
+ * Update the build procedure to use the "-pedantic" build when
+ DEVELOPER makefile macro is in effect.
+
+ * Large part of "git submodule add" gets rewritten in C.
+
+ * The run-command API has been updated so that the callers can easily
+ ask the file descriptors open for packfiles to be closed immediately
+ before spawning commands that may trigger auto-gc.
+
+ * An oddball OPTION_ARGUMENT feature has been removed from the
+ parse-options API.
+
+ * The mergesort implementation used to sort linked list has been
+ optimized.
+
+ * Remove external declaration of functions that no longer exist.
+
+ * "git multi-pack-index write --bitmap" learns to propagate the
+ hashcache from original bitmap to resulting bitmap.
+
+ * CI learns to run the leak sanitizer builds.
+
+ * "git grep --recurse-submodules" takes trees and blobs from the
+ submodule repository, but the textconv settings when processing a
+ blob from the submodule is not taken from the submodule repository.
+ A test is added to demonstrate the issue, without fixing it.
+
+ * Teach "git help -c" into helping the command line completion of
+ configuration variables.
+
+ * When "git cmd -h" shows more than one line of usage text (e.g.
+ the cmd subcommand may take sub-sub-command), parse-options API
+ learned to align these lines, even across i18n/l10n.
+
+ * Prevent "make sparse" from running for the source files that
+ haven't been modified.
+
+ * The code path to write a new version of .midx multi-pack index files
+ has learned to release the mmaped memory holding the current
+ version of .midx before removing them from the disk, as some
+ platforms do not allow removal of a file that still has mapping.
+
+ * A new feature has been added to abort early in the test framework.
+
+
+Fixes since v2.33
+-----------------
+
+ * Input validation of "git pack-objects --stdin-packs" has been
+ corrected.
+
+ * Bugfix for common ancestor negotiation recently introduced in "git
+ push" code path.
+
+ * "git pull" had various corner cases that were not well thought out
+ around its --rebase backend, e.g. "git pull --ff-only" did not stop
+ but went ahead and rebased when the history on other side is not a
+ descendant of our history. The series tries to fix them up.
+
+ * "git apply" miscounted the bytes and failed to read to the end of
+ binary hunks.
+
+ * "git range-diff" code clean-up.
+
+ * "git commit --fixup" now works with "--edit" again, after it was
+ broken in v2.32.
+
+ * Use upload-artifacts v1 (instead of v2) for 32-bit linux, as the
+ new version has a blocker bug for that architecture.
+
+ * Checking out all the paths from HEAD during the last conflicted
+ step in "git rebase" and continuing would cause the step to be
+ skipped (which is expected), but leaves MERGE_MSG file behind in
+ $GIT_DIR and confuses the next "git commit", which has been
+ corrected.
+
+ * Various bugs in "git rebase -r" have been fixed.
+
+ * mmap() imitation used to call xmalloc() that dies upon malloc()
+ failure, which has been corrected to just return an error to the
+ caller to be handled.
+
+ * "git diff --relative" segfaulted and/or produced incorrect result
+ when there are unmerged paths.
+
+ * The delayed checkout code path in "git checkout" etc. were chatty
+ even when --quiet and/or --no-progress options were given.
+
+ * "git branch -D <branch>" used to refuse to remove a broken branch
+ ref that points at a missing commit, which has been corrected.
+
+ * Build update for Apple clang.
+
+ * The parser for the "--nl" option of "git column" has been
+ corrected.
+
+ * "git upload-pack" which runs on the other side of "git fetch"
+ forgot to take the ref namespaces into account when handling
+ want-ref requests.
+
+ * The sparse-index support can corrupt the index structure by storing
+ a stale and/or uninitialized data, which has been corrected.
+
+ * Buggy tests could damage repositories outside the throw-away test
+ area we created. We now by default export GIT_CEILING_DIRECTORIES
+ to limit the damage from such a stray test.
+
+ * Even when running "git send-email" without its own threaded
+ discussion support, a threading related header in one message is
+ carried over to the subsequent message to result in an unwanted
+ threading, which has been corrected.
+
+ * The output from "git fast-export", when its anonymization feature
+ is in use, showed an annotated tag incorrectly.
+
+ * Recent "diff -m" changes broke "gitk", which has been corrected.
+
+ * The "git apply -3" code path learned not to bother the lower level
+ merge machinery when the three-way merge can be trivially resolved
+ without the content level merge. This fixes a regression caused by
+ recent "-3way first and fall back to direct application" change.
+
+ * The code that optionally creates the *.rev reverse index file has
+ been optimized to avoid needless computation when it is not writing
+ the file out.
+
+ * "git range-diff -I... <range> <range>" segfaulted, which has been
+ corrected.
+
+ * The order in which various files that make up a single (conceptual)
+ packfile has been reevaluated and straightened up. This matters in
+ correctness, as an incomplete set of files must not be shown to a
+ running Git.
+
+ * The "mode" word is useless in a call to open(2) that does not
+ create a new file. Such a call in the files backend of the ref
+ subsystem has been cleaned up.
+
+ * "git update-ref --stdin" failed to flush its output as needed,
+ which potentially led the conversation to a deadlock.
+
+ * When "git am --abort" fails to abort correctly, it still exited
+ with exit status of 0, which has been corrected.
+
+ * Correct nr and alloc members of strvec struct to be of type size_t.
+
+ * "git stash", where the tentative change involves changing a
+ directory to a file (or vice versa), was confused, which has been
+ corrected.
+
+ * "git clone" from a repository whose HEAD is unborn into a bare
+ repository didn't follow the branch name the other side used, which
+ is corrected.
+
+ * "git cvsserver" had a long-standing bug in its authentication code,
+ which has finally been corrected (it is unclear and is a separate
+ question if anybody is seriously using it, though).
+
+ * "git difftool --dir-diff" mishandled symbolic links.
+
+ * Sensitive data in the HTTP trace were supposed to be redacted, but
+ we failed to do so in HTTP/2 requests.
+
+ * "make clean" has been updated to remove leftover .depend/
+ directories, even when it is not told to use them to compute header
+ dependencies.
+
+ * Protocol v0 clients can get stuck parsing a malformed feature line.
+
+ * A few kinds of changes "git status" can show were not documented.
+ (merge d2a534c515 ja/doc-status-types-and-copies later to maint).
+
+ * The mergesort implementation used to sort linked list has been
+ optimized.
+ (merge c90cfc225b rs/mergesort later to maint).
+
+ * An editor session launched during a Git operation (e.g. during 'git
+ commit') can leave the terminal in a funny state. The code path
+ has updated to save the terminal state before, and restore it
+ after, it spawns an editor.
+ (merge 3d411afabc cm/save-restore-terminal later to maint).
+
+ * "git cat-file --batch" with the "--batch-all-objects" option is
+ supposed to iterate over all the objects found in a repository, but
+ it used to translate these object names using the replace mechanism,
+ which defeats the point of enumerating all objects in the repository.
+ This has been corrected.
+ (merge bf972896d7 jk/cat-file-batch-all-wo-replace later to maint).
+
+ * Recent sparse-index work broke safety against attempts to add paths
+ with trailing slashes to the index, which has been corrected.
+ (merge c8ad9d04c6 rs/make-verify-path-really-verify-again later to maint).
+
+ * The "--color-lines" and "--color-by-age" options of "git blame"
+ have been missing, which are now documented.
+ (merge 8c32856133 bs/doc-blame-color-lines later to maint).
+
+ * The PATH used in CI job may be too wide and let incompatible dlls
+ to be grabbed, which can cause the build&test to fail. Tighten it.
+ (merge 7491ef6198 js/windows-ci-path-fix later to maint).
+
+ * Avoid performance measurements from getting ruined by gc and other
+ housekeeping pauses interfering in the middle.
+ (merge be79131a53 rs/disable-gc-during-perf-tests later to maint).
+
+ * Stop "git add --dry-run" from creating new blob and tree objects.
+ (merge e578d0311d rs/add-dry-run-without-objects later to maint).
+
+ * "git commit" gave duplicated error message when the object store
+ was unwritable, which has been corrected.
+ (merge 4ef91a2d79 ab/fix-commit-error-message-upon-unwritable-object-store later to maint).
+
+ * Recent sparse-index addition, namely any use of index_name_pos(),
+ can expand sparse index entries and breaks any code that walks
+ cache-tree or existing index entries. One such instance of such a
+ breakage has been corrected.
+
+ * The xxdiff difftool backend can exit with status 128, which the
+ difftool-helper that launches the backend takes as a significant
+ failure, when it is not significant at all. Work it around.
+ (merge 571f4348dd da/mergetools-special-case-xxdiff-exit-128 later to maint).
+
+ * Improve test framework around unwritable directories.
+ (merge 5d22e18965 ab/test-cleanly-recreate-trash-directory later to maint).
+
+ * "git push" client talking to an HTTP server did not diagnose the
+ lack of the final status report from the other side correctly,
+ which has been corrected.
+ (merge c5c3486f38 jk/http-push-status-fix later to maint).
+
+ * Update "git archive" documentation and give explicit mention on the
+ compression level for both zip and tar.gz format.
+ (merge c4b208c309 bs/archive-doc-compression-level later to maint).
+
+ * Drop "git sparse-checkout" from the list of common commands.
+ (merge 6a9a50a8af sg/sparse-index-not-that-common-a-command later to maint).
+
+ * "git branch -c/-m new old" was not described to copy config, which
+ has been corrected.
+ (merge 8252ec300e jc/branch-copy-doc later to maint).
+
+ * Squelch over-eager warning message added during this cycle.
+
+ * Fix long-standing shell syntax error in the completion script.
+ (merge 46b0585286 re/completion-fix-test-equality later to maint).
+
+ * Teach "git commit-graph" command not to allow using replace objects
+ at all, as we do not use the commit-graph at runtime when we see
+ object replacement.
+ (merge 095d112f8c ab/ignore-replace-while-working-on-commit-graph later to maint).
+
+ * "git pull --no-verify" did not affect the underlying "git merge".
+ (merge 47bfdfb3fd ar/fix-git-pull-no-verify later to maint).
+
+ * One CI task based on Fedora image noticed a not-quite-kosher
+ construct recently, which has been corrected.
+
+ * "git pull --ff-only" and "git pull --rebase --ff-only" should make
+ it a no-op to attempt pulling from a remote that is behind us, but
+ instead the command errored out by saying it was impossible to
+ fast-forward, which may technically be true, but not a useful thing
+ to diagnose as an error. This has been corrected.
+ (merge 361cb52383 jc/fix-pull-ff-only-when-already-up-to-date later to maint).
+
+ * The way Cygwin emulates a unix-domain socket, on top of which the
+ simple-ipc mechanism is implemented, can race with the program on
+ the other side that wants to use the socket, and briefly make it
+ appear as a regular file before lstat(2) starts reporting it as a
+ socket. We now have a workaround on the side that connects to a
+ unix domain socket.
+
+ * Other code cleanup, docfix, build fix, etc.
+ (merge f188160be9 ab/bundle-remove-verbose-option later to maint).
+ (merge 8c6b4332b4 rs/close-pack-leakfix later to maint).
+ (merge 51b04c05b7 bs/difftool-msg-tweak later to maint).
+ (merge dd20e4a6db ab/make-compdb-fix later to maint).
+ (merge 6ffb990dc4 os/status-docfix later to maint).
+ (merge 100c2da2d3 rs/p3400-lose-tac later to maint).
+ (merge 76f3b69896 tb/aggregate-ignore-leading-whitespaces later to maint).
+ (merge 6e4fd8bfcd tz/doc-link-to-bundle-format-fix later to maint).
+ (merge f6c013dfa1 jc/doc-commit-header-continuation-line later to maint).
+ (merge ec9a37d69b ab/pkt-line-cleanup later to maint).
+ (merge 8650c6298c ab/fix-make-lint-docs later to maint).
+ (merge 1c720357ce ab/test-lib-diff-cleanup later to maint).
+ (merge 6b615dbece ks/submodule-add-message-fix later to maint).
+ (merge 203eb8381a jc/doc-format-patch-clarify-auto-base later to maint).
+ (merge 559664c792 ab/test-lib later to maint).
diff --git a/Documentation/RelNotes/2.34.1.txt b/Documentation/RelNotes/2.34.1.txt
new file mode 100644
index 0000000..ad404e9
--- /dev/null
+++ b/Documentation/RelNotes/2.34.1.txt
@@ -0,0 +1,23 @@
+Git v2.34.1 Release Notes
+=========================
+
+This release is primarily to fix a handful of regressions in Git 2.34.
+
+Fixes since v2.34
+-----------------
+
+ * "git grep" looking in a blob that has non-UTF8 payload was
+ completely broken when linked with certain versions of PCREv2
+ library in the latest release.
+
+ * "git pull" with any strategy when the other side is behind us
+ should succeed as it is a no-op, but doesn't.
+
+ * An earlier change in 2.34.0 caused JGit application (that abused
+ GIT_EDITOR mechanism when invoking "git config") to get stuck with
+ a SIGTTOU signal; it has been reverted.
+
+ * An earlier change that broke .gitignore matching has been reverted.
+
+ * SubmittingPatches document gained a syntactically incorrect mark-up,
+ which has been corrected.
diff --git a/Documentation/RelNotes/2.34.2.txt b/Documentation/RelNotes/2.34.2.txt
new file mode 100644
index 0000000..0c32cd8
--- /dev/null
+++ b/Documentation/RelNotes/2.34.2.txt
@@ -0,0 +1,6 @@
+Git v2.34.2 Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.30.3, v2.31.2,
+v2.32.1 and v2.33.2 to address the security issue CVE-2022-24765;
+see the release notes for these versions for details.
diff --git a/Documentation/RelNotes/2.34.3.txt b/Documentation/RelNotes/2.34.3.txt
new file mode 100644
index 0000000..10f6171
--- /dev/null
+++ b/Documentation/RelNotes/2.34.3.txt
@@ -0,0 +1,4 @@
+Git Documentation/RelNotes/2.34.3.txt Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.34.3.
diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches
index e409022..11e0305 100644
--- a/Documentation/SubmittingPatches
+++ b/Documentation/SubmittingPatches
@@ -448,7 +448,7 @@
entitled "What's cooking in git.git" and "What's in git.git" giving
the status of various proposed changes.
-== GitHub CI[[GHCI]]]
+== GitHub CI[[GHCI]]
With an account at GitHub, you can use GitHub CI to test your changes
on Linux, Mac and Windows. See
@@ -463,7 +463,7 @@
After the initial setup, CI will run whenever you push new changes
to your fork of Git on GitHub. You can monitor the test state of all your
-branches here: https://github.com/<Your GitHub handle>/git/actions/workflows/main.yml
+branches here: `https://github.com/<Your GitHub handle>/git/actions/workflows/main.yml`
If a branch did not pass all test cases then it is marked with a red
cross. In that case you can click on the failing job and navigate to
diff --git a/Documentation/blame-options.txt b/Documentation/blame-options.txt
index 117f4cf..9a66353 100644
--- a/Documentation/blame-options.txt
+++ b/Documentation/blame-options.txt
@@ -136,5 +136,16 @@
option. An empty file name, `""`, will clear the list of revs from
previously processed files.
+--color-lines::
+ Color line annotations in the default format differently if they come from
+ the same commit as the preceding line. This makes it easier to distinguish
+ code blocks introduced by different commits. The color defaults to cyan and
+ can be adjusted using the `color.blame.repeatedLines` config option.
+
+--color-by-age::
+ Color line annotations depending on the age of the line in the default format.
+ The `color.blame.highlightRecent` config option controls what color is used for
+ each range of age.
+
-h::
Show help message.
diff --git a/Documentation/config.txt b/Documentation/config.txt
index a1efd74..cdff79b 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -298,6 +298,15 @@
tilde expansion happens to such a string: `~/`
is expanded to the value of `$HOME`, and `~user/` to the
specified user's home directory.
++
+If a path starts with `%(prefix)/`, the remainder is interpreted as a
+path relative to Git's "runtime prefix", i.e. relative to the location
+where Git itself was installed. For example, `%(prefix)/bin/` refers to
+the directory in which the Git executable itself lives. If Git was
+compiled without runtime prefix support, the compiled-in prefix will be
+substituted instead. In the unlikely event that a literal path needs to
+be specified that should _not_ be expanded, it needs to be prefixed by
+`./`, like so: `./%(prefix)/bin`.
Variables
diff --git a/Documentation/config/advice.txt b/Documentation/config/advice.txt
index 8b2849f..063eec2 100644
--- a/Documentation/config/advice.txt
+++ b/Documentation/config/advice.txt
@@ -44,6 +44,9 @@
Shown when linkgit:git-push[1] rejects a forced update of
a branch when its remote-tracking ref has updates that we
do not have locally.
+ skippedCherryPicks::
+ Shown when linkgit:git-rebase[1] skips a commit that has already
+ been cherry-picked onto the upstream branch.
statusAheadBehind::
Shown when linkgit:git-status[1] computes the ahead/behind
counts for a local ref compared to its remote tracking ref,
diff --git a/Documentation/config/branch.txt b/Documentation/config/branch.txt
index cc5f324..d323d73 100644
--- a/Documentation/config/branch.txt
+++ b/Documentation/config/branch.txt
@@ -85,10 +85,6 @@
so that the local merge commits are included in the rebase (see
linkgit:git-rebase[1] for details).
+
-When `preserve` (or just 'p', deprecated in favor of `merges`), also pass
-`--preserve-merges` along to 'git rebase' so that locally committed merge
-commits will not be flattened by running 'git pull'.
-+
When the value is `interactive` (or just 'i'), the rebase is run in interactive
mode.
+
diff --git a/Documentation/config/color.txt b/Documentation/config/color.txt
index e05d520..1795b2d 100644
--- a/Documentation/config/color.txt
+++ b/Documentation/config/color.txt
@@ -9,26 +9,27 @@
Use customized color for hints.
color.blame.highlightRecent::
- This can be used to color the metadata of a blame line depending
- on age of the line.
+ Specify the line annotation color for `git blame --color-by-age`
+ depending upon the age of the line.
+
-This setting should be set to a comma-separated list of color and date settings,
-starting and ending with a color, the dates should be set from oldest to newest.
-The metadata will be colored given the colors if the line was introduced
-before the given timestamp, overwriting older timestamped colors.
+This setting should be set to a comma-separated list of color and
+date settings, starting and ending with a color, the dates should be
+set from oldest to newest. The metadata will be colored with the
+specified colors if the line was introduced before the given
+timestamp, overwriting older timestamped colors.
+
-Instead of an absolute timestamp relative timestamps work as well, e.g.
-2.weeks.ago is valid to address anything older than 2 weeks.
+Instead of an absolute timestamp relative timestamps work as well,
+e.g. `2.weeks.ago` is valid to address anything older than 2 weeks.
+
-It defaults to 'blue,12 month ago,white,1 month ago,red', which colors
-everything older than one year blue, recent changes between one month and
-one year old are kept white, and lines introduced within the last month are
-colored red.
+It defaults to `blue,12 month ago,white,1 month ago,red`, which
+colors everything older than one year blue, recent changes between
+one month and one year old are kept white, and lines introduced
+within the last month are colored red.
color.blame.repeatedLines::
- Use the customized color for the part of git-blame output that
- is repeated meta information per line (such as commit id,
- author name, date and timezone). Defaults to cyan.
+ Use the specified color to colorize line annotations for
+ `git blame --color-lines`, if they come from the same commit as the
+ preceding line. Defaults to cyan.
color.branch::
A boolean to enable/disable color in the output of
@@ -104,9 +105,12 @@
`matchContext`;;
matching text in context lines
`matchSelected`;;
- matching text in selected lines
+ matching text in selected lines. Also, used to customize the following
+ linkgit:git-log[1] subcommands: `--grep`, `--author` and `--committer`.
`selected`;;
- non-matching text in selected lines
+ non-matching text in selected lines. Also, used to customize the
+ following linkgit:git-log[1] subcommands: `--grep`, `--author` and
+ `--committer`.
`separator`;;
separators between fields on a line (`:`, `-`, and `=`)
and between hunks (`--`)
diff --git a/Documentation/config/gpg.txt b/Documentation/config/gpg.txt
index d94025c..4f30c7d 100644
--- a/Documentation/config/gpg.txt
+++ b/Documentation/config/gpg.txt
@@ -11,13 +11,13 @@
gpg.format::
Specifies which key format to use when signing with `--gpg-sign`.
- Default is "openpgp" and another possible value is "x509".
+ Default is "openpgp". Other possible values are "x509", "ssh".
gpg.<format>.program::
Use this to customize the program used for the signing format you
chose. (see `gpg.program` and `gpg.format`) `gpg.program` can still
be used as a legacy synonym for `gpg.openpgp.program`. The default
- value for `gpg.x509.program` is "gpgsm".
+ value for `gpg.x509.program` is "gpgsm" and `gpg.ssh.program` is "ssh-keygen".
gpg.minTrustLevel::
Specifies a minimum trust level for signature verification. If
@@ -33,3 +33,42 @@
* `marginal`
* `fully`
* `ultimate`
+
+gpg.ssh.defaultKeyCommand:
+ This command that will be run when user.signingkey is not set and a ssh
+ signature is requested. On successful exit a valid ssh public key is
+ expected in the first line of its output. To automatically use the first
+ available key from your ssh-agent set this to "ssh-add -L".
+
+gpg.ssh.allowedSignersFile::
+ A file containing ssh public keys which you are willing to trust.
+ The file consists of one or more lines of principals followed by an ssh
+ public key.
+ e.g.: user1@example.com,user2@example.com ssh-rsa AAAAX1...
+ See ssh-keygen(1) "ALLOWED SIGNERS" for details.
+ The principal is only used to identify the key and is available when
+ verifying a signature.
++
+SSH has no concept of trust levels like gpg does. To be able to differentiate
+between valid signatures and trusted signatures the trust level of a signature
+verification is set to `fully` when the public key is present in the allowedSignersFile.
+Otherwise the trust level is `undefined` and git verify-commit/tag will fail.
++
+This file can be set to a location outside of the repository and every developer
+maintains their own trust store. A central repository server could generate this
+file automatically from ssh keys with push access to verify the code against.
+In a corporate setting this file is probably generated at a global location
+from automation that already handles developer ssh keys.
++
+A repository that only allows signed commits can store the file
+in the repository itself using a path relative to the top-level of the working tree.
+This way only committers with an already valid key can add or change keys in the keyring.
++
+Using a SSH CA key with the cert-authority option
+(see ssh-keygen(1) "CERTIFICATES") is also valid.
+
+gpg.ssh.revocationFile::
+ Either a SSH KRL or a list of revoked public keys (without the principal prefix).
+ See ssh-keygen(1) for details.
+ If a public key is found in this file then it will always be treated
+ as having trust level "never" and signatures will show as invalid.
diff --git a/Documentation/config/help.txt b/Documentation/config/help.txt
index 783a90a..610701f 100644
--- a/Documentation/config/help.txt
+++ b/Documentation/config/help.txt
@@ -9,13 +9,15 @@
help.autoCorrect::
If git detects typos and can identify exactly one valid command similar
- to the error, git will automatically run the intended command after
- waiting a duration of time defined by this configuration value in
- deciseconds (0.1 sec). If this value is 0, the suggested corrections
- will be shown, but not executed. If it is a negative integer, or
- "immediate", the suggested command
- is run immediately. If "never", suggestions are not shown at all. The
- default value is zero.
+ to the error, git will try to suggest the correct command or even
+ run the suggestion automatically. Possible config values are:
+ - 0 (default): show the suggested command.
+ - positive number: run the suggested command after specified
+deciseconds (0.1 sec).
+ - "immediate": run the suggested command immediately.
+ - "prompt": show the suggestion and prompt for confirmation to run
+the command.
+ - "never": don't run or show any suggested command.
help.htmlPath::
Specify the path where the HTML documentation resides. File system paths
diff --git a/Documentation/config/pack.txt b/Documentation/config/pack.txt
index 763f7af..ad7f73a 100644
--- a/Documentation/config/pack.txt
+++ b/Documentation/config/pack.txt
@@ -159,6 +159,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.
++
+When writing a multi-pack reachability bitmap, no new namehashes are
+computed; instead, any namehashes stored in an existing bitmap are
+permuted into their appropriate location when writing a new bitmap.
pack.writeReverseIndex::
When true, git will write a corresponding .rev file (see:
diff --git a/Documentation/config/pull.txt b/Documentation/config/pull.txt
index 5404830..9349e09 100644
--- a/Documentation/config/pull.txt
+++ b/Documentation/config/pull.txt
@@ -18,10 +18,6 @@
so that the local merge commits are included in the rebase (see
linkgit:git-rebase[1] for details).
+
-When `preserve` (or just 'p', deprecated in favor of `merges`), also pass
-`--preserve-merges` along to 'git rebase' so that locally committed merge
-commits will not be flattened by running 'git pull'.
-+
When the value is `interactive` (or just 'i'), the rebase is run in interactive
mode.
+
diff --git a/Documentation/config/user.txt b/Documentation/config/user.txt
index 59aec7c..ad78dce 100644
--- a/Documentation/config/user.txt
+++ b/Documentation/config/user.txt
@@ -36,3 +36,10 @@
commit, you can override the default selection with this variable.
This option is passed unchanged to gpg's --local-user parameter,
so you may specify a key using any method that gpg supports.
+ If gpg.format is set to "ssh" this can contain the literal ssh public
+ key (e.g.: "ssh-rsa XXXXXX identifier") or a file which contains it and
+ corresponds to the private key used for signing. The private key
+ needs to be available via ssh-agent. Alternatively it can be set to
+ a file containing a private key directly. If not set git will call
+ gpg.ssh.defaultKeyCommand (e.g.: "ssh-add -L") and try to use the first
+ key available.
diff --git a/Documentation/diff-format.txt b/Documentation/diff-format.txt
index fbbd410..7a9c3b6 100644
--- a/Documentation/diff-format.txt
+++ b/Documentation/diff-format.txt
@@ -59,7 +59,7 @@
- D: deletion of a file
- M: modification of the contents or mode of a file
- R: renaming of a file
-- T: change in the type of the file
+- T: change in the type of the file (regular file, symbolic link or submodule)
- U: file is unmerged (you must complete the merge before it can
be committed)
- X: "unknown" change type (most probably a bug, please report it)
diff --git a/Documentation/git-add.txt b/Documentation/git-add.txt
index be5e3ac..11eb70f 100644
--- a/Documentation/git-add.txt
+++ b/Documentation/git-add.txt
@@ -9,7 +9,7 @@
--------
[verse]
'git add' [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p]
- [--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]]
+ [--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]] [--sparse]
[--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing] [--renormalize]
[--chmod=(+|-)x] [--pathspec-from-file=<file> [--pathspec-file-nul]]
[--] [<pathspec>...]
@@ -79,6 +79,13 @@
--force::
Allow adding otherwise ignored files.
+--sparse::
+ Allow updating index entries outside of the sparse-checkout cone.
+ Normally, `git add` refuses to update index entries whose paths do
+ not fit within the sparse-checkout cone, since those files might
+ be removed from the working tree without warning. See
+ linkgit:git-sparse-checkout[1] for more details.
+
-i::
--interactive::
Add modified contents in the working tree interactively to
diff --git a/Documentation/git-archive.txt b/Documentation/git-archive.txt
index 9f81728..bc4e76a 100644
--- a/Documentation/git-archive.txt
+++ b/Documentation/git-archive.txt
@@ -93,12 +93,19 @@
zip
~~~
--0::
- Store the files instead of deflating them.
--9::
- Highest and slowest compression level. You can specify any
- number from 1 to 9 to adjust compression speed and ratio.
+-<digit>::
+ Specify compression level. Larger values allow the command
+ to spend more time to compress to smaller size. Supported
+ values are from `-0` (store-only) to `-9` (best ratio).
+ Default is `-6` if not given.
+tar
+~~~
+-<number>::
+ Specify compression level. The value will be passed to the
+ compression command configured in `tar.<format>.command`. See
+ manual page of the configured command for the list of supported
+ levels and the default level if this option isn't specified.
CONFIGURATION
-------------
diff --git a/Documentation/git-blame.txt b/Documentation/git-blame.txt
index 3bf5d5d..d7a46cc 100644
--- a/Documentation/git-blame.txt
+++ b/Documentation/git-blame.txt
@@ -11,8 +11,8 @@
'git blame' [-c] [-b] [-l] [--root] [-t] [-f] [-n] [-s] [-e] [-p] [-w] [--incremental]
[-L <range>] [-S <revs-file>] [-M] [-C] [-C] [-C] [--since=<date>]
[--ignore-rev <rev>] [--ignore-revs-file <file>]
- [--progress] [--abbrev=<n>] [<rev> | --contents <file> | --reverse <rev>..<rev>]
- [--] <file>
+ [--color-lines] [--color-by-age] [--progress] [--abbrev=<n>]
+ [<rev> | --contents <file> | --reverse <rev>..<rev>] [--] <file>
DESCRIPTION
-----------
@@ -93,6 +93,19 @@
is used for a caret to mark the boundary commit.
+THE DEFAULT FORMAT
+------------------
+
+When neither `--porcelain` nor `--incremental` option is specified,
+`git blame` will output annotation for each line with:
+
+- abbreviated object name for the commit the line came from;
+- author ident (by default author name and date, unless `-s` or `-e`
+ is specified); and
+- line number
+
+before the line contents.
+
THE PORCELAIN FORMAT
--------------------
diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.txt
index 5449767..8af42ef 100644
--- a/Documentation/git-branch.txt
+++ b/Documentation/git-branch.txt
@@ -125,14 +125,14 @@
-m::
--move::
- Move/rename a branch and the corresponding reflog.
+ Move/rename a branch, together with its config and reflog.
-M::
Shortcut for `--move --force`.
-c::
--copy::
- Copy a branch and the corresponding reflog.
+ Copy a branch, together with its config and reflog.
-C::
Shortcut for `--copy --force`.
diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt
index ac0d003..72ab813 100644
--- a/Documentation/git-bundle.txt
+++ b/Documentation/git-bundle.txt
@@ -13,7 +13,7 @@
[--version=<version>] <file> <git-rev-list-args>
'git bundle' verify [-q | --quiet] <file>
'git bundle' list-heads <file> [<refname>...]
-'git bundle' unbundle <file> [<refname>...]
+'git bundle' unbundle [--progress] <file> [<refname>...]
DESCRIPTION
-----------
@@ -51,10 +51,10 @@
unbundled using the `--fix-thin` option to linkgit:git-index-pack[1].
There is no option to create a "thick pack" when using revision
-exclusions, users should not be concerned about the difference. By
-using "thin packs" bundles created using exclusions are smaller in
+exclusions, and users should not be concerned about the difference. By
+using "thin packs", bundles created using exclusions are smaller in
size. That they're "thin" under the hood is merely noted here as a
-curiosity, and as a reference to other documentation
+curiosity, and as a reference to other documentation.
See link:technical/bundle-format.html[the `bundle-format`
documentation] for more details and the discussion of "thin pack" in
@@ -144,7 +144,7 @@
SPECIFYING REFERENCES
---------------------
-Revisions must accompanied by reference names to be packaged in a
+Revisions must be accompanied by reference names to be packaged in a
bundle.
More than one reference may be packaged, and more than one set of prerequisite objects can
diff --git a/Documentation/git-cat-file.txt b/Documentation/git-cat-file.txt
index 4eb0421..27b27e2 100644
--- a/Documentation/git-cat-file.txt
+++ b/Documentation/git-cat-file.txt
@@ -94,8 +94,10 @@
Instead of reading a list of objects on stdin, perform the
requested batch operation on all objects in the repository and
any alternate object stores (not just reachable objects).
- Requires `--batch` or `--batch-check` be specified. Note that
- the objects are visited in order sorted by their hashes.
+ Requires `--batch` or `--batch-check` be specified. By default,
+ the objects are visited in order sorted by their hashes; see
+ also `--unordered` below. Objects are presented as-is, without
+ respecting the "replace" mechanism of linkgit:git-replace[1].
--buffer::
Normally batch output is flushed after each object is output, so
diff --git a/Documentation/git-checkout.txt b/Documentation/git-checkout.txt
index b1a6fe4..d473c9b 100644
--- a/Documentation/git-checkout.txt
+++ b/Documentation/git-checkout.txt
@@ -118,8 +118,9 @@
-f::
--force::
When switching branches, proceed even if the index or the
- working tree differs from `HEAD`. This is used to throw away
- local changes.
+ working tree differs from `HEAD`, and even if there are untracked
+ files in the way. This is used to throw away local changes and
+ any untracked files or directories that are in the way.
+
When checking out paths from the index, do not fail upon unmerged
entries; instead, unmerged entries are ignored.
diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
index 95fec5f..6c60bf9 100644
--- a/Documentation/git-commit.txt
+++ b/Documentation/git-commit.txt
@@ -212,8 +212,9 @@
each trailer would appear, and other details.
-n::
---no-verify::
- This option bypasses the pre-commit and commit-msg hooks.
+--[no-]verify::
+ By default, the pre-commit and commit-msg hooks are run.
+ When any of `--no-verify` or `-n` is given, these are bypassed.
See also linkgit:githooks[5].
--allow-empty::
diff --git a/Documentation/git-for-each-ref.txt b/Documentation/git-for-each-ref.txt
index 2ae2478..6da899c 100644
--- a/Documentation/git-for-each-ref.txt
+++ b/Documentation/git-for-each-ref.txt
@@ -235,6 +235,15 @@
without angle brackets, and `:localpart` to get the part before the `@` symbol
out of the trimmed email.
+The raw data in an object is `raw`.
+
+raw:size::
+ The raw data size of the object.
+
+Note that `--format=%(raw)` can not be used with `--python`, `--shell`, `--tcl`,
+because such language may not support arbitrary binary data in their string
+variable type.
+
The message in a commit or a tag object is `contents`, from which
`contents:<part>` can be used to extract various parts out of:
diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt
index fe2f69d..113eabc 100644
--- a/Documentation/git-format-patch.txt
+++ b/Documentation/git-format-patch.txt
@@ -689,10 +689,10 @@
for A, B and C, and the identifiers for P, X, Y, Z are appended at the
end of the first message.
-If set `--base=auto` in cmdline, it will track base commit automatically,
-the base commit will be the merge base of tip commit of the remote-tracking
+If set `--base=auto` in cmdline, it will automatically compute
+the base commit as the merge base of tip commit of the remote-tracking
branch and revision-range specified in cmdline.
-For a local branch, you need to track a remote branch by `git branch
+For a local branch, you need to make it to track a remote branch by `git branch
--set-upstream-to` before using this option.
EXAMPLES
diff --git a/Documentation/git-help.txt b/Documentation/git-help.txt
index 44fe886..96d5f59 100644
--- a/Documentation/git-help.txt
+++ b/Documentation/git-help.txt
@@ -8,8 +8,10 @@
SYNOPSIS
--------
[verse]
-'git help' [-a|--all [--[no-]verbose]] [-g|--guides]
- [-i|--info|-m|--man|-w|--web] [COMMAND|GUIDE]
+'git help' [-a|--all [--[no-]verbose]]
+ [[-i|--info] [-m|--man] [-w|--web]] [COMMAND|GUIDE]
+'git help' [-g|--guides]
+'git help' [-c|--config]
DESCRIPTION
-----------
@@ -58,8 +60,7 @@
-g::
--guides::
- Prints a list of the Git concept guides on the standard output. This
- option overrides any given command or guide name.
+ Prints a list of the Git concept guides on the standard output.
-i::
--info::
diff --git a/Documentation/git-http-backend.txt b/Documentation/git-http-backend.txt
index 558966a..0c5c0dd 100644
--- a/Documentation/git-http-backend.txt
+++ b/Documentation/git-http-backend.txt
@@ -16,7 +16,9 @@
clients accessing the repository over http:// and https:// protocols.
The program supports clients fetching using both the smart HTTP protocol
and the backwards-compatible dumb HTTP protocol, as well as clients
-pushing using the smart HTTP protocol.
+pushing using the smart HTTP protocol. It also supports Git's
+more-efficient "v2" protocol if properly configured; see the
+discussion of `GIT_PROTOCOL` in the ENVIRONMENT section below.
It verifies that the directory has the magic file
"git-daemon-export-ok", and it will refuse to export any Git directory
@@ -77,6 +79,18 @@
SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
+
+# This is not strictly necessary using Apache and a modern version of
+# git-http-backend, as the webserver will pass along the header in the
+# environment as HTTP_GIT_PROTOCOL, and http-backend will copy that into
+# GIT_PROTOCOL. But you may need this line (or something similar if you
+# are using a different webserver), or if you want to support older Git
+# versions that did not do that copying.
+#
+# Having the webserver set up GIT_PROTOCOL is perfectly fine even with
+# modern versions (and will take precedence over HTTP_GIT_PROTOCOL,
+# which means it can be used to override the client's request).
+SetEnvIf Git-Protocol ".*" GIT_PROTOCOL=$0
----------------------------------------------------------------
+
To enable anonymous read access but authenticated write access,
@@ -264,6 +278,16 @@
specified with a unit (e.g., `100M` for 100 megabytes). The default is
10 megabytes.
+Clients may probe for optional protocol capabilities (like the v2
+protocol) using the `Git-Protocol` HTTP header. In order to support
+these, the contents of that header must appear in the `GIT_PROTOCOL`
+environment variable. Most webservers will pass this header to the CGI
+via the `HTTP_GIT_PROTOCOL` variable, and `git-http-backend` will
+automatically copy that to `GIT_PROTOCOL`. However, some webservers may
+be more selective about which headers they'll pass, in which case they
+need to be configured explicitly (see the mention of `Git-Protocol` in
+the Apache config from the earlier EXAMPLES section).
+
The backend process sets GIT_COMMITTER_NAME to '$REMOTE_USER' and
GIT_COMMITTER_EMAIL to '$\{REMOTE_USER}@http.$\{REMOTE_ADDR\}',
ensuring that any reflogs created by 'git-receive-pack' contain some
diff --git a/Documentation/git-index-pack.txt b/Documentation/git-index-pack.txt
index 7fa74b9..1f1e359 100644
--- a/Documentation/git-index-pack.txt
+++ b/Documentation/git-index-pack.txt
@@ -82,6 +82,12 @@
--strict::
Die, if the pack contains broken objects or links.
+--progress-title::
+ For internal use only.
++
+Set the title of the progress bar. The title is "Receiving objects" by
+default and "Indexing objects" when `--stdin` is specified.
+
--check-self-contained-and-connected::
Die if the pack contains broken links. For internal use only.
diff --git a/Documentation/git-maintenance.txt b/Documentation/git-maintenance.txt
index 1e738ad..e2cfb68 100644
--- a/Documentation/git-maintenance.txt
+++ b/Documentation/git-maintenance.txt
@@ -179,6 +179,17 @@
`maintenance.<task>.enabled` configured as `true` are considered.
See the 'TASKS' section for the list of accepted `<task>` values.
+--scheduler=auto|crontab|systemd-timer|launchctl|schtasks::
+ When combined with the `start` subcommand, specify the scheduler
+ for running the hourly, daily and weekly executions of
+ `git maintenance run`.
+ Possible values for `<scheduler>` are `auto`, `crontab`
+ (POSIX), `systemd-timer` (Linux), `launchctl` (macOS), and
+ `schtasks` (Windows). When `auto` is specified, the
+ appropriate platform-specific scheduler is used; on Linux,
+ `systemd-timer` is used if available, otherwise
+ `crontab`. Default is `auto`.
+
TROUBLESHOOTING
---------------
@@ -277,6 +288,52 @@
schedule.
+BACKGROUND MAINTENANCE ON LINUX SYSTEMD SYSTEMS
+-----------------------------------------------
+
+While Linux supports `cron`, depending on the distribution, `cron` may
+be an optional package not necessarily installed. On modern Linux
+distributions, systemd timers are superseding it.
+
+If user systemd timers are available, they will be used as a replacement
+of `cron`.
+
+In this case, `git maintenance start` will create user systemd timer units
+and start the timers. The current list of user-scheduled tasks can be found
+by running `systemctl --user list-timers`. The timers written by `git
+maintenance start` are similar to this:
+
+-----------------------------------------------------------------------
+$ systemctl --user list-timers
+NEXT LEFT LAST PASSED UNIT ACTIVATES
+Thu 2021-04-29 19:00:00 CEST 42min left Thu 2021-04-29 18:00:11 CEST 17min ago git-maintenance@hourly.timer git-maintenance@hourly.service
+Fri 2021-04-30 00:00:00 CEST 5h 42min left Thu 2021-04-29 00:00:11 CEST 18h ago git-maintenance@daily.timer git-maintenance@daily.service
+Mon 2021-05-03 00:00:00 CEST 3 days left Mon 2021-04-26 00:00:11 CEST 3 days ago git-maintenance@weekly.timer git-maintenance@weekly.service
+-----------------------------------------------------------------------
+
+One timer is registered for each `--schedule=<frequency>` option.
+
+The definition of the systemd units can be inspected in the following files:
+
+-----------------------------------------------------------------------
+~/.config/systemd/user/git-maintenance@.timer
+~/.config/systemd/user/git-maintenance@.service
+~/.config/systemd/user/timers.target.wants/git-maintenance@hourly.timer
+~/.config/systemd/user/timers.target.wants/git-maintenance@daily.timer
+~/.config/systemd/user/timers.target.wants/git-maintenance@weekly.timer
+-----------------------------------------------------------------------
+
+`git maintenance start` will overwrite these files and start the timer
+again with `systemctl --user`, so any customization should be done by
+creating a drop-in file, i.e. a `.conf` suffixed file in the
+`~/.config/systemd/user/git-maintenance@.service.d` directory.
+
+`git maintenance stop` will stop the user systemd timers and delete
+the above mentioned files.
+
+For more details, see `systemd.timer(5)`.
+
+
BACKGROUND MAINTENANCE ON MACOS SYSTEMS
---------------------------------------
diff --git a/Documentation/git-multi-pack-index.txt b/Documentation/git-multi-pack-index.txt
index ffd601b..c588fb9 100644
--- a/Documentation/git-multi-pack-index.txt
+++ b/Documentation/git-multi-pack-index.txt
@@ -9,8 +9,7 @@
SYNOPSIS
--------
[verse]
-'git multi-pack-index' [--object-dir=<dir>] [--[no-]progress]
- [--preferred-pack=<pack>] <subcommand>
+'git multi-pack-index' [--object-dir=<dir>] [--[no-]bitmap] <sub-command>
DESCRIPTION
-----------
@@ -23,10 +22,13 @@
Use given directory for the location of Git objects. We check
`<dir>/packs/multi-pack-index` for the current MIDX file, and
`<dir>/packs` for the pack-files to index.
++
+`<dir>` must be an alternate of the current repository.
--[no-]progress::
Turn progress on/off explicitly. If neither is specified, progress is
- shown if standard error is connected to a terminal.
+ shown if standard error is connected to a terminal. Supported by
+ sub-commands `write`, `verify`, `expire`, and `repack.
The following subcommands are available:
@@ -37,9 +39,31 @@
--
--preferred-pack=<pack>::
Optionally specify the tie-breaking pack used when
- multiple packs contain the same object. If not given,
- ties are broken in favor of the pack with the lowest
- mtime.
+ multiple packs contain the same object. `<pack>` must
+ contain at least one object. If not given, ties are
+ broken in favor of the pack with the lowest mtime.
+
+ --[no-]bitmap::
+ Control whether or not a multi-pack bitmap is written.
+
+ --stdin-packs::
+ Write a multi-pack index containing only the set of
+ line-delimited pack index basenames provided over stdin.
+
+ --refs-snapshot=<path>::
+ With `--bitmap`, optionally specify a file which
+ contains a "refs snapshot" taken prior to repacking.
++
+A reference snapshot is composed of line-delimited OIDs corresponding to
+the reference tips, usually taken by `git repack` prior to generating a
+new pack. A line may optionally start with a `+` character to indicate
+that the reference which corresponds to that OID is "preferred" (see
+linkgit:git-config[1]'s `pack.preferBitmapTips`.)
++
+The file given at `<path>` is expected to be readable, and can contain
+duplicates. (If a given OID is given more than once, it is marked as
+preferred if at least one instance of it begins with the special `+`
+marker).
--
verify::
@@ -75,19 +99,26 @@
EXAMPLES
--------
-* Write a MIDX file for the packfiles in the current .git folder.
+* Write a MIDX file for the packfiles in the current `.git` directory.
+
-----------------------------------------------
$ git multi-pack-index write
-----------------------------------------------
+* Write a MIDX file for the packfiles in the current `.git` directory with a
+corresponding bitmap.
++
+-------------------------------------------------------------
+$ git multi-pack-index write --preferred-pack=<pack> --bitmap
+-------------------------------------------------------------
+
* Write a MIDX file for the packfiles in an alternate object store.
+
-----------------------------------------------
$ git multi-pack-index --object-dir <alt> write
-----------------------------------------------
-* Verify the MIDX file for the packfiles in the current .git folder.
+* Verify the MIDX file for the packfiles in the current `.git` directory.
+
-----------------------------------------------
$ git multi-pack-index verify
diff --git a/Documentation/git-pull.txt b/Documentation/git-pull.txt
index aef757e..0e14f8b 100644
--- a/Documentation/git-pull.txt
+++ b/Documentation/git-pull.txt
@@ -105,7 +105,7 @@
include::merge-options.txt[]
-r::
---rebase[=false|true|merges|preserve|interactive]::
+--rebase[=false|true|merges|interactive]::
When true, rebase the current branch on top of the upstream
branch after fetching. If there is a remote-tracking branch
corresponding to the upstream branch and the upstream branch
@@ -116,10 +116,6 @@
the local merge commits are included in the rebase (see
linkgit:git-rebase[1] for details).
+
-When set to `preserve` (deprecated in favor of `merges`), rebase with the
-`--preserve-merges` option passed to `git rebase` so that locally created
-merge commits will not be flattened.
-+
When false, merge the upstream branch into the current branch.
+
When `interactive`, enable the interactive mode of rebase.
diff --git a/Documentation/git-read-tree.txt b/Documentation/git-read-tree.txt
index 5fa8bab..8c3aceb 100644
--- a/Documentation/git-read-tree.txt
+++ b/Documentation/git-read-tree.txt
@@ -10,8 +10,7 @@
--------
[verse]
'git read-tree' [[-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>]
- [-u [--exclude-per-directory=<gitignore>] | -i]]
- [--index-output=<file>] [--no-sparse-checkout]
+ [-u | -i]] [--index-output=<file>] [--no-sparse-checkout]
(--empty | <tree-ish1> [<tree-ish2> [<tree-ish3>]])
@@ -39,8 +38,9 @@
--reset::
Same as -m, except that unmerged entries are discarded instead
- of failing. When used with `-u`, updates leading to loss of
- working tree changes will not abort the operation.
+ of failing. When used with `-u`, updates leading to loss of
+ working tree changes or untracked files or directories will not
+ abort the operation.
-u::
After a successful merge, update the files in the work
@@ -88,21 +88,6 @@
The command will refuse to overwrite entries that already
existed in the original index file.
---exclude-per-directory=<gitignore>::
- When running the command with `-u` and `-m` options, the
- merge result may need to overwrite paths that are not
- tracked in the current branch. The command usually
- refuses to proceed with the merge to avoid losing such a
- path. However this safety valve sometimes gets in the
- way. For example, it often happens that the other
- branch added a file that used to be a generated file in
- your branch, and the safety valve triggers when you try
- to switch to that branch after you ran `make` but before
- running `make clean` to remove the generated file. This
- option tells the command to read per-directory exclude
- file (usually '.gitignore') and allows such an untracked
- but explicitly ignored file to be overwritten.
-
--index-output=<file>::
Instead of writing the results out to `$GIT_INDEX_FILE`,
write the resulting index in the named file. While the
diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
index 73d49ec..a1af21f 100644
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.txt
@@ -79,9 +79,10 @@
If the upstream branch already contains a change you have made (e.g.,
because you mailed a patch which was applied upstream), then that commit
-will be skipped. For example, running `git rebase master` on the
-following history (in which `A'` and `A` introduce the same set of changes,
-but have different committer information):
+will be skipped and warnings will be issued (if the `merge` backend is
+used). For example, running `git rebase master` on the following
+history (in which `A'` and `A` introduce the same set of changes, but
+have different committer information):
------------
A---B---C topic
@@ -312,7 +313,10 @@
By default (or if `--no-reapply-cherry-picks` is given), these commits
will be automatically dropped. Because this necessitates reading all
upstream commits, this can be expensive in repos with a large number
-of upstream commits that need to be read.
+of upstream commits that need to be read. When using the `merge`
+backend, warnings will be issued for each dropped commit (unless
+`--quiet` is given). Advice will also be issued unless
+`advice.skippedCherryPicks` is set to false (see linkgit:git-config[1]).
+
`--reapply-cherry-picks` allows rebase to forgo reading all upstream
commits, potentially improving performance.
@@ -352,8 +356,8 @@
-s <strategy>::
--strategy=<strategy>::
- Use the given merge strategy, instead of the default
- `recursive`. This implies `--merge`.
+ Use the given merge strategy, instead of the default `ort`.
+ This implies `--merge`.
+
Because 'git rebase' replays each commit from the working branch
on top of the <upstream> branch using the given strategy, using
@@ -366,7 +370,7 @@
--strategy-option=<strategy-option>::
Pass the <strategy-option> through to the merge strategy.
This implies `--merge` and, if no strategy has been
- specified, `-s recursive`. Note the reversal of 'ours' and
+ specified, `-s ort`. Note the reversal of 'ours' and
'theirs' as noted above for the `-m` option.
+
See also INCOMPATIBLE OPTIONS below.
@@ -442,7 +446,8 @@
ends up being empty, the <upstream> will be used as a fallback.
+
If <upstream> is given on the command line, then the default is
-`--no-fork-point`, otherwise the default is `--fork-point`.
+`--no-fork-point`, otherwise the default is `--fork-point`. See also
+`rebase.forkpoint` in linkgit:git-config[1].
+
If your branch was based on <upstream> but <upstream> was rewound and
your branch contains commits which were dropped, this option can be used
@@ -522,29 +527,12 @@
the `rebase-cousins` mode is turned on, such commits are instead rebased
onto `<upstream>` (or `<onto>`, if specified).
+
-The `--rebase-merges` mode is similar in spirit to the deprecated
-`--preserve-merges` but works with interactive rebases,
-where commits can be reordered, inserted and dropped at will.
-+
It is currently only possible to recreate the merge commits using the
-`recursive` merge strategy; different merge strategies can be used only via
+`ort` merge strategy; different merge strategies can be used only via
explicit `exec git merge -s <strategy> [...]` commands.
+
See also REBASING MERGES and INCOMPATIBLE OPTIONS below.
--p::
---preserve-merges::
- [DEPRECATED: use `--rebase-merges` instead] Recreate merge commits
- instead of flattening the history by replaying commits a merge commit
- introduces. Merge conflict resolutions or manual amendments to merge
- commits are not preserved.
-+
-This uses the `--interactive` machinery internally, but combining it
-with the `--interactive` option explicitly is generally not a good
-idea unless you know what you are doing (see BUGS below).
-+
-See also INCOMPATIBLE OPTIONS below.
-
-x <cmd>::
--exec <cmd>::
Append "exec <cmd>" after each line creating a commit in the
@@ -576,9 +564,6 @@
the root commit(s) on a branch. When used with --onto, it
will skip changes already contained in <newbase> (instead of
<upstream>) whereas without --onto it will operate on every change.
- When used together with both --onto and --preserve-merges,
- 'all' root commits will be rewritten to have <newbase> as parent
- instead.
+
See also INCOMPATIBLE OPTIONS below.
@@ -640,7 +625,6 @@
* --allow-empty-message
* --[no-]autosquash
* --rebase-merges
- * --preserve-merges
* --interactive
* --exec
* --no-keep-empty
@@ -651,13 +635,6 @@
In addition, the following pairs of options are incompatible:
- * --preserve-merges and --interactive
- * --preserve-merges and --signoff
- * --preserve-merges and --rebase-merges
- * --preserve-merges and --empty=
- * --preserve-merges and --ignore-whitespace
- * --preserve-merges and --committer-date-is-author-date
- * --preserve-merges and --ignore-date
* --keep-base and --onto
* --keep-base and --root
* --fork-point and --root
@@ -1216,16 +1193,16 @@
If a `merge` command fails for any reason other than merge conflicts (i.e.
when the merge operation did not even start), it is rescheduled immediately.
-By default, the `merge` command will use the `recursive` merge
-strategy for regular merges, and `octopus` for octopus merges. One
-can specify a default strategy for all merges using the `--strategy`
-argument when invoking rebase, or can override specific merges in the
-interactive list of commands by using an `exec` command to call `git
-merge` explicitly with a `--strategy` argument. Note that when
-calling `git merge` explicitly like this, you can make use of the fact
-that the labels are worktree-local refs (the ref `refs/rewritten/onto`
-would correspond to the label `onto`, for example) in order to refer
-to the branches you want to merge.
+By default, the `merge` command will use the `ort` merge strategy for
+regular merges, and `octopus` for octopus merges. One can specify a
+default strategy for all merges using the `--strategy` argument when
+invoking rebase, or can override specific merges in the interactive
+list of commands by using an `exec` command to call `git merge`
+explicitly with a `--strategy` argument. Note that when calling `git
+merge` explicitly like this, you can make use of the fact that the
+labels are worktree-local refs (the ref `refs/rewritten/onto` would
+correspond to the label `onto`, for example) in order to refer to the
+branches you want to merge.
Note: the first command (`label onto`) labels the revision onto which
the commits are rebased; The name `onto` is just a convention, as a nod
@@ -1275,29 +1252,6 @@
include::config/rebase.txt[]
include::config/sequencer.txt[]
-BUGS
-----
-The todo list presented by the deprecated `--preserve-merges --interactive`
-does not represent the topology of the revision graph (use `--rebase-merges`
-instead). Editing commits and rewording their commit messages should work
-fine, but attempts to reorder commits tend to produce counterintuitive results.
-Use `--rebase-merges` in such scenarios instead.
-
-For example, an attempt to rearrange
-------------
-1 --- 2 --- 3 --- 4 --- 5
-------------
-to
-------------
-1 --- 2 --- 4 --- 3 --- 5
-------------
-by moving the "pick 4" line will result in the following history:
-------------
- 3
- /
-1 --- 2 --- 4 --- 5
-------------
-
GIT
---
Part of the linkgit:git[1] suite
diff --git a/Documentation/git-receive-pack.txt b/Documentation/git-receive-pack.txt
index 25702ed..014a784 100644
--- a/Documentation/git-receive-pack.txt
+++ b/Documentation/git-receive-pack.txt
@@ -41,6 +41,11 @@
<directory>::
The repository to sync into.
+--http-backend-info-refs::
+ Used by linkgit:git-http-backend[1] to serve up
+ `$GIT_URL/info/refs?service=git-receive-pack` requests. See
+ `--http-backend-info-refs` in linkgit:git-upload-pack[1].
+
PRE-RECEIVE HOOK
----------------
Before any ref is updated, if $GIT_DIR/hooks/pre-receive file exists
diff --git a/Documentation/git-repack.txt b/Documentation/git-repack.txt
index 24c00c9..7183fb4 100644
--- a/Documentation/git-repack.txt
+++ b/Documentation/git-repack.txt
@@ -9,7 +9,7 @@
SYNOPSIS
--------
[verse]
-'git repack' [-a] [-A] [-d] [-f] [-F] [-l] [-n] [-q] [-b] [--window=<n>] [--depth=<n>] [--threads=<n>] [--keep-pack=<pack-name>]
+'git repack' [-a] [-A] [-d] [-f] [-F] [-l] [-n] [-q] [-b] [-m] [--window=<n>] [--depth=<n>] [--threads=<n>] [--keep-pack=<pack-name>] [--write-midx]
DESCRIPTION
-----------
@@ -128,10 +128,11 @@
-b::
--write-bitmap-index::
Write a reachability bitmap index as part of the repack. This
- only makes sense when used with `-a` or `-A`, as the bitmaps
+ only makes sense when used with `-a`, `-A` or `-m`, as the bitmaps
must be able to refer to all reachable objects. This option
- overrides the setting of `repack.writeBitmaps`. This option
- has no effect if multiple packfiles are created.
+ overrides the setting of `repack.writeBitmaps`. This option
+ has no effect if multiple packfiles are created, unless writing a
+ MIDX (in which case a multi-pack bitmap is created).
--pack-kept-objects::
Include objects in `.keep` files when repacking. Note that we
@@ -189,6 +190,15 @@
to change in the future. This option (implying a drastically different
repack mode) is not guaranteed to work with all other combinations of
option to `git repack`.
++
+When writing a multi-pack bitmap, `git repack` selects the largest resulting
+pack as the preferred pack for object selection by the MIDX (see
+linkgit:git-multi-pack-index[1]).
+
+-m::
+--write-midx::
+ Write a multi-pack index (see linkgit:git-multi-pack-index[1])
+ containing the non-redundant packs.
CONFIGURATION
-------------
diff --git a/Documentation/git-reset.txt b/Documentation/git-reset.txt
index 252e2d4..6f7685f 100644
--- a/Documentation/git-reset.txt
+++ b/Documentation/git-reset.txt
@@ -69,7 +69,8 @@
--hard::
Resets the index and working tree. Any changes to tracked files in the
- working tree since `<commit>` are discarded.
+ working tree since `<commit>` are discarded. Any untracked files or
+ directories in the way of writing any tracked files are simply deleted.
--merge::
Resets the index and updates the files in the working tree that are
diff --git a/Documentation/git-rm.txt b/Documentation/git-rm.txt
index 26e9b28..81bc23f 100644
--- a/Documentation/git-rm.txt
+++ b/Documentation/git-rm.txt
@@ -72,6 +72,12 @@
--ignore-unmatch::
Exit with a zero status even if no files matched.
+--sparse::
+ Allow updating index entries outside of the sparse-checkout cone.
+ Normally, `git rm` refuses to update index entries whose paths do
+ not fit within the sparse-checkout cone. See
+ linkgit:git-sparse-checkout[1] for more.
+
-q::
--quiet::
`git rm` normally outputs one line (in the form of an `rm` command)
diff --git a/Documentation/git-send-pack.txt b/Documentation/git-send-pack.txt
index 44fd146..be41f11 100644
--- a/Documentation/git-send-pack.txt
+++ b/Documentation/git-send-pack.txt
@@ -9,10 +9,10 @@
SYNOPSIS
--------
[verse]
-'git send-pack' [--all] [--dry-run] [--force] [--receive-pack=<git-receive-pack>]
+'git send-pack' [--dry-run] [--force] [--receive-pack=<git-receive-pack>]
[--verbose] [--thin] [--atomic]
[--[no-]signed|--signed=(true|false|if-asked)]
- [<host>:]<directory> [<ref>...]
+ [<host>:]<directory> (--all | <ref>...)
DESCRIPTION
-----------
diff --git a/Documentation/git-sparse-checkout.txt b/Documentation/git-sparse-checkout.txt
index fdcf43f..42056ee 100644
--- a/Documentation/git-sparse-checkout.txt
+++ b/Documentation/git-sparse-checkout.txt
@@ -210,6 +210,16 @@
'git sparse-checkout set' command to reflect the expected cone in the working
directory.
+When changing the sparse-checkout patterns in cone mode, Git will inspect each
+tracked directory that is not within the sparse-checkout cone to see if it
+contains any untracked files. If all of those files are ignored due to the
+`.gitignore` patterns, then the directory will be deleted. If any of the
+untracked files within that directory is not ignored, then no deletions will
+occur within that directory and a warning message will appear. If these files
+are important, then reset your sparse-checkout definition so they are included,
+use `git add` and `git commit` to store them, then remove any remaining files
+manually to ensure Git can behave optimally.
+
SUBMODULES
----------
diff --git a/Documentation/git-status.txt b/Documentation/git-status.txt
index 83f38e3..4a2c3e0 100644
--- a/Documentation/git-status.txt
+++ b/Documentation/git-status.txt
@@ -207,26 +207,29 @@
* ' ' = unmodified
* 'M' = modified
+* 'T' = file type changed (regular file, symbolic link or submodule)
* 'A' = added
* 'D' = deleted
* 'R' = renamed
-* 'C' = copied
+* 'C' = copied (if config option status.renames is set to "copies")
* 'U' = updated but unmerged
....
X Y Meaning
-------------------------------------------------
[AMD] not updated
-M [ MD] updated in index
-A [ MD] added to index
+M [ MTD] updated in index
+T [ MTD] type changed in index
+A [ MTD] added to index
D deleted from index
-R [ MD] renamed in index
-C [ MD] copied in index
-[MARC] index and work tree matches
-[ MARC] M work tree changed since index
-[ MARC] D deleted in work tree
-[ D] R renamed in work tree
-[ D] C copied in work tree
+R [ MTD] renamed in index
+C [ MTD] copied in index
+[MTARC] index and work tree matches
+[ MTARC] M work tree changed since index
+[ MTARC] T type changed in work tree since index
+[ MTARC] D deleted in work tree
+ R renamed in work tree
+ C copied in work tree
-------------------------------------------------
D D unmerged, both deleted
A U unmerged, added by us
@@ -363,7 +366,7 @@
Unmerged entries have the following format; the first character is
a "u" to distinguish from ordinary changed entries.
- u <xy> <sub> <m1> <m2> <m3> <mW> <h1> <h2> <h3> <path>
+ u <XY> <sub> <m1> <m2> <m3> <mW> <h1> <h2> <h3> <path>
....
Field Meaning
diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt
index d5776ff..222b556 100644
--- a/Documentation/git-svn.txt
+++ b/Documentation/git-svn.txt
@@ -678,7 +678,6 @@
--strategy=<strategy>::
-p::
--rebase-merges::
---preserve-merges (DEPRECATED)::
These are only used with the 'dcommit' and 'rebase' commands.
+
Passed directly to 'git rebase' when using 'dcommit' if a
diff --git a/Documentation/git-upload-pack.txt b/Documentation/git-upload-pack.txt
index 9822c1e..8f87b23 100644
--- a/Documentation/git-upload-pack.txt
+++ b/Documentation/git-upload-pack.txt
@@ -36,14 +36,26 @@
This fits with the HTTP POST request processing model where
a program may read the request, write a response, and must exit.
---advertise-refs::
- Only the initial ref advertisement is output, and the program exits
- immediately. This fits with the HTTP GET request model, where
- no request content is received but a response must be produced.
+--http-backend-info-refs::
+ Used by linkgit:git-http-backend[1] to serve up
+ `$GIT_URL/info/refs?service=git-upload-pack` requests. See
+ "Smart Clients" in link:technical/http-protocol.html[the HTTP
+ transfer protocols] documentation and "HTTP Transport" in
+ link:technical/protocol-v2.html[the Git Wire Protocol, Version
+ 2] documentation. Also understood by
+ linkgit:git-receive-pack[1].
<directory>::
The repository to sync from.
+ENVIRONMENT
+-----------
+
+`GIT_PROTOCOL`::
+ Internal variable used for handshaking the wire protocol. Server
+ admins may need to configure some transports to allow this
+ variable to be passed. See the discussion in linkgit:git[1].
+
SEE ALSO
--------
linkgit:gitnamespaces[7]
diff --git a/Documentation/git.txt b/Documentation/git.txt
index 6bb06d0..281c5f8 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
@@ -867,15 +867,16 @@
end user, to be recorded in the body of the reflog.
`GIT_REF_PARANOIA`::
- If set to `1`, include broken or badly named refs when iterating
- over lists of refs. In a normal, non-corrupted repository, this
- does nothing. However, enabling it may help git to detect and
- abort some operations in the presence of broken refs. Git sets
- this variable automatically when performing destructive
- operations like linkgit:git-prune[1]. You should not need to set
- it yourself unless you want to be paranoid about making sure
- an operation has touched every ref (e.g., because you are
- cloning a repository to make a backup).
+ If set to `0`, ignore broken or badly named refs when iterating
+ over lists of refs. Normally Git will try to include any such
+ refs, which may cause some operations to fail. This is usually
+ preferable, as potentially destructive operations (e.g.,
+ linkgit:git-prune[1]) are better off aborting rather than
+ ignoring broken refs (and thus considering the history they
+ point to as not worth saving). The default value is `1` (i.e.,
+ be paranoid about detecting and aborting all operations). You
+ should not normally need to set this to `0`, but it may be
+ useful when trying to salvage data from a corrupted repository.
`GIT_ALLOW_PROTOCOL`::
If set to a colon-separated list of protocols, behave as if
@@ -898,6 +899,21 @@
Contains a colon ':' separated list of keys with optional values
'key[=value]'. Presence of unknown keys and values must be
ignored.
++
+Note that servers may need to be configured to allow this variable to
+pass over some transports. It will be propagated automatically when
+accessing local repositories (i.e., `file://` or a filesystem path), as
+well as over the `git://` protocol. For git-over-http, it should work
+automatically in most configurations, but see the discussion in
+linkgit:git-http-backend[1]. For git-over-ssh, the ssh server may need
+to be configured to allow clients to pass this variable (e.g., by using
+`AcceptEnv GIT_PROTOCOL` with OpenSSH).
++
+This configuration is optional. If the variable is not propagated, then
+clients will fall back to the original "v0" protocol (but may miss out
+on some performance improvements or features). This variable currently
+only affects clones and fetches; it is not yet used for pushes (but may
+be in the future).
`GIT_OPTIONAL_LOCKS`::
If set to `0`, Git will complete any requested operation without
diff --git a/Documentation/gitfaq.txt b/Documentation/gitfaq.txt
index afdaeab..8c1f2d5 100644
--- a/Documentation/gitfaq.txt
+++ b/Documentation/gitfaq.txt
@@ -275,7 +275,7 @@
[[merge-two-revert-one]]
If I make a change on two branches but revert it on one, why does the merge of those branches include the change?::
- By default, when Git does a merge, it uses a strategy called the recursive
+ By default, when Git does a merge, it uses a strategy called the `ort`
strategy, which does a fancy three-way merge. In such a case, when Git
performs the merge, it considers exactly three points: the two heads and a
third point, called the _merge base_, which is usually the common ancestor of
diff --git a/Documentation/gitignore.txt b/Documentation/gitignore.txt
index f8a1fc2..f2738b1 100644
--- a/Documentation/gitignore.txt
+++ b/Documentation/gitignore.txt
@@ -155,7 +155,7 @@
EXAMPLES
--------
- - The pattern `hello.*` matches any file or folder
+ - The pattern `hello.*` matches any file or directory
whose name begins with `hello.`. If one wants to restrict
this only to the directory and not in its subdirectories,
one can prepend the pattern with a slash, i.e. `/hello.*`;
diff --git a/Documentation/gitweb.txt b/Documentation/gitweb.txt
index 3cc9b03..7cee9d3 100644
--- a/Documentation/gitweb.txt
+++ b/Documentation/gitweb.txt
@@ -547,7 +547,7 @@
# make the front page an internal rewrite to the gitweb script
RewriteRule ^/$ /cgi-bin/gitweb.cgi [QSA,L,PT]
- # look for a public_git folder in unix users' home
+ # look for a public_git directory in unix users' home
# http://git.example.org/~<user>/
RewriteRule ^/\~([^\/]+)(/|/gitweb.cgi)?$ /cgi-bin/gitweb.cgi \
[QSA,E=GITWEB_PROJECTROOT:/home/$1/public_git/,L,PT]
diff --git a/Documentation/lint-gitlink.perl b/Documentation/lint-gitlink.perl
index b22a367..1c61dd9 100755
--- a/Documentation/lint-gitlink.perl
+++ b/Documentation/lint-gitlink.perl
@@ -5,11 +5,12 @@
# Parse arguments, a simple state machine for input like:
#
-# howto/*.txt config/*.txt --section=1 git.txt git-add.txt [...] --to-lint git-add.txt a-file.txt [...]
+# <file-to-check.txt> <valid-files-to-link-to> --section=1 git.txt git-add.txt [...] --to-lint git-add.txt a-file.txt [...]
my %TXT;
my %SECTION;
my $section;
my $lint_these = 0;
+my $to_check = shift @ARGV;
for my $arg (@ARGV) {
if (my ($sec) = $arg =~ /^--section=(\d+)$/s) {
$section = $sec;
@@ -30,13 +31,14 @@
my ($pos, $line, $target, $msg) = @_;
substr($line, $pos) = "' <-- HERE";
$line =~ s/^\s+//;
- print "$ARGV:$.: error: $target: $msg, shown with 'HERE' below:\n";
- print "$ARGV:$.:\t'$line\n";
+ print STDERR "$ARGV:$.: error: $target: $msg, shown with 'HERE' below:\n";
+ print STDERR "$ARGV:$.:\t'$line\n";
$exit_code = 1;
}
@ARGV = sort values %TXT;
-die "BUG: Nothing to process!" unless @ARGV;
+die "BUG: No list of valid linkgit:* files given" unless @ARGV;
+@ARGV = $to_check;
while (<>) {
my $line = $_;
while ($line =~ m/linkgit:((.*?)\[(\d)\])/g) {
diff --git a/Documentation/lint-man-end-blurb.perl b/Documentation/lint-man-end-blurb.perl
index d69312e..6bdb13a 100755
--- a/Documentation/lint-man-end-blurb.perl
+++ b/Documentation/lint-man-end-blurb.perl
@@ -6,7 +6,7 @@
my $exit_code = 0;
sub report {
my ($target, $msg) = @_;
- print "error: $target: $msg\n";
+ print STDERR "error: $target: $msg\n";
$exit_code = 1;
}
diff --git a/Documentation/lint-man-section-order.perl b/Documentation/lint-man-section-order.perl
index b05f915..425377d 100755
--- a/Documentation/lint-man-section-order.perl
+++ b/Documentation/lint-man-section-order.perl
@@ -46,7 +46,7 @@
my $exit_code = 0;
sub report {
my ($msg) = @_;
- print "$ARGV:$.: $msg\n";
+ print STDERR "$ARGV:$.: $msg\n";
$exit_code = 1;
}
diff --git a/Documentation/merge-options.txt b/Documentation/merge-options.txt
index 86f277a..d8f7cd7 100644
--- a/Documentation/merge-options.txt
+++ b/Documentation/merge-options.txt
@@ -132,8 +132,9 @@
Only useful when merging.
endif::git-pull[]
---no-verify::
- This option bypasses the pre-merge and commit-msg hooks.
+--[no-]verify::
+ By default, the pre-merge and commit-msg hooks are run.
+ When `--no-verify` is given, these are bypassed.
See also linkgit:githooks[5].
ifdef::git-pull[]
Only useful when merging.
@@ -144,7 +145,7 @@
Use the given merge strategy; can be supplied more than
once to specify them in the order they should be tried.
If there is no `-s` option, a built-in list of strategies
- is used instead (`recursive` when merging a single head,
+ is used instead (`ort` when merging a single head,
`octopus` otherwise).
-X <option>::
diff --git a/Documentation/merge-strategies.txt b/Documentation/merge-strategies.txt
index 210f0f8..5fc54ec 100644
--- a/Documentation/merge-strategies.txt
+++ b/Documentation/merge-strategies.txt
@@ -6,21 +6,23 @@
can also take their own options, which can be passed by giving `-X<option>`
arguments to `git merge` and/or `git pull`.
-recursive::
- This can only resolve two heads using a 3-way merge
- algorithm. When there is more than one common
- ancestor that can be used for 3-way merge, it creates a
- merged tree of the common ancestors and uses that as
- the reference tree for the 3-way merge. This has been
- reported to result in fewer merge conflicts without
- causing mismerges by tests done on actual merge commits
- taken from Linux 2.6 kernel development history.
- Additionally this can detect and handle merges involving
- renames. It does not make use of detected copies. This
- is the default merge strategy when pulling or merging one
- branch.
+ort::
+ This is the default merge strategy when pulling or merging one
+ branch. This strategy can only resolve two heads using a
+ 3-way merge algorithm. When there is more than one common
+ ancestor that can be used for 3-way merge, it creates a merged
+ tree of the common ancestors and uses that as the reference
+ tree for the 3-way merge. This has been reported to result in
+ fewer merge conflicts without causing mismerges by tests done
+ on actual merge commits taken from Linux 2.6 kernel
+ development history. Additionally this strategy can detect
+ and handle merges involving renames. It does not make use of
+ detected copies. The name for this algorithm is an acronym
+ ("Ostensibly Recursive's Twin") and came from the fact that it
+ was written as a replacement for the previous default
+ algorithm, `recursive`.
+
-The 'recursive' strategy can take the following options:
+The 'ort' strategy can take the following options:
ours;;
This option forces conflicting hunks to be auto-resolved cleanly by
@@ -36,16 +38,6 @@
This is the opposite of 'ours'; note that, unlike 'ours', there is
no 'theirs' merge strategy to confuse this merge option with.
-patience;;
- Deprecated synonym for `diff-algorithm=patience`.
-
-diff-algorithm=[patience|minimal|histogram|myers];;
- Use a different diff algorithm while merging, which can help
- avoid mismerges that occur due to unimportant matching lines
- (such as braces from distinct functions). See also
- linkgit:git-diff[1] `--diff-algorithm`. Defaults to the
- `diff.algorithm` config setting.
-
ignore-space-change;;
ignore-all-space;;
ignore-space-at-eol;;
@@ -74,11 +66,6 @@
Disables the `renormalize` option. This overrides the
`merge.renormalize` configuration variable.
-no-renames;;
- Turn off rename detection. This overrides the `merge.renames`
- configuration variable.
- See also linkgit:git-diff[1] `--no-renames`.
-
find-renames[=<n>];;
Turn on rename detection, optionally setting the similarity
threshold. This is the default. This overrides the
@@ -95,19 +82,39 @@
is prefixed (or stripped from the beginning) to make the shape of
two trees to match.
-ort::
- This is meant as a drop-in replacement for the `recursive`
- algorithm (as reflected in its acronym -- "Ostensibly
- Recursive's Twin"), and will likely replace it in the future.
- It fixes corner cases that the `recursive` strategy handles
- suboptimally, and is significantly faster in large
- repositories -- especially when many renames are involved.
+recursive::
+ This can only resolve two heads using a 3-way merge
+ algorithm. When there is more than one common
+ ancestor that can be used for 3-way merge, it creates a
+ merged tree of the common ancestors and uses that as
+ the reference tree for the 3-way merge. This has been
+ reported to result in fewer merge conflicts without
+ causing mismerges by tests done on actual merge commits
+ taken from Linux 2.6 kernel development history.
+ Additionally this can detect and handle merges involving
+ renames. It does not make use of detected copies. This was
+ the default strategy for resolving two heads from Git v0.99.9k
+ until v2.33.0.
+
-The `ort` strategy takes all the same options as `recursive`.
-However, it ignores three of those options: `no-renames`,
-`patience` and `diff-algorithm`. It always runs with rename
-detection (it handles it much faster than `recursive` does), and
-it specifically uses `diff-algorithm=histogram`.
+The 'recursive' strategy takes the same options as 'ort'. However,
+there are three additional options that 'ort' ignores (not documented
+above) that are potentially useful with the 'recursive' strategy:
+
+patience;;
+ Deprecated synonym for `diff-algorithm=patience`.
+
+diff-algorithm=[patience|minimal|histogram|myers];;
+ Use a different diff algorithm while merging, which can help
+ avoid mismerges that occur due to unimportant matching lines
+ (such as braces from distinct functions). See also
+ linkgit:git-diff[1] `--diff-algorithm`. Note that `ort`
+ specifically uses `diff-algorithm=histogram`, while `recursive`
+ defaults to the `diff.algorithm` config setting.
+
+no-renames;;
+ Turn off rename detection. This overrides the `merge.renames`
+ configuration variable.
+ See also linkgit:git-diff[1] `--no-renames`.
resolve::
This can only resolve two heads (i.e. the current branch
@@ -131,13 +138,13 @@
the 'recursive' merge strategy.
subtree::
- This is a modified recursive strategy. When merging trees A and
+ This is a modified `ort` strategy. When merging trees A and
B, if B corresponds to a subtree of A, B is first adjusted to
match the tree structure of A, instead of reading the trees at
the same level. This adjustment is also done to the common
ancestor tree.
-With the strategies that use 3-way merge (including the default, 'recursive'),
+With the strategies that use 3-way merge (including the default, 'ort'),
if a change is made on both branches, but later reverted on one of the
branches, that change will be present in the merged result; some people find
this behavior confusing. It occurs because only the heads and the merge base
diff --git a/Documentation/technical/api-parse-options.txt b/Documentation/technical/api-parse-options.txt
index 5a60bbf..acfd5dc 100644
--- a/Documentation/technical/api-parse-options.txt
+++ b/Documentation/technical/api-parse-options.txt
@@ -198,11 +198,6 @@
The filename will be prefixed by passing the filename along with
the prefix argument of `parse_options()` to `prefix_filename()`.
-`OPT_ARGUMENT(long, &int_var, description)`::
- Introduce a long-option argument that will be kept in `argv[]`.
- If this option was seen, `int_var` will be set to one (except
- if a `NULL` pointer was passed).
-
`OPT_NUMBER_CALLBACK(&var, description, func_ptr)`::
Recognize numerical options like -123 and feed the integer as
if it was an argument to the function given by `func_ptr`.
diff --git a/Documentation/technical/api-trace2.txt b/Documentation/technical/api-trace2.txt
index 037a91c..bb13ca3 100644
--- a/Documentation/technical/api-trace2.txt
+++ b/Documentation/technical/api-trace2.txt
@@ -128,7 +128,7 @@
------------
$ cat ~/log.event
-{"event":"version","sid":"sid":"20190408T191610.507018Z-H9b68c35f-P000059a8","thread":"main","time":"2019-01-16T17:28:42.620713Z","file":"common-main.c","line":38,"evt":"2","exe":"2.20.1.155.g426c96fcdb"}
+{"event":"version","sid":"sid":"20190408T191610.507018Z-H9b68c35f-P000059a8","thread":"main","time":"2019-01-16T17:28:42.620713Z","file":"common-main.c","line":38,"evt":"3","exe":"2.20.1.155.g426c96fcdb"}
{"event":"start","sid":"20190408T191610.507018Z-H9b68c35f-P000059a8","thread":"main","time":"2019-01-16T17:28:42.621027Z","file":"common-main.c","line":39,"t_abs":0.001173,"argv":["git","version"]}
{"event":"cmd_name","sid":"20190408T191610.507018Z-H9b68c35f-P000059a8","thread":"main","time":"2019-01-16T17:28:42.621122Z","file":"git.c","line":432,"name":"version","hierarchy":"version"}
{"event":"exit","sid":"20190408T191610.507018Z-H9b68c35f-P000059a8","thread":"main","time":"2019-01-16T17:28:42.621236Z","file":"git.c","line":662,"t_abs":0.001227,"code":0}
@@ -391,7 +391,7 @@
{
"event":"version",
...
- "evt":"2", # EVENT format version
+ "evt":"3", # EVENT format version
"exe":"2.20.1.155.g426c96fcdb" # git version
}
------------
@@ -493,6 +493,20 @@
}
------------
+`"cmd_ancestry"`::
+ This event contains the text command name for the parent (and earlier
+ generations of parents) of the current process, in an array ordered from
+ nearest parent to furthest great-grandparent. It may not be implemented
+ on all platforms.
++
+------------
+{
+ "event":"cmd_ancestry",
+ ...
+ "ancestry":["bash","tmux: server","systemd"]
+}
+------------
+
`"cmd_name"`::
This event contains the command name for this git process
and the hierarchy of commands from parent git processes.
@@ -599,6 +613,46 @@
So this time will be slightly larger than the atexit time reported by
the child process itself.
+`"child_ready"`::
+ This event is generated after the current process has started
+ a background process and released all handles to it.
++
+------------
+{
+ "event":"child_ready",
+ ...
+ "child_id":2,
+ "pid":14708, # child PID
+ "ready":"ready", # child ready state
+ "t_rel":0.110605 # observed run-time of child process
+}
+------------
++
+Note that the session-id of the child process is not available to
+the current/spawning process, so the child's PID is reported here as
+a hint for post-processing. (But it is only a hint because the child
+process may be a shell script which doesn't have a session-id.)
++
+This event is generated after the child is started in the background
+and given a little time to boot up and start working. If the child
+startups normally and while the parent is still waiting, the "ready"
+field will have the value "ready".
+If the child is too slow to start and the parent times out, the field
+will have the value "timeout".
+If the child starts but the parent is unable to probe it, the field
+will have the value "error".
++
+After the parent process emits this event, it will release all of its
+handles to the child process and treat the child as a background
+daemon. So even if the child does eventually finish booting up,
+the parent will not emit an updated event.
++
+Note that the `t_rel` field contains the observed run time in seconds
+when the parent released the child process into the background.
+The child is assumed to be a long-running daemon process and may
+outlive the parent process. So the parent's child event times should
+not be compared to the child's atexit times.
+
`"exec"`::
This event is generated before git attempts to `exec()`
another command rather than starting a child process.
diff --git a/Documentation/technical/bitmap-format.txt b/Documentation/technical/bitmap-format.txt
index f8c18a0..04b3ec2 100644
--- a/Documentation/technical/bitmap-format.txt
+++ b/Documentation/technical/bitmap-format.txt
@@ -1,6 +1,44 @@
GIT bitmap v1 format
====================
+== Pack and multi-pack bitmaps
+
+Bitmaps store reachability information about the set of objects in a packfile,
+or a multi-pack index (MIDX). The former is defined obviously, and the latter is
+defined as the union of objects in packs contained in the MIDX.
+
+A bitmap may belong to either one pack, or the repository's multi-pack index (if
+it exists). A repository may have at most one bitmap.
+
+An object is uniquely described by its bit position within a bitmap:
+
+ - If the bitmap belongs to a packfile, the __n__th bit corresponds to
+ the __n__th object in pack order. For a function `offset` which maps
+ objects to their byte offset within a pack, pack order is defined as
+ follows:
+
+ o1 <= o2 <==> offset(o1) <= offset(o2)
+
+ - If the bitmap belongs to a MIDX, the __n__th bit corresponds to the
+ __n__th object in MIDX order. With an additional function `pack` which
+ maps objects to the pack they were selected from by the MIDX, MIDX order
+ is defined as follows:
+
+ o1 <= o2 <==> pack(o1) <= pack(o2) /\ offset(o1) <= offset(o2)
+
+ The ordering between packs is done according to the MIDX's .rev file.
+ Notably, the preferred pack sorts ahead of all other packs.
+
+The on-disk representation (described below) of a bitmap is the same regardless
+of whether or not that bitmap belongs to a packfile or a MIDX. The only
+difference is the interpretation of the bits, which is described above.
+
+Certain bitmap extensions are supported (see: Appendix B). No extensions are
+required for bitmaps corresponding to packfiles. For bitmaps that correspond to
+MIDXs, both the bit-cache and rev-cache extensions are required.
+
+== On-disk format
+
- A header appears at the beginning:
4-byte signature: {'B', 'I', 'T', 'M'}
@@ -14,17 +52,19 @@
The following flags are supported:
- BITMAP_OPT_FULL_DAG (0x1) REQUIRED
- This flag must always be present. It implies that the bitmap
- index has been generated for a packfile with full closure
- (i.e. where every single object in the packfile can find
- its parent links inside the same packfile). This is a
- requirement for the bitmap index format, also present in JGit,
- that greatly reduces the complexity of the implementation.
+ This flag must always be present. It implies that the
+ bitmap index has been generated for a packfile or
+ multi-pack index (MIDX) with full closure (i.e. where
+ every single object in the packfile/MIDX can find its
+ parent links inside the same packfile/MIDX). This is a
+ requirement for the bitmap index format, also present in
+ JGit, that greatly reduces the complexity of the
+ implementation.
- BITMAP_OPT_HASH_CACHE (0x4)
If present, the end of the bitmap file contains
`N` 32-bit name-hash values, one per object in the
- pack. The format and meaning of the name-hash is
+ pack/MIDX. The format and meaning of the name-hash is
described below.
4-byte entry count (network byte order)
@@ -33,7 +73,8 @@
20-byte checksum
- The SHA1 checksum of the pack this bitmap index belongs to.
+ The SHA1 checksum of the pack/MIDX this bitmap index
+ belongs to.
- 4 EWAH bitmaps that act as type indexes
@@ -50,7 +91,7 @@
- Tags
In each bitmap, the `n`th bit is set to true if the `n`th object
- in the packfile is of that type.
+ in the packfile or multi-pack index is of that type.
The obvious consequence is that the OR of all 4 bitmaps will result
in a full set (all bits set), and the AND of all 4 bitmaps will
@@ -62,8 +103,9 @@
Each entry contains the following:
- 4-byte object position (network byte order)
- The position **in the index for the packfile** where the
- bitmap for this commit is found.
+ The position **in the index for the packfile or
+ multi-pack index** where the bitmap for this commit is
+ found.
- 1-byte XOR-offset
The xor offset used to compress this bitmap. For an entry
@@ -146,10 +188,11 @@
---------------
If the BITMAP_OPT_HASH_CACHE flag is set, the end of the bitmap contains
-a cache of 32-bit values, one per object in the pack. The value at
+a cache of 32-bit values, one per object in the pack/MIDX. The value at
position `i` is the hash of the pathname at which the `i`th object
-(counting in index order) in the pack can be found. This can be fed
-into the delta heuristics to compare objects with similar pathnames.
+(counting in index or multi-pack index order) in the pack/MIDX can be found.
+This can be fed into the delta heuristics to compare objects with similar
+pathnames.
The hash algorithm used is:
diff --git a/Documentation/technical/http-protocol.txt b/Documentation/technical/http-protocol.txt
index 96d89ea..cc5126c 100644
--- a/Documentation/technical/http-protocol.txt
+++ b/Documentation/technical/http-protocol.txt
@@ -225,6 +225,9 @@
Documentation/technical/pack-protocol.txt) as a colon-separated string
in the Git-Protocol HTTP header.
+Uses the `--http-backend-info-refs` option to
+linkgit:git-upload-pack[1].
+
Dumb Server Response
^^^^^^^^^^^^^^^^^^^^
Dumb servers MUST respond with the dumb server reply format.
diff --git a/Documentation/technical/multi-pack-index.txt b/Documentation/technical/multi-pack-index.txt
index fb68897..86f40f2 100644
--- a/Documentation/technical/multi-pack-index.txt
+++ b/Documentation/technical/multi-pack-index.txt
@@ -36,7 +36,9 @@
directory of an alternate. It refers only to packfiles in that
same directory.
-- The core.multiPackIndex config setting must be on to consume MIDX files.
+- The core.multiPackIndex config setting must be on (which is the
+ default) to consume MIDX files. Setting it to `false` prevents
+ Git from reading a MIDX file, even if one exists.
- The file format includes parameters for the object ID hash
function, so a future change of hash algorithm does not require
@@ -71,14 +73,10 @@
still reducing the number of binary searches required for object
lookups.
-- The reachability bitmap is currently paired directly with a single
- packfile, using the pack-order as the object order to hopefully
- compress the bitmaps well using run-length encoding. This could be
- extended to pair a reachability bitmap with a multi-pack-index. If
- the multi-pack-index is extended to store a "stable object order"
+- If the multi-pack-index is extended to store a "stable object order"
(a function Order(hash) = integer that is constant for a given hash,
- even as the multi-pack-index is updated) then a reachability bitmap
- could point to a multi-pack-index and be updated independently.
+ even as the multi-pack-index is updated) then MIDX bitmaps could be
+ updated independently of the MIDX.
- Packfiles can be marked as "special" using empty files that share
the initial name but replace ".pack" with ".keep" or ".promisor".
diff --git a/Documentation/technical/protocol-v2.txt b/Documentation/technical/protocol-v2.txt
index 1040d85..21e8258 100644
--- a/Documentation/technical/protocol-v2.txt
+++ b/Documentation/technical/protocol-v2.txt
@@ -42,7 +42,8 @@
In general a client can request to speak protocol v2 by sending
`version=2` through the respective side-channel for the transport being
used which inevitably sets `GIT_PROTOCOL`. More information can be
-found in `pack-protocol.txt` and `http-protocol.txt`. In all cases the
+found in `pack-protocol.txt` and `http-protocol.txt`, as well as the
+`GIT_PROTOCOL` definition in `git.txt`. In all cases the
response from the server is the capability advertisement.
Git Transport
@@ -58,6 +59,8 @@
When using either the ssh:// or file:// transport, the GIT_PROTOCOL
environment variable must be set explicitly to include "version=2".
+The server may need to be configured to allow this environment variable
+to pass.
HTTP Transport
~~~~~~~~~~~~~~
@@ -81,6 +84,12 @@
Subsequent requests are then made directly to the service
`$GIT_URL/git-upload-pack`. (This works the same for git-receive-pack).
+Uses the `--http-backend-info-refs` option to
+linkgit:git-upload-pack[1].
+
+The server may need to be configured to pass this header's contents via
+the `GIT_PROTOCOL` variable. See the discussion in `git-http-backend.txt`.
+
Capability Advertisement
------------------------
@@ -190,7 +199,11 @@
Show peeled tags.
ref-prefix <prefix>
When specified, only references having a prefix matching one of
- the provided prefixes are displayed.
+ the provided prefixes are displayed. Multiple instances may be
+ given, in which case references matching any prefix will be
+ shown. Note that this is purely for optimization; a server MAY
+ show refs not matching the prefix if it chooses, and clients
+ should filter the result themselves.
If the 'unborn' feature is advertised the following argument can be
included in the client's request.
diff --git a/Documentation/technical/signature-format.txt b/Documentation/technical/signature-format.txt
index 2c9406a..166721b 100644
--- a/Documentation/technical/signature-format.txt
+++ b/Documentation/technical/signature-format.txt
@@ -13,6 +13,22 @@
and end with `-----END PGP SIGNATURE-----`, unless gpg is told to
produce RFC1991 signatures which use `MESSAGE` instead of `SIGNATURE`.
+Signatures sometimes appear as a part of the normal payload
+(e.g. a signed tag has the signature block appended after the payload
+that the signature applies to), and sometimes appear in the value of
+an object header (e.g. a merge commit that merged a signed tag would
+have the entire tag contents on its "mergetag" header). In the case
+of the latter, the usual multi-line formatting rule for object
+headers applies. I.e. the second and subsequent lines are prefixed
+with a SP to signal that the line is continued from the previous
+line.
+
+This is even true for an originally empty line. In the following
+examples, the end of line that ends with a whitespace letter is
+highlighted with a `$` sign; if you are trying to recreate these
+example by hand, do not cut and paste them---they are there
+primarily to highlight extra whitespace at the end of some lines.
+
The signed payload and the way the signature is embedded depends
on the type of the object resp. transaction.
@@ -78,7 +94,7 @@
committer C O Mitter <committer@example.com> 1465981137 +0000
gpgsig -----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
-
+ $
iQEcBAABAgAGBQJXYRjRAAoJEGEJLoW3InGJ3IwIAIY4SA6GxY3BjL60YyvsJPh/
HRCJwH+w7wt3Yc/9/bW2F+gF72kdHOOs2jfv+OZhq0q4OAN6fvVSczISY/82LpS7
DVdMQj2/YcHDT4xrDNBnXnviDO9G7am/9OE77kEbXrp7QPxvhjkicHNwy2rEflAA
@@ -128,13 +144,13 @@
type commit
tag signedtag
tagger C O Mitter <committer@example.com> 1465981006 +0000
-
+ $
signed tag
-
+ $
signed tag message body
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
-
+ $
iQEcBAABAgAGBQJXYRhOAAoJEGEJLoW3InGJklkIAIcnhL7RwEb/+QeX9enkXhxn
rxfdqrvWd1K80sl2TOt8Bg/NYwrUBw/RWJ+sg/hhHp4WtvE1HDGHlkEz3y11Lkuh
8tSxS3qKTxXUGozyPGuE90sJfExhZlW4knIQ1wt/yWqM+33E9pN4hzPqLwyrdods
diff --git a/Documentation/user-manual.txt b/Documentation/user-manual.txt
index 9624059..865074b 100644
--- a/Documentation/user-manual.txt
+++ b/Documentation/user-manual.txt
@@ -3190,7 +3190,7 @@
not being pointed to by any commit or tree, so it's now a dangling blob
object.
-Similarly, when the "recursive" merge strategy runs, and finds that
+Similarly, when the "ort" merge strategy runs, and finds that
there are criss-cross merges and thus more than one merge base (which is
fairly unusual, but it does happen), it will generate one temporary
midway tree (or possibly even more, if you had lots of criss-crossing
diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
index 86a3a28..3ae7610 100755
--- a/GIT-VERSION-GEN
+++ b/GIT-VERSION-GEN
@@ -1,7 +1,7 @@
#!/bin/sh
GVF=GIT-VERSION-FILE
-DEF_VER=v2.33.3
+DEF_VER=v2.34.3
LF='
'
diff --git a/INSTALL b/INSTALL
index 66389ce..4140a3f 100644
--- a/INSTALL
+++ b/INSTALL
@@ -138,12 +138,15 @@
BLK_SHA1. Also included is a version optimized for PowerPC
(PPC_SHA1).
- - "libcurl" library is used by git-http-fetch, git-fetch, and, if
- the curl version >= 7.34.0, for git-imap-send. You might also
- want the "curl" executable for debugging purposes. If you do not
- use http:// or https:// repositories, and do not want to put
- patches into an IMAP mailbox, you do not have to have them
- (use NO_CURL).
+ - "libcurl" library is used for fetching and pushing
+ repositories over http:// or https://, as well as by
+ git-imap-send if the curl version is >= 7.34.0. If you do
+ not need that functionality, use NO_CURL to build without
+ it.
+
+ Git requires version "7.19.4" or later of "libcurl" to build
+ without NO_CURL. This version requirement may be bumped in
+ the future.
- "expat" library; git-http-push uses it for remote lock
management over DAV. Similar to "curl" above, this is optional
diff --git a/Makefile b/Makefile
index 3df0ab5..12be39a 100644
--- a/Makefile
+++ b/Makefile
@@ -409,15 +409,6 @@
# Define NEEDS_LIBRT if your platform requires linking with librt (glibc version
# before 2.17) for clock_gettime and CLOCK_MONOTONIC.
#
-# Define USE_PARENS_AROUND_GETTEXT_N to "yes" if your compiler happily
-# compiles the following initialization:
-#
-# static const char s[] = ("FOO");
-#
-# and define it to "no" if you need to remove the parentheses () around the
-# constant. The default is "auto", which means to use parentheses if your
-# compiler is detected to support it.
-#
# Define HAVE_BSD_SYSCTL if your platform has a BSD-compatible sysctl function.
#
# Define HAVE_GETDELIM if your system has the getdelim() function.
@@ -465,6 +456,9 @@
# the global variable _wpgmptr containing the absolute path of the current
# executable (this is the case on Windows).
#
+# INSTALL_STRIP can be set to "-s" to strip binaries during installation,
+# if your $(INSTALL) command supports the option.
+#
# Define GENERATE_COMPILATION_DATABASE to "yes" to generate JSON compilation
# database entries during compilation if your compiler supports it, using the
# `-MJ` flag. The JSON entries will be placed in the `compile_commands/`
@@ -495,10 +489,9 @@
# setting this flag the exceptions are removed, and all of
# -Wextra is used.
#
-# pedantic:
+# no-pedantic:
#
-# Enable -pedantic compilation. This also disables
-# USE_PARENS_AROUND_GETTEXT_N to produce only relevant warnings.
+# Disable -pedantic compilation.
GIT-VERSION-FILE: FORCE
@$(SHELL_PATH) ./GIT-VERSION-GEN
@@ -616,7 +609,6 @@
SCRIPT_SH += git-web--browse.sh
SCRIPT_LIB += git-mergetool--lib
-SCRIPT_LIB += git-rebase--preserve-merges
SCRIPT_LIB += git-sh-i18n
SCRIPT_LIB += git-sh-setup
@@ -824,6 +816,10 @@
GENERATED_H += command-list.h
GENERATED_H += config-list.h
+GENERATED_H += hook-list.h
+
+.PHONY: generated-hdrs
+generated-hdrs: $(GENERATED_H)
LIB_H := $(sort $(patsubst ./%,%,$(shell git ls-files '*.h' ':!t/' ':!Documentation/' 2>/dev/null || \
$(FIND) . \
@@ -909,6 +905,7 @@
LIB_OBJS += hashmap.o
LIB_OBJS += help.o
LIB_OBJS += hex.o
+LIB_OBJS += hook.o
LIB_OBJS += ident.o
LIB_OBJS += json-writer.o
LIB_OBJS += kwset.o
@@ -1221,6 +1218,9 @@
SPARSE_FLAGS ?=
SP_EXTRA_FLAGS = -Wno-universal-initializer
+# For informing GIT-BUILD-OPTIONS of the SANITIZE=leak target
+SANITIZE_LEAK =
+
# For the 'coccicheck' target; setting SPATCH_BATCH_SIZE higher will
# usually result in less CPU usage at the cost of higher peak memory.
# Setting it to 0 will feed all files in a single spatch invocation.
@@ -1265,6 +1265,7 @@
endif
ifneq ($(filter leak,$(SANITIZERS)),)
BASIC_CFLAGS += -DSUPPRESS_ANNOTATED_LEAKS
+SANITIZE_LEAK = YesCompiledWithIt
endif
ifneq ($(filter address,$(SANITIZERS)),)
NO_REGEX = NeededForASAN
@@ -1285,6 +1286,7 @@
ifeq ($(COMPUTE_HEADER_DEPENDENCIES),auto)
dep_check = $(shell $(CC) $(ALL_CFLAGS) \
+ -Wno-pedantic \
-c -MF /dev/null -MQ /dev/null -MMD -MP \
-x c /dev/null -o /dev/null 2>&1; \
echo $$?)
@@ -1310,6 +1312,7 @@
ifeq ($(GENERATE_COMPILATION_DATABASE),yes)
compdb_check = $(shell $(CC) $(ALL_CFLAGS) \
+ -Wno-pedantic \
-c -MJ /dev/null \
-x c /dev/null -o /dev/null 2>&1; \
echo $$?)
@@ -1347,14 +1350,6 @@
BASIC_CFLAGS += -Dsocklen_t=$(SOCKLEN_T)
endif
-ifeq (yes,$(USE_PARENS_AROUND_GETTEXT_N))
- BASIC_CFLAGS += -DUSE_PARENS_AROUND_GETTEXT_N=1
-else
-ifeq (no,$(USE_PARENS_AROUND_GETTEXT_N))
- BASIC_CFLAGS += -DUSE_PARENS_AROUND_GETTEXT_N=0
-endif
-endif
-
ifeq ($(uname_S),Darwin)
ifndef NO_FINK
ifeq ($(shell test -d /sw/lib && echo y),y)
@@ -1436,15 +1431,8 @@
REMOTE_CURL_NAMES = $(REMOTE_CURL_PRIMARY) $(REMOTE_CURL_ALIASES)
PROGRAM_OBJS += http-fetch.o
PROGRAMS += $(REMOTE_CURL_NAMES)
- curl_check := $(shell (echo 070908; $(CURL_CONFIG) --vernum | sed -e '/^70[BC]/s/^/0/') 2>/dev/null | sort -r | sed -ne 2p)
- ifeq "$(curl_check)" "070908"
- ifndef NO_EXPAT
- PROGRAM_OBJS += http-push.o
- else
- EXCLUDED_PROGRAMS += git-http-push
- endif
- else
- EXCLUDED_PROGRAMS += git-http-push
+ ifndef NO_EXPAT
+ PROGRAM_OBJS += http-push.o
endif
curl_check := $(shell (echo 072200; $(CURL_CONFIG) --vernum | sed -e '/^70[BC]/s/^/0/') 2>/dev/null | sort -r | sed -ne 2p)
ifeq "$(curl_check)" "072200"
@@ -1917,6 +1905,10 @@
BASIC_CFLAGS += '-DPROCFS_EXECUTABLE_PATH="$(procfs_executable_path_SQ)"'
endif
+ifndef HAVE_PLATFORM_PROCINFO
+ COMPAT_OBJS += compat/stub/procinfo.o
+endif
+
ifdef HAVE_NS_GET_EXECUTABLE_PATH
BASIC_CFLAGS += -DHAVE_NS_GET_EXECUTABLE_PATH
endif
@@ -2223,8 +2215,9 @@
$(filter %.o,$^) $(LIBS)
help.sp help.s help.o: command-list.h
+hook.sp hook.s hook.o: hook-list.h
-builtin/help.sp builtin/help.s builtin/help.o: config-list.h GIT-PREFIX
+builtin/help.sp builtin/help.s builtin/help.o: config-list.h hook-list.h GIT-PREFIX
builtin/help.sp builtin/help.s builtin/help.o: EXTRA_CPPFLAGS = \
'-DGIT_HTML_PATH="$(htmldir_relative_SQ)"' \
'-DGIT_MAN_PATH="$(mandir_relative_SQ)"' \
@@ -2247,15 +2240,17 @@
config-list.h: generate-configlist.sh
config-list.h: Documentation/*config.txt Documentation/config/*.txt
- $(QUIET_GEN)$(SHELL_PATH) ./generate-configlist.sh \
- >$@+ && mv $@+ $@
+ $(QUIET_GEN)$(SHELL_PATH) ./generate-configlist.sh >$@
command-list.h: generate-cmdlist.sh command-list.txt
command-list.h: $(wildcard Documentation/git*.txt)
$(QUIET_GEN)$(SHELL_PATH) ./generate-cmdlist.sh \
$(patsubst %,--exclude-program %,$(EXCLUDED_PROGRAMS)) \
- command-list.txt >$@+ && mv $@+ $@
+ command-list.txt >$@
+
+hook-list.h: generate-hooklist.sh Documentation/githooks.txt
+ $(QUIET_GEN)$(SHELL_PATH) ./generate-hooklist.sh >$@
SCRIPT_DEFINES = $(SHELL_PATH_SQ):$(DIFF_SQ):$(GIT_VERSION):\
$(localedir_SQ):$(NO_CURL):$(USE_GETTEXT_SCHEME):$(SANE_TOOL_PATH_SQ):\
@@ -2517,13 +2512,6 @@
include $(dep_files_present)
endif
else
-# Dependencies on header files, for platforms that do not support
-# the gcc -MMD option.
-#
-# Dependencies on automatically generated headers such as command-list.h
-# should _not_ be included here, since they are necessary even when
-# building an object for the first time.
-
$(OBJECTS): $(LIB_H) $(GENERATED_H)
endif
@@ -2648,7 +2636,6 @@
--keyword=__ --keyword=N__ --keyword="__n:1,2"
LOCALIZED_C = $(C_OBJ:o=c) $(LIB_H) $(GENERATED_H)
LOCALIZED_SH = $(SCRIPT_SH)
-LOCALIZED_SH += git-rebase--preserve-merges.sh
LOCALIZED_SH += git-sh-setup.sh
LOCALIZED_PERL = $(SCRIPT_PERL)
@@ -2745,19 +2732,25 @@
| sed -e 's|^\./||' \
)
-$(ETAGS_TARGET): FORCE
- $(QUIET_GEN)$(RM) "$(ETAGS_TARGET)+" && \
- $(FIND_SOURCE_FILES) | xargs etags -a -o "$(ETAGS_TARGET)+" && \
- mv "$(ETAGS_TARGET)+" "$(ETAGS_TARGET)"
+FOUND_SOURCE_FILES = $(shell $(FIND_SOURCE_FILES))
-tags: FORCE
- $(QUIET_GEN)$(RM) tags+ && \
- $(FIND_SOURCE_FILES) | xargs ctags -a -o tags+ && \
- mv tags+ tags
+$(ETAGS_TARGET): $(FOUND_SOURCE_FILES)
+ $(QUIET_GEN)$(RM) $@+ && \
+ echo $(FOUND_SOURCE_FILES) | xargs etags -a -o $@+ && \
+ mv $@+ $@
-cscope:
- $(RM) cscope*
- $(FIND_SOURCE_FILES) | xargs cscope -b
+tags: $(FOUND_SOURCE_FILES)
+ $(QUIET_GEN)$(RM) $@+ && \
+ echo $(FOUND_SOURCE_FILES) | xargs ctags -a -o $@+ && \
+ mv $@+ $@
+
+cscope.out: $(FOUND_SOURCE_FILES)
+ $(QUIET_GEN)$(RM) $@+ && \
+ echo $(FOUND_SOURCE_FILES) | xargs cscope -f$@+ -b && \
+ mv $@+ $@
+
+.PHONY: cscope
+cscope: cscope.out
### Detect prefix changes
TRACK_PREFIX = $(bindir_SQ):$(gitexecdir_SQ):$(template_dir_SQ):$(prefix_SQ):\
@@ -2807,6 +2800,7 @@
@echo NO_UNIX_SOCKETS=\''$(subst ','\'',$(subst ','\'',$(NO_UNIX_SOCKETS)))'\' >>$@+
@echo PAGER_ENV=\''$(subst ','\'',$(subst ','\'',$(PAGER_ENV)))'\' >>$@+
@echo DC_SHA1=\''$(subst ','\'',$(subst ','\'',$(DC_SHA1)))'\' >>$@+
+ @echo SANITIZE_LEAK=\''$(subst ','\'',$(subst ','\'',$(SANITIZE_LEAK)))'\' >>$@+
@echo X=\'$(X)\' >>$@+
ifdef TEST_OUTPUT_DIRECTORY
@echo TEST_OUTPUT_DIRECTORY=\''$(subst ','\'',$(subst ','\'',$(TEST_OUTPUT_DIRECTORY)))'\' >>$@+
@@ -2848,6 +2842,11 @@
ifdef GIT_TEST_PERL_FATAL_WARNINGS
@echo GIT_TEST_PERL_FATAL_WARNINGS=\''$(subst ','\'',$(subst ','\'',$(GIT_TEST_PERL_FATAL_WARNINGS)))'\' >>$@+
endif
+ifdef RUNTIME_PREFIX
+ @echo RUNTIME_PREFIX=\'true\' >>$@+
+else
+ @echo RUNTIME_PREFIX=\'false\' >>$@+
+endif
@if cmp $@+ $@ >/dev/null 2>&1; then $(RM) $@+; else mv $@+ $@; fi
### Detect Python interpreter path changes
@@ -2902,14 +2901,16 @@
SP_OBJ = $(patsubst %.o,%.sp,$(C_OBJ))
-$(SP_OBJ): %.sp: %.c GIT-CFLAGS FORCE
+$(SP_OBJ): %.sp: %.c %.o
$(QUIET_SP)cgcc -no-compile $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) \
- $(SPARSE_FLAGS) $(SP_EXTRA_FLAGS) $<
+ -Wsparse-error \
+ $(SPARSE_FLAGS) $(SP_EXTRA_FLAGS) $< && \
+ >$@
-.PHONY: sparse $(SP_OBJ)
+.PHONY: sparse
sparse: $(SP_OBJ)
-EXCEPT_HDRS := command-list.h config-list.h unicode-width.h compat/% xdiff/%
+EXCEPT_HDRS := $(GENERATED_H) unicode-width.h compat/% xdiff/%
ifndef GCRYPT_SHA256
EXCEPT_HDRS += sha256/gcrypt.h
endif
@@ -2931,7 +2932,8 @@
style:
git clang-format --style file --diff --extensions c,h
-check: config-list.h command-list.h
+.PHONY: check
+check: $(GENERATED_H)
@if sparse; \
then \
echo >&2 "Use 'make sparse' instead"; \
@@ -2941,7 +2943,7 @@
exit 1; \
fi
-FOUND_C_SOURCES = $(filter %.c,$(shell $(FIND_SOURCE_FILES)))
+FOUND_C_SOURCES = $(filter %.c,$(FOUND_SOURCE_FILES))
COCCI_SOURCES = $(filter-out $(THIRD_PARTY_SOURCES),$(FOUND_C_SOURCES))
%.cocci.patch: %.cocci $(COCCI_SOURCES)
@@ -2994,7 +2996,8 @@
endif
mergetools_instdir_SQ = $(subst ','\'',$(mergetools_instdir))
-install_bindir_programs := $(patsubst %,%$X,$(BINDIR_PROGRAMS_NEED_X)) $(BINDIR_PROGRAMS_NO_X)
+install_bindir_xprograms := $(patsubst %,%$X,$(BINDIR_PROGRAMS_NEED_X))
+install_bindir_programs := $(install_bindir_xprograms) $(BINDIR_PROGRAMS_NO_X)
.PHONY: profile-install profile-fast-install
profile-install: profile
@@ -3003,12 +3006,17 @@
profile-fast-install: profile-fast
$(MAKE) install
+INSTALL_STRIP =
+
install: all
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
- $(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
+ $(INSTALL) $(INSTALL_STRIP) $(PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
+ $(INSTALL) $(SCRIPTS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
$(INSTALL) -m 644 $(SCRIPT_LIB) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
- $(INSTALL) $(install_bindir_programs) '$(DESTDIR_SQ)$(bindir_SQ)'
+ $(INSTALL) $(INSTALL_STRIP) $(install_bindir_xprograms) '$(DESTDIR_SQ)$(bindir_SQ)'
+ $(INSTALL) $(BINDIR_PROGRAMS_NO_X) '$(DESTDIR_SQ)$(bindir_SQ)'
+
ifdef MSVC
# We DO NOT install the individual foo.o.pdb files because they
# have already been rolled up into the exe's pdb file.
@@ -3227,6 +3235,7 @@
$(RM) $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git$X
$(RM) $(TEST_PROGRAMS)
$(RM) $(FUZZ_PROGRAMS)
+ $(RM) $(SP_OBJ)
$(RM) $(HCC)
$(RM) -r bin-wrappers $(dep_dirs) $(compdb_dir) compile_commands.json
$(RM) -r po/build/
@@ -3265,7 +3274,7 @@
.PHONY: all install profile-clean cocciclean clean strip
.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
-.PHONY: FORCE cscope
+.PHONY: FORCE
### Check documentation
#
diff --git a/RelNotes b/RelNotes
index 899139d..1065723 120000
--- a/RelNotes
+++ b/RelNotes
@@ -1 +1 @@
-Documentation/RelNotes/2.33.3.txt
\ No newline at end of file
+Documentation/RelNotes/2.34.3.txt
\ No newline at end of file
diff --git a/add-interactive.c b/add-interactive.c
index 36ebdbd..6498ae1 100644
--- a/add-interactive.c
+++ b/add-interactive.c
@@ -102,8 +102,12 @@ struct prefix_item_list {
int *selected; /* for multi-selections */
size_t min_length, max_length;
};
-#define PREFIX_ITEM_LIST_INIT \
- { STRING_LIST_INIT_DUP, STRING_LIST_INIT_NODUP, NULL, 1, 4 }
+#define PREFIX_ITEM_LIST_INIT { \
+ .items = STRING_LIST_INIT_DUP, \
+ .sorted = STRING_LIST_INIT_NODUP, \
+ .min_length = 1, \
+ .max_length = 4, \
+}
static void prefix_item_list_clear(struct prefix_item_list *list)
{
diff --git a/advice.c b/advice.c
index 337e8f3..1dfc91d 100644
--- a/advice.c
+++ b/advice.c
@@ -4,37 +4,6 @@
#include "help.h"
#include "string-list.h"
-int advice_fetch_show_forced_updates = 1;
-int advice_push_update_rejected = 1;
-int advice_push_non_ff_current = 1;
-int advice_push_non_ff_matching = 1;
-int advice_push_already_exists = 1;
-int advice_push_fetch_first = 1;
-int advice_push_needs_force = 1;
-int advice_push_unqualified_ref_name = 1;
-int advice_push_ref_needs_update = 1;
-int advice_status_hints = 1;
-int advice_status_u_option = 1;
-int advice_status_ahead_behind_warning = 1;
-int advice_commit_before_merge = 1;
-int advice_reset_quiet_warning = 1;
-int advice_resolve_conflict = 1;
-int advice_sequencer_in_use = 1;
-int advice_implicit_identity = 1;
-int advice_detached_head = 1;
-int advice_set_upstream_failure = 1;
-int advice_object_name_warning = 1;
-int advice_amworkdir = 1;
-int advice_rm_hints = 1;
-int advice_add_embedded_repo = 1;
-int advice_ignored_hook = 1;
-int advice_waiting_for_editor = 1;
-int advice_graft_file_deprecated = 1;
-int advice_checkout_ambiguous_remote_branch_name = 1;
-int advice_submodule_alternate_error_strategy_die = 1;
-int advice_add_ignored_file = 1;
-int advice_add_empty_pathspec = 1;
-
static int advice_use_color = -1;
static char advice_colors[][COLOR_MAXLEN] = {
GIT_COLOR_RESET,
@@ -63,49 +32,12 @@ static const char *advise_get_color(enum color_advice ix)
}
static struct {
- const char *name;
- int *preference;
-} advice_config[] = {
- { "fetchShowForcedUpdates", &advice_fetch_show_forced_updates },
- { "pushUpdateRejected", &advice_push_update_rejected },
- { "pushNonFFCurrent", &advice_push_non_ff_current },
- { "pushNonFFMatching", &advice_push_non_ff_matching },
- { "pushAlreadyExists", &advice_push_already_exists },
- { "pushFetchFirst", &advice_push_fetch_first },
- { "pushNeedsForce", &advice_push_needs_force },
- { "pushUnqualifiedRefName", &advice_push_unqualified_ref_name },
- { "pushRefNeedsUpdate", &advice_push_ref_needs_update },
- { "statusHints", &advice_status_hints },
- { "statusUoption", &advice_status_u_option },
- { "statusAheadBehindWarning", &advice_status_ahead_behind_warning },
- { "commitBeforeMerge", &advice_commit_before_merge },
- { "resetQuiet", &advice_reset_quiet_warning },
- { "resolveConflict", &advice_resolve_conflict },
- { "sequencerInUse", &advice_sequencer_in_use },
- { "implicitIdentity", &advice_implicit_identity },
- { "detachedHead", &advice_detached_head },
- { "setUpstreamFailure", &advice_set_upstream_failure },
- { "objectNameWarning", &advice_object_name_warning },
- { "amWorkDir", &advice_amworkdir },
- { "rmHints", &advice_rm_hints },
- { "addEmbeddedRepo", &advice_add_embedded_repo },
- { "ignoredHook", &advice_ignored_hook },
- { "waitingForEditor", &advice_waiting_for_editor },
- { "graftFileDeprecated", &advice_graft_file_deprecated },
- { "checkoutAmbiguousRemoteBranchName", &advice_checkout_ambiguous_remote_branch_name },
- { "submoduleAlternateErrorStrategyDie", &advice_submodule_alternate_error_strategy_die },
- { "addIgnoredFile", &advice_add_ignored_file },
- { "addEmptyPathspec", &advice_add_empty_pathspec },
-
- /* make this an alias for backward compatibility */
- { "pushNonFastForward", &advice_push_update_rejected }
-};
-
-static struct {
const char *key;
int enabled;
} advice_setting[] = {
[ADVICE_ADD_EMBEDDED_REPO] = { "addEmbeddedRepo", 1 },
+ [ADVICE_ADD_EMPTY_PATHSPEC] = { "addEmptyPathspec", 1 },
+ [ADVICE_ADD_IGNORED_FILE] = { "addIgnoredFile", 1 },
[ADVICE_AM_WORK_DIR] = { "amWorkDir", 1 },
[ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME] = { "checkoutAmbiguousRemoteBranchName", 1 },
[ADVICE_COMMIT_BEFORE_MERGE] = { "commitBeforeMerge", 1 },
@@ -133,6 +65,7 @@ static struct {
[ADVICE_RM_HINTS] = { "rmHints", 1 },
[ADVICE_SEQUENCER_IN_USE] = { "sequencerInUse", 1 },
[ADVICE_SET_UPSTREAM_FAILURE] = { "setUpstreamFailure", 1 },
+ [ADVICE_SKIPPED_CHERRY_PICKS] = { "skippedCherryPicks", 1 },
[ADVICE_STATUS_AHEAD_BEHIND_WARNING] = { "statusAheadBehindWarning", 1 },
[ADVICE_STATUS_HINTS] = { "statusHints", 1 },
[ADVICE_STATUS_U_OPTION] = { "statusUoption", 1 },
@@ -221,13 +154,6 @@ int git_default_advice_config(const char *var, const char *value)
if (!skip_prefix(var, "advice.", &k))
return 0;
- for (i = 0; i < ARRAY_SIZE(advice_config); i++) {
- if (strcasecmp(k, advice_config[i].name))
- continue;
- *advice_config[i].preference = git_config_bool(var, value);
- break;
- }
-
for (i = 0; i < ARRAY_SIZE(advice_setting); i++) {
if (strcasecmp(k, advice_setting[i].key))
continue;
@@ -262,7 +188,7 @@ int error_resolve_conflict(const char *me)
error(_("It is not possible to %s because you have unmerged files."),
me);
- if (advice_resolve_conflict)
+ if (advice_enabled(ADVICE_RESOLVE_CONFLICT))
/*
* Message used both when 'git commit' fails and when
* other commands doing a merge do.
@@ -281,7 +207,7 @@ void NORETURN die_resolve_conflict(const char *me)
void NORETURN die_conclude_merge(void)
{
error(_("You have not concluded your merge (MERGE_HEAD exists)."));
- if (advice_resolve_conflict)
+ if (advice_enabled(ADVICE_RESOLVE_CONFLICT))
advise(_("Please, commit your changes before merging."));
die(_("Exiting because of unfinished merge."));
}
@@ -298,15 +224,16 @@ void advise_on_updating_sparse_paths(struct string_list *pathspec_list)
if (!pathspec_list->nr)
return;
- fprintf(stderr, _("The following pathspecs didn't match any"
- " eligible path, but they do match index\n"
- "entries outside the current sparse checkout:\n"));
+ fprintf(stderr, _("The following paths and/or pathspecs matched paths that exist\n"
+ "outside of your sparse-checkout definition, so will not be\n"
+ "updated in the index:\n"));
for_each_string_list_item(item, pathspec_list)
fprintf(stderr, "%s\n", item->string);
advise_if_enabled(ADVICE_UPDATE_SPARSE_PATH,
- _("Disable or modify the sparsity rules if you intend"
- " to update such entries."));
+ _("If you intend to update such entries, try one of the following:\n"
+ "* Use the --sparse option.\n"
+ "* Disable or modify the sparsity rules."));
}
void detach_advice(const char *new_name)
diff --git a/advice.h b/advice.h
index a7227ca..601265f 100644
--- a/advice.h
+++ b/advice.h
@@ -5,37 +5,6 @@
struct string_list;
-extern int advice_fetch_show_forced_updates;
-extern int advice_push_update_rejected;
-extern int advice_push_non_ff_current;
-extern int advice_push_non_ff_matching;
-extern int advice_push_already_exists;
-extern int advice_push_fetch_first;
-extern int advice_push_needs_force;
-extern int advice_push_unqualified_ref_name;
-extern int advice_push_ref_needs_update;
-extern int advice_status_hints;
-extern int advice_status_u_option;
-extern int advice_status_ahead_behind_warning;
-extern int advice_commit_before_merge;
-extern int advice_reset_quiet_warning;
-extern int advice_resolve_conflict;
-extern int advice_sequencer_in_use;
-extern int advice_implicit_identity;
-extern int advice_detached_head;
-extern int advice_set_upstream_failure;
-extern int advice_object_name_warning;
-extern int advice_amworkdir;
-extern int advice_rm_hints;
-extern int advice_add_embedded_repo;
-extern int advice_ignored_hook;
-extern int advice_waiting_for_editor;
-extern int advice_graft_file_deprecated;
-extern int advice_checkout_ambiguous_remote_branch_name;
-extern int advice_submodule_alternate_error_strategy_die;
-extern int advice_add_ignored_file;
-extern int advice_add_empty_pathspec;
-
/*
* To add a new advice, you need to:
* Define a new advice_type.
@@ -45,6 +14,8 @@ extern int advice_add_empty_pathspec;
*/
enum advice_type {
ADVICE_ADD_EMBEDDED_REPO,
+ ADVICE_ADD_EMPTY_PATHSPEC,
+ ADVICE_ADD_IGNORED_FILE,
ADVICE_AM_WORK_DIR,
ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME,
ADVICE_COMMIT_BEFORE_MERGE,
@@ -75,6 +46,7 @@ extern int advice_add_empty_pathspec;
ADVICE_SUBMODULE_ALTERNATE_ERROR_STRATEGY_DIE,
ADVICE_UPDATE_SPARSE_PATH,
ADVICE_WAITING_FOR_EDITOR,
+ ADVICE_SKIPPED_CHERRY_PICKS,
};
int git_default_advice_config(const char *var, const char *value);
diff --git a/attr.c b/attr.c
index d029e68..79adaa5 100644
--- a/attr.c
+++ b/attr.c
@@ -14,6 +14,7 @@
#include "utf8.h"
#include "quote.h"
#include "thread-utils.h"
+#include "dir.h"
const char git_attr__true[] = "(builtin)true";
const char git_attr__false[] = "\0(builtin)false";
@@ -744,6 +745,20 @@ static struct attr_stack *read_attr_from_index(struct index_state *istate,
if (!istate)
return NULL;
+ /*
+ * The .gitattributes file only applies to files within its
+ * parent directory. In the case of cone-mode sparse-checkout,
+ * the .gitattributes file is sparse if and only if all paths
+ * within that directory are also sparse. Thus, don't load the
+ * .gitattributes file since it will not matter.
+ *
+ * In the case of a sparse index, it is critical that we don't go
+ * looking for a .gitattributes file, as doing so would cause the
+ * index to expand.
+ */
+ if (!path_in_cone_mode_sparse_checkout(path, istate))
+ return NULL;
+
buf = read_blob_data_from_index(istate, path, NULL);
if (!buf)
return NULL;
diff --git a/bisect.c b/bisect.c
index af2863d..888949f 100644
--- a/bisect.c
+++ b/bisect.c
@@ -23,7 +23,6 @@ static struct oid_array skipped_revs;
static struct object_id *current_bad_oid;
static const char *argv_checkout[] = {"checkout", "-q", NULL, "--", NULL};
-static const char *argv_show_branch[] = {"show-branch", NULL, NULL};
static const char *term_bad;
static const char *term_good;
@@ -728,7 +727,9 @@ static int is_expected_rev(const struct object_id *oid)
static enum bisect_error bisect_checkout(const struct object_id *bisect_rev, int no_checkout)
{
char bisect_rev_hex[GIT_MAX_HEXSZ + 1];
- enum bisect_error res = BISECT_OK;
+ struct commit *commit;
+ struct pretty_print_context pp = {0};
+ struct strbuf commit_msg = STRBUF_INIT;
oid_to_hex_r(bisect_rev_hex, bisect_rev);
update_ref(NULL, "BISECT_EXPECTED_REV", bisect_rev, NULL, 0, UPDATE_REFS_DIE_ON_ERR);
@@ -738,24 +739,21 @@ static enum bisect_error bisect_checkout(const struct object_id *bisect_rev, int
update_ref(NULL, "BISECT_HEAD", bisect_rev, NULL, 0,
UPDATE_REFS_DIE_ON_ERR);
} else {
- res = run_command_v_opt(argv_checkout, RUN_GIT_CMD);
- if (res)
+ if (run_command_v_opt(argv_checkout, RUN_GIT_CMD))
/*
* Errors in `run_command()` itself, signaled by res < 0,
* and errors in the child process, signaled by res > 0
- * can both be treated as regular BISECT_FAILURE (-1).
+ * can both be treated as regular BISECT_FAILED (-1).
*/
- return -abs(res);
+ return BISECT_FAILED;
}
- argv_show_branch[1] = bisect_rev_hex;
- res = run_command_v_opt(argv_show_branch, RUN_GIT_CMD);
- /*
- * Errors in `run_command()` itself, signaled by res < 0,
- * and errors in the child process, signaled by res > 0
- * can both be treated as regular BISECT_FAILURE (-1).
- */
- return -abs(res);
+ commit = lookup_commit_reference(the_repository, bisect_rev);
+ format_commit_message(commit, "[%H] %s%n", &commit_msg, &pp);
+ fputs(commit_msg.buf, stdout);
+ strbuf_release(&commit_msg);
+
+ return BISECT_OK;
}
static struct commit *get_commit_reference(struct repository *r,
diff --git a/branch.c b/branch.c
index 7a88a48..07a4643 100644
--- a/branch.c
+++ b/branch.c
@@ -271,7 +271,7 @@ void create_branch(struct repository *r,
real_ref = NULL;
if (get_oid_mb(start_name, &oid)) {
if (explicit_tracking) {
- if (advice_set_upstream_failure) {
+ if (advice_enabled(ADVICE_SET_UPSTREAM_FAILURE)) {
error(_(upstream_missing), start_name);
advise(_(upstream_advice));
exit(1);
diff --git a/builtin.h b/builtin.h
index 16ecd55..8a58743 100644
--- a/builtin.h
+++ b/builtin.h
@@ -225,7 +225,6 @@ int cmd_submodule__helper(int argc, const char **argv, const char *prefix);
int cmd_switch(int argc, const char **argv, const char *prefix);
int cmd_symbolic_ref(int argc, const char **argv, const char *prefix);
int cmd_tag(int argc, const char **argv, const char *prefix);
-int cmd_tar_tree(int argc, const char **argv, const char *prefix);
int cmd_unpack_file(int argc, const char **argv, const char *prefix);
int cmd_unpack_objects(int argc, const char **argv, const char *prefix);
int cmd_update_index(int argc, const char **argv, const char *prefix);
diff --git a/builtin/add.c b/builtin/add.c
index c37c95b..ef6b619 100644
--- a/builtin/add.c
+++ b/builtin/add.c
@@ -30,6 +30,7 @@ static int patch_interactive, add_interactive, edit_interactive;
static int take_worktree_changes;
static int add_renormalize;
static int pathspec_file_nul;
+static int include_sparse;
static const char *pathspec_from_file;
static int legacy_stash_p; /* support for the scripted `git stash` */
@@ -46,7 +47,9 @@ static int chmod_pathspec(struct pathspec *pathspec, char flip, int show_only)
struct cache_entry *ce = active_cache[i];
int err;
- if (ce_skip_worktree(ce))
+ if (!include_sparse &&
+ (ce_skip_worktree(ce) ||
+ !path_in_sparse_checkout(ce->name, &the_index)))
continue;
if (pathspec && !ce_path_match(&the_index, ce, pathspec, NULL))
@@ -94,6 +97,10 @@ static void update_callback(struct diff_queue_struct *q,
for (i = 0; i < q->nr; i++) {
struct diff_filepair *p = q->queue[i];
const char *path = p->one->path;
+
+ if (!include_sparse && !path_in_sparse_checkout(path, &the_index))
+ continue;
+
switch (fix_unmerged_status(p, data)) {
default:
die(_("unexpected diff status %c"), p->status);
@@ -144,12 +151,12 @@ static int renormalize_tracked_files(const struct pathspec *pathspec, int flags)
{
int i, retval = 0;
- /* TODO: audit for interaction with sparse-index. */
- ensure_full_index(&the_index);
for (i = 0; i < active_nr; i++) {
struct cache_entry *ce = active_cache[i];
- if (ce_skip_worktree(ce))
+ if (!include_sparse &&
+ (ce_skip_worktree(ce) ||
+ !path_in_sparse_checkout(ce->name, &the_index)))
continue;
if (ce_stage(ce))
continue; /* do not touch unmerged paths */
@@ -198,7 +205,10 @@ static int refresh(int verbose, const struct pathspec *pathspec)
_("Unstaged changes after refreshing the index:"));
for (i = 0; i < pathspec->nr; i++) {
if (!seen[i]) {
- if (matches_skip_worktree(pathspec, i, &skip_worktree_seen)) {
+ const char *path = pathspec->items[i].original;
+
+ if (matches_skip_worktree(pathspec, i, &skip_worktree_seen) ||
+ !path_in_sparse_checkout(path, &the_index)) {
string_list_append(&only_match_skip_worktree,
pathspec->items[i].original);
} else {
@@ -376,6 +386,7 @@ static struct option builtin_add_options[] = {
OPT_BOOL( 0 , "refresh", &refresh_only, N_("don't add, only refresh the index")),
OPT_BOOL( 0 , "ignore-errors", &ignore_add_errors, N_("just skip files which cannot be added because of errors")),
OPT_BOOL( 0 , "ignore-missing", &ignore_missing, N_("check if - even missing - files are ignored in dry run")),
+ OPT_BOOL(0, "sparse", &include_sparse, N_("allow updating entries outside of the sparse-checkout cone")),
OPT_STRING(0, "chmod", &chmod_arg, "(+|-)x",
N_("override the executable bit of the listed files")),
OPT_HIDDEN_BOOL(0, "warn-embedded-repo", &warn_on_embedded_repo,
@@ -417,6 +428,7 @@ static const char embedded_advice[] = N_(
static void check_embedded_repo(const char *path)
{
struct strbuf name = STRBUF_INIT;
+ static int adviced_on_embedded_repo = 0;
if (!warn_on_embedded_repo)
return;
@@ -428,10 +440,10 @@ static void check_embedded_repo(const char *path)
strbuf_strip_suffix(&name, "/");
warning(_("adding embedded git repository: %s"), name.buf);
- if (advice_add_embedded_repo) {
+ if (!adviced_on_embedded_repo &&
+ advice_enabled(ADVICE_ADD_EMBEDDED_REPO)) {
advise(embedded_advice, name.buf, name.buf);
- /* there may be multiple entries; advise only once */
- advice_add_embedded_repo = 0;
+ adviced_on_embedded_repo = 1;
}
strbuf_release(&name);
@@ -440,12 +452,13 @@ static void check_embedded_repo(const char *path)
static int add_files(struct dir_struct *dir, int flags)
{
int i, exit_status = 0;
+ struct string_list matched_sparse_paths = STRING_LIST_INIT_NODUP;
if (dir->ignored_nr) {
fprintf(stderr, _(ignore_error));
for (i = 0; i < dir->ignored_nr; i++)
fprintf(stderr, "%s\n", dir->ignored[i]->name);
- if (advice_add_ignored_file)
+ if (advice_enabled(ADVICE_ADD_IGNORED_FILE))
advise(_("Use -f if you really want to add them.\n"
"Turn this message off by running\n"
"\"git config advice.addIgnoredFile false\""));
@@ -453,6 +466,12 @@ static int add_files(struct dir_struct *dir, int flags)
}
for (i = 0; i < dir->nr; i++) {
+ if (!include_sparse &&
+ !path_in_sparse_checkout(dir->entries[i]->name, &the_index)) {
+ string_list_append(&matched_sparse_paths,
+ dir->entries[i]->name);
+ continue;
+ }
if (add_file_to_index(&the_index, dir->entries[i]->name, flags)) {
if (!ignore_add_errors)
die(_("adding files failed"));
@@ -461,6 +480,14 @@ static int add_files(struct dir_struct *dir, int flags)
check_embedded_repo(dir->entries[i]->name);
}
}
+
+ if (matched_sparse_paths.nr) {
+ advise_on_updating_sparse_paths(&matched_sparse_paths);
+ exit_status = 1;
+ }
+
+ string_list_clear(&matched_sparse_paths, 0);
+
return exit_status;
}
@@ -526,6 +553,9 @@ int cmd_add(int argc, const char **argv, const char *prefix)
add_new_files = !take_worktree_changes && !refresh_only && !add_renormalize;
require_pathspec = !(take_worktree_changes || (0 < addremove_explicit));
+ prepare_repo_settings(the_repository);
+ the_repository->settings.command_requires_full_index = 0;
+
hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
/*
@@ -551,7 +581,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
if (require_pathspec && pathspec.nr == 0) {
fprintf(stderr, _("Nothing specified, nothing added.\n"));
- if (advice_add_empty_pathspec)
+ if (advice_enabled(ADVICE_ADD_EMPTY_PATHSPEC))
advise( _("Maybe you wanted to say 'git add .'?\n"
"Turn this message off by running\n"
"\"git config advice.addEmptyPathspec false\""));
@@ -622,7 +652,8 @@ int cmd_add(int argc, const char **argv, const char *prefix)
if (seen[i])
continue;
- if (matches_skip_worktree(&pathspec, i, &skip_worktree_seen)) {
+ if (!include_sparse &&
+ matches_skip_worktree(&pathspec, i, &skip_worktree_seen)) {
string_list_append(&only_match_skip_worktree,
pathspec.items[i].original);
continue;
diff --git a/builtin/am.c b/builtin/am.c
index c79e016..8677ea2 100644
--- a/builtin/am.c
+++ b/builtin/am.c
@@ -11,6 +11,7 @@
#include "parse-options.h"
#include "dir.h"
#include "run-command.h"
+#include "hook.h"
#include "quote.h"
#include "tempfile.h"
#include "lockfile.h"
@@ -1820,7 +1821,7 @@ static void am_run(struct am_state *state, int resume)
printf_ln(_("Patch failed at %s %.*s"), msgnum(state),
linelen(state->msg), state->msg);
- if (advice_amworkdir)
+ if (advice_enabled(ADVICE_AM_WORK_DIR))
advise(_("Use 'git am --show-current-patch=diff' to see the failed patch"));
die_user_resolve(state);
@@ -1848,7 +1849,6 @@ static void am_run(struct am_state *state, int resume)
*/
if (!state->rebasing) {
am_destroy(state);
- close_object_store(the_repository->objects);
run_auto_maintenance(state->quiet);
}
}
@@ -1918,7 +1918,8 @@ static int fast_forward_to(struct tree *head, struct tree *remote, int reset)
opts.dst_index = &the_index;
opts.update = 1;
opts.merge = 1;
- opts.reset = reset;
+ opts.reset = reset ? UNPACK_RESET_PROTECT_UNTRACKED : 0;
+ opts.preserve_ignored = 0; /* FIXME: !overwrite_ignore */
opts.fn = twoway_merge;
init_tree_desc(&t[0], head->buffer, head->size);
init_tree_desc(&t[1], remote->buffer, remote->size);
diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c
index f184eae..28a2e6a 100644
--- a/builtin/bisect--helper.c
+++ b/builtin/bisect--helper.c
@@ -18,10 +18,10 @@ static GIT_PATH_FUNC(git_path_bisect_log, "BISECT_LOG")
static GIT_PATH_FUNC(git_path_head_name, "head-name")
static GIT_PATH_FUNC(git_path_bisect_names, "BISECT_NAMES")
static GIT_PATH_FUNC(git_path_bisect_first_parent, "BISECT_FIRST_PARENT")
+static GIT_PATH_FUNC(git_path_bisect_run, "BISECT_RUN")
static const char * const git_bisect_helper_usage[] = {
N_("git bisect--helper --bisect-reset [<commit>]"),
- N_("git bisect--helper --bisect-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>...]"),
@@ -30,6 +30,8 @@ static const char * const git_bisect_helper_usage[] = {
N_("git bisect--helper --bisect-state (good|old) [<rev>...]"),
N_("git bisect--helper --bisect-replay <filename>"),
N_("git bisect--helper --bisect-skip [(<rev>|<range>)...]"),
+ N_("git bisect--helper --bisect-visualize"),
+ N_("git bisect--helper --bisect-run <cmd>..."),
NULL
};
@@ -143,6 +145,19 @@ static int append_to_file(const char *path, const char *format, ...)
return res;
}
+static int print_file_to_stdout(const char *path)
+{
+ int fd = open(path, O_RDONLY);
+ int ret = 0;
+
+ if (fd < 0)
+ return error_errno(_("cannot open file '%s' for reading"), path);
+ if (copy_fd(fd, 1) < 0)
+ ret = error_errno(_("failed to read '%s'"), path);
+ close(fd);
+ return ret;
+}
+
static int check_term_format(const char *term, const char *orig_term)
{
int res;
@@ -1036,6 +1051,125 @@ static enum bisect_error bisect_skip(struct bisect_terms *terms, const char **ar
return res;
}
+static int bisect_visualize(struct bisect_terms *terms, const char **argv, int argc)
+{
+ struct strvec args = STRVEC_INIT;
+ int flags = RUN_COMMAND_NO_STDIN, res = 0;
+ struct strbuf sb = STRBUF_INIT;
+
+ if (bisect_next_check(terms, NULL) != 0)
+ return BISECT_FAILED;
+
+ if (!argc) {
+ if ((getenv("DISPLAY") || getenv("SESSIONNAME") || getenv("MSYSTEM") ||
+ getenv("SECURITYSESSIONID")) && exists_in_PATH("gitk")) {
+ strvec_push(&args, "gitk");
+ } else {
+ strvec_push(&args, "log");
+ flags |= RUN_GIT_CMD;
+ }
+ } else {
+ if (argv[0][0] == '-') {
+ strvec_push(&args, "log");
+ flags |= RUN_GIT_CMD;
+ } else if (strcmp(argv[0], "tig") && !starts_with(argv[0], "git"))
+ flags |= RUN_GIT_CMD;
+
+ strvec_pushv(&args, argv);
+ }
+
+ strvec_pushl(&args, "--bisect", "--", NULL);
+
+ strbuf_read_file(&sb, git_path_bisect_names(), 0);
+ sq_dequote_to_strvec(sb.buf, &args);
+ strbuf_release(&sb);
+
+ res = run_command_v_opt(args.v, flags);
+ strvec_clear(&args);
+ return res;
+}
+
+static int bisect_run(struct bisect_terms *terms, const char **argv, int argc)
+{
+ int res = BISECT_OK;
+ struct strbuf command = STRBUF_INIT;
+ struct strvec args = STRVEC_INIT;
+ struct strvec run_args = STRVEC_INIT;
+ const char *new_state;
+ int temporary_stdout_fd, saved_stdout;
+
+ if (bisect_next_check(terms, NULL))
+ return BISECT_FAILED;
+
+ if (argc)
+ sq_quote_argv(&command, argv);
+ else {
+ error(_("bisect run failed: no command provided."));
+ return BISECT_FAILED;
+ }
+
+ strvec_push(&run_args, command.buf);
+
+ while (1) {
+ strvec_clear(&args);
+
+ printf(_("running %s\n"), command.buf);
+ res = run_command_v_opt(run_args.v, RUN_USING_SHELL);
+
+ if (res < 0 || 128 <= res) {
+ error(_("bisect run failed: exit code %d from"
+ " '%s' is < 0 or >= 128"), res, command.buf);
+ strbuf_release(&command);
+ return res;
+ }
+
+ if (res == 125)
+ new_state = "skip";
+ else if (!res)
+ new_state = terms->term_good;
+ else
+ new_state = terms->term_bad;
+
+ temporary_stdout_fd = open(git_path_bisect_run(), O_CREAT | O_WRONLY | O_TRUNC, 0666);
+
+ if (temporary_stdout_fd < 0)
+ return error_errno(_("cannot open file '%s' for writing"), git_path_bisect_run());
+
+ fflush(stdout);
+ saved_stdout = dup(1);
+ dup2(temporary_stdout_fd, 1);
+
+ res = bisect_state(terms, &new_state, 1);
+
+ fflush(stdout);
+ dup2(saved_stdout, 1);
+ close(saved_stdout);
+ close(temporary_stdout_fd);
+
+ print_file_to_stdout(git_path_bisect_run());
+
+ if (res == BISECT_ONLY_SKIPPED_LEFT)
+ error(_("bisect run cannot continue any more"));
+ else if (res == BISECT_INTERNAL_SUCCESS_MERGE_BASE) {
+ printf(_("bisect run success"));
+ res = BISECT_OK;
+ } else if (res == BISECT_INTERNAL_SUCCESS_1ST_BAD_FOUND) {
+ printf(_("bisect found first bad commit"));
+ res = BISECT_OK;
+ } else if (res) {
+ error(_("bisect run failed: 'git bisect--helper --bisect-state"
+ " %s' exited with error code %d"), args.v[0], res);
+ } else {
+ continue;
+ }
+
+ strbuf_release(&command);
+ strvec_clear(&args);
+ strvec_clear(&run_args);
+ return res;
+ }
+}
+
int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
{
enum {
@@ -1048,7 +1182,9 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
BISECT_STATE,
BISECT_LOG,
BISECT_REPLAY,
- BISECT_SKIP
+ BISECT_SKIP,
+ BISECT_VISUALIZE,
+ BISECT_RUN,
} cmdmode = 0;
int res = 0, nolog = 0;
struct option options[] = {
@@ -1070,6 +1206,10 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
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_CMDMODE(0, "bisect-visualize", &cmdmode,
+ N_("visualize the bisection"), BISECT_VISUALIZE),
+ OPT_CMDMODE(0, "bisect-run", &cmdmode,
+ N_("use <cmd>... to automatically bisect."), BISECT_RUN),
OPT_BOOL(0, "no-log", &nolog,
N_("no log for BISECT_WRITE")),
OPT_END()
@@ -1089,12 +1229,6 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
return error(_("--bisect-reset requires either no argument or a commit"));
res = bisect_reset(argc ? argv[0] : NULL);
break;
- case BISECT_NEXT_CHECK:
- if (argc != 2 && argc != 3)
- return error(_("--bisect-next-check requires 2 or 3 arguments"));
- set_terms(&terms, argv[1], argv[0]);
- res = bisect_next_check(&terms, argc == 3 ? argv[2] : NULL);
- break;
case BISECT_TERMS:
if (argc > 1)
return error(_("--bisect-terms requires 0 or 1 argument"));
@@ -1131,6 +1265,16 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
get_terms(&terms);
res = bisect_skip(&terms, argv, argc);
break;
+ case BISECT_VISUALIZE:
+ get_terms(&terms);
+ res = bisect_visualize(&terms, argv, argc);
+ break;
+ case BISECT_RUN:
+ if (!argc)
+ return error(_("bisect run failed: no command provided."));
+ get_terms(&terms);
+ res = bisect_run(&terms, argv, argc);
+ break;
default:
BUG("unknown subcommand %d", cmdmode);
}
diff --git a/builtin/blame.c b/builtin/blame.c
index 641523f..f9ee3f8 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -101,6 +101,16 @@ struct commit_info {
struct strbuf summary;
};
+#define COMMIT_INFO_INIT { \
+ .author = STRBUF_INIT, \
+ .author_mail = STRBUF_INIT, \
+ .author_tz = STRBUF_INIT, \
+ .committer = STRBUF_INIT, \
+ .committer_mail = STRBUF_INIT, \
+ .committer_tz = STRBUF_INIT, \
+ .summary = STRBUF_INIT, \
+}
+
/*
* Parse author/committer line in the commit object buffer
*/
@@ -160,18 +170,6 @@ static void get_ac_line(const char *inbuf, const char *what,
strbuf_add(name, namebuf, namelen);
}
-static void commit_info_init(struct commit_info *ci)
-{
-
- strbuf_init(&ci->author, 0);
- strbuf_init(&ci->author_mail, 0);
- strbuf_init(&ci->author_tz, 0);
- strbuf_init(&ci->committer, 0);
- strbuf_init(&ci->committer_mail, 0);
- strbuf_init(&ci->committer_tz, 0);
- strbuf_init(&ci->summary, 0);
-}
-
static void commit_info_destroy(struct commit_info *ci)
{
@@ -192,8 +190,6 @@ static void get_commit_info(struct commit *commit,
const char *subject, *encoding;
const char *message;
- commit_info_init(ret);
-
encoding = get_log_output_encoding();
message = logmsg_reencode(commit, NULL, encoding);
get_ac_line(message, "\nauthor ",
@@ -246,7 +242,7 @@ static void write_filename_info(struct blame_origin *suspect)
*/
static int emit_one_suspect_detail(struct blame_origin *suspect, int repeat)
{
- struct commit_info ci;
+ struct commit_info ci = COMMIT_INFO_INIT;
if (!repeat && (suspect->commit->object.flags & METAINFO_SHOWN))
return 0;
@@ -440,7 +436,7 @@ static void emit_other(struct blame_scoreboard *sb, struct blame_entry *ent, int
int cnt;
const char *cp;
struct blame_origin *suspect = ent->suspect;
- struct commit_info ci;
+ struct commit_info ci = COMMIT_INFO_INIT;
char hex[GIT_MAX_HEXSZ + 1];
int show_raw_time = !!(opt & OUTPUT_RAW_TIMESTAMP);
const char *default_color = NULL, *color = NULL, *reset = NULL;
@@ -630,7 +626,7 @@ static void find_alignment(struct blame_scoreboard *sb, int *option)
if (longest_file < num)
longest_file = num;
if (!(suspect->commit->object.flags & METAINFO_SHOWN)) {
- struct commit_info ci;
+ struct commit_info ci = COMMIT_INFO_INIT;
suspect->commit->object.flags |= METAINFO_SHOWN;
get_commit_info(suspect->commit, &ci, 1);
if (*option & OUTPUT_SHOW_EMAIL)
@@ -917,6 +913,9 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
PARSE_OPT_KEEP_DASHDASH | PARSE_OPT_KEEP_ARGV0);
for (;;) {
switch (parse_options_step(&ctx, options, blame_opt_usage)) {
+ case PARSE_OPT_NON_OPTION:
+ case PARSE_OPT_UNKNOWN:
+ break;
case PARSE_OPT_HELP:
case PARSE_OPT_ERROR:
exit(129);
diff --git a/builtin/branch.c b/builtin/branch.c
index 03c7b72..7a1d1ee 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -407,7 +407,8 @@ static char *build_format(struct ref_filter *filter, int maxwidth, const char *r
return strbuf_detach(&fmt, NULL);
}
-static void print_ref_list(struct ref_filter *filter, struct ref_sorting *sorting, struct ref_format *format)
+static void print_ref_list(struct ref_filter *filter, struct ref_sorting *sorting,
+ struct ref_format *format, struct string_list *output)
{
int i;
struct ref_array array;
@@ -427,7 +428,7 @@ static void print_ref_list(struct ref_filter *filter, struct ref_sorting *sortin
memset(&array, 0, sizeof(array));
- filter_refs(&array, filter, filter->kind | FILTER_REFS_INCLUDE_BROKEN);
+ filter_refs(&array, filter, filter->kind);
if (filter->verbose)
maxwidth = calc_maxwidth(&array, strlen(remote_prefix));
@@ -449,7 +450,7 @@ static void print_ref_list(struct ref_filter *filter, struct ref_sorting *sortin
if (column_active(colopts)) {
assert(!filter->verbose && "--column and --verbose are incompatible");
/* format to a string_list to let print_columns() do its job */
- string_list_append(&output, out.buf);
+ string_list_append(output, out.buf);
} else {
fwrite(out.buf, 1, out.len, stdout);
putchar('\n');
@@ -753,9 +754,10 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
ref_sorting_set_sort_flags_all(sorting, REF_SORTING_ICASE, icase);
ref_sorting_set_sort_flags_all(
sorting, REF_SORTING_DETACHED_HEAD_FIRST, 1);
- print_ref_list(&filter, sorting, &format);
+ print_ref_list(&filter, sorting, &format, &output);
print_columns(&output, colopts, NULL);
string_list_clear(&output, 0);
+ ref_sorting_release(sorting);
return 0;
} else if (edit_description) {
const char *branch_name;
diff --git a/builtin/bugreport.c b/builtin/bugreport.c
index 06ed10d..9de32bc 100644
--- a/builtin/bugreport.c
+++ b/builtin/bugreport.c
@@ -3,7 +3,8 @@
#include "strbuf.h"
#include "help.h"
#include "compat/compiler.h"
-#include "run-command.h"
+#include "hook.h"
+#include "hook-list.h"
static void get_system_info(struct strbuf *sys_info)
@@ -41,39 +42,7 @@ static void get_system_info(struct strbuf *sys_info)
static void get_populated_hooks(struct strbuf *hook_info, int nongit)
{
- /*
- * NEEDSWORK: Doesn't look like there is a list of all possible hooks;
- * so below is a transcription of `git help hooks`. Later, this should
- * be replaced with some programmatically generated list (generated from
- * doc or else taken from some library which tells us about all the
- * hooks)
- */
- static const char *hook[] = {
- "applypatch-msg",
- "pre-applypatch",
- "post-applypatch",
- "pre-commit",
- "pre-merge-commit",
- "prepare-commit-msg",
- "commit-msg",
- "post-commit",
- "pre-rebase",
- "post-checkout",
- "post-merge",
- "pre-push",
- "pre-receive",
- "update",
- "post-receive",
- "post-update",
- "push-to-checkout",
- "pre-auto-gc",
- "post-rewrite",
- "sendemail-validate",
- "fsmonitor-watchman",
- "p4-pre-submit",
- "post-index-change",
- };
- int i;
+ const char **p;
if (nongit) {
strbuf_addstr(hook_info,
@@ -81,9 +50,12 @@ static void get_populated_hooks(struct strbuf *hook_info, int nongit)
return;
}
- for (i = 0; i < ARRAY_SIZE(hook); i++)
- if (find_hook(hook[i]))
- strbuf_addf(hook_info, "%s\n", hook[i]);
+ for (p = hook_name_list; *p; p++) {
+ const char *hook = *p;
+
+ if (hook_exists(hook))
+ strbuf_addf(hook_info, "%s\n", hook);
+ }
}
static const char * const bugreport_usage[] = {
diff --git a/builtin/bundle.c b/builtin/bundle.c
index 053a51b..5a85d7c 100644
--- a/builtin/bundle.c
+++ b/builtin/bundle.c
@@ -39,8 +39,6 @@ static const char * const builtin_bundle_unbundle_usage[] = {
NULL
};
-static int verbose;
-
static int parse_options_cmd_bundle(int argc,
const char **argv,
const char* prefix,
@@ -162,10 +160,15 @@ static int cmd_bundle_unbundle(int argc, const char **argv, const char *prefix)
struct bundle_header header = BUNDLE_HEADER_INIT;
int bundle_fd = -1;
int ret;
+ int progress = isatty(2);
+
struct option options[] = {
+ OPT_BOOL(0, "progress", &progress,
+ N_("show progress meter")),
OPT_END()
};
char *bundle_file;
+ struct strvec extra_index_pack_args = STRVEC_INIT;
argc = parse_options_cmd_bundle(argc, argv, prefix,
builtin_bundle_unbundle_usage, options, &bundle_file);
@@ -177,7 +180,11 @@ static int cmd_bundle_unbundle(int argc, const char **argv, const char *prefix)
}
if (!startup_info->have_repository)
die(_("Need a repository to unbundle."));
- ret = !!unbundle(the_repository, &header, bundle_fd, 0) ||
+ if (progress)
+ strvec_pushl(&extra_index_pack_args, "-v", "--progress-title",
+ _("Unbundling objects"), NULL);
+ ret = !!unbundle(the_repository, &header, bundle_fd,
+ &extra_index_pack_args) ||
list_bundle_refs(&header, argc, argv);
bundle_header_release(&header);
cleanup:
@@ -188,7 +195,6 @@ static int cmd_bundle_unbundle(int argc, const char **argv, const char *prefix)
int cmd_bundle(int argc, const char **argv, const char *prefix)
{
struct option options[] = {
- OPT__VERBOSE(&verbose, N_("be verbose; must be placed before a subcommand")),
OPT_END()
};
int result;
diff --git a/builtin/cat-file.c b/builtin/cat-file.c
index 243fe68..86fc032 100644
--- a/builtin/cat-file.c
+++ b/builtin/cat-file.c
@@ -355,18 +355,34 @@ static void print_object_or_die(struct batch_options *opt, struct expand_data *d
}
}
+/*
+ * If "pack" is non-NULL, then "offset" is the byte offset within the pack from
+ * which the object may be accessed (though note that we may also rely on
+ * data->oid, too). If "pack" is NULL, then offset is ignored.
+ */
static void batch_object_write(const char *obj_name,
struct strbuf *scratch,
struct batch_options *opt,
- struct expand_data *data)
+ struct expand_data *data,
+ struct packed_git *pack,
+ off_t offset)
{
- if (!data->skip_object_info &&
- oid_object_info_extended(the_repository, &data->oid, &data->info,
- OBJECT_INFO_LOOKUP_REPLACE) < 0) {
- printf("%s missing\n",
- obj_name ? obj_name : oid_to_hex(&data->oid));
- fflush(stdout);
- return;
+ if (!data->skip_object_info) {
+ int ret;
+
+ if (pack)
+ ret = packed_object_info(the_repository, pack, offset,
+ &data->info);
+ else
+ ret = oid_object_info_extended(the_repository,
+ &data->oid, &data->info,
+ OBJECT_INFO_LOOKUP_REPLACE);
+ if (ret < 0) {
+ printf("%s missing\n",
+ obj_name ? obj_name : oid_to_hex(&data->oid));
+ fflush(stdout);
+ return;
+ }
}
strbuf_reset(scratch);
@@ -428,7 +444,7 @@ static void batch_one_object(const char *obj_name,
return;
}
- batch_object_write(obj_name, scratch, opt, data);
+ batch_object_write(obj_name, scratch, opt, data, NULL, 0);
}
struct object_cb_data {
@@ -442,7 +458,8 @@ static int batch_object_cb(const struct object_id *oid, void *vdata)
{
struct object_cb_data *data = vdata;
oidcpy(&data->expand->oid, oid);
- batch_object_write(NULL, data->scratch, data->opt, data->expand);
+ batch_object_write(NULL, data->scratch, data->opt, data->expand,
+ NULL, 0);
return 0;
}
@@ -463,21 +480,26 @@ static int collect_packed_object(const struct object_id *oid,
return 0;
}
-static int batch_unordered_object(const struct object_id *oid, void *vdata)
+static int batch_unordered_object(const struct object_id *oid,
+ struct packed_git *pack, off_t offset,
+ void *vdata)
{
struct object_cb_data *data = vdata;
if (oidset_insert(data->seen, oid))
return 0;
- return batch_object_cb(oid, data);
+ oidcpy(&data->expand->oid, oid);
+ batch_object_write(NULL, data->scratch, data->opt, data->expand,
+ pack, offset);
+ return 0;
}
static int batch_unordered_loose(const struct object_id *oid,
const char *path,
void *data)
{
- return batch_unordered_object(oid, data);
+ return batch_unordered_object(oid, NULL, 0, data);
}
static int batch_unordered_packed(const struct object_id *oid,
@@ -485,7 +507,9 @@ static int batch_unordered_packed(const struct object_id *oid,
uint32_t pos,
void *data)
{
- return batch_unordered_object(oid, data);
+ return batch_unordered_object(oid, pack,
+ nth_packed_object_offset(pack, pos),
+ data);
}
static int batch_objects(struct batch_options *opt)
@@ -529,6 +553,8 @@ static int batch_objects(struct batch_options *opt)
if (has_promisor_remote())
warning("This repository uses promisor remotes. Some objects may not be loaded.");
+ read_replace_refs = 0;
+
cb.opt = opt;
cb.expand = &data;
cb.scratch = &output;
diff --git a/builtin/checkout--worker.c b/builtin/checkout--worker.c
index fb9fd13..ede7dc3 100644
--- a/builtin/checkout--worker.c
+++ b/builtin/checkout--worker.c
@@ -82,8 +82,8 @@ static void worker_loop(struct checkout *state)
size_t i, nr = 0, alloc = 0;
while (1) {
- int len = packet_read(0, NULL, NULL, packet_buffer,
- sizeof(packet_buffer), 0);
+ int len = packet_read(0, packet_buffer, sizeof(packet_buffer),
+ 0);
if (len < 0)
BUG("packet_read() returned negative value");
diff --git a/builtin/checkout.c b/builtin/checkout.c
index b23bc14..cbf73b8 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -646,7 +646,9 @@ static int reset_tree(struct tree *tree, const struct checkout_opts *o,
opts.head_idx = -1;
opts.update = worktree;
opts.skip_unmerged = !worktree;
- opts.reset = 1;
+ opts.reset = o->force ? UNPACK_RESET_OVERWRITE_UNTRACKED :
+ UNPACK_RESET_PROTECT_UNTRACKED;
+ opts.preserve_ignored = (!o->force && !o->overwrite_ignore);
opts.merge = 1;
opts.fn = oneway_merge;
opts.verbose_update = o->show_progress;
@@ -746,11 +748,7 @@ static int merge_working_tree(const struct checkout_opts *opts,
new_branch_info->commit ?
&new_branch_info->commit->object.oid :
&new_branch_info->oid, NULL);
- if (opts->overwrite_ignore) {
- topts.dir = xcalloc(1, sizeof(*topts.dir));
- topts.dir->flags |= DIR_SHOW_IGNORED;
- setup_standard_excludes(topts.dir);
- }
+ topts.preserve_ignored = !opts->overwrite_ignore;
tree = parse_tree_indirect(old_branch_info->commit ?
&old_branch_info->commit->object.oid :
the_hash_algo->empty_tree);
@@ -918,7 +916,7 @@ static void update_refs_for_switch(const struct checkout_opts *opts,
REF_NO_DEREF, UPDATE_REFS_DIE_ON_ERR);
if (!opts->quiet) {
if (old_branch_info->path &&
- advice_detached_head && !opts->force_detach)
+ advice_enabled(ADVICE_DETACHED_HEAD) && !opts->force_detach)
detach_advice(new_branch_info->name);
describe_detached_head(_("HEAD is now at"), new_branch_info->commit);
}
@@ -1011,7 +1009,7 @@ static void suggest_reattach(struct commit *commit, struct rev_info *revs)
sb.buf);
strbuf_release(&sb);
- if (advice_detached_head)
+ if (advice_enabled(ADVICE_DETACHED_HEAD))
fprintf(stderr,
Q_(
/* The singular version */
@@ -1182,7 +1180,7 @@ static const char *parse_remote_branch(const char *arg,
}
if (!remote && num_matches > 1) {
- if (advice_checkout_ambiguous_remote_branch_name) {
+ if (advice_enabled(ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME)) {
advise(_("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"
"\n"
diff --git a/builtin/clone.c b/builtin/clone.c
index 7743dc0..fb377b2 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -217,120 +217,6 @@ static char *get_repo_path(const char *repo, int *is_bundle)
return canon;
}
-static char *guess_dir_name(const char *repo, int is_bundle, int is_bare)
-{
- const char *end = repo + strlen(repo), *start, *ptr;
- size_t len;
- char *dir;
-
- /*
- * Skip scheme.
- */
- start = strstr(repo, "://");
- if (start == NULL)
- start = repo;
- else
- start += 3;
-
- /*
- * Skip authentication data. The stripping does happen
- * greedily, such that we strip up to the last '@' inside
- * the host part.
- */
- for (ptr = start; ptr < end && !is_dir_sep(*ptr); ptr++) {
- if (*ptr == '@')
- start = ptr + 1;
- }
-
- /*
- * Strip trailing spaces, slashes and /.git
- */
- while (start < end && (is_dir_sep(end[-1]) || isspace(end[-1])))
- end--;
- if (end - start > 5 && is_dir_sep(end[-5]) &&
- !strncmp(end - 4, ".git", 4)) {
- end -= 5;
- while (start < end && is_dir_sep(end[-1]))
- end--;
- }
-
- /*
- * Strip trailing port number if we've got only a
- * hostname (that is, there is no dir separator but a
- * colon). This check is required such that we do not
- * strip URI's like '/foo/bar:2222.git', which should
- * result in a dir '2222' being guessed due to backwards
- * compatibility.
- */
- if (memchr(start, '/', end - start) == NULL
- && memchr(start, ':', end - start) != NULL) {
- ptr = end;
- while (start < ptr && isdigit(ptr[-1]) && ptr[-1] != ':')
- ptr--;
- if (start < ptr && ptr[-1] == ':')
- end = ptr - 1;
- }
-
- /*
- * Find last component. To remain backwards compatible we
- * also regard colons as path separators, such that
- * cloning a repository 'foo:bar.git' would result in a
- * directory 'bar' being guessed.
- */
- ptr = end;
- while (start < ptr && !is_dir_sep(ptr[-1]) && ptr[-1] != ':')
- ptr--;
- start = ptr;
-
- /*
- * Strip .{bundle,git}.
- */
- len = end - start;
- strip_suffix_mem(start, &len, is_bundle ? ".bundle" : ".git");
-
- if (!len || (len == 1 && *start == '/'))
- die(_("No directory name could be guessed.\n"
- "Please specify a directory on the command line"));
-
- if (is_bare)
- dir = xstrfmt("%.*s.git", (int)len, start);
- else
- dir = xstrndup(start, len);
- /*
- * Replace sequences of 'control' characters and whitespace
- * with one ascii space, remove leading and trailing spaces.
- */
- if (*dir) {
- char *out = dir;
- int prev_space = 1 /* strip leading whitespace */;
- for (end = dir; *end; ++end) {
- char ch = *end;
- if ((unsigned char)ch < '\x20')
- ch = '\x20';
- if (isspace(ch)) {
- if (prev_space)
- continue;
- prev_space = 1;
- } else
- prev_space = 0;
- *out++ = ch;
- }
- *out = '\0';
- if (out > dir && prev_space)
- out[-1] = '\0';
- }
- return dir;
-}
-
-static void strip_trailing_slashes(char *dir)
-{
- char *end = dir + strlen(dir);
-
- while (dir < end - 1 && is_dir_sep(end[-1]))
- end--;
- *end = '\0';
-}
-
static int add_one_reference(struct string_list_item *item, void *cb_data)
{
struct strbuf err = STRBUF_INIT;
@@ -657,7 +543,7 @@ static void write_followtags(const struct ref *refs, const char *msg)
}
}
-static int iterate_ref_map(void *cb_data, struct object_id *oid)
+static const struct object_id *iterate_ref_map(void *cb_data)
{
struct ref **rm = cb_data;
struct ref *ref = *rm;
@@ -668,13 +554,11 @@ static int iterate_ref_map(void *cb_data, struct object_id *oid)
*/
while (ref && !ref->peer_ref)
ref = ref->next;
- /* Returning -1 notes "end of list" to the caller. */
if (!ref)
- return -1;
+ return NULL;
- oidcpy(oid, &ref->old_oid);
*rm = ref->next;
- return 0;
+ return &ref->old_oid;
}
static void update_remote_refs(const struct ref *refs,
@@ -786,7 +670,7 @@ static int checkout(int submodule_progress)
return 0;
}
if (!strcmp(head, "HEAD")) {
- if (advice_detached_head)
+ if (advice_enabled(ADVICE_DETACHED_HEAD))
detach_advice(oid_to_hex(&oid));
FREE_AND_NULL(head);
} else {
@@ -803,6 +687,7 @@ static int checkout(int submodule_progress)
opts.update = 1;
opts.merge = 1;
opts.clone = 1;
+ opts.preserve_ignored = 0;
opts.fn = oneway_merge;
opts.verbose_update = (option_verbosity >= 0);
opts.src_index = &the_index;
@@ -1041,8 +926,8 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
if (argc == 2)
dir = xstrdup(argv[1]);
else
- dir = guess_dir_name(repo_name, is_bundle, option_bare);
- strip_trailing_slashes(dir);
+ dir = git_url_basename(repo_name, is_bundle, option_bare);
+ strip_dir_trailing_slashes(dir);
dest_exists = path_exists(dir);
if (dest_exists && !is_empty_dir(dir))
@@ -1114,6 +999,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
if (option_recurse_submodules.nr > 0) {
struct string_list_item *item;
struct strbuf sb = STRBUF_INIT;
+ int val;
/* remove duplicates */
string_list_sort(&option_recurse_submodules);
@@ -1130,6 +1016,10 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
strbuf_detach(&sb, NULL));
}
+ if (!git_config_get_bool("submodule.stickyRecursiveClone", &val) &&
+ val)
+ string_list_append(&option_config, "submodule.recurse=true");
+
if (option_required_reference.nr &&
option_optional_reference.nr)
die(_("clone --recursive is not compatible with "
@@ -1150,8 +1040,10 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
init_db(git_dir, real_git_dir, option_template, GIT_HASH_UNKNOWN, NULL,
INIT_DB_QUIET);
- if (real_git_dir)
+ if (real_git_dir) {
+ free((char *)git_dir);
git_dir = real_git_dir;
+ }
/*
* additional config can be injected with -c, make sure it's included
diff --git a/builtin/commit-graph.c b/builtin/commit-graph.c
index cd86315..4247fbd 100644
--- a/builtin/commit-graph.c
+++ b/builtin/commit-graph.c
@@ -9,26 +9,29 @@
#include "progress.h"
#include "tag.h"
+#define BUILTIN_COMMIT_GRAPH_VERIFY_USAGE \
+ N_("git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]")
+
+#define BUILTIN_COMMIT_GRAPH_WRITE_USAGE \
+ N_("git commit-graph write [--object-dir <objdir>] [--append] " \
+ "[--split[=<strategy>]] [--reachable|--stdin-packs|--stdin-commits] " \
+ "[--changed-paths] [--[no-]max-new-filters <n>] [--[no-]progress] " \
+ "<split options>")
+
+static const char * builtin_commit_graph_verify_usage[] = {
+ BUILTIN_COMMIT_GRAPH_VERIFY_USAGE,
+ NULL
+};
+
+static const char * builtin_commit_graph_write_usage[] = {
+ BUILTIN_COMMIT_GRAPH_WRITE_USAGE,
+ NULL
+};
+
static char const * const builtin_commit_graph_usage[] = {
- N_("git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"),
- N_("git commit-graph write [--object-dir <objdir>] [--append] "
- "[--split[=<strategy>]] [--reachable|--stdin-packs|--stdin-commits] "
- "[--changed-paths] [--[no-]max-new-filters <n>] [--[no-]progress] "
- "<split options>"),
- NULL
-};
-
-static const char * const builtin_commit_graph_verify_usage[] = {
- N_("git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"),
- NULL
-};
-
-static const char * const builtin_commit_graph_write_usage[] = {
- N_("git commit-graph write [--object-dir <objdir>] [--append] "
- "[--split[=<strategy>]] [--reachable|--stdin-packs|--stdin-commits] "
- "[--changed-paths] [--[no-]max-new-filters <n>] [--[no-]progress] "
- "<split options>"),
- NULL
+ BUILTIN_COMMIT_GRAPH_VERIFY_USAGE,
+ BUILTIN_COMMIT_GRAPH_WRITE_USAGE,
+ NULL,
};
static struct opts_commit_graph {
@@ -43,26 +46,16 @@ static struct opts_commit_graph {
int enable_changed_paths;
} opts;
-static struct object_directory *find_odb(struct repository *r,
- const char *obj_dir)
+static struct option common_opts[] = {
+ OPT_STRING(0, "object-dir", &opts.obj_dir,
+ N_("dir"),
+ N_("the object directory to store the graph")),
+ OPT_END()
+};
+
+static struct option *add_common_options(struct option *to)
{
- struct object_directory *odb;
- char *obj_dir_real = real_pathdup(obj_dir, 1);
- struct strbuf odb_path_real = STRBUF_INIT;
-
- prepare_alt_odb(r);
- for (odb = r->objects->odb; odb; odb = odb->next) {
- strbuf_realpath(&odb_path_real, odb->path, 1);
- if (!strcmp(obj_dir_real, odb_path_real.buf))
- break;
- }
-
- free(obj_dir_real);
- strbuf_release(&odb_path_real);
-
- if (!odb)
- die(_("could not find object directory matching %s"), obj_dir);
- return odb;
+ return parse_options_concat(common_opts, to);
}
static int graph_verify(int argc, const char **argv)
@@ -76,21 +69,22 @@ static int graph_verify(int argc, const char **argv)
int flags = 0;
static struct option builtin_commit_graph_verify_options[] = {
- OPT_STRING(0, "object-dir", &opts.obj_dir,
- N_("dir"),
- N_("the object directory to store the graph")),
OPT_BOOL(0, "shallow", &opts.shallow,
N_("if the commit-graph is split, only verify the tip file")),
- OPT_BOOL(0, "progress", &opts.progress, N_("force progress reporting")),
+ OPT_BOOL(0, "progress", &opts.progress,
+ N_("force progress reporting")),
OPT_END(),
};
+ struct option *options = add_common_options(builtin_commit_graph_verify_options);
trace2_cmd_mode("verify");
opts.progress = isatty(2);
argc = parse_options(argc, argv, NULL,
- builtin_commit_graph_verify_options,
+ options,
builtin_commit_graph_verify_usage, 0);
+ if (argc)
+ usage_with_options(builtin_commit_graph_verify_usage, options);
if (!opts.obj_dir)
opts.obj_dir = get_object_directory();
@@ -106,6 +100,7 @@ static int graph_verify(int argc, const char **argv)
die_errno(_("Could not open commit-graph '%s'"), graph_name);
FREE_AND_NULL(graph_name);
+ FREE_AND_NULL(options);
if (open_ok)
graph = load_commit_graph_one_fd_st(the_repository, fd, &st, odb);
@@ -177,8 +172,8 @@ static int write_option_max_new_filters(const struct option *opt,
const char *s;
*to = strtol(arg, (char **)&s, 10);
if (*s)
- return error(_("%s expects a numerical value"),
- optname(opt, opt->flags));
+ return error(_("option `%s' expects a numerical value"),
+ "max-new-filters");
}
return 0;
}
@@ -206,9 +201,6 @@ static int graph_write(int argc, const char **argv)
struct progress *progress = NULL;
static struct option builtin_commit_graph_write_options[] = {
- OPT_STRING(0, "object-dir", &opts.obj_dir,
- N_("dir"),
- N_("the object directory to store the graph")),
OPT_BOOL(0, "reachable", &opts.reachable,
N_("start walk at all refs")),
OPT_BOOL(0, "stdin-packs", &opts.stdin_packs,
@@ -219,7 +211,6 @@ static int graph_write(int argc, const char **argv)
N_("include all commits already in the commit-graph file")),
OPT_BOOL(0, "changed-paths", &opts.enable_changed_paths,
N_("enable computation for changed paths")),
- OPT_BOOL(0, "progress", &opts.progress, N_("force progress reporting")),
OPT_CALLBACK_F(0, "split", &write_opts.split_flags, NULL,
N_("allow writing an incremental commit-graph file"),
PARSE_OPT_OPTARG | PARSE_OPT_NONEG,
@@ -233,8 +224,11 @@ static int graph_write(int argc, const char **argv)
OPT_CALLBACK_F(0, "max-new-filters", &write_opts.max_new_filters,
NULL, N_("maximum number of changed-path Bloom filters to compute"),
0, write_option_max_new_filters),
+ OPT_BOOL(0, "progress", &opts.progress,
+ N_("force progress reporting")),
OPT_END(),
};
+ struct option *options = add_common_options(builtin_commit_graph_write_options);
opts.progress = isatty(2);
opts.enable_changed_paths = -1;
@@ -248,8 +242,10 @@ static int graph_write(int argc, const char **argv)
git_config(git_commit_graph_write_config, &opts);
argc = parse_options(argc, argv, NULL,
- builtin_commit_graph_write_options,
+ options,
builtin_commit_graph_write_usage, 0);
+ if (argc)
+ usage_with_options(builtin_commit_graph_write_usage, options);
if (opts.reachable + opts.stdin_packs + opts.stdin_commits > 1)
die(_("use at most one of --reachable, --stdin-commits, or --stdin-packs"));
@@ -267,7 +263,6 @@ static int graph_write(int argc, const char **argv)
git_env_bool(GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS, 0))
flags |= COMMIT_GRAPH_WRITE_BLOOM_FILTERS;
- read_replace_refs = 0;
odb = find_odb(the_repository, opts.obj_dir);
if (opts.reachable) {
@@ -304,6 +299,7 @@ static int graph_write(int argc, const char **argv)
result = 1;
cleanup:
+ FREE_AND_NULL(options);
string_list_clear(&pack_indexes, 0);
strbuf_release(&buf);
return result;
@@ -311,32 +307,26 @@ static int graph_write(int argc, const char **argv)
int cmd_commit_graph(int argc, const char **argv, const char *prefix)
{
- static struct option builtin_commit_graph_options[] = {
- OPT_STRING(0, "object-dir", &opts.obj_dir,
- N_("dir"),
- N_("the object directory to store the graph")),
- OPT_END(),
- };
-
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage_with_options(builtin_commit_graph_usage,
- builtin_commit_graph_options);
+ struct option *builtin_commit_graph_options = common_opts;
git_config(git_default_config, NULL);
argc = parse_options(argc, argv, prefix,
builtin_commit_graph_options,
builtin_commit_graph_usage,
PARSE_OPT_STOP_AT_NON_OPTION);
+ if (!argc)
+ goto usage;
+ read_replace_refs = 0;
save_commit_buffer = 0;
- if (argc > 0) {
- if (!strcmp(argv[0], "verify"))
- return graph_verify(argc, argv);
- if (!strcmp(argv[0], "write"))
- return graph_write(argc, argv);
- }
+ if (!strcmp(argv[0], "verify"))
+ return graph_verify(argc, argv);
+ else if (argc && !strcmp(argv[0], "write"))
+ return graph_write(argc, argv);
+ error(_("unrecognized subcommand: %s"), argv[0]);
+usage:
usage_with_options(builtin_commit_graph_usage,
builtin_commit_graph_options);
}
diff --git a/builtin/commit.c b/builtin/commit.c
index 7c9b1e7..883c162 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -19,6 +19,7 @@
#include "revision.h"
#include "wt-status.h"
#include "run-command.h"
+#include "hook.h"
#include "refs.h"
#include "log-tree.h"
#include "strbuf.h"
@@ -203,7 +204,7 @@ static void status_init_config(struct wt_status *s, config_fn_t fn)
init_diff_ui_defaults();
git_config(fn, s);
determine_whence(s);
- s->hints = advice_status_hints; /* must come after git_config() */
+ s->hints = advice_enabled(ADVICE_STATUS_HINTS); /* must come after git_config() */
}
static void rollback_index_files(void)
@@ -1033,7 +1034,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
*/
if (!committable && whence != FROM_MERGE && !allow_empty &&
!(amend && is_a_merge(current_head))) {
- s->hints = advice_status_hints;
+ s->hints = advice_enabled(ADVICE_STATUS_HINTS);
s->display_comment_prefix = old_display_comment_prefix;
run_status(stdout, index_file, prefix, 0, s);
if (amend)
@@ -1051,7 +1052,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
return 0;
}
- if (!no_verify && find_hook("pre-commit")) {
+ if (!no_verify && hook_exists("pre-commit")) {
/*
* Re-read the index as pre-commit hook could have updated it,
* and write it out as a tree. We must do this before we invoke
diff --git a/builtin/config.c b/builtin/config.c
index 865fddd..542d8d0 100644
--- a/builtin/config.c
+++ b/builtin/config.c
@@ -575,7 +575,7 @@ static int get_urlmatch(const char *var, const char *url)
int ret;
char *section_tail;
struct string_list_item *item;
- struct urlmatch_config config = { STRING_LIST_INIT_DUP };
+ struct urlmatch_config config = URLMATCH_CONFIG_INIT;
struct string_list values = STRING_LIST_INIT_DUP;
config.collect_fn = urlmatch_collect_fn;
diff --git a/builtin/credential-cache.c b/builtin/credential-cache.c
index 76a6ba3..78c02ad 100644
--- a/builtin/credential-cache.c
+++ b/builtin/credential-cache.c
@@ -11,6 +11,32 @@
#define FLAG_SPAWN 0x1
#define FLAG_RELAY 0x2
+#ifdef GIT_WINDOWS_NATIVE
+
+static int connection_closed(int error)
+{
+ return (error == EINVAL);
+}
+
+static int connection_fatally_broken(int error)
+{
+ return (error != ENOENT) && (error != ENETDOWN);
+}
+
+#else
+
+static int connection_closed(int error)
+{
+ return (error == ECONNRESET);
+}
+
+static int connection_fatally_broken(int error)
+{
+ return (error != ENOENT) && (error != ECONNREFUSED);
+}
+
+#endif
+
static int send_request(const char *socket, const struct strbuf *out)
{
int got_data = 0;
@@ -28,7 +54,7 @@ static int send_request(const char *socket, const struct strbuf *out)
int r;
r = read_in_full(fd, in, sizeof(in));
- if (r == 0 || (r < 0 && errno == ECONNRESET))
+ if (r == 0 || (r < 0 && connection_closed(errno)))
break;
if (r < 0)
die_errno("read error from cache daemon");
@@ -75,7 +101,7 @@ static void do_cache(const char *socket, const char *action, int timeout,
}
if (send_request(socket, &buf) < 0) {
- if (errno != ENOENT && errno != ECONNREFUSED)
+ if (connection_fatally_broken(errno))
die_errno("unable to connect to cache daemon");
if (flags & FLAG_SPAWN) {
spawn_daemon(socket);
@@ -90,7 +116,7 @@ static char *get_socket_path(void)
{
struct stat sb;
char *old_dir, *socket;
- old_dir = expand_user_path("~/.git-credential-cache", 0);
+ old_dir = interpolate_path("~/.git-credential-cache", 0);
if (old_dir && !stat(old_dir, &sb) && S_ISDIR(sb.st_mode))
socket = xstrfmt("%s/socket", old_dir);
else
diff --git a/builtin/credential-store.c b/builtin/credential-store.c
index ae3c1ba..62a4f3c 100644
--- a/builtin/credential-store.c
+++ b/builtin/credential-store.c
@@ -173,7 +173,7 @@ int cmd_credential_store(int argc, const char **argv, const char *prefix)
if (file) {
string_list_append(&fns, file);
} else {
- if ((file = expand_user_path("~/.git-credentials", 0)))
+ if ((file = interpolate_path("~/.git-credentials", 0)))
string_list_append_nodup(&fns, file);
file = xdg_config_home("credentials");
if (file)
diff --git a/builtin/difftool.c b/builtin/difftool.c
index 90c0bfc..4931c10 100644
--- a/builtin/difftool.c
+++ b/builtin/difftool.c
@@ -252,16 +252,6 @@ static void changed_files(struct hashmap *result, const char *index_path,
strbuf_release(&buf);
}
-static NORETURN void exit_cleanup(const char *tmpdir, int exit_code)
-{
- struct strbuf buf = STRBUF_INIT;
- strbuf_addstr(&buf, tmpdir);
- remove_dir_recursively(&buf, 0);
- if (exit_code)
- warning(_("failed: %d"), exit_code);
- exit(exit_code);
-}
-
static int ensure_leading_directories(char *path)
{
switch (safe_create_leading_directories(path)) {
@@ -330,19 +320,44 @@ static int checkout_path(unsigned mode, struct object_id *oid,
return ret;
}
-static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
- int argc, const char **argv)
+static void write_file_in_directory(struct strbuf *dir, size_t dir_len,
+ const char *path, const char *content)
{
- char tmpdir[PATH_MAX];
+ add_path(dir, dir_len, path);
+ ensure_leading_directories(dir->buf);
+ unlink(dir->buf);
+ write_file(dir->buf, "%s", content);
+}
+
+/* Write the file contents for the left and right sides of the difftool
+ * dir-diff representation for submodules and symlinks. Symlinks and submodules
+ * are written as regular text files so that external diff tools can diff them
+ * as text files, resulting in behavior that is analogous to to what "git diff"
+ * displays for symlink and submodule diffs.
+ */
+static void write_standin_files(struct pair_entry *entry,
+ struct strbuf *ldir, size_t ldir_len,
+ struct strbuf *rdir, size_t rdir_len)
+{
+ if (*entry->left)
+ write_file_in_directory(ldir, ldir_len, entry->path, entry->left);
+ if (*entry->right)
+ write_file_in_directory(rdir, rdir_len, entry->path, entry->right);
+}
+
+static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
+ struct child_process *child)
+{
struct strbuf info = STRBUF_INIT, lpath = STRBUF_INIT;
struct strbuf rpath = STRBUF_INIT, buf = STRBUF_INIT;
struct strbuf ldir = STRBUF_INIT, rdir = STRBUF_INIT;
struct strbuf wtdir = STRBUF_INIT;
- char *lbase_dir, *rbase_dir;
+ struct strbuf tmpdir = STRBUF_INIT;
+ char *lbase_dir = NULL, *rbase_dir = NULL;
size_t ldir_len, rdir_len, wtdir_len;
const char *workdir, *tmp;
int ret = 0, i;
- FILE *fp;
+ FILE *fp = NULL;
struct hashmap working_tree_dups = HASHMAP_INIT(working_tree_entry_cmp,
NULL);
struct hashmap submodules = HASHMAP_INIT(pair_cmp, NULL);
@@ -351,8 +366,7 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
struct pair_entry *entry;
struct index_state wtindex;
struct checkout lstate, rstate;
- int rc, flags = RUN_GIT_CMD, err = 0;
- struct child_process child = CHILD_PROCESS_INIT;
+ int flags = RUN_GIT_CMD, err = 0;
const char *helper_argv[] = { "difftool--helper", NULL, NULL, NULL };
struct hashmap wt_modified, tmp_modified;
int indices_loaded = 0;
@@ -361,11 +375,15 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
/* Setup temp directories */
tmp = getenv("TMPDIR");
- xsnprintf(tmpdir, sizeof(tmpdir), "%s/git-difftool.XXXXXX", tmp ? tmp : "/tmp");
- if (!mkdtemp(tmpdir))
- return error("could not create '%s'", tmpdir);
- strbuf_addf(&ldir, "%s/left/", tmpdir);
- strbuf_addf(&rdir, "%s/right/", tmpdir);
+ strbuf_add_absolute_path(&tmpdir, tmp ? tmp : "/tmp");
+ strbuf_trim_trailing_dir_sep(&tmpdir);
+ strbuf_addstr(&tmpdir, "/git-difftool.XXXXXX");
+ if (!mkdtemp(tmpdir.buf)) {
+ ret = error("could not create '%s'", tmpdir.buf);
+ goto finish;
+ }
+ strbuf_addf(&ldir, "%s/left/", tmpdir.buf);
+ strbuf_addf(&rdir, "%s/right/", tmpdir.buf);
strbuf_addstr(&wtdir, workdir);
if (!wtdir.len || !is_dir_sep(wtdir.buf[wtdir.len - 1]))
strbuf_addch(&wtdir, '/');
@@ -387,19 +405,15 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
rdir_len = rdir.len;
wtdir_len = wtdir.len;
- child.no_stdin = 1;
- child.git_cmd = 1;
- child.use_shell = 0;
- child.clean_on_exit = 1;
- child.dir = prefix;
- child.out = -1;
- strvec_pushl(&child.args, "diff", "--raw", "--no-abbrev", "-z",
- NULL);
- for (i = 0; i < argc; i++)
- strvec_push(&child.args, argv[i]);
- if (start_command(&child))
+ child->no_stdin = 1;
+ child->git_cmd = 1;
+ child->use_shell = 0;
+ child->clean_on_exit = 1;
+ child->dir = prefix;
+ child->out = -1;
+ if (start_command(child))
die("could not obtain raw diff");
- fp = xfdopen(child.out, "r");
+ fp = xfdopen(child->out, "r");
/* Build index info for left and right sides of the diff */
i = 0;
@@ -410,9 +424,9 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
const char *src_path, *dst_path;
if (starts_with(info.buf, "::"))
- die(N_("combined diff formats('-c' and '--cc') are "
+ die(N_("combined diff formats ('-c' and '--cc') are "
"not supported in\n"
- "directory diff mode('-d' and '--dir-diff')."));
+ "directory diff mode ('-d' and '--dir-diff')."));
if (parse_index_info(info.buf, &lmode, &rmode, &loid, &roid,
&status))
@@ -525,7 +539,7 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
fclose(fp);
fp = NULL;
- if (finish_command(&child)) {
+ if (finish_command(child)) {
ret = error("error occurred running diff --raw");
goto finish;
}
@@ -540,40 +554,19 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
*/
hashmap_for_each_entry(&submodules, &iter, entry,
entry /* member name */) {
- if (*entry->left) {
- add_path(&ldir, ldir_len, entry->path);
- ensure_leading_directories(ldir.buf);
- write_file(ldir.buf, "%s", entry->left);
- }
- if (*entry->right) {
- add_path(&rdir, rdir_len, entry->path);
- ensure_leading_directories(rdir.buf);
- write_file(rdir.buf, "%s", entry->right);
- }
+ write_standin_files(entry, &ldir, ldir_len, &rdir, rdir_len);
}
/*
- * Symbolic links require special treatment.The standard "git diff"
+ * Symbolic links require special treatment. The standard "git diff"
* shows only the link itself, not the contents of the link target.
* This loop replicates that behavior.
*/
hashmap_for_each_entry(&symlinks2, &iter, entry,
entry /* member name */) {
- if (*entry->left) {
- add_path(&ldir, ldir_len, entry->path);
- ensure_leading_directories(ldir.buf);
- unlink(ldir.buf);
- write_file(ldir.buf, "%s", entry->left);
- }
- if (*entry->right) {
- add_path(&rdir, rdir_len, entry->path);
- ensure_leading_directories(rdir.buf);
- unlink(rdir.buf);
- write_file(rdir.buf, "%s", entry->right);
- }
- }
- strbuf_release(&buf);
+ write_standin_files(entry, &ldir, ldir_len, &rdir, rdir_len);
+ }
strbuf_setlen(&ldir, ldir_len);
helper_argv[1] = ldir.buf;
@@ -585,7 +578,7 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
flags = 0;
} else
setenv("GIT_DIFFTOOL_DIRDIFF", "true", 1);
- rc = run_command_v_opt(helper_argv, flags);
+ ret = run_command_v_opt(helper_argv, flags);
/* TODO: audit for interaction with sparse-index. */
ensure_full_index(&wtindex);
@@ -619,7 +612,7 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
if (!indices_loaded) {
struct lock_file lock = LOCK_INIT;
strbuf_reset(&buf);
- strbuf_addf(&buf, "%s/wtindex", tmpdir);
+ strbuf_addf(&buf, "%s/wtindex", tmpdir.buf);
if (hold_lock_file_for_update(&lock, buf.buf, 0) < 0 ||
write_locked_index(&wtindex, &lock, COMMIT_LOCK)) {
ret = error("could not write %s", buf.buf);
@@ -649,11 +642,14 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
}
if (err) {
- warning(_("temporary files exist in '%s'."), tmpdir);
+ warning(_("temporary files exist in '%s'."), tmpdir.buf);
warning(_("you may want to cleanup or recover these."));
- exit(1);
- } else
- exit_cleanup(tmpdir, rc);
+ ret = 1;
+ } else {
+ remove_dir_recursively(&tmpdir, 0);
+ if (ret)
+ warning(_("failed: %d"), ret);
+ }
finish:
if (fp)
@@ -665,30 +661,29 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
strbuf_release(&rdir);
strbuf_release(&wtdir);
strbuf_release(&buf);
+ strbuf_release(&tmpdir);
- return ret;
+ return (ret < 0) ? 1 : ret;
}
static int run_file_diff(int prompt, const char *prefix,
- int argc, const char **argv)
+ struct child_process *child)
{
- struct strvec args = STRVEC_INIT;
const char *env[] = {
"GIT_PAGER=", "GIT_EXTERNAL_DIFF=git-difftool--helper", NULL,
NULL
};
- int i;
if (prompt > 0)
env[2] = "GIT_DIFFTOOL_PROMPT=true";
else if (!prompt)
env[2] = "GIT_DIFFTOOL_NO_PROMPT=true";
+ child->git_cmd = 1;
+ child->dir = prefix;
+ strvec_pushv(&child->env_array, env);
- strvec_push(&args, "diff");
- for (i = 0; i < argc; i++)
- strvec_push(&args, argv[i]);
- return run_command_v_opt_cd_env(args.v, RUN_GIT_CMD, prefix, env);
+ return run_command(child);
}
int cmd_difftool(int argc, const char **argv, const char *prefix)
@@ -715,12 +710,13 @@ int cmd_difftool(int argc, const char **argv, const char *prefix)
"`--tool`")),
OPT_BOOL(0, "trust-exit-code", &trust_exit_code,
N_("make 'git-difftool' exit when an invoked diff "
- "tool returns a non - zero exit code")),
+ "tool returns a non-zero exit code")),
OPT_STRING('x', "extcmd", &extcmd, N_("command"),
N_("specify a custom command for viewing diffs")),
- OPT_ARGUMENT("no-index", &no_index, N_("passed to `diff`")),
+ OPT_BOOL(0, "no-index", &no_index, N_("passed to `diff`")),
OPT_END()
};
+ struct child_process child = CHILD_PROCESS_INIT;
git_config(difftool_config, NULL);
symlinks = has_symlinks;
@@ -770,7 +766,14 @@ int cmd_difftool(int argc, const char **argv, const char *prefix)
* will invoke a separate instance of 'git-difftool--helper' for
* each file that changed.
*/
+ strvec_push(&child.args, "diff");
+ if (no_index)
+ strvec_push(&child.args, "--no-index");
if (dir_diff)
- return run_dir_diff(extcmd, symlinks, prefix, argc, argv);
- return run_file_diff(prompt, prefix, argc, argv);
+ strvec_pushl(&child.args, "--raw", "--no-abbrev", "-z", NULL);
+ strvec_pushv(&child.args, argv);
+
+ if (dir_diff)
+ return run_dir_diff(extcmd, symlinks, prefix, &child);
+ return run_file_diff(prompt, prefix, &child);
}
diff --git a/builtin/fast-export.c b/builtin/fast-export.c
index 95e8e89..8e2caf7 100644
--- a/builtin/fast-export.c
+++ b/builtin/fast-export.c
@@ -312,7 +312,7 @@ static void export_blob(const struct object_id *oid)
if (!buf)
die("could not read blob %s", oid_to_hex(oid));
if (check_object_signature(the_repository, oid, buf, size,
- type_name(type)) < 0)
+ type_name(type), NULL) < 0)
die("oid mismatch in blob %s", oid_to_hex(oid));
object = parse_object_buffer(the_repository, oid, type,
size, buf, &eaten);
diff --git a/builtin/fetch.c b/builtin/fetch.c
index e064687..f7abbc3 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -712,7 +712,7 @@ static void adjust_refcol_width(const struct ref *ref)
int max, rlen, llen, len;
/* uptodate lines are only shown on high verbosity level */
- if (!verbosity && oideq(&ref->peer_ref->old_oid, &ref->old_oid))
+ if (verbosity <= 0 && oideq(&ref->peer_ref->old_oid, &ref->old_oid))
return;
max = term_columns();
@@ -748,6 +748,9 @@ static void prepare_format_display(struct ref *ref_map)
struct ref *rm;
const char *format = "full";
+ if (verbosity < 0)
+ return;
+
git_config_get_string_tmp("fetch.output", &format);
if (!strcasecmp(format, "full"))
compact_format = 0;
@@ -827,7 +830,12 @@ static void format_display(struct strbuf *display, char code,
const char *remote, const char *local,
int summary_width)
{
- int width = (summary_width + strlen(summary) - gettext_width(summary));
+ int width;
+
+ if (verbosity < 0)
+ return;
+
+ width = (summary_width + strlen(summary) - gettext_width(summary));
strbuf_addf(display, "%c %-*s ", code, width, summary);
if (!compact_format)
@@ -846,13 +854,11 @@ static int update_local_ref(struct ref *ref,
int summary_width)
{
struct commit *current = NULL, *updated;
- enum object_type type;
struct branch *current_branch = branch_get(NULL);
const char *pretty_ref = prettify_refname(ref->name);
int fast_forward = 0;
- type = oid_object_info(the_repository, &ref->new_oid, NULL);
- if (type < 0)
+ if (!repo_has_object_file(the_repository, &ref->new_oid))
die(_("object %s not found"), oid_to_hex(&ref->new_oid));
if (oideq(&ref->old_oid, &ref->new_oid)) {
@@ -964,7 +970,7 @@ static int update_local_ref(struct ref *ref,
}
}
-static int iterate_ref_map(void *cb_data, struct object_id *oid)
+static const struct object_id *iterate_ref_map(void *cb_data)
{
struct ref **rm = cb_data;
struct ref *ref = *rm;
@@ -972,10 +978,9 @@ static int iterate_ref_map(void *cb_data, struct object_id *oid)
while (ref && ref->status == REF_STATUS_REJECT_SHALLOW)
ref = ref->next;
if (!ref)
- return -1; /* end of the list */
+ return NULL;
*rm = ref->next;
- oidcpy(oid, &ref->old_oid);
- return 0;
+ return &ref->old_oid;
}
struct fetch_head {
@@ -1074,7 +1079,6 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
int connectivity_checked, struct ref *ref_map)
{
struct fetch_head fetch_head;
- struct commit *commit;
int url_len, i, rc = 0;
struct strbuf note = STRBUF_INIT, err = STRBUF_INIT;
struct ref_transaction *transaction = NULL;
@@ -1122,6 +1126,7 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
want_status <= FETCH_HEAD_IGNORE;
want_status++) {
for (rm = ref_map; rm; rm = rm->next) {
+ struct commit *commit = NULL;
struct ref *ref = NULL;
if (rm->status == REF_STATUS_REJECT_SHALLOW) {
@@ -1131,11 +1136,23 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
continue;
}
- commit = lookup_commit_reference_gently(the_repository,
- &rm->old_oid,
- 1);
- if (!commit)
- rm->fetch_head_status = FETCH_HEAD_NOT_FOR_MERGE;
+ /*
+ * References in "refs/tags/" are often going to point
+ * to annotated tags, which are not part of the
+ * commit-graph. We thus only try to look up refs in
+ * the graph which are not in that namespace to not
+ * regress performance in repositories with many
+ * annotated tags.
+ */
+ if (!starts_with(rm->name, "refs/tags/"))
+ commit = lookup_commit_in_graph(the_repository, &rm->old_oid);
+ if (!commit) {
+ commit = lookup_commit_reference_gently(the_repository,
+ &rm->old_oid,
+ 1);
+ if (!commit)
+ rm->fetch_head_status = FETCH_HEAD_NOT_FOR_MERGE;
+ }
if (rm->fetch_head_status != want_status)
continue;
@@ -1202,13 +1219,12 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
"FETCH_HEAD", summary_width);
}
if (note.len) {
- if (verbosity >= 0 && !shown_url) {
+ if (!shown_url) {
fprintf(stderr, _("From %.*s\n"),
url_len, url);
shown_url = 1;
}
- if (verbosity >= 0)
- fprintf(stderr, " %s\n", note.buf);
+ fprintf(stderr, " %s\n", note.buf);
}
}
}
@@ -1229,7 +1245,7 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
" 'git remote prune %s' to remove any old, conflicting "
"branches"), remote_name);
- if (advice_fetch_show_forced_updates) {
+ if (advice_enabled(ADVICE_FETCH_SHOW_FORCED_UPDATES)) {
if (!fetch_show_forced_updates) {
warning(_(warn_show_forced_updates));
} else if (forced_updates_ms > FORCED_UPDATES_DELAY_WARNING_IN_MS) {
@@ -1282,37 +1298,35 @@ static int check_exist_and_connected(struct ref *ref_map)
return check_connected(iterate_ref_map, &rm, &opt);
}
-static int fetch_refs(struct transport *transport, struct ref *ref_map)
+static int fetch_and_consume_refs(struct transport *transport, struct ref *ref_map)
{
- int ret = check_exist_and_connected(ref_map);
+ int connectivity_checked = 1;
+ int ret;
+
+ /*
+ * We don't need to perform a fetch in case we can already satisfy all
+ * refs.
+ */
+ ret = check_exist_and_connected(ref_map);
if (ret) {
trace2_region_enter("fetch", "fetch_refs", the_repository);
ret = transport_fetch_refs(transport, ref_map);
trace2_region_leave("fetch", "fetch_refs", the_repository);
+ if (ret)
+ goto out;
+ connectivity_checked = transport->smart_options ?
+ transport->smart_options->connectivity_checked : 0;
}
- if (!ret)
- /*
- * Keep the new pack's ".keep" file around to allow the caller
- * time to update refs to reference the new objects.
- */
- return 0;
- transport_unlock_pack(transport);
- return ret;
-}
-/* Update local refs based on the ref values fetched from a remote */
-static int consume_refs(struct transport *transport, struct ref *ref_map)
-{
- int connectivity_checked = transport->smart_options
- ? transport->smart_options->connectivity_checked : 0;
- int ret;
trace2_region_enter("fetch", "consume_refs", the_repository);
ret = store_updated_refs(transport->url,
transport->remote->name,
connectivity_checked,
ref_map);
- transport_unlock_pack(transport);
trace2_region_leave("fetch", "consume_refs", the_repository);
+
+out:
+ transport_unlock_pack(transport);
return ret;
}
@@ -1501,8 +1515,7 @@ static void backfill_tags(struct transport *transport, struct ref *ref_map)
transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, NULL);
transport_set_option(transport, TRANS_OPT_DEPTH, "0");
transport_set_option(transport, TRANS_OPT_DEEPEN_RELATIVE, NULL);
- if (!fetch_refs(transport, ref_map))
- consume_refs(transport, ref_map);
+ fetch_and_consume_refs(transport, ref_map);
if (gsecondary) {
transport_disconnect(gsecondary);
@@ -1593,7 +1606,7 @@ static int do_fetch(struct transport *transport,
transport->url);
}
}
- if (fetch_refs(transport, ref_map) || consume_refs(transport, ref_map)) {
+ if (fetch_and_consume_refs(transport, ref_map)) {
free_refs(ref_map);
retcode = 1;
goto cleanup;
@@ -2135,8 +2148,6 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
NULL);
}
- close_object_store(the_repository->objects);
-
if (enable_auto_gc)
run_auto_maintenance(verbosity < 0);
diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c
index 89cb630..16a2c7d 100644
--- a/builtin/for-each-ref.c
+++ b/builtin/for-each-ref.c
@@ -77,7 +77,7 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix)
filter.name_patterns = argv;
filter.match_as_path = 1;
- filter_refs(&array, &filter, FILTER_REFS_ALL | FILTER_REFS_INCLUDE_BROKEN);
+ filter_refs(&array, &filter, FILTER_REFS_ALL);
ref_array_sort(sorting, &array);
if (!maxcount || array.nr < maxcount)
@@ -96,6 +96,6 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix)
ref_array_clear(&array);
free_commit_list(filter.with_commit);
free_commit_list(filter.no_commit);
- UNLEAK(sorting);
+ ref_sorting_release(sorting);
return 0;
}
diff --git a/builtin/fsck.c b/builtin/fsck.c
index b42b6fe..27b9e78 100644
--- a/builtin/fsck.c
+++ b/builtin/fsck.c
@@ -593,18 +593,44 @@ static void get_default_heads(void)
}
}
+struct for_each_loose_cb
+{
+ struct progress *progress;
+ struct strbuf obj_type;
+};
+
static int fsck_loose(const struct object_id *oid, const char *path, void *data)
{
+ struct for_each_loose_cb *cb_data = data;
struct object *obj;
- enum object_type type;
+ enum object_type type = OBJ_NONE;
unsigned long size;
- void *contents;
+ void *contents = NULL;
int eaten;
+ struct object_info oi = OBJECT_INFO_INIT;
+ struct object_id real_oid = *null_oid();
+ int err = 0;
- if (read_loose_object(path, oid, &type, &size, &contents) < 0) {
+ strbuf_reset(&cb_data->obj_type);
+ oi.type_name = &cb_data->obj_type;
+ oi.sizep = &size;
+ oi.typep = &type;
+
+ if (read_loose_object(path, oid, &real_oid, &contents, &oi) < 0) {
+ if (contents && !oideq(&real_oid, oid))
+ err = error(_("%s: hash-path mismatch, found at: %s"),
+ oid_to_hex(&real_oid), path);
+ else
+ err = error(_("%s: object corrupt or missing: %s"),
+ oid_to_hex(oid), path);
+ }
+ if (type != OBJ_NONE && type < 0)
+ err = error(_("%s: object is of unknown type '%s': %s"),
+ oid_to_hex(&real_oid), cb_data->obj_type.buf,
+ path);
+ if (err < 0) {
errors_found |= ERROR_OBJECT;
- error(_("%s: object corrupt or missing: %s"),
- oid_to_hex(oid), path);
+ free(contents);
return 0; /* keep checking other objects */
}
@@ -640,8 +666,10 @@ static int fsck_cruft(const char *basename, const char *path, void *data)
return 0;
}
-static int fsck_subdir(unsigned int nr, const char *path, void *progress)
+static int fsck_subdir(unsigned int nr, const char *path, void *data)
{
+ struct for_each_loose_cb *cb_data = data;
+ struct progress *progress = cb_data->progress;
display_progress(progress, nr + 1);
return 0;
}
@@ -649,6 +677,10 @@ static int fsck_subdir(unsigned int nr, const char *path, void *progress)
static void fsck_object_dir(const char *path)
{
struct progress *progress = NULL;
+ struct for_each_loose_cb cb_data = {
+ .obj_type = STRBUF_INIT,
+ .progress = progress,
+ };
if (verbose)
fprintf_ln(stderr, _("Checking object directory"));
@@ -657,9 +689,10 @@ static void fsck_object_dir(const char *path)
progress = start_progress(_("Checking object directories"), 256);
for_each_loose_file_in_objdir(path, fsck_loose, fsck_cruft, fsck_subdir,
- progress);
+ &cb_data);
display_progress(progress, 256);
stop_progress(&progress);
+ strbuf_release(&cb_data.obj_type);
}
static int fsck_head_link(const char *head_ref_name,
@@ -803,6 +836,7 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
fsck_enable_object_names(&fsck_walk_options);
git_config(git_fsck_config, &fsck_obj_options);
+ prepare_repo_settings(the_repository);
if (connectivity_only) {
for_each_loose_object(mark_loose_for_connectivity, NULL, 0);
@@ -908,7 +942,7 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
check_connectivity();
- if (!git_config_get_bool("core.commitgraph", &i) && i) {
+ if (the_repository->settings.core_commit_graph) {
struct child_process commit_graph_verify = CHILD_PROCESS_INIT;
const char *verify_argv[] = { "commit-graph", "verify", NULL, NULL, NULL };
@@ -924,7 +958,7 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
}
}
- if (!git_config_get_bool("core.multipackindex", &i) && i) {
+ if (the_repository->settings.core_multi_pack_index) {
struct child_process midx_verify = CHILD_PROCESS_INIT;
const char *midx_argv[] = { "multi-pack-index", "verify", NULL, NULL, NULL };
diff --git a/builtin/gc.c b/builtin/gc.c
index ac60662..bcef6a4 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -663,8 +663,8 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
gc_before_repack();
if (!repository_format_precious_objects) {
- close_object_store(the_repository->objects);
- if (run_command_v_opt(repack.v, RUN_GIT_CMD))
+ if (run_command_v_opt(repack.v,
+ RUN_GIT_CMD | RUN_CLOSE_OBJECT_STORE))
die(FAILED_RUN, repack.v[0]);
if (prune_expire) {
@@ -848,7 +848,7 @@ static int run_write_commit_graph(struct maintenance_run_opts *opts)
{
struct child_process child = CHILD_PROCESS_INIT;
- child.git_cmd = 1;
+ child.git_cmd = child.close_object_store = 1;
strvec_pushl(&child.args, "commit-graph", "write",
"--split", "--reachable", NULL);
@@ -864,7 +864,6 @@ static int maintenance_task_commit_graph(struct maintenance_run_opts *opts)
if (!the_repository->settings.core_commit_graph)
return 0;
- close_object_store(the_repository->objects);
if (run_write_commit_graph(opts)) {
error(_("failed to write commit-graph"));
return 1;
@@ -913,7 +912,7 @@ static int maintenance_task_gc(struct maintenance_run_opts *opts)
{
struct child_process child = CHILD_PROCESS_INIT;
- child.git_cmd = 1;
+ child.git_cmd = child.close_object_store = 1;
strvec_push(&child.args, "gc");
if (opts->auto_flag)
@@ -923,7 +922,6 @@ static int maintenance_task_gc(struct maintenance_run_opts *opts)
else
strvec_push(&child.args, "--no-quiet");
- close_object_store(the_repository->objects);
return run_command(&child);
}
@@ -1051,12 +1049,11 @@ static int maintenance_task_loose_objects(struct maintenance_run_opts *opts)
static int incremental_repack_auto_condition(void)
{
struct packed_git *p;
- int enabled;
int incremental_repack_auto_limit = 10;
int count = 0;
- if (git_config_get_bool("core.multiPackIndex", &enabled) ||
- !enabled)
+ prepare_repo_settings(the_repository);
+ if (!the_repository->settings.core_multi_pack_index)
return 0;
git_config_get_int("maintenance.incremental-repack.auto",
@@ -1097,14 +1094,12 @@ static int multi_pack_index_expire(struct maintenance_run_opts *opts)
{
struct child_process child = CHILD_PROCESS_INIT;
- child.git_cmd = 1;
+ child.git_cmd = child.close_object_store = 1;
strvec_pushl(&child.args, "multi-pack-index", "expire", NULL);
if (opts->quiet)
strvec_push(&child.args, "--no-progress");
- close_object_store(the_repository->objects);
-
if (run_command(&child))
return error(_("'git multi-pack-index expire' failed"));
@@ -1155,7 +1150,7 @@ static int multi_pack_index_repack(struct maintenance_run_opts *opts)
{
struct child_process child = CHILD_PROCESS_INIT;
- child.git_cmd = 1;
+ child.git_cmd = child.close_object_store = 1;
strvec_pushl(&child.args, "multi-pack-index", "repack", NULL);
if (opts->quiet)
@@ -1164,8 +1159,6 @@ static int multi_pack_index_repack(struct maintenance_run_opts *opts)
strvec_pushf(&child.args, "--batch-size=%"PRIuMAX,
(uintmax_t)get_auto_pack_size());
- close_object_store(the_repository->objects);
-
if (run_command(&child))
return error(_("'git multi-pack-index repack' failed"));
@@ -1529,6 +1522,93 @@ static const char *get_frequency(enum schedule_priority schedule)
}
}
+/*
+ * get_schedule_cmd` reads the GIT_TEST_MAINT_SCHEDULER environment variable
+ * to mock the schedulers that `git maintenance start` rely on.
+ *
+ * For test purpose, GIT_TEST_MAINT_SCHEDULER can be set to a comma-separated
+ * list of colon-separated key/value pairs where each pair contains a scheduler
+ * and its corresponding mock.
+ *
+ * * If $GIT_TEST_MAINT_SCHEDULER is not set, return false and leave the
+ * arguments unmodified.
+ *
+ * * If $GIT_TEST_MAINT_SCHEDULER is set, return true.
+ * In this case, the *cmd value is read as input.
+ *
+ * * if the input value *cmd is the key of one of the comma-separated list
+ * item, then *is_available is set to true and *cmd is modified and becomes
+ * the mock command.
+ *
+ * * if the input value *cmd isn’t the key of any of the comma-separated list
+ * item, then *is_available is set to false.
+ *
+ * Ex.:
+ * GIT_TEST_MAINT_SCHEDULER not set
+ * +-------+-------------------------------------------------+
+ * | Input | Output |
+ * | *cmd | return code | *cmd | *is_available |
+ * +-------+-------------+-------------------+---------------+
+ * | "foo" | false | "foo" (unchanged) | (unchanged) |
+ * +-------+-------------+-------------------+---------------+
+ *
+ * GIT_TEST_MAINT_SCHEDULER set to “foo:./mock_foo.sh,bar:./mock_bar.sh”
+ * +-------+-------------------------------------------------+
+ * | Input | Output |
+ * | *cmd | return code | *cmd | *is_available |
+ * +-------+-------------+-------------------+---------------+
+ * | "foo" | true | "./mock.foo.sh" | true |
+ * | "qux" | true | "qux" (unchanged) | false |
+ * +-------+-------------+-------------------+---------------+
+ */
+static int get_schedule_cmd(const char **cmd, int *is_available)
+{
+ char *testing = xstrdup_or_null(getenv("GIT_TEST_MAINT_SCHEDULER"));
+ struct string_list_item *item;
+ struct string_list list = STRING_LIST_INIT_NODUP;
+
+ if (!testing)
+ return 0;
+
+ if (is_available)
+ *is_available = 0;
+
+ string_list_split_in_place(&list, testing, ',', -1);
+ for_each_string_list_item(item, &list) {
+ struct string_list pair = STRING_LIST_INIT_NODUP;
+
+ if (string_list_split_in_place(&pair, item->string, ':', 2) != 2)
+ continue;
+
+ if (!strcmp(*cmd, pair.items[0].string)) {
+ *cmd = pair.items[1].string;
+ if (is_available)
+ *is_available = 1;
+ string_list_clear(&list, 0);
+ UNLEAK(testing);
+ return 1;
+ }
+ }
+
+ string_list_clear(&list, 0);
+ free(testing);
+ return 1;
+}
+
+static int is_launchctl_available(void)
+{
+ const char *cmd = "launchctl";
+ int is_available;
+ if (get_schedule_cmd(&cmd, &is_available))
+ return is_available;
+
+#ifdef __APPLE__
+ return 1;
+#else
+ return 0;
+#endif
+}
+
static char *launchctl_service_name(const char *frequency)
{
struct strbuf label = STRBUF_INIT;
@@ -1542,7 +1622,7 @@ static char *launchctl_service_filename(const char *name)
struct strbuf filename = STRBUF_INIT;
strbuf_addf(&filename, "~/Library/LaunchAgents/%s.plist", name);
- expanded = expand_user_path(filename.buf, 1);
+ expanded = interpolate_path(filename.buf, 1);
if (!expanded)
die(_("failed to expand path '%s'"), filename.buf);
@@ -1555,19 +1635,17 @@ static char *launchctl_get_uid(void)
return xstrfmt("gui/%d", getuid());
}
-static int launchctl_boot_plist(int enable, const char *filename, const char *cmd)
+static int launchctl_boot_plist(int enable, const char *filename)
{
+ const char *cmd = "launchctl";
int result;
struct child_process child = CHILD_PROCESS_INIT;
char *uid = launchctl_get_uid();
+ get_schedule_cmd(&cmd, NULL);
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);
+ strvec_pushl(&child.args, enable ? "bootstrap" : "bootout", uid,
+ filename, NULL);
child.no_stderr = 1;
child.no_stdout = 1;
@@ -1581,30 +1659,28 @@ static int launchctl_boot_plist(int enable, const char *filename, const char *cm
return result;
}
-static int launchctl_remove_plist(enum schedule_priority schedule, const char *cmd)
+static int launchctl_remove_plist(enum schedule_priority schedule)
{
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);
+ int result = launchctl_boot_plist(0, filename);
unlink(filename);
free(filename);
free(name);
return result;
}
-static int launchctl_remove_plists(const char *cmd)
+static int launchctl_remove_plists(void)
{
- return launchctl_remove_plist(SCHEDULE_HOURLY, cmd) ||
- launchctl_remove_plist(SCHEDULE_DAILY, cmd) ||
- launchctl_remove_plist(SCHEDULE_WEEKLY, cmd);
+ return launchctl_remove_plist(SCHEDULE_HOURLY) ||
+ launchctl_remove_plist(SCHEDULE_DAILY) ||
+ launchctl_remove_plist(SCHEDULE_WEEKLY);
}
static int launchctl_list_contains_plist(const char *name, const char *cmd)
{
- int result;
struct child_process child = CHILD_PROCESS_INIT;
- char *uid = launchctl_get_uid();
strvec_split(&child.args, cmd);
strvec_pushl(&child.args, "list", name, NULL);
@@ -1615,15 +1691,11 @@ static int launchctl_list_contains_plist(const char *name, const char *cmd)
if (start_command(&child))
die(_("failed to start launchctl"));
- result = finish_command(&child);
-
- free(uid);
-
/* Returns failure if 'name' doesn't exist. */
- return !result;
+ return !finish_command(&child);
}
-static int launchctl_schedule_plist(const char *exec_path, enum schedule_priority schedule, const char *cmd)
+static int launchctl_schedule_plist(const char *exec_path, enum schedule_priority schedule)
{
int i, fd;
const char *preamble, *repeat;
@@ -1634,7 +1706,9 @@ static int launchctl_schedule_plist(const char *exec_path, enum schedule_priorit
static unsigned long lock_file_timeout_ms = ULONG_MAX;
struct strbuf plist = STRBUF_INIT, plist2 = STRBUF_INIT;
struct stat st;
+ const char *cmd = "launchctl";
+ get_schedule_cmd(&cmd, NULL);
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\">"
@@ -1715,8 +1789,8 @@ static int launchctl_schedule_plist(const char *exec_path, enum schedule_priorit
die_errno(_("could not write '%s'"), filename);
/* bootout might fail if not already running, so ignore */
- launchctl_boot_plist(0, filename, cmd);
- if (launchctl_boot_plist(1, filename, cmd))
+ launchctl_boot_plist(0, filename);
+ if (launchctl_boot_plist(1, filename))
die(_("failed to bootstrap service %s"), filename);
}
@@ -1727,21 +1801,35 @@ static int launchctl_schedule_plist(const char *exec_path, enum schedule_priorit
return 0;
}
-static int launchctl_add_plists(const char *cmd)
+static int launchctl_add_plists(void)
{
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);
+ return launchctl_schedule_plist(exec_path, SCHEDULE_HOURLY) ||
+ launchctl_schedule_plist(exec_path, SCHEDULE_DAILY) ||
+ launchctl_schedule_plist(exec_path, SCHEDULE_WEEKLY);
}
-static int launchctl_update_schedule(int run_maintenance, int fd, const char *cmd)
+static int launchctl_update_schedule(int run_maintenance, int fd)
{
if (run_maintenance)
- return launchctl_add_plists(cmd);
+ return launchctl_add_plists();
else
- return launchctl_remove_plists(cmd);
+ return launchctl_remove_plists();
+}
+
+static int is_schtasks_available(void)
+{
+ const char *cmd = "schtasks";
+ int is_available;
+ if (get_schedule_cmd(&cmd, &is_available))
+ return is_available;
+
+#ifdef GIT_WINDOWS_NATIVE
+ return 1;
+#else
+ return 0;
+#endif
}
static char *schtasks_task_name(const char *frequency)
@@ -1751,13 +1839,15 @@ static char *schtasks_task_name(const char *frequency)
return strbuf_detach(&label, NULL);
}
-static int schtasks_remove_task(enum schedule_priority schedule, const char *cmd)
+static int schtasks_remove_task(enum schedule_priority schedule)
{
+ const char *cmd = "schtasks";
int result;
struct strvec args = STRVEC_INIT;
const char *frequency = get_frequency(schedule);
char *name = schtasks_task_name(frequency);
+ get_schedule_cmd(&cmd, NULL);
strvec_split(&args, cmd);
strvec_pushl(&args, "/delete", "/tn", name, "/f", NULL);
@@ -1768,15 +1858,16 @@ static int schtasks_remove_task(enum schedule_priority schedule, const char *cmd
return result;
}
-static int schtasks_remove_tasks(const char *cmd)
+static int schtasks_remove_tasks(void)
{
- return schtasks_remove_task(SCHEDULE_HOURLY, cmd) ||
- schtasks_remove_task(SCHEDULE_DAILY, cmd) ||
- schtasks_remove_task(SCHEDULE_WEEKLY, cmd);
+ return schtasks_remove_task(SCHEDULE_HOURLY) ||
+ schtasks_remove_task(SCHEDULE_DAILY) ||
+ schtasks_remove_task(SCHEDULE_WEEKLY);
}
-static int schtasks_schedule_task(const char *exec_path, enum schedule_priority schedule, const char *cmd)
+static int schtasks_schedule_task(const char *exec_path, enum schedule_priority schedule)
{
+ const char *cmd = "schtasks";
int result;
struct child_process child = CHILD_PROCESS_INIT;
const char *xml;
@@ -1785,6 +1876,8 @@ static int schtasks_schedule_task(const char *exec_path, enum schedule_priority
char *name = schtasks_task_name(frequency);
struct strbuf tfilename = STRBUF_INIT;
+ get_schedule_cmd(&cmd, NULL);
+
strbuf_addf(&tfilename, "%s/schedule_%s_XXXXXX",
get_git_common_dir(), frequency);
tfile = xmks_tempfile(tfilename.buf);
@@ -1889,28 +1982,67 @@ static int schtasks_schedule_task(const char *exec_path, enum schedule_priority
return result;
}
-static int schtasks_schedule_tasks(const char *cmd)
+static int schtasks_schedule_tasks(void)
{
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);
+ return schtasks_schedule_task(exec_path, SCHEDULE_HOURLY) ||
+ schtasks_schedule_task(exec_path, SCHEDULE_DAILY) ||
+ schtasks_schedule_task(exec_path, SCHEDULE_WEEKLY);
}
-static int schtasks_update_schedule(int run_maintenance, int fd, const char *cmd)
+static int schtasks_update_schedule(int run_maintenance, int fd)
{
if (run_maintenance)
- return schtasks_schedule_tasks(cmd);
+ return schtasks_schedule_tasks();
else
- return schtasks_remove_tasks(cmd);
+ return schtasks_remove_tasks();
+}
+
+MAYBE_UNUSED
+static int check_crontab_process(const char *cmd)
+{
+ struct child_process child = CHILD_PROCESS_INIT;
+
+ strvec_split(&child.args, cmd);
+ strvec_push(&child.args, "-l");
+ child.no_stdin = 1;
+ child.no_stdout = 1;
+ child.no_stderr = 1;
+ child.silent_exec_failure = 1;
+
+ if (start_command(&child))
+ return 0;
+ /* Ignore exit code, as an empty crontab will return error. */
+ finish_command(&child);
+ return 1;
+}
+
+static int is_crontab_available(void)
+{
+ const char *cmd = "crontab";
+ int is_available;
+
+ if (get_schedule_cmd(&cmd, &is_available))
+ return is_available;
+
+#ifdef __APPLE__
+ /*
+ * macOS has cron, but it requires special permissions and will
+ * create a UI alert when attempting to run this command.
+ */
+ return 0;
+#else
+ return check_crontab_process(cmd);
+#endif
}
#define BEGIN_LINE "# BEGIN GIT MAINTENANCE SCHEDULE"
#define END_LINE "# END GIT MAINTENANCE SCHEDULE"
-static int crontab_update_schedule(int run_maintenance, int fd, const char *cmd)
+static int crontab_update_schedule(int run_maintenance, int fd)
{
+ const char *cmd = "crontab";
int result = 0;
int in_old_region = 0;
struct child_process crontab_list = CHILD_PROCESS_INIT;
@@ -1918,6 +2050,7 @@ static int crontab_update_schedule(int run_maintenance, int fd, const char *cmd)
FILE *cron_list, *cron_in;
struct strbuf line = STRBUF_INIT;
+ get_schedule_cmd(&cmd, NULL);
strvec_split(&crontab_list.args, cmd);
strvec_push(&crontab_list.args, "-l");
crontab_list.in = -1;
@@ -1994,66 +2127,376 @@ static int crontab_update_schedule(int run_maintenance, int fd, const char *cmd)
return result;
}
-#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)
+static int real_is_systemd_timer_available(void)
{
- int result;
- const char *scheduler = platform_scheduler;
- const char *cmd = scheduler;
- char *testing;
+ struct child_process child = CHILD_PROCESS_INIT;
+
+ strvec_pushl(&child.args, "systemctl", "--user", "list-timers", NULL);
+ child.no_stdin = 1;
+ child.no_stdout = 1;
+ child.no_stderr = 1;
+ child.silent_exec_failure = 1;
+
+ if (start_command(&child))
+ return 0;
+ if (finish_command(&child))
+ return 0;
+ return 1;
+}
+
+static int is_systemd_timer_available(void)
+{
+ const char *cmd = "systemctl";
+ int is_available;
+
+ if (get_schedule_cmd(&cmd, &is_available))
+ return is_available;
+
+ return real_is_systemd_timer_available();
+}
+
+static char *xdg_config_home_systemd(const char *filename)
+{
+ return xdg_config_home_for("systemd/user", filename);
+}
+
+static int systemd_timer_enable_unit(int enable,
+ enum schedule_priority schedule)
+{
+ const char *cmd = "systemctl";
+ struct child_process child = CHILD_PROCESS_INIT;
+ const char *frequency = get_frequency(schedule);
+
+ /*
+ * Disabling the systemd unit while it is already disabled makes
+ * systemctl print an error.
+ * Let's ignore it since it means we already are in the expected state:
+ * the unit is disabled.
+ *
+ * On the other hand, enabling a systemd unit which is already enabled
+ * produces no error.
+ */
+ if (!enable)
+ child.no_stderr = 1;
+
+ get_schedule_cmd(&cmd, NULL);
+ strvec_split(&child.args, cmd);
+ strvec_pushl(&child.args, "--user", enable ? "enable" : "disable",
+ "--now", NULL);
+ strvec_pushf(&child.args, "git-maintenance@%s.timer", frequency);
+
+ if (start_command(&child))
+ return error(_("failed to start systemctl"));
+ if (finish_command(&child))
+ /*
+ * Disabling an already disabled systemd unit makes
+ * systemctl fail.
+ * Let's ignore this failure.
+ *
+ * Enabling an enabled systemd unit doesn't fail.
+ */
+ if (enable)
+ return error(_("failed to run systemctl"));
+ return 0;
+}
+
+static int systemd_timer_delete_unit_templates(void)
+{
+ int ret = 0;
+ char *filename = xdg_config_home_systemd("git-maintenance@.timer");
+ if (unlink(filename) && !is_missing_file_error(errno))
+ ret = error_errno(_("failed to delete '%s'"), filename);
+ FREE_AND_NULL(filename);
+
+ filename = xdg_config_home_systemd("git-maintenance@.service");
+ if (unlink(filename) && !is_missing_file_error(errno))
+ ret = error_errno(_("failed to delete '%s'"), filename);
+
+ free(filename);
+ return ret;
+}
+
+static int systemd_timer_delete_units(void)
+{
+ return systemd_timer_enable_unit(0, SCHEDULE_HOURLY) ||
+ systemd_timer_enable_unit(0, SCHEDULE_DAILY) ||
+ systemd_timer_enable_unit(0, SCHEDULE_WEEKLY) ||
+ systemd_timer_delete_unit_templates();
+}
+
+static int systemd_timer_write_unit_templates(const char *exec_path)
+{
+ char *filename;
+ FILE *file;
+ const char *unit;
+
+ filename = xdg_config_home_systemd("git-maintenance@.timer");
+ if (safe_create_leading_directories(filename)) {
+ error(_("failed to create directories for '%s'"), filename);
+ goto error;
+ }
+ file = fopen_or_warn(filename, "w");
+ if (file == NULL)
+ goto error;
+
+ unit = "# This file was created and is maintained by Git.\n"
+ "# Any edits made in this file might be replaced in the future\n"
+ "# by a Git command.\n"
+ "\n"
+ "[Unit]\n"
+ "Description=Optimize Git repositories data\n"
+ "\n"
+ "[Timer]\n"
+ "OnCalendar=%i\n"
+ "Persistent=true\n"
+ "\n"
+ "[Install]\n"
+ "WantedBy=timers.target\n";
+ if (fputs(unit, file) == EOF) {
+ error(_("failed to write to '%s'"), filename);
+ fclose(file);
+ goto error;
+ }
+ if (fclose(file) == EOF) {
+ error_errno(_("failed to flush '%s'"), filename);
+ goto error;
+ }
+ free(filename);
+
+ filename = xdg_config_home_systemd("git-maintenance@.service");
+ file = fopen_or_warn(filename, "w");
+ if (file == NULL)
+ goto error;
+
+ unit = "# This file was created and is maintained by Git.\n"
+ "# Any edits made in this file might be replaced in the future\n"
+ "# by a Git command.\n"
+ "\n"
+ "[Unit]\n"
+ "Description=Optimize Git repositories data\n"
+ "\n"
+ "[Service]\n"
+ "Type=oneshot\n"
+ "ExecStart=\"%s/git\" --exec-path=\"%s\" for-each-repo --config=maintenance.repo maintenance run --schedule=%%i\n"
+ "LockPersonality=yes\n"
+ "MemoryDenyWriteExecute=yes\n"
+ "NoNewPrivileges=yes\n"
+ "RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6\n"
+ "RestrictNamespaces=yes\n"
+ "RestrictRealtime=yes\n"
+ "RestrictSUIDSGID=yes\n"
+ "SystemCallArchitectures=native\n"
+ "SystemCallFilter=@system-service\n";
+ if (fprintf(file, unit, exec_path, exec_path) < 0) {
+ error(_("failed to write to '%s'"), filename);
+ fclose(file);
+ goto error;
+ }
+ if (fclose(file) == EOF) {
+ error_errno(_("failed to flush '%s'"), filename);
+ goto error;
+ }
+ free(filename);
+ return 0;
+
+error:
+ free(filename);
+ systemd_timer_delete_unit_templates();
+ return -1;
+}
+
+static int systemd_timer_setup_units(void)
+{
+ const char *exec_path = git_exec_path();
+
+ int ret = systemd_timer_write_unit_templates(exec_path) ||
+ systemd_timer_enable_unit(1, SCHEDULE_HOURLY) ||
+ systemd_timer_enable_unit(1, SCHEDULE_DAILY) ||
+ systemd_timer_enable_unit(1, SCHEDULE_WEEKLY);
+ if (ret)
+ systemd_timer_delete_units();
+ return ret;
+}
+
+static int systemd_timer_update_schedule(int run_maintenance, int fd)
+{
+ if (run_maintenance)
+ return systemd_timer_setup_units();
+ else
+ return systemd_timer_delete_units();
+}
+
+enum scheduler {
+ SCHEDULER_INVALID = -1,
+ SCHEDULER_AUTO,
+ SCHEDULER_CRON,
+ SCHEDULER_SYSTEMD,
+ SCHEDULER_LAUNCHCTL,
+ SCHEDULER_SCHTASKS,
+};
+
+static const struct {
+ const char *name;
+ int (*is_available)(void);
+ int (*update_schedule)(int run_maintenance, int fd);
+} scheduler_fn[] = {
+ [SCHEDULER_CRON] = {
+ .name = "crontab",
+ .is_available = is_crontab_available,
+ .update_schedule = crontab_update_schedule,
+ },
+ [SCHEDULER_SYSTEMD] = {
+ .name = "systemctl",
+ .is_available = is_systemd_timer_available,
+ .update_schedule = systemd_timer_update_schedule,
+ },
+ [SCHEDULER_LAUNCHCTL] = {
+ .name = "launchctl",
+ .is_available = is_launchctl_available,
+ .update_schedule = launchctl_update_schedule,
+ },
+ [SCHEDULER_SCHTASKS] = {
+ .name = "schtasks",
+ .is_available = is_schtasks_available,
+ .update_schedule = schtasks_update_schedule,
+ },
+};
+
+static enum scheduler parse_scheduler(const char *value)
+{
+ if (!value)
+ return SCHEDULER_INVALID;
+ else if (!strcasecmp(value, "auto"))
+ return SCHEDULER_AUTO;
+ else if (!strcasecmp(value, "cron") || !strcasecmp(value, "crontab"))
+ return SCHEDULER_CRON;
+ else if (!strcasecmp(value, "systemd") ||
+ !strcasecmp(value, "systemd-timer"))
+ return SCHEDULER_SYSTEMD;
+ else if (!strcasecmp(value, "launchctl"))
+ return SCHEDULER_LAUNCHCTL;
+ else if (!strcasecmp(value, "schtasks"))
+ return SCHEDULER_SCHTASKS;
+ else
+ return SCHEDULER_INVALID;
+}
+
+static int maintenance_opt_scheduler(const struct option *opt, const char *arg,
+ int unset)
+{
+ enum scheduler *scheduler = opt->value;
+
+ BUG_ON_OPT_NEG(unset);
+
+ *scheduler = parse_scheduler(arg);
+ if (*scheduler == SCHEDULER_INVALID)
+ return error(_("unrecognized --scheduler argument '%s'"), arg);
+ return 0;
+}
+
+struct maintenance_start_opts {
+ enum scheduler scheduler;
+};
+
+static enum scheduler resolve_scheduler(enum scheduler scheduler)
+{
+ if (scheduler != SCHEDULER_AUTO)
+ return scheduler;
+
+#if defined(__APPLE__)
+ return SCHEDULER_LAUNCHCTL;
+
+#elif defined(GIT_WINDOWS_NATIVE)
+ return SCHEDULER_SCHTASKS;
+
+#elif defined(__linux__)
+ if (is_systemd_timer_available())
+ return SCHEDULER_SYSTEMD;
+ else if (is_crontab_available())
+ return SCHEDULER_CRON;
+ else
+ die(_("neither systemd timers nor crontab are available"));
+
+#else
+ return SCHEDULER_CRON;
+#endif
+}
+
+static void validate_scheduler(enum scheduler scheduler)
+{
+ if (scheduler == SCHEDULER_INVALID)
+ BUG("invalid scheduler");
+ if (scheduler == SCHEDULER_AUTO)
+ BUG("resolve_scheduler should have been called before");
+
+ if (!scheduler_fn[scheduler].is_available())
+ die(_("%s scheduler is not available"),
+ scheduler_fn[scheduler].name);
+}
+
+static int update_background_schedule(const struct maintenance_start_opts *opts,
+ int enable)
+{
+ unsigned int i;
+ int result = 0;
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) {
- result = error(_("another process is scheduling background maintenance"));
- goto cleanup;
+ free(lock_path);
+ 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);
+ for (i = 1; i < ARRAY_SIZE(scheduler_fn); i++) {
+ if (enable && opts->scheduler == i)
+ continue;
+ if (!scheduler_fn[i].is_available())
+ continue;
+ scheduler_fn[i].update_schedule(0, get_lock_file_fd(&lk));
+ }
+
+ if (enable)
+ result = scheduler_fn[opts->scheduler].update_schedule(
+ 1, get_lock_file_fd(&lk));
rollback_lock_file(&lk);
-cleanup:
free(lock_path);
- free(testing);
return result;
}
-static int maintenance_start(void)
+static const char *const builtin_maintenance_start_usage[] = {
+ N_("git maintenance start [--scheduler=<scheduler>]"),
+ NULL
+};
+
+static int maintenance_start(int argc, const char **argv, const char *prefix)
{
+ struct maintenance_start_opts opts = { 0 };
+ struct option options[] = {
+ OPT_CALLBACK_F(
+ 0, "scheduler", &opts.scheduler, N_("scheduler"),
+ N_("scheduler to trigger git maintenance run"),
+ PARSE_OPT_NONEG, maintenance_opt_scheduler),
+ OPT_END()
+ };
+
+ argc = parse_options(argc, argv, prefix, options,
+ builtin_maintenance_start_usage, 0);
+ if (argc)
+ usage_with_options(builtin_maintenance_start_usage, options);
+
+ opts.scheduler = resolve_scheduler(opts.scheduler);
+ validate_scheduler(opts.scheduler);
+
if (maintenance_register())
warning(_("failed to add repo to global config"));
-
- return update_background_schedule(1);
+ return update_background_schedule(&opts, 1);
}
static int maintenance_stop(void)
{
- return update_background_schedule(0);
+ return update_background_schedule(NULL, 0);
}
static const char builtin_maintenance_usage[] = N_("git maintenance <subcommand> [<options>]");
@@ -2067,7 +2510,7 @@ int cmd_maintenance(int argc, const char **argv, const char *prefix)
if (!strcmp(argv[1], "run"))
return maintenance_run(argc - 1, argv + 1, prefix);
if (!strcmp(argv[1], "start"))
- return maintenance_start();
+ return maintenance_start(argc - 1, argv + 1, prefix);
if (!strcmp(argv[1], "stop"))
return maintenance_stop();
if (!strcmp(argv[1], "register"))
diff --git a/builtin/grep.c b/builtin/grep.c
index 7d2f8e5..9e34a82 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c
@@ -65,6 +65,9 @@ static int todo_done;
/* Has all work items been added? */
static int all_work_added;
+static struct repository **repos_to_free;
+static size_t repos_to_free_nr, repos_to_free_alloc;
+
/* This lock protects all the variables above. */
static pthread_mutex_t grep_mutex;
@@ -168,6 +171,19 @@ static void work_done(struct work_item *w)
grep_unlock();
}
+static void free_repos(void)
+{
+ int i;
+
+ for (i = 0; i < repos_to_free_nr; i++) {
+ repo_clear(repos_to_free[i]);
+ free(repos_to_free[i]);
+ }
+ FREE_AND_NULL(repos_to_free);
+ repos_to_free_nr = 0;
+ repos_to_free_alloc = 0;
+}
+
static void *run(void *arg)
{
int hit = 0;
@@ -183,8 +199,8 @@ static void *run(void *arg)
grep_source_clear_data(&w->source);
work_done(w);
}
- free_grep_patterns(arg);
- free(arg);
+ free_grep_patterns(opt);
+ free(opt);
return (void*) (intptr_t) hit;
}
@@ -333,7 +349,7 @@ static int grep_oid(struct grep_opt *opt, const struct object_id *oid,
struct grep_source gs;
grep_source_name(opt, filename, tree_name_len, &pathbuf);
- grep_source_init(&gs, GREP_SOURCE_OID, pathbuf.buf, path, oid);
+ grep_source_init_oid(&gs, pathbuf.buf, path, oid, opt->repo);
strbuf_release(&pathbuf);
if (num_threads > 1) {
@@ -359,7 +375,7 @@ static int grep_file(struct grep_opt *opt, const char *filename)
struct grep_source gs;
grep_source_name(opt, filename, 0, &buf);
- grep_source_init(&gs, GREP_SOURCE_FILE, buf.buf, filename, filename);
+ grep_source_init_file(&gs, buf.buf, filename);
strbuf_release(&buf);
if (num_threads > 1) {
@@ -385,7 +401,7 @@ static void append_path(struct grep_opt *opt, const void *data, size_t len)
if (len == 1 && *(const char *)data == '\0')
return;
- string_list_append(path_list, xstrndup(data, len));
+ string_list_append_nodup(path_list, xstrndup(data, len));
}
static void run_pager(struct grep_opt *opt, const char *prefix)
@@ -415,19 +431,21 @@ static int grep_submodule(struct grep_opt *opt,
const struct object_id *oid,
const char *filename, const char *path, int cached)
{
- struct repository subrepo;
+ struct repository *subrepo;
struct repository *superproject = opt->repo;
- const struct submodule *sub;
struct grep_opt subopt;
- int hit;
-
- sub = submodule_from_path(superproject, null_oid(), path);
+ int hit = 0;
if (!is_submodule_active(superproject, path))
return 0;
- if (repo_submodule_init(&subrepo, superproject, sub))
+ subrepo = xmalloc(sizeof(*subrepo));
+ if (repo_submodule_init(subrepo, superproject, path, null_oid())) {
+ free(subrepo);
return 0;
+ }
+ ALLOC_GROW(repos_to_free, repos_to_free_nr + 1, repos_to_free_alloc);
+ repos_to_free[repos_to_free_nr++] = subrepo;
/*
* NEEDSWORK: repo_read_gitmodules() might call
@@ -438,53 +456,49 @@ static int grep_submodule(struct grep_opt *opt,
* subrepo's odbs to the in-memory alternates list.
*/
obj_read_lock();
- repo_read_gitmodules(&subrepo, 0);
+ repo_read_gitmodules(subrepo, 0);
/*
- * NEEDSWORK: This adds the submodule's object directory to the list of
- * alternates for the single in-memory object store. This has some bad
- * consequences for memory (processed objects will never be freed) and
- * performance (this increases the number of pack files git has to pay
- * attention to, to the sum of the number of pack files in all the
- * repositories processed so far). This can be removed once the object
- * store is no longer global and instead is a member of the repository
- * object.
+ * All code paths tested by test code no longer need submodule ODBs to
+ * be added as alternates, but add it to the list just in case.
+ * Submodule ODBs added through add_submodule_odb_by_path() will be
+ * lazily registered as alternates when needed (and except in an
+ * unexpected code interaction, it won't be needed).
*/
- add_to_alternates_memory(subrepo.objects->odb->path);
+ add_submodule_odb_by_path(subrepo->objects->odb->path);
obj_read_unlock();
memcpy(&subopt, opt, sizeof(subopt));
- subopt.repo = &subrepo;
+ subopt.repo = subrepo;
if (oid) {
- struct object *object;
+ enum object_type object_type;
struct tree_desc tree;
void *data;
unsigned long size;
struct strbuf base = STRBUF_INIT;
obj_read_lock();
- object = parse_object_or_die(oid, NULL);
+ object_type = oid_object_info(subrepo, oid, NULL);
obj_read_unlock();
- data = read_object_with_reference(&subrepo,
- &object->oid, tree_type,
+ data = read_object_with_reference(subrepo,
+ oid, tree_type,
&size, NULL);
if (!data)
- die(_("unable to read tree (%s)"), oid_to_hex(&object->oid));
+ die(_("unable to read tree (%s)"), oid_to_hex(oid));
strbuf_addstr(&base, filename);
strbuf_addch(&base, '/');
init_tree_desc(&tree, data, size);
hit = grep_tree(&subopt, pathspec, &tree, &base, base.len,
- object->type == OBJ_COMMIT);
+ object_type == OBJ_COMMIT);
strbuf_release(&base);
free(data);
} else {
hit = grep_cache(&subopt, pathspec, cached);
}
- repo_clear(&subrepo);
return hit;
}
@@ -825,7 +839,7 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
struct grep_opt opt;
struct object_array list = OBJECT_ARRAY_INIT;
struct pathspec pathspec;
- struct string_list path_list = STRING_LIST_INIT_NODUP;
+ struct string_list path_list = STRING_LIST_INIT_DUP;
int i;
int dummy;
int use_index = 1;
@@ -1145,8 +1159,8 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
strbuf_addf(&buf, "+/%s%s",
strcmp("less", pager) ? "" : "*",
opt.pattern_list->pattern);
- string_list_append(&path_list,
- strbuf_detach(&buf, NULL));
+ string_list_append_nodup(&path_list,
+ strbuf_detach(&buf, NULL));
}
}
@@ -1181,6 +1195,9 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
if (hit && show_in_pager)
run_pager(&opt, prefix);
clear_pathspec(&pathspec);
+ string_list_clear(&path_list, 0);
free_grep_patterns(&opt);
+ object_array_clear(&list);
+ free_repos();
return !hit;
}
diff --git a/builtin/help.c b/builtin/help.c
index b7eec06..75cd2fb 100644
--- a/builtin/help.c
+++ b/builtin/help.c
@@ -7,7 +7,6 @@
#include "exec-cmd.h"
#include "parse-options.h"
#include "run-command.h"
-#include "column.h"
#include "config-list.h"
#include "help.h"
#include "alias.h"
@@ -34,32 +33,52 @@ enum help_format {
HELP_FORMAT_WEB
};
-static const char *html_path;
+enum show_config_type {
+ SHOW_CONFIG_HUMAN,
+ SHOW_CONFIG_VARS,
+ SHOW_CONFIG_SECTIONS,
+};
-static int show_all = 0;
-static int show_guides = 0;
-static int show_config;
+static enum help_action {
+ HELP_ACTION_ALL = 1,
+ HELP_ACTION_GUIDES,
+ HELP_ACTION_CONFIG,
+ HELP_ACTION_CONFIG_FOR_COMPLETION,
+ HELP_ACTION_CONFIG_SECTIONS_FOR_COMPLETION,
+} cmd_mode;
+
+static const char *html_path;
static int verbose = 1;
-static unsigned int colopts;
static enum help_format help_format = HELP_FORMAT_NONE;
static int exclude_guides;
static struct option builtin_help_options[] = {
- OPT_BOOL('a', "all", &show_all, N_("print all available commands")),
+ OPT_CMDMODE('a', "all", &cmd_mode, N_("print all available commands"),
+ HELP_ACTION_ALL),
OPT_HIDDEN_BOOL(0, "exclude-guides", &exclude_guides, N_("exclude guides")),
- OPT_BOOL('g', "guides", &show_guides, N_("print list of useful guides")),
- OPT_BOOL('c', "config", &show_config, N_("print all configuration variable names")),
- OPT_SET_INT_F(0, "config-for-completion", &show_config, "", 2, PARSE_OPT_HIDDEN),
OPT_SET_INT('m', "man", &help_format, N_("show man page"), HELP_FORMAT_MAN),
OPT_SET_INT('w', "web", &help_format, N_("show manual in web browser"),
HELP_FORMAT_WEB),
OPT_SET_INT('i', "info", &help_format, N_("show info page"),
HELP_FORMAT_INFO),
OPT__VERBOSE(&verbose, N_("print command description")),
+
+ OPT_CMDMODE('g', "guides", &cmd_mode, N_("print list of useful guides"),
+ HELP_ACTION_GUIDES),
+ OPT_CMDMODE('c', "config", &cmd_mode, N_("print all configuration variable names"),
+ HELP_ACTION_CONFIG),
+ OPT_CMDMODE_F(0, "config-for-completion", &cmd_mode, "",
+ HELP_ACTION_CONFIG_FOR_COMPLETION, PARSE_OPT_HIDDEN),
+ OPT_CMDMODE_F(0, "config-sections-for-completion", &cmd_mode, "",
+ HELP_ACTION_CONFIG_SECTIONS_FOR_COMPLETION, PARSE_OPT_HIDDEN),
+
OPT_END(),
};
static const char * const builtin_help_usage[] = {
- N_("git help [--all] [--guides] [--man | --web | --info] [<command>]"),
+ N_("git help [-a|--all] [--[no-]verbose]]\n"
+ " [[-i|--info] [-m|--man] [-w|--web]] [<command>]"),
+ N_("git help [-g|--guides]"),
+ N_("git help [-c|--config]"),
NULL
};
@@ -70,7 +89,7 @@ struct slot_expansion {
int found;
};
-static void list_config_help(int for_human)
+static void list_config_help(enum show_config_type type)
{
struct slot_expansion slot_expansions[] = {
{ "advice", "*", list_config_advices },
@@ -88,6 +107,8 @@ static void list_config_help(int for_human)
const char **p;
struct slot_expansion *e;
struct string_list keys = STRING_LIST_INIT_DUP;
+ struct string_list keys_uniq = STRING_LIST_INIT_DUP;
+ struct string_list_item *item;
int i;
for (p = config_name_list; *p; p++) {
@@ -118,34 +139,46 @@ static void list_config_help(int for_human)
for (i = 0; i < keys.nr; i++) {
const char *var = keys.items[i].string;
const char *wildcard, *tag, *cut;
+ const char *dot = NULL;
+ struct strbuf sb = STRBUF_INIT;
- if (for_human) {
+ switch (type) {
+ case SHOW_CONFIG_HUMAN:
puts(var);
continue;
+ case SHOW_CONFIG_SECTIONS:
+ dot = strchr(var, '.');
+ break;
+ case SHOW_CONFIG_VARS:
+ break;
}
-
wildcard = strchr(var, '*');
tag = strchr(var, '<');
- if (!wildcard && !tag) {
- puts(var);
+ if (!dot && !wildcard && !tag) {
+ string_list_append(&keys_uniq, var);
continue;
}
- if (wildcard && !tag)
+ if (dot)
+ cut = dot;
+ else if (wildcard && !tag)
cut = wildcard;
else if (!wildcard && tag)
cut = tag;
else
cut = wildcard < tag ? wildcard : tag;
- /*
- * We may produce duplicates, but that's up to
- * git-completion.bash to handle
- */
- printf("%.*s\n", (int)(cut - var), var);
+ strbuf_add(&sb, var, cut - var);
+ string_list_append(&keys_uniq, sb.buf);
+ strbuf_release(&sb);
+
}
string_list_clear(&keys, 0);
+ string_list_remove_duplicates(&keys_uniq, 0);
+ for_each_string_list_item(item, &keys_uniq)
+ puts(item->string);
+ string_list_clear(&keys_uniq, 0);
}
static enum help_format parse_help_format(const char *format)
@@ -349,8 +382,6 @@ static int add_man_viewer_info(const char *var, const char *value)
static int git_help_config(const char *var, const char *value, void *cb)
{
- if (starts_with(var, "column."))
- return git_column_config(var, value, "help", &colopts);
if (!strcmp(var, "help.format")) {
if (!value)
return config_error_nonbool(var);
@@ -467,11 +498,14 @@ static void get_html_page_path(struct strbuf *page_path, const char *page)
if (!html_path)
html_path = to_free = system_path(GIT_HTML_PATH);
- /* Check that we have a git documentation directory. */
+ /*
+ * Check that the page we're looking for exists.
+ */
if (!strstr(html_path, "://")) {
- if (stat(mkpath("%s/git.html", html_path), &st)
+ if (stat(mkpath("%s/%s.html", html_path, page), &st)
|| !S_ISREG(st.st_mode))
- die("'%s': not a documentation directory.", html_path);
+ die("'%s/%s.html': documentation file not found.",
+ html_path, page);
}
strbuf_init(page_path, 0);
@@ -541,6 +575,13 @@ static const char *check_git_cmd(const char* cmd)
return cmd;
}
+static void no_extra_argc(int argc)
+{
+ if (argc)
+ usage_msg_opt(_("this option doesn't take any other arguments"),
+ builtin_help_usage, builtin_help_options);
+}
+
int cmd_help(int argc, const char **argv, const char *prefix)
{
int nongit;
@@ -551,8 +592,8 @@ int cmd_help(int argc, const char **argv, const char *prefix)
builtin_help_usage, 0);
parsed_help_format = help_format;
- if (show_all) {
- git_config(git_help_config, NULL);
+ switch (cmd_mode) {
+ case HELP_ACTION_ALL:
if (verbose) {
setup_pager();
list_all_cmds_help();
@@ -560,30 +601,27 @@ int cmd_help(int argc, const char **argv, const char *prefix)
}
printf(_("usage: %s%s"), _(git_usage_string), "\n\n");
load_command_list("git-", &main_cmds, &other_cmds);
- list_commands(colopts, &main_cmds, &other_cmds);
- }
-
- if (show_config) {
- int for_human = show_config == 1;
-
- if (!for_human) {
- list_config_help(for_human);
- return 0;
- }
- setup_pager();
- list_config_help(for_human);
- printf("\n%s\n", _("'git help config' for more information"));
- return 0;
- }
-
- if (show_guides)
- list_guides_help();
-
- if (show_all || show_guides) {
+ list_commands(&main_cmds, &other_cmds);
printf("%s\n", _(git_more_info_string));
- /*
- * We're done. Ignore any remaining args
- */
+ break;
+ case HELP_ACTION_GUIDES:
+ no_extra_argc(argc);
+ list_guides_help();
+ printf("%s\n", _(git_more_info_string));
+ return 0;
+ case HELP_ACTION_CONFIG_FOR_COMPLETION:
+ no_extra_argc(argc);
+ list_config_help(SHOW_CONFIG_VARS);
+ return 0;
+ case HELP_ACTION_CONFIG_SECTIONS_FOR_COMPLETION:
+ no_extra_argc(argc);
+ list_config_help(SHOW_CONFIG_SECTIONS);
+ return 0;
+ case HELP_ACTION_CONFIG:
+ no_extra_argc(argc);
+ setup_pager();
+ list_config_help(SHOW_CONFIG_HUMAN);
+ printf("\n%s\n", _("'git help config' for more information"));
return 0;
}
diff --git a/builtin/index-pack.c b/builtin/index-pack.c
index f267dce..c23d01d 100644
--- a/builtin/index-pack.c
+++ b/builtin/index-pack.c
@@ -122,6 +122,7 @@ static int strict;
static int do_fsck_object;
static struct fsck_options fsck_options = FSCK_OPTIONS_MISSING_GITMODULES;
static int verbose;
+static const char *progress_title;
static int show_resolving_progress;
static int show_stat;
static int check_self_contained_and_connected;
@@ -187,9 +188,7 @@ static void init_thread(void)
pthread_key_create(&key, NULL);
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)
- die_errno(_("unable to open %s"), curr_pack);
+ thread_data[i].pack_fd = xopen(curr_pack, O_RDONLY);
}
threads_active = 1;
@@ -1153,6 +1152,7 @@ static void parse_pack_objects(unsigned char *hash)
if (verbose)
progress = start_progress(
+ progress_title ? progress_title :
from_stdin ? _("Receiving objects") : _("Indexing objects"),
nr_objects);
for (i = 0; i < nr_objects; i++) {
@@ -1415,7 +1415,7 @@ static void fix_unresolved_deltas(struct hashfile *f)
if (check_object_signature(the_repository, &d->oid,
data, size,
- type_name(type)))
+ type_name(type), NULL))
die(_("local object %s is corrupt"), oid_to_hex(&d->oid));
/*
@@ -1486,7 +1486,7 @@ static void rename_tmp_packfile(const char **final_name,
if (!*final_name)
*final_name = odb_pack_name(name, hash, ext);
if (finalize_object_file(curr_name, *final_name))
- die(_("unable to rename temporary '*.%s' file to '%s"),
+ die(_("unable to rename temporary '*.%s' file to '%s'"),
ext, *final_name);
} else if (make_read_only_if_same) {
chmod(*final_name, 0444);
@@ -1800,6 +1800,10 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
input_len = sizeof(*hdr);
} else if (!strcmp(arg, "-v")) {
verbose = 1;
+ } else if (!strcmp(arg, "--progress-title")) {
+ if (progress_title || (i+1) >= argc)
+ usage(index_pack_usage);
+ progress_title = argv[++i];
} else if (!strcmp(arg, "--show-resolving-progress")) {
show_resolving_progress = 1;
} else if (!strcmp(arg, "--report-end-of-input")) {
diff --git a/builtin/log.c b/builtin/log.c
index 3d7717b..f75d87e 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -637,7 +637,7 @@ int cmd_show(int argc, const char **argv, const char *prefix)
repo_init_revisions(the_repository, &rev, prefix);
rev.diff = 1;
rev.always_show_header = 1;
- rev.no_walk = REVISION_WALK_NO_WALK_SORTED;
+ rev.no_walk = 1;
rev.diffopt.stat_width = -1; /* Scale to real terminal size */
memset(&opt, 0, sizeof(opt));
diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index 29a26ad..031fef1 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c
@@ -209,10 +209,8 @@ static void show_submodule(struct repository *superproject,
struct dir_struct *dir, const char *path)
{
struct repository subrepo;
- const struct submodule *sub = submodule_from_path(superproject,
- null_oid(), path);
- if (repo_submodule_init(&subrepo, superproject, sub))
+ if (repo_submodule_init(&subrepo, superproject, path, null_oid()))
return;
if (repo_read_index(&subrepo) < 0)
@@ -614,7 +612,7 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
struct option builtin_ls_files_options[] = {
/* Think twice before adding "--nul" synonym to this */
OPT_SET_INT('z', NULL, &line_terminator,
- N_("paths are separated with NUL character"), '\0'),
+ N_("separate paths with the NUL character"), '\0'),
OPT_BOOL('t', NULL, &show_tag,
N_("identify the file status with tags")),
OPT_BOOL('v', NULL, &show_valid_bit,
@@ -651,7 +649,7 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
N_("skip files matching pattern"),
PARSE_OPT_NONEG, option_parse_exclude),
OPT_CALLBACK_F('X', "exclude-from", &dir, N_("file"),
- N_("exclude patterns are read from <file>"),
+ N_("read exclude patterns from <file>"),
PARSE_OPT_NONEG, option_parse_exclude_from),
OPT_STRING(0, "exclude-per-directory", &dir.exclude_per_dir, N_("file"),
N_("read additional per-directory exclude patterns in <file>")),
@@ -674,6 +672,7 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
N_("suppress duplicate entries")),
OPT_END()
};
+ int ret = 0;
if (argc == 2 && !strcmp(argv[1], "-h"))
usage_with_options(ls_files_usage, builtin_ls_files_options);
@@ -777,16 +776,13 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
if (show_resolve_undo)
show_ru_info(the_repository->index);
- if (ps_matched) {
- int bad;
- bad = report_path_error(ps_matched, &pathspec);
- if (bad)
- fprintf(stderr, "Did you forget to 'git add'?\n");
-
- return bad ? 1 : 0;
+ if (ps_matched && report_path_error(ps_matched, &pathspec)) {
+ fprintf(stderr, "Did you forget to 'git add'?\n");
+ ret = 1;
}
+ string_list_clear(&exclude_list, 0);
dir_clear(&dir);
free(max_prefix);
- return 0;
+ return ret;
}
diff --git a/builtin/ls-remote.c b/builtin/ls-remote.c
index f4fd823..318949c 100644
--- a/builtin/ls-remote.c
+++ b/builtin/ls-remote.c
@@ -7,8 +7,8 @@
static const char * const ls_remote_usage[] = {
N_("git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
- " [-q | --quiet] [--exit-code] [--get-url]\n"
- " [--symref] [<repository> [<refs>...]]"),
+ " [-q | --quiet] [--exit-code] [--get-url]\n"
+ " [--symref] [<repository> [<refs>...]]"),
NULL
};
diff --git a/builtin/merge.c b/builtin/merge.c
index 8949a9c..ea3112e 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -13,6 +13,7 @@
#include "builtin.h"
#include "lockfile.h"
#include "run-command.h"
+#include "hook.h"
#include "diff.h"
#include "diff-merges.h"
#include "refs.h"
@@ -88,9 +89,9 @@ static int autostash;
static int no_verify;
static struct strategy all_strategy[] = {
- { "recursive", DEFAULT_TWOHEAD | NO_TRIVIAL },
+ { "recursive", NO_TRIVIAL },
{ "octopus", DEFAULT_OCTOPUS },
- { "ort", NO_TRIVIAL },
+ { "ort", DEFAULT_TWOHEAD | NO_TRIVIAL },
{ "resolve", 0 },
{ "ours", NO_FAST_FORWARD | NO_TRIVIAL },
{ "subtree", NO_FAST_FORWARD | NO_TRIVIAL },
@@ -469,7 +470,6 @@ static void finish(struct commit *head_commit,
* We ignore errors in 'gc --auto', since the
* user should see them.
*/
- close_object_store(the_repository->objects);
run_auto_maintenance(verbosity < 0);
}
}
@@ -681,6 +681,7 @@ static int read_tree_trivial(struct object_id *common, struct object_id *head,
opts.verbose_update = 1;
opts.trivial_merges_only = 1;
opts.merge = 1;
+ opts.preserve_ignored = 0; /* FIXME: !overwrite_ignore */
trees[nr_trees] = parse_tree_indirect(common);
if (!trees[nr_trees++])
return -1;
@@ -849,7 +850,7 @@ static void prepare_to_commit(struct commit_list *remoteheads)
* and write it out as a tree. We must do this before we invoke
* the editor and after we invoke run_status above.
*/
- if (find_hook("pre-merge-commit"))
+ if (hook_exists("pre-merge-commit"))
discard_cache();
read_cache_from(index_file);
strbuf_addbuf(&msg, &merge_msg);
@@ -1276,6 +1277,9 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
if (argc == 2 && !strcmp(argv[1], "-h"))
usage_with_options(builtin_merge_usage, builtin_merge_options);
+ prepare_repo_settings(the_repository);
+ the_repository->settings.command_requires_full_index = 0;
+
/*
* Check if we are _not_ on a detached HEAD, i.e. if there is a
* current branch.
@@ -1368,14 +1372,14 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
* There is no unmerged entry, don't advise 'git
* add/rm <file>', just 'git commit'.
*/
- if (advice_resolve_conflict)
+ if (advice_enabled(ADVICE_RESOLVE_CONFLICT))
die(_("You have not concluded your merge (MERGE_HEAD exists).\n"
"Please, commit your changes before you merge."));
else
die(_("You have not concluded your merge (MERGE_HEAD exists)."));
}
if (ref_exists("CHERRY_PICK_HEAD")) {
- if (advice_resolve_conflict)
+ if (advice_enabled(ADVICE_RESOLVE_CONFLICT))
die(_("You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
"Please, commit your changes before you merge."));
else
@@ -1485,6 +1489,12 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
fast_forward = FF_NO;
}
+ if (!use_strategies && !pull_twohead &&
+ remoteheads && !remoteheads->next) {
+ char *default_strategy = getenv("GIT_TEST_MERGE_ALGORITHM");
+ if (default_strategy)
+ append_strategy(get_strategy(default_strategy));
+ }
if (!use_strategies) {
if (!remoteheads)
; /* already up-to-date */
@@ -1568,6 +1578,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
finish(head_commit, remoteheads, &commit->object.oid, msg.buf);
remove_merge_branch_state(the_repository);
+ strbuf_release(&msg);
goto done;
} else if (!remoteheads->next && common->next)
;
@@ -1738,6 +1749,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
ret = suggest_conflicts();
done:
+ strbuf_release(&buf);
free(branch_to_free);
return ret;
}
diff --git a/builtin/mktag.c b/builtin/mktag.c
index dddcccd..3b2dbbb 100644
--- a/builtin/mktag.c
+++ b/builtin/mktag.c
@@ -62,7 +62,8 @@ static int verify_object_in_tag(struct object_id *tagged_oid, int *tagged_type)
repl = lookup_replace_object(the_repository, tagged_oid);
ret = check_object_signature(the_repository, repl,
- buffer, size, type_name(*tagged_type));
+ buffer, size, type_name(*tagged_type),
+ NULL);
free(buffer);
return ret;
diff --git a/builtin/multi-pack-index.c b/builtin/multi-pack-index.c
index 8ff0dee..075d15d 100644
--- a/builtin/multi-pack-index.c
+++ b/builtin/multi-pack-index.c
@@ -7,7 +7,8 @@
#include "object-store.h"
#define BUILTIN_MIDX_WRITE_USAGE \
- N_("git multi-pack-index [<options>] write [--preferred-pack=<pack>]")
+ N_("git multi-pack-index [<options>] write [--preferred-pack=<pack>]" \
+ "[--refs-snapshot=<path>]")
#define BUILTIN_MIDX_VERIFY_USAGE \
N_("git multi-pack-index [<options>] verify")
@@ -45,14 +46,15 @@ static char const * const builtin_multi_pack_index_usage[] = {
static struct opts_multi_pack_index {
const char *object_dir;
const char *preferred_pack;
+ const char *refs_snapshot;
unsigned long batch_size;
unsigned flags;
+ int stdin_packs;
} opts;
static struct option common_opts[] = {
OPT_FILENAME(0, "object-dir", &opts.object_dir,
N_("object directory containing set of packfile and pack-index pairs")),
- OPT_BIT(0, "progress", &opts.flags, N_("force progress reporting"), MIDX_PROGRESS),
OPT_END(),
};
@@ -61,6 +63,33 @@ static struct option *add_common_options(struct option *prev)
return parse_options_concat(common_opts, prev);
}
+static int git_multi_pack_index_write_config(const char *var, const char *value,
+ void *cb)
+{
+ if (!strcmp(var, "pack.writebitmaphashcache")) {
+ if (git_config_bool(var, value))
+ opts.flags |= MIDX_WRITE_BITMAP_HASH_CACHE;
+ else
+ opts.flags &= ~MIDX_WRITE_BITMAP_HASH_CACHE;
+ }
+
+ /*
+ * We should never make a fall-back call to 'git_default_config', since
+ * this was already called in 'cmd_multi_pack_index()'.
+ */
+ return 0;
+}
+
+static void read_packs_from_stdin(struct string_list *to)
+{
+ struct strbuf buf = STRBUF_INIT;
+ while (strbuf_getline(&buf, stdin) != EOF)
+ string_list_append(to, buf.buf);
+ string_list_sort(to);
+
+ strbuf_release(&buf);
+}
+
static int cmd_multi_pack_index_write(int argc, const char **argv)
{
struct option *options;
@@ -68,13 +97,27 @@ static int cmd_multi_pack_index_write(int argc, const char **argv)
OPT_STRING(0, "preferred-pack", &opts.preferred_pack,
N_("preferred-pack"),
N_("pack for reuse when computing a multi-pack bitmap")),
+ OPT_BIT(0, "bitmap", &opts.flags, N_("write multi-pack bitmap"),
+ MIDX_WRITE_BITMAP | MIDX_WRITE_REV_INDEX),
+ OPT_BIT(0, "progress", &opts.flags,
+ N_("force progress reporting"), MIDX_PROGRESS),
+ OPT_BOOL(0, "stdin-packs", &opts.stdin_packs,
+ N_("write multi-pack index containing only given indexes")),
+ OPT_FILENAME(0, "refs-snapshot", &opts.refs_snapshot,
+ N_("refs snapshot for selecting bitmap commits")),
OPT_END(),
};
+ opts.flags |= MIDX_WRITE_BITMAP_HASH_CACHE;
+
+ git_config(git_multi_pack_index_write_config, NULL);
+
options = add_common_options(builtin_multi_pack_index_write_options);
trace2_cmd_mode(argv[0]);
+ if (isatty(2))
+ opts.flags |= MIDX_PROGRESS;
argc = parse_options(argc, argv, NULL,
options, builtin_multi_pack_index_write_usage,
PARSE_OPT_KEEP_UNKNOWN);
@@ -84,16 +127,39 @@ static int cmd_multi_pack_index_write(int argc, const char **argv)
FREE_AND_NULL(options);
+ if (opts.stdin_packs) {
+ struct string_list packs = STRING_LIST_INIT_DUP;
+ int ret;
+
+ read_packs_from_stdin(&packs);
+
+ ret = write_midx_file_only(opts.object_dir, &packs,
+ opts.preferred_pack,
+ opts.refs_snapshot, opts.flags);
+
+ string_list_clear(&packs, 0);
+
+ return ret;
+
+ }
return write_midx_file(opts.object_dir, opts.preferred_pack,
- opts.flags);
+ opts.refs_snapshot, opts.flags);
}
static int cmd_multi_pack_index_verify(int argc, const char **argv)
{
- struct option *options = common_opts;
+ struct option *options;
+ static struct option builtin_multi_pack_index_verify_options[] = {
+ OPT_BIT(0, "progress", &opts.flags,
+ N_("force progress reporting"), MIDX_PROGRESS),
+ OPT_END(),
+ };
+ options = add_common_options(builtin_multi_pack_index_verify_options);
trace2_cmd_mode(argv[0]);
+ if (isatty(2))
+ opts.flags |= MIDX_PROGRESS;
argc = parse_options(argc, argv, NULL,
options, builtin_multi_pack_index_verify_usage,
PARSE_OPT_KEEP_UNKNOWN);
@@ -106,10 +172,18 @@ static int cmd_multi_pack_index_verify(int argc, const char **argv)
static int cmd_multi_pack_index_expire(int argc, const char **argv)
{
- struct option *options = common_opts;
+ struct option *options;
+ static struct option builtin_multi_pack_index_expire_options[] = {
+ OPT_BIT(0, "progress", &opts.flags,
+ N_("force progress reporting"), MIDX_PROGRESS),
+ OPT_END(),
+ };
+ options = add_common_options(builtin_multi_pack_index_expire_options);
trace2_cmd_mode(argv[0]);
+ if (isatty(2))
+ opts.flags |= MIDX_PROGRESS;
argc = parse_options(argc, argv, NULL,
options, builtin_multi_pack_index_expire_usage,
PARSE_OPT_KEEP_UNKNOWN);
@@ -126,6 +200,8 @@ static int cmd_multi_pack_index_repack(int argc, const char **argv)
static struct option builtin_multi_pack_index_repack_options[] = {
OPT_MAGNITUDE(0, "batch-size", &opts.batch_size,
N_("during repack, collect pack-files of smaller size into a batch that is larger than this size")),
+ OPT_BIT(0, "progress", &opts.flags,
+ N_("force progress reporting"), MIDX_PROGRESS),
OPT_END(),
};
@@ -133,6 +209,8 @@ static int cmd_multi_pack_index_repack(int argc, const char **argv)
trace2_cmd_mode(argv[0]);
+ if (isatty(2))
+ opts.flags |= MIDX_PROGRESS;
argc = parse_options(argc, argv, NULL,
options,
builtin_multi_pack_index_repack_usage,
@@ -154,8 +232,6 @@ int cmd_multi_pack_index(int argc, const char **argv,
git_config(git_default_config, NULL);
- if (isatty(2))
- opts.flags |= MIDX_PROGRESS;
argc = parse_options(argc, argv, prefix,
builtin_multi_pack_index_options,
builtin_multi_pack_index_usage,
@@ -164,7 +240,7 @@ int cmd_multi_pack_index(int argc, const char **argv,
if (!opts.object_dir)
opts.object_dir = get_object_directory();
- if (argc == 0)
+ if (!argc)
goto usage;
if (!strcmp(argv[0], "repack"))
@@ -175,10 +251,9 @@ int cmd_multi_pack_index(int argc, const char **argv,
return cmd_multi_pack_index_verify(argc, argv);
else if (!strcmp(argv[0], "expire"))
return cmd_multi_pack_index_expire(argc, argv);
- else {
- error(_("unrecognized subcommand: %s"), argv[0]);
+
+ error(_("unrecognized subcommand: %s"), argv[0]);
usage:
- usage_with_options(builtin_multi_pack_index_usage,
- builtin_multi_pack_index_options);
- }
+ usage_with_options(builtin_multi_pack_index_usage,
+ builtin_multi_pack_index_options);
}
diff --git a/builtin/mv.c b/builtin/mv.c
index c2f96c8..83a465b 100644
--- a/builtin/mv.c
+++ b/builtin/mv.c
@@ -118,21 +118,23 @@ static int index_range_of_same_dir(const char *src, int length,
int cmd_mv(int argc, const char **argv, const char *prefix)
{
int i, flags, gitmodules_modified = 0;
- int verbose = 0, show_only = 0, force = 0, ignore_errors = 0;
+ int verbose = 0, show_only = 0, force = 0, ignore_errors = 0, ignore_sparse = 0;
struct option builtin_mv_options[] = {
OPT__VERBOSE(&verbose, N_("be verbose")),
OPT__DRY_RUN(&show_only, N_("dry run")),
OPT__FORCE(&force, N_("force move/rename even if target exists"),
PARSE_OPT_NOCOMPLETE),
OPT_BOOL('k', NULL, &ignore_errors, N_("skip move/rename errors")),
+ OPT_BOOL(0, "sparse", &ignore_sparse, N_("allow updating entries outside of the sparse-checkout cone")),
OPT_END(),
};
const char **source, **destination, **dest_path, **submodule_gitfile;
- enum update_mode { BOTH = 0, WORKING_DIRECTORY, INDEX } *modes;
+ enum update_mode { BOTH = 0, WORKING_DIRECTORY, INDEX, SPARSE } *modes;
struct stat st;
struct string_list src_for_dst = STRING_LIST_INIT_NODUP;
struct lock_file lock_file = LOCK_INIT;
struct cache_entry *ce;
+ struct string_list only_match_skip_worktree = STRING_LIST_INIT_NODUP;
git_config(git_default_config, NULL);
@@ -176,14 +178,17 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
const char *src = source[i], *dst = destination[i];
int length, src_is_dir;
const char *bad = NULL;
+ int skip_sparse = 0;
if (show_only)
printf(_("Checking rename of '%s' to '%s'\n"), src, dst);
length = strlen(src);
- if (lstat(src, &st) < 0)
- bad = _("bad source");
- else if (!strncmp(src, dst, length) &&
+ if (lstat(src, &st) < 0) {
+ /* only error if existence is expected. */
+ if (modes[i] != SPARSE)
+ bad = _("bad source");
+ } else if (!strncmp(src, dst, length) &&
(dst[length] == 0 || dst[length] == '/')) {
bad = _("can not move directory into itself");
} else if ((src_is_dir = S_ISDIR(st.st_mode))
@@ -212,11 +217,12 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
dst_len = strlen(dst);
for (j = 0; j < last - first; j++) {
- const char *path = active_cache[first + j]->name;
+ const struct cache_entry *ce = active_cache[first + j];
+ const char *path = ce->name;
source[argc + j] = path;
destination[argc + j] =
prefix_path(dst, dst_len, path + length + 1);
- modes[argc + j] = INDEX;
+ modes[argc + j] = ce_skip_worktree(ce) ? SPARSE : INDEX;
submodule_gitfile[argc + j] = NULL;
}
argc += last - first;
@@ -244,14 +250,36 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
bad = _("multiple sources for the same target");
else if (is_dir_sep(dst[strlen(dst) - 1]))
bad = _("destination directory does not exist");
- else
+ else {
+ /*
+ * We check if the paths are in the sparse-checkout
+ * definition as a very final check, since that
+ * allows us to point the user to the --sparse
+ * option as a way to have a successful run.
+ */
+ if (!ignore_sparse &&
+ !path_in_sparse_checkout(src, &the_index)) {
+ string_list_append(&only_match_skip_worktree, src);
+ skip_sparse = 1;
+ }
+ if (!ignore_sparse &&
+ !path_in_sparse_checkout(dst, &the_index)) {
+ string_list_append(&only_match_skip_worktree, dst);
+ skip_sparse = 1;
+ }
+
+ if (skip_sparse)
+ goto remove_entry;
+
string_list_insert(&src_for_dst, dst);
+ }
if (!bad)
continue;
if (!ignore_errors)
die(_("%s, source=%s, destination=%s"),
bad, src, dst);
+remove_entry:
if (--argc > 0) {
int n = argc - i;
memmove(source + i, source + i + 1,
@@ -266,6 +294,12 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
}
}
+ if (only_match_skip_worktree.nr) {
+ advise_on_updating_sparse_paths(&only_match_skip_worktree);
+ if (!ignore_errors)
+ return 1;
+ }
+
for (i = 0; i < argc; i++) {
const char *src = source[i], *dst = destination[i];
enum update_mode mode = modes[i];
@@ -274,7 +308,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
printf(_("Renaming %s to %s\n"), src, dst);
if (show_only)
continue;
- if (mode != INDEX && rename(src, dst) < 0) {
+ if (mode != INDEX && mode != SPARSE && rename(src, dst) < 0) {
if (ignore_errors)
continue;
die_errno(_("renaming '%s' failed"), src);
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index a01767a..1a3dd44 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -1124,6 +1124,11 @@ static void write_reused_pack(struct hashfile *f)
break;
offset += ewah_bit_ctz64(word >> offset);
+ /*
+ * Can use bit positions directly, even for MIDX
+ * bitmaps. See comment in try_partial_reuse()
+ * for why.
+ */
write_reused_pack_one(pos + offset, f, &w_curs);
display_progress(progress_state, ++written);
}
@@ -1259,7 +1264,8 @@ static void write_pack_file(void)
bitmap_writer_show_progress(progress);
bitmap_writer_select_commits(indexed_commits, indexed_commits_nr, -1);
- bitmap_writer_build(&to_pack);
+ if (bitmap_writer_build(&to_pack) < 0)
+ die(_("failed to write bitmap index"));
bitmap_writer_finish(written_list, nr_written,
tmpname.buf, write_bitmap_options);
write_bitmap_index = 0;
@@ -3412,13 +3418,9 @@ static void read_object_list_from_stdin(void)
}
}
-/* Remember to update object flag allocation in object.h */
-#define OBJECT_ADDED (1u<<20)
-
static void show_commit(struct commit *commit, void *data)
{
add_object_entry(&commit->object.oid, OBJ_COMMIT, NULL, 0);
- commit->object.flags |= OBJECT_ADDED;
if (write_bitmap_index)
index_commit_for_bitmap(commit);
@@ -3431,7 +3433,6 @@ static void show_object(struct object *obj, const char *name, void *data)
{
add_preferred_base_object(name);
add_object_entry(&obj->oid, obj->type, name, 0);
- obj->flags |= OBJECT_ADDED;
if (use_delta_islands) {
const char *p;
@@ -3512,79 +3513,23 @@ static void show_edge(struct commit *commit)
add_preferred_base(&commit->object.oid);
}
-struct in_pack_object {
- off_t offset;
- struct object *object;
-};
-
-struct in_pack {
- unsigned int alloc;
- unsigned int nr;
- struct in_pack_object *array;
-};
-
-static void mark_in_pack_object(struct object *object, struct packed_git *p, struct in_pack *in_pack)
+static int add_object_in_unpacked_pack(const struct object_id *oid,
+ struct packed_git *pack,
+ uint32_t pos,
+ void *_data)
{
- in_pack->array[in_pack->nr].offset = find_pack_entry_one(object->oid.hash, p);
- in_pack->array[in_pack->nr].object = object;
- in_pack->nr++;
-}
-
-/*
- * Compare the objects in the offset order, in order to emulate the
- * "git rev-list --objects" output that produced the pack originally.
- */
-static int ofscmp(const void *a_, const void *b_)
-{
- struct in_pack_object *a = (struct in_pack_object *)a_;
- struct in_pack_object *b = (struct in_pack_object *)b_;
-
- if (a->offset < b->offset)
- return -1;
- else if (a->offset > b->offset)
- return 1;
- else
- return oidcmp(&a->object->oid, &b->object->oid);
+ add_object_entry(oid, OBJ_NONE, "", 0);
+ return 0;
}
static void add_objects_in_unpacked_packs(void)
{
- struct packed_git *p;
- struct in_pack in_pack;
- uint32_t i;
-
- memset(&in_pack, 0, sizeof(in_pack));
-
- for (p = get_all_packs(the_repository); p; p = p->next) {
- struct object_id oid;
- struct object *o;
-
- if (!p->pack_local || p->pack_keep || p->pack_keep_in_core)
- continue;
- if (open_pack_index(p))
- die(_("cannot open pack index"));
-
- ALLOC_GROW(in_pack.array,
- in_pack.nr + p->num_objects,
- in_pack.alloc);
-
- for (i = 0; i < p->num_objects; i++) {
- nth_packed_object_id(&oid, p, i);
- o = lookup_unknown_object(the_repository, &oid);
- if (!(o->flags & OBJECT_ADDED))
- mark_in_pack_object(o, p, &in_pack);
- o->flags |= OBJECT_ADDED;
- }
- }
-
- if (in_pack.nr) {
- QSORT(in_pack.array, in_pack.nr, ofscmp);
- for (i = 0; i < in_pack.nr; i++) {
- struct object *o = in_pack.array[i].object;
- add_object_entry(&o->oid, o->type, "", 0);
- }
- }
- free(in_pack.array);
+ if (for_each_packed_object(add_object_in_unpacked_pack, NULL,
+ FOR_EACH_OBJECT_PACK_ORDER |
+ FOR_EACH_OBJECT_LOCAL_ONLY |
+ FOR_EACH_OBJECT_SKIP_IN_CORE_KEPT_PACKS |
+ FOR_EACH_OBJECT_SKIP_ON_DISK_KEPT_PACKS))
+ die(_("cannot open pack index"));
}
static int add_loose_object(const struct object_id *oid, const char *path,
diff --git a/builtin/prune.c b/builtin/prune.c
index 02c6ab7..485c9a3 100644
--- a/builtin/prune.c
+++ b/builtin/prune.c
@@ -143,7 +143,6 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
expire = TIME_MAX;
save_commit_buffer = 0;
read_replace_refs = 0;
- ref_paranoia = 1;
repo_init_revisions(the_repository, &revs, prefix);
argc = parse_options(argc, argv, prefix, options, prune_usage, 0);
diff --git a/builtin/pull.c b/builtin/pull.c
index b311ea6..1cfaf9f 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -26,13 +26,13 @@
#include "wt-status.h"
#include "commit-reach.h"
#include "sequencer.h"
+#include "packfile.h"
/**
* Parses the value of --rebase. If value is a false value, returns
* REBASE_FALSE. If value is a true value, returns REBASE_TRUE. If value is
- * "merges", returns REBASE_MERGES. If value is "preserve", returns
- * REBASE_PRESERVE. If value is a invalid value, dies with a fatal error if
- * fatal is true, otherwise returns REBASE_INVALID.
+ * "merges", returns REBASE_MERGES. If value is a invalid value, dies with
+ * a fatal error if fatal is true, otherwise returns REBASE_INVALID.
*/
static enum rebase_type parse_config_rebase(const char *key, const char *value,
int fatal)
@@ -84,6 +84,7 @@ static char *opt_edit;
static char *cleanup_arg;
static char *opt_ff;
static char *opt_verify_signatures;
+static char *opt_verify;
static int opt_autostash = -1;
static int config_autostash;
static int check_trust_level = 1;
@@ -126,7 +127,7 @@ static struct option pull_options[] = {
/* Options passed to git-merge or git-rebase */
OPT_GROUP(N_("Options related to merging")),
OPT_CALLBACK_F('r', "rebase", &opt_rebase,
- "(false|true|merges|preserve|interactive)",
+ "(false|true|merges|interactive)",
N_("incorporate changes by rebasing rather than merging"),
PARSE_OPT_OPTARG, parse_opt_rebase),
OPT_PASSTHRU('n', NULL, &opt_diffstat, NULL,
@@ -160,6 +161,9 @@ static struct option pull_options[] = {
OPT_PASSTHRU(0, "ff-only", &opt_ff, NULL,
N_("abort if fast-forward is not possible"),
PARSE_OPT_NOARG | PARSE_OPT_NONEG),
+ OPT_PASSTHRU(0, "verify", &opt_verify, NULL,
+ N_("control use of pre-merge-commit and commit-msg hooks"),
+ PARSE_OPT_NOARG),
OPT_PASSTHRU(0, "verify-signatures", &opt_verify_signatures, NULL,
N_("verify that the named commit has a valid GPG signature"),
PARSE_OPT_NOARG),
@@ -577,7 +581,7 @@ static int run_fetch(const char *repo, const char **refspecs)
strvec_pushv(&args, refspecs);
} else if (*refspecs)
BUG("refspecs without repo?");
- ret = run_command_v_opt(args.v, RUN_GIT_CMD);
+ ret = run_command_v_opt(args.v, RUN_GIT_CMD | RUN_CLOSE_OBJECT_STORE);
strvec_clear(&args);
return ret;
}
@@ -675,6 +679,8 @@ static int run_merge(void)
strvec_pushf(&args, "--cleanup=%s", cleanup_arg);
if (opt_ff)
strvec_push(&args, opt_ff);
+ if (opt_verify)
+ strvec_push(&args, opt_verify);
if (opt_verify_signatures)
strvec_push(&args, opt_verify_signatures);
strvec_pushv(&args, opt_strategies.v);
@@ -883,8 +889,6 @@ static int run_rebase(const struct object_id *newbase,
/* Options passed to git-rebase */
if (opt_rebase == REBASE_MERGES)
strvec_push(&args, "--rebase-merges");
- else if (opt_rebase == REBASE_PRESERVE)
- strvec_push(&args, "--preserve-merges");
else if (opt_rebase == REBASE_INTERACTIVE)
strvec_push(&args, "--interactive");
if (opt_diffstat)
@@ -933,6 +937,33 @@ static int get_can_ff(struct object_id *orig_head,
return ret;
}
+/*
+ * Is orig_head a descendant of _all_ merge_heads?
+ * Unfortunately is_descendant_of() cannot be used as it asks
+ * if orig_head is a descendant of at least one of them.
+ */
+static int already_up_to_date(struct object_id *orig_head,
+ struct oid_array *merge_heads)
+{
+ int i;
+ struct commit *ours;
+
+ ours = lookup_commit_reference(the_repository, orig_head);
+ for (i = 0; i < merge_heads->nr; i++) {
+ struct commit_list *list = NULL;
+ struct commit *theirs;
+ int ok;
+
+ theirs = lookup_commit_reference(the_repository, &merge_heads->oid[i]);
+ commit_list_insert(theirs, &list);
+ ok = repo_is_descendant_of(the_repository, ours, list);
+ free_commit_list(list);
+ if (!ok)
+ return 0;
+ }
+ return 1;
+}
+
static void show_advice_pull_non_ff(void)
{
advise(_("You have divergent branches and need to specify how to reconcile them.\n"
@@ -957,6 +988,7 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
struct object_id rebase_fork_point;
int rebase_unspecified = 0;
int can_ff;
+ int divergent;
if (!getenv("GIT_REFLOG_ACTION"))
set_reflog_message(argc, argv);
@@ -1071,15 +1103,16 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
}
can_ff = get_can_ff(&orig_head, &merge_heads);
+ divergent = !can_ff && !already_up_to_date(&orig_head, &merge_heads);
/* ff-only takes precedence over rebase */
if (opt_ff && !strcmp(opt_ff, "--ff-only")) {
- if (!can_ff)
+ if (divergent)
die_ff_impossible();
opt_rebase = REBASE_FALSE;
}
/* If no action specified and we can't fast forward, then warn. */
- if (!opt_ff && rebase_unspecified && !can_ff) {
+ if (!opt_ff && rebase_unspecified && divergent) {
show_advice_pull_non_ff();
die(_("Need to specify how to reconcile divergent branches."));
}
diff --git a/builtin/push.c b/builtin/push.c
index e8b10a9..4b026ce 100644
--- a/builtin/push.c
+++ b/builtin/push.c
@@ -289,42 +289,42 @@ static const char message_advice_ref_needs_update[] =
static void advise_pull_before_push(void)
{
- if (!advice_push_non_ff_current || !advice_push_update_rejected)
+ if (!advice_enabled(ADVICE_PUSH_NON_FF_CURRENT) || !advice_enabled(ADVICE_PUSH_UPDATE_REJECTED))
return;
advise(_(message_advice_pull_before_push));
}
static void advise_checkout_pull_push(void)
{
- if (!advice_push_non_ff_matching || !advice_push_update_rejected)
+ if (!advice_enabled(ADVICE_PUSH_NON_FF_MATCHING) || !advice_enabled(ADVICE_PUSH_UPDATE_REJECTED))
return;
advise(_(message_advice_checkout_pull_push));
}
static void advise_ref_already_exists(void)
{
- if (!advice_push_already_exists || !advice_push_update_rejected)
+ if (!advice_enabled(ADVICE_PUSH_ALREADY_EXISTS) || !advice_enabled(ADVICE_PUSH_UPDATE_REJECTED))
return;
advise(_(message_advice_ref_already_exists));
}
static void advise_ref_fetch_first(void)
{
- if (!advice_push_fetch_first || !advice_push_update_rejected)
+ if (!advice_enabled(ADVICE_PUSH_FETCH_FIRST) || !advice_enabled(ADVICE_PUSH_UPDATE_REJECTED))
return;
advise(_(message_advice_ref_fetch_first));
}
static void advise_ref_needs_force(void)
{
- if (!advice_push_needs_force || !advice_push_update_rejected)
+ if (!advice_enabled(ADVICE_PUSH_NEEDS_FORCE) || !advice_enabled(ADVICE_PUSH_UPDATE_REJECTED))
return;
advise(_(message_advice_ref_needs_force));
}
static void advise_ref_needs_update(void)
{
- if (!advice_push_ref_needs_update || !advice_push_update_rejected)
+ if (!advice_enabled(ADVICE_PUSH_REF_NEEDS_UPDATE) || !advice_enabled(ADVICE_PUSH_UPDATE_REJECTED))
return;
advise(_(message_advice_ref_needs_update));
}
diff --git a/builtin/read-tree.c b/builtin/read-tree.c
index 485e7b0..2109c4c 100644
--- a/builtin/read-tree.c
+++ b/builtin/read-tree.c
@@ -38,7 +38,7 @@ static int list_tree(struct object_id *oid)
}
static const char * const read_tree_usage[] = {
- N_("git read-tree [(-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>) [-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--index-output=<file>] (--empty | <tree-ish1> [<tree-ish2> [<tree-ish3>]])"),
+ N_("git read-tree [(-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>) [-u | -i]] [--no-sparse-checkout] [--index-output=<file>] (--empty | <tree-ish1> [<tree-ish2> [<tree-ish3>]])"),
NULL
};
@@ -53,24 +53,16 @@ static int index_output_cb(const struct option *opt, const char *arg,
static int exclude_per_directory_cb(const struct option *opt, const char *arg,
int unset)
{
- struct dir_struct *dir;
struct unpack_trees_options *opts;
BUG_ON_OPT_NEG(unset);
opts = (struct unpack_trees_options *)opt->value;
- if (opts->dir)
- die("more than one --exclude-per-directory given.");
-
- dir = xcalloc(1, sizeof(*opts->dir));
- dir->flags |= DIR_SHOW_IGNORED;
- dir->exclude_per_dir = arg;
- opts->dir = dir;
- /* We do not need to nor want to do read-directory
- * here; we are merely interested in reusing the
- * per directory ignore stack mechanism.
- */
+ if (!opts->update)
+ die("--exclude-per-directory is meaningless unless -u");
+ if (strcmp(arg, ".gitignore"))
+ die("--exclude-per-directory argument must be .gitignore");
return 0;
}
@@ -174,6 +166,9 @@ int cmd_read_tree(int argc, const char **argv, const char *cmd_prefix)
if (1 < opts.merge + opts.reset + prefix_set)
die("Which one? -m, --reset, or --prefix?");
+ if (opts.reset)
+ opts.reset = UNPACK_RESET_OVERWRITE_UNTRACKED;
+
/*
* NEEDSWORK
*
@@ -209,8 +204,9 @@ int cmd_read_tree(int argc, const char **argv, const char *cmd_prefix)
if ((opts.update || opts.index_only) && !opts.merge)
die("%s is meaningless without -m, --reset, or --prefix",
opts.update ? "-u" : "-i");
- if ((opts.dir && !opts.update))
- die("--exclude-per-directory is meaningless unless -u");
+ if (opts.update && !opts.reset)
+ opts.preserve_ignored = 0;
+ /* otherwise, opts.preserve_ignored is irrelevant */
if (opts.merge && !opts.index_only)
setup_work_tree();
diff --git a/builtin/rebase.c b/builtin/rebase.c
index 66a0a0f..34b4744 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -48,8 +48,7 @@ static GIT_PATH_FUNC(merge_dir, "rebase-merge")
enum rebase_type {
REBASE_UNSPECIFIED = -1,
REBASE_APPLY,
- REBASE_MERGE,
- REBASE_PRESERVE_MERGES
+ REBASE_MERGE
};
enum empty_type {
@@ -163,12 +162,7 @@ enum action {
ACTION_ABORT,
ACTION_QUIT,
ACTION_EDIT_TODO,
- ACTION_SHOW_CURRENT_PATCH,
- ACTION_SHORTEN_OIDS,
- ACTION_EXPAND_OIDS,
- ACTION_CHECK_TODO_LIST,
- ACTION_REARRANGE_SQUASH,
- ACTION_ADD_EXEC
+ ACTION_SHOW_CURRENT_PATCH
};
static const char *action_names[] = { "undefined",
@@ -179,81 +173,6 @@ static const char *action_names[] = { "undefined",
"edit_todo",
"show_current_patch" };
-static int add_exec_commands(struct string_list *commands)
-{
- const char *todo_file = rebase_path_todo();
- struct todo_list todo_list = TODO_LIST_INIT;
- int res;
-
- if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0)
- return error_errno(_("could not read '%s'."), todo_file);
-
- if (todo_list_parse_insn_buffer(the_repository, todo_list.buf.buf,
- &todo_list)) {
- todo_list_release(&todo_list);
- return error(_("unusable todo list: '%s'"), todo_file);
- }
-
- todo_list_add_exec_commands(&todo_list, commands);
- res = todo_list_write_to_file(the_repository, &todo_list,
- todo_file, NULL, NULL, -1, 0);
- todo_list_release(&todo_list);
-
- if (res)
- return error_errno(_("could not write '%s'."), todo_file);
- return 0;
-}
-
-static int rearrange_squash_in_todo_file(void)
-{
- const char *todo_file = rebase_path_todo();
- struct todo_list todo_list = TODO_LIST_INIT;
- int res = 0;
-
- if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0)
- return error_errno(_("could not read '%s'."), todo_file);
- if (todo_list_parse_insn_buffer(the_repository, todo_list.buf.buf,
- &todo_list)) {
- todo_list_release(&todo_list);
- return error(_("unusable todo list: '%s'"), todo_file);
- }
-
- res = todo_list_rearrange_squash(&todo_list);
- if (!res)
- res = todo_list_write_to_file(the_repository, &todo_list,
- todo_file, NULL, NULL, -1, 0);
-
- todo_list_release(&todo_list);
-
- if (res)
- return error_errno(_("could not write '%s'."), todo_file);
- return 0;
-}
-
-static int transform_todo_file(unsigned flags)
-{
- const char *todo_file = rebase_path_todo();
- struct todo_list todo_list = TODO_LIST_INIT;
- int res;
-
- if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0)
- return error_errno(_("could not read '%s'."), todo_file);
-
- if (todo_list_parse_insn_buffer(the_repository, todo_list.buf.buf,
- &todo_list)) {
- todo_list_release(&todo_list);
- return error(_("unusable todo list: '%s'"), todo_file);
- }
-
- res = todo_list_write_to_file(the_repository, &todo_list, todo_file,
- NULL, NULL, -1, flags);
- todo_list_release(&todo_list);
-
- if (res)
- return error_errno(_("could not write '%s'."), todo_file);
- return 0;
-}
-
static int edit_todo_file(unsigned flags)
{
const char *todo_file = rebase_path_todo();
@@ -403,8 +322,8 @@ static int run_sequencer_rebase(struct rebase_options *opts,
flags |= opts->rebase_merges ? TODO_LIST_REBASE_MERGES : 0;
flags |= opts->rebase_cousins > 0 ? TODO_LIST_REBASE_COUSINS : 0;
flags |= opts->root_with_onto ? TODO_LIST_ROOT_WITH_ONTO : 0;
- flags |= command == ACTION_SHORTEN_OIDS ? TODO_LIST_SHORTEN_IDS : 0;
flags |= opts->reapply_cherry_picks ? TODO_LIST_REAPPLY_CHERRY_PICKS : 0;
+ flags |= opts->flags & REBASE_NO_QUIET ? TODO_LIST_WARN_SKIPPED_CHERRY_PICKS : 0;
switch (command) {
case ACTION_NONE: {
@@ -438,24 +357,6 @@ static int run_sequencer_rebase(struct rebase_options *opts,
break;
}
- case ACTION_SHORTEN_OIDS:
- case ACTION_EXPAND_OIDS:
- ret = transform_todo_file(flags);
- break;
- case ACTION_CHECK_TODO_LIST:
- ret = check_todo_list_from_file(the_repository);
- break;
- case ACTION_REARRANGE_SQUASH:
- ret = rearrange_squash_in_todo_file();
- break;
- case ACTION_ADD_EXEC: {
- struct string_list commands = STRING_LIST_INIT_DUP;
-
- split_exec_commands(opts->cmd, &commands);
- ret = add_exec_commands(&commands);
- string_list_clear(&commands, 0);
- break;
- }
default:
BUG("invalid command '%d'", command);
}
@@ -477,102 +378,9 @@ static int parse_opt_keep_empty(const struct option *opt, const char *arg,
return 0;
}
-static const char * const builtin_rebase_interactive_usage[] = {
- N_("git rebase--interactive [<options>]"),
- NULL
-};
-
-int cmd_rebase__interactive(int argc, const char **argv, const char *prefix)
-{
- struct rebase_options opts = REBASE_OPTIONS_INIT;
- struct object_id squash_onto = *null_oid();
- enum action command = ACTION_NONE;
- struct option options[] = {
- OPT_NEGBIT(0, "ff", &opts.flags, N_("allow fast-forward"),
- REBASE_FORCE),
- OPT_CALLBACK_F('k', "keep-empty", &options, NULL,
- N_("keep commits which start empty"),
- PARSE_OPT_NOARG | PARSE_OPT_HIDDEN,
- parse_opt_keep_empty),
- OPT_BOOL_F(0, "allow-empty-message", &opts.allow_empty_message,
- N_("allow commits with empty messages"),
- PARSE_OPT_HIDDEN),
- OPT_BOOL(0, "rebase-merges", &opts.rebase_merges, N_("rebase merge commits")),
- OPT_BOOL(0, "rebase-cousins", &opts.rebase_cousins,
- N_("keep original branch points of cousins")),
- OPT_BOOL(0, "autosquash", &opts.autosquash,
- N_("move commits that begin with squash!/fixup!")),
- OPT_BOOL(0, "signoff", &opts.signoff, N_("sign commits")),
- OPT_BIT('v', "verbose", &opts.flags,
- N_("display a diffstat of what changed upstream"),
- REBASE_NO_QUIET | REBASE_VERBOSE | REBASE_DIFFSTAT),
- OPT_CMDMODE(0, "continue", &command, N_("continue rebase"),
- ACTION_CONTINUE),
- OPT_CMDMODE(0, "skip", &command, N_("skip commit"), ACTION_SKIP),
- OPT_CMDMODE(0, "edit-todo", &command, N_("edit the todo list"),
- ACTION_EDIT_TODO),
- OPT_CMDMODE(0, "show-current-patch", &command, N_("show the current patch"),
- ACTION_SHOW_CURRENT_PATCH),
- OPT_CMDMODE(0, "shorten-ids", &command,
- N_("shorten commit ids in the todo list"), ACTION_SHORTEN_OIDS),
- OPT_CMDMODE(0, "expand-ids", &command,
- N_("expand commit ids in the todo list"), ACTION_EXPAND_OIDS),
- OPT_CMDMODE(0, "check-todo-list", &command,
- N_("check the todo list"), ACTION_CHECK_TODO_LIST),
- OPT_CMDMODE(0, "rearrange-squash", &command,
- N_("rearrange fixup/squash lines"), ACTION_REARRANGE_SQUASH),
- OPT_CMDMODE(0, "add-exec-commands", &command,
- N_("insert exec commands in todo list"), ACTION_ADD_EXEC),
- { OPTION_CALLBACK, 0, "onto", &opts.onto, N_("onto"), N_("onto"),
- PARSE_OPT_NONEG, parse_opt_commit, 0 },
- { OPTION_CALLBACK, 0, "restrict-revision", &opts.restrict_revision,
- N_("restrict-revision"), N_("restrict revision"),
- PARSE_OPT_NONEG, parse_opt_commit, 0 },
- { OPTION_CALLBACK, 0, "squash-onto", &squash_onto, N_("squash-onto"),
- N_("squash onto"), PARSE_OPT_NONEG, parse_opt_object_id, 0 },
- { OPTION_CALLBACK, 0, "upstream", &opts.upstream, N_("upstream"),
- N_("the upstream commit"), PARSE_OPT_NONEG, parse_opt_commit,
- 0 },
- OPT_STRING(0, "head-name", &opts.head_name, N_("head-name"), N_("head name")),
- { OPTION_STRING, 'S', "gpg-sign", &opts.gpg_sign_opt, N_("key-id"),
- N_("GPG-sign commits"),
- PARSE_OPT_OPTARG, NULL, (intptr_t) "" },
- OPT_STRING(0, "strategy", &opts.strategy, N_("strategy"),
- N_("rebase strategy")),
- OPT_STRING(0, "strategy-opts", &opts.strategy_opts, N_("strategy-opts"),
- N_("strategy options")),
- OPT_STRING(0, "switch-to", &opts.switch_to, N_("switch-to"),
- N_("the branch or commit to checkout")),
- OPT_STRING(0, "onto-name", &opts.onto_name, N_("onto-name"), N_("onto name")),
- OPT_STRING(0, "cmd", &opts.cmd, N_("cmd"), N_("the command to run")),
- OPT_RERERE_AUTOUPDATE(&opts.allow_rerere_autoupdate),
- OPT_BOOL(0, "reschedule-failed-exec", &opts.reschedule_failed_exec,
- N_("automatically re-schedule any `exec` that fails")),
- OPT_END()
- };
-
- opts.rebase_cousins = -1;
-
- if (argc == 1)
- usage_with_options(builtin_rebase_interactive_usage, options);
-
- argc = parse_options(argc, argv, prefix, options,
- builtin_rebase_interactive_usage, PARSE_OPT_KEEP_ARGV0);
-
- if (!is_null_oid(&squash_onto))
- opts.squash_onto = &squash_onto;
-
- if (opts.rebase_cousins >= 0 && !opts.rebase_merges)
- warning(_("--[no-]rebase-cousins has no effect without "
- "--rebase-merges"));
-
- return !!run_sequencer_rebase(&opts, command);
-}
-
static int is_merge(struct rebase_options *opts)
{
- return opts->type == REBASE_MERGE ||
- opts->type == REBASE_PRESERVE_MERGES;
+ return opts->type == REBASE_MERGE;
}
static void imply_merge(struct rebase_options *opts, const char *option)
@@ -582,7 +390,6 @@ static void imply_merge(struct rebase_options *opts, const char *option)
die(_("%s requires the merge backend"), option);
break;
case REBASE_MERGE:
- case REBASE_PRESERVE_MERGES:
break;
default:
opts->type = REBASE_MERGE; /* implied */
@@ -740,7 +547,6 @@ static int finish_rebase(struct rebase_options *opts)
delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
unlink(git_path_auto_merge(the_repository));
apply_autostash(state_dir_path("autostash", opts));
- close_object_store(the_repository->objects);
/*
* We ignore errors in 'git maintenance run --auto', since the
* user should see them.
@@ -762,28 +568,6 @@ static int finish_rebase(struct rebase_options *opts)
return ret;
}
-static struct commit *peel_committish(const char *name)
-{
- struct object *obj;
- struct object_id oid;
-
- if (get_oid(name, &oid))
- return NULL;
- obj = parse_object(the_repository, &oid);
- return (struct commit *)peel_to_type(name, 0, obj, OBJ_COMMIT);
-}
-
-static void add_var(struct strbuf *buf, const char *name, const char *value)
-{
- if (!value)
- strbuf_addf(buf, "unset %s; ", name);
- else {
- strbuf_addf(buf, "%s=", name);
- sq_quote_buf(buf, value);
- strbuf_addstr(buf, "; ");
- }
-}
-
static int move_to_original_branch(struct rebase_options *opts)
{
struct strbuf orig_head_reflog = STRBUF_INIT, head_reflog = STRBUF_INIT;
@@ -940,10 +724,7 @@ static int run_am(struct rebase_options *opts)
static int run_specific_rebase(struct rebase_options *opts, enum action action)
{
- const char *argv[] = { NULL, NULL };
- struct strbuf script_snippet = STRBUF_INIT, buf = STRBUF_INIT;
int status;
- const char *backend, *backend_func;
if (opts->type == REBASE_MERGE) {
/* Run sequencer-based rebase */
@@ -960,87 +741,11 @@ static int run_specific_rebase(struct rebase_options *opts, enum action action)
}
status = run_sequencer_rebase(opts, action);
- goto finished_rebase;
- }
-
- if (opts->type == REBASE_APPLY) {
+ } else if (opts->type == REBASE_APPLY)
status = run_am(opts);
- goto finished_rebase;
- }
-
- add_var(&script_snippet, "GIT_DIR", absolute_path(get_git_dir()));
- add_var(&script_snippet, "state_dir", opts->state_dir);
-
- add_var(&script_snippet, "upstream_name", opts->upstream_name);
- add_var(&script_snippet, "upstream", opts->upstream ?
- oid_to_hex(&opts->upstream->object.oid) : NULL);
- add_var(&script_snippet, "head_name",
- opts->head_name ? opts->head_name : "detached HEAD");
- add_var(&script_snippet, "orig_head", oid_to_hex(&opts->orig_head));
- add_var(&script_snippet, "onto", opts->onto ?
- oid_to_hex(&opts->onto->object.oid) : NULL);
- add_var(&script_snippet, "onto_name", opts->onto_name);
- add_var(&script_snippet, "revisions", opts->revisions);
- add_var(&script_snippet, "restrict_revision", opts->restrict_revision ?
- oid_to_hex(&opts->restrict_revision->object.oid) : NULL);
- sq_quote_argv_pretty(&buf, opts->git_am_opts.v);
- add_var(&script_snippet, "git_am_opt", buf.buf);
- strbuf_release(&buf);
- add_var(&script_snippet, "verbose",
- opts->flags & REBASE_VERBOSE ? "t" : "");
- add_var(&script_snippet, "diffstat",
- opts->flags & REBASE_DIFFSTAT ? "t" : "");
- add_var(&script_snippet, "force_rebase",
- opts->flags & REBASE_FORCE ? "t" : "");
- if (opts->switch_to)
- add_var(&script_snippet, "switch_to", opts->switch_to);
- add_var(&script_snippet, "action", opts->action ? opts->action : "");
- add_var(&script_snippet, "signoff", opts->signoff ? "--signoff" : "");
- add_var(&script_snippet, "allow_rerere_autoupdate",
- opts->allow_rerere_autoupdate ?
- opts->allow_rerere_autoupdate == RERERE_AUTOUPDATE ?
- "--rerere-autoupdate" : "--no-rerere-autoupdate" : "");
- add_var(&script_snippet, "keep_empty", opts->keep_empty ? "yes" : "");
- add_var(&script_snippet, "autosquash", opts->autosquash ? "t" : "");
- add_var(&script_snippet, "gpg_sign_opt", opts->gpg_sign_opt);
- add_var(&script_snippet, "cmd", opts->cmd);
- add_var(&script_snippet, "allow_empty_message",
- opts->allow_empty_message ? "--allow-empty-message" : "");
- add_var(&script_snippet, "rebase_merges",
- opts->rebase_merges ? "t" : "");
- add_var(&script_snippet, "rebase_cousins",
- opts->rebase_cousins ? "t" : "");
- add_var(&script_snippet, "strategy", opts->strategy);
- add_var(&script_snippet, "strategy_opts", opts->strategy_opts);
- add_var(&script_snippet, "rebase_root", opts->root ? "t" : "");
- add_var(&script_snippet, "squash_onto",
- opts->squash_onto ? oid_to_hex(opts->squash_onto) : "");
- add_var(&script_snippet, "git_format_patch_opt",
- opts->git_format_patch_opt.buf);
-
- if (is_merge(opts) &&
- !(opts->flags & REBASE_INTERACTIVE_EXPLICIT)) {
- strbuf_addstr(&script_snippet,
- "GIT_SEQUENCE_EDITOR=:; export GIT_SEQUENCE_EDITOR; ");
- opts->autosquash = 0;
- }
-
- switch (opts->type) {
- case REBASE_PRESERVE_MERGES:
- backend = "git-rebase--preserve-merges";
- backend_func = "git_rebase__preserve_merges";
- break;
- default:
+ else
BUG("Unhandled rebase type %d", opts->type);
- break;
- }
- strbuf_addf(&script_snippet,
- ". git-sh-setup && . %s && %s", backend, backend_func);
- argv[0] = script_snippet.buf;
-
- status = run_command_v_opt(argv, RUN_USING_SHELL);
-finished_rebase:
if (opts->dont_finish_rebase)
; /* do nothing */
else if (opts->type == REBASE_MERGE)
@@ -1058,8 +763,6 @@ static int run_specific_rebase(struct rebase_options *opts, enum action action)
die("Nothing to do");
}
- strbuf_release(&script_snippet);
-
return status ? -1 : 0;
}
@@ -1195,7 +898,7 @@ static int parse_opt_merge(const struct option *opt, const char *arg, int unset)
return 0;
}
-/* -i followed by -p is still explicitly interactive, but -p alone is not */
+/* -i followed by -r is still explicitly interactive, but -r alone is not */
static int parse_opt_interactive(const struct option *opt, const char *arg,
int unset)
{
@@ -1313,6 +1016,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
char *squash_onto_name = NULL;
int reschedule_failed_exec = -1;
int allow_preemptive_ff = 1;
+ int preserve_merges_selected = 0;
struct option builtin_rebase_options[] = {
OPT_STRING(0, "onto", &options.onto_name,
N_("revision"),
@@ -1377,10 +1081,10 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
N_("let the user edit the list of commits to rebase"),
PARSE_OPT_NOARG | PARSE_OPT_NONEG,
parse_opt_interactive),
- OPT_SET_INT_F('p', "preserve-merges", &options.type,
+ OPT_SET_INT_F('p', "preserve-merges", &preserve_merges_selected,
N_("(DEPRECATED) try to recreate merges instead of "
"ignoring them"),
- REBASE_PRESERVE_MERGES, PARSE_OPT_HIDDEN),
+ 1, PARSE_OPT_HIDDEN),
OPT_RERERE_AUTOUPDATE(&options.allow_rerere_autoupdate),
OPT_CALLBACK_F(0, "empty", &options, "{drop,keep,ask}",
N_("how to handle commits that become empty"),
@@ -1430,6 +1134,9 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
usage_with_options(builtin_rebase_usage,
builtin_rebase_options);
+ prepare_repo_settings(the_repository);
+ the_repository->settings.command_requires_full_index = 0;
+
options.allow_empty_message = 1;
git_config(rebase_config, &options);
/* options.gpg_sign_opt will be either "-S" or NULL */
@@ -1448,8 +1155,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
strbuf_reset(&buf);
strbuf_addf(&buf, "%s/rewritten", merge_dir());
if (is_directory(buf.buf)) {
- options.type = REBASE_PRESERVE_MERGES;
- options.flags |= REBASE_INTERACTIVE_EXPLICIT;
+ die("`rebase -p` is no longer supported");
} else {
strbuf_reset(&buf);
strbuf_addf(&buf, "%s/interactive", merge_dir());
@@ -1470,6 +1176,9 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
builtin_rebase_options,
builtin_rebase_usage, 0);
+ if (preserve_merges_selected)
+ die(_("--preserve-merges was replaced by --rebase-merges"));
+
if (action != ACTION_NONE && total_argc != 2) {
usage_with_options(builtin_rebase_usage,
builtin_rebase_options);
@@ -1479,10 +1188,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
usage_with_options(builtin_rebase_usage,
builtin_rebase_options);
- if (options.type == REBASE_PRESERVE_MERGES)
- warning(_("git rebase --preserve-merges is deprecated. "
- "Use --rebase-merges instead."));
-
if (keep_base) {
if (options.onto_name)
die(_("cannot combine '--keep-base' with '--onto'"));
@@ -1574,7 +1279,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
die(_("could not move back to %s"),
oid_to_hex(&options.orig_head));
remove_branch_state(the_repository, 0);
- ret = !!finish_rebase(&options);
+ ret = finish_rebase(&options);
goto cleanup;
}
case ACTION_QUIT: {
@@ -1583,11 +1288,11 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
struct replay_opts replay = REPLAY_OPTS_INIT;
replay.action = REPLAY_INTERACTIVE_REBASE;
- ret = !!sequencer_remove_state(&replay);
+ ret = sequencer_remove_state(&replay);
} else {
strbuf_reset(&buf);
strbuf_addstr(&buf, options.state_dir);
- ret = !!remove_dir_recursively(&buf, 0);
+ ret = remove_dir_recursively(&buf, 0);
if (ret)
error(_("could not remove '%s'"),
options.state_dir);
@@ -1702,7 +1407,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
if (options.ignore_date)
strvec_push(&options.git_am_opts, "--ignore-date");
} else {
- /* REBASE_MERGE and PRESERVE_MERGES */
+ /* REBASE_MERGE */
if (ignore_whitespace) {
string_list_append(&strategy_options,
"ignore-space-change");
@@ -1713,7 +1418,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
int i;
if (!options.strategy)
- options.strategy = "recursive";
+ options.strategy = "ort";
strbuf_reset(&buf);
for (i = 0; i < strategy_options.nr; i++)
@@ -1728,7 +1433,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
case REBASE_APPLY:
die(_("--strategy requires --merge or --interactive"));
case REBASE_MERGE:
- case REBASE_PRESERVE_MERGES:
/* compatible */
break;
case REBASE_UNSPECIFIED:
@@ -1780,7 +1484,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
switch (options.type) {
case REBASE_MERGE:
- case REBASE_PRESERVE_MERGES:
options.state_dir = merge_dir();
break;
case REBASE_APPLY:
@@ -1805,28 +1508,10 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
options.reschedule_failed_exec = reschedule_failed_exec;
if (options.signoff) {
- if (options.type == REBASE_PRESERVE_MERGES)
- die("cannot combine '--signoff' with "
- "'--preserve-merges'");
strvec_push(&options.git_am_opts, "--signoff");
options.flags |= REBASE_FORCE;
}
- if (options.type == REBASE_PRESERVE_MERGES) {
- /*
- * Note: incompatibility with --signoff handled in signoff block above
- * Note: incompatibility with --interactive is just a strong warning;
- * git-rebase.txt caveats with "unless you know what you are doing"
- */
- if (options.rebase_merges)
- die(_("cannot combine '--preserve-merges' with "
- "'--rebase-merges'"));
-
- if (options.reschedule_failed_exec)
- die(_("error: cannot combine '--preserve-merges' with "
- "'--reschedule-failed-exec'"));
- }
-
if (!options.root) {
if (argc < 1) {
struct branch *branch;
@@ -1845,7 +1530,8 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
if (!strcmp(options.upstream_name, "-"))
options.upstream_name = "@{-1}";
}
- options.upstream = peel_committish(options.upstream_name);
+ options.upstream =
+ lookup_commit_reference_by_name(options.upstream_name);
if (!options.upstream)
die(_("invalid upstream '%s'"), options.upstream_name);
options.upstream_arg = options.upstream_name;
@@ -1888,7 +1574,8 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
options.onto = lookup_commit_or_die(&merge_base,
options.onto_name);
} else {
- options.onto = peel_committish(options.onto_name);
+ options.onto =
+ lookup_commit_reference_by_name(options.onto_name);
if (!options.onto)
die(_("Does not point to a valid commit '%s'"),
options.onto_name);
@@ -1913,13 +1600,15 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
die_if_checked_out(buf.buf, 1);
options.head_name = xstrdup(buf.buf);
/* If not is it a valid ref (branch or commit)? */
- } else if (!get_oid(branch_name, &options.orig_head) &&
- lookup_commit_reference(the_repository,
- &options.orig_head))
+ } else {
+ struct commit *commit =
+ lookup_commit_reference_by_name(branch_name);
+ if (!commit)
+ die(_("no such branch/commit '%s'"),
+ branch_name);
+ oidcpy(&options.orig_head, &commit->object.oid);
options.head_name = NULL;
- else
- die(_("no such branch/commit '%s'"),
- branch_name);
+ }
} else if (argc == 0) {
/* Do not need to switch branches, we are already on it. */
options.head_name =
@@ -1959,7 +1648,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
if (require_clean_work_tree(the_repository, "rebase",
_("Please commit or stash them."), 1, 1)) {
- ret = 1;
+ ret = -1;
goto cleanup;
}
@@ -1994,7 +1683,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
RESET_HEAD_RUN_POST_CHECKOUT_HOOK,
NULL, buf.buf,
DEFAULT_REFLOG_ACTION) < 0) {
- ret = !!error(_("could not switch to "
+ ret = error(_("could not switch to "
"%s"),
options.switch_to);
goto cleanup;
@@ -2009,7 +1698,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
else
printf(_("Current branch %s is up to date.\n"),
branch_name);
- ret = !!finish_rebase(&options);
+ ret = finish_rebase(&options);
goto cleanup;
} else if (!(options.flags & REBASE_NO_QUIET))
; /* be quiet */
@@ -2087,7 +1776,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
RESET_HEAD_REFS_ONLY, "HEAD", msg.buf,
DEFAULT_REFLOG_ACTION);
strbuf_release(&msg);
- ret = !!finish_rebase(&options);
+ ret = finish_rebase(&options);
goto cleanup;
}
@@ -2101,7 +1790,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
options.revisions = revisions.buf;
run_rebase:
- ret = !!run_specific_rebase(&options, action);
+ ret = run_specific_rebase(&options, action);
cleanup:
strbuf_release(&buf);
@@ -2112,5 +1801,5 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
free(options.strategy);
strbuf_release(&options.git_format_patch_opt);
free(squash_onto_name);
- return ret;
+ return !!ret;
}
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index 2d1f97e..49b846d 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -7,6 +7,7 @@
#include "pkt-line.h"
#include "sideband.h"
#include "run-command.h"
+#include "hook.h"
#include "exec-cmd.h"
#include "commit.h"
#include "object.h"
@@ -134,6 +135,10 @@ static int receive_pack_config(const char *var, const char *value, void *cb)
if (status)
return status;
+ status = git_gpg_config(var, value, NULL);
+ if (status)
+ return status;
+
if (strcmp(var, "receive.denydeletes") == 0) {
deny_deletes = git_config_bool(var, value);
return 0;
@@ -1306,7 +1311,7 @@ static void refuse_unconfigured_deny_delete_current(void)
rp_error("%s", _(refuse_unconfigured_deny_delete_current_msg));
}
-static int command_singleton_iterator(void *cb_data, struct object_id *oid);
+static const struct object_id *command_singleton_iterator(void *cb_data);
static int update_shallow_ref(struct command *cmd, struct shallow_info *si)
{
struct shallow_lock shallow_lock = SHALLOW_LOCK_INIT;
@@ -1463,7 +1468,7 @@ static const char *update_worktree(unsigned char *sha1, const struct worktree *w
strvec_pushf(&env, "GIT_DIR=%s", absolute_path(git_dir));
- if (!find_hook(push_to_checkout_hook))
+ if (!hook_exists(push_to_checkout_hook))
retval = push_to_deploy(sha1, &env, work_tree);
else
retval = push_to_checkout(sha1, &env, work_tree);
@@ -1731,16 +1736,15 @@ static void check_aliased_updates(struct command *commands)
string_list_clear(&ref_list, 0);
}
-static int command_singleton_iterator(void *cb_data, struct object_id *oid)
+static const struct object_id *command_singleton_iterator(void *cb_data)
{
struct command **cmd_list = cb_data;
struct command *cmd = *cmd_list;
if (!cmd || is_null_oid(&cmd->new_oid))
- return -1; /* end of list */
+ return NULL;
*cmd_list = NULL; /* this returns only one */
- oidcpy(oid, &cmd->new_oid);
- return 0;
+ return &cmd->new_oid;
}
static void set_connectivity_errors(struct command *commands,
@@ -1770,7 +1774,7 @@ struct iterate_data {
struct shallow_info *si;
};
-static int iterate_receive_command_list(void *cb_data, struct object_id *oid)
+static const struct object_id *iterate_receive_command_list(void *cb_data)
{
struct iterate_data *data = cb_data;
struct command **cmd_list = &data->cmds;
@@ -1781,13 +1785,11 @@ static int iterate_receive_command_list(void *cb_data, struct object_id *oid)
/* to be checked in update_shallow_ref() */
continue;
if (!is_null_oid(&cmd->new_oid) && !cmd->skip_update) {
- oidcpy(oid, &cmd->new_oid);
*cmd_list = cmd->next;
- return 0;
+ return &cmd->new_oid;
}
}
- *cmd_list = NULL;
- return -1; /* end of list */
+ return NULL;
}
static void reject_updates_to_hidden(struct command *commands)
@@ -2477,7 +2479,8 @@ int cmd_receive_pack(int argc, const char **argv, const char *prefix)
struct option options[] = {
OPT__QUIET(&quiet, N_("quiet")),
OPT_HIDDEN_BOOL(0, "stateless-rpc", &stateless_rpc, NULL),
- OPT_HIDDEN_BOOL(0, "advertise-refs", &advertise_refs, NULL),
+ OPT_HIDDEN_BOOL(0, "http-backend-info-refs", &advertise_refs, NULL),
+ OPT_ALIAS(0, "advertise-refs", "http-backend-info-refs"),
OPT_HIDDEN_BOOL(0, "reject-thin-pack-for-testing", &reject_thin, NULL),
OPT_END()
};
@@ -2580,10 +2583,9 @@ int cmd_receive_pack(int argc, const char **argv, const char *prefix)
proc.no_stdin = 1;
proc.stdout_to_stderr = 1;
proc.err = use_sideband ? -1 : 0;
- proc.git_cmd = 1;
+ proc.git_cmd = proc.close_object_store = 1;
proc.argv = argv_gc_auto;
- close_object_store(the_repository->objects);
if (!start_command(&proc)) {
if (use_sideband)
copy_to_sideband(proc.err, -1, NULL);
diff --git a/builtin/reflog.c b/builtin/reflog.c
index 09541d1..175c83e 100644
--- a/builtin/reflog.c
+++ b/builtin/reflog.c
@@ -629,8 +629,9 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)
free_worktrees(worktrees);
for (i = 0; i < collected.nr; i++) {
struct collected_reflog *e = collected.e[i];
+
set_reflog_expiry_param(&cb.cmd, explicit_expiry, e->reflog);
- status |= reflog_expire(e->reflog, &e->oid, flags,
+ status |= reflog_expire(e->reflog, flags,
reflog_expiry_prepare,
should_expire_reflog_ent,
reflog_expiry_cleanup,
@@ -642,17 +643,17 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)
for (; i < argc; i++) {
char *ref;
- struct object_id oid;
- if (!dwim_log(argv[i], strlen(argv[i]), &oid, &ref)) {
+ if (!dwim_log(argv[i], strlen(argv[i]), NULL, &ref)) {
status |= error(_("%s points nowhere!"), argv[i]);
continue;
}
set_reflog_expiry_param(&cb.cmd, explicit_expiry, ref);
- status |= reflog_expire(ref, &oid, flags,
+ status |= reflog_expire(ref, flags,
reflog_expiry_prepare,
should_expire_reflog_ent,
reflog_expiry_cleanup,
&cb);
+ free(ref);
}
return status;
}
@@ -700,7 +701,6 @@ static int cmd_reflog_delete(int argc, const char **argv, const char *prefix)
for ( ; i < argc; i++) {
const char *spec = strstr(argv[i], "@{");
- struct object_id oid;
char *ep, *ref;
int recno;
@@ -709,7 +709,7 @@ static int cmd_reflog_delete(int argc, const char **argv, const char *prefix)
continue;
}
- if (!dwim_log(argv[i], spec - argv[i], &oid, &ref)) {
+ if (!dwim_log(argv[i], spec - argv[i], NULL, &ref)) {
status |= error(_("no reflog for '%s'"), argv[i]);
continue;
}
@@ -724,7 +724,7 @@ static int cmd_reflog_delete(int argc, const char **argv, const char *prefix)
cb.cmd.expire_total = 0;
}
- status |= reflog_expire(ref, &oid, flags,
+ status |= reflog_expire(ref, flags,
reflog_expiry_prepare,
should_expire_reflog_ent,
reflog_expiry_cleanup,
diff --git a/builtin/remote.c b/builtin/remote.c
index 7f88e6c..299c466 100644
--- a/builtin/remote.c
+++ b/builtin/remote.c
@@ -318,6 +318,9 @@ static int config_read_branches(const char *key, const char *value, void *cb)
* truth value with >= REBASE_TRUE.
*/
info->rebase = rebase_parse_value(value);
+ if (info->rebase == REBASE_INVALID)
+ warning(_("unhandled branch.%s.rebase=%s; assuming "
+ "'true'"), name, value);
break;
case PUSH_REMOTE:
if (info->push_remote_name)
@@ -344,6 +347,14 @@ struct ref_states {
int queried;
};
+#define REF_STATES_INIT { \
+ .new_refs = STRING_LIST_INIT_DUP, \
+ .stale = STRING_LIST_INIT_DUP, \
+ .tracked = STRING_LIST_INIT_DUP, \
+ .heads = STRING_LIST_INIT_DUP, \
+ .push = STRING_LIST_INIT_DUP, \
+}
+
static int get_ref_states(const struct ref *remote_refs, struct ref_states *states)
{
struct ref *fetch_map = NULL, **tail = &fetch_map;
@@ -355,9 +366,6 @@ static int get_ref_states(const struct ref *remote_refs, struct ref_states *stat
die(_("Could not get fetch map for refspec %s"),
states->remote->fetch.raw[i]);
- states->new_refs.strdup_strings = 1;
- states->tracked.strdup_strings = 1;
- states->stale.strdup_strings = 1;
for (ref = fetch_map; ref; ref = ref->next) {
if (!ref->peer_ref || !ref_exists(ref->peer_ref->name))
string_list_append(&states->new_refs, abbrev_branch(ref->name));
@@ -406,7 +414,6 @@ static int get_push_ref_states(const struct ref *remote_refs,
match_push_refs(local_refs, &push_map, &remote->push, MATCH_REFS_NONE);
- states->push.strdup_strings = 1;
for (ref = push_map; ref; ref = ref->next) {
struct string_list_item *item;
struct push_info *info;
@@ -449,7 +456,6 @@ static int get_push_ref_states_noquery(struct ref_states *states)
if (remote->mirror)
return 0;
- states->push.strdup_strings = 1;
if (!remote->push.nr) {
item = string_list_append(&states->push, _("(matching)"));
info = item->util = xcalloc(1, sizeof(struct push_info));
@@ -483,7 +489,6 @@ static int get_head_names(const struct ref *remote_refs, struct ref_states *stat
refspec.force = 0;
refspec.pattern = 1;
refspec.src = refspec.dst = "refs/heads/*";
- states->heads.strdup_strings = 1;
get_fetch_map(remote_refs, &refspec, &fetch_map_tail, 0);
matches = guess_remote_head(find_ref_by_name(remote_refs, "HEAD"),
fetch_map, 1);
@@ -970,26 +975,31 @@ static int get_remote_ref_states(const char *name,
}
struct show_info {
- struct string_list *list;
- struct ref_states *states;
+ struct string_list list;
+ struct ref_states states;
int width, width2;
int any_rebase;
};
+#define SHOW_INFO_INIT { \
+ .list = STRING_LIST_INIT_DUP, \
+ .states = REF_STATES_INIT, \
+}
+
static int add_remote_to_show_info(struct string_list_item *item, void *cb_data)
{
struct show_info *info = cb_data;
int n = strlen(item->string);
if (n > info->width)
info->width = n;
- string_list_insert(info->list, item->string);
+ string_list_insert(&info->list, item->string);
return 0;
}
static int show_remote_info_item(struct string_list_item *item, void *cb_data)
{
struct show_info *info = cb_data;
- struct ref_states *states = info->states;
+ struct ref_states *states = &info->states;
const char *name = item->string;
if (states->queried) {
@@ -1016,7 +1026,7 @@ static int show_remote_info_item(struct string_list_item *item, void *cb_data)
static int add_local_to_show_info(struct string_list_item *branch_item, void *cb_data)
{
struct show_info *show_info = cb_data;
- struct ref_states *states = show_info->states;
+ struct ref_states *states = &show_info->states;
struct branch_info *branch_info = branch_item->util;
struct string_list_item *item;
int n;
@@ -1029,7 +1039,7 @@ static int add_local_to_show_info(struct string_list_item *branch_item, void *cb
if (branch_info->rebase >= REBASE_TRUE)
show_info->any_rebase = 1;
- item = string_list_insert(show_info->list, branch_item->string);
+ item = string_list_insert(&show_info->list, branch_item->string);
item->util = branch_info;
return 0;
@@ -1084,7 +1094,7 @@ static int add_push_to_show_info(struct string_list_item *push_item, void *cb_da
show_info->width = n;
if ((n = strlen(push_info->dest)) > show_info->width2)
show_info->width2 = n;
- item = string_list_append(show_info->list, push_item->string);
+ item = string_list_append(&show_info->list, push_item->string);
item->util = push_item->util;
return 0;
}
@@ -1212,9 +1222,7 @@ static int show(int argc, const char **argv)
OPT_BOOL('n', NULL, &no_query, N_("do not query remotes")),
OPT_END()
};
- struct ref_states states;
- struct string_list info_list = STRING_LIST_INIT_NODUP;
- struct show_info info;
+ struct show_info info = SHOW_INFO_INIT;
argc = parse_options(argc, argv, NULL, options, builtin_remote_show_usage,
0);
@@ -1225,26 +1233,22 @@ static int show(int argc, const char **argv)
if (!no_query)
query_flag = (GET_REF_STATES | GET_HEAD_NAMES | GET_PUSH_REF_STATES);
- memset(&states, 0, sizeof(states));
- memset(&info, 0, sizeof(info));
- info.states = &states;
- info.list = &info_list;
for (; argc; argc--, argv++) {
int i;
const char **url;
int url_nr;
- get_remote_ref_states(*argv, &states, query_flag);
+ get_remote_ref_states(*argv, &info.states, query_flag);
printf_ln(_("* remote %s"), *argv);
- printf_ln(_(" Fetch URL: %s"), states.remote->url_nr > 0 ?
- states.remote->url[0] : _("(no URL)"));
- if (states.remote->pushurl_nr) {
- url = states.remote->pushurl;
- url_nr = states.remote->pushurl_nr;
+ printf_ln(_(" Fetch URL: %s"), info.states.remote->url_nr > 0 ?
+ info.states.remote->url[0] : _("(no URL)"));
+ if (info.states.remote->pushurl_nr) {
+ url = info.states.remote->pushurl;
+ url_nr = info.states.remote->pushurl_nr;
} else {
- url = states.remote->url;
- url_nr = states.remote->url_nr;
+ url = info.states.remote->url;
+ url_nr = info.states.remote->url_nr;
}
for (i = 0; i < url_nr; i++)
/*
@@ -1257,57 +1261,57 @@ static int show(int argc, const char **argv)
printf_ln(_(" Push URL: %s"), _("(no URL)"));
if (no_query)
printf_ln(_(" HEAD branch: %s"), _("(not queried)"));
- else if (!states.heads.nr)
+ else if (!info.states.heads.nr)
printf_ln(_(" HEAD branch: %s"), _("(unknown)"));
- else if (states.heads.nr == 1)
- printf_ln(_(" HEAD branch: %s"), states.heads.items[0].string);
+ else if (info.states.heads.nr == 1)
+ printf_ln(_(" HEAD branch: %s"), info.states.heads.items[0].string);
else {
printf(_(" HEAD branch (remote HEAD is ambiguous,"
" may be one of the following):\n"));
- for (i = 0; i < states.heads.nr; i++)
- printf(" %s\n", states.heads.items[i].string);
+ for (i = 0; i < info.states.heads.nr; i++)
+ printf(" %s\n", info.states.heads.items[i].string);
}
/* remote branch info */
info.width = 0;
- for_each_string_list(&states.new_refs, add_remote_to_show_info, &info);
- for_each_string_list(&states.tracked, add_remote_to_show_info, &info);
- for_each_string_list(&states.stale, add_remote_to_show_info, &info);
- if (info.list->nr)
+ for_each_string_list(&info.states.new_refs, add_remote_to_show_info, &info);
+ for_each_string_list(&info.states.tracked, add_remote_to_show_info, &info);
+ for_each_string_list(&info.states.stale, add_remote_to_show_info, &info);
+ if (info.list.nr)
printf_ln(Q_(" Remote branch:%s",
" Remote branches:%s",
- info.list->nr),
+ info.list.nr),
no_query ? _(" (status not queried)") : "");
- for_each_string_list(info.list, show_remote_info_item, &info);
- string_list_clear(info.list, 0);
+ for_each_string_list(&info.list, show_remote_info_item, &info);
+ string_list_clear(&info.list, 0);
/* git pull info */
info.width = 0;
info.any_rebase = 0;
for_each_string_list(&branch_list, add_local_to_show_info, &info);
- if (info.list->nr)
+ if (info.list.nr)
printf_ln(Q_(" Local branch configured for 'git pull':",
" Local branches configured for 'git pull':",
- info.list->nr));
- for_each_string_list(info.list, show_local_info_item, &info);
- string_list_clear(info.list, 0);
+ info.list.nr));
+ for_each_string_list(&info.list, show_local_info_item, &info);
+ string_list_clear(&info.list, 0);
/* git push info */
- if (states.remote->mirror)
+ if (info.states.remote->mirror)
printf_ln(_(" Local refs will be mirrored by 'git push'"));
info.width = info.width2 = 0;
- for_each_string_list(&states.push, add_push_to_show_info, &info);
- QSORT(info.list->items, info.list->nr, cmp_string_with_push);
- if (info.list->nr)
+ for_each_string_list(&info.states.push, add_push_to_show_info, &info);
+ QSORT(info.list.items, info.list.nr, cmp_string_with_push);
+ if (info.list.nr)
printf_ln(Q_(" Local ref configured for 'git push'%s:",
" Local refs configured for 'git push'%s:",
- info.list->nr),
+ info.list.nr),
no_query ? _(" (status not queried)") : "");
- for_each_string_list(info.list, show_push_info_item, &info);
- string_list_clear(info.list, 0);
+ for_each_string_list(&info.list, show_push_info_item, &info);
+ string_list_clear(&info.list, 0);
- free_remote_ref_states(&states);
+ free_remote_ref_states(&info.states);
}
return result;
@@ -1334,8 +1338,7 @@ static int set_head(int argc, const char **argv)
if (!opt_a && !opt_d && argc == 2) {
head_name = xstrdup(argv[1]);
} else if (opt_a && !opt_d && argc == 1) {
- struct ref_states states;
- memset(&states, 0, sizeof(states));
+ struct ref_states states = REF_STATES_INIT;
get_remote_ref_states(argv[0], &states, GET_HEAD_NAMES);
if (!states.heads.nr)
result |= error(_("Cannot determine remote HEAD"));
@@ -1374,14 +1377,13 @@ static int set_head(int argc, const char **argv)
static int prune_remote(const char *remote, int dry_run)
{
int result = 0;
- struct ref_states states;
+ struct ref_states states = REF_STATES_INIT;
struct string_list refs_to_prune = STRING_LIST_INIT_NODUP;
struct string_list_item *item;
const char *dangling_msg = dry_run
? _(" %s will become dangling!")
: _(" %s has become dangling!");
- memset(&states, 0, sizeof(states));
get_remote_ref_states(remote, &states, GET_REF_STATES);
if (!states.stale.nr) {
diff --git a/builtin/repack.c b/builtin/repack.c
index c3e4771..0b2d1e5 100644
--- a/builtin/repack.c
+++ b/builtin/repack.c
@@ -15,6 +15,8 @@
#include "promisor-remote.h"
#include "shallow.h"
#include "pack.h"
+#include "pack-bitmap.h"
+#include "refs.h"
static int delta_base_offset = 1;
static int pack_kept_objects = -1;
@@ -94,12 +96,14 @@ static void remove_pack_on_signal(int signo)
}
/*
- * Adds all packs hex strings to the fname list, which do not
- * have a corresponding .keep file. These packs are not to
- * be kept if we are going to pack everything into one file.
+ * Adds all packs hex strings to either fname_nonkept_list or
+ * fname_kept_list based on whether each pack has a corresponding
+ * .keep file or not. Packs without a .keep file are not to be kept
+ * if we are going to pack everything into one file.
*/
-static void get_non_kept_pack_filenames(struct string_list *fname_list,
- const struct string_list *extra_keep)
+static void collect_pack_filenames(struct string_list *fname_nonkept_list,
+ struct string_list *fname_kept_list,
+ const struct string_list *extra_keep)
{
DIR *dir;
struct dirent *e;
@@ -112,21 +116,20 @@ static void get_non_kept_pack_filenames(struct string_list *fname_list,
size_t len;
int i;
- for (i = 0; i < extra_keep->nr; i++)
- if (!fspathcmp(e->d_name, extra_keep->items[i].string))
- break;
- if (extra_keep->nr > 0 && i < extra_keep->nr)
- continue;
-
if (!strip_suffix(e->d_name, ".pack", &len))
continue;
+ for (i = 0; i < extra_keep->nr; i++)
+ if (!fspathcmp(e->d_name, extra_keep->items[i].string))
+ break;
+
fname = xmemdupz(e->d_name, len);
- if (!file_exists(mkpath("%s/%s.keep", packdir, fname)))
- string_list_append_nodup(fname_list, fname);
+ if ((extra_keep->nr > 0 && i < extra_keep->nr) ||
+ (file_exists(mkpath("%s/%s.keep", packdir, fname))))
+ string_list_append_nodup(fname_kept_list, fname);
else
- free(fname);
+ string_list_append_nodup(fname_nonkept_list, fname);
}
closedir(dir);
}
@@ -422,6 +425,25 @@ static void split_pack_geometry(struct pack_geometry *geometry, int factor)
geometry->split = split;
}
+static struct packed_git *get_largest_active_pack(struct pack_geometry *geometry)
+{
+ if (!geometry) {
+ /*
+ * No geometry means either an all-into-one repack (in which
+ * case there is only one pack left and it is the largest) or an
+ * incremental one.
+ *
+ * If repacking incrementally, then we could check the size of
+ * all packs to determine which should be preferred, but leave
+ * this for later.
+ */
+ return NULL;
+ }
+ if (geometry->split == geometry->pack_nr)
+ return NULL;
+ return geometry->pack[geometry->pack_nr - 1];
+}
+
static void clear_pack_geometry(struct pack_geometry *geometry)
{
if (!geometry)
@@ -433,17 +455,162 @@ static void clear_pack_geometry(struct pack_geometry *geometry)
geometry->split = 0;
}
+struct midx_snapshot_ref_data {
+ struct tempfile *f;
+ struct oidset seen;
+ int preferred;
+};
+
+static int midx_snapshot_ref_one(const char *refname,
+ const struct object_id *oid,
+ int flag, void *_data)
+{
+ struct midx_snapshot_ref_data *data = _data;
+ struct object_id peeled;
+
+ if (!peel_iterated_oid(oid, &peeled))
+ oid = &peeled;
+
+ if (oidset_insert(&data->seen, oid))
+ return 0; /* already seen */
+
+ if (oid_object_info(the_repository, oid, NULL) != OBJ_COMMIT)
+ return 0;
+
+ fprintf(data->f->fp, "%s%s\n", data->preferred ? "+" : "",
+ oid_to_hex(oid));
+
+ return 0;
+}
+
+static void midx_snapshot_refs(struct tempfile *f)
+{
+ struct midx_snapshot_ref_data data;
+ const struct string_list *preferred = bitmap_preferred_tips(the_repository);
+
+ data.f = f;
+ data.preferred = 0;
+ oidset_init(&data.seen, 0);
+
+ if (!fdopen_tempfile(f, "w"))
+ die(_("could not open tempfile %s for writing"),
+ get_tempfile_path(f));
+
+ if (preferred) {
+ struct string_list_item *item;
+
+ data.preferred = 1;
+ for_each_string_list_item(item, preferred)
+ for_each_ref_in(item->string, midx_snapshot_ref_one, &data);
+ data.preferred = 0;
+ }
+
+ for_each_ref(midx_snapshot_ref_one, &data);
+
+ if (close_tempfile_gently(f)) {
+ int save_errno = errno;
+ delete_tempfile(&f);
+ errno = save_errno;
+ die_errno(_("could not close refs snapshot tempfile"));
+ }
+
+ oidset_clear(&data.seen);
+}
+
+static void midx_included_packs(struct string_list *include,
+ struct string_list *existing_nonkept_packs,
+ struct string_list *existing_kept_packs,
+ struct string_list *names,
+ struct pack_geometry *geometry)
+{
+ struct string_list_item *item;
+
+ for_each_string_list_item(item, existing_kept_packs)
+ string_list_insert(include, xstrfmt("%s.idx", item->string));
+ for_each_string_list_item(item, names)
+ string_list_insert(include, xstrfmt("pack-%s.idx", item->string));
+ if (geometry) {
+ struct strbuf buf = STRBUF_INIT;
+ uint32_t i;
+ for (i = geometry->split; i < geometry->pack_nr; i++) {
+ struct packed_git *p = geometry->pack[i];
+
+ strbuf_addstr(&buf, pack_basename(p));
+ strbuf_strip_suffix(&buf, ".pack");
+ strbuf_addstr(&buf, ".idx");
+
+ string_list_insert(include, strbuf_detach(&buf, NULL));
+ }
+ } else {
+ for_each_string_list_item(item, existing_nonkept_packs) {
+ if (item->util)
+ continue;
+ string_list_insert(include, xstrfmt("%s.idx", item->string));
+ }
+ }
+}
+
+static int write_midx_included_packs(struct string_list *include,
+ struct pack_geometry *geometry,
+ const char *refs_snapshot,
+ int show_progress, int write_bitmaps)
+{
+ struct child_process cmd = CHILD_PROCESS_INIT;
+ struct string_list_item *item;
+ struct packed_git *largest = get_largest_active_pack(geometry);
+ FILE *in;
+ int ret;
+
+ if (!include->nr)
+ return 0;
+
+ cmd.in = -1;
+ cmd.git_cmd = 1;
+
+ strvec_push(&cmd.args, "multi-pack-index");
+ strvec_pushl(&cmd.args, "write", "--stdin-packs", NULL);
+
+ if (show_progress)
+ strvec_push(&cmd.args, "--progress");
+ else
+ strvec_push(&cmd.args, "--no-progress");
+
+ if (write_bitmaps)
+ strvec_push(&cmd.args, "--bitmap");
+
+ if (largest)
+ strvec_pushf(&cmd.args, "--preferred-pack=%s",
+ pack_basename(largest));
+
+ if (refs_snapshot)
+ strvec_pushf(&cmd.args, "--refs-snapshot=%s", refs_snapshot);
+
+ ret = start_command(&cmd);
+ if (ret)
+ return ret;
+
+ in = xfdopen(cmd.in, "w");
+ for_each_string_list_item(item, include)
+ fprintf(in, "%s\n", item->string);
+ fclose(in);
+
+ return finish_command(&cmd);
+}
+
int cmd_repack(int argc, const char **argv, const char *prefix)
{
struct child_process cmd = CHILD_PROCESS_INIT;
struct string_list_item *item;
struct string_list names = STRING_LIST_INIT_DUP;
struct string_list rollback = STRING_LIST_INIT_NODUP;
- struct string_list existing_packs = STRING_LIST_INIT_DUP;
+ struct string_list existing_nonkept_packs = STRING_LIST_INIT_DUP;
+ struct string_list existing_kept_packs = STRING_LIST_INIT_DUP;
struct pack_geometry *geometry = NULL;
struct strbuf line = STRBUF_INIT;
+ struct tempfile *refs_snapshot = NULL;
int i, ext, ret;
FILE *out;
+ int show_progress = isatty(2);
/* variables to be filled by option parsing */
int pack_everything = 0;
@@ -454,6 +621,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
int no_update_server_info = 0;
struct pack_objects_args po_args = {NULL};
int geometric_factor = 0;
+ int write_midx = 0;
struct option builtin_repack_options[] = {
OPT_BIT('a', NULL, &pack_everything,
@@ -496,6 +664,8 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
N_("do not repack this pack")),
OPT_INTEGER('g', "geometric", &geometric_factor,
N_("find a geometric progression with factor <N>")),
+ OPT_BOOL('m', "write-midx", &write_midx,
+ N_("write a multi-pack index of the resulting packs")),
OPT_END()
};
@@ -512,16 +682,32 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
die(_("--keep-unreachable and -A are incompatible"));
if (write_bitmaps < 0) {
- if (!(pack_everything & ALL_INTO_ONE) ||
- !is_bare_repository())
+ if (!write_midx &&
+ (!(pack_everything & ALL_INTO_ONE) || !is_bare_repository()))
write_bitmaps = 0;
+ } else if (write_bitmaps &&
+ git_env_bool(GIT_TEST_MULTI_PACK_INDEX, 0) &&
+ git_env_bool(GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP, 0)) {
+ write_bitmaps = 0;
}
if (pack_kept_objects < 0)
pack_kept_objects = write_bitmaps > 0;
- if (write_bitmaps && !(pack_everything & ALL_INTO_ONE))
+ if (write_bitmaps && !(pack_everything & ALL_INTO_ONE) && !write_midx)
die(_(incremental_bitmap_conflict_error));
+ if (write_midx && write_bitmaps) {
+ struct strbuf path = STRBUF_INIT;
+
+ strbuf_addf(&path, "%s/%s_XXXXXX", get_object_directory(),
+ "bitmap-ref-tips");
+
+ refs_snapshot = xmks_tempfile(path.buf);
+ midx_snapshot_refs(refs_snapshot);
+
+ strbuf_release(&path);
+ }
+
if (geometric_factor) {
if (pack_everything)
die(_("--geometric is incompatible with -A, -a"));
@@ -561,19 +747,22 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
}
if (has_promisor_remote())
strvec_push(&cmd.args, "--exclude-promisor-objects");
- if (write_bitmaps > 0)
- strvec_push(&cmd.args, "--write-bitmap-index");
- else if (write_bitmaps < 0)
- strvec_push(&cmd.args, "--write-bitmap-index-quiet");
+ if (!write_midx) {
+ if (write_bitmaps > 0)
+ strvec_push(&cmd.args, "--write-bitmap-index");
+ else if (write_bitmaps < 0)
+ strvec_push(&cmd.args, "--write-bitmap-index-quiet");
+ }
if (use_delta_islands)
strvec_push(&cmd.args, "--delta-islands");
- if (pack_everything & ALL_INTO_ONE) {
- get_non_kept_pack_filenames(&existing_packs, &keep_pack_list);
+ collect_pack_filenames(&existing_nonkept_packs, &existing_kept_packs,
+ &keep_pack_list);
+ if (pack_everything & ALL_INTO_ONE) {
repack_promisor_objects(&po_args, &names);
- if (existing_packs.nr && delete_redundant) {
+ if (existing_nonkept_packs.nr && delete_redundant) {
for_each_string_list_item(item, &names) {
strvec_pushf(&cmd.args, "--keep-pack=%s-%s.pack",
packtmp_name, item->string);
@@ -582,15 +771,12 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
strvec_pushf(&cmd.args,
"--unpack-unreachable=%s",
unpack_unreachable);
- strvec_push(&cmd.env_array, "GIT_REF_PARANOIA=1");
} else if (pack_everything & LOOSEN_UNREACHABLE) {
strvec_push(&cmd.args,
"--unpack-unreachable");
} else if (keep_unreachable) {
strvec_push(&cmd.args, "--keep-unreachable");
strvec_push(&cmd.args, "--pack-loose-unreachable");
- } else {
- strvec_push(&cmd.env_array, "GIT_REF_PARANOIA=1");
}
}
} else if (geometry) {
@@ -676,20 +862,48 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
}
/* End of pack replacement. */
- reprepare_packed_git(the_repository);
-
- if (delete_redundant) {
+ if (delete_redundant && pack_everything & ALL_INTO_ONE) {
const int hexsz = the_hash_algo->hexsz;
- int opts = 0;
string_list_sort(&names);
- for_each_string_list_item(item, &existing_packs) {
+ for_each_string_list_item(item, &existing_nonkept_packs) {
char *sha1;
size_t len = strlen(item->string);
if (len < hexsz)
continue;
sha1 = item->string + len - hexsz;
- if (!string_list_has_string(&names, sha1))
- remove_redundant_pack(packdir, item->string);
+ /*
+ * Mark this pack for deletion, which ensures that this
+ * pack won't be included in a MIDX (if `--write-midx`
+ * was given) and that we will actually delete this pack
+ * (if `-d` was given).
+ */
+ item->util = (void*)(intptr_t)!string_list_has_string(&names, sha1);
+ }
+ }
+
+ if (write_midx) {
+ struct string_list include = STRING_LIST_INIT_NODUP;
+ midx_included_packs(&include, &existing_nonkept_packs,
+ &existing_kept_packs, &names, geometry);
+
+ ret = write_midx_included_packs(&include, geometry,
+ refs_snapshot ? get_tempfile_path(refs_snapshot) : NULL,
+ show_progress, write_bitmaps > 0);
+
+ string_list_clear(&include, 0);
+
+ if (ret)
+ return ret;
+ }
+
+ reprepare_packed_git(the_repository);
+
+ if (delete_redundant) {
+ int opts = 0;
+ for_each_string_list_item(item, &existing_nonkept_packs) {
+ if (!item->util)
+ continue;
+ remove_redundant_pack(packdir, item->string);
}
if (geometry) {
@@ -710,7 +924,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
}
strbuf_release(&buf);
}
- if (!po_args.quiet && isatty(2))
+ if (!po_args.quiet && show_progress)
opts |= PRUNE_PACKED_VERBOSE;
prune_packed_objects(opts);
@@ -725,12 +939,17 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
update_server_info(0);
remove_temporary_files();
- if (git_env_bool(GIT_TEST_MULTI_PACK_INDEX, 0))
- write_midx_file(get_object_directory(), NULL, 0);
+ if (git_env_bool(GIT_TEST_MULTI_PACK_INDEX, 0)) {
+ unsigned flags = 0;
+ if (git_env_bool(GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP, 0))
+ flags |= MIDX_WRITE_BITMAP | MIDX_WRITE_REV_INDEX;
+ write_midx_file(get_object_directory(), NULL, NULL, flags);
+ }
string_list_clear(&names, 0);
string_list_clear(&rollback, 0);
- string_list_clear(&existing_packs, 0);
+ string_list_clear(&existing_nonkept_packs, 0);
+ string_list_clear(&existing_kept_packs, 0);
clear_pack_geometry(geometry);
strbuf_release(&line);
diff --git a/builtin/replace.c b/builtin/replace.c
index cd48765..946938d 100644
--- a/builtin/replace.c
+++ b/builtin/replace.c
@@ -507,7 +507,7 @@ static int convert_graft_file(int force)
if (!fp)
return -1;
- advice_graft_file_deprecated = 0;
+ no_graft_file_deprecated_advice = 1;
while (strbuf_getline(&buf, fp) != EOF) {
if (*buf.buf == '#')
continue;
diff --git a/builtin/reset.c b/builtin/reset.c
index 43e855c..7393595 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -67,12 +67,18 @@ static int reset_index(const char *ref, const struct object_id *oid, int reset_t
case KEEP:
case MERGE:
opts.update = 1;
+ opts.preserve_ignored = 0; /* FIXME: !overwrite_ignore */
break;
case HARD:
opts.update = 1;
- /* fallthrough */
+ opts.reset = UNPACK_RESET_OVERWRITE_UNTRACKED;
+ break;
+ case MIXED:
+ opts.reset = UNPACK_RESET_PROTECT_UNTRACKED;
+ /* but opts.update=0, so working tree not updated */
+ break;
default:
- opts.reset = 1;
+ BUG("invalid reset_type passed to reset_index");
}
read_cache_unmerged();
@@ -412,7 +418,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
refresh_index(&the_index, flags, NULL, NULL,
_("Unstaged changes after reset:"));
t_delta_in_ms = (getnanotime() - t_begin) / 1000000;
- if (advice_reset_quiet_warning && t_delta_in_ms > REFRESH_INDEX_DELAY_WARNING_IN_MS) {
+ if (advice_enabled(ADVICE_RESET_QUIET_WARNING) && t_delta_in_ms > REFRESH_INDEX_DELAY_WARNING_IN_MS) {
printf(_("\nIt took %.2f seconds to enumerate unstaged changes after reset. You can\n"
"use '--quiet' to avoid this. Set the config setting reset.quiet to true\n"
"to make this the default.\n"), t_delta_in_ms / 1000.0);
diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c
index 22c4e1a..8480a59 100644
--- a/builtin/rev-parse.c
+++ b/builtin/rev-parse.c
@@ -863,8 +863,8 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
continue;
}
if (!strcmp(arg, "--bisect")) {
- for_each_fullref_in("refs/bisect/bad", show_reference, NULL, 0);
- for_each_fullref_in("refs/bisect/good", anti_reference, NULL, 0);
+ for_each_fullref_in("refs/bisect/bad", show_reference, NULL);
+ for_each_fullref_in("refs/bisect/good", anti_reference, NULL);
continue;
}
if (opt_with_value(arg, "--branches", &arg)) {
diff --git a/builtin/revert.c b/builtin/revert.c
index 237f2f1..51776ab 100644
--- a/builtin/revert.c
+++ b/builtin/revert.c
@@ -136,6 +136,9 @@ static int run_sequencer(int argc, const char **argv, struct replay_opts *opts)
PARSE_OPT_KEEP_ARGV0 |
PARSE_OPT_KEEP_UNKNOWN);
+ prepare_repo_settings(the_repository);
+ the_repository->settings.command_requires_full_index = 0;
+
/* implies allow_empty */
if (opts->keep_redundant_commits)
opts->allow_empty = 1;
@@ -191,7 +194,8 @@ static int run_sequencer(int argc, const char **argv, struct replay_opts *opts)
struct setup_revision_opt s_r_opt;
opts->revs = xmalloc(sizeof(*opts->revs));
repo_init_revisions(the_repository, opts->revs, NULL);
- opts->revs->no_walk = REVISION_WALK_NO_WALK_UNSORTED;
+ opts->revs->no_walk = 1;
+ opts->revs->unsorted_input = 1;
if (argc < 2)
usage_with_options(usage_str, options);
if (!strcmp(argv[1], "-"))
diff --git a/builtin/rm.c b/builtin/rm.c
index 8a24c71..3d0967c 100644
--- a/builtin/rm.c
+++ b/builtin/rm.c
@@ -55,7 +55,7 @@ static void print_error_files(struct string_list *files_list,
strbuf_addf(&err_msg,
"\n %s",
files_list->items[i].string);
- if (advice_rm_hints)
+ if (advice_enabled(ADVICE_RM_HINTS))
strbuf_addstr(&err_msg, hints_msg);
*errs = error("%s", err_msg.buf);
strbuf_release(&err_msg);
@@ -237,6 +237,7 @@ static int check_local_mod(struct object_id *head, int index_only)
static int show_only = 0, force = 0, index_only = 0, recursive = 0, quiet = 0;
static int ignore_unmatch = 0, pathspec_file_nul;
+static int include_sparse;
static char *pathspec_from_file;
static struct option builtin_rm_options[] = {
@@ -247,6 +248,7 @@ static struct option builtin_rm_options[] = {
OPT_BOOL('r', NULL, &recursive, N_("allow recursive removal")),
OPT_BOOL( 0 , "ignore-unmatch", &ignore_unmatch,
N_("exit with a zero status even if nothing matched")),
+ OPT_BOOL(0, "sparse", &include_sparse, N_("allow updating entries outside of the sparse-checkout cone")),
OPT_PATHSPEC_FROM_FILE(&pathspec_from_file),
OPT_PATHSPEC_FILE_NUL(&pathspec_file_nul),
OPT_END(),
@@ -298,7 +300,10 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
ensure_full_index(&the_index);
for (i = 0; i < active_nr; i++) {
const struct cache_entry *ce = active_cache[i];
- if (ce_skip_worktree(ce))
+
+ if (!include_sparse &&
+ (ce_skip_worktree(ce) ||
+ !path_in_sparse_checkout(ce->name, &the_index)))
continue;
if (!ce_path_match(&the_index, ce, &pathspec, seen))
continue;
@@ -322,7 +327,8 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
seen_any = 1;
else if (ignore_unmatch)
continue;
- else if (matches_skip_worktree(&pathspec, i, &skip_worktree_seen))
+ else if (!include_sparse &&
+ matches_skip_worktree(&pathspec, i, &skip_worktree_seen))
string_list_append(&only_match_skip_worktree, original);
else
die(_("pathspec '%s' did not match any files"), original);
diff --git a/builtin/send-pack.c b/builtin/send-pack.c
index 729dea1..69c432e 100644
--- a/builtin/send-pack.c
+++ b/builtin/send-pack.c
@@ -17,10 +17,10 @@
#include "protocol.h"
static const char * const send_pack_usage[] = {
- N_("git send-pack [--all | --mirror] [--dry-run] [--force] "
- "[--receive-pack=<git-receive-pack>] [--verbose] [--thin] [--atomic] "
- "[<host>:]<directory> [<ref>...]\n"
- " --all and explicit <ref> specification are mutually exclusive."),
+ N_("git send-pack [--mirror] [--dry-run] [--force]\n"
+ " [--receive-pack=<git-receive-pack>]\n"
+ " [--verbose] [--thin] [--atomic]\n"
+ " [<host>:]<directory> (--all | <ref>...)"),
NULL,
};
@@ -87,6 +87,10 @@ static void print_helper_status(struct ref *ref)
break;
case REF_STATUS_EXPECTING_REPORT:
+ res = "error";
+ msg = "expecting report";
+ break;
+
default:
continue;
}
diff --git a/builtin/shortlog.c b/builtin/shortlog.c
index 3e7ab1c..e7f7af5 100644
--- a/builtin/shortlog.c
+++ b/builtin/shortlog.c
@@ -374,6 +374,9 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)
for (;;) {
switch (parse_options_step(&ctx, options, shortlog_usage)) {
+ case PARSE_OPT_NON_OPTION:
+ case PARSE_OPT_UNKNOWN:
+ break;
case PARSE_OPT_HELP:
case PARSE_OPT_ERROR:
exit(129);
diff --git a/builtin/show-branch.c b/builtin/show-branch.c
index bea4bbf..0824492 100644
--- a/builtin/show-branch.c
+++ b/builtin/show-branch.c
@@ -11,9 +11,9 @@
static const char* show_branch_usage[] = {
N_("git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
- " [--current] [--color[=<when>] | --no-color] [--sparse]\n"
- " [--more=<n> | --list | --independent | --merge-base]\n"
- " [--no-name | --sha1-name] [--topics] [(<rev> | <glob>)...]"),
+ " [--current] [--color[=<when>] | --no-color] [--sparse]\n"
+ " [--more=<n> | --list | --independent | --merge-base]\n"
+ " [--no-name | --sha1-name] [--topics] [(<rev> | <glob>)...]"),
N_("git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"),
NULL
};
diff --git a/builtin/sparse-checkout.c b/builtin/sparse-checkout.c
index 8ba9f13..d0f5c47 100644
--- a/builtin/sparse-checkout.c
+++ b/builtin/sparse-checkout.c
@@ -100,6 +100,98 @@ static int sparse_checkout_list(int argc, const char **argv)
return 0;
}
+static void clean_tracked_sparse_directories(struct repository *r)
+{
+ int i, was_full = 0;
+ struct strbuf path = STRBUF_INIT;
+ size_t pathlen;
+ struct string_list_item *item;
+ struct string_list sparse_dirs = STRING_LIST_INIT_DUP;
+
+ /*
+ * If we are not using cone mode patterns, then we cannot
+ * delete directories outside of the sparse cone.
+ */
+ if (!r || !r->index || !r->worktree)
+ return;
+ if (init_sparse_checkout_patterns(r->index) ||
+ !r->index->sparse_checkout_patterns->use_cone_patterns)
+ return;
+
+ /*
+ * Use the sparse index as a data structure to assist finding
+ * directories that are safe to delete. This conversion to a
+ * sparse index will not delete directories that contain
+ * conflicted entries or submodules.
+ */
+ if (!r->index->sparse_index) {
+ /*
+ * If something, such as a merge conflict or other concern,
+ * prevents us from converting to a sparse index, then do
+ * not try deleting files.
+ */
+ if (convert_to_sparse(r->index, SPARSE_INDEX_MEMORY_ONLY))
+ return;
+ was_full = 1;
+ }
+
+ strbuf_addstr(&path, r->worktree);
+ strbuf_complete(&path, '/');
+ pathlen = path.len;
+
+ /*
+ * Collect directories that have gone out of scope but also
+ * exist on disk, so there is some work to be done. We need to
+ * store the entries in a list before exploring, since that might
+ * expand the sparse-index again.
+ */
+ for (i = 0; i < r->index->cache_nr; i++) {
+ struct cache_entry *ce = r->index->cache[i];
+
+ if (S_ISSPARSEDIR(ce->ce_mode) &&
+ repo_file_exists(r, ce->name))
+ string_list_append(&sparse_dirs, ce->name);
+ }
+
+ for_each_string_list_item(item, &sparse_dirs) {
+ struct dir_struct dir = DIR_INIT;
+ struct pathspec p = { 0 };
+ struct strvec s = STRVEC_INIT;
+
+ strbuf_setlen(&path, pathlen);
+ strbuf_addstr(&path, item->string);
+
+ dir.flags |= DIR_SHOW_IGNORED_TOO;
+
+ setup_standard_excludes(&dir);
+ strvec_push(&s, path.buf);
+
+ parse_pathspec(&p, PATHSPEC_GLOB, 0, NULL, s.v);
+ fill_directory(&dir, r->index, &p);
+
+ if (dir.nr) {
+ warning(_("directory '%s' contains untracked files,"
+ " but is not in the sparse-checkout cone"),
+ item->string);
+ } else if (remove_dir_recursively(&path, 0)) {
+ /*
+ * Removal is "best effort". If something blocks
+ * the deletion, then continue with a warning.
+ */
+ warning(_("failed to remove directory '%s'"),
+ item->string);
+ }
+
+ dir_clear(&dir);
+ }
+
+ string_list_clear(&sparse_dirs, 0);
+ strbuf_release(&path);
+
+ if (was_full)
+ ensure_full_index(r->index);
+}
+
static int update_working_directory(struct pattern_list *pl)
{
enum update_sparsity_result result;
@@ -141,6 +233,8 @@ static int update_working_directory(struct pattern_list *pl)
else
rollback_lock_file(&lock_file);
+ clean_tracked_sparse_directories(r);
+
r->index->sparse_checkout_patterns = NULL;
return result;
}
diff --git a/builtin/stash.c b/builtin/stash.c
index 5512f49..a0ccc86 100644
--- a/builtin/stash.c
+++ b/builtin/stash.c
@@ -85,7 +85,7 @@ static const char * const git_stash_push_usage[] = {
static const char * const git_stash_save_usage[] = {
N_("git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
- " [-u|--include-untracked] [-a|--all] [<message>]"),
+ " [-u|--include-untracked] [-a|--all] [<message>]"),
NULL
};
@@ -256,8 +256,10 @@ static int reset_tree(struct object_id *i_tree, int update, int reset)
opts.src_index = &the_index;
opts.dst_index = &the_index;
opts.merge = 1;
- opts.reset = reset;
+ opts.reset = reset ? UNPACK_RESET_PROTECT_UNTRACKED : 0;
opts.update = update;
+ if (update)
+ opts.preserve_ignored = 0; /* FIXME: !overwrite_ignore */
opts.fn = oneway_merge;
if (unpack_trees(nr_trees, t, &opts))
@@ -1533,6 +1535,7 @@ static int do_push_stash(const struct pathspec *ps, const char *stash_msg, int q
} else {
struct child_process cp = CHILD_PROCESS_INIT;
cp.git_cmd = 1;
+ /* BUG: this nukes untracked files in the way */
strvec_pushl(&cp.args, "reset", "--hard", "-q",
"--no-recurse-submodules", NULL);
if (run_command(&cp)) {
diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
index ef2776a..e630f0c 100644
--- a/builtin/submodule--helper.c
+++ b/builtin/submodule--helper.c
@@ -199,34 +199,28 @@ static char *relative_url(const char *remote_url,
return strbuf_detach(&sb, NULL);
}
-static int resolve_relative_url(int argc, const char **argv, const char *prefix)
+static char *resolve_relative_url(const char *rel_url, const char *up_path, int quiet)
{
- char *remoteurl = NULL;
+ char *remoteurl, *resolved_url;
char *remote = get_default_remote();
- const char *up_path = NULL;
- char *res;
- const char *url;
- struct strbuf sb = STRBUF_INIT;
+ struct strbuf remotesb = STRBUF_INIT;
- if (argc != 2 && argc != 3)
- die("resolve-relative-url only accepts one or two arguments");
-
- url = argv[1];
- strbuf_addf(&sb, "remote.%s.url", remote);
- free(remote);
-
- if (git_config_get_string(sb.buf, &remoteurl))
- /* the repository is its own authoritative upstream */
+ strbuf_addf(&remotesb, "remote.%s.url", remote);
+ if (git_config_get_string(remotesb.buf, &remoteurl)) {
+ if (!quiet)
+ warning(_("could not look up configuration '%s'. "
+ "Assuming this repository is its own "
+ "authoritative upstream."),
+ remotesb.buf);
remoteurl = xgetcwd();
+ }
+ resolved_url = relative_url(remoteurl, rel_url, up_path);
- if (argc == 3)
- up_path = argv[2];
-
- res = relative_url(remoteurl, url, up_path);
- puts(res);
- free(res);
+ free(remote);
free(remoteurl);
- return 0;
+ strbuf_release(&remotesb);
+
+ return resolved_url;
}
static int resolve_relative_url_test(int argc, const char **argv, const char *prefix)
@@ -313,7 +307,7 @@ struct module_list {
const struct cache_entry **entries;
int alloc, nr;
};
-#define MODULE_LIST_INIT { NULL, 0, 0 }
+#define MODULE_LIST_INIT { 0 }
static int module_list_compute(int argc, const char **argv,
const char *prefix,
@@ -590,31 +584,11 @@ static int module_foreach(int argc, const char **argv, const char *prefix)
return 0;
}
-static char *compute_submodule_clone_url(const char *rel_url)
-{
- char *remoteurl, *relurl;
- char *remote = get_default_remote();
- struct strbuf remotesb = STRBUF_INIT;
-
- strbuf_addf(&remotesb, "remote.%s.url", remote);
- if (git_config_get_string(remotesb.buf, &remoteurl)) {
- warning(_("could not look up configuration '%s'. Assuming this repository is its own authoritative upstream."), remotesb.buf);
- remoteurl = xgetcwd();
- }
- relurl = relative_url(remoteurl, rel_url, NULL);
-
- free(remote);
- free(remoteurl);
- strbuf_release(&remotesb);
-
- return relurl;
-}
-
struct init_cb {
const char *prefix;
unsigned int flags;
};
-#define INIT_CB_INIT { NULL, 0 }
+#define INIT_CB_INIT { 0 }
static void init_submodule(const char *path, const char *prefix,
unsigned int flags)
@@ -660,7 +634,7 @@ static void init_submodule(const char *path, const char *prefix,
if (starts_with_dot_dot_slash(url) ||
starts_with_dot_slash(url)) {
char *oldurl = url;
- url = compute_submodule_clone_url(oldurl);
+ url = resolve_relative_url(oldurl, NULL, 0);
free(oldurl);
}
@@ -743,7 +717,7 @@ struct status_cb {
const char *prefix;
unsigned int flags;
};
-#define STATUS_CB_INIT { NULL, 0 }
+#define STATUS_CB_INIT { 0 }
static void print_status(unsigned int flags, char state, const char *path,
const struct object_id *oid, const char *displaypath)
@@ -937,13 +911,13 @@ struct module_cb {
char status;
const char *sm_path;
};
-#define MODULE_CB_INIT { 0, 0, NULL, NULL, '\0', NULL }
+#define MODULE_CB_INIT { 0 }
struct module_cb_list {
struct module_cb **entries;
int alloc, nr;
};
-#define MODULE_CB_LIST_INIT { NULL, 0, 0 }
+#define MODULE_CB_LIST_INIT { 0 }
struct summary_cb {
int argc;
@@ -954,7 +928,7 @@ struct summary_cb {
unsigned int files: 1;
int summary_limit;
};
-#define SUMMARY_CB_INIT { 0, NULL, NULL, 0, 0, 0, 0 }
+#define SUMMARY_CB_INIT { 0 }
enum diff_cmd {
DIFF_INDEX,
@@ -1360,7 +1334,7 @@ struct sync_cb {
const char *prefix;
unsigned int flags;
};
-#define SYNC_CB_INIT { NULL, 0 }
+#define SYNC_CB_INIT { 0 }
static void sync_submodule(const char *path, const char *prefix,
unsigned int flags)
@@ -1380,20 +1354,10 @@ static void sync_submodule(const char *path, const char *prefix,
if (sub && sub->url) {
if (starts_with_dot_dot_slash(sub->url) ||
starts_with_dot_slash(sub->url)) {
- char *remote_url, *up_path;
- char *remote = get_default_remote();
- strbuf_addf(&sb, "remote.%s.url", remote);
-
- if (git_config_get_string(sb.buf, &remote_url))
- remote_url = xgetcwd();
-
- up_path = get_up_path(path);
- sub_origin_url = relative_url(remote_url, sub->url, up_path);
- super_config_url = relative_url(remote_url, sub->url, NULL);
-
- free(remote);
+ char *up_path = get_up_path(path);
+ sub_origin_url = resolve_relative_url(sub->url, up_path, 1);
+ super_config_url = resolve_relative_url(sub->url, NULL, 1);
free(up_path);
- free(remote_url);
} else {
sub_origin_url = xstrdup(sub->url);
super_config_url = xstrdup(sub->url);
@@ -1516,7 +1480,7 @@ struct deinit_cb {
const char *prefix;
unsigned int flags;
};
-#define DEINIT_CB_INIT { NULL, 0 }
+#define DEINIT_CB_INIT { 0 }
static void deinit_submodule(const char *path, const char *prefix,
unsigned int flags)
@@ -1683,8 +1647,9 @@ struct submodule_alternate_setup {
} error_mode;
struct string_list *reference;
};
-#define SUBMODULE_ALTERNATE_SETUP_INIT { NULL, \
- SUBMODULE_ALTERNATE_ERROR_IGNORE, NULL }
+#define SUBMODULE_ALTERNATE_SETUP_INIT { \
+ .error_mode = SUBMODULE_ALTERNATE_ERROR_IGNORE, \
+}
static const char alternate_error_advice[] = N_(
"An alternate computed from a superproject's alternate is invalid.\n"
@@ -1704,18 +1669,24 @@ static int add_possible_reference_from_superproject(
* standard layout with .git/(modules/<name>)+/objects
*/
if (strip_suffix(odb->path, "/objects", &len)) {
+ struct repository alternate;
char *sm_alternate;
struct strbuf sb = STRBUF_INIT;
struct strbuf err = STRBUF_INIT;
strbuf_add(&sb, odb->path, len);
+ repo_init(&alternate, sb.buf, NULL);
+
/*
* We need to end the new path with '/' to mark it as a dir,
* otherwise a submodule name containing '/' will be broken
* as the last part of a missing submodule reference would
* be taken as a file name.
*/
- strbuf_addf(&sb, "/modules/%s/", sas->submodule_name);
+ strbuf_reset(&sb);
+ submodule_name_to_gitdir(&sb, &alternate, sas->submodule_name);
+ strbuf_addch(&sb, '/');
+ repo_clear(&alternate);
sm_alternate = compute_alternate_path(sb.buf, &err);
if (sm_alternate) {
@@ -1724,7 +1695,7 @@ static int add_possible_reference_from_superproject(
} else {
switch (sas->error_mode) {
case SUBMODULE_ALTERNATE_ERROR_DIE:
- if (advice_submodule_alternate_error_strategy_die)
+ if (advice_enabled(ADVICE_SUBMODULE_ALTERNATE_ERROR_STRATEGY_DIE))
advise(_(alternate_error_advice));
die(_("submodule '%s' cannot add alternate: %s"),
sas->submodule_name, err.buf);
@@ -1785,7 +1756,7 @@ static int clone_submodule(struct module_clone_data *clone_data)
struct strbuf sb = STRBUF_INIT;
struct child_process cp = CHILD_PROCESS_INIT;
- strbuf_addf(&sb, "%s/modules/%s", get_git_dir(), clone_data->name);
+ submodule_name_to_gitdir(&sb, the_repository, clone_data->name);
sm_gitdir = absolute_pathdup(sb.buf);
strbuf_reset(&sb);
@@ -2045,6 +2016,20 @@ struct submodule_update_clone {
.max_jobs = 1, \
}
+struct update_data {
+ const char *recursive_prefix;
+ const char *sm_path;
+ const char *displaypath;
+ struct object_id oid;
+ struct object_id suboid;
+ struct submodule_update_strategy update_strategy;
+ int depth;
+ unsigned int force: 1;
+ unsigned int quiet: 1;
+ unsigned int nofetch: 1;
+ unsigned int just_cloned: 1;
+};
+#define UPDATE_DATA_INIT { .update_strategy = SUBMODULE_UPDATE_STRATEGY_INIT }
static void next_submodule_warn_missing(struct submodule_update_clone *suc,
struct strbuf *out, const char *displaypath)
@@ -2134,7 +2119,7 @@ static int prepare_to_clone_next_submodule(const struct cache_entry *ce,
if (repo_config_get_string_tmp(the_repository, sb.buf, &url)) {
if (starts_with_dot_slash(sub->url) ||
starts_with_dot_dot_slash(sub->url)) {
- url = compute_submodule_clone_url(sub->url);
+ url = resolve_relative_url(sub->url, NULL, 0);
need_free_url = 1;
} else
url = sub->url;
@@ -2298,6 +2283,181 @@ static int git_update_clone_config(const char *var, const char *value,
return 0;
}
+static int is_tip_reachable(const char *path, struct object_id *oid)
+{
+ struct child_process cp = CHILD_PROCESS_INIT;
+ struct strbuf rev = STRBUF_INIT;
+ char *hex = oid_to_hex(oid);
+
+ cp.git_cmd = 1;
+ cp.dir = xstrdup(path);
+ cp.no_stderr = 1;
+ strvec_pushl(&cp.args, "rev-list", "-n", "1", hex, "--not", "--all", NULL);
+
+ prepare_submodule_repo_env(&cp.env_array);
+
+ if (capture_command(&cp, &rev, GIT_MAX_HEXSZ + 1) || rev.len)
+ return 0;
+
+ return 1;
+}
+
+static int fetch_in_submodule(const char *module_path, int depth, int quiet, struct object_id *oid)
+{
+ struct child_process cp = CHILD_PROCESS_INIT;
+
+ prepare_submodule_repo_env(&cp.env_array);
+ cp.git_cmd = 1;
+ cp.dir = xstrdup(module_path);
+
+ strvec_push(&cp.args, "fetch");
+ if (quiet)
+ strvec_push(&cp.args, "--quiet");
+ if (depth)
+ strvec_pushf(&cp.args, "--depth=%d", depth);
+ if (oid) {
+ char *hex = oid_to_hex(oid);
+ char *remote = get_default_remote();
+ strvec_pushl(&cp.args, remote, hex, NULL);
+ }
+
+ return run_command(&cp);
+}
+
+static int run_update_command(struct update_data *ud, int subforce)
+{
+ struct strvec args = STRVEC_INIT;
+ struct strvec child_env = STRVEC_INIT;
+ char *oid = oid_to_hex(&ud->oid);
+ int must_die_on_failure = 0;
+ int git_cmd;
+
+ switch (ud->update_strategy.type) {
+ case SM_UPDATE_CHECKOUT:
+ git_cmd = 1;
+ strvec_pushl(&args, "checkout", "-q", NULL);
+ if (subforce)
+ strvec_push(&args, "-f");
+ break;
+ case SM_UPDATE_REBASE:
+ git_cmd = 1;
+ strvec_push(&args, "rebase");
+ if (ud->quiet)
+ strvec_push(&args, "--quiet");
+ must_die_on_failure = 1;
+ break;
+ case SM_UPDATE_MERGE:
+ git_cmd = 1;
+ strvec_push(&args, "merge");
+ if (ud->quiet)
+ strvec_push(&args, "--quiet");
+ must_die_on_failure = 1;
+ break;
+ case SM_UPDATE_COMMAND:
+ git_cmd = 0;
+ strvec_push(&args, ud->update_strategy.command);
+ must_die_on_failure = 1;
+ break;
+ default:
+ BUG("unexpected update strategy type: %s",
+ submodule_strategy_to_string(&ud->update_strategy));
+ }
+ strvec_push(&args, oid);
+
+ prepare_submodule_repo_env(&child_env);
+ if (run_command_v_opt_cd_env(args.v, git_cmd ? RUN_GIT_CMD : RUN_USING_SHELL,
+ ud->sm_path, child_env.v)) {
+ switch (ud->update_strategy.type) {
+ case SM_UPDATE_CHECKOUT:
+ printf(_("Unable to checkout '%s' in submodule path '%s'"),
+ oid, ud->displaypath);
+ break;
+ case SM_UPDATE_REBASE:
+ printf(_("Unable to rebase '%s' in submodule path '%s'"),
+ oid, ud->displaypath);
+ break;
+ case SM_UPDATE_MERGE:
+ printf(_("Unable to merge '%s' in submodule path '%s'"),
+ oid, ud->displaypath);
+ break;
+ case SM_UPDATE_COMMAND:
+ printf(_("Execution of '%s %s' failed in submodule path '%s'"),
+ ud->update_strategy.command, oid, ud->displaypath);
+ break;
+ default:
+ BUG("unexpected update strategy type: %s",
+ submodule_strategy_to_string(&ud->update_strategy));
+ }
+ /*
+ * NEEDSWORK: We are currently printing to stdout with error
+ * return so that the shell caller handles the error output
+ * properly. Once we start handling the error messages within
+ * C, we should use die() instead.
+ */
+ if (must_die_on_failure)
+ return 2;
+ /*
+ * This signifies to the caller in shell that the command
+ * failed without dying
+ */
+ return 1;
+ }
+
+ switch (ud->update_strategy.type) {
+ case SM_UPDATE_CHECKOUT:
+ printf(_("Submodule path '%s': checked out '%s'\n"),
+ ud->displaypath, oid);
+ break;
+ case SM_UPDATE_REBASE:
+ printf(_("Submodule path '%s': rebased into '%s'\n"),
+ ud->displaypath, oid);
+ break;
+ case SM_UPDATE_MERGE:
+ printf(_("Submodule path '%s': merged in '%s'\n"),
+ ud->displaypath, oid);
+ break;
+ case SM_UPDATE_COMMAND:
+ printf(_("Submodule path '%s': '%s %s'\n"),
+ ud->displaypath, ud->update_strategy.command, oid);
+ break;
+ default:
+ BUG("unexpected update strategy type: %s",
+ submodule_strategy_to_string(&ud->update_strategy));
+ }
+
+ return 0;
+}
+
+static int do_run_update_procedure(struct update_data *ud)
+{
+ int subforce = is_null_oid(&ud->suboid) || ud->force;
+
+ if (!ud->nofetch) {
+ /*
+ * Run fetch only if `oid` isn't present or it
+ * is not reachable from a ref.
+ */
+ if (!is_tip_reachable(ud->sm_path, &ud->oid) &&
+ fetch_in_submodule(ud->sm_path, ud->depth, ud->quiet, NULL) &&
+ !ud->quiet)
+ fprintf_ln(stderr,
+ _("Unable to fetch in submodule path '%s'; "
+ "trying to directly fetch %s:"),
+ ud->displaypath, oid_to_hex(&ud->oid));
+ /*
+ * Now we tried the usual fetch, but `oid` may
+ * not be reachable from any of the refs.
+ */
+ if (!is_tip_reachable(ud->sm_path, &ud->oid) &&
+ fetch_in_submodule(ud->sm_path, ud->depth, ud->quiet, &ud->oid))
+ die(_("Fetched in submodule path '%s', but it did not "
+ "contain %s. Direct fetching of that commit failed."),
+ ud->displaypath, oid_to_hex(&ud->oid));
+ }
+
+ return run_update_command(ud, subforce);
+}
+
static void update_submodule(struct update_clone_data *ucd)
{
fprintf(stdout, "dummy %s %d\t%s\n",
@@ -2395,6 +2555,73 @@ static int update_clone(int argc, const char **argv, const char *prefix)
return update_submodules(&suc);
}
+static int run_update_procedure(int argc, const char **argv, const char *prefix)
+{
+ int force = 0, quiet = 0, nofetch = 0, just_cloned = 0;
+ char *prefixed_path, *update = NULL;
+ struct update_data update_data = UPDATE_DATA_INIT;
+
+ struct option options[] = {
+ OPT__QUIET(&quiet, N_("suppress output for update by rebase or merge")),
+ OPT__FORCE(&force, N_("force checkout updates"), 0),
+ OPT_BOOL('N', "no-fetch", &nofetch,
+ N_("don't fetch new objects from the remote site")),
+ OPT_BOOL(0, "just-cloned", &just_cloned,
+ N_("overrides update mode in case the repository is a fresh clone")),
+ OPT_INTEGER(0, "depth", &update_data.depth, N_("depth for shallow fetch")),
+ OPT_STRING(0, "prefix", &prefix,
+ N_("path"),
+ N_("path into the working tree")),
+ OPT_STRING(0, "update", &update,
+ N_("string"),
+ N_("rebase, merge, checkout or none")),
+ OPT_STRING(0, "recursive-prefix", &update_data.recursive_prefix, N_("path"),
+ N_("path into the working tree, across nested "
+ "submodule boundaries")),
+ OPT_CALLBACK_F(0, "oid", &update_data.oid, N_("sha1"),
+ N_("SHA1 expected by superproject"), PARSE_OPT_NONEG,
+ parse_opt_object_id),
+ OPT_CALLBACK_F(0, "suboid", &update_data.suboid, N_("subsha1"),
+ N_("SHA1 of submodule's HEAD"), PARSE_OPT_NONEG,
+ parse_opt_object_id),
+ OPT_END()
+ };
+
+ const char *const usage[] = {
+ N_("git submodule--helper run-update-procedure [<options>] <path>"),
+ NULL
+ };
+
+ argc = parse_options(argc, argv, prefix, options, usage, 0);
+
+ if (argc != 1)
+ usage_with_options(usage, options);
+
+ update_data.force = !!force;
+ update_data.quiet = !!quiet;
+ update_data.nofetch = !!nofetch;
+ update_data.just_cloned = !!just_cloned;
+ update_data.sm_path = argv[0];
+
+ if (update_data.recursive_prefix)
+ prefixed_path = xstrfmt("%s%s", update_data.recursive_prefix, update_data.sm_path);
+ else
+ prefixed_path = xstrdup(update_data.sm_path);
+
+ update_data.displaypath = get_submodule_displaypath(prefixed_path, prefix);
+
+ determine_submodule_update_strategy(the_repository, update_data.just_cloned,
+ update_data.sm_path, update,
+ &update_data.update_strategy);
+
+ free(prefixed_path);
+
+ if (!oideq(&update_data.oid, &update_data.suboid) || update_data.force)
+ return do_run_update_procedure(&update_data);
+
+ return 3;
+}
+
static int resolve_relative_path(int argc, const char **argv, const char *prefix)
{
struct strbuf sb = STRBUF_INIT;
@@ -2540,7 +2767,6 @@ static int push_check(int argc, const char **argv, const char *prefix)
static int ensure_core_worktree(int argc, const char **argv, const char *prefix)
{
- const struct submodule *sub;
const char *path;
const char *cw;
struct repository subrepo;
@@ -2550,11 +2776,7 @@ static int ensure_core_worktree(int argc, const char **argv, const char *prefix)
path = argv[1];
- sub = submodule_from_path(the_repository, null_oid(), path);
- if (!sub)
- BUG("We could get the submodule handle before?");
-
- if (repo_submodule_init(&subrepo, the_repository, sub))
+ if (repo_submodule_init(&subrepo, the_repository, path, null_oid()))
die(_("could not get a repository handle for submodule '%s'"), path);
if (!repo_config_get_string_tmp(&subrepo, "core.worktree", &cw)) {
@@ -2765,7 +2987,7 @@ struct add_data {
const char *prefix;
const char *branch;
const char *reference_path;
- const char *sm_path;
+ char *sm_path;
const char *sm_name;
const char *repo;
const char *realrepo;
@@ -2777,7 +2999,7 @@ struct add_data {
};
#define ADD_DATA_INIT { .depth = -1 }
-static void show_fetch_remotes(FILE *output, const char *git_dir_path)
+static void append_fetch_remotes(struct strbuf *msg, const char *git_dir_path)
{
struct child_process cp_remote = CHILD_PROCESS_INIT;
struct strbuf sb_remote_out = STRBUF_INIT;
@@ -2793,7 +3015,7 @@ static void show_fetch_remotes(FILE *output, const char *git_dir_path)
while ((next_line = strchr(line, '\n')) != NULL) {
size_t len = next_line - line;
if (strip_suffix_mem(line, &len, " (fetch)"))
- fprintf(output, " %.*s\n", (int)len, line);
+ strbuf_addf(msg, " %.*s\n", (int)len, line);
line = next_line + 1;
}
}
@@ -2825,19 +3047,27 @@ static int add_submodule(const struct add_data *add_data)
if (is_directory(submod_gitdir_path)) {
if (!add_data->force) {
- fprintf(stderr, _("A git directory for '%s' is found "
- "locally with remote(s):"),
- add_data->sm_name);
- show_fetch_remotes(stderr, submod_gitdir_path);
+ struct strbuf msg = STRBUF_INIT;
+ char *die_msg;
+
+ strbuf_addf(&msg, _("A git directory for '%s' is found "
+ "locally with remote(s):\n"),
+ add_data->sm_name);
+
+ append_fetch_remotes(&msg, submod_gitdir_path);
free(submod_gitdir_path);
- die(_("If you want to reuse this local git "
- "directory instead of cloning again from\n"
- " %s\n"
- "use the '--force' option. If the local git "
- "directory is not the correct repo\n"
- "or if you are unsure what this means, choose "
- "another name with the '--name' option.\n"),
- add_data->realrepo);
+
+ strbuf_addf(&msg, _("If you want to reuse this local git "
+ "directory instead of cloning again from\n"
+ " %s\n"
+ "use the '--force' option. If the local git "
+ "directory is not the correct repo\n"
+ "or you are unsure what this means choose "
+ "another name with the '--name' option."),
+ add_data->realrepo);
+
+ die_msg = strbuf_detach(&msg, NULL);
+ die("%s", die_msg);
} else {
printf(_("Reactivating local git directory for "
"submodule '%s'\n"), add_data->sm_name);
@@ -2864,6 +3094,10 @@ static int add_submodule(const struct add_data *add_data)
prepare_submodule_repo_env(&cp.env_array);
cp.git_cmd = 1;
cp.dir = add_data->sm_path;
+ /*
+ * NOTE: we only get here if add_data->force is true, so
+ * passing --force to checkout is reasonable.
+ */
strvec_pushl(&cp.args, "checkout", "-f", "-q", NULL);
if (add_data->branch) {
@@ -2877,61 +3111,246 @@ static int add_submodule(const struct add_data *add_data)
return 0;
}
-static int add_clone(int argc, const char **argv, const char *prefix)
+static int config_submodule_in_gitmodules(const char *name, const char *var, const char *value)
{
- int force = 0, quiet = 0, dissociate = 0, progress = 0;
+ char *key;
+ int ret;
+
+ if (!is_writing_gitmodules_ok())
+ die(_("please make sure that the .gitmodules file is in the working tree"));
+
+ key = xstrfmt("submodule.%s.%s", name, var);
+ ret = config_set_in_gitmodules_file_gently(key, value);
+ free(key);
+
+ return ret;
+}
+
+static void configure_added_submodule(struct add_data *add_data)
+{
+ char *key;
+ char *val = NULL;
+ struct child_process add_submod = CHILD_PROCESS_INIT;
+ struct child_process add_gitmodules = CHILD_PROCESS_INIT;
+
+ key = xstrfmt("submodule.%s.url", add_data->sm_name);
+ git_config_set_gently(key, add_data->realrepo);
+ free(key);
+
+ add_submod.git_cmd = 1;
+ strvec_pushl(&add_submod.args, "add",
+ "--no-warn-embedded-repo", NULL);
+ if (add_data->force)
+ strvec_push(&add_submod.args, "--force");
+ strvec_pushl(&add_submod.args, "--", add_data->sm_path, NULL);
+
+ if (run_command(&add_submod))
+ die(_("Failed to add submodule '%s'"), add_data->sm_path);
+
+ if (config_submodule_in_gitmodules(add_data->sm_name, "path", add_data->sm_path) ||
+ config_submodule_in_gitmodules(add_data->sm_name, "url", add_data->repo))
+ die(_("Failed to register submodule '%s'"), add_data->sm_path);
+
+ if (add_data->branch) {
+ if (config_submodule_in_gitmodules(add_data->sm_name,
+ "branch", add_data->branch))
+ die(_("Failed to register submodule '%s'"), add_data->sm_path);
+ }
+
+ add_gitmodules.git_cmd = 1;
+ strvec_pushl(&add_gitmodules.args,
+ "add", "--force", "--", ".gitmodules", NULL);
+
+ if (run_command(&add_gitmodules))
+ die(_("Failed to register submodule '%s'"), add_data->sm_path);
+
+ /*
+ * NEEDSWORK: In a multi-working-tree world this needs to be
+ * set in the per-worktree config.
+ */
+ /*
+ * NEEDSWORK: In the longer run, we need to get rid of this
+ * pattern of querying "submodule.active" before calling
+ * is_submodule_active(), since that function needs to find
+ * out the value of "submodule.active" again anyway.
+ */
+ if (!git_config_get_string("submodule.active", &val) && val) {
+ /*
+ * If the submodule being added isn't already covered by the
+ * current configured pathspec, set the submodule's active flag
+ */
+ if (!is_submodule_active(the_repository, add_data->sm_path)) {
+ key = xstrfmt("submodule.%s.active", add_data->sm_name);
+ git_config_set_gently(key, "true");
+ free(key);
+ }
+ } else {
+ key = xstrfmt("submodule.%s.active", add_data->sm_name);
+ git_config_set_gently(key, "true");
+ free(key);
+ }
+}
+
+static void die_on_index_match(const char *path, int force)
+{
+ struct pathspec ps;
+ const char *args[] = { path, NULL };
+ parse_pathspec(&ps, 0, PATHSPEC_PREFER_CWD, NULL, args);
+
+ if (read_cache_preload(NULL) < 0)
+ die(_("index file corrupt"));
+
+ if (ps.nr) {
+ int i;
+ char *ps_matched = xcalloc(ps.nr, 1);
+
+ /* TODO: audit for interaction with sparse-index. */
+ ensure_full_index(&the_index);
+
+ /*
+ * Since there is only one pathspec, we just need
+ * need to check ps_matched[0] to know if a cache
+ * entry matched.
+ */
+ for (i = 0; i < active_nr; i++) {
+ ce_path_match(&the_index, active_cache[i], &ps,
+ ps_matched);
+
+ if (ps_matched[0]) {
+ if (!force)
+ die(_("'%s' already exists in the index"),
+ path);
+ if (!S_ISGITLINK(active_cache[i]->ce_mode))
+ die(_("'%s' already exists in the index "
+ "and is not a submodule"), path);
+ break;
+ }
+ }
+ free(ps_matched);
+ }
+ clear_pathspec(&ps);
+}
+
+static void die_on_repo_without_commits(const char *path)
+{
+ struct strbuf sb = STRBUF_INIT;
+ strbuf_addstr(&sb, path);
+ if (is_nonbare_repository_dir(&sb)) {
+ struct object_id oid;
+ if (resolve_gitlink_ref(path, "HEAD", &oid) < 0)
+ die(_("'%s' does not have a commit checked out"), path);
+ }
+ strbuf_release(&sb);
+}
+
+static int module_add(int argc, const char **argv, const char *prefix)
+{
+ int force = 0, quiet = 0, progress = 0, dissociate = 0;
struct add_data add_data = ADD_DATA_INIT;
struct option options[] = {
- OPT_STRING('b', "branch", &add_data.branch,
- N_("branch"),
- N_("branch of repository to checkout on cloning")),
- OPT_STRING(0, "prefix", &prefix,
- N_("path"),
- N_("alternative anchor for relative paths")),
- OPT_STRING(0, "path", &add_data.sm_path,
- N_("path"),
- N_("where the new submodule will be cloned to")),
- OPT_STRING(0, "name", &add_data.sm_name,
- N_("string"),
- N_("name of the new submodule")),
- OPT_STRING(0, "url", &add_data.realrepo,
- N_("string"),
- N_("url where to clone the submodule from")),
- OPT_STRING(0, "reference", &add_data.reference_path,
- N_("repo"),
- N_("reference repository")),
- OPT_BOOL(0, "dissociate", &dissociate,
- N_("use --reference only while cloning")),
- OPT_INTEGER(0, "depth", &add_data.depth,
- N_("depth for shallow clones")),
- OPT_BOOL(0, "progress", &progress,
- N_("force cloning progress")),
+ OPT_STRING('b', "branch", &add_data.branch, N_("branch"),
+ N_("branch of repository to add as submodule")),
OPT__FORCE(&force, N_("allow adding an otherwise ignored submodule path"),
PARSE_OPT_NOCOMPLETE),
- OPT__QUIET(&quiet, "suppress output for cloning a submodule"),
+ OPT__QUIET(&quiet, N_("print only error messages")),
+ OPT_BOOL(0, "progress", &progress, N_("force cloning progress")),
+ OPT_STRING(0, "reference", &add_data.reference_path, N_("repository"),
+ N_("reference repository")),
+ OPT_BOOL(0, "dissociate", &dissociate, N_("borrow the objects from reference repositories")),
+ OPT_STRING(0, "name", &add_data.sm_name, N_("name"),
+ N_("sets the submodule’s name to the given string "
+ "instead of defaulting to its path")),
+ OPT_INTEGER(0, "depth", &add_data.depth, N_("depth for shallow clones")),
OPT_END()
};
const char *const usage[] = {
- N_("git submodule--helper add-clone [<options>...] "
- "--url <url> --path <path> --name <name>"),
+ N_("git submodule--helper add [<options>] [--] <repository> [<path>]"),
NULL
};
argc = parse_options(argc, argv, prefix, options, usage, 0);
- if (argc != 0)
+ if (!is_writing_gitmodules_ok())
+ die(_("please make sure that the .gitmodules file is in the working tree"));
+
+ if (prefix && *prefix &&
+ add_data.reference_path && !is_absolute_path(add_data.reference_path))
+ add_data.reference_path = xstrfmt("%s%s", prefix, add_data.reference_path);
+
+ if (argc == 0 || argc > 2)
usage_with_options(usage, options);
+ add_data.repo = argv[0];
+ if (argc == 1)
+ add_data.sm_path = git_url_basename(add_data.repo, 0, 0);
+ else
+ add_data.sm_path = xstrdup(argv[1]);
+
+ if (prefix && *prefix && !is_absolute_path(add_data.sm_path))
+ add_data.sm_path = xstrfmt("%s%s", prefix, add_data.sm_path);
+
+ if (starts_with_dot_dot_slash(add_data.repo) ||
+ starts_with_dot_slash(add_data.repo)) {
+ if (prefix)
+ die(_("Relative path can only be used from the toplevel "
+ "of the working tree"));
+
+ /* dereference source url relative to parent's url */
+ add_data.realrepo = resolve_relative_url(add_data.repo, NULL, 1);
+ } else if (is_dir_sep(add_data.repo[0]) || strchr(add_data.repo, ':')) {
+ add_data.realrepo = add_data.repo;
+ } else {
+ die(_("repo URL: '%s' must be absolute or begin with ./|../"),
+ add_data.repo);
+ }
+
+ /*
+ * normalize path:
+ * multiple //; leading ./; /./; /../;
+ */
+ normalize_path_copy(add_data.sm_path, add_data.sm_path);
+ strip_dir_trailing_slashes(add_data.sm_path);
+
+ die_on_index_match(add_data.sm_path, force);
+ die_on_repo_without_commits(add_data.sm_path);
+
+ if (!force) {
+ int exit_code = -1;
+ struct strbuf sb = STRBUF_INIT;
+ struct child_process cp = CHILD_PROCESS_INIT;
+ cp.git_cmd = 1;
+ cp.no_stdout = 1;
+ strvec_pushl(&cp.args, "add", "--dry-run", "--ignore-missing",
+ "--no-warn-embedded-repo", add_data.sm_path, NULL);
+ if ((exit_code = pipe_command(&cp, NULL, 0, NULL, 0, &sb, 0))) {
+ strbuf_complete_line(&sb);
+ fputs(sb.buf, stderr);
+ free(add_data.sm_path);
+ return exit_code;
+ }
+ strbuf_release(&sb);
+ }
+
+ if(!add_data.sm_name)
+ add_data.sm_name = add_data.sm_path;
+
+ if (check_submodule_name(add_data.sm_name))
+ die(_("'%s' is not a valid submodule name"), add_data.sm_name);
+
add_data.prefix = prefix;
- add_data.progress = !!progress;
- add_data.dissociate = !!dissociate;
add_data.force = !!force;
add_data.quiet = !!quiet;
+ add_data.progress = !!progress;
+ add_data.dissociate = !!dissociate;
- if (add_submodule(&add_data))
+ if (add_submodule(&add_data)) {
+ free(add_data.sm_path);
return 1;
+ }
+ configure_added_submodule(&add_data);
+ free(add_data.sm_path);
return 0;
}
@@ -2948,12 +3367,12 @@ static struct cmd_struct commands[] = {
{"list", module_list, 0},
{"name", module_name, 0},
{"clone", module_clone, 0},
- {"add-clone", add_clone, 0},
+ {"add", module_add, SUPPORT_SUPER_PREFIX},
{"update-module-mode", module_update_module_mode, 0},
{"update-clone", update_clone, 0},
+ {"run-update-procedure", run_update_procedure, 0},
{"ensure-core-worktree", ensure_core_worktree, 0},
{"relative-path", resolve_relative_path, 0},
- {"resolve-relative-url", resolve_relative_url, 0},
{"resolve-relative-url-test", resolve_relative_url_test, 0},
{"foreach", module_foreach, SUPPORT_SUPER_PREFIX},
{"init", module_init, SUPPORT_SUPER_PREFIX},
diff --git a/builtin/tag.c b/builtin/tag.c
index 87552ae..6fe6467 100644
--- a/builtin/tag.c
+++ b/builtin/tag.c
@@ -23,10 +23,10 @@
static const char * const git_tag_usage[] = {
N_("git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]\n"
- "\t\t<tagname> [<head>]"),
+ " <tagname> [<head>]"),
N_("git tag -d <tagname>..."),
N_("git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--points-at <object>]\n"
- "\t\t[--format=<format>] [--merged <commit>] [--no-merged <commit>] [<pattern>...]"),
+ " [--format=<format>] [--merged <commit>] [--no-merged <commit>] [<pattern>...]"),
N_("git tag -v [--format=<format>] <tagname>..."),
NULL
};
@@ -146,7 +146,7 @@ static int verify_tag(const char *name, const char *ref,
const struct object_id *oid, void *cb_data)
{
int flags;
- const struct ref_format *format = cb_data;
+ struct ref_format *format = cb_data;
flags = GPG_VERIFY_VERBOSE;
if (format->format)
@@ -432,7 +432,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
int annotate = 0, force = 0;
int cmdmode = 0, create_tag_object = 0;
const char *msgfile = NULL, *keyid = NULL;
- struct msg_arg msg = { 0, STRBUF_INIT };
+ struct msg_arg msg = { .buf = STRBUF_INIT };
struct ref_transaction *transaction;
struct strbuf err = STRBUF_INIT;
struct ref_filter filter;
@@ -482,6 +482,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
OPT_BOOL('i', "ignore-case", &icase, N_("sorting and filtering are case insensitive")),
OPT_END()
};
+ int ret = 0;
setup_ref_filter_porcelain_msg();
@@ -529,7 +530,6 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
ref_sorting_set_sort_flags_all(sorting, REF_SORTING_ICASE, icase);
filter.ignore_case = icase;
if (cmdmode == 'l') {
- int ret;
if (column_active(colopts)) {
struct column_options copts;
memset(&copts, 0, sizeof(copts));
@@ -540,7 +540,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
ret = list_tags(&filter, sorting, &format);
if (column_active(colopts))
stop_column_filter();
- return ret;
+ goto cleanup;
}
if (filter.lines != -1)
die(_("-n option is only allowed in list mode"));
@@ -552,12 +552,15 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
die(_("--points-at option is only allowed in list mode"));
if (filter.reachable_from || filter.unreachable_from)
die(_("--merged and --no-merged options are only allowed in list mode"));
- if (cmdmode == 'd')
- return delete_tags(argv);
+ if (cmdmode == 'd') {
+ ret = delete_tags(argv);
+ goto cleanup;
+ }
if (cmdmode == 'v') {
if (format.format && verify_ref_format(&format))
usage_with_options(git_tag_usage, options);
- return for_each_tag_name(argv, verify_tag, &format);
+ ret = for_each_tag_name(argv, verify_tag, &format);
+ goto cleanup;
}
if (msg.given || msgfile) {
@@ -626,10 +629,12 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
printf(_("Updated tag '%s' (was %s)\n"), tag,
find_unique_abbrev(&prev, DEFAULT_ABBREV));
- UNLEAK(buf);
- UNLEAK(ref);
- UNLEAK(reflog_msg);
- UNLEAK(msg);
- UNLEAK(err);
- return 0;
+cleanup:
+ ref_sorting_release(sorting);
+ strbuf_release(&buf);
+ strbuf_release(&ref);
+ strbuf_release(&reflog_msg);
+ strbuf_release(&msg.buf);
+ strbuf_release(&err);
+ return ret;
}
diff --git a/builtin/upload-pack.c b/builtin/upload-pack.c
index 6da8fa2..125af53 100644
--- a/builtin/upload-pack.c
+++ b/builtin/upload-pack.c
@@ -16,16 +16,18 @@ int cmd_upload_pack(int argc, const char **argv, const char *prefix)
{
const char *dir;
int strict = 0;
- struct upload_pack_options opts = { 0 };
- struct serve_options serve_opts = SERVE_OPTIONS_INIT;
+ int advertise_refs = 0;
+ int stateless_rpc = 0;
+ int timeout = 0;
struct option options[] = {
- OPT_BOOL(0, "stateless-rpc", &opts.stateless_rpc,
+ OPT_BOOL(0, "stateless-rpc", &stateless_rpc,
N_("quit after a single request/response exchange")),
- OPT_BOOL(0, "advertise-refs", &opts.advertise_refs,
- N_("exit immediately after initial ref advertisement")),
+ OPT_HIDDEN_BOOL(0, "http-backend-info-refs", &advertise_refs,
+ N_("serve up the info/refs for git-http-backend")),
+ OPT_ALIAS(0, "advertise-refs", "http-backend-info-refs"),
OPT_BOOL(0, "strict", &strict,
N_("do not try <directory>/.git/ if <directory> is no Git directory")),
- OPT_INTEGER(0, "timeout", &opts.timeout,
+ OPT_INTEGER(0, "timeout", &timeout,
N_("interrupt transfer after <n> seconds of inactivity")),
OPT_END()
};
@@ -38,9 +40,6 @@ int cmd_upload_pack(int argc, const char **argv, const char *prefix)
if (argc != 1)
usage_with_options(upload_pack_usage, options);
- if (opts.timeout)
- opts.daemon_mode = 1;
-
setup_path();
dir = argv[0];
@@ -50,21 +49,22 @@ int cmd_upload_pack(int argc, const char **argv, const char *prefix)
switch (determine_protocol_version_server()) {
case protocol_v2:
- serve_opts.advertise_capabilities = opts.advertise_refs;
- serve_opts.stateless_rpc = opts.stateless_rpc;
- serve(&serve_opts);
+ if (advertise_refs)
+ protocol_v2_advertise_capabilities();
+ else
+ protocol_v2_serve_loop(stateless_rpc);
break;
case protocol_v1:
/*
* v1 is just the original protocol with a version string,
* so just fall through after writing the version string.
*/
- if (opts.advertise_refs || !opts.stateless_rpc)
+ if (advertise_refs || !stateless_rpc)
packet_write_fmt(1, "version 1\n");
/* fallthrough */
case protocol_v0:
- upload_pack(&opts);
+ upload_pack(advertise_refs, stateless_rpc, timeout);
break;
case protocol_unknown_version:
BUG("unknown protocol version");
diff --git a/builtin/worktree.c b/builtin/worktree.c
index 0d0a80d..d22ece9 100644
--- a/builtin/worktree.c
+++ b/builtin/worktree.c
@@ -8,6 +8,7 @@
#include "branch.h"
#include "refs.h"
#include "run-command.h"
+#include "hook.h"
#include "sigchain.h"
#include "submodule.h"
#include "utf8.h"
diff --git a/bundle.c b/bundle.c
index ab63f40..a0bb687 100644
--- a/bundle.c
+++ b/bundle.c
@@ -569,18 +569,18 @@ int create_bundle(struct repository *r, const char *path,
}
int unbundle(struct repository *r, struct bundle_header *header,
- int bundle_fd, int flags)
+ int bundle_fd, struct strvec *extra_index_pack_args)
{
- const char *argv_index_pack[] = {"index-pack",
- "--fix-thin", "--stdin", NULL, NULL};
struct child_process ip = CHILD_PROCESS_INIT;
+ strvec_pushl(&ip.args, "index-pack", "--fix-thin", "--stdin", NULL);
- if (flags & BUNDLE_VERBOSE)
- argv_index_pack[3] = "-v";
+ if (extra_index_pack_args) {
+ strvec_pushv(&ip.args, extra_index_pack_args->v);
+ strvec_clear(extra_index_pack_args);
+ }
if (verify_bundle(r, header, 0))
return -1;
- ip.argv = argv_index_pack;
ip.in = bundle_fd;
ip.no_stdout = 1;
ip.git_cmd = 1;
diff --git a/bundle.h b/bundle.h
index 1927d8c..06009fe 100644
--- a/bundle.h
+++ b/bundle.h
@@ -26,9 +26,19 @@ int create_bundle(struct repository *r, const char *path,
int argc, const char **argv, struct strvec *pack_options,
int version);
int verify_bundle(struct repository *r, struct bundle_header *header, int verbose);
-#define BUNDLE_VERBOSE 1
+
+/**
+ * Unbundle after reading the header with read_bundle_header().
+ *
+ * We'll invoke "git index-pack --stdin --fix-thin" for you on the
+ * provided `bundle_fd` from read_bundle_header().
+ *
+ * Provide "extra_index_pack_args" to pass any extra arguments
+ * (e.g. "-v" for verbose/progress), NULL otherwise. The provided
+ * "extra_index_pack_args" (if any) will be strvec_clear()'d for you.
+ */
int unbundle(struct repository *r, struct bundle_header *header,
- int bundle_fd, int flags);
+ int bundle_fd, struct strvec *extra_index_pack_args);
int list_bundle_refs(struct bundle_header *header,
int argc, const char **argv);
diff --git a/cache-tree.c b/cache-tree.c
index 90919f9..79d1681 100644
--- a/cache-tree.c
+++ b/cache-tree.c
@@ -440,8 +440,9 @@ static int update_one(struct cache_tree *it,
} else if (dryrun) {
hash_object_file(the_hash_algo, buffer.buf, buffer.len,
tree_type, &it->oid);
- } else if (write_object_file(buffer.buf, buffer.len, tree_type,
- &it->oid)) {
+ } else if (write_object_file_flags(buffer.buf, buffer.len, tree_type,
+ &it->oid, flags & WRITE_TREE_SILENT
+ ? HASH_SILENT : 0)) {
strbuf_release(&buffer);
return -1;
}
@@ -826,10 +827,17 @@ static void verify_one_sparse(struct repository *r,
path->buf);
}
-static void verify_one(struct repository *r,
- struct index_state *istate,
- struct cache_tree *it,
- struct strbuf *path)
+/*
+ * Returns:
+ * 0 - Verification completed.
+ * 1 - Restart verification - a call to ensure_full_index() freed the cache
+ * tree that is being verified and verification needs to be restarted from
+ * the new toplevel cache tree.
+ */
+static int verify_one(struct repository *r,
+ struct index_state *istate,
+ struct cache_tree *it,
+ struct strbuf *path)
{
int i, pos, len = path->len;
struct strbuf tree_buf = STRBUF_INIT;
@@ -837,21 +845,30 @@ static void verify_one(struct repository *r,
for (i = 0; i < it->subtree_nr; i++) {
strbuf_addf(path, "%s/", it->down[i]->name);
- verify_one(r, istate, it->down[i]->cache_tree, path);
+ if (verify_one(r, istate, it->down[i]->cache_tree, path))
+ return 1;
strbuf_setlen(path, len);
}
if (it->entry_count < 0 ||
/* no verification on tests (t7003) that replace trees */
lookup_replace_object(r, &it->oid) != &it->oid)
- return;
+ return 0;
if (path->len) {
+ /*
+ * If the index is sparse and the cache tree is not
+ * index_name_pos() may trigger ensure_full_index() which will
+ * free the tree that is being verified.
+ */
+ int is_sparse = istate->sparse_index;
pos = index_name_pos(istate, path->buf, path->len);
+ if (is_sparse && !istate->sparse_index)
+ return 1;
if (pos >= 0) {
verify_one_sparse(r, istate, it, path, pos);
- return;
+ return 0;
}
pos = -pos - 1;
@@ -899,6 +916,7 @@ static void verify_one(struct repository *r,
oid_to_hex(&new_oid), oid_to_hex(&it->oid));
strbuf_setlen(path, len);
strbuf_release(&tree_buf);
+ return 0;
}
void cache_tree_verify(struct repository *r, struct index_state *istate)
@@ -907,6 +925,10 @@ void cache_tree_verify(struct repository *r, struct index_state *istate)
if (!istate->cache_tree)
return;
- verify_one(r, istate, istate->cache_tree, &path);
+ if (verify_one(r, istate, istate->cache_tree, &path)) {
+ strbuf_reset(&path);
+ if (verify_one(r, istate, istate->cache_tree, &path))
+ BUG("ensure_full_index() called twice while verifying cache tree");
+ }
strbuf_release(&path);
}
diff --git a/cache.h b/cache.h
index 0a8d44c..eba1248 100644
--- a/cache.h
+++ b/cache.h
@@ -887,6 +887,7 @@ int ie_modified(struct index_state *, const struct cache_entry *, struct stat *,
#define HASH_WRITE_OBJECT 1
#define HASH_FORMAT_CHECK 2
#define HASH_RENORMALIZE 4
+#define HASH_SILENT 8
int index_fd(struct index_state *istate, struct object_id *oid, int fd, struct stat *st, enum object_type type, const char *path, unsigned flags);
int index_path(struct index_state *istate, struct object_id *oid, const char *path, struct stat *st, unsigned flags);
@@ -995,14 +996,6 @@ extern int core_apply_sparse_checkout;
extern int core_sparse_checkout_cone;
/*
- * Include broken refs in all ref iterations, which will
- * generally choke dangerous operations rather than letting
- * them silently proceed without taking the broken ref into
- * account.
- */
-extern int ref_paranoia;
-
-/*
* Returns the boolean value of $GIT_OPTIONAL_LOCKS (or the default value).
*/
int use_optional_locks(void);
@@ -1210,51 +1203,10 @@ enum scld_error safe_create_leading_directories(char *path);
enum scld_error safe_create_leading_directories_const(const char *path);
enum scld_error safe_create_leading_directories_no_share(char *path);
-/*
- * Callback function for raceproof_create_file(). This function is
- * expected to do something that makes dirname(path) permanent despite
- * the fact that other processes might be cleaning up empty
- * directories at the same time. Usually it will create a file named
- * path, but alternatively it could create another file in that
- * directory, or even chdir() into that directory. The function should
- * return 0 if the action was completed successfully. On error, it
- * should return a nonzero result and set errno.
- * raceproof_create_file() treats two errno values specially:
- *
- * - ENOENT -- dirname(path) does not exist. In this case,
- * raceproof_create_file() tries creating dirname(path)
- * (and any parent directories, if necessary) and calls
- * the function again.
- *
- * - EISDIR -- the file already exists and is a directory. In this
- * case, raceproof_create_file() removes the directory if
- * it is empty (and recursively any empty directories that
- * it contains) and calls the function again.
- *
- * Any other errno causes raceproof_create_file() to fail with the
- * callback's return value and errno.
- *
- * Obviously, this function should be OK with being called again if it
- * fails with ENOENT or EISDIR. In other scenarios it will not be
- * called again.
- */
-typedef int create_file_fn(const char *path, void *cb);
-
-/*
- * Create a file in dirname(path) by calling fn, creating leading
- * directories if necessary. Retry a few times in case we are racing
- * with another process that is trying to clean up the directory that
- * contains path. See the documentation for create_file_fn for more
- * details.
- *
- * Return the value and set the errno that resulted from the most
- * recent call of fn. fn is always called at least once, and will be
- * called more than once if it returns ENOENT or EISDIR.
- */
-int raceproof_create_file(const char *path, create_file_fn fn, void *cb);
-
int mkdir_in_gitdir(const char *path);
-char *expand_user_path(const char *path, int real_home);
+char *interpolate_path(const char *path, int real_home);
+/* NEEDSWORK: remove this synonym once in-flight topics have migrated */
+#define expand_user_path interpolate_path
const char *enter_repo(const char *path, int strict);
static inline int is_absolute_path(const char *path)
{
@@ -1296,6 +1248,13 @@ int looks_like_command_line_option(const char *str);
/**
* Return a newly allocated string with the evaluation of
+ * "$XDG_CONFIG_HOME/$subdir/$filename" if $XDG_CONFIG_HOME is non-empty, otherwise
+ * "$HOME/.config/$subdir/$filename". Return NULL upon error.
+ */
+char *xdg_config_home_for(const char *subdir, const char *filename);
+
+/**
+ * Return a newly allocated string with the evaluation of
* "$XDG_CONFIG_HOME/git/$filename" if $XDG_CONFIG_HOME is non-empty, otherwise
* "$HOME/.config/git/$filename". Return NULL upon error.
*/
@@ -1310,11 +1269,50 @@ char *xdg_cache_home(const char *filename);
int git_open_cloexec(const char *name, int flags);
#define git_open(name) git_open_cloexec(name, O_RDONLY)
-int unpack_loose_header(git_zstream *stream, unsigned char *map, unsigned long mapsize, void *buffer, unsigned long bufsiz);
-int parse_loose_header(const char *hdr, unsigned long *sizep);
+
+/**
+ * unpack_loose_header() initializes the data stream needed to unpack
+ * a loose object header.
+ *
+ * Returns:
+ *
+ * - ULHR_OK on success
+ * - ULHR_BAD on error
+ * - ULHR_TOO_LONG if the header was too long
+ *
+ * It will only parse up to MAX_HEADER_LEN bytes unless an optional
+ * "hdrbuf" argument is non-NULL. This is intended for use with
+ * OBJECT_INFO_ALLOW_UNKNOWN_TYPE to extract the bad type for (error)
+ * reporting. The full header will be extracted to "hdrbuf" for use
+ * with parse_loose_header(), ULHR_TOO_LONG will still be returned
+ * from this function to indicate that the header was too long.
+ */
+enum unpack_loose_header_result {
+ ULHR_OK,
+ ULHR_BAD,
+ ULHR_TOO_LONG,
+};
+enum unpack_loose_header_result unpack_loose_header(git_zstream *stream,
+ unsigned char *map,
+ unsigned long mapsize,
+ void *buffer,
+ unsigned long bufsiz,
+ struct strbuf *hdrbuf);
+
+/**
+ * parse_loose_header() parses the starting "<type> <len>\0" of an
+ * object. If it doesn't follow that format -1 is returned. To check
+ * the validity of the <type> populate the "typep" in the "struct
+ * object_info". It will be OBJ_BAD if the object type is unknown. The
+ * parsed <len> can be retrieved via "oi->sizep", and from there
+ * passed to unpack_loose_rest().
+ */
+struct object_info;
+int parse_loose_header(const char *hdr, struct object_info *oi);
int check_object_signature(struct repository *r, const struct object_id *oid,
- void *buf, unsigned long size, const char *type);
+ void *buf, unsigned long size, const char *type,
+ struct object_id *real_oidp);
int finalize_object_file(const char *tmpfile, const char *filename);
@@ -1659,7 +1657,9 @@ struct cache_def {
int track_flags;
int prefix_len_stat_func;
};
-#define CACHE_DEF_INIT { STRBUF_INIT, 0, 0, 0 }
+#define CACHE_DEF_INIT { \
+ .path = STRBUF_INIT, \
+}
static inline void cache_def_clear(struct cache_def *cache)
{
strbuf_release(&cache->path);
@@ -1716,13 +1716,6 @@ int update_server_info(int);
const char *get_log_output_encoding(void);
const char *get_commit_output_encoding(void);
-/*
- * This is a hack for test programs like test-dump-untracked-cache to
- * ensure that they do not modify the untracked cache when reading it.
- * Do not use it otherwise!
- */
-extern int ignore_untracked_cache_config;
-
int committer_ident_sufficiently_given(void);
int author_ident_sufficiently_given(void);
@@ -1735,6 +1728,8 @@ extern const char *git_mailmap_blob;
void maybe_flush_or_die(FILE *, const char *);
__attribute__((format (printf, 2, 3)))
void fprintf_or_die(FILE *, const char *fmt, ...);
+void fwrite_or_die(FILE *f, const void *buf, size_t count);
+void fflush_or_die(FILE *f);
#define COPY_READ_ERROR (-2)
#define COPY_WRITE_ERROR (-3)
diff --git a/cbtree.h b/cbtree.h
index a04a312..dedbb8e 100644
--- a/cbtree.h
+++ b/cbtree.h
@@ -37,11 +37,12 @@ enum cb_next {
CB_BREAK = 1
};
-#define CBTREE_INIT { .root = NULL }
+#define CBTREE_INIT { 0 }
static inline void cb_init(struct cb_tree *t)
{
- t->root = NULL;
+ struct cb_tree blank = CBTREE_INIT;
+ memcpy(t, &blank, sizeof(*t));
}
struct cb_node *cb_lookup(struct cb_tree *, const uint8_t *k, size_t klen);
diff --git a/checkout.c b/checkout.c
index 6586e30..2e39dae 100644
--- a/checkout.c
+++ b/checkout.c
@@ -14,7 +14,7 @@ struct tracking_name_data {
struct object_id *default_dst_oid;
};
-#define TRACKING_NAME_DATA_INIT { NULL, NULL, NULL, 0, NULL, NULL, NULL }
+#define TRACKING_NAME_DATA_INIT { 0 }
static int check_tracking_name(struct remote *remote, void *cb_data)
{
diff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh
index 5772081..1d0e48f 100755
--- a/ci/install-dependencies.sh
+++ b/ci/install-dependencies.sh
@@ -12,7 +12,7 @@
libemail-valid-perl libio-socket-ssl-perl libnet-smtp-ssl-perl"
case "$jobname" in
-linux-clang|linux-gcc)
+linux-clang|linux-gcc|linux-leaks)
sudo apt-add-repository -y "ppa:ubuntu-toolchain-r/test"
sudo apt-get -q update
sudo apt-get -q -y install language-pack-is libsvn-perl apache2 \
diff --git a/ci/lib.sh b/ci/lib.sh
index 476c3f3..82cb17f 100755
--- a/ci/lib.sh
+++ b/ci/lib.sh
@@ -183,7 +183,7 @@
export SKIP_DASHED_BUILT_INS=YesPlease
case "$jobname" in
-linux-clang|linux-gcc)
+linux-clang|linux-gcc|linux-leaks)
if [ "$jobname" = linux-gcc ]
then
export CC=gcc-8
@@ -233,4 +233,11 @@
;;
esac
+case "$jobname" in
+linux-leaks)
+ export SANITIZE=leak
+ export GIT_TEST_PASSING_SANITIZE_LEAK=true
+ ;;
+esac
+
MAKEFLAGS="$MAKEFLAGS CC=${CC:-cc}"
diff --git a/ci/run-build-and-tests.sh b/ci/run-build-and-tests.sh
index f3aba5d..cc62616 100755
--- a/ci/run-build-and-tests.sh
+++ b/ci/run-build-and-tests.sh
@@ -28,6 +28,7 @@
export GIT_TEST_COMMIT_GRAPH=1
export GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS=1
export GIT_TEST_MULTI_PACK_INDEX=1
+ export GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP=1
export GIT_TEST_ADD_I_USE_BUILTIN=1
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=master
export GIT_TEST_WRITE_REV_INDEX=1
diff --git a/command-list.txt b/command-list.txt
index a289f09..eb9cee8 100644
--- a/command-list.txt
+++ b/command-list.txt
@@ -168,7 +168,7 @@
git-show-ref plumbinginterrogators
git-sh-i18n purehelpers
git-sh-setup purehelpers
-git-sparse-checkout mainporcelain worktree
+git-sparse-checkout mainporcelain
git-stash mainporcelain
git-stage complete
git-status mainporcelain info
diff --git a/commit-graph.c b/commit-graph.c
index 3860a0d..2706683 100644
--- a/commit-graph.c
+++ b/commit-graph.c
@@ -713,6 +713,7 @@ static void close_commit_graph_one(struct commit_graph *g)
if (!g)
return;
+ clear_commit_graph_data_slab(&commit_graph_data_slab);
close_commit_graph_one(g->base_graph);
free_commit_graph(g);
}
@@ -723,7 +724,7 @@ void close_commit_graph(struct raw_object_store *o)
o->commit_graph = NULL;
}
-static int bsearch_graph(struct commit_graph *g, struct object_id *oid, uint32_t *pos)
+static int bsearch_graph(struct commit_graph *g, const struct object_id *oid, uint32_t *pos)
{
return bsearch_hash(oid->hash, g->chunk_oid_fanout,
g->chunk_oid_lookup, g->hash_len, pos);
@@ -864,28 +865,57 @@ static int fill_commit_in_graph(struct repository *r,
return 1;
}
-static int find_commit_in_graph(struct commit *item, struct commit_graph *g, uint32_t *pos)
+static int search_commit_pos_in_graph(const struct object_id *id, struct commit_graph *g, uint32_t *pos)
+{
+ struct commit_graph *cur_g = g;
+ uint32_t lex_index;
+
+ while (cur_g && !bsearch_graph(cur_g, id, &lex_index))
+ cur_g = cur_g->base_graph;
+
+ if (cur_g) {
+ *pos = lex_index + cur_g->num_commits_in_base;
+ return 1;
+ }
+
+ return 0;
+}
+
+static int find_commit_pos_in_graph(struct commit *item, struct commit_graph *g, uint32_t *pos)
{
uint32_t graph_pos = commit_graph_position(item);
if (graph_pos != COMMIT_NOT_FROM_GRAPH) {
*pos = graph_pos;
return 1;
} else {
- struct commit_graph *cur_g = g;
- uint32_t lex_index;
-
- while (cur_g && !bsearch_graph(cur_g, &(item->object.oid), &lex_index))
- cur_g = cur_g->base_graph;
-
- if (cur_g) {
- *pos = lex_index + cur_g->num_commits_in_base;
- return 1;
- }
-
- return 0;
+ return search_commit_pos_in_graph(&item->object.oid, g, pos);
}
}
+struct commit *lookup_commit_in_graph(struct repository *repo, const struct object_id *id)
+{
+ struct commit *commit;
+ uint32_t pos;
+
+ if (!repo->objects->commit_graph)
+ return NULL;
+ if (!search_commit_pos_in_graph(id, repo->objects->commit_graph, &pos))
+ return NULL;
+ if (!repo_has_object_file(repo, id))
+ return NULL;
+
+ commit = lookup_commit(repo, id);
+ if (!commit)
+ return NULL;
+ if (commit->object.parsed)
+ return commit;
+
+ if (!fill_commit_in_graph(repo, commit, repo->objects->commit_graph, pos))
+ return NULL;
+
+ return commit;
+}
+
static int parse_commit_in_graph_one(struct repository *r,
struct commit_graph *g,
struct commit *item)
@@ -895,7 +925,7 @@ static int parse_commit_in_graph_one(struct repository *r,
if (item->object.parsed)
return 1;
- if (find_commit_in_graph(item, g, &pos))
+ if (find_commit_pos_in_graph(item, g, &pos))
return fill_commit_in_graph(r, item, g, pos);
return 0;
@@ -921,7 +951,7 @@ void load_commit_graph_info(struct repository *r, struct commit *item)
uint32_t pos;
if (!prepare_commit_graph(r))
return;
- if (find_commit_in_graph(item, r->objects->commit_graph, &pos))
+ if (find_commit_pos_in_graph(item, r->objects->commit_graph, &pos))
fill_commit_graph_info(item, r->objects->commit_graph, pos);
}
@@ -1091,9 +1121,9 @@ static int write_graph_chunk_data(struct hashfile *f,
edge_value += ctx->new_num_commits_in_base;
else if (ctx->new_base_graph) {
uint32_t pos;
- if (find_commit_in_graph(parent->item,
- ctx->new_base_graph,
- &pos))
+ if (find_commit_pos_in_graph(parent->item,
+ ctx->new_base_graph,
+ &pos))
edge_value = pos;
}
@@ -1122,9 +1152,9 @@ static int write_graph_chunk_data(struct hashfile *f,
edge_value += ctx->new_num_commits_in_base;
else if (ctx->new_base_graph) {
uint32_t pos;
- if (find_commit_in_graph(parent->item,
- ctx->new_base_graph,
- &pos))
+ if (find_commit_pos_in_graph(parent->item,
+ ctx->new_base_graph,
+ &pos))
edge_value = pos;
}
@@ -1235,9 +1265,9 @@ static int write_graph_chunk_extra_edges(struct hashfile *f,
edge_value += ctx->new_num_commits_in_base;
else if (ctx->new_base_graph) {
uint32_t pos;
- if (find_commit_in_graph(parent->item,
- ctx->new_base_graph,
- &pos))
+ if (find_commit_pos_in_graph(parent->item,
+ ctx->new_base_graph,
+ &pos))
edge_value = pos;
}
@@ -2096,7 +2126,7 @@ static void sort_and_scan_merged_commits(struct write_commit_graph_context *ctx)
ctx->num_extra_edges = 0;
for (i = 0; i < ctx->commits.nr; i++) {
- display_progress(ctx->progress, i);
+ display_progress(ctx->progress, i + 1);
if (i && oideq(&ctx->commits.list[i - 1]->object.oid,
&ctx->commits.list[i]->object.oid)) {
diff --git a/commit-graph.h b/commit-graph.h
index 96c24fb..04a94e1 100644
--- a/commit-graph.h
+++ b/commit-graph.h
@@ -41,6 +41,14 @@ int open_commit_graph(const char *graph_file, int *fd, struct stat *st);
int parse_commit_in_graph(struct repository *r, struct commit *item);
/*
+ * Look up the given commit ID in the commit-graph. This will only return a
+ * commit if the ID exists both in the graph and in the object database such
+ * that we don't return commits whose object has been pruned. Otherwise, this
+ * function returns `NULL`.
+ */
+struct commit *lookup_commit_in_graph(struct repository *repo, const struct object_id *id);
+
+/*
* It is possible that we loaded commit contents from the commit buffer,
* but we also want to ensure the commit-graph content is correctly
* checked and filled. Fill the graph_pos and generation members of
diff --git a/commit.c b/commit.c
index 143f472..551de49 100644
--- a/commit.c
+++ b/commit.c
@@ -25,6 +25,7 @@
static struct commit_extra_header *read_commit_extra_header_lines(const char *buf, size_t len, const char **);
int save_commit_buffer = 1;
+int no_graft_file_deprecated_advice;
const char *commit_type = "commit";
@@ -190,7 +191,8 @@ static int read_graft_file(struct repository *r, const char *graft_file)
struct strbuf buf = STRBUF_INIT;
if (!fp)
return -1;
- if (advice_graft_file_deprecated)
+ if (!no_graft_file_deprecated_advice &&
+ advice_enabled(ADVICE_GRAFT_FILE_DEPRECATED))
advise(_("Support for <GIT_DIR>/info/grafts is deprecated\n"
"and will be removed in a future Git version.\n"
"\n"
diff --git a/commit.h b/commit.h
index df42eb4..3ea3276 100644
--- a/commit.h
+++ b/commit.h
@@ -41,6 +41,7 @@ struct commit {
};
extern int save_commit_buffer;
+extern int no_graft_file_deprecated_advice;
extern const char *commit_type;
/* While we can decorate any object with a name, it's only used for commits.. */
diff --git a/compat/linux/procinfo.c b/compat/linux/procinfo.c
new file mode 100644
index 0000000..bc2f938
--- /dev/null
+++ b/compat/linux/procinfo.c
@@ -0,0 +1,176 @@
+#include "cache.h"
+
+#include "strbuf.h"
+#include "strvec.h"
+#include "trace2.h"
+
+/*
+ * We need more complex parsing in stat_parent_pid() and
+ * parse_proc_stat() below than a dumb fscanf(). That's because while
+ * the statcomm field is surrounded by parentheses, the process itself
+ * is free to insert any arbitrary byte sequence its its name. That
+ * can include newlines, spaces, closing parentheses etc.
+ *
+ * See do_task_stat() in fs/proc/array.c in linux.git, this is in
+ * contrast with the escaped version of the name found in
+ * /proc/%d/status.
+ *
+ * So instead of using fscanf() we'll read N bytes from it, look for
+ * the first "(", and then the last ")", anything in-between is our
+ * process name.
+ *
+ * How much N do we need? On Linux /proc/sys/kernel/pid_max is 2^15 by
+ * default, but it can be raised set to values of up to 2^22. So
+ * that's 7 digits for a PID. We have 2 PIDs in the first four fields
+ * we're interested in, so 2 * 7 = 14.
+ *
+ * We then have 3 spaces between those four values, and we'd like to
+ * get to the space between the 4th and the 5th (the "pgrp" field) to
+ * make sure we read the entire "ppid" field. So that brings us up to
+ * 14 + 3 + 1 = 18. Add the two parentheses around the "comm" value
+ * and it's 20. The "state" value itself is then one character (now at
+ * 21).
+ *
+ * Finally the maximum length of the "comm" name itself is 15
+ * characters, e.g. a setting of "123456789abcdefg" will be truncated
+ * to "123456789abcdef". See PR_SET_NAME in prctl(2). So all in all
+ * we'd need to read 21 + 15 = 36 bytes.
+ *
+ * Let's just read 2^6 (64) instead for good measure. If PID_MAX ever
+ * grows past 2^22 we'll be future-proof. We'll then anchor at the
+ * last ")" we find to locate the parent PID.
+ */
+#define STAT_PARENT_PID_READ_N 64
+
+static int parse_proc_stat(struct strbuf *sb, struct strbuf *name,
+ int *statppid)
+{
+ const char *comm_lhs = strchr(sb->buf, '(');
+ const char *comm_rhs = strrchr(sb->buf, ')');
+ const char *ppid_lhs, *ppid_rhs;
+ char *p;
+ pid_t ppid;
+
+ if (!comm_lhs || !comm_rhs)
+ goto bad_kernel;
+
+ /*
+ * We're at the ")", that's followed by " X ", where X is a
+ * single "state" character. So advance by 4 bytes.
+ */
+ ppid_lhs = comm_rhs + 4;
+
+ /*
+ * Read until the space between the "ppid" and "pgrp" fields
+ * to make sure we're anchored after the untruncated "ppid"
+ * field..
+ */
+ ppid_rhs = strchr(ppid_lhs, ' ');
+ if (!ppid_rhs)
+ goto bad_kernel;
+
+ ppid = strtol(ppid_lhs, &p, 10);
+ if (ppid_rhs == p) {
+ const char *comm = comm_lhs + 1;
+ size_t commlen = comm_rhs - comm;
+
+ strbuf_add(name, comm, commlen);
+ *statppid = ppid;
+
+ return 0;
+ }
+
+bad_kernel:
+ /*
+ * We were able to read our STAT_PARENT_PID_READ_N bytes from
+ * /proc/%d/stat, but the content is bad. Broken kernel?
+ * Should not happen, but handle it gracefully.
+ */
+ return -1;
+}
+
+static int stat_parent_pid(pid_t pid, struct strbuf *name, int *statppid)
+{
+ struct strbuf procfs_path = STRBUF_INIT;
+ struct strbuf sb = STRBUF_INIT;
+ FILE *fp;
+ int ret = -1;
+
+ /* try to use procfs if it's present. */
+ strbuf_addf(&procfs_path, "/proc/%d/stat", pid);
+ fp = fopen(procfs_path.buf, "r");
+ if (!fp)
+ goto cleanup;
+
+ /*
+ * We could be more strict here and assert that we read at
+ * least STAT_PARENT_PID_READ_N. My reading of procfs(5) is
+ * that on any modern kernel (at least since 2.6.0 released in
+ * 2003) even if all the mandatory numeric fields were zero'd
+ * out we'd get at least 100 bytes, but let's just check that
+ * we got anything at all and trust the parse_proc_stat()
+ * function to handle its "Bad Kernel?" error checking.
+ */
+ if (!strbuf_fread(&sb, STAT_PARENT_PID_READ_N, fp))
+ goto cleanup;
+ if (parse_proc_stat(&sb, name, statppid) < 0)
+ goto cleanup;
+
+ ret = 0;
+cleanup:
+ if (fp)
+ fclose(fp);
+ strbuf_release(&procfs_path);
+ strbuf_release(&sb);
+
+ return ret;
+}
+
+static void push_ancestry_name(struct strvec *names, pid_t pid)
+{
+ struct strbuf name = STRBUF_INIT;
+ int ppid;
+
+ if (stat_parent_pid(pid, &name, &ppid) < 0)
+ goto cleanup;
+
+ strvec_push(names, name.buf);
+
+ /*
+ * Both errors and reaching the end of the process chain are
+ * reported as fields of 0 by proc(5)
+ */
+ if (ppid)
+ push_ancestry_name(names, ppid);
+cleanup:
+ strbuf_release(&name);
+
+ return;
+}
+
+void trace2_collect_process_info(enum trace2_process_info_reason reason)
+{
+ struct strvec names = STRVEC_INIT;
+
+ if (!trace2_is_enabled())
+ return;
+
+ switch (reason) {
+ case TRACE2_PROCESS_INFO_EXIT:
+ /*
+ * The Windows version of this calls its
+ * get_peak_memory_info() here. We may want to insert
+ * similar process-end statistics here in the future.
+ */
+ break;
+ case TRACE2_PROCESS_INFO_STARTUP:
+ push_ancestry_name(&names, getppid());
+
+ if (names.nr)
+ trace2_cmd_ancestry(names.v);
+ strvec_clear(&names);
+ break;
+ }
+
+ return;
+}
diff --git a/compat/nedmalloc/nedmalloc.c b/compat/nedmalloc/nedmalloc.c
index 1cc31c3..edb438a 100644
--- a/compat/nedmalloc/nedmalloc.c
+++ b/compat/nedmalloc/nedmalloc.c
@@ -510,7 +510,7 @@ static void threadcache_free(nedpool *p, threadcache *tc, int mymspace, void *me
assert(idx<=THREADCACHEMAXBINS);
if(tck==*binsptr)
{
- fprintf(stderr, "Attempt to free already freed memory block %p - aborting!\n", tck);
+ fprintf(stderr, "Attempt to free already freed memory block %p - aborting!\n", (void *)tck);
abort();
}
#ifdef FULLSANITYCHECKS
diff --git a/compat/simple-ipc/ipc-unix-socket.c b/compat/simple-ipc/ipc-unix-socket.c
index 1927e6e..28a7928 100644
--- a/compat/simple-ipc/ipc-unix-socket.c
+++ b/compat/simple-ipc/ipc-unix-socket.c
@@ -35,6 +35,28 @@ enum ipc_active_state ipc_get_active_state(const char *path)
}
}
+#ifdef __CYGWIN__
+ /*
+ * Cygwin emulates Unix sockets by writing special-crafted files whose
+ * `system` bit is set.
+ *
+ * If we are too fast, Cygwin might still be in the process of marking
+ * the underlying file as a system file. Until then, we will not see a
+ * Unix socket here, but a plain file instead. Just in case that this
+ * is happening, wait a little and try again.
+ */
+ {
+ static const int delay[] = { 1, 10, 20, 40, -1 };
+ int i;
+
+ for (i = 0; S_ISREG(st.st_mode) && delay[i] > 0; i++) {
+ sleep_millisec(delay[i]);
+ if (lstat(path, &st) == -1)
+ return IPC_STATE__INVALID_PATH;
+ }
+ }
+#endif
+
/* also complain if a plain file is in the way */
if ((st.st_mode & S_IFMT) != S_IFSOCK)
return IPC_STATE__INVALID_PATH;
@@ -168,7 +190,8 @@ void ipc_client_close_connection(struct ipc_client_connection *connection)
int ipc_client_send_command_to_connection(
struct ipc_client_connection *connection,
- const char *message, struct strbuf *answer)
+ const char *message, size_t message_len,
+ struct strbuf *answer)
{
int ret = 0;
@@ -176,7 +199,7 @@ int ipc_client_send_command_to_connection(
trace2_region_enter("ipc-client", "send-command", NULL);
- if (write_packetized_from_buf_no_flush(message, strlen(message),
+ if (write_packetized_from_buf_no_flush(message, message_len,
connection->fd) < 0 ||
packet_flush_gently(connection->fd) < 0) {
ret = error(_("could not send IPC command"));
@@ -197,7 +220,8 @@ int ipc_client_send_command_to_connection(
int ipc_client_send_command(const char *path,
const struct ipc_client_connect_options *options,
- const char *message, struct strbuf *answer)
+ const char *message, size_t message_len,
+ struct strbuf *answer)
{
int ret = -1;
enum ipc_active_state state;
@@ -208,7 +232,9 @@ int ipc_client_send_command(const char *path,
if (state != IPC_STATE__LISTENING)
return ret;
- ret = ipc_client_send_command_to_connection(connection, message, answer);
+ ret = ipc_client_send_command_to_connection(connection,
+ message, message_len,
+ answer);
ipc_client_close_connection(connection);
@@ -503,7 +529,7 @@ static int worker_thread__do_io(
if (ret >= 0) {
ret = worker_thread_data->server_data->application_cb(
worker_thread_data->server_data->application_data,
- buf.buf, do_io_reply_callback, &reply_data);
+ buf.buf, buf.len, do_io_reply_callback, &reply_data);
packet_flush_gently(reply_data.fd);
}
diff --git a/compat/simple-ipc/ipc-win32.c b/compat/simple-ipc/ipc-win32.c
index 8dc7bda..20ea7b6 100644
--- a/compat/simple-ipc/ipc-win32.c
+++ b/compat/simple-ipc/ipc-win32.c
@@ -3,6 +3,8 @@
#include "strbuf.h"
#include "pkt-line.h"
#include "thread-utils.h"
+#include "accctrl.h"
+#include "aclapi.h"
#ifndef SUPPORTS_SIMPLE_IPC
/*
@@ -49,6 +51,9 @@ static enum ipc_active_state get_active_state(wchar_t *pipe_path)
if (GetLastError() == ERROR_FILE_NOT_FOUND)
return IPC_STATE__PATH_NOT_FOUND;
+ trace2_data_intmax("ipc-debug", NULL, "getstate/waitpipe/gle",
+ (intmax_t)GetLastError());
+
return IPC_STATE__OTHER_ERROR;
}
@@ -109,9 +114,15 @@ static enum ipc_active_state connect_to_server(
t_start_ms = (DWORD)(getnanotime() / 1000000);
if (!WaitNamedPipeW(wpath, timeout_ms)) {
- if (GetLastError() == ERROR_SEM_TIMEOUT)
+ DWORD gleWait = GetLastError();
+
+ if (gleWait == ERROR_SEM_TIMEOUT)
return IPC_STATE__NOT_LISTENING;
+ trace2_data_intmax("ipc-debug", NULL,
+ "connect/waitpipe/gle",
+ (intmax_t)gleWait);
+
return IPC_STATE__OTHER_ERROR;
}
@@ -133,17 +144,31 @@ static enum ipc_active_state connect_to_server(
break; /* try again */
default:
+ trace2_data_intmax("ipc-debug", NULL,
+ "connect/createfile/gle",
+ (intmax_t)gle);
+
return IPC_STATE__OTHER_ERROR;
}
}
if (!SetNamedPipeHandleState(hPipe, &mode, NULL, NULL)) {
+ gle = GetLastError();
+ trace2_data_intmax("ipc-debug", NULL,
+ "connect/setpipestate/gle",
+ (intmax_t)gle);
+
CloseHandle(hPipe);
return IPC_STATE__OTHER_ERROR;
}
*pfd = _open_osfhandle((intptr_t)hPipe, O_RDWR|O_BINARY);
if (*pfd < 0) {
+ gle = GetLastError();
+ trace2_data_intmax("ipc-debug", NULL,
+ "connect/openosfhandle/gle",
+ (intmax_t)gle);
+
CloseHandle(hPipe);
return IPC_STATE__OTHER_ERROR;
}
@@ -208,7 +233,8 @@ void ipc_client_close_connection(struct ipc_client_connection *connection)
int ipc_client_send_command_to_connection(
struct ipc_client_connection *connection,
- const char *message, struct strbuf *answer)
+ const char *message, size_t message_len,
+ struct strbuf *answer)
{
int ret = 0;
@@ -216,7 +242,7 @@ int ipc_client_send_command_to_connection(
trace2_region_enter("ipc-client", "send-command", NULL);
- if (write_packetized_from_buf_no_flush(message, strlen(message),
+ if (write_packetized_from_buf_no_flush(message, message_len,
connection->fd) < 0 ||
packet_flush_gently(connection->fd) < 0) {
ret = error(_("could not send IPC command"));
@@ -239,7 +265,8 @@ int ipc_client_send_command_to_connection(
int ipc_client_send_command(const char *path,
const struct ipc_client_connect_options *options,
- const char *message, struct strbuf *response)
+ const char *message, size_t message_len,
+ struct strbuf *response)
{
int ret = -1;
enum ipc_active_state state;
@@ -250,7 +277,9 @@ int ipc_client_send_command(const char *path,
if (state != IPC_STATE__LISTENING)
return ret;
- ret = ipc_client_send_command_to_connection(connection, message, response);
+ ret = ipc_client_send_command_to_connection(connection,
+ message, message_len,
+ response);
ipc_client_close_connection(connection);
@@ -458,7 +487,7 @@ static int do_io(struct ipc_server_thread_data *server_thread_data)
if (ret >= 0) {
ret = server_thread_data->server_data->application_cb(
server_thread_data->server_data->application_data,
- buf.buf, do_io_reply_callback, &reply_data);
+ buf.buf, buf.len, do_io_reply_callback, &reply_data);
packet_flush_gently(reply_data.fd);
@@ -565,11 +594,132 @@ static void *server_thread_proc(void *_server_thread_data)
return NULL;
}
+/*
+ * We need to build a Windows "SECURITY_ATTRIBUTES" object and use it
+ * to apply an ACL when we create the initial instance of the Named
+ * Pipe. The construction is somewhat involved and consists of
+ * several sequential steps and intermediate objects.
+ *
+ * We use this structure to hold these intermediate pointers so that
+ * we can free them as a group. (It is unclear from the docs whether
+ * some of these intermediate pointers can be freed before we are
+ * finished using the "lpSA" member.)
+ */
+struct my_sa_data
+{
+ PSID pEveryoneSID;
+ PACL pACL;
+ PSECURITY_DESCRIPTOR pSD;
+ LPSECURITY_ATTRIBUTES lpSA;
+};
+
+static void init_sa(struct my_sa_data *d)
+{
+ memset(d, 0, sizeof(*d));
+}
+
+static void release_sa(struct my_sa_data *d)
+{
+ if (d->pEveryoneSID)
+ FreeSid(d->pEveryoneSID);
+ if (d->pACL)
+ LocalFree(d->pACL);
+ if (d->pSD)
+ LocalFree(d->pSD);
+ if (d->lpSA)
+ LocalFree(d->lpSA);
+
+ memset(d, 0, sizeof(*d));
+}
+
+/*
+ * Create SECURITY_ATTRIBUTES to apply to the initial named pipe. The
+ * creator of the first server instance gets to set the ACLs on it.
+ *
+ * We allow the well-known group `EVERYONE` to have read+write access
+ * to the named pipe so that clients can send queries to the daemon
+ * and receive the response.
+ *
+ * Normally, this is not necessary since the daemon is usually
+ * automatically started by a foreground command like `git status`,
+ * but in those cases where an elevated Git command started the daemon
+ * (such that the daemon itself runs with elevation), we need to add
+ * the ACL so that non-elevated commands can write to it.
+ *
+ * The following document was helpful:
+ * https://docs.microsoft.com/en-us/windows/win32/secauthz/creating-a-security-descriptor-for-a-new-object-in-c--
+ *
+ * Returns d->lpSA set to a SA or NULL.
+ */
+static LPSECURITY_ATTRIBUTES get_sa(struct my_sa_data *d)
+{
+ SID_IDENTIFIER_AUTHORITY sid_auth_world = SECURITY_WORLD_SID_AUTHORITY;
+#define NR_EA (1)
+ EXPLICIT_ACCESS ea[NR_EA];
+ DWORD dwResult;
+
+ if (!AllocateAndInitializeSid(&sid_auth_world, 1,
+ SECURITY_WORLD_RID, 0,0,0,0,0,0,0,
+ &d->pEveryoneSID)) {
+ DWORD gle = GetLastError();
+ trace2_data_intmax("ipc-debug", NULL, "alloc-world-sid/gle",
+ (intmax_t)gle);
+ goto fail;
+ }
+
+ memset(ea, 0, NR_EA * sizeof(EXPLICIT_ACCESS));
+
+ ea[0].grfAccessPermissions = GENERIC_READ | GENERIC_WRITE;
+ ea[0].grfAccessMode = SET_ACCESS;
+ ea[0].grfInheritance = NO_INHERITANCE;
+ ea[0].Trustee.MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
+ ea[0].Trustee.TrusteeForm = TRUSTEE_IS_SID;
+ ea[0].Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP;
+ ea[0].Trustee.ptstrName = (LPTSTR)d->pEveryoneSID;
+
+ dwResult = SetEntriesInAcl(NR_EA, ea, NULL, &d->pACL);
+ if (dwResult != ERROR_SUCCESS) {
+ DWORD gle = GetLastError();
+ trace2_data_intmax("ipc-debug", NULL, "set-acl-entry/gle",
+ (intmax_t)gle);
+ trace2_data_intmax("ipc-debug", NULL, "set-acl-entry/dw",
+ (intmax_t)dwResult);
+ goto fail;
+ }
+
+ d->pSD = (PSECURITY_DESCRIPTOR)LocalAlloc(
+ LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH);
+ if (!InitializeSecurityDescriptor(d->pSD, SECURITY_DESCRIPTOR_REVISION)) {
+ DWORD gle = GetLastError();
+ trace2_data_intmax("ipc-debug", NULL, "init-sd/gle", (intmax_t)gle);
+ goto fail;
+ }
+
+ if (!SetSecurityDescriptorDacl(d->pSD, TRUE, d->pACL, FALSE)) {
+ DWORD gle = GetLastError();
+ trace2_data_intmax("ipc-debug", NULL, "set-sd-dacl/gle", (intmax_t)gle);
+ goto fail;
+ }
+
+ d->lpSA = (LPSECURITY_ATTRIBUTES)LocalAlloc(LPTR, sizeof(SECURITY_ATTRIBUTES));
+ d->lpSA->nLength = sizeof(SECURITY_ATTRIBUTES);
+ d->lpSA->lpSecurityDescriptor = d->pSD;
+ d->lpSA->bInheritHandle = FALSE;
+
+ return d->lpSA;
+
+fail:
+ release_sa(d);
+ return NULL;
+}
+
static HANDLE create_new_pipe(wchar_t *wpath, int is_first)
{
HANDLE hPipe;
DWORD dwOpenMode, dwPipeMode;
- LPSECURITY_ATTRIBUTES lpsa = NULL;
+ struct my_sa_data my_sa_data;
+
+ init_sa(&my_sa_data);
dwOpenMode = PIPE_ACCESS_INBOUND | PIPE_ACCESS_OUTBOUND |
FILE_FLAG_OVERLAPPED;
@@ -585,20 +735,15 @@ static HANDLE create_new_pipe(wchar_t *wpath, int is_first)
* set the ACL / Security Attributes on the named
* pipe; subsequent instances inherit and cannot
* change them.
- *
- * TODO Should we allow the application layer to
- * specify security attributes, such as `LocalService`
- * or `LocalSystem`, when we create the named pipe?
- * This question is probably not important when the
- * daemon is started by a foreground user process and
- * only needs to talk to the current user, but may be
- * if the daemon is run via the Control Panel as a
- * System Service.
*/
+ get_sa(&my_sa_data);
}
hPipe = CreateNamedPipeW(wpath, dwOpenMode, dwPipeMode,
- PIPE_UNLIMITED_INSTANCES, 1024, 1024, 0, lpsa);
+ PIPE_UNLIMITED_INSTANCES, 1024, 1024, 0,
+ my_sa_data.lpSA);
+
+ release_sa(&my_sa_data);
return hPipe;
}
diff --git a/compat/stub/procinfo.c b/compat/stub/procinfo.c
new file mode 100644
index 0000000..12c0a23
--- /dev/null
+++ b/compat/stub/procinfo.c
@@ -0,0 +1,11 @@
+#include "git-compat-util.h"
+
+#include "trace2.h"
+
+/*
+ * Stub. See sample implementations in compat/linux/procinfo.c and
+ * compat/win32/trace2_win32_process_info.c.
+ */
+void trace2_collect_process_info(enum trace2_process_info_reason reason)
+{
+}
diff --git a/compat/terminal.c b/compat/terminal.c
index 43b73dd..5b903e7 100644
--- a/compat/terminal.c
+++ b/compat/terminal.c
@@ -8,8 +8,6 @@
#if defined(HAVE_DEV_TTY) || defined(GIT_WINDOWS_NATIVE)
-static void restore_term(void);
-
static void restore_term_on_signal(int sig)
{
restore_term();
@@ -25,7 +23,7 @@ static void restore_term_on_signal(int sig)
static int term_fd = -1;
static struct termios old_term;
-static void restore_term(void)
+void restore_term(void)
{
if (term_fd < 0)
return;
@@ -35,15 +33,22 @@ static void restore_term(void)
term_fd = -1;
}
+int save_term(int full_duplex)
+{
+ if (term_fd < 0)
+ term_fd = open("/dev/tty", O_RDWR);
+
+ return (term_fd < 0) ? -1 : tcgetattr(term_fd, &old_term);
+}
+
static int disable_bits(tcflag_t bits)
{
struct termios t;
- term_fd = open("/dev/tty", O_RDWR);
- if (tcgetattr(term_fd, &t) < 0)
+ if (save_term(0) < 0)
goto error;
- old_term = t;
+ t = old_term;
sigchain_push_common(restore_term_on_signal);
t.c_lflag &= ~bits;
@@ -75,9 +80,10 @@ static int enable_non_canonical(void)
static int use_stty = 1;
static struct string_list stty_restore = STRING_LIST_INIT_DUP;
static HANDLE hconin = INVALID_HANDLE_VALUE;
-static DWORD cmode;
+static HANDLE hconout = INVALID_HANDLE_VALUE;
+static DWORD cmode_in, cmode_out;
-static void restore_term(void)
+void restore_term(void)
{
if (use_stty) {
int i;
@@ -97,9 +103,42 @@ static void restore_term(void)
if (hconin == INVALID_HANDLE_VALUE)
return;
- SetConsoleMode(hconin, cmode);
+ SetConsoleMode(hconin, cmode_in);
+ CloseHandle(hconin);
+ if (cmode_out) {
+ assert(hconout != INVALID_HANDLE_VALUE);
+ SetConsoleMode(hconout, cmode_out);
+ CloseHandle(hconout);
+ }
+
+ hconin = hconout = INVALID_HANDLE_VALUE;
+}
+
+int save_term(int full_duplex)
+{
+ hconin = CreateFileA("CONIN$", GENERIC_READ | GENERIC_WRITE,
+ FILE_SHARE_READ, NULL, OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL, NULL);
+ if (hconin == INVALID_HANDLE_VALUE)
+ return -1;
+
+ if (full_duplex) {
+ hconout = CreateFileA("CONOUT$", GENERIC_READ | GENERIC_WRITE,
+ FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL, NULL);
+ if (hconout == INVALID_HANDLE_VALUE)
+ goto error;
+
+ GetConsoleMode(hconout, &cmode_out);
+ }
+
+ GetConsoleMode(hconin, &cmode_in);
+ use_stty = 0;
+ return 0;
+error:
CloseHandle(hconin);
hconin = INVALID_HANDLE_VALUE;
+ return -1;
}
static int disable_bits(DWORD bits)
@@ -135,15 +174,11 @@ static int disable_bits(DWORD bits)
use_stty = 0;
}
- hconin = CreateFile("CONIN$", GENERIC_READ | GENERIC_WRITE,
- FILE_SHARE_READ, NULL, OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL, NULL);
- if (hconin == INVALID_HANDLE_VALUE)
+ if (save_term(0) < 0)
return -1;
- GetConsoleMode(hconin, &cmode);
sigchain_push_common(restore_term_on_signal);
- if (!SetConsoleMode(hconin, cmode & ~bits)) {
+ if (!SetConsoleMode(hconin, cmode_in & ~bits)) {
CloseHandle(hconin);
hconin = INVALID_HANDLE_VALUE;
return -1;
@@ -361,6 +396,16 @@ int read_key_without_echo(struct strbuf *buf)
#else
+int save_term(int full_duplex)
+{
+ /* full_duplex == 1, but no support available */
+ return -full_duplex;
+}
+
+void restore_term(void)
+{
+}
+
char *git_terminal_prompt(const char *prompt, int echo)
{
return getpass(prompt);
diff --git a/compat/terminal.h b/compat/terminal.h
index a9d52b8..e1770c5 100644
--- a/compat/terminal.h
+++ b/compat/terminal.h
@@ -1,6 +1,9 @@
#ifndef COMPAT_TERMINAL_H
#define COMPAT_TERMINAL_H
+int save_term(int full_duplex);
+void restore_term(void);
+
char *git_terminal_prompt(const char *prompt, int echo);
/* Read a single keystroke, without echoing it to the terminal */
diff --git a/compat/vcbuild/README b/compat/vcbuild/README
index 51fb083..29ec1d0 100644
--- a/compat/vcbuild/README
+++ b/compat/vcbuild/README
@@ -92,7 +92,7 @@
the git operations.
3. Inside Git's directory run the command:
- make command-list.h config-list.h
+ make generated-hdrs
to generate the header file needed to compile git.
4. Then either build Git with the GNU Make Makefile in the Git projects
diff --git a/compat/win32/lazyload.h b/compat/win32/lazyload.h
index 9e631c8..2b36371 100644
--- a/compat/win32/lazyload.h
+++ b/compat/win32/lazyload.h
@@ -15,10 +15,12 @@
* source, target);
*/
+typedef void (*FARVOIDPROC)(void);
+
struct proc_addr {
const char *const dll;
const char *const function;
- FARPROC pfunction;
+ FARVOIDPROC pfunction;
unsigned initialized : 1;
};
@@ -26,7 +28,8 @@ struct proc_addr {
#define DECLARE_PROC_ADDR(dll, rettype, function, ...) \
static struct proc_addr proc_addr_##function = \
{ #dll, #function, NULL, 0 }; \
- static rettype (WINAPI *function)(__VA_ARGS__)
+ typedef rettype (WINAPI *proc_type_##function)(__VA_ARGS__); \
+ static proc_type_##function function
/*
* Loads a function from a DLL (once-only).
@@ -35,9 +38,9 @@ struct proc_addr {
* This function is not thread-safe.
*/
#define INIT_PROC_ADDR(function) \
- (function = get_proc_addr(&proc_addr_##function))
+ (function = (proc_type_##function)get_proc_addr(&proc_addr_##function))
-static inline void *get_proc_addr(struct proc_addr *proc)
+static inline FARVOIDPROC get_proc_addr(struct proc_addr *proc)
{
/* only do this once */
if (!proc->initialized) {
@@ -46,7 +49,8 @@ static inline void *get_proc_addr(struct proc_addr *proc)
hnd = LoadLibraryExA(proc->dll, NULL,
LOAD_LIBRARY_SEARCH_SYSTEM32);
if (hnd)
- proc->pfunction = GetProcAddress(hnd, proc->function);
+ proc->pfunction = (FARVOIDPROC)GetProcAddress(hnd,
+ proc->function);
}
/* set ENOSYS if DLL or function was not found */
if (!proc->pfunction)
diff --git a/config.c b/config.c
index 7a6ff18..c5873f3 100644
--- a/config.c
+++ b/config.c
@@ -136,7 +136,7 @@ static int handle_path_include(const char *path, struct config_include_data *inc
if (!path)
return config_error_nonbool("include.path");
- expanded = expand_user_path(path, 0);
+ expanded = interpolate_path(path, 0);
if (!expanded)
return error(_("could not expand include path '%s'"), path);
path = expanded;
@@ -148,8 +148,10 @@ static int handle_path_include(const char *path, struct config_include_data *inc
if (!is_absolute_path(path)) {
char *slash;
- if (!cf || !cf->path)
- return error(_("relative config includes must come from files"));
+ if (!cf || !cf->path) {
+ ret = error(_("relative config includes must come from files"));
+ goto cleanup;
+ }
slash = find_last_dir_sep(cf->path);
if (slash)
@@ -167,6 +169,7 @@ static int handle_path_include(const char *path, struct config_include_data *inc
ret = git_config_from_file(git_config_include, path, inc);
inc->depth--;
}
+cleanup:
strbuf_release(&buf);
free(expanded);
return ret;
@@ -184,7 +187,7 @@ static int prepare_include_condition_pattern(struct strbuf *pat)
char *expanded;
int prefix = 0;
- expanded = expand_user_path(pat->buf, 1);
+ expanded = interpolate_path(pat->buf, 1);
if (expanded) {
strbuf_reset(pat);
strbuf_addstr(pat, expanded);
@@ -425,7 +428,7 @@ static inline int iskeychar(int c)
* baselen - pointer to size_t which will hold the length of the
* section + subsection part, can be NULL
*/
-static int git_config_parse_key_1(const char *key, char **store_key, size_t *baselen_, int quiet)
+int git_config_parse_key(const char *key, char **store_key, size_t *baselen_)
{
size_t i, baselen;
int dot;
@@ -437,14 +440,12 @@ static int git_config_parse_key_1(const char *key, char **store_key, size_t *bas
*/
if (last_dot == NULL || last_dot == key) {
- if (!quiet)
- error(_("key does not contain a section: %s"), key);
+ error(_("key does not contain a section: %s"), key);
return -CONFIG_NO_SECTION_OR_NAME;
}
if (!last_dot[1]) {
- if (!quiet)
- error(_("key does not contain variable name: %s"), key);
+ error(_("key does not contain variable name: %s"), key);
return -CONFIG_NO_SECTION_OR_NAME;
}
@@ -455,8 +456,7 @@ static int git_config_parse_key_1(const char *key, char **store_key, size_t *bas
/*
* Validate the key and while at it, lower case it for matching.
*/
- if (store_key)
- *store_key = xmallocz(strlen(key));
+ *store_key = xmallocz(strlen(key));
dot = 0;
for (i = 0; key[i]; i++) {
@@ -467,39 +467,24 @@ static int git_config_parse_key_1(const char *key, char **store_key, size_t *bas
if (!dot || i > baselen) {
if (!iskeychar(c) ||
(i == baselen + 1 && !isalpha(c))) {
- if (!quiet)
- error(_("invalid key: %s"), key);
+ error(_("invalid key: %s"), key);
goto out_free_ret_1;
}
c = tolower(c);
} else if (c == '\n') {
- if (!quiet)
- error(_("invalid key (newline): %s"), key);
+ error(_("invalid key (newline): %s"), key);
goto out_free_ret_1;
}
- if (store_key)
- (*store_key)[i] = c;
+ (*store_key)[i] = c;
}
return 0;
out_free_ret_1:
- if (store_key) {
- FREE_AND_NULL(*store_key);
- }
+ FREE_AND_NULL(*store_key);
return -CONFIG_INVALID_KEY;
}
-int git_config_parse_key(const char *key, char **store_key, size_t *baselen)
-{
- return git_config_parse_key_1(key, store_key, baselen, 0);
-}
-
-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)
{
@@ -1269,7 +1254,7 @@ int git_config_pathname(const char **dest, const char *var, const char *value)
{
if (!value)
return config_error_nonbool(var);
- *dest = expand_user_path(value, 0);
+ *dest = interpolate_path(value, 0);
if (!*dest)
die(_("failed to expand user dir in: '%s'"), value);
return 0;
@@ -1793,6 +1778,7 @@ int git_config_from_mem(config_fn_t fn,
int git_config_from_blob_oid(config_fn_t fn,
const char *name,
+ struct repository *repo,
const struct object_id *oid,
void *data)
{
@@ -1801,7 +1787,7 @@ int git_config_from_blob_oid(config_fn_t fn,
unsigned long size;
int ret;
- buf = read_object_file(oid, &type, &size);
+ buf = repo_read_object_file(repo, oid, &type, &size);
if (!buf)
return error(_("unable to load config blob object '%s'"), name);
if (type != OBJ_BLOB) {
@@ -1817,14 +1803,15 @@ int git_config_from_blob_oid(config_fn_t fn,
}
static int git_config_from_blob_ref(config_fn_t fn,
+ struct repository *repo,
const char *name,
void *data)
{
struct object_id oid;
- if (get_oid(name, &oid) < 0)
+ if (repo_get_oid(repo, name, &oid) < 0)
return error(_("unable to resolve config blob '%s'"), name);
- return git_config_from_blob_oid(fn, name, &oid, data);
+ return git_config_from_blob_oid(fn, name, repo, &oid, data);
}
char *git_system_config(void)
@@ -1842,7 +1829,7 @@ void git_global_config(char **user_out, char **xdg_out)
char *xdg_config = NULL;
if (!user_config) {
- user_config = expand_user_path("~/.gitconfig", 0);
+ user_config = interpolate_path("~/.gitconfig", 0);
xdg_config = xdg_config_home("config");
}
@@ -1955,12 +1942,16 @@ int config_with_options(config_fn_t fn, void *data,
* If we have a specific filename, use it. Otherwise, follow the
* regular lookup sequence.
*/
- if (config_source && config_source->use_stdin)
+ if (config_source && config_source->use_stdin) {
return git_config_from_stdin(fn, data);
- else if (config_source && config_source->file)
+ } else if (config_source && config_source->file) {
return git_config_from_file(fn, config_source->file, data);
- else if (config_source && config_source->blob)
- return git_config_from_blob_ref(fn, config_source->blob, data);
+ } else if (config_source && config_source->blob) {
+ struct repository *repo = config_source->repo ?
+ config_source->repo : the_repository;
+ return git_config_from_blob_ref(fn, repo, config_source->blob,
+ data);
+ }
return do_git_config_sequence(opts, fn, data);
}
diff --git a/config.h b/config.h
index a2200f3..f119de0 100644
--- a/config.h
+++ b/config.h
@@ -49,6 +49,8 @@ const char *config_scope_name(enum config_scope scope);
struct git_config_source {
unsigned int use_stdin:1;
const char *file;
+ /* The repository if blob is not NULL; leave blank for the_repository */
+ struct repository *repo;
const char *blob;
enum config_scope scope;
};
@@ -136,6 +138,7 @@ int git_config_from_mem(config_fn_t fn,
const char *buf, size_t len,
void *data, const struct config_options *opts);
int git_config_from_blob_oid(config_fn_t fn, const char *name,
+ struct repository *repo,
const struct object_id *oid, void *data);
void git_config_push_parameter(const char *text);
void git_config_push_env(const char *spec);
@@ -256,7 +259,6 @@ int git_config_set_gently(const char *, const char *);
void git_config_set(const char *, const char *);
int git_config_parse_key(const char *, char **, size_t *);
-int git_config_key_is_valid(const char *key);
/*
* The following macros specify flag bits that alter the behavior
@@ -606,7 +608,6 @@ int git_config_get_maybe_bool(const char *key, int *dest);
int git_config_get_pathname(const char *key, const char **dest);
int git_config_get_index_threads(int *dest);
-int git_config_get_untracked_cache(void);
int git_config_get_split_index(void);
int git_config_get_max_percent_split_change(void);
int git_config_get_fsmonitor(void);
diff --git a/config.mak.dev b/config.mak.dev
index 022fb58..7673fed 100644
--- a/config.mak.dev
+++ b/config.mak.dev
@@ -1,13 +1,24 @@
+ifndef COMPILER_FEATURES
+COMPILER_FEATURES := $(shell ./detect-compiler $(CC))
+endif
+
ifeq ($(filter no-error,$(DEVOPTS)),)
DEVELOPER_CFLAGS += -Werror
SPARSE_FLAGS += -Wsparse-error
endif
-ifneq ($(filter pedantic,$(DEVOPTS)),)
-DEVELOPER_CFLAGS += -pedantic
-# don't warn for each N_ use
-DEVELOPER_CFLAGS += -DUSE_PARENS_AROUND_GETTEXT_N=0
-endif
+
DEVELOPER_CFLAGS += -Wall
+ifeq ($(filter no-pedantic,$(DEVOPTS)),)
+DEVELOPER_CFLAGS += -pedantic
+ifneq (($or $(filter gcc5,$(COMPILER_FEATURES)),$(filter clang4,$(COMPILER_FEATURES))),)
+DEVELOPER_CFLAGS += -Wpedantic
+ifneq ($(filter gcc10,$(COMPILER_FEATURES)),)
+ifeq ($(uname_S),MINGW)
+DEVELOPER_CFLAGS += -Wno-pedantic-ms-format
+endif
+endif
+endif
+endif
DEVELOPER_CFLAGS += -Wdeclaration-after-statement
DEVELOPER_CFLAGS += -Wformat-security
DEVELOPER_CFLAGS += -Wold-style-definition
@@ -18,10 +29,6 @@
DEVELOPER_CFLAGS += -Wvla
DEVELOPER_CFLAGS += -fno-common
-ifndef COMPILER_FEATURES
-COMPILER_FEATURES := $(shell ./detect-compiler $(CC))
-endif
-
ifneq ($(filter clang4,$(COMPILER_FEATURES)),)
DEVELOPER_CFLAGS += -Wtautological-constant-out-of-range-compare
endif
diff --git a/config.mak.uname b/config.mak.uname
index 69413fb..3236a49 100644
--- a/config.mak.uname
+++ b/config.mak.uname
@@ -11,6 +11,10 @@
uname_P := $(shell sh -c 'uname -p 2>/dev/null || echo not')
uname_V := $(shell sh -c 'uname -v 2>/dev/null || echo not')
+ifneq ($(findstring MINGW,$(uname_S)),)
+ uname_S := MINGW
+endif
+
ifdef MSVC
# avoid the MingW and Cygwin configuration sections
uname_S := Windows
@@ -58,6 +62,8 @@
FREAD_READS_DIRECTORIES = UnfortunatelyYes
BASIC_CFLAGS += -DHAVE_SYSINFO
PROCFS_EXECUTABLE_PATH = /proc/self/exe
+ HAVE_PLATFORM_PROCINFO = YesPlease
+ COMPAT_OBJS += compat/linux/procinfo.o
endif
ifeq ($(uname_S),GNU/kFreeBSD)
HAVE_ALLOCA_H = YesPlease
@@ -586,7 +592,7 @@
SANE_TOOL_PATH = /usr/coreutils/bin:/usr/local/bin
SHELL_PATH = /usr/coreutils/bin/bash
endif
-ifneq (,$(findstring MINGW,$(uname_S)))
+ifeq ($(uname_S),MINGW)
pathsep = ;
HAVE_ALLOCA_H = YesPlease
NO_PREAD = YesPlease
@@ -617,6 +623,7 @@
ETAGS_TARGET = ETAGS
NO_POSIX_GOODIES = UnfortunatelyYes
DEFAULT_HELP_FORMAT = html
+ HAVE_PLATFORM_PROCINFO = YesPlease
BASIC_LDFLAGS += -municode
COMPAT_CFLAGS += -DNOGDI -Icompat -Icompat/win32
COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
@@ -732,9 +739,9 @@
echo '</Project>') >git-remote-http/LinkOrCopyRemoteHttp.targets
git add -f git/LinkOrCopyBuiltins.targets git-remote-http/LinkOrCopyRemoteHttp.targets
- # Add command-list.h and config-list.h
- $(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 config-list.h command-list.h
- git add -f config-list.h command-list.h
+ # Add generated headers
+ $(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 $(GENERATED_H)
+ git add -f $(GENERATED_H)
# Add scripts
rm -f perl/perl.mak
diff --git a/connected.c b/connected.c
index b18299f..35bd4a2 100644
--- a/connected.c
+++ b/connected.c
@@ -24,7 +24,7 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
struct child_process rev_list = CHILD_PROCESS_INIT;
FILE *rev_list_in;
struct check_connected_options defaults = CHECK_CONNECTED_INIT;
- struct object_id oid;
+ const struct object_id *oid;
int err = 0;
struct packed_git *new_pack = NULL;
struct transport *transport;
@@ -34,7 +34,8 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
opt = &defaults;
transport = opt->transport;
- if (fn(cb_data, &oid)) {
+ oid = fn(cb_data);
+ if (!oid) {
if (opt->err_fd)
close(opt->err_fd);
return err;
@@ -73,7 +74,7 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
for (p = get_all_packs(the_repository); p; p = p->next) {
if (!p->pack_promisor)
continue;
- if (find_pack_entry_one(oid.hash, p))
+ if (find_pack_entry_one(oid->hash, p))
goto promisor_pack_found;
}
/*
@@ -83,7 +84,7 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
goto no_promisor_pack_found;
promisor_pack_found:
;
- } while (!fn(cb_data, &oid));
+ } while ((oid = fn(cb_data)) != NULL);
return 0;
}
@@ -132,12 +133,12 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
* are sure the ref is good and not sending it to
* rev-list for verification.
*/
- if (new_pack && find_pack_entry_one(oid.hash, new_pack))
+ if (new_pack && find_pack_entry_one(oid->hash, new_pack))
continue;
- if (fprintf(rev_list_in, "%s\n", oid_to_hex(&oid)) < 0)
+ if (fprintf(rev_list_in, "%s\n", oid_to_hex(oid)) < 0)
break;
- } while (!fn(cb_data, &oid));
+ } while ((oid = fn(cb_data)) != NULL);
if (ferror(rev_list_in) || fflush(rev_list_in)) {
if (errno != EPIPE && errno != EINVAL)
diff --git a/connected.h b/connected.h
index 8d5a6b3..6e59c92 100644
--- a/connected.h
+++ b/connected.h
@@ -9,7 +9,7 @@ struct transport;
* When called after returning the name for the last object, return -1
* to signal EOF, otherwise return 0.
*/
-typedef int (*oid_iterate_fn)(void *, struct object_id *oid);
+typedef const struct object_id *(*oid_iterate_fn)(void *);
/*
* Named-arguments struct for check_connected. All arguments are
diff --git a/contrib/buildsystems/CMakeLists.txt b/contrib/buildsystems/CMakeLists.txt
index 171b412..fd1399c 100644
--- a/contrib/buildsystems/CMakeLists.txt
+++ b/contrib/buildsystems/CMakeLists.txt
@@ -624,6 +624,13 @@
OUTPUT_FILE ${CMAKE_BINARY_DIR}/config-list.h)
endif()
+if(NOT EXISTS ${CMAKE_BINARY_DIR}/hook-list.h)
+ message("Generating hook-list.h")
+ execute_process(COMMAND ${SH_EXE} ${CMAKE_SOURCE_DIR}/generate-hooklist.sh
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ OUTPUT_FILE ${CMAKE_BINARY_DIR}/hook-list.h)
+endif()
+
include_directories(${CMAKE_BINARY_DIR})
#build
diff --git a/contrib/coccinelle/xopen.cocci b/contrib/coccinelle/xopen.cocci
index 814d7b8..b71db67 100644
--- a/contrib/coccinelle/xopen.cocci
+++ b/contrib/coccinelle/xopen.cocci
@@ -2,15 +2,18 @@
identifier fd;
identifier die_fn =~ "^(die|die_errno)$";
@@
-(
- fd =
-- open
-+ xopen
- (...);
-|
int fd =
- open
+ xopen
(...);
-)
+- if ( \( fd < 0 \| fd == -1 \) ) { die_fn(...); }
+
+@@
+expression fd;
+identifier die_fn =~ "^(die|die_errno)$";
+@@
+ fd =
+- open
++ xopen
+ (...);
- if ( \( fd < 0 \| fd == -1 \) ) { die_fn(...); }
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 8108eda..7c3a753 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -515,7 +515,7 @@
# argument, and using the options specified in the second argument.
__git_ls_files_helper ()
{
- if [ "$2" == "--committable" ]; then
+ if [ "$2" = "--committable" ]; then
__git -C "$1" -c core.quotePath=false diff-index \
--name-only --relative HEAD -- "${3//\\/\\\\}*"
else
@@ -2503,7 +2503,14 @@
__git_compute_config_vars ()
{
test -n "$__git_config_vars" ||
- __git_config_vars="$(git help --config-for-completion | sort -u)"
+ __git_config_vars="$(git help --config-for-completion)"
+}
+
+__git_config_sections=
+__git_compute_config_sections ()
+{
+ test -n "$__git_config_sections" ||
+ __git_config_sections="$(git help --config-sections-for-completion)"
}
# Completes possible values of various configuration variables.
@@ -2543,7 +2550,7 @@
return
;;
branch.*.rebase)
- __gitcomp "false true merges preserve interactive" "" "$cur_"
+ __gitcomp "false true merges interactive" "" "$cur_"
return
;;
remote.pushdefault)
@@ -2717,16 +2724,8 @@
__gitcomp "$__git_config_vars" "" "$cur_" "$sfx"
;;
*)
- __git_compute_config_vars
- __gitcomp "$(echo "$__git_config_vars" |
- awk -F . '{
- sections[$1] = 1
- }
- END {
- for (s in sections)
- print s "."
- }
- ')" "" "$cur_"
+ __git_compute_config_sections
+ __gitcomp "$__git_config_sections" "" "$cur_" "."
;;
esac
}
diff --git a/contrib/credential/gnome-keyring/git-credential-gnome-keyring.c b/contrib/credential/gnome-keyring/git-credential-gnome-keyring.c
index d389bfa..5927e27 100644
--- a/contrib/credential/gnome-keyring/git-credential-gnome-keyring.c
+++ b/contrib/credential/gnome-keyring/git-credential-gnome-keyring.c
@@ -138,7 +138,7 @@ struct credential {
char *password;
};
-#define CREDENTIAL_INIT { NULL, NULL, 0, NULL, NULL, NULL }
+#define CREDENTIAL_INIT { 0 }
typedef int (*credential_op_cb)(struct credential *);
diff --git a/contrib/credential/libsecret/git-credential-libsecret.c b/contrib/credential/libsecret/git-credential-libsecret.c
index e6598b6..2c5d76d 100644
--- a/contrib/credential/libsecret/git-credential-libsecret.c
+++ b/contrib/credential/libsecret/git-credential-libsecret.c
@@ -41,7 +41,7 @@ struct credential {
char *password;
};
-#define CREDENTIAL_INIT { NULL, NULL, 0, NULL, NULL, NULL }
+#define CREDENTIAL_INIT { 0 }
typedef int (*credential_op_cb)(struct credential *);
diff --git a/contrib/rerere-train.sh b/contrib/rerere-train.sh
index eeee45d..75125d6 100755
--- a/contrib/rerere-train.sh
+++ b/contrib/rerere-train.sh
@@ -91,7 +91,7 @@
git checkout -q $commit -- .
git rerere
fi
- git reset -q --hard
+ git reset -q --hard # Might nuke untracked files...
done
if test -z "$branch"
diff --git a/credential.c b/credential.c
index 000ac7a..e7240f3 100644
--- a/credential.c
+++ b/credential.c
@@ -105,7 +105,7 @@ static int match_partial_url(const char *url, void *cb)
static void credential_apply_config(struct credential *c)
{
char *normalized_url;
- struct urlmatch_config config = { STRING_LIST_INIT_DUP };
+ struct urlmatch_config config = URLMATCH_CONFIG_INIT;
struct strbuf url = STRBUF_INIT;
if (!c->host)
diff --git a/daemon.c b/daemon.c
index 5c4cbad..b1fcbe0 100644
--- a/daemon.c
+++ b/daemon.c
@@ -63,6 +63,12 @@ struct hostinfo {
unsigned int hostname_lookup_done:1;
unsigned int saw_extended_args:1;
};
+#define HOSTINFO_INIT { \
+ .hostname = STRBUF_INIT, \
+ .canon_hostname = STRBUF_INIT, \
+ .ip_address = STRBUF_INIT, \
+ .tcp_port = STRBUF_INIT, \
+}
static void lookup_hostname(struct hostinfo *hi);
@@ -727,15 +733,6 @@ static void lookup_hostname(struct hostinfo *hi)
}
}
-static void hostinfo_init(struct hostinfo *hi)
-{
- memset(hi, 0, sizeof(*hi));
- strbuf_init(&hi->hostname, 0);
- strbuf_init(&hi->canon_hostname, 0);
- strbuf_init(&hi->ip_address, 0);
- strbuf_init(&hi->tcp_port, 0);
-}
-
static void hostinfo_clear(struct hostinfo *hi)
{
strbuf_release(&hi->hostname);
@@ -760,17 +757,15 @@ static int execute(void)
char *line = packet_buffer;
int pktlen, len, i;
char *addr = getenv("REMOTE_ADDR"), *port = getenv("REMOTE_PORT");
- struct hostinfo hi;
+ struct hostinfo hi = HOSTINFO_INIT;
struct strvec env = STRVEC_INIT;
- hostinfo_init(&hi);
-
if (addr)
loginfo("Connection from %s:%s", addr, port);
set_keep_alive(0);
alarm(init_timeout ? init_timeout : timeout);
- pktlen = packet_read(0, NULL, NULL, packet_buffer, sizeof(packet_buffer), 0);
+ pktlen = packet_read(0, packet_buffer, sizeof(packet_buffer), 0);
alarm(0);
len = strlen(line);
diff --git a/diff.c b/diff.c
index a8113f1..861282d 100644
--- a/diff.c
+++ b/diff.c
@@ -26,6 +26,7 @@
#include "parse-options.h"
#include "help.h"
#include "promisor-remote.h"
+#include "dir.h"
#ifdef NO_FAST_WORKING_DIRECTORY
#define FAST_WORKING_DIRECTORY 0
@@ -774,13 +775,13 @@ struct emitted_diff_symbol {
int indent_width; /* The visual width of the indentation */
enum diff_symbol s;
};
-#define EMITTED_DIFF_SYMBOL_INIT {NULL}
+#define EMITTED_DIFF_SYMBOL_INIT { 0 }
struct emitted_diff_symbols {
struct emitted_diff_symbol *buf;
int nr, alloc;
};
-#define EMITTED_DIFF_SYMBOLS_INIT {NULL, 0, 0}
+#define EMITTED_DIFF_SYMBOLS_INIT { 0 }
static void append_emitted_diff_symbol(struct diff_options *o,
struct emitted_diff_symbol *e)
@@ -3907,6 +3908,13 @@ static int reuse_worktree_file(struct index_state *istate,
if (!want_file && would_convert_to_git(istate, name))
return 0;
+ /*
+ * If this path does not match our sparse-checkout definition,
+ * then the file will not be in the working directory.
+ */
+ if (!path_in_sparse_checkout(name, istate))
+ return 0;
+
len = strlen(name);
pos = index_name_pos(istate, name, len);
if (pos < 0)
diff --git a/diffcore-rename.c b/diffcore-rename.c
index c95857b..bebd4ed 100644
--- a/diffcore-rename.c
+++ b/diffcore-rename.c
@@ -317,10 +317,11 @@ static int find_identical_files(struct hashmap *srcs,
}
static void insert_file_table(struct repository *r,
+ struct mem_pool *pool,
struct hashmap *table, int index,
struct diff_filespec *filespec)
{
- struct file_similarity *entry = xmalloc(sizeof(*entry));
+ struct file_similarity *entry = mem_pool_alloc(pool, sizeof(*entry));
entry->index = index;
entry->filespec = filespec;
@@ -336,7 +337,8 @@ static void insert_file_table(struct repository *r,
* and then during the second round we try to match
* cache-dirty entries as well.
*/
-static int find_exact_renames(struct diff_options *options)
+static int find_exact_renames(struct diff_options *options,
+ struct mem_pool *pool)
{
int i, renames = 0;
struct hashmap file_table;
@@ -346,7 +348,7 @@ static int find_exact_renames(struct diff_options *options)
*/
hashmap_init(&file_table, NULL, NULL, rename_src_nr);
for (i = rename_src_nr-1; i >= 0; i--)
- insert_file_table(options->repo,
+ insert_file_table(options->repo, pool,
&file_table, i,
rename_src[i].p->one);
@@ -354,8 +356,8 @@ static int find_exact_renames(struct diff_options *options)
for (i = 0; i < rename_dst_nr; i++)
renames += find_identical_files(&file_table, i, options);
- /* Free the hash data structure and entries */
- hashmap_clear_and_free(&file_table, struct file_similarity, entry);
+ /* Free the hash data structure (entries will be freed with the pool) */
+ hashmap_clear(&file_table);
return renames;
}
@@ -1330,7 +1332,47 @@ static void handle_early_known_dir_renames(struct dir_rename_info *info,
rename_src_nr = new_num_src;
}
+static void free_filespec_data(struct diff_filespec *spec)
+{
+ if (!--spec->count)
+ diff_free_filespec_data(spec);
+}
+
+static void pool_free_filespec(struct mem_pool *pool,
+ struct diff_filespec *spec)
+{
+ if (!pool) {
+ free_filespec(spec);
+ return;
+ }
+
+ /*
+ * Similar to free_filespec(), but only frees the data. The spec
+ * itself was allocated in the pool and should not be individually
+ * freed.
+ */
+ free_filespec_data(spec);
+}
+
+void pool_diff_free_filepair(struct mem_pool *pool,
+ struct diff_filepair *p)
+{
+ if (!pool) {
+ diff_free_filepair(p);
+ return;
+ }
+
+ /*
+ * Similar to diff_free_filepair() but only frees the data from the
+ * filespecs; not the filespecs or the filepair which were
+ * allocated from the pool.
+ */
+ free_filespec_data(p->one);
+ free_filespec_data(p->two);
+}
+
void diffcore_rename_extended(struct diff_options *options,
+ struct mem_pool *pool,
struct strintmap *relevant_sources,
struct strintmap *dirs_removed,
struct strmap *dir_rename_count,
@@ -1345,6 +1387,7 @@ void diffcore_rename_extended(struct diff_options *options,
int num_destinations, dst_cnt;
int num_sources, want_copies;
struct progress *progress = NULL;
+ struct mem_pool local_pool;
struct dir_rename_info info;
struct diff_populate_filespec_options dpf_options = {
.check_binary = 0,
@@ -1413,11 +1456,18 @@ void diffcore_rename_extended(struct diff_options *options,
goto cleanup; /* nothing to do */
trace2_region_enter("diff", "exact renames", options->repo);
+ mem_pool_init(&local_pool, 32*1024);
/*
* We really want to cull the candidates list early
* with cheap tests in order to avoid doing deltas.
*/
- rename_count = find_exact_renames(options);
+ rename_count = find_exact_renames(options, &local_pool);
+ /*
+ * Discard local_pool immediately instead of at "cleanup:" in order
+ * to reduce maximum memory usage; inexact rename detection uses up
+ * a fair amount of memory, and mem_pools can too.
+ */
+ mem_pool_discard(&local_pool, 0);
trace2_region_leave("diff", "exact renames", options->repo);
/* Did we only want exact renames? */
@@ -1636,7 +1686,7 @@ void diffcore_rename_extended(struct diff_options *options,
pair_to_free = p;
if (pair_to_free)
- diff_free_filepair(pair_to_free);
+ pool_diff_free_filepair(pool, pair_to_free);
}
diff_debug_queue("done copying original", &outq);
@@ -1646,7 +1696,7 @@ void diffcore_rename_extended(struct diff_options *options,
for (i = 0; i < rename_dst_nr; i++)
if (rename_dst[i].filespec_to_free)
- free_filespec(rename_dst[i].filespec_to_free);
+ pool_free_filespec(pool, rename_dst[i].filespec_to_free);
cleanup_dir_rename_info(&info, dirs_removed, dir_rename_count != NULL);
FREE_AND_NULL(rename_dst);
@@ -1663,5 +1713,5 @@ void diffcore_rename_extended(struct diff_options *options,
void diffcore_rename(struct diff_options *options)
{
- diffcore_rename_extended(options, NULL, NULL, NULL, NULL);
+ diffcore_rename_extended(options, NULL, NULL, NULL, NULL, NULL);
}
diff --git a/diffcore.h b/diffcore.h
index 533b30e..badc226 100644
--- a/diffcore.h
+++ b/diffcore.h
@@ -127,6 +127,8 @@ struct diff_filepair {
#define DIFF_PAIR_MODE_CHANGED(p) ((p)->one->mode != (p)->two->mode)
void diff_free_filepair(struct diff_filepair *);
+void pool_diff_free_filepair(struct mem_pool *pool,
+ struct diff_filepair *p);
int diff_unmodified_pair(struct diff_filepair *);
@@ -179,6 +181,7 @@ void partial_clear_dir_rename_count(struct strmap *dir_rename_count);
void diffcore_break(struct repository *, int);
void diffcore_rename(struct diff_options *);
void diffcore_rename_extended(struct diff_options *options,
+ struct mem_pool *pool,
struct strintmap *relevant_sources,
struct strintmap *dirs_removed,
struct strmap *dir_rename_count,
diff --git a/dir.c b/dir.c
index 03c4d21..5aa6fba 100644
--- a/dir.c
+++ b/dir.c
@@ -1439,6 +1439,75 @@ enum pattern_match_result path_matches_pattern_list(
return result;
}
+int init_sparse_checkout_patterns(struct index_state *istate)
+{
+ if (!core_apply_sparse_checkout)
+ return 1;
+ if (istate->sparse_checkout_patterns)
+ return 0;
+
+ CALLOC_ARRAY(istate->sparse_checkout_patterns, 1);
+
+ if (get_sparse_checkout_patterns(istate->sparse_checkout_patterns) < 0) {
+ FREE_AND_NULL(istate->sparse_checkout_patterns);
+ return -1;
+ }
+
+ return 0;
+}
+
+static int path_in_sparse_checkout_1(const char *path,
+ struct index_state *istate,
+ int require_cone_mode)
+{
+ int dtype = DT_REG;
+ enum pattern_match_result match = UNDECIDED;
+ const char *end, *slash;
+
+ /*
+ * We default to accepting a path if there are no patterns or
+ * they are of the wrong type.
+ */
+ if (init_sparse_checkout_patterns(istate) ||
+ (require_cone_mode &&
+ !istate->sparse_checkout_patterns->use_cone_patterns))
+ return 1;
+
+ /*
+ * If UNDECIDED, use the match from the parent dir (recursively), or
+ * fall back to NOT_MATCHED at the topmost level. Note that cone mode
+ * never returns UNDECIDED, so we will execute only one iteration in
+ * this case.
+ */
+ for (end = path + strlen(path);
+ end > path && match == UNDECIDED;
+ end = slash) {
+
+ for (slash = end - 1; slash > path && *slash != '/'; slash--)
+ ; /* do nothing */
+
+ match = path_matches_pattern_list(path, end - path,
+ slash > path ? slash + 1 : path, &dtype,
+ istate->sparse_checkout_patterns, istate);
+
+ /* We are going to match the parent dir now */
+ dtype = DT_DIR;
+ }
+ return match > 0;
+}
+
+int path_in_sparse_checkout(const char *path,
+ struct index_state *istate)
+{
+ return path_in_sparse_checkout_1(path, istate, 0);
+}
+
+int path_in_cone_mode_sparse_checkout(const char *path,
+ struct index_state *istate)
+{
+ return path_in_sparse_checkout_1(path, istate, 1);
+}
+
static struct path_pattern *last_matching_pattern_from_lists(
struct dir_struct *dir, struct index_state *istate,
const char *pathname, int pathlen,
@@ -2970,6 +3039,120 @@ int is_empty_dir(const char *path)
return ret;
}
+char *git_url_basename(const char *repo, int is_bundle, int is_bare)
+{
+ const char *end = repo + strlen(repo), *start, *ptr;
+ size_t len;
+ char *dir;
+
+ /*
+ * Skip scheme.
+ */
+ start = strstr(repo, "://");
+ if (start == NULL)
+ start = repo;
+ else
+ start += 3;
+
+ /*
+ * Skip authentication data. The stripping does happen
+ * greedily, such that we strip up to the last '@' inside
+ * the host part.
+ */
+ for (ptr = start; ptr < end && !is_dir_sep(*ptr); ptr++) {
+ if (*ptr == '@')
+ start = ptr + 1;
+ }
+
+ /*
+ * Strip trailing spaces, slashes and /.git
+ */
+ while (start < end && (is_dir_sep(end[-1]) || isspace(end[-1])))
+ end--;
+ if (end - start > 5 && is_dir_sep(end[-5]) &&
+ !strncmp(end - 4, ".git", 4)) {
+ end -= 5;
+ while (start < end && is_dir_sep(end[-1]))
+ end--;
+ }
+
+ /*
+ * Strip trailing port number if we've got only a
+ * hostname (that is, there is no dir separator but a
+ * colon). This check is required such that we do not
+ * strip URI's like '/foo/bar:2222.git', which should
+ * result in a dir '2222' being guessed due to backwards
+ * compatibility.
+ */
+ if (memchr(start, '/', end - start) == NULL
+ && memchr(start, ':', end - start) != NULL) {
+ ptr = end;
+ while (start < ptr && isdigit(ptr[-1]) && ptr[-1] != ':')
+ ptr--;
+ if (start < ptr && ptr[-1] == ':')
+ end = ptr - 1;
+ }
+
+ /*
+ * Find last component. To remain backwards compatible we
+ * also regard colons as path separators, such that
+ * cloning a repository 'foo:bar.git' would result in a
+ * directory 'bar' being guessed.
+ */
+ ptr = end;
+ while (start < ptr && !is_dir_sep(ptr[-1]) && ptr[-1] != ':')
+ ptr--;
+ start = ptr;
+
+ /*
+ * Strip .{bundle,git}.
+ */
+ len = end - start;
+ strip_suffix_mem(start, &len, is_bundle ? ".bundle" : ".git");
+
+ if (!len || (len == 1 && *start == '/'))
+ die(_("No directory name could be guessed.\n"
+ "Please specify a directory on the command line"));
+
+ if (is_bare)
+ dir = xstrfmt("%.*s.git", (int)len, start);
+ else
+ dir = xstrndup(start, len);
+ /*
+ * Replace sequences of 'control' characters and whitespace
+ * with one ascii space, remove leading and trailing spaces.
+ */
+ if (*dir) {
+ char *out = dir;
+ int prev_space = 1 /* strip leading whitespace */;
+ for (end = dir; *end; ++end) {
+ char ch = *end;
+ if ((unsigned char)ch < '\x20')
+ ch = '\x20';
+ if (isspace(ch)) {
+ if (prev_space)
+ continue;
+ prev_space = 1;
+ } else
+ prev_space = 0;
+ *out++ = ch;
+ }
+ *out = '\0';
+ if (out > dir && prev_space)
+ out[-1] = '\0';
+ }
+ return dir;
+}
+
+void strip_dir_trailing_slashes(char *dir)
+{
+ char *end = dir + strlen(dir);
+
+ while (dir < end - 1 && is_dir_sep(end[-1]))
+ end--;
+ *end = '\0';
+}
+
static int remove_dir_recurse(struct strbuf *path, int flag, int *kept_up)
{
DIR *dir;
@@ -3633,7 +3816,7 @@ static void connect_wt_gitdir_in_nested(const char *sub_worktree,
strbuf_reset(&sub_wt);
strbuf_reset(&sub_gd);
strbuf_addf(&sub_wt, "%s/%s", sub_worktree, sub->path);
- strbuf_addf(&sub_gd, "%s/modules/%s", sub_gitdir, sub->name);
+ submodule_name_to_gitdir(&sub_gd, &subrepo, sub->name);
connect_work_tree_and_git_dir(sub_wt.buf, sub_gd.buf, 1);
}
diff --git a/dir.h b/dir.h
index b3e1a54a..83f46c0 100644
--- a/dir.h
+++ b/dir.h
@@ -394,6 +394,14 @@ enum pattern_match_result path_matches_pattern_list(const char *pathname,
const char *basename, int *dtype,
struct pattern_list *pl,
struct index_state *istate);
+
+int init_sparse_checkout_patterns(struct index_state *state);
+
+int path_in_sparse_checkout(const char *path,
+ struct index_state *istate);
+int path_in_cone_mode_sparse_checkout(const char *path,
+ struct index_state *istate);
+
struct dir_entry *dir_add_ignored(struct dir_struct *dir,
struct index_state *istate,
const char *pathname, int len);
@@ -453,6 +461,17 @@ static inline int is_dot_or_dotdot(const char *name)
int is_empty_dir(const char *dir);
+/*
+ * Retrieve the "humanish" basename of the given Git URL.
+ *
+ * For example:
+ * /path/to/repo.git => "repo"
+ * host.xz:foo/.git => "foo"
+ * http://example.com/user/bar.baz => "bar.baz"
+ */
+char *git_url_basename(const char *repo, int is_bundle, int is_bare);
+void strip_dir_trailing_slashes(char *dir);
+
void setup_standard_excludes(struct dir_struct *dir);
char *get_sparse_checkout_filename(void);
diff --git a/editor.c b/editor.c
index 6303ae0..fdd3eea 100644
--- a/editor.c
+++ b/editor.c
@@ -58,7 +58,7 @@ static int launch_specified_editor(const char *editor, const char *path,
const char *args[] = { editor, NULL, NULL };
struct child_process p = CHILD_PROCESS_INIT;
int ret, sig;
- int print_waiting_for_editor = advice_waiting_for_editor && isatty(2);
+ int print_waiting_for_editor = advice_enabled(ADVICE_WAITING_FOR_EDITOR) && isatty(2);
if (print_waiting_for_editor) {
/*
diff --git a/entry.c b/entry.c
index 044e8ec..9b0f968 100644
--- a/entry.c
+++ b/entry.c
@@ -163,24 +163,21 @@ int finish_delayed_checkout(struct checkout *state, int *nr_checkouts,
int show_progress)
{
int errs = 0;
- unsigned delayed_object_count;
+ unsigned processed_paths = 0;
off_t filtered_bytes = 0;
struct string_list_item *filter, *path;
- struct progress *progress;
+ struct progress *progress = NULL;
struct delayed_checkout *dco = state->delayed_checkout;
if (!state->delayed_checkout)
return errs;
dco->state = CE_RETRY;
- delayed_object_count = dco->paths.nr;
- progress = show_progress
- ? start_delayed_progress(_("Filtering content"), delayed_object_count)
- : NULL;
+ if (show_progress)
+ progress = start_delayed_progress(_("Filtering content"), dco->paths.nr);
while (dco->filters.nr > 0) {
for_each_string_list_item(filter, &dco->filters) {
struct string_list available_paths = STRING_LIST_INIT_NODUP;
- display_progress(progress, delayed_object_count - dco->paths.nr);
if (!async_query_available_blobs(filter->string, &available_paths)) {
/* Filter reported an error */
@@ -227,6 +224,7 @@ int finish_delayed_checkout(struct checkout *state, int *nr_checkouts,
ce = index_file_exists(state->istate, path->string,
strlen(path->string), 0);
if (ce) {
+ display_progress(progress, ++processed_paths);
errs |= checkout_entry(ce, state, NULL, nr_checkouts);
filtered_bytes += ce->ce_stat_data.sd_size;
display_throughput(progress, filtered_bytes);
diff --git a/entry.h b/entry.h
index 7c889e5..2254c62 100644
--- a/entry.h
+++ b/entry.h
@@ -16,7 +16,7 @@ struct checkout {
clone:1,
refresh_cache:1;
};
-#define CHECKOUT_INIT { NULL, "" }
+#define CHECKOUT_INIT { .base_dir = "" }
#define TEMPORARY_FILENAME_LENGTH 25
/*
diff --git a/environment.c b/environment.c
index b4ba4fa..9da7f3c 100644
--- a/environment.c
+++ b/environment.c
@@ -31,7 +31,6 @@ int prefer_symlink_refs;
int is_bare_repository_cfg = -1; /* unspecified */
int warn_ambiguous_refs = 1;
int warn_on_object_refname_ambiguity = 1;
-int ref_paranoia = -1;
int repository_format_precious_objects;
int repository_format_worktree_config;
const char *git_commit_encoding;
@@ -95,13 +94,6 @@ int auto_comment_line_char;
/* Parallel index stat data preload? */
int core_preload_index = 1;
-/*
- * This is a hack for test programs like test-dump-untracked-cache to
- * ensure that they do not modify the untracked cache when reading it.
- * Do not use it otherwise!
- */
-int ignore_untracked_cache_config;
-
/* This is set by setup_git_dir_gently() and/or git_default_config() */
char *git_work_tree_cfg;
@@ -329,8 +321,7 @@ char *get_graft_file(struct repository *r)
static void set_git_dir_1(const char *path)
{
- if (setenv(GIT_DIR_ENVIRONMENT, path, 1))
- die(_("could not set GIT_DIR to '%s'"), path);
+ xsetenv(GIT_DIR_ENVIRONMENT, path, 1);
setup_git_env(path);
}
diff --git a/fetch-negotiator.c b/fetch-negotiator.c
index 57ed578..2733902 100644
--- a/fetch-negotiator.c
+++ b/fetch-negotiator.c
@@ -19,7 +19,6 @@ void fetch_negotiator_init(struct repository *r,
return;
case FETCH_NEGOTIATION_DEFAULT:
- default:
default_negotiator_init(negotiator);
return;
}
diff --git a/fetch-pack.c b/fetch-pack.c
index b0c7be7..a9604f3 100644
--- a/fetch-pack.c
+++ b/fetch-pack.c
@@ -119,6 +119,11 @@ static struct commit *deref_without_lazy_fetch(const struct object_id *oid,
{
enum object_type type;
struct object_info info = { .typep = &type };
+ struct commit *commit;
+
+ commit = lookup_commit_in_graph(the_repository, oid);
+ if (commit)
+ return commit;
while (1) {
if (oid_object_info_extended(the_repository, oid, &info,
@@ -137,8 +142,14 @@ static struct commit *deref_without_lazy_fetch(const struct object_id *oid,
break;
}
}
- if (type == OBJ_COMMIT)
- return (struct commit *) parse_object(the_repository, oid);
+
+ if (type == OBJ_COMMIT) {
+ struct commit *commit = lookup_commit(the_repository, oid);
+ if (!commit || repo_parse_commit(the_repository, commit))
+ return NULL;
+ return commit;
+ }
+
return NULL;
}
@@ -1906,16 +1917,15 @@ static void update_shallow(struct fetch_pack_args *args,
oid_array_clear(&ref);
}
-static int iterate_ref_map(void *cb_data, struct object_id *oid)
+static const struct object_id *iterate_ref_map(void *cb_data)
{
struct ref **rm = cb_data;
struct ref *ref = *rm;
if (!ref)
- return -1; /* end of the list */
+ return NULL;
*rm = ref->next;
- oidcpy(oid, &ref->old_oid);
- return 0;
+ return &ref->old_oid;
}
struct ref *fetch_pack(struct fetch_pack_args *args,
diff --git a/fmt-merge-msg.c b/fmt-merge-msg.c
index b969dc6..5216191 100644
--- a/fmt-merge-msg.c
+++ b/fmt-merge-msg.c
@@ -9,6 +9,7 @@
#include "branch.h"
#include "fmt-merge-msg.h"
#include "commit-reach.h"
+#include "gpg-interface.h"
static int use_branch_desc;
static int suppress_dest_pattern_seen;
@@ -16,6 +17,8 @@ static struct string_list suppress_dest_patterns = STRING_LIST_INIT_DUP;
int fmt_merge_msg_config(const char *key, const char *value, void *cb)
{
+ int status = 0;
+
if (!strcmp(key, "merge.log") || !strcmp(key, "merge.summary")) {
int is_bool;
merge_log_config = git_config_bool_or_int(key, value, &is_bool);
@@ -34,6 +37,9 @@ int fmt_merge_msg_config(const char *key, const char *value, void *cb)
string_list_append(&suppress_dest_patterns, value);
suppress_dest_pattern_seen = 1;
} else {
+ status = git_gpg_config(key, value, NULL);
+ if (status)
+ return status;
return git_default_config(key, value, cb);
}
return 0;
@@ -528,11 +534,11 @@ static void fmt_merge_msg_sigs(struct strbuf *out)
buf = payload.buf;
len = payload.len;
if (check_signature(payload.buf, payload.len, sig.buf,
- sig.len, &sigc) &&
- !sigc.gpg_output)
+ sig.len, &sigc) &&
+ !sigc.output)
strbuf_addstr(&sig, "gpg verification failed.\n");
else
- strbuf_addstr(&sig, sigc.gpg_output);
+ strbuf_addstr(&sig, sigc.output);
}
signature_check_clear(&sigc);
diff --git a/generate-hooklist.sh b/generate-hooklist.sh
new file mode 100755
index 0000000..2f9f54e
--- /dev/null
+++ b/generate-hooklist.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+#
+# Usage: ./generate-hooklist.sh >hook-list.h
+
+cat <<EOF
+/* Automatically generated by generate-hooklist.sh */
+
+static const char *hook_name_list[] = {
+EOF
+
+sed -n \
+ -e '/^~~~~*$/ {x; s/^.*$/ "&",/; p;}' \
+ -e 'x' \
+ <Documentation/githooks.txt |
+ LC_ALL=C sort
+
+cat <<EOF
+ NULL,
+};
+EOF
diff --git a/gettext.h b/gettext.h
index c8b34fd..d209911 100644
--- a/gettext.h
+++ b/gettext.h
@@ -55,31 +55,7 @@ const char *Q_(const char *msgid, const char *plu, unsigned long n)
}
/* Mark msgid for translation but do not translate it. */
-#if !USE_PARENS_AROUND_GETTEXT_N
#define N_(msgid) msgid
-#else
-/*
- * Strictly speaking, this will lead to invalid C when
- * used this way:
- * static const char s[] = N_("FOO");
- * which will expand to
- * static const char s[] = ("FOO");
- * and in valid C, the initializer on the right hand side must
- * be without the parentheses. But many compilers do accept it
- * as a language extension and it will allow us to catch mistakes
- * like:
- * static const char *msgs[] = {
- * N_("one")
- * N_("two"),
- * N_("three"),
- * NULL
- * };
- * (notice the missing comma on one of the lines) by forcing
- * a compilation error, because parenthesised ("one") ("two")
- * will not get silently turned into ("onetwo").
- */
-#define N_(msgid) (msgid)
-#endif
const char *get_preferred_languages(void);
int is_utf8_locale(void);
diff --git a/git-bisect.sh b/git-bisect.sh
index 6a7afae..405cf76 100755
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -34,94 +34,9 @@
OPTIONS_SPEC=
. git-sh-setup
-_x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
-_x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
TERM_BAD=bad
TERM_GOOD=good
-bisect_visualize() {
- git bisect--helper --bisect-next-check $TERM_GOOD $TERM_BAD fail || exit
-
- if test $# = 0
- then
- if test -n "${DISPLAY+set}${SESSIONNAME+set}${MSYSTEM+set}${SECURITYSESSIONID+set}" &&
- type gitk >/dev/null 2>&1
- then
- set gitk
- else
- set git log
- fi
- else
- case "$1" in
- git*|tig) ;;
- -*) set git log "$@" ;;
- *) set git "$@" ;;
- esac
- fi
-
- eval '"$@"' --bisect -- $(cat "$GIT_DIR/BISECT_NAMES")
-}
-
-bisect_run () {
- git bisect--helper --bisect-next-check $TERM_GOOD $TERM_BAD fail || exit
-
- test -n "$*" || die "$(gettext "bisect run failed: no command provided.")"
-
- while true
- do
- command="$@"
- eval_gettextln "running \$command"
- "$@"
- res=$?
-
- # Check for really bad run error.
- if [ $res -lt 0 -o $res -ge 128 ]
- then
- eval_gettextln "bisect run failed:
-exit code \$res from '\$command' is < 0 or >= 128" >&2
- exit $res
- fi
-
- # Find current state depending on run success or failure.
- # A special exit code of 125 means cannot test.
- if [ $res -eq 125 ]
- then
- state='skip'
- elif [ $res -gt 0 ]
- then
- state="$TERM_BAD"
- else
- state="$TERM_GOOD"
- fi
-
- git bisect--helper --bisect-state $state >"$GIT_DIR/BISECT_RUN"
- res=$?
-
- cat "$GIT_DIR/BISECT_RUN"
-
- if sane_grep "first $TERM_BAD commit could be any of" "$GIT_DIR/BISECT_RUN" \
- >/dev/null
- then
- gettextln "bisect run cannot continue any more" >&2
- exit $res
- fi
-
- if [ $res -ne 0 ]
- then
- eval_gettextln "bisect run failed:
-'bisect-state \$state' exited with error code \$res" >&2
- exit $res
- fi
-
- if sane_grep "is the first $TERM_BAD commit" "$GIT_DIR/BISECT_RUN" >/dev/null
- then
- gettextln "bisect run success"
- exit 0;
- fi
-
- done
-}
-
get_terms () {
if test -s "$GIT_DIR/BISECT_TERMS"
then
@@ -152,7 +67,7 @@
# Not sure we want "next" at the UI level anymore.
git bisect--helper --bisect-next "$@" || exit ;;
visualize|view)
- bisect_visualize "$@" ;;
+ git bisect--helper --bisect-visualize "$@" || exit;;
reset)
git bisect--helper --bisect-reset "$@" ;;
replay)
@@ -160,7 +75,7 @@
log)
git bisect--helper --bisect-log || exit ;;
run)
- bisect_run "$@" ;;
+ git bisect--helper --bisect-run "$@" || exit;;
terms)
git bisect--helper --bisect-terms "$@" || exit;;
*)
diff --git a/git-compat-util.h b/git-compat-util.h
index dc52aea..4b57ae6 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -162,6 +162,9 @@
# endif
#define WIN32_LEAN_AND_MEAN /* stops windows.h including winsock.h */
#include <winsock2.h>
+#ifndef NO_UNIX_SOCKETS
+#include <afunix.h>
+#endif
#include <windows.h>
#define GIT_WINDOWS_NATIVE
#endif
@@ -889,6 +892,7 @@ void *xmemdupz(const void *data, size_t len);
char *xstrndup(const char *str, size_t len);
void *xrealloc(void *ptr, size_t size);
void *xcalloc(size_t nmemb, size_t size);
+void xsetenv(const char *name, const char *value, int overwrite);
void *xmmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
const char *mmap_os_err(void);
void *xmmap_gently(void *start, size_t length, int prot, int flags, int fd, off_t offset);
@@ -1267,10 +1271,6 @@ int warn_on_fopen_errors(const char *path);
*/
int open_nofollow(const char *path, int flags);
-#if !defined(USE_PARENS_AROUND_GETTEXT_N) && defined(__GNUC__)
-#define USE_PARENS_AROUND_GETTEXT_N 1
-#endif
-
#ifndef SHELL_PATH
# define SHELL_PATH "/bin/sh"
#endif
diff --git a/git-curl-compat.h b/git-curl-compat.h
new file mode 100644
index 0000000..56a83b6
--- /dev/null
+++ b/git-curl-compat.h
@@ -0,0 +1,129 @@
+#ifndef GIT_CURL_COMPAT_H
+#define GIT_CURL_COMPAT_H
+#include <curl/curl.h>
+
+/**
+ * This header centralizes the declaration of our libcurl dependencies
+ * to make it easy to discover the oldest versions we support, and to
+ * inform decisions about removing support for older libcurl in the
+ * future.
+ *
+ * The oldest supported version of curl is documented in the "INSTALL"
+ * document.
+ *
+ * The source of truth for what versions have which symbols is
+ * https://github.com/curl/curl/blob/master/docs/libcurl/symbols-in-versions;
+ * the release dates are taken from curl.git (at
+ * https://github.com/curl/curl/).
+ *
+ * For each X symbol we need from curl we define our own
+ * GIT_CURL_HAVE_X. If multiple similar symbols with the same prefix
+ * were defined in the same version we pick one and check for that name.
+ *
+ * We may also define a missing CURL_* symbol to its known value, if
+ * doing so is sufficient to add support for it to older versions that
+ * don't have it.
+ *
+ * Keep any symbols in date order of when their support was
+ * introduced, oldest first, in the official version of cURL library.
+ */
+
+/**
+ * CURL_SOCKOPT_OK was added in 7.21.5, released in April 2011.
+ */
+#if LIBCURL_VERSION_NUM < 0x071505
+#define CURL_SOCKOPT_OK 0
+#endif
+
+/**
+ * CURLOPT_TCP_KEEPALIVE was added in 7.25.0, released in March 2012.
+ */
+#if LIBCURL_VERSION_NUM >= 0x071900
+#define GITCURL_HAVE_CURLOPT_TCP_KEEPALIVE 1
+#endif
+
+
+/**
+ * CURLOPT_LOGIN_OPTIONS was added in 7.34.0, released in December
+ * 2013.
+ *
+ * If we start requiring 7.34.0 we might also be able to remove the
+ * code conditional on USE_CURL_FOR_IMAP_SEND in imap-send.c, see
+ * 1e16b255b95 (git-imap-send: use libcurl for implementation,
+ * 2014-11-09) and the check it added for "072200" in the Makefile.
+
+ */
+#if LIBCURL_VERSION_NUM >= 0x072200
+#define GIT_CURL_HAVE_CURLOPT_LOGIN_OPTIONS 1
+#endif
+
+/**
+ * CURL_SSLVERSION_TLSv1_[012] was added in 7.34.0, released in
+ * December 2013.
+ */
+#if LIBCURL_VERSION_NUM >= 0x072200
+#define GIT_CURL_HAVE_CURL_SSLVERSION_TLSv1_0
+#endif
+
+/**
+ * CURLOPT_PINNEDPUBLICKEY was added in 7.39.0, released in November
+ * 2014. CURLE_SSL_PINNEDPUBKEYNOTMATCH was added in that same version.
+ */
+#if LIBCURL_VERSION_NUM >= 0x072c00
+#define GIT_CURL_HAVE_CURLOPT_PINNEDPUBLICKEY 1
+#define GIT_CURL_HAVE_CURLE_SSL_PINNEDPUBKEYNOTMATCH 1
+#endif
+
+/**
+ * CURL_HTTP_VERSION_2 was added in 7.43.0, released in June 2015.
+ *
+ * The CURL_HTTP_VERSION_2 alias (but not CURL_HTTP_VERSION_2_0) has
+ * always been a macro, not an enum field (checked on curl version
+ * 7.78.0)
+ */
+#if LIBCURL_VERSION_NUM >= 0x072b00
+#define GIT_CURL_HAVE_CURL_HTTP_VERSION_2 1
+#endif
+
+/**
+ * CURLSSLOPT_NO_REVOKE was added in 7.44.0, released in August 2015.
+ *
+ * The CURLSSLOPT_NO_REVOKE is, has always been a macro, not an enum
+ * field (checked on curl version 7.78.0)
+ */
+#if LIBCURL_VERSION_NUM >= 0x072c00
+#define GIT_CURL_HAVE_CURLSSLOPT_NO_REVOKE 1
+#endif
+
+/**
+ * CURLOPT_PROXY_CAINFO was added in 7.52.0, released in August 2017.
+ */
+#if LIBCURL_VERSION_NUM >= 0x073400
+#define GIT_CURL_HAVE_CURLOPT_PROXY_CAINFO 1
+#endif
+
+/**
+ * CURLOPT_PROXY_{KEYPASSWD,SSLCERT,SSLKEY} was added in 7.52.0,
+ * released in August 2017.
+ */
+#if LIBCURL_VERSION_NUM >= 0x073400
+#define GIT_CURL_HAVE_CURLOPT_PROXY_KEYPASSWD 1
+#endif
+
+/**
+ * CURL_SSLVERSION_TLSv1_3 was added in 7.53.0, released in February
+ * 2017.
+ */
+#if LIBCURL_VERSION_NUM >= 0x073400
+#define GIT_CURL_HAVE_CURL_SSLVERSION_TLSv1_3 1
+#endif
+
+/**
+ * CURLSSLSET_{NO_BACKENDS,OK,TOO_LATE,UNKNOWN_BACKEND} were added in
+ * 7.56.0, released in September 2017.
+ */
+#if LIBCURL_VERSION_NUM >= 0x073800
+#define GIT_CURL_HAVE_CURLSSLSET_NO_BACKENDS
+#endif
+
+#endif
diff --git a/git-rebase--preserve-merges.sh b/git-rebase--preserve-merges.sh
deleted file mode 100644
index b9c71d2..0000000
--- a/git-rebase--preserve-merges.sh
+++ /dev/null
@@ -1,1057 +0,0 @@
-# This shell script fragment is sourced by git-rebase to implement its
-# preserve-merges mode.
-#
-# Copyright (c) 2006 Johannes E. Schindelin
-#
-# The file containing rebase commands, comments, and empty lines.
-# This file is created by "git rebase -i" then edited by the user. As
-# the lines are processed, they are removed from the front of this
-# file and written to the tail of $done.
-todo="$state_dir"/git-rebase-todo
-
-# The rebase command lines that have already been processed. A line
-# is moved here when it is first handled, before any associated user
-# actions.
-done="$state_dir"/done
-
-# The commit message that is planned to be used for any changes that
-# need to be committed following a user interaction.
-msg="$state_dir"/message
-
-# The file into which is accumulated the suggested commit message for
-# squash/fixup commands. When the first of a series of squash/fixups
-# is seen, the file is created and the commit message from the
-# previous commit and from the first squash/fixup commit are written
-# to it. The commit message for each subsequent squash/fixup commit
-# is appended to the file as it is processed.
-#
-# The first line of the file is of the form
-# # This is a combination of $count commits.
-# where $count is the number of commits whose messages have been
-# written to the file so far (including the initial "pick" commit).
-# Each time that a commit message is processed, this line is read and
-# updated. It is deleted just before the combined commit is made.
-squash_msg="$state_dir"/message-squash
-
-# If the current series of squash/fixups has not yet included a squash
-# command, then this file exists and holds the commit message of the
-# original "pick" commit. (If the series ends without a "squash"
-# command, then this can be used as the commit message of the combined
-# commit without opening the editor.)
-fixup_msg="$state_dir"/message-fixup
-
-# $rewritten is the name of a directory containing files for each
-# commit that is reachable by at least one merge base of $head and
-# $upstream. They are not necessarily rewritten, but their children
-# might be. This ensures that commits on merged, but otherwise
-# unrelated side branches are left alone. (Think "X" in the man page's
-# example.)
-rewritten="$state_dir"/rewritten
-
-dropped="$state_dir"/dropped
-
-end="$state_dir"/end
-msgnum="$state_dir"/msgnum
-
-# A script to set the GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
-# GIT_AUTHOR_DATE that will be used for the commit that is currently
-# being rebased.
-author_script="$state_dir"/author-script
-
-# When an "edit" rebase command is being processed, the SHA1 of the
-# commit to be edited is recorded in this file. When "git rebase
-# --continue" is executed, if there are any staged changes then they
-# will be amended to the HEAD commit, but only provided the HEAD
-# commit is still the commit to be edited. When any other rebase
-# command is processed, this file is deleted.
-amend="$state_dir"/amend
-
-# For the post-rewrite hook, we make a list of rewritten commits and
-# their new sha1s. The rewritten-pending list keeps the sha1s of
-# commits that have been processed, but not committed yet,
-# e.g. because they are waiting for a 'squash' command.
-rewritten_list="$state_dir"/rewritten-list
-rewritten_pending="$state_dir"/rewritten-pending
-
-# Work around Git for Windows' Bash whose "read" does not strip CRLF
-# and leaves CR at the end instead.
-cr=$(printf "\015")
-
-resolvemsg="
-$(gettext 'Resolve all conflicts manually, mark them as resolved with
-"git add/rm <conflicted_files>", then run "git rebase --continue".
-You can instead skip this commit: run "git rebase --skip".
-To abort and get back to the state before "git rebase", run "git rebase --abort".')
-"
-
-write_basic_state () {
- echo "$head_name" > "$state_dir"/head-name &&
- echo "$onto" > "$state_dir"/onto &&
- echo "$orig_head" > "$state_dir"/orig-head &&
- test t = "$GIT_QUIET" && : > "$state_dir"/quiet
- test t = "$verbose" && : > "$state_dir"/verbose
- test -n "$strategy" && echo "$strategy" > "$state_dir"/strategy
- test -n "$strategy_opts" && echo "$strategy_opts" > \
- "$state_dir"/strategy_opts
- test -n "$allow_rerere_autoupdate" && echo "$allow_rerere_autoupdate" > \
- "$state_dir"/allow_rerere_autoupdate
- test -n "$gpg_sign_opt" && echo "$gpg_sign_opt" > "$state_dir"/gpg_sign_opt
- test -n "$signoff" && echo "$signoff" >"$state_dir"/signoff
- test -n "$reschedule_failed_exec" && : > "$state_dir"/reschedule-failed-exec
-}
-
-apply_autostash () {
- if test -f "$state_dir/autostash"
- then
- stash_sha1=$(cat "$state_dir/autostash")
- if git stash apply $stash_sha1 >/dev/null 2>&1
- then
- echo "$(gettext 'Applied autostash.')" >&2
- else
- git stash store -m "autostash" -q $stash_sha1 ||
- die "$(eval_gettext "Cannot store \$stash_sha1")"
- gettext 'Applying autostash resulted in conflicts.
-Your changes are safe in the stash.
-You can run "git stash pop" or "git stash drop" at any time.
-' >&2
- fi
- fi
-}
-
-output () {
- case "$verbose" in
- '')
- output=$("$@" 2>&1 )
- status=$?
- test $status != 0 && printf "%s\n" "$output"
- return $status
- ;;
- *)
- "$@"
- ;;
- esac
-}
-
-strategy_args=${strategy:+--strategy=$strategy}
-test -n "$strategy_opts" &&
-eval '
- for strategy_opt in '"$strategy_opts"'
- do
- strategy_args="$strategy_args -X$(git rev-parse --sq-quote "${strategy_opt#--}")"
- done
-'
-
-GIT_CHERRY_PICK_HELP="$resolvemsg"
-export GIT_CHERRY_PICK_HELP
-
-comment_char=$(git config --get core.commentchar 2>/dev/null)
-case "$comment_char" in
-'' | auto)
- comment_char="#"
- ;;
-?)
- ;;
-*)
- comment_char=$(echo "$comment_char" | cut -c1)
- ;;
-esac
-
-warn () {
- printf '%s\n' "$*" >&2
-}
-
-# Output the commit message for the specified commit.
-commit_message () {
- git cat-file commit "$1" | sed "1,/^$/d"
-}
-
-orig_reflog_action="$GIT_REFLOG_ACTION"
-
-comment_for_reflog () {
- case "$orig_reflog_action" in
- ''|rebase*)
- GIT_REFLOG_ACTION="rebase -i ($1)"
- export GIT_REFLOG_ACTION
- ;;
- esac
-}
-
-last_count=
-mark_action_done () {
- sed -e 1q < "$todo" >> "$done"
- sed -e 1d < "$todo" >> "$todo".new
- mv -f "$todo".new "$todo"
- new_count=$(( $(git stripspace --strip-comments <"$done" | wc -l) ))
- echo $new_count >"$msgnum"
- total=$(($new_count + $(git stripspace --strip-comments <"$todo" | wc -l)))
- echo $total >"$end"
- if test "$last_count" != "$new_count"
- then
- last_count=$new_count
- eval_gettext "Rebasing (\$new_count/\$total)"; printf "\r"
- test -z "$verbose" || echo
- fi
-}
-
-append_todo_help () {
- gettext "
-Commands:
-p, pick <commit> = use commit
-r, reword <commit> = use commit, but edit the commit message
-e, edit <commit> = use commit, but stop for amending
-s, squash <commit> = use commit, but meld into previous commit
-f, fixup <commit> = like \"squash\", but discard this commit's log message
-x, exec <commit> = run command (the rest of the line) using shell
-d, drop <commit> = remove commit
-l, label <label> = label current HEAD with a name
-t, reset <label> = reset HEAD to a label
-m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
-. create a merge commit using the original merge commit's
-. message (or the oneline, if no original merge commit was
-. specified). Use -c <commit> to reword the commit message.
-
-These lines can be re-ordered; they are executed from top to bottom.
-" | git stripspace --comment-lines >>"$todo"
-
- if test $(get_missing_commit_check_level) = error
- then
- gettext "
-Do not remove any line. Use 'drop' explicitly to remove a commit.
-" | git stripspace --comment-lines >>"$todo"
- else
- gettext "
-If you remove a line here THAT COMMIT WILL BE LOST.
-" | git stripspace --comment-lines >>"$todo"
- fi
-}
-
-make_patch () {
- sha1_and_parents="$(git rev-list --parents -1 "$1")"
- case "$sha1_and_parents" in
- ?*' '?*' '?*)
- git diff --cc $sha1_and_parents
- ;;
- ?*' '?*)
- git diff-tree -p "$1^!"
- ;;
- *)
- echo "Root commit"
- ;;
- esac > "$state_dir"/patch
- test -f "$msg" ||
- commit_message "$1" > "$msg"
- test -f "$author_script" ||
- get_author_ident_from_commit "$1" > "$author_script"
-}
-
-die_with_patch () {
- echo "$1" > "$state_dir"/stopped-sha
- git update-ref REBASE_HEAD "$1"
- make_patch "$1"
- die "$2"
-}
-
-exit_with_patch () {
- echo "$1" > "$state_dir"/stopped-sha
- git update-ref REBASE_HEAD "$1"
- make_patch $1
- git rev-parse --verify HEAD > "$amend"
- gpg_sign_opt_quoted=${gpg_sign_opt:+$(git rev-parse --sq-quote "$gpg_sign_opt")}
- warn "$(eval_gettext "\
-You can amend the commit now, with
-
- git commit --amend \$gpg_sign_opt_quoted
-
-Once you are satisfied with your changes, run
-
- git rebase --continue")"
- warn
- exit $2
-}
-
-die_abort () {
- apply_autostash
- rm -rf "$state_dir"
- die "$1"
-}
-
-has_action () {
- test -n "$(git stripspace --strip-comments <"$1")"
-}
-
-is_empty_commit() {
- tree=$(git rev-parse -q --verify "$1"^{tree} 2>/dev/null) || {
- sha1=$1
- die "$(eval_gettext "\$sha1: not a commit that can be picked")"
- }
- ptree=$(git rev-parse -q --verify "$1"^^{tree} 2>/dev/null) ||
- ptree=4b825dc642cb6eb9a060e54bf8d69288fbee4904
- test "$tree" = "$ptree"
-}
-
-is_merge_commit()
-{
- git rev-parse --verify --quiet "$1"^2 >/dev/null 2>&1
-}
-
-# Run command with GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
-# GIT_AUTHOR_DATE exported from the current environment.
-do_with_author () {
- (
- export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE
- "$@"
- )
-}
-
-git_sequence_editor () {
- if test -z "$GIT_SEQUENCE_EDITOR"
- then
- GIT_SEQUENCE_EDITOR="$(git config sequence.editor)"
- if [ -z "$GIT_SEQUENCE_EDITOR" ]
- then
- GIT_SEQUENCE_EDITOR="$(git var GIT_EDITOR)" || return $?
- fi
- fi
-
- eval "$GIT_SEQUENCE_EDITOR" '"$@"'
-}
-
-pick_one () {
- ff=--ff
-
- case "$1" in -n) sha1=$2; ff= ;; *) sha1=$1 ;; esac
- case "$force_rebase" in '') ;; ?*) ff= ;; esac
- output git rev-parse --verify $sha1 || die "$(eval_gettext "Invalid commit name: \$sha1")"
-
- if is_empty_commit "$sha1"
- then
- empty_args="--allow-empty"
- fi
-
- pick_one_preserving_merges "$@"
-}
-
-pick_one_preserving_merges () {
- fast_forward=t
- case "$1" in
- -n)
- fast_forward=f
- sha1=$2
- ;;
- *)
- sha1=$1
- ;;
- esac
- sha1=$(git rev-parse $sha1)
-
- if test -f "$state_dir"/current-commit && test "$fast_forward" = t
- then
- while read current_commit
- do
- git rev-parse HEAD > "$rewritten"/$current_commit
- done <"$state_dir"/current-commit
- rm "$state_dir"/current-commit ||
- die "$(gettext "Cannot write current commit's replacement sha1")"
- fi
-
- echo $sha1 >> "$state_dir"/current-commit
-
- # rewrite parents; if none were rewritten, we can fast-forward.
- new_parents=
- pend=" $(git rev-list --parents -1 $sha1 | cut -d' ' -s -f2-)"
- if test "$pend" = " "
- then
- pend=" root"
- fi
- while [ "$pend" != "" ]
- do
- p=$(expr "$pend" : ' \([^ ]*\)')
- pend="${pend# $p}"
-
- if test -f "$rewritten"/$p
- then
- new_p=$(cat "$rewritten"/$p)
-
- # If the todo reordered commits, and our parent is marked for
- # rewriting, but hasn't been gotten to yet, assume the user meant to
- # drop it on top of the current HEAD
- if test -z "$new_p"
- then
- new_p=$(git rev-parse HEAD)
- fi
-
- test $p != $new_p && fast_forward=f
- case "$new_parents" in
- *$new_p*)
- ;; # do nothing; that parent is already there
- *)
- new_parents="$new_parents $new_p"
- ;;
- esac
- else
- if test -f "$dropped"/$p
- then
- fast_forward=f
- replacement="$(cat "$dropped"/$p)"
- test -z "$replacement" && replacement=root
- pend=" $replacement$pend"
- else
- new_parents="$new_parents $p"
- fi
- fi
- done
- case $fast_forward in
- t)
- output warn "$(eval_gettext "Fast-forward to \$sha1")"
- output git reset --hard $sha1 ||
- die "$(eval_gettext "Cannot fast-forward to \$sha1")"
- ;;
- f)
- first_parent=$(expr "$new_parents" : ' \([^ ]*\)')
-
- if [ "$1" != "-n" ]
- then
- # detach HEAD to current parent
- output git checkout $first_parent 2> /dev/null ||
- die "$(eval_gettext "Cannot move HEAD to \$first_parent")"
- fi
-
- case "$new_parents" in
- ' '*' '*)
- test "a$1" = a-n && die "$(eval_gettext "Refusing to squash a merge: \$sha1")"
-
- # redo merge
- author_script_content=$(get_author_ident_from_commit $sha1)
- eval "$author_script_content"
- msg_content="$(commit_message $sha1)"
- # No point in merging the first parent, that's HEAD
- new_parents=${new_parents# $first_parent}
- merge_args="--no-log --no-ff"
- if ! do_with_author output eval \
- git merge ${gpg_sign_opt:+$(git rev-parse \
- --sq-quote "$gpg_sign_opt")} \
- $allow_rerere_autoupdate "$merge_args" \
- "$strategy_args" \
- -m "$(git rev-parse --sq-quote "$msg_content")" \
- "$new_parents"
- then
- printf "%s\n" "$msg_content" > "$GIT_DIR"/MERGE_MSG
- die_with_patch $sha1 "$(eval_gettext "Error redoing merge \$sha1")"
- fi
- echo "$sha1 $(git rev-parse HEAD^0)" >> "$rewritten_list"
- ;;
- *)
- output eval git cherry-pick $allow_rerere_autoupdate \
- $allow_empty_message \
- ${gpg_sign_opt:+$(git rev-parse --sq-quote "$gpg_sign_opt")} \
- "$strategy_args" "$@" ||
- die_with_patch $sha1 "$(eval_gettext "Could not pick \$sha1")"
- ;;
- esac
- ;;
- esac
-}
-
-this_nth_commit_message () {
- n=$1
- eval_gettext "This is the commit message #\${n}:"
-}
-
-skip_nth_commit_message () {
- n=$1
- eval_gettext "The commit message #\${n} will be skipped:"
-}
-
-update_squash_messages () {
- if test -f "$squash_msg"; then
- mv "$squash_msg" "$squash_msg".bak || exit
- count=$(($(sed -n \
- -e "1s/^$comment_char[^0-9]*\([0-9][0-9]*\).*/\1/p" \
- -e "q" < "$squash_msg".bak)+1))
- {
- printf '%s\n' "$comment_char $(eval_ngettext \
- "This is a combination of \$count commit." \
- "This is a combination of \$count commits." \
- $count)"
- sed -e 1d -e '2,/^./{
- /^$/d
- }' <"$squash_msg".bak
- } >"$squash_msg"
- else
- commit_message HEAD >"$fixup_msg" ||
- die "$(eval_gettext "Cannot write \$fixup_msg")"
- count=2
- {
- printf '%s\n' "$comment_char $(gettext "This is a combination of 2 commits.")"
- printf '%s\n' "$comment_char $(gettext "This is the 1st commit message:")"
- echo
- cat "$fixup_msg"
- } >"$squash_msg"
- fi
- case $1 in
- squash)
- rm -f "$fixup_msg"
- echo
- printf '%s\n' "$comment_char $(this_nth_commit_message $count)"
- echo
- commit_message $2
- ;;
- fixup)
- echo
- printf '%s\n' "$comment_char $(skip_nth_commit_message $count)"
- echo
- # Change the space after the comment character to TAB:
- commit_message $2 | git stripspace --comment-lines | sed -e 's/ / /'
- ;;
- esac >>"$squash_msg"
-}
-
-peek_next_command () {
- git stripspace --strip-comments <"$todo" | sed -n -e 's/ .*//p' -e q
-}
-
-# A squash/fixup has failed. Prepare the long version of the squash
-# commit message, then die_with_patch. This code path requires the
-# user to edit the combined commit message for all commits that have
-# been squashed/fixedup so far. So also erase the old squash
-# messages, effectively causing the combined commit to be used as the
-# new basis for any further squash/fixups. Args: sha1 rest
-die_failed_squash() {
- sha1=$1
- rest=$2
- mv "$squash_msg" "$msg" || exit
- rm -f "$fixup_msg"
- cp "$msg" "$GIT_DIR"/MERGE_MSG || exit
- warn
- warn "$(eval_gettext "Could not apply \$sha1... \$rest")"
- die_with_patch $sha1 ""
-}
-
-flush_rewritten_pending() {
- test -s "$rewritten_pending" || return
- newsha1="$(git rev-parse HEAD^0)"
- sed "s/$/ $newsha1/" < "$rewritten_pending" >> "$rewritten_list"
- rm -f "$rewritten_pending"
-}
-
-record_in_rewritten() {
- oldsha1="$(git rev-parse $1)"
- echo "$oldsha1" >> "$rewritten_pending"
-
- case "$(peek_next_command)" in
- squash|s|fixup|f)
- ;;
- *)
- flush_rewritten_pending
- ;;
- esac
-}
-
-do_pick () {
- sha1=$1
- rest=$2
- if test "$(git rev-parse HEAD)" = "$squash_onto"
- then
- # Set the correct commit message and author info on the
- # sentinel root before cherry-picking the original changes
- # without committing (-n). Finally, update the sentinel again
- # to include these changes. If the cherry-pick results in a
- # conflict, this means our behaviour is similar to a standard
- # failed cherry-pick during rebase, with a dirty index to
- # resolve before manually running git commit --amend then git
- # rebase --continue.
- git commit --allow-empty --allow-empty-message --amend \
- --no-post-rewrite -n -q -C $sha1 $signoff &&
- pick_one -n $sha1 &&
- git commit --allow-empty --allow-empty-message \
- --amend --no-post-rewrite -n -q -C $sha1 $signoff \
- ${gpg_sign_opt:+"$gpg_sign_opt"} ||
- die_with_patch $sha1 "$(eval_gettext "Could not apply \$sha1... \$rest")"
- else
- pick_one $sha1 ||
- die_with_patch $sha1 "$(eval_gettext "Could not apply \$sha1... \$rest")"
- fi
-}
-
-do_next () {
- rm -f "$msg" "$author_script" "$amend" "$state_dir"/stopped-sha || exit
- read -r command sha1 rest < "$todo"
- case "$command" in
- "$comment_char"*|''|noop|drop|d)
- mark_action_done
- ;;
- "$cr")
- # Work around CR left by "read" (e.g. with Git for Windows' Bash).
- mark_action_done
- ;;
- pick|p)
- comment_for_reflog pick
-
- mark_action_done
- do_pick $sha1 "$rest"
- record_in_rewritten $sha1
- ;;
- reword|r)
- comment_for_reflog reword
-
- mark_action_done
- do_pick $sha1 "$rest"
- git commit --amend --no-post-rewrite ${gpg_sign_opt:+"$gpg_sign_opt"} \
- $allow_empty_message || {
- warn "$(eval_gettext "\
-Could not amend commit after successfully picking \$sha1... \$rest
-This is most likely due to an empty commit message, or the pre-commit hook
-failed. If the pre-commit hook failed, you may need to resolve the issue before
-you are able to reword the commit.")"
- exit_with_patch $sha1 1
- }
- record_in_rewritten $sha1
- ;;
- edit|e)
- comment_for_reflog edit
-
- mark_action_done
- do_pick $sha1 "$rest"
- sha1_abbrev=$(git rev-parse --short $sha1)
- warn "$(eval_gettext "Stopped at \$sha1_abbrev... \$rest")"
- exit_with_patch $sha1 0
- ;;
- squash|s|fixup|f)
- case "$command" in
- squash|s)
- squash_style=squash
- ;;
- fixup|f)
- squash_style=fixup
- ;;
- esac
- comment_for_reflog $squash_style
-
- test -f "$done" && has_action "$done" ||
- die "$(eval_gettext "Cannot '\$squash_style' without a previous commit")"
-
- mark_action_done
- update_squash_messages $squash_style $sha1
- author_script_content=$(get_author_ident_from_commit HEAD)
- echo "$author_script_content" > "$author_script"
- eval "$author_script_content"
- if ! pick_one -n $sha1
- then
- git rev-parse --verify HEAD >"$amend"
- die_failed_squash $sha1 "$rest"
- fi
- case "$(peek_next_command)" in
- squash|s|fixup|f)
- # This is an intermediate commit; its message will only be
- # used in case of trouble. So use the long version:
- do_with_author output git commit --amend --no-verify -F "$squash_msg" \
- ${gpg_sign_opt:+"$gpg_sign_opt"} $allow_empty_message ||
- die_failed_squash $sha1 "$rest"
- ;;
- *)
- # This is the final command of this squash/fixup group
- if test -f "$fixup_msg"
- then
- do_with_author git commit --amend --no-verify -F "$fixup_msg" \
- ${gpg_sign_opt:+"$gpg_sign_opt"} $allow_empty_message ||
- die_failed_squash $sha1 "$rest"
- else
- cp "$squash_msg" "$GIT_DIR"/SQUASH_MSG || exit
- rm -f "$GIT_DIR"/MERGE_MSG
- do_with_author git commit --amend --no-verify -F "$GIT_DIR"/SQUASH_MSG -e \
- ${gpg_sign_opt:+"$gpg_sign_opt"} $allow_empty_message ||
- die_failed_squash $sha1 "$rest"
- fi
- rm -f "$squash_msg" "$fixup_msg"
- ;;
- esac
- record_in_rewritten $sha1
- ;;
- x|"exec")
- read -r command rest < "$todo"
- mark_action_done
- eval_gettextln "Executing: \$rest"
- "${SHELL:-@SHELL_PATH@}" -c "$rest" # Actual execution
- status=$?
- # Run in subshell because require_clean_work_tree can die.
- dirty=f
- (require_clean_work_tree "rebase" 2>/dev/null) || dirty=t
- if test "$status" -ne 0
- then
- warn "$(eval_gettext "Execution failed: \$rest")"
- test "$dirty" = f ||
- warn "$(gettext "and made changes to the index and/or the working tree")"
-
- warn "$(gettext "\
-You can fix the problem, and then run
-
- git rebase --continue")"
- warn
- if test $status -eq 127 # command not found
- then
- status=1
- fi
- exit "$status"
- elif test "$dirty" = t
- then
- # TRANSLATORS: after these lines is a command to be issued by the user
- warn "$(eval_gettext "\
-Execution succeeded: \$rest
-but left changes to the index and/or the working tree
-Commit or stash your changes, and then run
-
- git rebase --continue")"
- warn
- exit 1
- fi
- ;;
- *)
- warn "$(eval_gettext "Unknown command: \$command \$sha1 \$rest")"
- fixtodo="$(gettext "Please fix this using 'git rebase --edit-todo'.")"
- if git rev-parse --verify -q "$sha1" >/dev/null
- then
- die_with_patch $sha1 "$fixtodo"
- else
- die "$fixtodo"
- fi
- ;;
- esac
- test -s "$todo" && return
-
- comment_for_reflog finish &&
- newhead=$(git rev-parse HEAD) &&
- case $head_name in
- refs/*)
- message="$GIT_REFLOG_ACTION: $head_name onto $onto" &&
- git update-ref -m "$message" $head_name $newhead $orig_head &&
- git symbolic-ref \
- -m "$GIT_REFLOG_ACTION: returning to $head_name" \
- HEAD $head_name
- ;;
- esac && {
- test ! -f "$state_dir"/verbose ||
- git diff-tree --stat $orig_head..HEAD
- } &&
- {
- test -s "$rewritten_list" &&
- git notes copy --for-rewrite=rebase < "$rewritten_list" ||
- true # we don't care if this copying failed
- } &&
- hook="$(git rev-parse --git-path hooks/post-rewrite)"
- if test -x "$hook" && test -s "$rewritten_list"; then
- "$hook" rebase < "$rewritten_list"
- true # we don't care if this hook failed
- fi &&
- warn "$(eval_gettext "Successfully rebased and updated \$head_name.")"
-
- return 1 # not failure; just to break the do_rest loop
-}
-
-# can only return 0, when the infinite loop breaks
-do_rest () {
- while :
- do
- do_next || break
- done
-}
-
-expand_todo_ids() {
- git rebase--interactive --expand-ids
-}
-
-collapse_todo_ids() {
- git rebase--interactive --shorten-ids
-}
-
-# Switch to the branch in $into and notify it in the reflog
-checkout_onto () {
- GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name"
- output git checkout $onto || die_abort "$(gettext "could not detach HEAD")"
- git update-ref ORIG_HEAD $orig_head
-}
-
-get_missing_commit_check_level () {
- check_level=$(git config --get rebase.missingCommitsCheck)
- check_level=${check_level:-ignore}
- # Don't be case sensitive
- printf '%s' "$check_level" | tr 'A-Z' 'a-z'
-}
-
-# Initiate an action. If the cannot be any
-# further action it may exec a command
-# or exit and not return.
-#
-# TODO: Consider a cleaner return model so it
-# never exits and always return 0 if process
-# is complete.
-#
-# Parameter 1 is the action to initiate.
-#
-# Returns 0 if the action was able to complete
-# and if 1 if further processing is required.
-initiate_action () {
- case "$1" in
- continue)
- # do we have anything to commit?
- if git diff-index --cached --quiet HEAD --
- then
- # Nothing to commit -- skip this commit
-
- test ! -f "$GIT_DIR"/CHERRY_PICK_HEAD ||
- rm "$GIT_DIR"/CHERRY_PICK_HEAD ||
- die "$(gettext "Could not remove CHERRY_PICK_HEAD")"
- else
- if ! test -f "$author_script"
- then
- gpg_sign_opt_quoted=${gpg_sign_opt:+$(git rev-parse --sq-quote "$gpg_sign_opt")}
- die "$(eval_gettext "\
-You have staged changes in your working tree.
-If these changes are meant to be
-squashed into the previous commit, run:
-
- git commit --amend \$gpg_sign_opt_quoted
-
-If they are meant to go into a new commit, run:
-
- git commit \$gpg_sign_opt_quoted
-
-In both cases, once you're done, continue with:
-
- git rebase --continue
-")"
- fi
- . "$author_script" ||
- die "$(gettext "Error trying to find the author identity to amend commit")"
- if test -f "$amend"
- then
- current_head=$(git rev-parse --verify HEAD)
- test "$current_head" = $(cat "$amend") ||
- die "$(gettext "\
-You have uncommitted changes in your working tree. Please commit them
-first and then run 'git rebase --continue' again.")"
- do_with_author git commit --amend --no-verify -F "$msg" -e \
- ${gpg_sign_opt:+"$gpg_sign_opt"} $allow_empty_message ||
- die "$(gettext "Could not commit staged changes.")"
- else
- do_with_author git commit --no-verify -F "$msg" -e \
- ${gpg_sign_opt:+"$gpg_sign_opt"} $allow_empty_message ||
- die "$(gettext "Could not commit staged changes.")"
- fi
- fi
-
- if test -r "$state_dir"/stopped-sha
- then
- record_in_rewritten "$(cat "$state_dir"/stopped-sha)"
- fi
-
- require_clean_work_tree "rebase"
- do_rest
- return 0
- ;;
- skip)
- git rerere clear
- do_rest
- return 0
- ;;
- edit-todo)
- git stripspace --strip-comments <"$todo" >"$todo".new
- mv -f "$todo".new "$todo"
- collapse_todo_ids
- append_todo_help
- gettext "
-You are editing the todo file of an ongoing interactive rebase.
-To continue rebase after editing, run:
- git rebase --continue
-
-" | git stripspace --comment-lines >>"$todo"
-
- git_sequence_editor "$todo" ||
- die "$(gettext "Could not execute editor")"
- expand_todo_ids
-
- exit
- ;;
- show-current-patch)
- exec git show REBASE_HEAD --
- ;;
- *)
- return 1 # continue
- ;;
- esac
-}
-
-setup_reflog_action () {
- comment_for_reflog start
-
- if test ! -z "$switch_to"
- then
- GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $switch_to"
- output git checkout "$switch_to" -- ||
- die "$(eval_gettext "Could not checkout \$switch_to")"
-
- comment_for_reflog start
- fi
-}
-
-init_basic_state () {
- orig_head=$(git rev-parse --verify HEAD) || die "$(gettext "No HEAD?")"
- mkdir -p "$state_dir" || die "$(eval_gettext "Could not create temporary \$state_dir")"
- rm -f "$(git rev-parse --git-path REBASE_HEAD)"
-
- : > "$state_dir"/interactive || die "$(gettext "Could not mark as interactive")"
- write_basic_state
-}
-
-init_revisions_and_shortrevisions () {
- shorthead=$(git rev-parse --short $orig_head)
- shortonto=$(git rev-parse --short $onto)
- if test -z "$rebase_root"
- # this is now equivalent to ! -z "$upstream"
- then
- shortupstream=$(git rev-parse --short $upstream)
- revisions=$upstream...$orig_head
- shortrevisions=$shortupstream..$shorthead
- else
- revisions=$onto...$orig_head
- shortrevisions=$shorthead
- test -z "$squash_onto" ||
- echo "$squash_onto" >"$state_dir"/squash-onto
- fi
-}
-
-complete_action() {
- test -s "$todo" || echo noop >> "$todo"
- test -z "$autosquash" || git rebase--interactive --rearrange-squash || exit
- test -n "$cmd" && git rebase--interactive --add-exec-commands --cmd "$cmd"
-
- todocount=$(git stripspace --strip-comments <"$todo" | wc -l)
- todocount=${todocount##* }
-
-cat >>"$todo" <<EOF
-
-$comment_char $(eval_ngettext \
- "Rebase \$shortrevisions onto \$shortonto (\$todocount command)" \
- "Rebase \$shortrevisions onto \$shortonto (\$todocount commands)" \
- "$todocount")
-EOF
- append_todo_help
- gettext "
-However, if you remove everything, the rebase will be aborted.
-
-" | git stripspace --comment-lines >>"$todo"
-
- if test -z "$keep_empty"
- then
- printf '%s\n' "$comment_char $(gettext "Note that empty commits are commented out")" >>"$todo"
- fi
-
-
- has_action "$todo" ||
- return 2
-
- cp "$todo" "$todo".backup
- collapse_todo_ids
- git_sequence_editor "$todo" ||
- die_abort "$(gettext "Could not execute editor")"
-
- has_action "$todo" ||
- return 2
-
- git rebase--interactive --check-todo-list || {
- ret=$?
- checkout_onto
- exit $ret
- }
-
- expand_todo_ids
- checkout_onto
- do_rest
-}
-
-git_rebase__preserve_merges () {
- initiate_action "$action"
- ret=$?
- if test $ret = 0; then
- return 0
- fi
-
- setup_reflog_action
- init_basic_state
-
- if test -z "$rebase_root"
- then
- mkdir "$rewritten" &&
- for c in $(git merge-base --all $orig_head $upstream)
- do
- echo $onto > "$rewritten"/$c ||
- die "$(gettext "Could not init rewritten commits")"
- done
- else
- mkdir "$rewritten" &&
- echo $onto > "$rewritten"/root ||
- die "$(gettext "Could not init rewritten commits")"
- fi
-
- init_revisions_and_shortrevisions
-
- format=$(git config --get rebase.instructionFormat)
- # the 'rev-list .. | sed' requires %m to parse; the instruction requires %H to parse
- git rev-list --format="%m%H ${format:-%s}" \
- --reverse --left-right --topo-order \
- $revisions ${restrict_revision+^$restrict_revision} | \
- sed -n "s/^>//p" |
- while read -r sha1 rest
- do
- if test -z "$keep_empty" && is_empty_commit $sha1 && ! is_merge_commit $sha1
- then
- comment_out="$comment_char "
- else
- comment_out=
- fi
-
- if test -z "$rebase_root"
- then
- preserve=t
- for p in $(git rev-list --parents -1 $sha1 | cut -d' ' -s -f2-)
- do
- if test -f "$rewritten"/$p
- then
- preserve=f
- fi
- done
- else
- preserve=f
- fi
- if test f = "$preserve"
- then
- touch "$rewritten"/$sha1
- printf '%s\n' "${comment_out}pick $sha1 $rest" >>"$todo"
- fi
- done
-
- # Watch for commits that been dropped by --cherry-pick
- mkdir "$dropped"
- # Save all non-cherry-picked changes
- git rev-list $revisions --left-right --cherry-pick | \
- sed -n "s/^>//p" > "$state_dir"/not-cherry-picks
- # Now all commits and note which ones are missing in
- # not-cherry-picks and hence being dropped
- git rev-list $revisions |
- while read rev
- do
- if test -f "$rewritten"/$rev &&
- ! sane_grep "$rev" "$state_dir"/not-cherry-picks >/dev/null
- then
- # Use -f2 because if rev-list is telling us this commit is
- # not worthwhile, we don't want to track its multiple heads,
- # just the history of its first-parent for others that will
- # be rebasing on top of it
- git rev-list --parents -1 $rev | cut -d' ' -s -f2 > "$dropped"/$rev
- sha1=$(git rev-list -1 $rev)
- sane_grep -v "^[a-z][a-z]* $sha1" <"$todo" > "${todo}2" ; mv "${todo}2" "$todo"
- rm "$rewritten"/$rev
- fi
- done
-
- complete_action
-}
diff --git a/git-sh-i18n.sh b/git-sh-i18n.sh
index e3d9f48..a15c062 100644
--- a/git-sh-i18n.sh
+++ b/git-sh-i18n.sh
@@ -51,12 +51,6 @@
)
}
- eval_ngettext () {
- ngettext "$1" "$2" "$3" | (
- export PATH $(git sh-i18n--envsubst --variables "$2");
- git sh-i18n--envsubst "$2"
- )
- }
;;
*)
gettext () {
@@ -70,12 +64,6 @@
)
}
- eval_ngettext () {
- (test "$3" = 1 && printf "%s" "$1" || printf "%s" "$2") | (
- export PATH $(git sh-i18n--envsubst --variables "$2");
- git sh-i18n--envsubst "$2"
- )
- }
;;
esac
diff --git a/git-sh-setup.sh b/git-sh-setup.sh
index 10d9764..960982f 100644
--- a/git-sh-setup.sh
+++ b/git-sh-setup.sh
@@ -217,15 +217,9 @@
then
action=$1
case "$action" in
- rebase)
- gettextln "Cannot rebase: You have unstaged changes." >&2
- ;;
"rewrite branches")
gettextln "Cannot rewrite branches: You have unstaged changes." >&2
;;
- "pull with rebase")
- gettextln "Cannot pull with rebase: You have unstaged changes." >&2
- ;;
*)
eval_gettextln "Cannot \$action: You have unstaged changes." >&2
;;
@@ -238,17 +232,7 @@
if test $err = 0
then
action=$1
- case "$action" in
- rebase)
- gettextln "Cannot rebase: Your index contains uncommitted changes." >&2
- ;;
- "pull with rebase")
- gettextln "Cannot pull with rebase: Your index contains uncommitted changes." >&2
- ;;
- *)
- eval_gettextln "Cannot \$action: Your index contains uncommitted changes." >&2
- ;;
- esac
+ eval_gettextln "Cannot \$action: Your index contains uncommitted changes." >&2
else
gettextln "Additionally, your index contains uncommitted changes." >&2
fi
diff --git a/git-submodule.sh b/git-submodule.sh
index dbd2ec2..652861a 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -63,11 +63,6 @@
n=$(($1 + 0)) 2>/dev/null && test "$n" = "$1"
}
-# Given a full hex object ID, is this the zero OID?
-is_zero_oid () {
- echo "$1" | sane_egrep '^0+$' >/dev/null 2>&1
-}
-
# Sanitize the local git environment for use within a submodule. We
# can't simply use clear_local_git_env since we want to preserve some
# of the settings from GIT_CONFIG_PARAMETERS.
@@ -145,130 +140,12 @@
shift
done
- if ! git submodule--helper config --check-writeable >/dev/null 2>&1
+ if test -z "$1"
then
- die "fatal: $(eval_gettext "please make sure that the .gitmodules file is in the working tree")"
- fi
-
- if test -n "$reference_path"
- then
- is_absolute_path "$reference_path" ||
- reference_path="$wt_prefix$reference_path"
-
- reference="--reference=$reference_path"
- fi
-
- repo=$1
- sm_path=$2
-
- if test -z "$sm_path"; then
- sm_path=$(printf '%s\n' "$repo" |
- sed -e 's|/$||' -e 's|:*/*\.git$||' -e 's|.*[/:]||g')
- fi
-
- if test -z "$repo" || test -z "$sm_path"; then
usage
fi
- is_absolute_path "$sm_path" || sm_path="$wt_prefix$sm_path"
-
- # assure repo is absolute or relative to parent
- case "$repo" in
- ./*|../*)
- test -z "$wt_prefix" ||
- die "fatal: $(gettext "Relative path can only be used from the toplevel of the working tree")"
-
- # dereference source url relative to parent's url
- realrepo=$(git submodule--helper resolve-relative-url "$repo") || exit
- ;;
- *:*|/*)
- # absolute url
- realrepo=$repo
- ;;
- *)
- die "fatal: $(eval_gettext "repo URL: '\$repo' must be absolute or begin with ./|../")"
- ;;
- esac
-
- # normalize path:
- # multiple //; leading ./; /./; /../; trailing /
- sm_path=$(printf '%s/\n' "$sm_path" |
- sed -e '
- s|//*|/|g
- s|^\(\./\)*||
- s|/\(\./\)*|/|g
- :start
- s|\([^/]*\)/\.\./||
- tstart
- s|/*$||
- ')
- if test -z "$force"
- then
- git ls-files --error-unmatch "$sm_path" > /dev/null 2>&1 &&
- die "fatal: $(eval_gettext "'\$sm_path' already exists in the index")"
- else
- git ls-files -s "$sm_path" | sane_grep -v "^160000" > /dev/null 2>&1 &&
- die "fatal: $(eval_gettext "'\$sm_path' already exists in the index and is not a submodule")"
- fi
-
- if test -d "$sm_path" &&
- test -z $(git -C "$sm_path" rev-parse --show-cdup 2>/dev/null)
- then
- git -C "$sm_path" rev-parse --verify -q HEAD >/dev/null ||
- die "fatal: $(eval_gettext "'\$sm_path' does not have a commit checked out")"
- fi
-
- if test -z "$force"
- then
- dryerr=$(git add --dry-run --ignore-missing --no-warn-embedded-repo "$sm_path" 2>&1 >/dev/null)
- res=$?
- if test $res -ne 0
- then
- echo >&2 "$dryerr"
- exit $res
- fi
- fi
-
- if test -n "$custom_name"
- then
- sm_name="$custom_name"
- else
- sm_name="$sm_path"
- fi
-
- if ! git submodule--helper check-name "$sm_name"
- then
- die "fatal: $(eval_gettext "'$sm_name' is not a valid submodule name")"
- fi
-
- git submodule--helper add-clone ${GIT_QUIET:+--quiet} ${force:+"--force"} ${progress:+"--progress"} ${branch:+--branch "$branch"} --prefix "$wt_prefix" --path "$sm_path" --name "$sm_name" --url "$realrepo" ${reference:+"$reference"} ${dissociate:+"--dissociate"} ${depth:+"$depth"} || exit
- git config submodule."$sm_name".url "$realrepo"
-
- git add --no-warn-embedded-repo $force "$sm_path" ||
- die "fatal: $(eval_gettext "Failed to add submodule '\$sm_path'")"
-
- git submodule--helper config submodule."$sm_name".path "$sm_path" &&
- git submodule--helper config submodule."$sm_name".url "$repo" &&
- if test -n "$branch"
- then
- git submodule--helper config submodule."$sm_name".branch "$branch"
- fi &&
- git add --force .gitmodules ||
- die "fatal: $(eval_gettext "Failed to register submodule '\$sm_path'")"
-
- # NEEDSWORK: In a multi-working-tree world, this needs to be
- # set in the per-worktree config.
- if git config --get submodule.active >/dev/null
- then
- # If the submodule being adding isn't already covered by the
- # current configured pathspec, set the submodule's active flag
- if ! git submodule--helper is-active "$sm_path"
- then
- git config submodule."$sm_name".active "true"
- fi
- else
- git config submodule."$sm_name".active "true"
- fi
+ git ${wt_prefix:+-C "$wt_prefix"} ${prefix:+--super-prefix "$prefix"} submodule--helper add ${GIT_QUIET:+--quiet} ${force:+--force} ${progress:+"--progress"} ${branch:+--branch "$branch"} ${reference_path:+--reference "$reference_path"} ${dissociate:+--dissociate} ${custom_name:+--name "$custom_name"} ${depth:+"$depth"} -- "$@"
}
#
@@ -369,13 +246,6 @@
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper deinit ${GIT_QUIET:+--quiet} ${force:+--force} ${deinit_all:+--all} -- "$@"
}
-is_tip_reachable () (
- sanitize_submodule_env &&
- cd "$1" &&
- rev=$(git rev-list -n 1 "$2" --not --all 2>/dev/null) &&
- test -z "$rev"
-)
-
# usage: fetch_in_submodule <module_path> [<depth>] [<sha1>]
# Because arguments are positional, use an empty string to omit <depth>
# but include <sha1>.
@@ -519,14 +389,13 @@
git submodule--helper ensure-core-worktree "$sm_path" || exit 1
- update_module=$(git submodule--helper update-module-mode $just_cloned "$sm_path" $update)
-
displaypath=$(git submodule--helper relative-path "$prefix$sm_path" "$wt_prefix")
if test $just_cloned -eq 1
then
subsha1=
else
+ just_cloned=
subsha1=$(sanitize_submodule_env; cd "$sm_path" &&
git rev-parse --verify HEAD) ||
die "fatal: $(eval_gettext "Unable to find current revision in submodule path '\$displaypath'")"
@@ -547,70 +416,38 @@
die "fatal: $(eval_gettext "Unable to find current \${remote_name}/\${branch} revision in submodule path '\$sm_path'")"
fi
- if test "$subsha1" != "$sha1" || test -n "$force"
- then
- subforce=$force
- # If we don't already have a -f flag and the submodule has never been checked out
- if test -z "$subsha1" && test -z "$force"
- then
- subforce="-f"
- fi
+ out=$(git submodule--helper run-update-procedure \
+ ${wt_prefix:+--prefix "$wt_prefix"} \
+ ${GIT_QUIET:+--quiet} \
+ ${force:+--force} \
+ ${just_cloned:+--just-cloned} \
+ ${nofetch:+--no-fetch} \
+ ${depth:+"$depth"} \
+ ${update:+--update "$update"} \
+ ${prefix:+--recursive-prefix "$prefix"} \
+ ${sha1:+--oid "$sha1"} \
+ ${subsha1:+--suboid "$subsha1"} \
+ "--" \
+ "$sm_path")
- if test -z "$nofetch"
- then
- # Run fetch only if $sha1 isn't present or it
- # is not reachable from a ref.
- is_tip_reachable "$sm_path" "$sha1" ||
- fetch_in_submodule "$sm_path" $depth ||
- say "$(eval_gettext "Unable to fetch in submodule path '\$displaypath'; trying to directly fetch \$sha1:")"
-
- # Now we tried the usual fetch, but $sha1 may
- # not be reachable from any of the refs
- is_tip_reachable "$sm_path" "$sha1" ||
- fetch_in_submodule "$sm_path" "$depth" "$sha1" ||
- die "fatal: $(eval_gettext "Fetched in submodule path '\$displaypath', but it did not contain \$sha1. Direct fetching of that commit failed.")"
- fi
-
- must_die_on_failure=
- case "$update_module" in
- checkout)
- command="git checkout $subforce -q"
- die_msg="fatal: $(eval_gettext "Unable to checkout '\$sha1' in submodule path '\$displaypath'")"
- say_msg="$(eval_gettext "Submodule path '\$displaypath': checked out '\$sha1'")"
- ;;
- rebase)
- command="git rebase ${GIT_QUIET:+--quiet}"
- die_msg="fatal: $(eval_gettext "Unable to rebase '\$sha1' in submodule path '\$displaypath'")"
- say_msg="$(eval_gettext "Submodule path '\$displaypath': rebased into '\$sha1'")"
- must_die_on_failure=yes
- ;;
- merge)
- command="git merge ${GIT_QUIET:+--quiet}"
- die_msg="fatal: $(eval_gettext "Unable to merge '\$sha1' in submodule path '\$displaypath'")"
- say_msg="$(eval_gettext "Submodule path '\$displaypath': merged in '\$sha1'")"
- must_die_on_failure=yes
- ;;
- !*)
- command="${update_module#!}"
- die_msg="fatal: $(eval_gettext "Execution of '\$command \$sha1' failed in submodule path '\$displaypath'")"
- say_msg="$(eval_gettext "Submodule path '\$displaypath': '\$command \$sha1'")"
- must_die_on_failure=yes
- ;;
- *)
- die "fatal: $(eval_gettext "Invalid update mode '$update_module' for submodule path '$path'")"
- esac
-
- if (sanitize_submodule_env; cd "$sm_path" && $command "$sha1")
- then
- say "$say_msg"
- elif test -n "$must_die_on_failure"
- then
- die_with_status 2 "$die_msg"
- else
- err="${err};$die_msg"
- continue
- fi
- fi
+ # exit codes for run-update-procedure:
+ # 0: update was successful, say command output
+ # 1: update procedure failed, but should not die
+ # 2 or 128: subcommand died during execution
+ # 3: no update procedure was run
+ res="$?"
+ case $res in
+ 0)
+ say "$out"
+ ;;
+ 1)
+ err="${err};fatal: $out"
+ continue
+ ;;
+ 2|128)
+ die_with_status $res "fatal: $out"
+ ;;
+ esac
if test -n "$recursive"
then
diff --git a/git-svn.perl b/git-svn.perl
index 70cb5e2..be987e3 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -273,7 +273,6 @@
'fetch-all|all' => \$_fetch_all,
'dry-run|n' => \$_dry_run,
'rebase-merges|p' => \$_rebase_merges,
- 'preserve-merges|p' => \$_rebase_merges,
%fc_opts } ],
'commit-diff' => [ \&cmd_commit_diff,
'Commit a diff between two trees',
diff --git a/git.c b/git.c
index 18bed9a..5ff21be 100644
--- a/git.c
+++ b/git.c
@@ -561,7 +561,7 @@ static struct cmd_struct commands[] = {
{ "merge-tree", cmd_merge_tree, RUN_SETUP | NO_PARSEOPT },
{ "mktag", cmd_mktag, RUN_SETUP | NO_PARSEOPT },
{ "mktree", cmd_mktree, RUN_SETUP },
- { "multi-pack-index", cmd_multi_pack_index, RUN_SETUP_GENTLY },
+ { "multi-pack-index", cmd_multi_pack_index, RUN_SETUP },
{ "mv", cmd_mv, RUN_SETUP | NEED_WORK_TREE },
{ "name-rev", cmd_name_rev, RUN_SETUP },
{ "notes", cmd_notes, RUN_SETUP },
@@ -577,7 +577,6 @@ static struct cmd_struct commands[] = {
{ "range-diff", cmd_range_diff, RUN_SETUP | USE_PAGER },
{ "read-tree", cmd_read_tree, RUN_SETUP | SUPPORT_SUPER_PREFIX},
{ "rebase", cmd_rebase, RUN_SETUP | NEED_WORK_TREE },
- { "rebase--interactive", cmd_rebase__interactive, RUN_SETUP | NEED_WORK_TREE },
{ "receive-pack", cmd_receive_pack },
{ "reflog", cmd_reflog, RUN_SETUP },
{ "remote", cmd_remote, RUN_SETUP },
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index e09e024..fbd1c20 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -3796,7 +3796,8 @@
my @headslist;
open my $fd, '-|', git_cmd(), 'for-each-ref',
- ($limit ? '--count='.($limit+1) : ()), '--sort=-committerdate',
+ ($limit ? '--count='.($limit+1) : ()),
+ '--sort=-HEAD', '--sort=-committerdate',
'--format=%(objectname) %(refname) %(subject)%00%(committer)',
@patterns
or return;
diff --git a/gpg-interface.c b/gpg-interface.c
index 127aecf..3e7255a 100644
--- a/gpg-interface.c
+++ b/gpg-interface.c
@@ -3,11 +3,14 @@
#include "config.h"
#include "run-command.h"
#include "strbuf.h"
+#include "dir.h"
#include "gpg-interface.h"
#include "sigchain.h"
#include "tempfile.h"
+#include "alias.h"
static char *configured_signing_key;
+static const char *ssh_default_key_command, *ssh_allowed_signers, *ssh_revocation_file;
static enum signature_trust_level configured_min_trust_level = TRUST_UNDEFINED;
struct gpg_format {
@@ -15,6 +18,14 @@ struct gpg_format {
const char *program;
const char **verify_args;
const char **sigs;
+ int (*verify_signed_buffer)(struct signature_check *sigc,
+ struct gpg_format *fmt, const char *payload,
+ size_t payload_size, const char *signature,
+ size_t signature_size);
+ int (*sign_buffer)(struct strbuf *buffer, struct strbuf *signature,
+ const char *signing_key);
+ const char *(*get_default_key)(void);
+ const char *(*get_key_id)(void);
};
static const char *openpgp_verify_args[] = {
@@ -35,14 +46,59 @@ static const char *x509_sigs[] = {
NULL
};
+static const char *ssh_verify_args[] = { NULL };
+static const char *ssh_sigs[] = {
+ "-----BEGIN SSH SIGNATURE-----",
+ NULL
+};
+
+static int verify_gpg_signed_buffer(struct signature_check *sigc,
+ struct gpg_format *fmt, const char *payload,
+ size_t payload_size, const char *signature,
+ size_t signature_size);
+static int verify_ssh_signed_buffer(struct signature_check *sigc,
+ struct gpg_format *fmt, const char *payload,
+ size_t payload_size, const char *signature,
+ size_t signature_size);
+static int sign_buffer_gpg(struct strbuf *buffer, struct strbuf *signature,
+ const char *signing_key);
+static int sign_buffer_ssh(struct strbuf *buffer, struct strbuf *signature,
+ const char *signing_key);
+
+static const char *get_default_ssh_signing_key(void);
+
+static const char *get_ssh_key_id(void);
+
static struct gpg_format gpg_format[] = {
- { .name = "openpgp", .program = "gpg",
- .verify_args = openpgp_verify_args,
- .sigs = openpgp_sigs
+ {
+ .name = "openpgp",
+ .program = "gpg",
+ .verify_args = openpgp_verify_args,
+ .sigs = openpgp_sigs,
+ .verify_signed_buffer = verify_gpg_signed_buffer,
+ .sign_buffer = sign_buffer_gpg,
+ .get_default_key = NULL,
+ .get_key_id = NULL,
},
- { .name = "x509", .program = "gpgsm",
- .verify_args = x509_verify_args,
- .sigs = x509_sigs
+ {
+ .name = "x509",
+ .program = "gpgsm",
+ .verify_args = x509_verify_args,
+ .sigs = x509_sigs,
+ .verify_signed_buffer = verify_gpg_signed_buffer,
+ .sign_buffer = sign_buffer_gpg,
+ .get_default_key = NULL,
+ .get_key_id = NULL,
+ },
+ {
+ .name = "ssh",
+ .program = "ssh-keygen",
+ .verify_args = ssh_verify_args,
+ .sigs = ssh_sigs,
+ .verify_signed_buffer = verify_ssh_signed_buffer,
+ .sign_buffer = sign_buffer_ssh,
+ .get_default_key = get_default_ssh_signing_key,
+ .get_key_id = get_ssh_key_id,
},
};
@@ -72,7 +128,7 @@ static struct gpg_format *get_format_by_sig(const char *sig)
void signature_check_clear(struct signature_check *sigc)
{
FREE_AND_NULL(sigc->payload);
- FREE_AND_NULL(sigc->gpg_output);
+ FREE_AND_NULL(sigc->output);
FREE_AND_NULL(sigc->gpg_status);
FREE_AND_NULL(sigc->signer);
FREE_AND_NULL(sigc->key);
@@ -257,16 +313,16 @@ static void parse_gpg_output(struct signature_check *sigc)
FREE_AND_NULL(sigc->key);
}
-static int verify_signed_buffer(const char *payload, size_t payload_size,
- const char *signature, size_t signature_size,
- struct strbuf *gpg_output,
- struct strbuf *gpg_status)
+static int verify_gpg_signed_buffer(struct signature_check *sigc,
+ struct gpg_format *fmt, const char *payload,
+ size_t payload_size, const char *signature,
+ size_t signature_size)
{
struct child_process gpg = CHILD_PROCESS_INIT;
- struct gpg_format *fmt;
struct tempfile *temp;
int ret;
- struct strbuf buf = STRBUF_INIT;
+ struct strbuf gpg_stdout = STRBUF_INIT;
+ struct strbuf gpg_stderr = STRBUF_INIT;
temp = mks_tempfile_t(".git_vtag_tmpXXXXXX");
if (!temp)
@@ -279,10 +335,6 @@ static int verify_signed_buffer(const char *payload, size_t payload_size,
return -1;
}
- fmt = get_format_by_sig(signature);
- if (!fmt)
- BUG("bad signature '%s'", signature);
-
strvec_push(&gpg.args, fmt->program);
strvec_pushv(&gpg.args, fmt->verify_args);
strvec_pushl(&gpg.args,
@@ -290,18 +342,222 @@ static int verify_signed_buffer(const char *payload, size_t payload_size,
"--verify", temp->filename.buf, "-",
NULL);
- if (!gpg_status)
- gpg_status = &buf;
-
sigchain_push(SIGPIPE, SIG_IGN);
- ret = pipe_command(&gpg, payload, payload_size,
- gpg_status, 0, gpg_output, 0);
+ ret = pipe_command(&gpg, payload, payload_size, &gpg_stdout, 0,
+ &gpg_stderr, 0);
sigchain_pop(SIGPIPE);
delete_tempfile(&temp);
- ret |= !strstr(gpg_status->buf, "\n[GNUPG:] GOODSIG ");
- strbuf_release(&buf); /* no matter it was used or not */
+ ret |= !strstr(gpg_stdout.buf, "\n[GNUPG:] GOODSIG ");
+ sigc->payload = xmemdupz(payload, payload_size);
+ sigc->output = strbuf_detach(&gpg_stderr, NULL);
+ sigc->gpg_status = strbuf_detach(&gpg_stdout, NULL);
+
+ parse_gpg_output(sigc);
+
+ strbuf_release(&gpg_stdout);
+ strbuf_release(&gpg_stderr);
+
+ return ret;
+}
+
+static void parse_ssh_output(struct signature_check *sigc)
+{
+ const char *line, *principal, *search;
+ char *to_free;
+ char *key = NULL;
+
+ /*
+ * ssh-keygen output should be:
+ * Good "git" signature for PRINCIPAL with RSA key SHA256:FINGERPRINT
+ *
+ * or for valid but unknown keys:
+ * Good "git" signature with RSA key SHA256:FINGERPRINT
+ *
+ * Note that "PRINCIPAL" can contain whitespace, "RSA" and
+ * "SHA256" part could be a different token that names of
+ * the algorithms used, and "FINGERPRINT" is a hexadecimal
+ * string. By finding the last occurence of " with ", we can
+ * reliably parse out the PRINCIPAL.
+ */
+ sigc->result = 'B';
+ sigc->trust_level = TRUST_NEVER;
+
+ line = to_free = xmemdupz(sigc->output, strcspn(sigc->output, "\n"));
+
+ if (skip_prefix(line, "Good \"git\" signature for ", &line)) {
+ /* Search for the last "with" to get the full principal */
+ principal = line;
+ do {
+ search = strstr(line, " with ");
+ if (search)
+ line = search + 1;
+ } while (search != NULL);
+ if (line == principal)
+ goto cleanup;
+
+ /* Valid signature and known principal */
+ sigc->result = 'G';
+ sigc->trust_level = TRUST_FULLY;
+ sigc->signer = xmemdupz(principal, line - principal - 1);
+ } else if (skip_prefix(line, "Good \"git\" signature with ", &line)) {
+ /* Valid signature, but key unknown */
+ sigc->result = 'G';
+ sigc->trust_level = TRUST_UNDEFINED;
+ } else {
+ goto cleanup;
+ }
+
+ key = strstr(line, "key ");
+ if (key) {
+ sigc->fingerprint = xstrdup(strstr(line, "key ") + 4);
+ sigc->key = xstrdup(sigc->fingerprint);
+ } else {
+ /*
+ * Output did not match what we expected
+ * Treat the signature as bad
+ */
+ sigc->result = 'B';
+ }
+
+cleanup:
+ free(to_free);
+}
+
+static int verify_ssh_signed_buffer(struct signature_check *sigc,
+ struct gpg_format *fmt, const char *payload,
+ size_t payload_size, const char *signature,
+ size_t signature_size)
+{
+ struct child_process ssh_keygen = CHILD_PROCESS_INIT;
+ struct tempfile *buffer_file;
+ int ret = -1;
+ const char *line;
+ size_t trust_size;
+ char *principal;
+ struct strbuf ssh_principals_out = STRBUF_INIT;
+ struct strbuf ssh_principals_err = STRBUF_INIT;
+ struct strbuf ssh_keygen_out = STRBUF_INIT;
+ struct strbuf ssh_keygen_err = STRBUF_INIT;
+
+ if (!ssh_allowed_signers) {
+ error(_("gpg.ssh.allowedSignersFile needs to be configured and exist for ssh signature verification"));
+ return -1;
+ }
+
+ buffer_file = mks_tempfile_t(".git_vtag_tmpXXXXXX");
+ if (!buffer_file)
+ return error_errno(_("could not create temporary file"));
+ if (write_in_full(buffer_file->fd, signature, signature_size) < 0 ||
+ close_tempfile_gently(buffer_file) < 0) {
+ error_errno(_("failed writing detached signature to '%s'"),
+ buffer_file->filename.buf);
+ delete_tempfile(&buffer_file);
+ return -1;
+ }
+
+ /* Find the principal from the signers */
+ strvec_pushl(&ssh_keygen.args, fmt->program,
+ "-Y", "find-principals",
+ "-f", ssh_allowed_signers,
+ "-s", buffer_file->filename.buf,
+ NULL);
+ ret = pipe_command(&ssh_keygen, NULL, 0, &ssh_principals_out, 0,
+ &ssh_principals_err, 0);
+ if (ret && strstr(ssh_principals_err.buf, "usage:")) {
+ error(_("ssh-keygen -Y find-principals/verify is needed for ssh signature verification (available in openssh version 8.2p1+)"));
+ goto out;
+ }
+ if (ret || !ssh_principals_out.len) {
+ /*
+ * We did not find a matching principal in the allowedSigners
+ * Check without validation
+ */
+ child_process_init(&ssh_keygen);
+ strvec_pushl(&ssh_keygen.args, fmt->program,
+ "-Y", "check-novalidate",
+ "-n", "git",
+ "-s", buffer_file->filename.buf,
+ NULL);
+ pipe_command(&ssh_keygen, payload, payload_size,
+ &ssh_keygen_out, 0, &ssh_keygen_err, 0);
+
+ /*
+ * Fail on unknown keys
+ * we still call check-novalidate to display the signature info
+ */
+ ret = -1;
+ } else {
+ /* Check every principal we found (one per line) */
+ for (line = ssh_principals_out.buf; *line;
+ line = strchrnul(line + 1, '\n')) {
+ while (*line == '\n')
+ line++;
+ if (!*line)
+ break;
+
+ trust_size = strcspn(line, "\n");
+ principal = xmemdupz(line, trust_size);
+
+ child_process_init(&ssh_keygen);
+ strbuf_release(&ssh_keygen_out);
+ strbuf_release(&ssh_keygen_err);
+ strvec_push(&ssh_keygen.args, fmt->program);
+ /*
+ * We found principals
+ * Try with each until we find a match
+ */
+ strvec_pushl(&ssh_keygen.args, "-Y", "verify",
+ "-n", "git",
+ "-f", ssh_allowed_signers,
+ "-I", principal,
+ "-s", buffer_file->filename.buf,
+ NULL);
+
+ if (ssh_revocation_file) {
+ if (file_exists(ssh_revocation_file)) {
+ strvec_pushl(&ssh_keygen.args, "-r",
+ ssh_revocation_file, NULL);
+ } else {
+ warning(_("ssh signing revocation file configured but not found: %s"),
+ ssh_revocation_file);
+ }
+ }
+
+ sigchain_push(SIGPIPE, SIG_IGN);
+ ret = pipe_command(&ssh_keygen, payload, payload_size,
+ &ssh_keygen_out, 0, &ssh_keygen_err, 0);
+ sigchain_pop(SIGPIPE);
+
+ FREE_AND_NULL(principal);
+
+ if (!ret)
+ ret = !starts_with(ssh_keygen_out.buf, "Good");
+
+ if (!ret)
+ break;
+ }
+ }
+
+ sigc->payload = xmemdupz(payload, payload_size);
+ strbuf_stripspace(&ssh_keygen_out, 0);
+ strbuf_stripspace(&ssh_keygen_err, 0);
+ /* Add stderr outputs to show the user actual ssh-keygen errors */
+ strbuf_add(&ssh_keygen_out, ssh_principals_err.buf, ssh_principals_err.len);
+ strbuf_add(&ssh_keygen_out, ssh_keygen_err.buf, ssh_keygen_err.len);
+ sigc->output = strbuf_detach(&ssh_keygen_out, NULL);
+ sigc->gpg_status = xstrdup(sigc->output);
+
+ parse_ssh_output(sigc);
+
+out:
+ if (buffer_file)
+ delete_tempfile(&buffer_file);
+ strbuf_release(&ssh_principals_out);
+ strbuf_release(&ssh_principals_err);
+ strbuf_release(&ssh_keygen_out);
+ strbuf_release(&ssh_keygen_err);
return ret;
}
@@ -309,35 +565,32 @@ static int verify_signed_buffer(const char *payload, size_t payload_size,
int check_signature(const char *payload, size_t plen, const char *signature,
size_t slen, struct signature_check *sigc)
{
- struct strbuf gpg_output = STRBUF_INIT;
- struct strbuf gpg_status = STRBUF_INIT;
+ struct gpg_format *fmt;
int status;
sigc->result = 'N';
sigc->trust_level = -1;
- status = verify_signed_buffer(payload, plen, signature, slen,
- &gpg_output, &gpg_status);
- if (status && !gpg_output.len)
- goto out;
- sigc->payload = xmemdupz(payload, plen);
- sigc->gpg_output = strbuf_detach(&gpg_output, NULL);
- sigc->gpg_status = strbuf_detach(&gpg_status, NULL);
- parse_gpg_output(sigc);
+ fmt = get_format_by_sig(signature);
+ if (!fmt)
+ die(_("bad/incompatible signature '%s'"), signature);
+
+ status = fmt->verify_signed_buffer(sigc, fmt, payload, plen, signature,
+ slen);
+
+ if (status && !sigc->output)
+ return !!status;
+
status |= sigc->result != 'G';
status |= sigc->trust_level < configured_min_trust_level;
- out:
- strbuf_release(&gpg_status);
- strbuf_release(&gpg_output);
-
return !!status;
}
void print_signature_buffer(const struct signature_check *sigc, unsigned flags)
{
- const char *output = flags & GPG_VERIFY_RAW ?
- sigc->gpg_status : sigc->gpg_output;
+ const char *output = flags & GPG_VERIFY_RAW ? sigc->gpg_status :
+ sigc->output;
if (flags & GPG_VERIFY_VERBOSE && sigc->payload)
fputs(sigc->payload, stdout);
@@ -419,12 +672,33 @@ int git_gpg_config(const char *var, const char *value, void *cb)
return 0;
}
+ if (!strcmp(var, "gpg.ssh.defaultkeycommand")) {
+ if (!value)
+ return config_error_nonbool(var);
+ return git_config_string(&ssh_default_key_command, var, value);
+ }
+
+ if (!strcmp(var, "gpg.ssh.allowedsignersfile")) {
+ if (!value)
+ return config_error_nonbool(var);
+ return git_config_pathname(&ssh_allowed_signers, var, value);
+ }
+
+ if (!strcmp(var, "gpg.ssh.revocationfile")) {
+ if (!value)
+ return config_error_nonbool(var);
+ return git_config_pathname(&ssh_revocation_file, var, value);
+ }
+
if (!strcmp(var, "gpg.program") || !strcmp(var, "gpg.openpgp.program"))
fmtname = "openpgp";
if (!strcmp(var, "gpg.x509.program"))
fmtname = "x509";
+ if (!strcmp(var, "gpg.ssh.program"))
+ fmtname = "ssh";
+
if (fmtname) {
fmt = get_format_by_name(fmtname);
return git_config_string(&fmt->program, var, value);
@@ -433,18 +707,148 @@ int git_gpg_config(const char *var, const char *value, void *cb)
return 0;
}
+static char *get_ssh_key_fingerprint(const char *signing_key)
+{
+ struct child_process ssh_keygen = CHILD_PROCESS_INIT;
+ int ret = -1;
+ struct strbuf fingerprint_stdout = STRBUF_INIT;
+ struct strbuf **fingerprint;
+ char *fingerprint_ret;
+
+ /*
+ * With SSH Signing this can contain a filename or a public key
+ * For textual representation we usually want a fingerprint
+ */
+ if (starts_with(signing_key, "ssh-")) {
+ strvec_pushl(&ssh_keygen.args, "ssh-keygen", "-lf", "-", NULL);
+ ret = pipe_command(&ssh_keygen, signing_key,
+ strlen(signing_key), &fingerprint_stdout, 0,
+ NULL, 0);
+ } else {
+ strvec_pushl(&ssh_keygen.args, "ssh-keygen", "-lf",
+ configured_signing_key, NULL);
+ ret = pipe_command(&ssh_keygen, NULL, 0, &fingerprint_stdout, 0,
+ NULL, 0);
+ }
+
+ if (!!ret)
+ die_errno(_("failed to get the ssh fingerprint for key '%s'"),
+ signing_key);
+
+ fingerprint = strbuf_split_max(&fingerprint_stdout, ' ', 3);
+ if (!fingerprint[1])
+ die_errno(_("failed to get the ssh fingerprint for key '%s'"),
+ signing_key);
+
+ fingerprint_ret = strbuf_detach(fingerprint[1], NULL);
+ strbuf_list_free(fingerprint);
+ strbuf_release(&fingerprint_stdout);
+ return fingerprint_ret;
+}
+
+/* Returns the first public key from an ssh-agent to use for signing */
+static const char *get_default_ssh_signing_key(void)
+{
+ struct child_process ssh_default_key = CHILD_PROCESS_INIT;
+ int ret = -1;
+ struct strbuf key_stdout = STRBUF_INIT, key_stderr = STRBUF_INIT;
+ struct strbuf **keys;
+ char *key_command = NULL;
+ const char **argv;
+ int n;
+ char *default_key = NULL;
+
+ if (!ssh_default_key_command)
+ die(_("either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured"));
+
+ key_command = xstrdup(ssh_default_key_command);
+ n = split_cmdline(key_command, &argv);
+
+ if (n < 0)
+ die("malformed build-time gpg.ssh.defaultKeyCommand: %s",
+ split_cmdline_strerror(n));
+
+ strvec_pushv(&ssh_default_key.args, argv);
+ ret = pipe_command(&ssh_default_key, NULL, 0, &key_stdout, 0,
+ &key_stderr, 0);
+
+ if (!ret) {
+ keys = strbuf_split_max(&key_stdout, '\n', 2);
+ if (keys[0] && starts_with(keys[0]->buf, "ssh-")) {
+ default_key = strbuf_detach(keys[0], NULL);
+ } else {
+ warning(_("gpg.ssh.defaultKeyCommand succeeded but returned no keys: %s %s"),
+ key_stderr.buf, key_stdout.buf);
+ }
+
+ strbuf_list_free(keys);
+ } else {
+ warning(_("gpg.ssh.defaultKeyCommand failed: %s %s"),
+ key_stderr.buf, key_stdout.buf);
+ }
+
+ free(key_command);
+ free(argv);
+ strbuf_release(&key_stdout);
+
+ return default_key;
+}
+
+static const char *get_ssh_key_id(void) {
+ return get_ssh_key_fingerprint(get_signing_key());
+}
+
+/* Returns a textual but unique representation of the signing key */
+const char *get_signing_key_id(void)
+{
+ if (use_format->get_key_id) {
+ return use_format->get_key_id();
+ }
+
+ /* GPG/GPGSM only store a key id on this variable */
+ return get_signing_key();
+}
+
const char *get_signing_key(void)
{
if (configured_signing_key)
return configured_signing_key;
- return git_committer_info(IDENT_STRICT|IDENT_NO_DATE);
+ if (use_format->get_default_key) {
+ return use_format->get_default_key();
+ }
+
+ return git_committer_info(IDENT_STRICT | IDENT_NO_DATE);
}
int sign_buffer(struct strbuf *buffer, struct strbuf *signature, const char *signing_key)
{
+ return use_format->sign_buffer(buffer, signature, signing_key);
+}
+
+/*
+ * Strip CR from the line endings, in case we are on Windows.
+ * NEEDSWORK: make it trim only CRs before LFs and rename
+ */
+static void remove_cr_after(struct strbuf *buffer, size_t offset)
+{
+ size_t i, j;
+
+ for (i = j = offset; i < buffer->len; i++) {
+ if (buffer->buf[i] != '\r') {
+ if (i != j)
+ buffer->buf[j] = buffer->buf[i];
+ j++;
+ }
+ }
+ strbuf_setlen(buffer, j);
+}
+
+static int sign_buffer_gpg(struct strbuf *buffer, struct strbuf *signature,
+ const char *signing_key)
+{
struct child_process gpg = CHILD_PROCESS_INIT;
int ret;
- size_t i, j, bottom;
+ size_t bottom;
struct strbuf gpg_status = STRBUF_INIT;
strvec_pushl(&gpg.args,
@@ -470,13 +874,98 @@ int sign_buffer(struct strbuf *buffer, struct strbuf *signature, const char *sig
return error(_("gpg failed to sign the data"));
/* Strip CR from the line endings, in case we are on Windows. */
- for (i = j = bottom; i < signature->len; i++)
- if (signature->buf[i] != '\r') {
- if (i != j)
- signature->buf[j] = signature->buf[i];
- j++;
- }
- strbuf_setlen(signature, j);
+ remove_cr_after(signature, bottom);
return 0;
}
+
+static int sign_buffer_ssh(struct strbuf *buffer, struct strbuf *signature,
+ const char *signing_key)
+{
+ struct child_process signer = CHILD_PROCESS_INIT;
+ int ret = -1;
+ size_t bottom, keylen;
+ struct strbuf signer_stderr = STRBUF_INIT;
+ struct tempfile *key_file = NULL, *buffer_file = NULL;
+ char *ssh_signing_key_file = NULL;
+ struct strbuf ssh_signature_filename = STRBUF_INIT;
+
+ if (!signing_key || signing_key[0] == '\0')
+ return error(
+ _("user.signingkey needs to be set for ssh signing"));
+
+ if (starts_with(signing_key, "ssh-")) {
+ /* A literal ssh key */
+ key_file = mks_tempfile_t(".git_signing_key_tmpXXXXXX");
+ if (!key_file)
+ return error_errno(
+ _("could not create temporary file"));
+ keylen = strlen(signing_key);
+ if (write_in_full(key_file->fd, signing_key, keylen) < 0 ||
+ close_tempfile_gently(key_file) < 0) {
+ error_errno(_("failed writing ssh signing key to '%s'"),
+ key_file->filename.buf);
+ goto out;
+ }
+ ssh_signing_key_file = strbuf_detach(&key_file->filename, NULL);
+ } else {
+ /* We assume a file */
+ ssh_signing_key_file = expand_user_path(signing_key, 1);
+ }
+
+ buffer_file = mks_tempfile_t(".git_signing_buffer_tmpXXXXXX");
+ if (!buffer_file) {
+ error_errno(_("could not create temporary file"));
+ goto out;
+ }
+
+ if (write_in_full(buffer_file->fd, buffer->buf, buffer->len) < 0 ||
+ close_tempfile_gently(buffer_file) < 0) {
+ error_errno(_("failed writing ssh signing key buffer to '%s'"),
+ buffer_file->filename.buf);
+ goto out;
+ }
+
+ strvec_pushl(&signer.args, use_format->program,
+ "-Y", "sign",
+ "-n", "git",
+ "-f", ssh_signing_key_file,
+ buffer_file->filename.buf,
+ NULL);
+
+ sigchain_push(SIGPIPE, SIG_IGN);
+ ret = pipe_command(&signer, NULL, 0, NULL, 0, &signer_stderr, 0);
+ sigchain_pop(SIGPIPE);
+
+ if (ret) {
+ if (strstr(signer_stderr.buf, "usage:"))
+ error(_("ssh-keygen -Y sign is needed for ssh signing (available in openssh version 8.2p1+)"));
+
+ error("%s", signer_stderr.buf);
+ goto out;
+ }
+
+ bottom = signature->len;
+
+ strbuf_addbuf(&ssh_signature_filename, &buffer_file->filename);
+ strbuf_addstr(&ssh_signature_filename, ".sig");
+ if (strbuf_read_file(signature, ssh_signature_filename.buf, 0) < 0) {
+ error_errno(
+ _("failed reading ssh signing data buffer from '%s'"),
+ ssh_signature_filename.buf);
+ }
+ unlink_or_warn(ssh_signature_filename.buf);
+
+ /* Strip CR from the line endings, in case we are on Windows. */
+ remove_cr_after(signature, bottom);
+
+out:
+ if (key_file)
+ delete_tempfile(&key_file);
+ if (buffer_file)
+ delete_tempfile(&buffer_file);
+ strbuf_release(&signer_stderr);
+ strbuf_release(&ssh_signature_filename);
+ FREE_AND_NULL(ssh_signing_key_file);
+ return ret;
+}
diff --git a/gpg-interface.h b/gpg-interface.h
index 80567e4..beefacb 100644
--- a/gpg-interface.h
+++ b/gpg-interface.h
@@ -17,7 +17,7 @@ enum signature_trust_level {
struct signature_check {
char *payload;
- char *gpg_output;
+ char *output;
char *gpg_status;
/*
@@ -64,6 +64,12 @@ int sign_buffer(struct strbuf *buffer, struct strbuf *signature,
int git_gpg_config(const char *, const char *, void *);
void set_signing_key(const char *);
const char *get_signing_key(void);
+
+/*
+ * Returns a textual unique representation of the signing key in use
+ * Either a GPG KeyID or a SSH Key Fingerprint
+ */
+const char *get_signing_key_id(void);
int check_signature(const char *payload, size_t plen,
const char *signature, size_t slen,
struct signature_check *sigc);
diff --git a/grep.c b/grep.c
index 424a395..fe847a0 100644
--- a/grep.c
+++ b/grep.c
@@ -867,7 +867,7 @@ void free_grep_patterns(struct grep_opt *opt)
free_pattern_expr(opt->pattern_expression);
}
-static char *end_of_line(char *cp, unsigned long *left)
+static const char *end_of_line(const char *cp, unsigned long *left)
{
unsigned long l = *left;
while (l && *cp != '\n') {
@@ -908,7 +908,8 @@ static void show_name(struct grep_opt *opt, const char *name)
opt->output(opt, opt->null_following_name ? "\0" : "\n", 1);
}
-static int patmatch(struct grep_pat *p, char *line, char *eol,
+static int patmatch(struct grep_pat *p,
+ const char *line, const char *eol,
regmatch_t *match, int eflags)
{
int hit;
@@ -922,20 +923,16 @@ static int patmatch(struct grep_pat *p, char *line, char *eol,
return hit;
}
-static int strip_timestamp(char *bol, char **eol_p)
+static void strip_timestamp(const char *bol, const char **eol_p)
{
- char *eol = *eol_p;
- int ch;
+ const char *eol = *eol_p;
while (bol < --eol) {
if (*eol != '>')
continue;
*eol_p = ++eol;
- ch = *eol;
- *eol = '\0';
- return ch;
+ break;
}
- return 0;
}
static struct {
@@ -947,37 +944,18 @@ static struct {
{ "reflog ", 7 },
};
-static int match_one_pattern(struct grep_pat *p, char *bol, char *eol,
- enum grep_context ctx,
- regmatch_t *pmatch, int eflags)
+static int headerless_match_one_pattern(struct grep_pat *p,
+ const char *bol, const char *eol,
+ enum grep_context ctx,
+ regmatch_t *pmatch, int eflags)
{
int hit = 0;
- int saved_ch = 0;
const char *start = bol;
if ((p->token != GREP_PATTERN) &&
((p->token == GREP_PATTERN_HEAD) != (ctx == GREP_CONTEXT_HEAD)))
return 0;
- if (p->token == GREP_PATTERN_HEAD) {
- const char *field;
- size_t len;
- assert(p->field < ARRAY_SIZE(header_field));
- field = header_field[p->field].field;
- len = header_field[p->field].len;
- if (strncmp(bol, field, len))
- return 0;
- bol += len;
- switch (p->field) {
- case GREP_HEADER_AUTHOR:
- case GREP_HEADER_COMMITTER:
- saved_ch = strip_timestamp(bol, &eol);
- break;
- default:
- break;
- }
- }
-
again:
hit = patmatch(p, bol, eol, pmatch, eflags);
@@ -1021,8 +999,6 @@ static int match_one_pattern(struct grep_pat *p, char *bol, char *eol,
goto again;
}
}
- if (p->token == GREP_PATTERN_HEAD && saved_ch)
- *eol = saved_ch;
if (hit) {
pmatch[0].rm_so += bol - start;
pmatch[0].rm_eo += bol - start;
@@ -1030,8 +1006,39 @@ static int match_one_pattern(struct grep_pat *p, char *bol, char *eol,
return hit;
}
-static int match_expr_eval(struct grep_opt *opt, struct grep_expr *x, char *bol,
- char *eol, enum grep_context ctx, ssize_t *col,
+static int match_one_pattern(struct grep_pat *p,
+ const char *bol, const char *eol,
+ enum grep_context ctx, regmatch_t *pmatch,
+ int eflags)
+{
+ const char *field;
+ size_t len;
+
+ if (p->token == GREP_PATTERN_HEAD) {
+ assert(p->field < ARRAY_SIZE(header_field));
+ field = header_field[p->field].field;
+ len = header_field[p->field].len;
+ if (strncmp(bol, field, len))
+ return 0;
+ bol += len;
+
+ switch (p->field) {
+ case GREP_HEADER_AUTHOR:
+ case GREP_HEADER_COMMITTER:
+ strip_timestamp(bol, &eol);
+ break;
+ default:
+ break;
+ }
+ }
+
+ return headerless_match_one_pattern(p, bol, eol, ctx, pmatch, eflags);
+}
+
+
+static int match_expr_eval(struct grep_opt *opt, struct grep_expr *x,
+ const char *bol, const char *eol,
+ enum grep_context ctx, ssize_t *col,
ssize_t *icol, int collect_hits)
{
int h = 0;
@@ -1098,7 +1105,8 @@ static int match_expr_eval(struct grep_opt *opt, struct grep_expr *x, char *bol,
return h;
}
-static int match_expr(struct grep_opt *opt, char *bol, char *eol,
+static int match_expr(struct grep_opt *opt,
+ const char *bol, const char *eol,
enum grep_context ctx, ssize_t *col,
ssize_t *icol, int collect_hits)
{
@@ -1106,7 +1114,8 @@ static int match_expr(struct grep_opt *opt, char *bol, char *eol,
return match_expr_eval(opt, x, bol, eol, ctx, col, icol, collect_hits);
}
-static int match_line(struct grep_opt *opt, char *bol, char *eol,
+static int match_line(struct grep_opt *opt,
+ const char *bol, const char *eol,
ssize_t *col, ssize_t *icol,
enum grep_context ctx, int collect_hits)
{
@@ -1138,13 +1147,14 @@ static int match_line(struct grep_opt *opt, char *bol, char *eol,
return hit;
}
-static int match_next_pattern(struct grep_pat *p, char *bol, char *eol,
+static int match_next_pattern(struct grep_pat *p,
+ const char *bol, const char *eol,
enum grep_context ctx,
regmatch_t *pmatch, int eflags)
{
regmatch_t match;
- if (!match_one_pattern(p, bol, eol, ctx, &match, eflags))
+ if (!headerless_match_one_pattern(p, bol, eol, ctx, &match, eflags))
return 0;
if (match.rm_so < 0 || match.rm_eo < 0)
return 0;
@@ -1159,18 +1169,26 @@ static int match_next_pattern(struct grep_pat *p, char *bol, char *eol,
return 1;
}
-static int next_match(struct grep_opt *opt, char *bol, char *eol,
- enum grep_context ctx, regmatch_t *pmatch, int eflags)
+int grep_next_match(struct grep_opt *opt,
+ const char *bol, const char *eol,
+ enum grep_context ctx, regmatch_t *pmatch,
+ enum grep_header_field field, int eflags)
{
struct grep_pat *p;
int hit = 0;
pmatch->rm_so = pmatch->rm_eo = -1;
if (bol < eol) {
- for (p = opt->pattern_list; p; p = p->next) {
+ for (p = ((ctx == GREP_CONTEXT_HEAD)
+ ? opt->header_list : opt->pattern_list);
+ p; p = p->next) {
switch (p->token) {
- case GREP_PATTERN: /* atom */
case GREP_PATTERN_HEAD:
+ if ((field != GREP_HEADER_FIELD_MAX) &&
+ (p->field != field))
+ continue;
+ /* fall thru */
+ case GREP_PATTERN: /* atom */
case GREP_PATTERN_BODY:
hit |= match_next_pattern(p, bol, eol, ctx,
pmatch, eflags);
@@ -1215,7 +1233,8 @@ static void show_line_header(struct grep_opt *opt, const char *name,
}
}
-static void show_line(struct grep_opt *opt, char *bol, char *eol,
+static void show_line(struct grep_opt *opt,
+ const char *bol, const char *eol,
const char *name, unsigned lno, ssize_t cno, char sign)
{
int rest = eol - bol;
@@ -1246,7 +1265,6 @@ static void show_line(struct grep_opt *opt, char *bol, char *eol,
if (opt->color || opt->only_matching) {
regmatch_t match;
enum grep_context ctx = GREP_CONTEXT_BODY;
- int ch = *eol;
int eflags = 0;
if (opt->color) {
@@ -1261,8 +1279,8 @@ static void show_line(struct grep_opt *opt, char *bol, char *eol,
else if (sign == '=')
line_color = opt->colors[GREP_COLOR_FUNCTION];
}
- *eol = '\0';
- while (next_match(opt, bol, eol, ctx, &match, eflags)) {
+ while (grep_next_match(opt, bol, eol, ctx, &match,
+ GREP_HEADER_FIELD_MAX, eflags)) {
if (match.rm_so == match.rm_eo)
break;
@@ -1279,7 +1297,6 @@ static void show_line(struct grep_opt *opt, char *bol, char *eol,
rest -= match.rm_eo;
eflags = REG_NOTBOL;
}
- *eol = ch;
}
if (!opt->only_matching) {
output_color(opt, bol, rest, line_color);
@@ -1307,7 +1324,8 @@ static inline void grep_attr_unlock(void)
pthread_mutex_unlock(&grep_attr_mutex);
}
-static int match_funcname(struct grep_opt *opt, struct grep_source *gs, char *bol, char *eol)
+static int match_funcname(struct grep_opt *opt, struct grep_source *gs,
+ const char *bol, const char *eol)
{
xdemitconf_t *xecfg = opt->priv;
if (xecfg && !xecfg->find_func) {
@@ -1334,10 +1352,10 @@ static int match_funcname(struct grep_opt *opt, struct grep_source *gs, char *bo
}
static void show_funcname_line(struct grep_opt *opt, struct grep_source *gs,
- char *bol, unsigned lno)
+ const char *bol, unsigned lno)
{
while (bol > gs->buf) {
- char *eol = --bol;
+ const char *eol = --bol;
while (bol > gs->buf && bol[-1] != '\n')
bol--;
@@ -1356,7 +1374,7 @@ static void show_funcname_line(struct grep_opt *opt, struct grep_source *gs,
static int is_empty_line(const char *bol, const char *eol);
static void show_pre_context(struct grep_opt *opt, struct grep_source *gs,
- char *bol, char *end, unsigned lno)
+ const char *bol, const char *end, unsigned lno)
{
unsigned cur = lno, from = 1, funcname_lno = 0, orig_from;
int funcname_needed = !!opt->funcname, comment_needed = 0;
@@ -1376,8 +1394,8 @@ static void show_pre_context(struct grep_opt *opt, struct grep_source *gs,
/* Rewind. */
while (bol > gs->buf && cur > from) {
- char *next_bol = bol;
- char *eol = --bol;
+ const char *next_bol = bol;
+ const char *eol = --bol;
while (bol > gs->buf && bol[-1] != '\n')
bol--;
@@ -1408,7 +1426,7 @@ static void show_pre_context(struct grep_opt *opt, struct grep_source *gs,
/* Back forward. */
while (cur < lno) {
- char *eol = bol, sign = (cur == funcname_lno) ? '=' : '-';
+ const char *eol = bol, sign = (cur == funcname_lno) ? '=' : '-';
while (*eol != '\n')
eol++;
@@ -1436,12 +1454,12 @@ static int should_lookahead(struct grep_opt *opt)
static int look_ahead(struct grep_opt *opt,
unsigned long *left_p,
unsigned *lno_p,
- char **bol_p)
+ const char **bol_p)
{
unsigned lno = *lno_p;
- char *bol = *bol_p;
+ const char *bol = *bol_p;
struct grep_pat *p;
- char *sp, *last_bol;
+ const char *sp, *last_bol;
regoff_t earliest = -1;
for (p = opt->pattern_list; p; p = p->next) {
@@ -1543,8 +1561,8 @@ static int is_empty_line(const char *bol, const char *eol)
static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int collect_hits)
{
- char *bol;
- char *peek_bol = NULL;
+ const char *bol;
+ const char *peek_bol = NULL;
unsigned long left;
unsigned lno = 1;
unsigned last_hit = 0;
@@ -1626,7 +1644,7 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colle
bol = gs->buf;
left = gs->size;
while (left) {
- char *eol, ch;
+ const char *eol;
int hit;
ssize_t cno;
ssize_t col = -1, icol = -1;
@@ -1647,14 +1665,11 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colle
&& look_ahead(opt, &left, &lno, &bol))
break;
eol = end_of_line(bol, &left);
- ch = *eol;
- *eol = 0;
if ((ctx == GREP_CONTEXT_HEAD) && (eol == bol))
ctx = GREP_CONTEXT_BODY;
hit = match_line(opt, bol, eol, &col, &icol, ctx, collect_hits);
- *eol = ch;
if (collect_hits)
goto next_line;
@@ -1713,7 +1728,7 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colle
}
if (show_function && (!peek_bol || peek_bol < bol)) {
unsigned long peek_left = left;
- char *peek_eol = eol;
+ const char *peek_eol = eol;
/*
* Trailing empty lines are not interesting.
@@ -1825,14 +1840,25 @@ int grep_source(struct grep_opt *opt, struct grep_source *gs)
return grep_source_1(opt, gs, 0);
}
-int grep_buffer(struct grep_opt *opt, char *buf, unsigned long size)
+static void grep_source_init_buf(struct grep_source *gs,
+ const char *buf,
+ unsigned long size)
+{
+ gs->type = GREP_SOURCE_BUF;
+ gs->name = NULL;
+ gs->path = NULL;
+ gs->buf = buf;
+ gs->size = size;
+ gs->driver = NULL;
+ gs->identifier = NULL;
+}
+
+int grep_buffer(struct grep_opt *opt, const char *buf, unsigned long size)
{
struct grep_source gs;
int r;
- grep_source_init(&gs, GREP_SOURCE_BUF, NULL, NULL, NULL);
- gs.buf = buf;
- gs.size = size;
+ grep_source_init_buf(&gs, buf, size);
r = grep_source(opt, &gs);
@@ -1840,28 +1866,30 @@ int grep_buffer(struct grep_opt *opt, char *buf, unsigned long size)
return r;
}
-void grep_source_init(struct grep_source *gs, enum grep_source_type type,
- const char *name, const char *path,
- const void *identifier)
+void grep_source_init_file(struct grep_source *gs, const char *name,
+ const char *path)
{
- gs->type = type;
+ gs->type = GREP_SOURCE_FILE;
gs->name = xstrdup_or_null(name);
gs->path = xstrdup_or_null(path);
gs->buf = NULL;
gs->size = 0;
gs->driver = NULL;
+ gs->identifier = xstrdup(path);
+}
- switch (type) {
- case GREP_SOURCE_FILE:
- gs->identifier = xstrdup(identifier);
- break;
- case GREP_SOURCE_OID:
- gs->identifier = oiddup(identifier);
- break;
- case GREP_SOURCE_BUF:
- gs->identifier = NULL;
- break;
- }
+void grep_source_init_oid(struct grep_source *gs, const char *name,
+ const char *path, const struct object_id *oid,
+ struct repository *repo)
+{
+ gs->type = GREP_SOURCE_OID;
+ gs->name = xstrdup_or_null(name);
+ gs->path = xstrdup_or_null(path);
+ gs->buf = NULL;
+ gs->size = 0;
+ gs->driver = NULL;
+ gs->identifier = oiddup(oid);
+ gs->repo = repo;
}
void grep_source_clear(struct grep_source *gs)
@@ -1877,7 +1905,9 @@ void grep_source_clear_data(struct grep_source *gs)
switch (gs->type) {
case GREP_SOURCE_FILE:
case GREP_SOURCE_OID:
- FREE_AND_NULL(gs->buf);
+ /* these types own the buffer */
+ free((char *)gs->buf);
+ gs->buf = NULL;
gs->size = 0;
break;
case GREP_SOURCE_BUF:
@@ -1890,7 +1920,8 @@ static int grep_source_load_oid(struct grep_source *gs)
{
enum object_type type;
- gs->buf = read_object_file(gs->identifier, &type, &gs->size);
+ gs->buf = repo_read_object_file(gs->repo, gs->identifier, &type,
+ &gs->size);
if (!gs->buf)
return error(_("'%s': unable to read %s"),
gs->name,
diff --git a/grep.h b/grep.h
index 72f82b1..3e8815c 100644
--- a/grep.h
+++ b/grep.h
@@ -120,7 +120,20 @@ struct grep_opt {
struct grep_pat *header_list;
struct grep_pat **header_tail;
struct grep_expr *pattern_expression;
+
+ /*
+ * NEEDSWORK: See if we can remove this field, because the repository
+ * should probably be per-source. That is, grep.c functions using this
+ * field should probably start using "repo" in "struct grep_source"
+ * instead.
+ *
+ * This is potentially the cause of at least one bug - "git grep"
+ * using the textconv attributes from the superproject on the
+ * submodules. See the failing "git grep --textconv" tests in
+ * t7814-grep-recurse-submodules.sh for more information.
+ */
struct repository *repo;
+
const char *prefix;
int prefix_length;
regex_t regexp;
@@ -176,7 +189,16 @@ void append_grep_pattern(struct grep_opt *opt, const char *pat, const char *orig
void append_header_grep_pattern(struct grep_opt *, enum grep_header_field, const char *);
void compile_grep_patterns(struct grep_opt *opt);
void free_grep_patterns(struct grep_opt *opt);
-int grep_buffer(struct grep_opt *opt, char *buf, unsigned long size);
+int grep_buffer(struct grep_opt *opt, const char *buf, unsigned long size);
+
+/* The field parameter is only used to filter header patterns
+ * (where appropriate). If filtering isn't desirable
+ * GREP_HEADER_FIELD_MAX should be supplied.
+ */
+int grep_next_match(struct grep_opt *opt,
+ const char *bol, const char *eol,
+ enum grep_context ctx, regmatch_t *pmatch,
+ enum grep_header_field field, int eflags);
struct grep_source {
char *name;
@@ -187,17 +209,20 @@ struct grep_source {
GREP_SOURCE_BUF,
} type;
void *identifier;
+ struct repository *repo; /* if GREP_SOURCE_OID */
- char *buf;
+ const char *buf;
unsigned long size;
char *path; /* for attribute lookups */
struct userdiff_driver *driver;
};
-void grep_source_init(struct grep_source *gs, enum grep_source_type type,
- const char *name, const char *path,
- const void *identifier);
+void grep_source_init_file(struct grep_source *gs, const char *name,
+ const char *path);
+void grep_source_init_oid(struct grep_source *gs, const char *name,
+ const char *path, const struct object_id *oid,
+ struct repository *repo);
void grep_source_clear_data(struct grep_source *gs);
void grep_source_clear(struct grep_source *gs);
void grep_source_load_driver(struct grep_source *gs,
@@ -207,7 +232,6 @@ void grep_source_load_driver(struct grep_source *gs,
int grep_source(struct grep_opt *opt, struct grep_source *gs);
struct grep_opt *grep_opt_dup(const struct grep_opt *opt);
-int grep_threads_ok(const struct grep_opt *opt);
/*
* Mutex used around access to the attributes machinery if
diff --git a/help.c b/help.c
index 3c3bdec..973e47c 100644
--- a/help.c
+++ b/help.c
@@ -11,6 +11,7 @@
#include "version.h"
#include "refs.h"
#include "parse-options.h"
+#include "prompt.h"
struct category_description {
uint32_t category;
@@ -292,9 +293,21 @@ void load_command_list(const char *prefix,
exclude_cmds(other_cmds, main_cmds);
}
-void list_commands(unsigned int colopts,
- struct cmdnames *main_cmds, struct cmdnames *other_cmds)
+static int get_colopts(const char *var, const char *value, void *data)
{
+ unsigned int *colopts = data;
+
+ if (starts_with(var, "column."))
+ return git_column_config(var, value, "help", colopts);
+
+ return 0;
+}
+
+void list_commands(struct cmdnames *main_cmds, struct cmdnames *other_cmds)
+{
+ unsigned int colopts = 0;
+ git_config(get_colopts, &colopts);
+
if (main_cmds->cnt) {
const char *exec_path = git_exec_path();
printf_ln(_("available git commands in '%s'"), exec_path);
@@ -472,6 +485,7 @@ int is_in_cmdlist(struct cmdnames *c, const char *s)
static int autocorrect;
static struct cmdnames aliases;
+#define AUTOCORRECT_PROMPT (-3)
#define AUTOCORRECT_NEVER (-2)
#define AUTOCORRECT_IMMEDIATELY (-1)
@@ -486,6 +500,8 @@ static int git_unknown_cmd_config(const char *var, const char *value, void *cb)
autocorrect = AUTOCORRECT_NEVER;
} else if (!strcmp(value, "immediate")) {
autocorrect = AUTOCORRECT_IMMEDIATELY;
+ } else if (!strcmp(value, "prompt")) {
+ autocorrect = AUTOCORRECT_PROMPT;
} else {
int v = git_config_int(var, value);
autocorrect = (v < 0)
@@ -539,6 +555,12 @@ const char *help_unknown_cmd(const char *cmd)
read_early_config(git_unknown_cmd_config, NULL);
+ /*
+ * Disable autocorrection prompt in a non-interactive session
+ */
+ if ((autocorrect == AUTOCORRECT_PROMPT) && (!isatty(0) || !isatty(2)))
+ autocorrect = AUTOCORRECT_NEVER;
+
if (autocorrect == AUTOCORRECT_NEVER) {
fprintf_ln(stderr, _("git: '%s' is not a git command. See 'git --help'."), cmd);
exit(1);
@@ -618,7 +640,16 @@ const char *help_unknown_cmd(const char *cmd)
_("Continuing under the assumption that "
"you meant '%s'."),
assumed);
- else {
+ else if (autocorrect == AUTOCORRECT_PROMPT) {
+ char *answer;
+ struct strbuf msg = STRBUF_INIT;
+ strbuf_addf(&msg, _("Run '%s' instead? (y/N)"), assumed);
+ answer = git_prompt(msg.buf, PROMPT_ECHO);
+ strbuf_release(&msg);
+ if (!(starts_with(answer, "y") ||
+ starts_with(answer, "Y")))
+ exit(1);
+ } else {
fprintf_ln(stderr,
_("Continuing in %0.1f seconds, "
"assuming that you meant '%s'."),
diff --git a/help.h b/help.h
index 5871e93..9d383f1 100644
--- a/help.h
+++ b/help.h
@@ -37,7 +37,7 @@ void add_cmdname(struct cmdnames *cmds, const char *name, int len);
/* Here we require that excludes is a sorted list. */
void exclude_cmds(struct cmdnames *cmds, struct cmdnames *excludes);
int is_in_cmdlist(struct cmdnames *cmds, const char *name);
-void list_commands(unsigned int colopts, struct cmdnames *main_cmds, struct cmdnames *other_cmds);
+void list_commands(struct cmdnames *main_cmds, struct cmdnames *other_cmds);
void get_version_info(struct strbuf *buf, int show_build_options);
/*
diff --git a/hook.c b/hook.c
new file mode 100644
index 0000000..55e1145
--- /dev/null
+++ b/hook.c
@@ -0,0 +1,42 @@
+#include "cache.h"
+#include "hook.h"
+#include "run-command.h"
+
+const char *find_hook(const char *name)
+{
+ static struct strbuf path = STRBUF_INIT;
+
+ strbuf_reset(&path);
+ strbuf_git_path(&path, "hooks/%s", name);
+ if (access(path.buf, X_OK) < 0) {
+ int err = errno;
+
+#ifdef STRIP_EXTENSION
+ strbuf_addstr(&path, STRIP_EXTENSION);
+ if (access(path.buf, X_OK) >= 0)
+ return path.buf;
+ if (errno == EACCES)
+ err = errno;
+#endif
+
+ if (err == EACCES && advice_enabled(ADVICE_IGNORED_HOOK)) {
+ static struct string_list advise_given = STRING_LIST_INIT_DUP;
+
+ if (!string_list_lookup(&advise_given, name)) {
+ string_list_insert(&advise_given, name);
+ advise(_("The '%s' hook was ignored because "
+ "it's not set as executable.\n"
+ "You can disable this warning with "
+ "`git config advice.ignoredHook false`."),
+ path.buf);
+ }
+ }
+ return NULL;
+ }
+ return path.buf;
+}
+
+int hook_exists(const char *name)
+{
+ return !!find_hook(name);
+}
diff --git a/hook.h b/hook.h
new file mode 100644
index 0000000..6aa36fc
--- /dev/null
+++ b/hook.h
@@ -0,0 +1,16 @@
+#ifndef HOOK_H
+#define HOOK_H
+
+/*
+ * Returns the path to the hook file, or NULL if the hook is missing
+ * or disabled. Note that this points to static storage that will be
+ * overwritten by further calls to find_hook and run_hook_*.
+ */
+const char *find_hook(const char *name);
+
+/**
+ * A boolean version of find_hook()
+ */
+int hook_exists(const char *hookname);
+
+#endif
diff --git a/http-backend.c b/http-backend.c
index b329bf6..3d6e2ff 100644
--- a/http-backend.c
+++ b/http-backend.c
@@ -466,9 +466,7 @@ static void run_service(const char **argv, int buffer_input)
struct child_process cld = CHILD_PROCESS_INIT;
ssize_t req_len = get_content_length();
- if (encoding && !strcmp(encoding, "gzip"))
- gzipped_request = 1;
- else if (encoding && !strcmp(encoding, "x-gzip"))
+ if (encoding && (!strcmp(encoding, "gzip") || !strcmp(encoding, "x-gzip")))
gzipped_request = 1;
if (!user || !*user)
@@ -534,7 +532,7 @@ static void get_info_refs(struct strbuf *hdr, char *arg)
if (service_name) {
const char *argv[] = {NULL /* service name */,
- "--stateless-rpc", "--advertise-refs",
+ "--http-backend-info-refs",
".", NULL};
struct rpc_service *svc = select_service(hdr, service_name);
@@ -739,6 +737,7 @@ static int bad_request(struct strbuf *hdr, const struct service_cmd *c)
int cmd_main(int argc, const char **argv)
{
char *method = getenv("REQUEST_METHOD");
+ const char *proto_header;
char *dir;
struct service_cmd *cmd = NULL;
char *cmd_arg = NULL;
@@ -789,6 +788,9 @@ int cmd_main(int argc, const char **argv)
http_config();
max_request_buffer = git_env_ulong("GIT_HTTP_MAX_REQUEST_BUFFER",
max_request_buffer);
+ proto_header = getenv("HTTP_GIT_PROTOCOL");
+ if (proto_header)
+ setenv(GIT_PROTOCOL_ENVIRONMENT, proto_header, 0);
cmd->imp(&hdr, cmd_arg);
return 0;
diff --git a/http-push.c b/http-push.c
index d7cb167..3309aaf 100644
--- a/http-push.c
+++ b/http-push.c
@@ -203,10 +203,8 @@ static void curl_setup_http(CURL *curl, const char *url,
curl_easy_setopt(curl, CURLOPT_INFILE, buffer);
curl_easy_setopt(curl, CURLOPT_INFILESIZE, buffer->buf.len);
curl_easy_setopt(curl, CURLOPT_READFUNCTION, fread_buffer);
-#ifndef NO_CURL_IOCTL
curl_easy_setopt(curl, CURLOPT_IOCTLFUNCTION, ioctl_buffer);
curl_easy_setopt(curl, CURLOPT_IOCTLDATA, buffer);
-#endif
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_fn);
curl_easy_setopt(curl, CURLOPT_NOBODY, 0);
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, custom_req);
@@ -249,8 +247,6 @@ static void process_response(void *callback_data)
finish_request(request);
}
-#ifdef USE_CURL_MULTI
-
static void start_fetch_loose(struct transfer_request *request)
{
struct active_request_slot *slot;
@@ -299,7 +295,6 @@ static void start_mkcol(struct transfer_request *request)
FREE_AND_NULL(request->url);
}
}
-#endif
static void start_fetch_packed(struct transfer_request *request)
{
@@ -605,7 +600,6 @@ static void finish_request(struct transfer_request *request)
}
}
-#ifdef USE_CURL_MULTI
static int is_running_queue;
static int fill_active_slot(void *unused)
{
@@ -629,7 +623,6 @@ static int fill_active_slot(void *unused)
}
return 0;
}
-#endif
static void get_remote_object_list(unsigned char parent);
@@ -658,10 +651,8 @@ static void add_fetch_request(struct object *obj)
request->next = request_queue_head;
request_queue_head = request;
-#ifdef USE_CURL_MULTI
fill_active_slots();
step_active_slots();
-#endif
}
static int add_send_request(struct object *obj, struct remote_lock *lock)
@@ -696,10 +687,8 @@ static int add_send_request(struct object *obj, struct remote_lock *lock)
request->next = request_queue_head;
request_queue_head = request;
-#ifdef USE_CURL_MULTI
fill_active_slots();
step_active_slots();
-#endif
return 1;
}
@@ -894,7 +883,7 @@ static struct remote_lock *lock_remote(const char *path, long timeout)
slot->results = &results;
curl_setup_http(slot->curl, url, DAV_LOCK, &out_buffer, fwrite_buffer);
curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, dav_headers);
- curl_easy_setopt(slot->curl, CURLOPT_FILE, &in_buffer);
+ curl_easy_setopt(slot->curl, CURLOPT_WRITEDATA, &in_buffer);
CALLOC_ARRAY(lock, 1);
lock->timeout = -1;
@@ -1153,7 +1142,7 @@ static void remote_ls(const char *path, int flags,
curl_setup_http(slot->curl, url, DAV_PROPFIND,
&out_buffer, fwrite_buffer);
curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, dav_headers);
- curl_easy_setopt(slot->curl, CURLOPT_FILE, &in_buffer);
+ curl_easy_setopt(slot->curl, CURLOPT_WRITEDATA, &in_buffer);
if (start_active_slot(slot)) {
run_active_slot(slot);
@@ -1227,7 +1216,7 @@ static int locking_available(void)
curl_setup_http(slot->curl, repo->url, DAV_PROPFIND,
&out_buffer, fwrite_buffer);
curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, dav_headers);
- curl_easy_setopt(slot->curl, CURLOPT_FILE, &in_buffer);
+ curl_easy_setopt(slot->curl, CURLOPT_WRITEDATA, &in_buffer);
if (start_active_slot(slot)) {
run_active_slot(slot);
@@ -1682,21 +1671,15 @@ static int delete_remote_branch(const char *pattern, int force)
static void run_request_queue(void)
{
-#ifdef USE_CURL_MULTI
is_running_queue = 1;
fill_active_slots();
add_fill_function(NULL, fill_active_slot);
-#endif
do {
finish_all_active_slots();
-#ifdef USE_CURL_MULTI
fill_active_slots();
-#endif
} while (request_queue_head && !aborted);
-#ifdef USE_CURL_MULTI
is_running_queue = 0;
-#endif
}
int cmd_main(int argc, const char **argv)
@@ -1770,10 +1753,6 @@ int cmd_main(int argc, const char **argv)
break;
}
-#ifndef USE_CURL_MULTI
- die("git-push is not available for http/https repository when not compiled with USE_CURL_MULTI");
-#endif
-
if (!repo->url)
usage(http_push_usage);
@@ -1786,9 +1765,7 @@ int cmd_main(int argc, const char **argv)
http_init(NULL, repo->url, 1);
-#ifdef USE_CURL_MULTI
is_running_queue = 0;
-#endif
/* Verify DAV compliance/lock support */
if (!locking_available()) {
diff --git a/http-walker.c b/http-walker.c
index 90d8ecb..910fae5 100644
--- a/http-walker.c
+++ b/http-walker.c
@@ -127,7 +127,6 @@ static void release_object_request(struct object_request *obj_req)
free(obj_req);
}
-#ifdef USE_CURL_MULTI
static int fill_active_slot(struct walker *walker)
{
struct object_request *obj_req;
@@ -146,7 +145,6 @@ static int fill_active_slot(struct walker *walker)
}
return 0;
}
-#endif
static void prefetch(struct walker *walker, unsigned char *sha1)
{
@@ -163,10 +161,8 @@ static void prefetch(struct walker *walker, unsigned char *sha1)
http_is_verbose = walker->get_verbosely;
list_add_tail(&newreq->node, &object_queue_head);
-#ifdef USE_CURL_MULTI
fill_active_slots();
step_active_slots();
-#endif
}
static int is_alternate_allowed(const char *url)
@@ -357,11 +353,9 @@ static void fetch_alternates(struct walker *walker, const char *base)
* wait for them to arrive and return to processing this request's
* curl message
*/
-#ifdef USE_CURL_MULTI
while (cdata->got_alternates == 0) {
step_active_slots();
}
-#endif
/* Nothing to do if they've already been fetched */
if (cdata->got_alternates == 1)
@@ -384,7 +378,7 @@ static void fetch_alternates(struct walker *walker, const char *base)
alt_req.walker = walker;
slot->callback_data = &alt_req;
- curl_easy_setopt(slot->curl, CURLOPT_FILE, &buffer);
+ curl_easy_setopt(slot->curl, CURLOPT_WRITEDATA, &buffer);
curl_easy_setopt(slot->curl, CURLOPT_WRITEFUNCTION, fwrite_buffer);
curl_easy_setopt(slot->curl, CURLOPT_URL, url.buf);
@@ -505,12 +499,8 @@ static int fetch_object(struct walker *walker, unsigned char *hash)
return 0;
}
-#ifdef USE_CURL_MULTI
while (obj_req->state == WAITING)
step_active_slots();
-#else
- start_object_request(walker, obj_req);
-#endif
/*
* obj_req->req might change when fetching alternates in the callback
@@ -623,9 +613,7 @@ struct walker *get_http_walker(const char *url)
walker->cleanup = cleanup;
walker->data = data;
-#ifdef USE_CURL_MULTI
add_fill_function(walker, (int (*)(void *)) fill_active_slot);
-#endif
return walker;
}
diff --git a/http.c b/http.c
index fdb6e22..f92859f 100644
--- a/http.c
+++ b/http.c
@@ -1,4 +1,5 @@
#include "git-compat-util.h"
+#include "git-curl-compat.h"
#include "http.h"
#include "config.h"
#include "pack.h"
@@ -19,28 +20,16 @@
static struct trace_key trace_curl = TRACE_KEY_INIT(CURL);
static int trace_curl_data = 1;
static int trace_curl_redact = 1;
-#if LIBCURL_VERSION_NUM >= 0x070a08
long int git_curl_ipresolve = CURL_IPRESOLVE_WHATEVER;
-#else
-long int git_curl_ipresolve;
-#endif
int active_requests;
int http_is_verbose;
ssize_t http_post_buffer = 16 * LARGE_PACKET_MAX;
-#if LIBCURL_VERSION_NUM >= 0x070a06
-#define LIBCURL_CAN_HANDLE_AUTH_ANY
-#endif
-
static int min_curl_sessions = 1;
static int curl_session_count;
-#ifdef USE_CURL_MULTI
static int max_requests = -1;
static CURLM *curlm;
-#endif
-#ifndef NO_CURL_EASY_DUPHANDLE
static CURL *curl_default;
-#endif
#define PREV_BUF_SIZE 4096
@@ -59,25 +48,19 @@ static struct {
{ "sslv2", CURL_SSLVERSION_SSLv2 },
{ "sslv3", CURL_SSLVERSION_SSLv3 },
{ "tlsv1", CURL_SSLVERSION_TLSv1 },
-#if LIBCURL_VERSION_NUM >= 0x072200
+#ifdef GIT_CURL_HAVE_CURL_SSLVERSION_TLSv1_0
{ "tlsv1.0", CURL_SSLVERSION_TLSv1_0 },
{ "tlsv1.1", CURL_SSLVERSION_TLSv1_1 },
{ "tlsv1.2", CURL_SSLVERSION_TLSv1_2 },
#endif
-#if LIBCURL_VERSION_NUM >= 0x073400
+#ifdef GIT_CURL_HAVE_CURL_SSLVERSION_TLSv1_3
{ "tlsv1.3", CURL_SSLVERSION_TLSv1_3 },
#endif
};
-#if LIBCURL_VERSION_NUM >= 0x070903
static const char *ssl_key;
-#endif
-#if LIBCURL_VERSION_NUM >= 0x070908
static const char *ssl_capath;
-#endif
-#if LIBCURL_VERSION_NUM >= 0x071304
static const char *curl_no_proxy;
-#endif
-#if LIBCURL_VERSION_NUM >= 0x072c00
+#ifdef GIT_CURL_HAVE_CURLOPT_PINNEDPUBLICKEY
static const char *ssl_pinnedkey;
#endif
static const char *ssl_cainfo;
@@ -101,9 +84,7 @@ static struct {
{ "digest", CURLAUTH_DIGEST },
{ "negotiate", CURLAUTH_GSSNEGOTIATE },
{ "ntlm", CURLAUTH_NTLM },
-#ifdef LIBCURL_CAN_HANDLE_AUTH_ANY
{ "anyauth", CURLAUTH_ANY },
-#endif
/*
* CURLAUTH_DIGEST_IE has no corresponding command-line option in
* curl(1) and is not included in CURLAUTH_ANY, so we leave it out
@@ -133,27 +114,15 @@ static int curl_empty_auth = -1;
enum http_follow_config http_follow_config = HTTP_FOLLOW_INITIAL;
-#if LIBCURL_VERSION_NUM >= 0x071700
-/* Use CURLOPT_KEYPASSWD as is */
-#elif LIBCURL_VERSION_NUM >= 0x070903
-#define CURLOPT_KEYPASSWD CURLOPT_SSLKEYPASSWD
-#else
-#define CURLOPT_KEYPASSWD CURLOPT_SSLCERTPASSWD
-#endif
-
static struct credential cert_auth = CREDENTIAL_INIT;
static int ssl_cert_password_required;
-#ifdef LIBCURL_CAN_HANDLE_AUTH_ANY
static unsigned long http_auth_methods = CURLAUTH_ANY;
static int http_auth_methods_restricted;
/* Modes for which empty_auth cannot actually help us. */
static unsigned long empty_auth_useless =
CURLAUTH_BASIC
-#ifdef CURLAUTH_DIGEST_IE
| CURLAUTH_DIGEST_IE
-#endif
| CURLAUTH_DIGEST;
-#endif
static struct curl_slist *pragma_header;
static struct curl_slist *no_pragma_header;
@@ -186,7 +155,6 @@ size_t fread_buffer(char *ptr, size_t eltsize, size_t nmemb, void *buffer_)
return size / eltsize;
}
-#ifndef NO_CURL_IOCTL
curlioerr ioctl_buffer(CURL *handle, int cmd, void *clientp)
{
struct buffer *buffer = clientp;
@@ -203,7 +171,6 @@ curlioerr ioctl_buffer(CURL *handle, int cmd, void *clientp)
return CURLIOE_UNKNOWNCMD;
}
}
-#endif
size_t fwrite_buffer(char *ptr, size_t eltsize, size_t nmemb, void *buffer_)
{
@@ -237,12 +204,8 @@ static void finish_active_slot(struct active_request_slot *slot)
if (slot->results != NULL) {
slot->results->curl_result = slot->curl_result;
slot->results->http_code = slot->http_code;
-#if LIBCURL_VERSION_NUM >= 0x070a08
curl_easy_getinfo(slot->curl, CURLINFO_HTTPAUTH_AVAIL,
&slot->results->auth_avail);
-#else
- slot->results->auth_avail = 0;
-#endif
curl_easy_getinfo(slot->curl, CURLINFO_HTTP_CONNECTCODE,
&slot->results->http_connectcode);
@@ -255,12 +218,9 @@ static void finish_active_slot(struct active_request_slot *slot)
static void xmulti_remove_handle(struct active_request_slot *slot)
{
-#ifdef USE_CURL_MULTI
curl_multi_remove_handle(curlm, slot->curl);
-#endif
}
-#ifdef USE_CURL_MULTI
static void process_curl_messages(void)
{
int num_messages;
@@ -288,7 +248,6 @@ static void process_curl_messages(void)
curl_message = curl_multi_info_read(curlm, &num_messages);
}
}
-#endif
static int http_options(const char *var, const char *value, void *cb)
{
@@ -305,14 +264,10 @@ static int http_options(const char *var, const char *value, void *cb)
return git_config_string(&ssl_version, var, value);
if (!strcmp("http.sslcert", var))
return git_config_pathname(&ssl_cert, var, value);
-#if LIBCURL_VERSION_NUM >= 0x070903
if (!strcmp("http.sslkey", var))
return git_config_pathname(&ssl_key, var, value);
-#endif
-#if LIBCURL_VERSION_NUM >= 0x070908
if (!strcmp("http.sslcapath", var))
return git_config_pathname(&ssl_capath, var, value);
-#endif
if (!strcmp("http.sslcainfo", var))
return git_config_pathname(&ssl_cainfo, var, value);
if (!strcmp("http.sslcertpasswordprotected", var)) {
@@ -341,18 +296,14 @@ static int http_options(const char *var, const char *value, void *cb)
if (!strcmp("http.minsessions", var)) {
min_curl_sessions = git_config_int(var, value);
-#ifndef USE_CURL_MULTI
if (min_curl_sessions > 1)
min_curl_sessions = 1;
-#endif
return 0;
}
-#ifdef USE_CURL_MULTI
if (!strcmp("http.maxrequests", var)) {
max_requests = git_config_int(var, value);
return 0;
}
-#endif
if (!strcmp("http.lowspeedlimit", var)) {
curl_low_speed_limit = (long)git_config_int(var, value);
return 0;
@@ -423,10 +374,10 @@ static int http_options(const char *var, const char *value, void *cb)
}
if (!strcmp("http.pinnedpubkey", var)) {
-#if LIBCURL_VERSION_NUM >= 0x072c00
+#ifdef GIT_CURL_HAVE_CURLOPT_PINNEDPUBLICKEY
return git_config_pathname(&ssl_pinnedkey, var, value);
#else
- warning(_("Public key pinning not supported with cURL < 7.44.0"));
+ warning(_("Public key pinning not supported with cURL < 7.39.0"));
return 0;
#endif
}
@@ -461,12 +412,6 @@ static int curl_empty_auth_enabled(void)
if (curl_empty_auth >= 0)
return curl_empty_auth;
-#ifndef LIBCURL_CAN_HANDLE_AUTH_ANY
- /*
- * Our libcurl is too old to do AUTH_ANY in the first place;
- * just default to turning the feature off.
- */
-#else
/*
* In the automatic case, kick in the empty-auth
* hack as long as we would potentially try some
@@ -479,7 +424,6 @@ static int curl_empty_auth_enabled(void)
if (http_auth_methods_restricted &&
(http_auth_methods & ~empty_auth_useless))
return 1;
-#endif
return 0;
}
@@ -493,24 +437,8 @@ static void init_curl_http_auth(CURL *result)
credential_fill(&http_auth);
-#if LIBCURL_VERSION_NUM >= 0x071301
curl_easy_setopt(result, CURLOPT_USERNAME, http_auth.username);
curl_easy_setopt(result, CURLOPT_PASSWORD, http_auth.password);
-#else
- {
- static struct strbuf up = STRBUF_INIT;
- /*
- * Note that we assume we only ever have a single set of
- * credentials in a given program run, so we do not have
- * to worry about updating this buffer, only setting its
- * initial value.
- */
- if (!up.len)
- strbuf_addf(&up, "%s:%s",
- http_auth.username, http_auth.password);
- curl_easy_setopt(result, CURLOPT_USERPWD, up.buf);
- }
-#endif
}
/* *var must be free-able */
@@ -524,22 +452,10 @@ static void var_override(const char **var, char *value)
static void set_proxyauth_name_password(CURL *result)
{
-#if LIBCURL_VERSION_NUM >= 0x071301
curl_easy_setopt(result, CURLOPT_PROXYUSERNAME,
proxy_auth.username);
curl_easy_setopt(result, CURLOPT_PROXYPASSWORD,
proxy_auth.password);
-#else
- struct strbuf s = STRBUF_INIT;
-
- strbuf_addstr_urlencode(&s, proxy_auth.username,
- is_rfc3986_unreserved);
- strbuf_addch(&s, ':');
- strbuf_addstr_urlencode(&s, proxy_auth.password,
- is_rfc3986_unreserved);
- curl_proxyuserpwd = strbuf_detach(&s, NULL);
- curl_easy_setopt(result, CURLOPT_PROXYUSERPWD, curl_proxyuserpwd);
-#endif
}
static void init_curl_proxy_auth(CURL *result)
@@ -552,7 +468,6 @@ static void init_curl_proxy_auth(CURL *result)
var_override(&http_proxy_authmethod, getenv("GIT_HTTP_PROXY_AUTHMETHOD"));
-#if LIBCURL_VERSION_NUM >= 0x070a07 /* CURLOPT_PROXYAUTH and CURLAUTH_ANY */
if (http_proxy_authmethod) {
int i;
for (i = 0; i < ARRAY_SIZE(proxy_authmethods); i++) {
@@ -570,7 +485,6 @@ static void init_curl_proxy_auth(CURL *result)
}
else
curl_easy_setopt(result, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
-#endif
}
static int has_cert_password(void)
@@ -587,7 +501,7 @@ static int has_cert_password(void)
return 1;
}
-#if LIBCURL_VERSION_NUM >= 0x073400
+#ifdef GIT_CURL_HAVE_CURLOPT_PROXY_KEYPASSWD
static int has_proxy_cert_password(void)
{
if (http_proxy_ssl_cert == NULL || proxy_ssl_cert_password_required != 1)
@@ -603,13 +517,13 @@ static int has_proxy_cert_password(void)
}
#endif
-#if LIBCURL_VERSION_NUM >= 0x071900
+#ifdef GITCURL_HAVE_CURLOPT_TCP_KEEPALIVE
static void set_curl_keepalive(CURL *c)
{
curl_easy_setopt(c, CURLOPT_TCP_KEEPALIVE, 1);
}
-#elif LIBCURL_VERSION_NUM >= 0x071000
+#else
static int sockopt_callback(void *client, curl_socket_t fd, curlsocktype type)
{
int ka = 1;
@@ -623,19 +537,13 @@ static int sockopt_callback(void *client, curl_socket_t fd, curlsocktype type)
if (rc < 0)
warning_errno("unable to set SO_KEEPALIVE on socket");
- return 0; /* CURL_SOCKOPT_OK only exists since curl 7.21.5 */
+ return CURL_SOCKOPT_OK;
}
static void set_curl_keepalive(CURL *c)
{
curl_easy_setopt(c, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
}
-
-#else
-static void set_curl_keepalive(CURL *c)
-{
- /* not supported on older curl versions */
-}
#endif
static void redact_sensitive_header(struct strbuf *header)
@@ -809,7 +717,6 @@ void setup_curl_trace(CURL *handle)
curl_easy_setopt(handle, CURLOPT_DEBUGDATA, NULL);
}
-#ifdef CURLPROTO_HTTP
static long get_curl_allowed_protocols(int from_user)
{
long allowed_protocols = 0;
@@ -825,9 +732,8 @@ static long get_curl_allowed_protocols(int from_user)
return allowed_protocols;
}
-#endif
-#if LIBCURL_VERSION_NUM >=0x072f00
+#ifdef GIT_CURL_HAVE_CURL_HTTP_VERSION_2
static int get_curl_http_version_opt(const char *version_string, long *opt)
{
int i;
@@ -869,7 +775,7 @@ static CURL *get_curl_handle(void)
curl_easy_setopt(result, CURLOPT_SSL_VERIFYHOST, 2);
}
-#if LIBCURL_VERSION_NUM >= 0x072f00 // 7.47.0
+#ifdef GIT_CURL_HAVE_CURL_HTTP_VERSION_2
if (curl_http_version) {
long opt;
if (!get_curl_http_version_opt(curl_http_version, &opt)) {
@@ -879,12 +785,8 @@ static CURL *get_curl_handle(void)
}
#endif
-#if LIBCURL_VERSION_NUM >= 0x070907
curl_easy_setopt(result, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
-#endif
-#ifdef LIBCURL_CAN_HANDLE_AUTH_ANY
curl_easy_setopt(result, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
-#endif
#ifdef CURLGSSAPI_DELEGATION_FLAG
if (curl_deleg) {
@@ -904,7 +806,7 @@ static CURL *get_curl_handle(void)
if (http_ssl_backend && !strcmp("schannel", http_ssl_backend) &&
!http_schannel_check_revoke) {
-#if LIBCURL_VERSION_NUM >= 0x072c00
+#ifdef GIT_CURL_HAVE_CURLSSLOPT_NO_REVOKE
curl_easy_setopt(result, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NO_REVOKE);
#else
warning(_("CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"));
@@ -940,28 +842,24 @@ static CURL *get_curl_handle(void)
curl_easy_setopt(result, CURLOPT_SSLCERT, ssl_cert);
if (has_cert_password())
curl_easy_setopt(result, CURLOPT_KEYPASSWD, cert_auth.password);
-#if LIBCURL_VERSION_NUM >= 0x070903
if (ssl_key != NULL)
curl_easy_setopt(result, CURLOPT_SSLKEY, ssl_key);
-#endif
-#if LIBCURL_VERSION_NUM >= 0x070908
if (ssl_capath != NULL)
curl_easy_setopt(result, CURLOPT_CAPATH, ssl_capath);
-#endif
-#if LIBCURL_VERSION_NUM >= 0x072c00
+#ifdef GIT_CURL_HAVE_CURLOPT_PINNEDPUBLICKEY
if (ssl_pinnedkey != NULL)
curl_easy_setopt(result, CURLOPT_PINNEDPUBLICKEY, ssl_pinnedkey);
#endif
if (http_ssl_backend && !strcmp("schannel", http_ssl_backend) &&
!http_schannel_use_ssl_cainfo) {
curl_easy_setopt(result, CURLOPT_CAINFO, NULL);
-#if LIBCURL_VERSION_NUM >= 0x073400
+#ifdef GIT_CURL_HAVE_CURLOPT_PROXY_CAINFO
curl_easy_setopt(result, CURLOPT_PROXY_CAINFO, NULL);
#endif
} else if (ssl_cainfo != NULL || http_proxy_ssl_ca_info != NULL) {
if (ssl_cainfo != NULL)
curl_easy_setopt(result, CURLOPT_CAINFO, ssl_cainfo);
-#if LIBCURL_VERSION_NUM >= 0x073400
+#ifdef GIT_CURL_HAVE_CURLOPT_PROXY_CAINFO
if (http_proxy_ssl_ca_info != NULL)
curl_easy_setopt(result, CURLOPT_PROXY_CAINFO, http_proxy_ssl_ca_info);
#endif
@@ -975,19 +873,11 @@ static CURL *get_curl_handle(void)
}
curl_easy_setopt(result, CURLOPT_MAXREDIRS, 20);
-#if LIBCURL_VERSION_NUM >= 0x071301
curl_easy_setopt(result, CURLOPT_POSTREDIR, CURL_REDIR_POST_ALL);
-#elif LIBCURL_VERSION_NUM >= 0x071101
- curl_easy_setopt(result, CURLOPT_POST301, 1);
-#endif
-#ifdef CURLPROTO_HTTP
curl_easy_setopt(result, CURLOPT_REDIR_PROTOCOLS,
get_curl_allowed_protocols(0));
curl_easy_setopt(result, CURLOPT_PROTOCOLS,
get_curl_allowed_protocols(-1));
-#else
- warning(_("Protocol restrictions not supported with cURL < 7.19.4"));
-#endif
if (getenv("GIT_CURL_VERBOSE"))
http_trace_curl_no_data();
setup_curl_trace(result);
@@ -1002,10 +892,8 @@ static CURL *get_curl_handle(void)
if (curl_ftp_no_epsv)
curl_easy_setopt(result, CURLOPT_FTP_USE_EPSV, 0);
-#ifdef CURLOPT_USE_SSL
if (curl_ssl_try)
curl_easy_setopt(result, CURLOPT_USE_SSL, CURLUSESSL_TRY);
-#endif
/*
* CURL also examines these variables as a fallback; but we need to query
@@ -1040,7 +928,6 @@ static CURL *get_curl_handle(void)
*/
curl_easy_setopt(result, CURLOPT_PROXY, "");
} else if (curl_http_proxy) {
-#if LIBCURL_VERSION_NUM >= 0x071800
if (starts_with(curl_http_proxy, "socks5h"))
curl_easy_setopt(result,
CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
@@ -1053,8 +940,7 @@ static CURL *get_curl_handle(void)
else if (starts_with(curl_http_proxy, "socks"))
curl_easy_setopt(result,
CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
-#endif
-#if LIBCURL_VERSION_NUM >= 0x073400
+#ifdef GIT_CURL_HAVE_CURLOPT_PROXY_KEYPASSWD
else if (starts_with(curl_http_proxy, "https")) {
curl_easy_setopt(result, CURLOPT_PROXYTYPE, CURLPROXY_HTTPS);
@@ -1081,11 +967,9 @@ static CURL *get_curl_handle(void)
die("Invalid proxy URL '%s'", curl_http_proxy);
curl_easy_setopt(result, CURLOPT_PROXY, proxy_auth.host);
-#if LIBCURL_VERSION_NUM >= 0x071304
var_override(&curl_no_proxy, getenv("NO_PROXY"));
var_override(&curl_no_proxy, getenv("no_proxy"));
curl_easy_setopt(result, CURLOPT_NOPROXY, curl_no_proxy);
-#endif
}
init_curl_proxy_auth(result);
@@ -1106,7 +990,7 @@ void http_init(struct remote *remote, const char *url, int proactive_auth)
char *low_speed_limit;
char *low_speed_time;
char *normalized_url;
- struct urlmatch_config config = { STRING_LIST_INIT_DUP };
+ struct urlmatch_config config = URLMATCH_CONFIG_INIT;
config.section = "http";
config.key = NULL;
@@ -1121,7 +1005,7 @@ void http_init(struct remote *remote, const char *url, int proactive_auth)
free(normalized_url);
string_list_clear(&config.vars, 1);
-#if LIBCURL_VERSION_NUM >= 0x073800
+#ifdef GIT_CURL_HAVE_CURLSSLSET_NO_BACKENDS
if (http_ssl_backend) {
const curl_ssl_backend **backends;
struct strbuf buf = STRBUF_INIT;
@@ -1164,7 +1048,6 @@ void http_init(struct remote *remote, const char *url, int proactive_auth)
no_pragma_header = curl_slist_append(http_copy_default_headers(),
"Pragma:");
-#ifdef USE_CURL_MULTI
{
char *http_max_requests = getenv("GIT_HTTP_MAX_REQUESTS");
if (http_max_requests != NULL)
@@ -1174,18 +1057,13 @@ void http_init(struct remote *remote, const char *url, int proactive_auth)
curlm = curl_multi_init();
if (!curlm)
die("curl_multi_init failed");
-#endif
if (getenv("GIT_SSL_NO_VERIFY"))
curl_ssl_verify = 0;
set_from_env(&ssl_cert, "GIT_SSL_CERT");
-#if LIBCURL_VERSION_NUM >= 0x070903
set_from_env(&ssl_key, "GIT_SSL_KEY");
-#endif
-#if LIBCURL_VERSION_NUM >= 0x070908
set_from_env(&ssl_capath, "GIT_SSL_CAPATH");
-#endif
set_from_env(&ssl_cainfo, "GIT_SSL_CAINFO");
set_from_env(&user_agent, "GIT_HTTP_USER_AGENT");
@@ -1201,10 +1079,8 @@ void http_init(struct remote *remote, const char *url, int proactive_auth)
curl_ssl_verify = 1;
curl_session_count = 0;
-#ifdef USE_CURL_MULTI
if (max_requests < 1)
max_requests = DEFAULT_MAX_REQUESTS;
-#endif
set_from_env(&http_proxy_ssl_cert, "GIT_PROXY_SSL_CERT");
set_from_env(&http_proxy_ssl_key, "GIT_PROXY_SSL_KEY");
@@ -1224,9 +1100,7 @@ void http_init(struct remote *remote, const char *url, int proactive_auth)
ssl_cert_password_required = 1;
}
-#ifndef NO_CURL_EASY_DUPHANDLE
curl_default = get_curl_handle();
-#endif
}
void http_cleanup(void)
@@ -1244,13 +1118,9 @@ void http_cleanup(void)
}
active_queue_head = NULL;
-#ifndef NO_CURL_EASY_DUPHANDLE
curl_easy_cleanup(curl_default);
-#endif
-#ifdef USE_CURL_MULTI
curl_multi_cleanup(curlm);
-#endif
curl_global_cleanup();
string_list_clear(&extra_http_headers, 0);
@@ -1297,7 +1167,6 @@ struct active_request_slot *get_active_slot(void)
struct active_request_slot *slot = active_queue_head;
struct active_request_slot *newslot;
-#ifdef USE_CURL_MULTI
int num_transfers;
/* Wait for a slot to open up if the queue is full */
@@ -1306,7 +1175,6 @@ struct active_request_slot *get_active_slot(void)
if (num_transfers < active_requests)
process_curl_messages();
}
-#endif
while (slot != NULL && slot->in_use)
slot = slot->next;
@@ -1329,11 +1197,7 @@ struct active_request_slot *get_active_slot(void)
}
if (slot->curl == NULL) {
-#ifdef NO_CURL_EASY_DUPHANDLE
- slot->curl = get_curl_handle();
-#else
slot->curl = curl_easy_duphandle(curl_default);
-#endif
curl_session_count++;
}
@@ -1367,12 +1231,8 @@ struct active_request_slot *get_active_slot(void)
else
curl_easy_setopt(slot->curl, CURLOPT_FOLLOWLOCATION, 0);
-#if LIBCURL_VERSION_NUM >= 0x070a08
curl_easy_setopt(slot->curl, CURLOPT_IPRESOLVE, git_curl_ipresolve);
-#endif
-#ifdef LIBCURL_CAN_HANDLE_AUTH_ANY
curl_easy_setopt(slot->curl, CURLOPT_HTTPAUTH, http_auth_methods);
-#endif
if (http_auth.password || curl_empty_auth_enabled())
init_curl_http_auth(slot->curl);
@@ -1381,7 +1241,6 @@ struct active_request_slot *get_active_slot(void)
int start_active_slot(struct active_request_slot *slot)
{
-#ifdef USE_CURL_MULTI
CURLMcode curlm_result = curl_multi_add_handle(curlm, slot->curl);
int num_transfers;
@@ -1399,11 +1258,9 @@ int start_active_slot(struct active_request_slot *slot)
* something.
*/
curl_multi_perform(curlm, &num_transfers);
-#endif
return 1;
}
-#ifdef USE_CURL_MULTI
struct fill_chain {
void *data;
int (*fill)(void *);
@@ -1462,11 +1319,9 @@ void step_active_slots(void)
fill_active_slots();
}
}
-#endif
void run_active_slot(struct active_request_slot *slot)
{
-#ifdef USE_CURL_MULTI
fd_set readfds;
fd_set writefds;
fd_set excfds;
@@ -1479,7 +1334,6 @@ void run_active_slot(struct active_request_slot *slot)
step_active_slots();
if (slot->in_use) {
-#if LIBCURL_VERSION_NUM >= 0x070f04
long curl_timeout;
curl_multi_timeout(curlm, &curl_timeout);
if (curl_timeout == 0) {
@@ -1491,10 +1345,6 @@ void run_active_slot(struct active_request_slot *slot)
select_timeout.tv_sec = curl_timeout / 1000;
select_timeout.tv_usec = (curl_timeout % 1000) * 1000;
}
-#else
- select_timeout.tv_sec = 0;
- select_timeout.tv_usec = 50000;
-#endif
max_fd = -1;
FD_ZERO(&readfds);
@@ -1517,12 +1367,6 @@ void run_active_slot(struct active_request_slot *slot)
select(max_fd+1, &readfds, &writefds, &excfds, &select_timeout);
}
}
-#else
- while (slot->in_use) {
- slot->curl_result = curl_easy_perform(slot->curl);
- finish_active_slot(slot);
- }
-#endif
}
static void release_active_slot(struct active_request_slot *slot)
@@ -1536,9 +1380,7 @@ static void release_active_slot(struct active_request_slot *slot)
curl_session_count--;
}
}
-#ifdef USE_CURL_MULTI
fill_active_slots();
-#endif
}
void finish_all_active_slots(void)
@@ -1647,6 +1489,10 @@ static int handle_curl_result(struct slot_results *results)
*/
credential_reject(&cert_auth);
return HTTP_NOAUTH;
+#ifdef GIT_CURL_HAVE_CURLE_SSL_PINNEDPUBKEYNOTMATCH
+ } else if (results->curl_result == CURLE_SSL_PINNEDPUBKEYNOTMATCH) {
+ return HTTP_NOMATCHPUBLICKEY;
+#endif
} else if (missing_target(results))
return HTTP_MISSING_TARGET;
else if (results->http_code == 401) {
@@ -1654,24 +1500,20 @@ static int handle_curl_result(struct slot_results *results)
credential_reject(&http_auth);
return HTTP_NOAUTH;
} else {
-#ifdef LIBCURL_CAN_HANDLE_AUTH_ANY
http_auth_methods &= ~CURLAUTH_GSSNEGOTIATE;
if (results->auth_avail) {
http_auth_methods &= results->auth_avail;
http_auth_methods_restricted = 1;
}
-#endif
return HTTP_REAUTH;
}
} else {
if (results->http_connectcode == 407)
credential_reject(&proxy_auth);
-#if LIBCURL_VERSION_NUM >= 0x070c00
if (!curl_errorstr[0])
strlcpy(curl_errorstr,
curl_easy_strerror(results->curl_result),
sizeof(curl_errorstr));
-#endif
return HTTP_ERROR;
}
}
@@ -1930,7 +1772,7 @@ static int http_request(const char *url,
curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 1);
} else {
curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0);
- curl_easy_setopt(slot->curl, CURLOPT_FILE, result);
+ curl_easy_setopt(slot->curl, CURLOPT_WRITEDATA, result);
if (target == HTTP_REQUEST_FILE) {
off_t posn = ftello(result);
@@ -2347,7 +2189,7 @@ struct http_pack_request *new_direct_http_pack_request(
}
preq->slot = get_active_slot();
- curl_easy_setopt(preq->slot->curl, CURLOPT_FILE, preq->packfile);
+ curl_easy_setopt(preq->slot->curl, CURLOPT_WRITEDATA, preq->packfile);
curl_easy_setopt(preq->slot->curl, CURLOPT_WRITEFUNCTION, fwrite);
curl_easy_setopt(preq->slot->curl, CURLOPT_URL, preq->url);
curl_easy_setopt(preq->slot->curl, CURLOPT_HTTPHEADER,
@@ -2518,7 +2360,7 @@ struct http_object_request *new_http_object_request(const char *base_url,
freq->slot = get_active_slot();
- curl_easy_setopt(freq->slot->curl, CURLOPT_FILE, freq);
+ curl_easy_setopt(freq->slot->curl, CURLOPT_WRITEDATA, freq);
curl_easy_setopt(freq->slot->curl, CURLOPT_FAILONERROR, 0);
curl_easy_setopt(freq->slot->curl, CURLOPT_WRITEFUNCTION, fwrite_sha1_file);
curl_easy_setopt(freq->slot->curl, CURLOPT_ERRORBUFFER, freq->errorstr);
diff --git a/http.h b/http.h
index bf3d127..df1590e 100644
--- a/http.h
+++ b/http.h
@@ -10,49 +10,7 @@
#include "remote.h"
#include "url.h"
-/*
- * We detect based on the cURL version if multi-transfer is
- * usable in this implementation and define this symbol accordingly.
- * This shouldn't be set by the Makefile or by the user (e.g. via CFLAGS).
- */
-#undef USE_CURL_MULTI
-
-#if LIBCURL_VERSION_NUM >= 0x071000
-#define USE_CURL_MULTI
#define DEFAULT_MAX_REQUESTS 5
-#endif
-
-#if LIBCURL_VERSION_NUM < 0x070704
-#define curl_global_cleanup() do { /* nothing */ } while (0)
-#endif
-
-#if LIBCURL_VERSION_NUM < 0x070800
-#define curl_global_init(a) do { /* nothing */ } while (0)
-#elif LIBCURL_VERSION_NUM >= 0x070c00
-#define curl_global_init(a) curl_global_init_mem(a, xmalloc, free, \
- xrealloc, xstrdup, xcalloc)
-#endif
-
-#if (LIBCURL_VERSION_NUM < 0x070c04) || (LIBCURL_VERSION_NUM == 0x071000)
-#define NO_CURL_EASY_DUPHANDLE
-#endif
-
-#if LIBCURL_VERSION_NUM < 0x070a03
-#define CURLE_HTTP_RETURNED_ERROR CURLE_HTTP_NOT_FOUND
-#endif
-
-#if LIBCURL_VERSION_NUM < 0x070c03
-#define NO_CURL_IOCTL
-#endif
-
-/*
- * CURLOPT_USE_SSL was known as CURLOPT_FTP_SSL up to 7.16.4,
- * and the constants were known as CURLFTPSSL_*
-*/
-#if !defined(CURLOPT_USE_SSL) && defined(CURLOPT_FTP_SSL)
-#define CURLOPT_USE_SSL CURLOPT_FTP_SSL
-#define CURLUSESSL_TRY CURLFTPSSL_TRY
-#endif
struct slot_results {
CURLcode curl_result;
@@ -82,9 +40,7 @@ struct buffer {
size_t fread_buffer(char *ptr, size_t eltsize, size_t nmemb, void *strbuf);
size_t fwrite_buffer(char *ptr, size_t eltsize, size_t nmemb, void *strbuf);
size_t fwrite_null(char *ptr, size_t eltsize, size_t nmemb, void *strbuf);
-#ifndef NO_CURL_IOCTL
curlioerr ioctl_buffer(CURL *handle, int cmd, void *clientp);
-#endif
/* Slot lifecycle functions */
struct active_request_slot *get_active_slot(void);
@@ -101,11 +57,9 @@ void finish_all_active_slots(void);
int run_one_slot(struct active_request_slot *slot,
struct slot_results *results);
-#ifdef USE_CURL_MULTI
void fill_active_slots(void);
void add_fill_function(void *data, int (*fill)(void *));
void step_active_slots(void);
-#endif
void http_init(struct remote *remote, const char *url,
int proactive_auth);
@@ -200,6 +154,7 @@ struct http_get_options {
#define HTTP_START_FAILED 3
#define HTTP_REAUTH 4
#define HTTP_NOAUTH 5
+#define HTTP_NOMATCHPUBLICKEY 6
/*
* Requests a URL and stores the result in a strbuf.
diff --git a/imap-send.c b/imap-send.c
index a0540ba..e6090a0 100644
--- a/imap-send.c
+++ b/imap-send.c
@@ -1441,7 +1441,7 @@ static CURL *setup_curl(struct imap_server_conf *srvc, struct credential *cred)
curl_easy_setopt(curl, CURLOPT_PORT, server.port);
if (server.auth_method) {
-#if LIBCURL_VERSION_NUM < 0x072200
+#ifndef GIT_CURL_HAVE_CURLOPT_LOGIN_OPTIONS
warning("No LOGIN_OPTIONS support in this cURL version");
#else
struct strbuf auth = STRBUF_INIT;
@@ -1517,11 +1517,7 @@ static int curl_append_msgs_to_imap(struct imap_server_conf *server,
if (cred.username) {
if (res == CURLE_OK)
credential_approve(&cred);
-#if LIBCURL_VERSION_NUM >= 0x070d01
else if (res == CURLE_LOGIN_DENIED)
-#else
- else
-#endif
credential_reject(&cred);
}
diff --git a/list-objects.c b/list-objects.c
index 473a332..2f623f8 100644
--- a/list-objects.c
+++ b/list-objects.c
@@ -337,8 +337,8 @@ static void add_pending_tree(struct rev_info *revs, struct tree *tree)
add_pending_object(revs, &tree->object, "");
}
-static void traverse_trees_and_blobs(struct traversal_context *ctx,
- struct strbuf *base)
+static void traverse_non_commits(struct traversal_context *ctx,
+ struct strbuf *base)
{
int i;
@@ -410,9 +410,9 @@ static void do_traverse(struct traversal_context *ctx)
* needs a reallocation for each commit. Can we pass the
* tree directory without allocation churn?
*/
- traverse_trees_and_blobs(ctx, &csp);
+ traverse_non_commits(ctx, &csp);
}
- traverse_trees_and_blobs(ctx, &csp);
+ traverse_non_commits(ctx, &csp);
strbuf_release(&csp);
}
diff --git a/list.h b/list.h
index eb60119..362a4cd 100644
--- a/list.h
+++ b/list.h
@@ -46,7 +46,10 @@ struct list_head {
#define INIT_LIST_HEAD(ptr) \
(ptr)->next = (ptr)->prev = (ptr)
-#define LIST_HEAD_INIT(name) { &(name), &(name) }
+#define LIST_HEAD_INIT(name) { \
+ .next = &(name), \
+ .prev = &(name), \
+}
/* Add new element at the head of the list. */
static inline void list_add(struct list_head *newp, struct list_head *head)
diff --git a/lockfile.h b/lockfile.h
index db93e6b..90af4e6 100644
--- a/lockfile.h
+++ b/lockfile.h
@@ -121,7 +121,7 @@ struct lock_file {
struct tempfile *tempfile;
};
-#define LOCK_INIT { NULL }
+#define LOCK_INIT { 0 }
/* String appended to a filename to derive the lockfile name: */
#define LOCK_SUFFIX ".lock"
diff --git a/log-tree.c b/log-tree.c
index 6dc4412..644893f 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -515,10 +515,10 @@ static void show_signature(struct rev_info *opt, struct commit *commit)
status = check_signature(payload.buf, payload.len, signature.buf,
signature.len, &sigc);
- if (status && !sigc.gpg_output)
+ if (status && !sigc.output)
show_sig_lines(opt, status, "No signature\n");
else
- show_sig_lines(opt, status, sigc.gpg_output);
+ show_sig_lines(opt, status, sigc.output);
signature_check_clear(&sigc);
out:
@@ -585,8 +585,8 @@ static int show_one_mergetag(struct commit *commit,
/* could have a good signature */
status = check_signature(payload.buf, payload.len,
signature.buf, signature.len, &sigc);
- if (sigc.gpg_output)
- strbuf_addstr(&verify_message, sigc.gpg_output);
+ if (sigc.output)
+ strbuf_addstr(&verify_message, sigc.output);
else
strbuf_addstr(&verify_message, "No signature\n");
signature_check_clear(&sigc);
diff --git a/log-tree.h b/log-tree.h
index 1e8c91d..e7e4641 100644
--- a/log-tree.h
+++ b/log-tree.h
@@ -14,10 +14,8 @@ struct decoration_filter {
};
int parse_decorate_color_config(const char *var, const char *slot_name, const char *value);
-void init_log_tree_opt(struct rev_info *);
int log_tree_diff_flush(struct rev_info *);
int log_tree_commit(struct rev_info *, struct commit *);
-int log_tree_opt_parse(struct rev_info *, const char **, int);
void show_log(struct rev_info *opt);
void format_decorations_extended(struct strbuf *sb, const struct commit *commit,
int use_color,
diff --git a/ls-refs.c b/ls-refs.c
index 88f6c3f..5407832 100644
--- a/ls-refs.c
+++ b/ls-refs.c
@@ -41,6 +41,12 @@ static void ensure_config_read(void)
}
/*
+ * If we see this many or more "ref-prefix" lines from the client, we consider
+ * it "too many" and will avoid using the prefix feature entirely.
+ */
+#define TOO_MANY_PREFIXES 65536
+
+/*
* Check if one of the prefixes is a prefix of the ref.
* If no prefixes were provided, all refs match.
*/
@@ -65,6 +71,7 @@ struct ls_refs_data {
unsigned peel;
unsigned symrefs;
struct strvec prefixes;
+ struct strbuf buf;
unsigned unborn : 1;
};
@@ -73,7 +80,8 @@ static int send_ref(const char *refname, const struct object_id *oid,
{
struct ls_refs_data *data = cb_data;
const char *refname_nons = strip_namespace(refname);
- struct strbuf refline = STRBUF_INIT;
+
+ strbuf_reset(&data->buf);
if (ref_is_hidden(refname_nons, refname))
return 0;
@@ -82,9 +90,9 @@ static int send_ref(const char *refname, const struct object_id *oid,
return 0;
if (oid)
- strbuf_addf(&refline, "%s %s", oid_to_hex(oid), refname_nons);
+ strbuf_addf(&data->buf, "%s %s", oid_to_hex(oid), refname_nons);
else
- strbuf_addf(&refline, "unborn %s", refname_nons);
+ strbuf_addf(&data->buf, "unborn %s", refname_nons);
if (data->symrefs && flag & REF_ISSYMREF) {
struct object_id unused;
const char *symref_target = resolve_ref_unsafe(refname, 0,
@@ -94,20 +102,19 @@ static int send_ref(const char *refname, const struct object_id *oid,
if (!symref_target)
die("'%s' is a symref but it is not?", refname);
- strbuf_addf(&refline, " symref-target:%s",
+ strbuf_addf(&data->buf, " symref-target:%s",
strip_namespace(symref_target));
}
if (data->peel && oid) {
struct object_id peeled;
if (!peel_iterated_oid(oid, &peeled))
- strbuf_addf(&refline, " peeled:%s", oid_to_hex(&peeled));
+ strbuf_addf(&data->buf, " peeled:%s", oid_to_hex(&peeled));
}
- strbuf_addch(&refline, '\n');
- packet_write(1, refline.buf, refline.len);
+ strbuf_addch(&data->buf, '\n');
+ packet_fwrite(stdout, data->buf.buf, data->buf.len);
- strbuf_release(&refline);
return 0;
}
@@ -138,13 +145,13 @@ static int ls_refs_config(const char *var, const char *value, void *data)
return parse_hide_refs_config(var, value, "uploadpack");
}
-int ls_refs(struct repository *r, struct strvec *keys,
- struct packet_reader *request)
+int ls_refs(struct repository *r, struct packet_reader *request)
{
struct ls_refs_data data;
memset(&data, 0, sizeof(data));
strvec_init(&data.prefixes);
+ strbuf_init(&data.buf, 0);
ensure_config_read();
git_config(ls_refs_config, NULL);
@@ -157,22 +164,35 @@ int ls_refs(struct repository *r, struct strvec *keys,
data.peel = 1;
else if (!strcmp("symrefs", arg))
data.symrefs = 1;
- else if (skip_prefix(arg, "ref-prefix ", &out))
- strvec_push(&data.prefixes, out);
+ else if (skip_prefix(arg, "ref-prefix ", &out)) {
+ if (data.prefixes.nr < TOO_MANY_PREFIXES)
+ strvec_push(&data.prefixes, out);
+ }
else if (!strcmp("unborn", arg))
data.unborn = allow_unborn;
+ else
+ die(_("unexpected line: '%s'"), arg);
}
if (request->status != PACKET_READ_FLUSH)
die(_("expected flush after ls-refs arguments"));
+ /*
+ * If we saw too many prefixes, we must avoid using them at all; as
+ * soon as we have any prefix, they are meant to form a comprehensive
+ * list.
+ */
+ if (data.prefixes.nr >= TOO_MANY_PREFIXES)
+ strvec_clear(&data.prefixes);
+
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);
+ send_ref, &data);
+ packet_fflush(stdout);
strvec_clear(&data.prefixes);
+ strbuf_release(&data.buf);
return 0;
}
diff --git a/ls-refs.h b/ls-refs.h
index a99e4be..e2243a5 100644
--- a/ls-refs.h
+++ b/ls-refs.h
@@ -2,10 +2,8 @@
#define LS_REFS_H
struct repository;
-struct strvec;
struct packet_reader;
-int ls_refs(struct repository *r, struct strvec *keys,
- struct packet_reader *request);
+int ls_refs(struct repository *r, struct packet_reader *request);
int ls_refs_advertise(struct repository *r, struct strbuf *value);
#endif /* LS_REFS_H */
diff --git a/merge-ort.c b/merge-ort.c
index b346e23..0342f10 100644
--- a/merge-ort.c
+++ b/merge-ort.c
@@ -32,6 +32,7 @@
#include "promisor-remote.h"
#include "revision.h"
#include "strmap.h"
+#include "submodule-config.h"
#include "submodule.h"
#include "tree.h"
#include "unpack-trees.h"
@@ -303,8 +304,6 @@ struct merge_options_internal {
* * 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
@@ -340,14 +339,14 @@ struct merge_options_internal {
struct strmap conflicted;
/*
- * paths_to_free: additional list of strings to free
+ * pool: memory pool for fast allocation/deallocation
*
- * 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.
+ * We allocate room for lots of filenames and auxiliary data
+ * structures in merge_options_internal, and it tends to all be
+ * freed together too. Using a memory pool for these provides a
+ * nice speedup.
*/
- struct string_list paths_to_free;
+ struct mem_pool pool;
/*
* output: special messages and conflict notices for various paths
@@ -519,64 +518,45 @@ static void clear_or_reinit_internal_opts(struct merge_options_internal *opti,
{
struct rename_info *renames = &opti->renames;
int i;
- void (*strmap_func)(struct strmap *, int) =
+ void (*strmap_clear_func)(struct strmap *, int) =
reinitialize ? strmap_partial_clear : strmap_clear;
- void (*strintmap_func)(struct strintmap *) =
+ void (*strintmap_clear_func)(struct strintmap *) =
reinitialize ? strintmap_partial_clear : strintmap_clear;
- void (*strset_func)(struct strset *) =
+ void (*strset_clear_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);
+ strmap_clear_func(&opti->paths, 0);
/*
* 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;
+ strmap_clear_func(&opti->conflicted, 0);
if (opti->attr_index.cache_nr) /* true iff opt->renormalize */
discard_index(&opti->attr_index);
/* Free memory used by various renames maps */
for (i = MERGE_SIDE1; i <= MERGE_SIDE2; ++i) {
- strintmap_func(&renames->dirs_removed[i]);
- strmap_func(&renames->dir_renames[i], 0);
- strintmap_func(&renames->relevant_sources[i]);
+ strintmap_clear_func(&renames->dirs_removed[i]);
+ strmap_clear_func(&renames->dir_renames[i], 0);
+ strintmap_clear_func(&renames->relevant_sources[i]);
if (!reinitialize)
assert(renames->cached_pairs_valid_side == 0);
if (i != renames->cached_pairs_valid_side &&
-1 != renames->cached_pairs_valid_side) {
- strset_func(&renames->cached_target_names[i]);
- strmap_func(&renames->cached_pairs[i], 1);
- strset_func(&renames->cached_irrelevant[i]);
+ strset_clear_func(&renames->cached_target_names[i]);
+ strmap_clear_func(&renames->cached_pairs[i], 1);
+ strset_clear_func(&renames->cached_irrelevant[i]);
partial_clear_dir_rename_count(&renames->dir_rename_count[i]);
if (!reinitialize)
strmap_clear(&renames->dir_rename_count[i], 1);
}
}
for (i = MERGE_SIDE1; i <= MERGE_SIDE2; ++i) {
- strintmap_func(&renames->deferred[i].possible_trivial_merges);
- strset_func(&renames->deferred[i].target_dirs);
+ strintmap_clear_func(&renames->deferred[i].possible_trivial_merges);
+ strset_clear_func(&renames->deferred[i].target_dirs);
renames->deferred[i].trivial_merges_okay = 1; /* 1 == maybe */
}
renames->cached_pairs_valid_side = 0;
@@ -603,6 +583,8 @@ static void clear_or_reinit_internal_opts(struct merge_options_internal *opti,
strmap_clear(&opti->output, 0);
}
+ mem_pool_discard(&opti->pool, 0);
+
/* Clean out callback_data as well. */
FREE_AND_NULL(renames->callback_data);
renames->callback_data_nr = renames->callback_data_alloc = 0;
@@ -627,6 +609,7 @@ static int err(struct merge_options *opt, const char *err, ...)
static void format_commit(struct strbuf *sb,
int indent,
+ struct repository *repo,
struct commit *commit)
{
struct merge_remote_desc *desc;
@@ -640,7 +623,7 @@ static void format_commit(struct strbuf *sb,
return;
}
- format_commit_message(commit, "%h %s", sb, &ctx);
+ repo_format_commit_message(repo, commit, "%h %s", sb, &ctx);
strbuf_addch(sb, '\n');
}
@@ -665,6 +648,36 @@ static void path_msg(struct merge_options *opt,
strbuf_addch(sb, '\n');
}
+static struct diff_filespec *pool_alloc_filespec(struct mem_pool *pool,
+ const char *path)
+{
+ /* Similar to alloc_filespec(), but allocate from pool and reuse path */
+ struct diff_filespec *spec;
+
+ spec = mem_pool_calloc(pool, 1, sizeof(*spec));
+ spec->path = (char*)path; /* spec won't modify it */
+
+ spec->count = 1;
+ spec->is_binary = -1;
+ return spec;
+}
+
+static struct diff_filepair *pool_diff_queue(struct mem_pool *pool,
+ struct diff_queue_struct *queue,
+ struct diff_filespec *one,
+ struct diff_filespec *two)
+{
+ /* Same code as diff_queue(), except allocate from pool */
+ struct diff_filepair *dp;
+
+ dp = mem_pool_calloc(pool, 1, sizeof(*dp));
+ dp->one = one;
+ dp->two = two;
+ if (queue)
+ diff_q(queue, dp);
+ return dp;
+}
+
/* add a string to a strbuf, but converting "/" to "_" */
static void add_flattened_path(struct strbuf *out, const char *s)
{
@@ -793,8 +806,9 @@ static void setup_path_info(struct merge_options *opt,
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 = mem_pool_calloc(&opt->priv->pool, 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;
@@ -891,11 +905,11 @@ static void add_pair(struct merge_options *opt,
return;
}
- one = alloc_filespec(pathname);
- two = alloc_filespec(pathname);
+ one = pool_alloc_filespec(&opt->priv->pool, pathname);
+ two = pool_alloc_filespec(&opt->priv->pool, pathname);
fill_filespec(is_add ? two : one,
&names[names_idx].oid, 1, names[names_idx].mode);
- diff_queue(&renames->pairs[side], one, two);
+ pool_diff_queue(&opt->priv->pool, &renames->pairs[side], one, two);
}
static void collect_rename_info(struct merge_options *opt,
@@ -1086,7 +1100,7 @@ static int collect_merge_info_callback(int n,
len = traverse_path_len(info, p->pathlen);
/* +1 in both of the following lines to include the NUL byte */
- fullpath = xmalloc(len + 1);
+ fullpath = mem_pool_alloc(&opt->priv->pool, len + 1);
make_traverse_path(fullpath, len + 1, info, p->path, p->pathlen);
/*
@@ -1341,7 +1355,7 @@ static int handle_deferred_entries(struct merge_options *opt,
copy = renames->deferred[side].possible_trivial_merges;
strintmap_init_with_options(&renames->deferred[side].possible_trivial_merges,
0,
- NULL,
+ &opt->priv->pool,
0);
strintmap_for_each_entry(©, &iter, entry) {
const char *path = entry->key;
@@ -1499,7 +1513,6 @@ static int find_first_merges(struct repository *repo,
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);
@@ -1509,7 +1522,7 @@ static int find_first_merges(struct repository *repo,
die("revision walk setup failed");
while ((commit = get_revision(&revs)) != NULL) {
struct object *o = &(commit->object);
- if (in_merge_bases(b, commit))
+ if (repo_in_merge_bases(repo, b, commit))
add_object_array(o, NULL, &merges);
}
reset_revision_walk();
@@ -1524,7 +1537,7 @@ static int find_first_merges(struct repository *repo,
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)) {
+ if (i != j && repo_in_merge_bases(repo, m2, m1)) {
contains_another = 1;
break;
}
@@ -1545,10 +1558,12 @@ static int merge_submodule(struct merge_options *opt,
const struct object_id *b,
struct object_id *result)
{
+ struct repository subrepo;
+ struct strbuf sb = STRBUF_INIT;
+ int ret = 0;
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;
@@ -1564,46 +1579,48 @@ static int merge_submodule(struct merge_options *opt,
if (is_null_oid(b))
return 0;
- if (add_submodule_odb(path)) {
+ if (repo_submodule_init(&subrepo, opt->repo, path, null_oid())) {
path_msg(opt, path, 0,
- _("Failed to merge submodule %s (not checked out)"),
- path);
+ _("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))) {
+ if (!(commit_o = lookup_commit_reference(&subrepo, o)) ||
+ !(commit_a = lookup_commit_reference(&subrepo, a)) ||
+ !(commit_b = lookup_commit_reference(&subrepo, b))) {
path_msg(opt, path, 0,
_("Failed to merge submodule %s (commits not present)"),
path);
- return 0;
+ goto cleanup;
}
/* check whether both changes are forward */
- if (!in_merge_bases(commit_o, commit_a) ||
- !in_merge_bases(commit_o, commit_b)) {
+ if (!repo_in_merge_bases(&subrepo, commit_o, commit_a) ||
+ !repo_in_merge_bases(&subrepo, commit_o, commit_b)) {
path_msg(opt, path, 0,
_("Failed to merge submodule %s "
"(commits don't follow merge-base)"),
path);
- return 0;
+ goto cleanup;
}
/* Case #1: a is contained in b or vice versa */
- if (in_merge_bases(commit_a, commit_b)) {
+ if (repo_in_merge_bases(&subrepo, 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;
+ ret = 1;
+ goto cleanup;
}
- if (in_merge_bases(commit_b, commit_a)) {
+ if (repo_in_merge_bases(&subrepo, 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;
+ ret = 1;
+ goto cleanup;
}
/*
@@ -1615,10 +1632,10 @@ static int merge_submodule(struct merge_options *opt,
/* Skip the search if makes no sense to the calling context. */
if (!search)
- return 0;
+ goto cleanup;
/* find commit which merges them */
- parent_count = find_first_merges(opt->repo, path, commit_a, commit_b,
+ parent_count = find_first_merges(&subrepo, path, commit_a, commit_b,
&merges);
switch (parent_count) {
case 0:
@@ -1626,7 +1643,7 @@ static int merge_submodule(struct merge_options *opt,
break;
case 1:
- format_commit(&sb, 4,
+ format_commit(&sb, 4, &subrepo,
(struct commit *)merges.objects[0].item);
path_msg(opt, path, 0,
_("Failed to merge submodule %s, but a possible merge "
@@ -1643,7 +1660,7 @@ static int merge_submodule(struct merge_options *opt,
break;
default:
for (i = 0; i < merges.nr; i++)
- format_commit(&sb, 4,
+ format_commit(&sb, 4, &subrepo,
(struct commit *)merges.objects[i].item);
path_msg(opt, path, 0,
_("Failed to merge submodule %s, but multiple "
@@ -1652,7 +1669,9 @@ static int merge_submodule(struct merge_options *opt,
}
object_array_clear(&merges);
- return 0;
+cleanup:
+ repo_clear(&subrepo);
+ return ret;
}
static void initialize_attr_index(struct merge_options *opt)
@@ -2293,12 +2312,17 @@ static void apply_directory_rename_modifications(struct merge_options *opt,
VERIFY_CI(ci);
/* Find parent directories missing from opt->priv->paths */
- cur_path = new_path;
+ cur_path = mem_pool_strdup(&opt->priv->pool, new_path);
+ free((char*)new_path);
+ new_path = (char *)cur_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);
+ parent_name = mem_pool_strndup(&opt->priv->pool,
+ cur_path,
+ last_slash - cur_path);
} else {
parent_name = opt->priv->toplevel_dir;
break;
@@ -2307,7 +2331,6 @@ static void apply_directory_rename_modifications(struct merge_options *opt,
/* 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;
}
@@ -2334,13 +2357,6 @@ static void apply_directory_rename_modifications(struct merge_options *opt,
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);
@@ -2374,7 +2390,6 @@ static void apply_directory_rename_modifications(struct merge_options *opt,
new_ci->stages[index].mode = ci->stages[index].mode;
oidcpy(&new_ci->stages[index].oid, &ci->stages[index].oid);
- free(ci);
ci = new_ci;
}
@@ -2802,10 +2817,23 @@ static void use_cached_pairs(struct merge_options *opt,
if (!new_name)
new_name = old_name;
+ /*
+ * cached_pairs has *copies* of old_name and new_name,
+ * because it has to persist across merges. Since
+ * pool_alloc_filespec() will just re-use the existing
+ * filenames, which will also get re-used by
+ * opt->priv->paths if they become renames, and then
+ * get freed at the end of the merge, that would leave
+ * the copy in cached_pairs dangling. Avoid this by
+ * making a copy here.
+ */
+ old_name = mem_pool_strdup(&opt->priv->pool, old_name);
+ new_name = mem_pool_strdup(&opt->priv->pool, new_name);
+
/* We don't care about oid/mode, only filenames and status */
- one = alloc_filespec(old_name);
- two = alloc_filespec(new_name);
- diff_queue(pairs, one, two);
+ one = pool_alloc_filespec(&opt->priv->pool, old_name);
+ two = pool_alloc_filespec(&opt->priv->pool, new_name);
+ pool_diff_queue(&opt->priv->pool, pairs, one, two);
pairs->queue[pairs->nr-1]->status = entry->value ? 'R' : 'D';
}
}
@@ -2913,6 +2941,7 @@ static int detect_regular_renames(struct merge_options *opt,
diff_queued_diff = renames->pairs[side_index];
trace2_region_enter("diff", "diffcore_rename", opt->repo);
diffcore_rename_extended(&diff_opts,
+ &opt->priv->pool,
&renames->relevant_sources[side_index],
&renames->dirs_removed[side_index],
&renames->dir_rename_count[side_index],
@@ -2963,7 +2992,7 @@ static int collect_renames(struct merge_options *opt,
if (p->status != 'A' && p->status != 'R') {
possibly_cache_new_pair(renames, p, side_index, NULL);
- diff_free_filepair(p);
+ pool_diff_free_filepair(&opt->priv->pool, p);
continue;
}
@@ -2976,7 +3005,7 @@ static int collect_renames(struct merge_options *opt,
possibly_cache_new_pair(renames, p, side_index, new_path);
if (p->status != 'R' && !new_path) {
- diff_free_filepair(p);
+ pool_diff_free_filepair(&opt->priv->pool, p);
continue;
}
@@ -3094,7 +3123,7 @@ static int detect_and_process_renames(struct merge_options *opt,
side_pairs = &renames->pairs[s];
for (i = 0; i < side_pairs->nr; ++i) {
struct diff_filepair *p = side_pairs->queue[i];
- diff_free_filepair(p);
+ pool_diff_free_filepair(&opt->priv->pool, p);
}
}
@@ -3107,7 +3136,8 @@ static int detect_and_process_renames(struct merge_options *opt,
if (combined.nr) {
int i;
for (i = 0; i < combined.nr; i++)
- diff_free_filepair(combined.queue[i]);
+ pool_diff_free_filepair(&opt->priv->pool,
+ combined.queue[i]);
free(combined.queue);
}
@@ -3581,7 +3611,8 @@ static void process_entry(struct merge_options *opt,
* the directory to remain here, so we need to move this
* path to some new location.
*/
- CALLOC_ARRAY(new_ci, 1);
+ new_ci = mem_pool_calloc(&opt->priv->pool, 1, sizeof(*new_ci));
+
/* 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
@@ -3673,7 +3704,8 @@ static void process_entry(struct merge_options *opt,
const char *a_path = NULL, *b_path = NULL;
int rename_a = 0, rename_b = 0;
- new_ci = xmalloc(sizeof(*new_ci));
+ new_ci = mem_pool_alloc(&opt->priv->pool,
+ sizeof(*new_ci));
if (S_ISREG(a_mode))
rename_a = 1;
@@ -3742,17 +3774,8 @@ static void process_entry(struct merge_options *opt,
b_path = path;
strmap_put(&opt->priv->paths, b_path, new_ci);
- if (rename_a && rename_b) {
+ 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()
@@ -4029,11 +4052,7 @@ static int checkout(struct merge_options *opt,
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);
- }
+ unpack_opts.preserve_ignored = 0; /* FIXME: !opts->overwrite_ignore */
parse_tree(prev);
init_tree_desc(&trees[0], prev->buffer, prev->size);
parse_tree(next);
@@ -4041,8 +4060,6 @@ static int checkout(struct merge_options *opt,
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;
}
@@ -4058,6 +4075,21 @@ static int record_conflicted_index_entries(struct merge_options *opt)
if (strmap_empty(&opt->priv->conflicted))
return 0;
+ /*
+ * We are in a conflicted state. These conflicts might be inside
+ * sparse-directory entries, so check if any entries are outside
+ * of the sparse-checkout cone preemptively.
+ *
+ * We set original_cache_nr below, but that might change if
+ * index_name_pos() calls ask for paths within sparse directories.
+ */
+ strmap_for_each_entry(&opt->priv->conflicted, &iter, e) {
+ if (!path_in_sparse_checkout(e->key, index)) {
+ ensure_full_index(index);
+ break;
+ }
+ }
+
/* If any entries have skip_worktree set, we'll have to check 'em out */
state.force = 1;
state.quiet = 1;
@@ -4293,6 +4325,7 @@ static void merge_start(struct merge_options *opt, struct merge_result *result)
{
struct rename_info *renames;
int i;
+ struct mem_pool *pool = NULL;
/* Sanity checks on opt */
trace2_region_enter("merge", "sanity checks", opt->repo);
@@ -4358,9 +4391,11 @@ static void merge_start(struct merge_options *opt, struct merge_result *result)
/* Initialization of various renames fields */
renames = &opt->priv->renames;
+ mem_pool_init(&opt->priv->pool, 0);
+ pool = &opt->priv->pool;
for (i = MERGE_SIDE1; i <= MERGE_SIDE2; i++) {
strintmap_init_with_options(&renames->dirs_removed[i],
- NOT_RELEVANT, NULL, 0);
+ NOT_RELEVANT, pool, 0);
strmap_init_with_options(&renames->dir_rename_count[i],
NULL, 1);
strmap_init_with_options(&renames->dir_renames[i],
@@ -4374,7 +4409,7 @@ static void merge_start(struct merge_options *opt, struct merge_result *result)
*/
strintmap_init_with_options(&renames->relevant_sources[i],
-1 /* explicitly invalid */,
- NULL, 0);
+ pool, 0);
strmap_init_with_options(&renames->cached_pairs[i],
NULL, 1);
strset_init_with_options(&renames->cached_irrelevant[i],
@@ -4384,9 +4419,9 @@ static void merge_start(struct merge_options *opt, struct merge_result *result)
}
for (i = MERGE_SIDE1; i <= MERGE_SIDE2; i++) {
strintmap_init_with_options(&renames->deferred[i].possible_trivial_merges,
- 0, NULL, 0);
+ 0, pool, 0);
strset_init_with_options(&renames->deferred[i].target_dirs,
- NULL, 1);
+ pool, 1);
renames->deferred[i].trivial_merges_okay = 1; /* 1 == maybe */
}
@@ -4394,14 +4429,13 @@ static void merge_start(struct merge_options *opt, struct merge_result *result)
* 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.
+ * ownership, so we will later free it.
*
* 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_nodup(&opt->priv->paths_to_free);
+ strmap_init_with_options(&opt->priv->paths, pool, 0);
+ strmap_init_with_options(&opt->priv->conflicted, pool, 0);
/*
* keys & strbufs in output will sometimes need to outlive "paths",
diff --git a/merge-recursive.c b/merge-recursive.c
index 3355d50..d945779 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -24,6 +24,7 @@
#include "repository.h"
#include "revision.h"
#include "string-list.h"
+#include "submodule-config.h"
#include "submodule.h"
#include "tag.h"
#include "tree-walk.h"
@@ -55,10 +56,7 @@ static int path_hashmap_cmp(const void *cmp_data,
a = container_of(eptr, const struct path_hashmap_entry, e);
b = container_of(entry_or_key, const struct path_hashmap_entry, e);
- if (ignore_case)
- return strcasecmp(a->path, key ? key : b->path);
- else
- return strcmp(a->path, key ? key : b->path);
+ return fspathcmp(a->path, key ? key : b->path);
}
/*
@@ -336,7 +334,9 @@ static void output(struct merge_options *opt, int v, const char *fmt, ...)
flush_output(opt);
}
-static void output_commit_title(struct merge_options *opt, struct commit *commit)
+static void repo_output_commit_title(struct merge_options *opt,
+ struct repository *repo,
+ struct commit *commit)
{
struct merge_remote_desc *desc;
@@ -345,23 +345,29 @@ static void output_commit_title(struct merge_options *opt, struct commit *commit
if (desc)
strbuf_addf(&opt->obuf, "virtual %s\n", desc->name);
else {
- strbuf_add_unique_abbrev(&opt->obuf, &commit->object.oid,
- DEFAULT_ABBREV);
+ strbuf_repo_add_unique_abbrev(&opt->obuf, repo,
+ &commit->object.oid,
+ DEFAULT_ABBREV);
strbuf_addch(&opt->obuf, ' ');
- if (parse_commit(commit) != 0)
+ if (repo_parse_commit(repo, commit) != 0)
strbuf_addstr(&opt->obuf, _("(bad commit)\n"));
else {
const char *title;
- const char *msg = get_commit_buffer(commit, NULL);
+ const char *msg = repo_get_commit_buffer(repo, commit, NULL);
int len = find_commit_subject(msg, &title);
if (len)
strbuf_addf(&opt->obuf, "%.*s\n", len, title);
- unuse_commit_buffer(commit, msg);
+ repo_unuse_commit_buffer(repo, commit, msg);
}
}
flush_output(opt);
}
+static void output_commit_title(struct merge_options *opt, struct commit *commit)
+{
+ repo_output_commit_title(opt, the_repository, commit);
+}
+
static int add_cacheinfo(struct merge_options *opt,
const struct diff_filespec *blob,
const char *path, int stage, int refresh, int options)
@@ -411,8 +417,11 @@ static int unpack_trees_start(struct merge_options *opt,
memset(&opt->priv->unpack_opts, 0, sizeof(opt->priv->unpack_opts));
if (opt->priv->call_depth)
opt->priv->unpack_opts.index_only = 1;
- else
+ else {
opt->priv->unpack_opts.update = 1;
+ /* FIXME: should only do this if !overwrite_ignore */
+ opt->priv->unpack_opts.preserve_ignored = 0;
+ }
opt->priv->unpack_opts.merge = 1;
opt->priv->unpack_opts.head_idx = 2;
opt->priv->unpack_opts.fn = threeway_merge;
@@ -1113,7 +1122,6 @@ static int find_first_merges(struct repository *repo,
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);
@@ -1123,7 +1131,7 @@ static int find_first_merges(struct repository *repo,
die("revision walk setup failed");
while ((commit = get_revision(&revs)) != NULL) {
struct object *o = &(commit->object);
- if (in_merge_bases(b, commit))
+ if (repo_in_merge_bases(repo, b, commit))
add_object_array(o, NULL, &merges);
}
reset_revision_walk();
@@ -1138,7 +1146,7 @@ static int find_first_merges(struct repository *repo,
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)) {
+ if (i != j && repo_in_merge_bases(repo, m2, m1)) {
contains_another = 1;
break;
}
@@ -1152,14 +1160,14 @@ static int find_first_merges(struct repository *repo,
return result->nr;
}
-static void print_commit(struct commit *commit)
+static void print_commit(struct repository *repo, struct commit *commit)
{
struct strbuf sb = STRBUF_INIT;
struct pretty_print_context ctx = {0};
ctx.date_mode.type = DATE_NORMAL;
/* FIXME: Merge this with output_commit_title() */
assert(!merge_remote_util(commit));
- format_commit_message(commit, " %h: %m %s", &sb, &ctx);
+ repo_format_commit_message(repo, commit, " %h: %m %s", &sb, &ctx);
fprintf(stderr, "%s\n", sb.buf);
strbuf_release(&sb);
}
@@ -1174,6 +1182,8 @@ static int merge_submodule(struct merge_options *opt,
const struct object_id *base, const struct object_id *a,
const struct object_id *b)
{
+ struct repository subrepo;
+ int ret = 0;
struct commit *commit_base, *commit_a, *commit_b;
int parent_count;
struct object_array merges;
@@ -1197,49 +1207,51 @@ static int merge_submodule(struct merge_options *opt,
if (is_null_oid(b))
return 0;
- if (add_submodule_odb(path)) {
+ if (repo_submodule_init(&subrepo, opt->repo, path, null_oid())) {
output(opt, 1, _("Failed to merge submodule %s (not checked out)"), path);
return 0;
}
- if (!(commit_base = lookup_commit_reference(opt->repo, base)) ||
- !(commit_a = lookup_commit_reference(opt->repo, a)) ||
- !(commit_b = lookup_commit_reference(opt->repo, b))) {
+ if (!(commit_base = lookup_commit_reference(&subrepo, base)) ||
+ !(commit_a = lookup_commit_reference(&subrepo, a)) ||
+ !(commit_b = lookup_commit_reference(&subrepo, b))) {
output(opt, 1, _("Failed to merge submodule %s (commits not present)"), path);
- return 0;
+ goto cleanup;
}
/* check whether both changes are forward */
- if (!in_merge_bases(commit_base, commit_a) ||
- !in_merge_bases(commit_base, commit_b)) {
+ if (!repo_in_merge_bases(&subrepo, commit_base, commit_a) ||
+ !repo_in_merge_bases(&subrepo, commit_base, commit_b)) {
output(opt, 1, _("Failed to merge submodule %s (commits don't follow merge-base)"), path);
- return 0;
+ goto cleanup;
}
/* Case #1: a is contained in b or vice versa */
- if (in_merge_bases(commit_a, commit_b)) {
+ if (repo_in_merge_bases(&subrepo, commit_a, commit_b)) {
oidcpy(result, b);
if (show(opt, 3)) {
output(opt, 3, _("Fast-forwarding submodule %s to the following commit:"), path);
- output_commit_title(opt, commit_b);
+ repo_output_commit_title(opt, &subrepo, commit_b);
} else if (show(opt, 2))
output(opt, 2, _("Fast-forwarding submodule %s"), path);
else
; /* no output */
- return 1;
+ ret = 1;
+ goto cleanup;
}
- if (in_merge_bases(commit_b, commit_a)) {
+ if (repo_in_merge_bases(&subrepo, commit_b, commit_a)) {
oidcpy(result, a);
if (show(opt, 3)) {
output(opt, 3, _("Fast-forwarding submodule %s to the following commit:"), path);
- output_commit_title(opt, commit_a);
+ repo_output_commit_title(opt, &subrepo, commit_a);
} else if (show(opt, 2))
output(opt, 2, _("Fast-forwarding submodule %s"), path);
else
; /* no output */
- return 1;
+ ret = 1;
+ goto cleanup;
}
/*
@@ -1251,10 +1263,10 @@ static int merge_submodule(struct merge_options *opt,
/* Skip the search if makes no sense to the calling context. */
if (!search)
- return 0;
+ goto cleanup;
/* find commit which merges them */
- parent_count = find_first_merges(opt->repo, &merges, path,
+ parent_count = find_first_merges(&subrepo, &merges, path,
commit_a, commit_b);
switch (parent_count) {
case 0:
@@ -1264,7 +1276,7 @@ static int merge_submodule(struct merge_options *opt,
case 1:
output(opt, 1, _("Failed to merge submodule %s (not fast-forward)"), path);
output(opt, 2, _("Found a possible merge resolution for the submodule:\n"));
- print_commit((struct commit *) merges.objects[0].item);
+ print_commit(&subrepo, (struct commit *) merges.objects[0].item);
output(opt, 2, _(
"If this is correct simply add it to the index "
"for example\n"
@@ -1277,11 +1289,13 @@ static int merge_submodule(struct merge_options *opt,
default:
output(opt, 1, _("Failed to merge submodule %s (multiple merges found)"), path);
for (i = 0; i < merges.nr; i++)
- print_commit((struct commit *) merges.objects[i].item);
+ print_commit(&subrepo, (struct commit *) merges.objects[i].item);
}
object_array_clear(&merges);
- return 0;
+cleanup:
+ repo_clear(&subrepo);
+ return ret;
}
static int merge_mode_and_contents(struct merge_options *opt,
@@ -3750,6 +3764,9 @@ int merge_recursive(struct merge_options *opt,
assert(opt->ancestor == NULL ||
!strcmp(opt->ancestor, "constructed merge base"));
+ prepare_repo_settings(opt->repo);
+ opt->repo->settings.command_requires_full_index = 1;
+
if (merge_start(opt, repo_get_commit_tree(opt->repo, h1)))
return -1;
clean = merge_recursive_internal(opt, h1, h2, merge_bases, result);
diff --git a/merge.c b/merge.c
index 6e73688..2382ff6 100644
--- a/merge.c
+++ b/merge.c
@@ -53,7 +53,6 @@ int checkout_fast_forward(struct repository *r,
struct unpack_trees_options opts;
struct tree_desc t[MAX_UNPACK_TREES];
int i, nr_trees = 0;
- struct dir_struct dir = DIR_INIT;
struct lock_file lock_file = LOCK_INIT;
refresh_index(r->index, REFRESH_QUIET, NULL, NULL, NULL);
@@ -80,11 +79,7 @@ int checkout_fast_forward(struct repository *r,
}
memset(&opts, 0, sizeof(opts));
- if (overwrite_ignore) {
- dir.flags |= DIR_SHOW_IGNORED;
- setup_standard_excludes(&dir);
- opts.dir = &dir;
- }
+ opts.preserve_ignored = !overwrite_ignore;
opts.head_idx = 1;
opts.src_index = r->index;
@@ -101,7 +96,6 @@ int checkout_fast_forward(struct repository *r,
clear_unpack_trees_porcelain(&opts);
return -1;
}
- dir_clear(&dir);
clear_unpack_trees_porcelain(&opts);
if (write_locked_index(r->index, &lock_file, COMMIT_LOCK))
diff --git a/mergesort.c b/mergesort.c
index e5fdf2e..6216835 100644
--- a/mergesort.c
+++ b/mergesort.c
@@ -1,73 +1,84 @@
#include "cache.h"
#include "mergesort.h"
-struct mergesort_sublist {
- void *ptr;
- unsigned long len;
-};
-
-static void *get_nth_next(void *list, unsigned long n,
- void *(*get_next_fn)(const void *))
+/* Combine two sorted lists. Take from `list` on equality. */
+static void *llist_merge(void *list, void *other,
+ void *(*get_next_fn)(const void *),
+ void (*set_next_fn)(void *, void *),
+ int (*compare_fn)(const void *, const void *))
{
- while (n-- && list)
- list = get_next_fn(list);
- return list;
+ void *result = list, *tail;
+
+ if (compare_fn(list, other) > 0) {
+ result = other;
+ goto other;
+ }
+ for (;;) {
+ do {
+ tail = list;
+ list = get_next_fn(list);
+ if (!list) {
+ set_next_fn(tail, other);
+ return result;
+ }
+ } while (compare_fn(list, other) <= 0);
+ set_next_fn(tail, other);
+ other:
+ do {
+ tail = other;
+ other = get_next_fn(other);
+ if (!other) {
+ set_next_fn(tail, list);
+ return result;
+ }
+ } while (compare_fn(list, other) > 0);
+ set_next_fn(tail, list);
+ }
}
-static void *pop_item(struct mergesort_sublist *l,
- void *(*get_next_fn)(const void *))
-{
- void *p = l->ptr;
- l->ptr = get_next_fn(l->ptr);
- l->len = l->ptr ? (l->len - 1) : 0;
- return p;
-}
-
+/*
+ * Perform an iterative mergesort using an array of sublists.
+ *
+ * n is the number of items.
+ * ranks[i] is undefined if n & 2^i == 0, and assumed empty.
+ * ranks[i] contains a sublist of length 2^i otherwise.
+ *
+ * The number of bits in a void pointer limits the number of objects
+ * that can be created, and thus the number of array elements necessary
+ * to be able to sort any valid list.
+ *
+ * Adding an item to this array is like incrementing a binary number;
+ * positional values for set bits correspond to sublist lengths.
+ */
void *llist_mergesort(void *list,
void *(*get_next_fn)(const void *),
void (*set_next_fn)(void *, void *),
int (*compare_fn)(const void *, const void *))
{
- unsigned long l;
+ void *ranks[bitsizeof(void *)];
+ size_t n = 0;
+ int i;
- if (!list)
- return NULL;
- for (l = 1; ; l *= 2) {
- void *curr;
- struct mergesort_sublist p, q;
+ while (list) {
+ void *next = get_next_fn(list);
+ if (next)
+ set_next_fn(list, NULL);
+ for (i = 0; n & (1 << i); i++)
+ list = llist_merge(ranks[i], list, get_next_fn,
+ set_next_fn, compare_fn);
+ n++;
+ ranks[i] = list;
+ list = next;
+ }
- p.ptr = list;
- q.ptr = get_nth_next(p.ptr, l, get_next_fn);
- if (!q.ptr)
- break;
- p.len = q.len = l;
-
- if (compare_fn(p.ptr, q.ptr) > 0)
- list = curr = pop_item(&q, get_next_fn);
+ for (i = 0; n; i++, n >>= 1) {
+ if (!(n & 1))
+ continue;
+ if (list)
+ list = llist_merge(ranks[i], list, get_next_fn,
+ set_next_fn, compare_fn);
else
- list = curr = pop_item(&p, get_next_fn);
-
- while (p.ptr) {
- while (p.len || q.len) {
- void *prev = curr;
-
- if (!p.len)
- curr = pop_item(&q, get_next_fn);
- else if (!q.len)
- curr = pop_item(&p, get_next_fn);
- else if (compare_fn(p.ptr, q.ptr) > 0)
- curr = pop_item(&q, get_next_fn);
- else
- curr = pop_item(&p, get_next_fn);
- set_next_fn(prev, curr);
- }
- p.ptr = q.ptr;
- p.len = l;
- q.ptr = get_nth_next(p.ptr, l, get_next_fn);
- q.len = q.ptr ? l : 0;
-
- }
- set_next_fn(curr, NULL);
+ list = ranks[i];
}
return list;
}
diff --git a/mergetools/xxdiff b/mergetools/xxdiff
index ce5b8e9..d5ce467 100644
--- a/mergetools/xxdiff
+++ b/mergetools/xxdiff
@@ -3,6 +3,13 @@
-R 'Accel.Search: "Ctrl+F"' \
-R 'Accel.SearchForward: "Ctrl+G"' \
"$LOCAL" "$REMOTE"
+
+ # xxdiff can segfault on binary files which are often uninteresting.
+ # Do not allow segfaults to stop us from continuing on to the next file.
+ if test $? = 128
+ then
+ return 1
+ fi
}
merge_cmd () {
diff --git a/midx.c b/midx.c
index 321c6fd..8433086 100644
--- a/midx.c
+++ b/midx.c
@@ -13,6 +13,10 @@
#include "repository.h"
#include "chunk-format.h"
#include "pack.h"
+#include "pack-bitmap.h"
+#include "refs.h"
+#include "revision.h"
+#include "list-objects.h"
#define MIDX_SIGNATURE 0x4d494458 /* "MIDX" */
#define MIDX_VERSION 1
@@ -48,12 +52,12 @@ static uint8_t oid_version(void)
}
}
-static const unsigned char *get_midx_checksum(struct multi_pack_index *m)
+const unsigned char *get_midx_checksum(struct multi_pack_index *m)
{
return m->data + m->data_len - the_hash_algo->rawsz;
}
-static char *get_midx_filename(const char *object_dir)
+char *get_midx_filename(const char *object_dir)
{
return xstrfmt("%s/pack/multi-pack-index", object_dir);
}
@@ -195,6 +199,8 @@ void close_midx(struct multi_pack_index *m)
if (!m)
return;
+ close_midx(m->next);
+
munmap((unsigned char *)m->data, m->data_len);
for (i = 0; i < m->num_packs; i++) {
@@ -203,6 +209,7 @@ void close_midx(struct multi_pack_index *m)
}
FREE_AND_NULL(m->packs);
FREE_AND_NULL(m->pack_names);
+ free(m);
}
int prepare_midx_pack(struct repository *r, struct multi_pack_index *m, uint32_t pack_int_id)
@@ -276,14 +283,18 @@ uint32_t nth_midxed_pack_int_id(struct multi_pack_index *m, uint32_t pos)
(off_t)pos * MIDX_CHUNK_OFFSET_WIDTH);
}
-static int nth_midxed_pack_entry(struct repository *r,
- struct multi_pack_index *m,
- struct pack_entry *e,
- uint32_t pos)
+int fill_midx_entry(struct repository * r,
+ const struct object_id *oid,
+ struct pack_entry *e,
+ struct multi_pack_index *m)
{
+ uint32_t pos;
uint32_t pack_int_id;
struct packed_git *p;
+ if (!bsearch_midx(oid, m, &pos))
+ return 0;
+
if (pos >= m->num_objects)
return 0;
@@ -303,15 +314,9 @@ static int nth_midxed_pack_entry(struct repository *r,
if (!is_pack_valid(p))
return 0;
- if (p->num_bad_objects) {
- uint32_t i;
- struct object_id oid;
- nth_midxed_object_oid(&oid, m, pos);
- for (i = 0; i < p->num_bad_objects; i++)
- if (hasheq(oid.hash,
- p->bad_object_sha1 + the_hash_algo->rawsz * i))
- return 0;
- }
+ if (oidset_size(&p->bad_objects) &&
+ oidset_contains(&p->bad_objects, oid))
+ return 0;
e->offset = nth_midxed_offset(m, pos);
e->p = p;
@@ -319,19 +324,6 @@ static int nth_midxed_pack_entry(struct repository *r,
return 1;
}
-int fill_midx_entry(struct repository * r,
- const struct object_id *oid,
- struct pack_entry *e,
- struct multi_pack_index *m)
-{
- uint32_t pos;
-
- if (!bsearch_midx(oid, m, &pos))
- return 0;
-
- return nth_midxed_pack_entry(r, m, e, pos);
-}
-
/* Match "foo.idx" against either "foo.pack" _or_ "foo.idx". */
static int cmp_idx_or_pack_name(const char *idx_or_pack_name,
const char *idx_name)
@@ -468,6 +460,8 @@ struct write_midx_context {
uint32_t num_large_offsets;
int preferred_pack_idx;
+
+ struct string_list *to_include;
};
static void add_pack_to_midx(const char *full_path, size_t full_path_len,
@@ -477,8 +471,26 @@ static void add_pack_to_midx(const char *full_path, size_t full_path_len,
if (ends_with(file_name, ".idx")) {
display_progress(ctx->progress, ++ctx->pack_paths_checked);
+ /*
+ * Note that at most one of ctx->m and ctx->to_include are set,
+ * so we are testing midx_contains_pack() and
+ * string_list_has_string() independently (guarded by the
+ * appropriate NULL checks).
+ *
+ * We could support passing to_include while reusing an existing
+ * MIDX, but don't currently since the reuse process drags
+ * forward all packs from an existing MIDX (without checking
+ * whether or not they appear in the to_include list).
+ *
+ * If we added support for that, these next two conditional
+ * should be performed independently (likely checking
+ * to_include before the existing MIDX).
+ */
if (ctx->m && midx_contains_pack(ctx->m, file_name))
return;
+ else if (ctx->to_include &&
+ !string_list_has_string(ctx->to_include, file_name))
+ return;
ALLOC_GROW(ctx->info, ctx->nr + 1, ctx->alloc);
@@ -882,7 +894,7 @@ static void write_midx_reverse_index(char *midx_name, unsigned char *midx_hash,
strbuf_release(&buf);
}
-static void clear_midx_files_ext(struct repository *r, const char *ext,
+static void clear_midx_files_ext(const char *object_dir, const char *ext,
unsigned char *keep_hash);
static int midx_checksum_valid(struct multi_pack_index *m)
@@ -890,9 +902,232 @@ static int midx_checksum_valid(struct multi_pack_index *m)
return hashfile_checksum_valid(m->data, m->data_len);
}
-static int write_midx_internal(const char *object_dir, struct multi_pack_index *m,
+static void prepare_midx_packing_data(struct packing_data *pdata,
+ struct write_midx_context *ctx)
+{
+ uint32_t i;
+
+ memset(pdata, 0, sizeof(struct packing_data));
+ prepare_packing_data(the_repository, pdata);
+
+ for (i = 0; i < ctx->entries_nr; i++) {
+ struct pack_midx_entry *from = &ctx->entries[ctx->pack_order[i]];
+ struct object_entry *to = packlist_alloc(pdata, &from->oid);
+
+ oe_set_in_pack(pdata, to,
+ ctx->info[ctx->pack_perm[from->pack_int_id]].p);
+ }
+}
+
+static int add_ref_to_pending(const char *refname,
+ const struct object_id *oid,
+ int flag, void *cb_data)
+{
+ struct rev_info *revs = (struct rev_info*)cb_data;
+ struct object *object;
+
+ if ((flag & REF_ISSYMREF) && (flag & REF_ISBROKEN)) {
+ warning("symbolic ref is dangling: %s", refname);
+ return 0;
+ }
+
+ object = parse_object_or_die(oid, refname);
+ if (object->type != OBJ_COMMIT)
+ return 0;
+
+ add_pending_object(revs, object, "");
+ if (bitmap_is_preferred_refname(revs->repo, refname))
+ object->flags |= NEEDS_BITMAP;
+ return 0;
+}
+
+struct bitmap_commit_cb {
+ struct commit **commits;
+ size_t commits_nr, commits_alloc;
+
+ struct write_midx_context *ctx;
+};
+
+static const struct object_id *bitmap_oid_access(size_t index,
+ const void *_entries)
+{
+ const struct pack_midx_entry *entries = _entries;
+ return &entries[index].oid;
+}
+
+static void bitmap_show_commit(struct commit *commit, void *_data)
+{
+ struct bitmap_commit_cb *data = _data;
+ int pos = oid_pos(&commit->object.oid, data->ctx->entries,
+ data->ctx->entries_nr,
+ bitmap_oid_access);
+ if (pos < 0)
+ return;
+
+ ALLOC_GROW(data->commits, data->commits_nr + 1, data->commits_alloc);
+ data->commits[data->commits_nr++] = commit;
+}
+
+static int read_refs_snapshot(const char *refs_snapshot,
+ struct rev_info *revs)
+{
+ struct strbuf buf = STRBUF_INIT;
+ struct object_id oid;
+ FILE *f = xfopen(refs_snapshot, "r");
+
+ while (strbuf_getline(&buf, f) != EOF) {
+ struct object *object;
+ int preferred = 0;
+ char *hex = buf.buf;
+ const char *end = NULL;
+
+ if (buf.len && *buf.buf == '+') {
+ preferred = 1;
+ hex = &buf.buf[1];
+ }
+
+ if (parse_oid_hex(hex, &oid, &end) < 0)
+ die(_("could not parse line: %s"), buf.buf);
+ if (*end)
+ die(_("malformed line: %s"), buf.buf);
+
+ object = parse_object_or_die(&oid, NULL);
+ if (preferred)
+ object->flags |= NEEDS_BITMAP;
+
+ add_pending_object(revs, object, "");
+ }
+
+ fclose(f);
+ strbuf_release(&buf);
+ return 0;
+}
+
+static struct commit **find_commits_for_midx_bitmap(uint32_t *indexed_commits_nr_p,
+ const char *refs_snapshot,
+ struct write_midx_context *ctx)
+{
+ struct rev_info revs;
+ struct bitmap_commit_cb cb = {0};
+
+ cb.ctx = ctx;
+
+ repo_init_revisions(the_repository, &revs, NULL);
+ if (refs_snapshot) {
+ read_refs_snapshot(refs_snapshot, &revs);
+ } else {
+ setup_revisions(0, NULL, &revs, NULL);
+ for_each_ref(add_ref_to_pending, &revs);
+ }
+
+ /*
+ * Skipping promisor objects here is intentional, since it only excludes
+ * them from the list of reachable commits that we want to select from
+ * when computing the selection of MIDX'd commits to receive bitmaps.
+ *
+ * Reachability bitmaps do require that their objects be closed under
+ * reachability, but fetching any objects missing from promisors at this
+ * point is too late. But, if one of those objects can be reached from
+ * an another object that is included in the bitmap, then we will
+ * complain later that we don't have reachability closure (and fail
+ * appropriately).
+ */
+ fetch_if_missing = 0;
+ revs.exclude_promisor_objects = 1;
+
+ if (prepare_revision_walk(&revs))
+ die(_("revision walk setup failed"));
+
+ traverse_commit_list(&revs, bitmap_show_commit, NULL, &cb);
+ if (indexed_commits_nr_p)
+ *indexed_commits_nr_p = cb.commits_nr;
+
+ return cb.commits;
+}
+
+static int write_midx_bitmap(char *midx_name, unsigned char *midx_hash,
+ struct write_midx_context *ctx,
+ const char *refs_snapshot,
+ unsigned flags)
+{
+ struct packing_data pdata;
+ struct pack_idx_entry **index;
+ struct commit **commits = NULL;
+ uint32_t i, commits_nr;
+ uint16_t options = 0;
+ char *bitmap_name = xstrfmt("%s-%s.bitmap", midx_name, hash_to_hex(midx_hash));
+ int ret;
+
+ if (flags & MIDX_WRITE_BITMAP_HASH_CACHE)
+ options |= BITMAP_OPT_HASH_CACHE;
+
+ prepare_midx_packing_data(&pdata, ctx);
+
+ commits = find_commits_for_midx_bitmap(&commits_nr, refs_snapshot, ctx);
+
+ /*
+ * Build the MIDX-order index based on pdata.objects (which is already
+ * in MIDX order; c.f., 'midx_pack_order_cmp()' for the definition of
+ * this order).
+ */
+ ALLOC_ARRAY(index, pdata.nr_objects);
+ for (i = 0; i < pdata.nr_objects; i++)
+ index[i] = &pdata.objects[i].idx;
+
+ bitmap_writer_show_progress(flags & MIDX_PROGRESS);
+ bitmap_writer_build_type_index(&pdata, index, pdata.nr_objects);
+
+ /*
+ * bitmap_writer_finish expects objects in lex order, but pack_order
+ * gives us exactly that. use it directly instead of re-sorting the
+ * array.
+ *
+ * This changes the order of objects in 'index' between
+ * bitmap_writer_build_type_index and bitmap_writer_finish.
+ *
+ * The same re-ordering takes place in the single-pack bitmap code via
+ * write_idx_file(), which is called by finish_tmp_packfile(), which
+ * happens between bitmap_writer_build_type_index() and
+ * bitmap_writer_finish().
+ */
+ for (i = 0; i < pdata.nr_objects; i++)
+ index[ctx->pack_order[i]] = &pdata.objects[i].idx;
+
+ bitmap_writer_select_commits(commits, commits_nr, -1);
+ ret = bitmap_writer_build(&pdata);
+ if (ret < 0)
+ goto cleanup;
+
+ bitmap_writer_set_checksum(midx_hash);
+ bitmap_writer_finish(index, pdata.nr_objects, bitmap_name, options);
+
+cleanup:
+ free(index);
+ free(bitmap_name);
+ return ret;
+}
+
+static struct multi_pack_index *lookup_multi_pack_index(struct repository *r,
+ const char *object_dir)
+{
+ struct multi_pack_index *cur;
+
+ /* Ensure the given object_dir is local, or a known alternate. */
+ find_odb(r, object_dir);
+
+ for (cur = get_multi_pack_index(r); cur; cur = cur->next) {
+ if (!strcmp(object_dir, cur->object_dir))
+ return cur;
+ }
+
+ return NULL;
+}
+
+static int write_midx_internal(const char *object_dir,
+ struct string_list *packs_to_include,
struct string_list *packs_to_drop,
const char *preferred_pack_name,
+ const char *refs_snapshot,
unsigned flags)
{
char *midx_name;
@@ -911,10 +1146,14 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
die_errno(_("unable to create leading directories of %s"),
midx_name);
- if (m)
- ctx.m = m;
- else
- ctx.m = load_multi_pack_index(object_dir, 1);
+ if (!packs_to_include) {
+ /*
+ * Only reference an existing MIDX when not filtering which
+ * packs to include, since all packs and objects are copied
+ * blindly from an existing MIDX if one is present.
+ */
+ ctx.m = lookup_multi_pack_index(the_repository, object_dir);
+ }
if (ctx.m && !midx_checksum_valid(ctx.m)) {
warning(_("ignoring existing multi-pack-index; checksum mismatch"));
@@ -932,8 +1171,27 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
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].p = ctx.m->packs[i];
ctx.info[ctx.nr].expired = 0;
+
+ if (flags & MIDX_WRITE_REV_INDEX) {
+ /*
+ * If generating a reverse index, need to have
+ * packed_git's loaded to compare their
+ * mtimes and object count.
+ */
+ if (prepare_midx_pack(the_repository, ctx.m, i)) {
+ error(_("could not load pack"));
+ result = 1;
+ goto cleanup;
+ }
+
+ if (open_pack_index(ctx.m->packs[i]))
+ die(_("could not open index for %s"),
+ ctx.m->packs[i]->pack_name);
+ ctx.info[ctx.nr].p = ctx.m->packs[i];
+ }
+
ctx.nr++;
}
}
@@ -944,21 +1202,95 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
else
ctx.progress = NULL;
+ ctx.to_include = packs_to_include;
+
for_each_file_in_pack_dir(object_dir, add_pack_to_midx, &ctx);
stop_progress(&ctx.progress);
- if (ctx.m && ctx.nr == ctx.m->num_packs && !packs_to_drop)
- goto cleanup;
+ if ((ctx.m && ctx.nr == ctx.m->num_packs) &&
+ !(packs_to_include || packs_to_drop)) {
+ struct bitmap_index *bitmap_git;
+ int bitmap_exists;
+ int want_bitmap = flags & MIDX_WRITE_BITMAP;
- ctx.preferred_pack_idx = -1;
+ bitmap_git = prepare_midx_bitmap_git(ctx.m);
+ bitmap_exists = bitmap_git && bitmap_is_midx(bitmap_git);
+ free_bitmap_index(bitmap_git);
+
+ if (bitmap_exists || !want_bitmap) {
+ /*
+ * The correct MIDX already exists, and so does a
+ * corresponding bitmap (or one wasn't requested).
+ */
+ if (!want_bitmap)
+ clear_midx_files_ext(object_dir, ".bitmap",
+ NULL);
+ goto cleanup;
+ }
+ }
+
if (preferred_pack_name) {
+ int found = 0;
for (i = 0; i < ctx.nr; i++) {
if (!cmp_idx_or_pack_name(preferred_pack_name,
ctx.info[i].pack_name)) {
ctx.preferred_pack_idx = i;
+ found = 1;
break;
}
}
+
+ if (!found)
+ warning(_("unknown preferred pack: '%s'"),
+ preferred_pack_name);
+ } else if (ctx.nr &&
+ (flags & (MIDX_WRITE_REV_INDEX | MIDX_WRITE_BITMAP))) {
+ struct packed_git *oldest = ctx.info[ctx.preferred_pack_idx].p;
+ ctx.preferred_pack_idx = 0;
+
+ if (packs_to_drop && packs_to_drop->nr)
+ BUG("cannot write a MIDX bitmap during expiration");
+
+ /*
+ * set a preferred pack when writing a bitmap to ensure that
+ * the pack from which the first object is selected in pseudo
+ * pack-order has all of its objects selected from that pack
+ * (and not another pack containing a duplicate)
+ */
+ for (i = 1; i < ctx.nr; i++) {
+ struct packed_git *p = ctx.info[i].p;
+
+ if (!oldest->num_objects || p->mtime < oldest->mtime) {
+ oldest = p;
+ ctx.preferred_pack_idx = i;
+ }
+ }
+
+ if (!oldest->num_objects) {
+ /*
+ * If all packs are empty; unset the preferred index.
+ * This is acceptable since there will be no duplicate
+ * objects to resolve, so the preferred value doesn't
+ * matter.
+ */
+ ctx.preferred_pack_idx = -1;
+ }
+ } else {
+ /*
+ * otherwise don't mark any pack as preferred to avoid
+ * interfering with expiration logic below
+ */
+ ctx.preferred_pack_idx = -1;
+ }
+
+ if (ctx.preferred_pack_idx > -1) {
+ struct packed_git *preferred = ctx.info[ctx.preferred_pack_idx].p;
+ if (!preferred->num_objects) {
+ error(_("cannot select preferred pack %s with no objects"),
+ preferred->pack_name);
+ result = 1;
+ goto cleanup;
+ }
}
ctx.entries = get_sorted_entries(ctx.m, ctx.info, ctx.nr, &ctx.entries_nr,
@@ -1029,11 +1361,7 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
ctx.info, ctx.nr,
sizeof(*ctx.info),
idx_or_pack_name_cmp);
-
- if (!preferred)
- warning(_("unknown preferred pack: '%s'"),
- preferred_pack_name);
- else {
+ if (preferred) {
uint32_t perm = ctx.pack_perm[preferred->orig_pack_int_id];
if (perm == PACK_EXPIRED)
warning(_("preferred pack '%s' is expired"),
@@ -1048,9 +1376,6 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
hold_lock_file_for_update(&lk, midx_name, LOCK_DIE_ON_ERROR);
f = hashfd(get_lock_file_fd(&lk), get_lock_file_path(&lk));
- if (ctx.m)
- close_midx(ctx.m);
-
if (ctx.nr - dropped_packs == 0) {
error(_("no pack files to index."));
result = 1;
@@ -1081,14 +1406,28 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
finalize_hashfile(f, midx_hash, CSUM_FSYNC | CSUM_HASH_IN_STREAM);
free_chunkfile(cf);
- if (flags & MIDX_WRITE_REV_INDEX)
+ if (flags & (MIDX_WRITE_REV_INDEX | MIDX_WRITE_BITMAP))
ctx.pack_order = midx_pack_order(&ctx);
if (flags & MIDX_WRITE_REV_INDEX)
write_midx_reverse_index(midx_name, midx_hash, &ctx);
- clear_midx_files_ext(the_repository, ".rev", midx_hash);
+ if (flags & MIDX_WRITE_BITMAP) {
+ if (write_midx_bitmap(midx_name, midx_hash, &ctx,
+ refs_snapshot, flags) < 0) {
+ error(_("could not write multi-pack bitmap"));
+ result = 1;
+ goto cleanup;
+ }
+ }
- commit_lock_file(&lk);
+ if (ctx.m)
+ close_object_store(the_repository->objects);
+
+ if (commit_lock_file(&lk) < 0)
+ die_errno(_("could not write multi-pack-index"));
+
+ clear_midx_files_ext(object_dir, ".bitmap", midx_hash);
+ clear_midx_files_ext(object_dir, ".rev", midx_hash);
cleanup:
for (i = 0; i < ctx.nr; i++) {
@@ -1104,15 +1443,27 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
free(ctx.pack_perm);
free(ctx.pack_order);
free(midx_name);
+
return result;
}
int write_midx_file(const char *object_dir,
const char *preferred_pack_name,
+ const char *refs_snapshot,
unsigned flags)
{
return write_midx_internal(object_dir, NULL, NULL, preferred_pack_name,
- flags);
+ refs_snapshot, flags);
+}
+
+int write_midx_file_only(const char *object_dir,
+ struct string_list *packs_to_include,
+ const char *preferred_pack_name,
+ const char *refs_snapshot,
+ unsigned flags)
+{
+ return write_midx_internal(object_dir, packs_to_include, NULL,
+ preferred_pack_name, refs_snapshot, flags);
}
struct clear_midx_data {
@@ -1135,7 +1486,7 @@ static void clear_midx_file_ext(const char *full_path, size_t full_path_len,
die_errno(_("failed to remove %s"), full_path);
}
-static void clear_midx_files_ext(struct repository *r, const char *ext,
+static void clear_midx_files_ext(const char *object_dir, const char *ext,
unsigned char *keep_hash)
{
struct clear_midx_data data;
@@ -1146,7 +1497,7 @@ static void clear_midx_files_ext(struct repository *r, const char *ext,
hash_to_hex(keep_hash), ext);
data.ext = ext;
- for_each_file_in_pack_dir(r->objects->odb->path,
+ for_each_file_in_pack_dir(object_dir,
clear_midx_file_ext,
&data);
@@ -1165,7 +1516,8 @@ void clear_midx_file(struct repository *r)
if (remove_path(midx))
die(_("failed to clear multi-pack-index at %s"), midx);
- clear_midx_files_ext(r, ".rev", NULL);
+ clear_midx_files_ext(r->objects->odb->path, ".bitmap", NULL);
+ clear_midx_files_ext(r->objects->odb->path, ".rev", NULL);
free(midx);
}
@@ -1345,7 +1697,7 @@ int expire_midx_packs(struct repository *r, const char *object_dir, unsigned fla
{
uint32_t i, *count, result = 0;
struct string_list packs_to_drop = STRING_LIST_INIT_DUP;
- struct multi_pack_index *m = load_multi_pack_index(object_dir, 1);
+ struct multi_pack_index *m = lookup_multi_pack_index(r, object_dir);
struct progress *progress = NULL;
if (!m)
@@ -1391,9 +1743,10 @@ int expire_midx_packs(struct repository *r, const char *object_dir, unsigned fla
free(count);
if (packs_to_drop.nr)
- result = write_midx_internal(object_dir, m, &packs_to_drop, NULL, flags);
+ result = write_midx_internal(object_dir, NULL, &packs_to_drop, NULL, NULL, flags);
string_list_clear(&packs_to_drop, 0);
+
return result;
}
@@ -1509,7 +1862,7 @@ int midx_repack(struct repository *r, const char *object_dir, size_t batch_size,
struct child_process cmd = CHILD_PROCESS_INIT;
FILE *cmd_in;
struct strbuf base_name = STRBUF_INIT;
- struct multi_pack_index *m = load_multi_pack_index(object_dir, 1);
+ struct multi_pack_index *m = lookup_multi_pack_index(r, object_dir);
/*
* When updating the default for these configuration
@@ -1580,12 +1933,9 @@ int midx_repack(struct repository *r, const char *object_dir, size_t batch_size,
goto cleanup;
}
- result = write_midx_internal(object_dir, m, NULL, NULL, flags);
- m = NULL;
+ result = write_midx_internal(object_dir, NULL, NULL, NULL, NULL, flags);
cleanup:
- if (m)
- close_midx(m);
free(include_pack);
return result;
}
diff --git a/midx.h b/midx.h
index 8684cf0..6e32297 100644
--- a/midx.h
+++ b/midx.h
@@ -2,12 +2,15 @@
#define MIDX_H
#include "repository.h"
+#include "string-list.h"
struct object_id;
struct pack_entry;
struct repository;
#define GIT_TEST_MULTI_PACK_INDEX "GIT_TEST_MULTI_PACK_INDEX"
+#define GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP \
+ "GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP"
struct multi_pack_index {
struct multi_pack_index *next;
@@ -41,7 +44,11 @@ struct multi_pack_index {
#define MIDX_PROGRESS (1 << 0)
#define MIDX_WRITE_REV_INDEX (1 << 1)
+#define MIDX_WRITE_BITMAP (1 << 2)
+#define MIDX_WRITE_BITMAP_HASH_CACHE (1 << 3)
+const unsigned char *get_midx_checksum(struct multi_pack_index *m);
+char *get_midx_filename(const char *object_dir);
char *get_midx_rev_filename(struct multi_pack_index *m);
struct multi_pack_index *load_multi_pack_index(const char *object_dir, int local);
@@ -56,7 +63,19 @@ int fill_midx_entry(struct repository *r, const struct object_id *oid, struct pa
int midx_contains_pack(struct multi_pack_index *m, const char *idx_or_pack_name);
int prepare_multi_pack_index_one(struct repository *r, const char *object_dir, int local);
-int write_midx_file(const char *object_dir, const char *preferred_pack_name, unsigned flags);
+/*
+ * Variant of write_midx_file which writes a MIDX containing only the packs
+ * specified in packs_to_include.
+ */
+int write_midx_file(const char *object_dir,
+ const char *preferred_pack_name,
+ const char *refs_snapshot,
+ unsigned flags);
+int write_midx_file_only(const char *object_dir,
+ struct string_list *packs_to_include,
+ const char *preferred_pack_name,
+ const char *refs_snapshot,
+ unsigned flags);
void clear_midx_file(struct repository *r);
int verify_midx_file(struct repository *r, const char *object_dir, unsigned flags);
int expire_midx_packs(struct repository *r, const char *object_dir, unsigned flags);
diff --git a/notes-merge.c b/notes-merge.c
index 46c1f7c..b4a3a90 100644
--- a/notes-merge.c
+++ b/notes-merge.c
@@ -273,7 +273,7 @@ static void check_notes_merge_worktree(struct notes_merge_options *o)
*/
if (file_exists(git_path(NOTES_MERGE_WORKTREE)) &&
!is_empty_dir(git_path(NOTES_MERGE_WORKTREE))) {
- if (advice_resolve_conflict)
+ if (advice_enabled(ADVICE_RESOLVE_CONFLICT))
die(_("You have not concluded your previous "
"notes merge (%s exists).\nPlease, use "
"'git notes merge --commit' or 'git notes "
diff --git a/object-file.c b/object-file.c
index a8be899..c3d866a 100644
--- a/object-file.c
+++ b/object-file.c
@@ -32,6 +32,7 @@
#include "packfile.h"
#include "object-store.h"
#include "promisor-remote.h"
+#include "submodule.h"
/* The maximum size for an object header. */
#define MAX_HEADER_LEN 32
@@ -414,74 +415,6 @@ enum scld_error safe_create_leading_directories_const(const char *path)
return result;
}
-int raceproof_create_file(const char *path, create_file_fn fn, void *cb)
-{
- /*
- * The number of times we will try to remove empty directories
- * in the way of path. This is only 1 because if another
- * process is racily creating directories that conflict with
- * us, we don't want to fight against them.
- */
- int remove_directories_remaining = 1;
-
- /*
- * The number of times that we will try to create the
- * directories containing path. We are willing to attempt this
- * more than once, because another process could be trying to
- * clean up empty directories at the same time as we are
- * trying to create them.
- */
- int create_directories_remaining = 3;
-
- /* A scratch copy of path, filled lazily if we need it: */
- struct strbuf path_copy = STRBUF_INIT;
-
- int ret, save_errno;
-
- /* Sanity check: */
- assert(*path);
-
-retry_fn:
- ret = fn(path, cb);
- save_errno = errno;
- if (!ret)
- goto out;
-
- if (errno == EISDIR && remove_directories_remaining-- > 0) {
- /*
- * A directory is in the way. Maybe it is empty; try
- * to remove it:
- */
- if (!path_copy.len)
- strbuf_addstr(&path_copy, path);
-
- if (!remove_dir_recursively(&path_copy, REMOVE_DIR_EMPTY_ONLY))
- goto retry_fn;
- } else if (errno == ENOENT && create_directories_remaining-- > 0) {
- /*
- * Maybe the containing directory didn't exist, or
- * maybe it was just deleted by a process that is
- * racing with us to clean up empty directories. Try
- * to create it:
- */
- enum scld_error scld_result;
-
- if (!path_copy.len)
- strbuf_addstr(&path_copy, path);
-
- do {
- scld_result = safe_create_leading_directories(path_copy.buf);
- if (scld_result == SCLD_OK)
- goto retry_fn;
- } while (scld_result == SCLD_VANISHED && create_directories_remaining-- > 0);
- }
-
-out:
- strbuf_release(&path_copy);
- errno = save_errno;
- return ret;
-}
-
static void fill_loose_path(struct strbuf *buf, const struct object_id *oid)
{
int i;
@@ -820,6 +753,27 @@ char *compute_alternate_path(const char *path, struct strbuf *err)
return ref_git;
}
+struct object_directory *find_odb(struct repository *r, const char *obj_dir)
+{
+ struct object_directory *odb;
+ char *obj_dir_real = real_pathdup(obj_dir, 1);
+ struct strbuf odb_path_real = STRBUF_INIT;
+
+ prepare_alt_odb(r);
+ for (odb = r->objects->odb; odb; odb = odb->next) {
+ strbuf_realpath(&odb_path_real, odb->path, 1);
+ if (!strcmp(obj_dir_real, odb_path_real.buf))
+ break;
+ }
+
+ free(obj_dir_real);
+ strbuf_release(&odb_path_real);
+
+ if (!odb)
+ die(_("could not find object directory matching %s"), obj_dir);
+ return odb;
+}
+
static void fill_alternate_refs_command(struct child_process *cmd,
const char *repo_path)
{
@@ -1062,9 +1016,11 @@ void *xmmap(void *start, size_t length,
* the streaming interface and rehash it to do the same.
*/
int check_object_signature(struct repository *r, const struct object_id *oid,
- void *map, unsigned long size, const char *type)
+ void *map, unsigned long size, const char *type,
+ struct object_id *real_oidp)
{
- struct object_id real_oid;
+ struct object_id tmp;
+ struct object_id *real_oid = real_oidp ? real_oidp : &tmp;
enum object_type obj_type;
struct git_istream *st;
git_hash_ctx c;
@@ -1072,8 +1028,8 @@ int check_object_signature(struct repository *r, const struct object_id *oid,
int hdrlen;
if (map) {
- hash_object_file(r->hash_algo, map, size, type, &real_oid);
- return !oideq(oid, &real_oid) ? -1 : 0;
+ hash_object_file(r->hash_algo, map, size, type, real_oid);
+ return !oideq(oid, real_oid) ? -1 : 0;
}
st = open_istream(r, oid, &obj_type, &size, NULL);
@@ -1098,9 +1054,9 @@ int check_object_signature(struct repository *r, const struct object_id *oid,
break;
r->hash_algo->update_fn(&c, buf, readlen);
}
- r->hash_algo->final_oid_fn(&real_oid, &c);
+ r->hash_algo->final_oid_fn(real_oid, &c);
close_istream(st);
- return !oideq(oid, &real_oid) ? -1 : 0;
+ return !oideq(oid, real_oid) ? -1 : 0;
}
int git_open_cloexec(const char *name, int flags)
@@ -1233,11 +1189,14 @@ void *map_loose_object(struct repository *r,
return map_loose_object_1(r, NULL, oid, size);
}
-static int unpack_loose_short_header(git_zstream *stream,
- unsigned char *map, unsigned long mapsize,
- void *buffer, unsigned long bufsiz)
+enum unpack_loose_header_result unpack_loose_header(git_zstream *stream,
+ unsigned char *map,
+ unsigned long mapsize,
+ void *buffer,
+ unsigned long bufsiz,
+ struct strbuf *header)
{
- int ret;
+ int status;
/* Get the data stream */
memset(stream, 0, sizeof(*stream));
@@ -1248,43 +1207,24 @@ static int unpack_loose_short_header(git_zstream *stream,
git_inflate_init(stream);
obj_read_unlock();
- ret = git_inflate(stream, 0);
+ status = git_inflate(stream, 0);
obj_read_lock();
-
- return ret;
-}
-
-int unpack_loose_header(git_zstream *stream,
- unsigned char *map, unsigned long mapsize,
- void *buffer, unsigned long bufsiz)
-{
- int status = unpack_loose_short_header(stream, map, mapsize,
- buffer, bufsiz);
-
if (status < Z_OK)
- return status;
-
- /* Make sure we have the terminating NUL */
- if (!memchr(buffer, '\0', stream->next_out - (unsigned char *)buffer))
- return -1;
- return 0;
-}
-
-static int unpack_loose_header_to_strbuf(git_zstream *stream, unsigned char *map,
- unsigned long mapsize, void *buffer,
- unsigned long bufsiz, struct strbuf *header)
-{
- int status;
-
- status = unpack_loose_short_header(stream, map, mapsize, buffer, bufsiz);
- if (status < Z_OK)
- return -1;
+ return ULHR_BAD;
/*
* Check if entire header is unpacked in the first iteration.
*/
if (memchr(buffer, '\0', stream->next_out - (unsigned char *)buffer))
- return 0;
+ return ULHR_OK;
+
+ /*
+ * We have a header longer than MAX_HEADER_LEN. The "header"
+ * here is only non-NULL when we run "cat-file
+ * --allow-unknown-type".
+ */
+ if (!header)
+ return ULHR_TOO_LONG;
/*
* buffer[0..bufsiz] was not large enough. Copy the partial
@@ -1305,7 +1245,7 @@ static int unpack_loose_header_to_strbuf(git_zstream *stream, unsigned char *map
stream->next_out = buffer;
stream->avail_out = bufsiz;
} while (status != Z_STREAM_END);
- return -1;
+ return ULHR_TOO_LONG;
}
static void *unpack_loose_rest(git_zstream *stream,
@@ -1363,8 +1303,7 @@ static void *unpack_loose_rest(git_zstream *stream,
* too permissive for what we want to check. So do an anal
* object header parse by hand.
*/
-static int parse_loose_header_extended(const char *hdr, struct object_info *oi,
- unsigned int flags)
+int parse_loose_header(const char *hdr, struct object_info *oi)
{
const char *type_buf = hdr;
unsigned long size;
@@ -1386,15 +1325,6 @@ static int parse_loose_header_extended(const char *hdr, struct object_info *oi,
type = type_from_string_gently(type_buf, type_len, 1);
if (oi->type_name)
strbuf_add(oi->type_name, type_buf, type_len);
- /*
- * Set type to 0 if its an unknown object and
- * we're obtaining the type using '--allow-unknown-type'
- * option.
- */
- if ((flags & OBJECT_INFO_ALLOW_UNKNOWN_TYPE) && (type < 0))
- type = 0;
- else if (type < 0)
- die(_("invalid object type"));
if (oi->typep)
*oi->typep = type;
@@ -1421,15 +1351,14 @@ static int parse_loose_header_extended(const char *hdr, struct object_info *oi,
/*
* The length must be followed by a zero byte
*/
- return *hdr ? -1 : type;
-}
+ if (*hdr)
+ return -1;
-int parse_loose_header(const char *hdr, unsigned long *sizep)
-{
- struct object_info oi = OBJECT_INFO_INIT;
-
- oi.sizep = sizep;
- return parse_loose_header_extended(hdr, &oi, 0);
+ /*
+ * The format is valid, but the type may still be bogus. The
+ * Caller needs to check its oi->typep.
+ */
+ return 0;
}
static int loose_object_info(struct repository *r,
@@ -1443,6 +1372,8 @@ static int loose_object_info(struct repository *r,
char hdr[MAX_HEADER_LEN];
struct strbuf hdrbuf = STRBUF_INIT;
unsigned long size_scratch;
+ enum object_type type_scratch;
+ int allow_unknown = flags & OBJECT_INFO_ALLOW_UNKNOWN_TYPE;
if (oi->delta_base_oid)
oidclr(oi->delta_base_oid);
@@ -1473,43 +1404,48 @@ static int loose_object_info(struct repository *r,
if (!oi->sizep)
oi->sizep = &size_scratch;
+ if (!oi->typep)
+ oi->typep = &type_scratch;
if (oi->disk_sizep)
*oi->disk_sizep = mapsize;
- if ((flags & OBJECT_INFO_ALLOW_UNKNOWN_TYPE)) {
- if (unpack_loose_header_to_strbuf(&stream, map, mapsize, hdr, sizeof(hdr), &hdrbuf) < 0)
- status = error(_("unable to unpack %s header with --allow-unknown-type"),
- oid_to_hex(oid));
- } else if (unpack_loose_header(&stream, map, mapsize, hdr, sizeof(hdr)) < 0)
+
+ switch (unpack_loose_header(&stream, map, mapsize, hdr, sizeof(hdr),
+ allow_unknown ? &hdrbuf : NULL)) {
+ case ULHR_OK:
+ if (parse_loose_header(hdrbuf.len ? hdrbuf.buf : hdr, oi) < 0)
+ status = error(_("unable to parse %s header"), oid_to_hex(oid));
+ else if (!allow_unknown && *oi->typep < 0)
+ die(_("invalid object type"));
+
+ if (!oi->contentp)
+ break;
+ *oi->contentp = unpack_loose_rest(&stream, hdr, *oi->sizep, oid);
+ if (*oi->contentp)
+ goto cleanup;
+
+ status = -1;
+ break;
+ case ULHR_BAD:
status = error(_("unable to unpack %s header"),
oid_to_hex(oid));
- if (status < 0)
- ; /* Do nothing */
- else if (hdrbuf.len) {
- if ((status = parse_loose_header_extended(hdrbuf.buf, oi, flags)) < 0)
- status = error(_("unable to parse %s header with --allow-unknown-type"),
- oid_to_hex(oid));
- } else if ((status = parse_loose_header_extended(hdr, oi, flags)) < 0)
- status = error(_("unable to parse %s header"), oid_to_hex(oid));
+ break;
+ case ULHR_TOO_LONG:
+ status = error(_("header for %s too long, exceeds %d bytes"),
+ oid_to_hex(oid), MAX_HEADER_LEN);
+ break;
+ }
- if (status >= 0 && oi->contentp) {
- *oi->contentp = unpack_loose_rest(&stream, hdr,
- *oi->sizep, oid);
- if (!*oi->contentp) {
- git_inflate_end(&stream);
- status = -1;
- }
- } else
- git_inflate_end(&stream);
-
+ git_inflate_end(&stream);
+cleanup:
munmap(map, mapsize);
- if (status && oi->typep)
- *oi->typep = status;
if (oi->sizep == &size_scratch)
oi->sizep = NULL;
strbuf_release(&hdrbuf);
+ if (oi->typep == &type_scratch)
+ oi->typep = NULL;
oi->whence = OI_LOOSE;
- return (status < 0) ? status : 0;
+ return status;
}
int obj_read_use_lock = 0;
@@ -1592,6 +1528,17 @@ static int do_oid_object_info_extended(struct repository *r,
break;
}
+ /*
+ * If r is the_repository, this might be an attempt at
+ * accessing a submodule object as if it were in the_repository
+ * (having called add_submodule_odb() on that submodule's ODB).
+ * If any such ODBs exist, register them and try again.
+ */
+ if (r == the_repository &&
+ register_all_submodule_odb_as_alternates())
+ /* We added some alternates; retry */
+ continue;
+
/* Check if it is a missing object */
if (fetch_if_missing && repo_has_promisor_remote(r) &&
!already_retried &&
@@ -1616,7 +1563,7 @@ static int do_oid_object_info_extended(struct repository *r,
return 0;
rtype = packed_object_info(r, e.p, e.offset, oi);
if (rtype < 0) {
- mark_bad_packed_object(e.p, real->hash);
+ mark_bad_packed_object(e.p, real);
return do_oid_object_info_extended(r, real, oi, 0);
} else if (oi->whence == OI_PACKED) {
oi->u.packed.offset = e.offset;
@@ -1725,7 +1672,7 @@ void *read_object_file_extended(struct repository *r,
die(_("loose object %s (stored in %s) is corrupt"),
oid_to_hex(repl), path);
- if ((p = has_packed_and_bad(r, repl->hash)) != NULL)
+ if ((p = has_packed_and_bad(r, repl)) != NULL)
die(_("packed object %s (stored in %s) is corrupt"),
oid_to_hex(repl), p->pack_name);
obj_read_unlock();
@@ -1915,7 +1862,7 @@ static int create_tmpfile(struct strbuf *tmp, const char *filename)
static int write_loose_object(const struct object_id *oid, char *hdr,
int hdrlen, const void *buf, unsigned long len,
- time_t mtime)
+ time_t mtime, unsigned flags)
{
int fd, ret;
unsigned char compressed[4096];
@@ -1929,7 +1876,9 @@ static int write_loose_object(const struct object_id *oid, char *hdr,
fd = create_tmpfile(&tmp_file, filename.buf);
if (fd < 0) {
- if (errno == EACCES)
+ if (flags & HASH_SILENT)
+ return -1;
+ else if (errno == EACCES)
return error(_("insufficient permission for adding an object to repository database %s"), get_object_directory());
else
return error_errno(_("unable to create temporary file"));
@@ -1979,7 +1928,8 @@ static int write_loose_object(const struct object_id *oid, char *hdr,
struct utimbuf utb;
utb.actime = mtime;
utb.modtime = mtime;
- if (utime(tmp_file.buf, &utb) < 0)
+ if (utime(tmp_file.buf, &utb) < 0 &&
+ !(flags & HASH_SILENT))
warning_errno(_("failed utime() on %s"), tmp_file.buf);
}
@@ -2004,8 +1954,9 @@ static int freshen_packed_object(const struct object_id *oid)
return 1;
}
-int write_object_file(const void *buf, unsigned long len, const char *type,
- struct object_id *oid)
+int write_object_file_flags(const void *buf, unsigned long len,
+ const char *type, struct object_id *oid,
+ unsigned flags)
{
char hdr[MAX_HEADER_LEN];
int hdrlen = sizeof(hdr);
@@ -2017,7 +1968,7 @@ int write_object_file(const void *buf, unsigned long len, const char *type,
&hdrlen);
if (freshen_packed_object(oid) || freshen_loose_object(oid))
return 0;
- return write_loose_object(oid, hdr, hdrlen, buf, len, 0);
+ return write_loose_object(oid, hdr, hdrlen, buf, len, 0, flags);
}
int hash_object_file_literally(const void *buf, unsigned long len,
@@ -2037,7 +1988,7 @@ int hash_object_file_literally(const void *buf, unsigned long len,
goto cleanup;
if (freshen_packed_object(oid) || freshen_loose_object(oid))
goto cleanup;
- status = write_loose_object(oid, header, hdrlen, buf, len, 0);
+ status = write_loose_object(oid, header, hdrlen, buf, len, 0, 0);
cleanup:
free(header);
@@ -2059,7 +2010,7 @@ int force_object_loose(const struct object_id *oid, time_t mtime)
if (!buf)
return error(_("cannot read object for %s"), oid_to_hex(oid));
hdrlen = xsnprintf(hdr, sizeof(hdr), "%s %"PRIuMAX , type_name(type), (uintmax_t)len) + 1;
- ret = write_loose_object(oid, hdr, hdrlen, buf, len, mtime);
+ ret = write_loose_object(oid, hdr, hdrlen, buf, len, mtime, 0);
free(buf);
return ret;
@@ -2566,17 +2517,16 @@ static int check_stream_oid(git_zstream *stream,
int read_loose_object(const char *path,
const struct object_id *expected_oid,
- enum object_type *type,
- unsigned long *size,
- void **contents)
+ struct object_id *real_oid,
+ void **contents,
+ struct object_info *oi)
{
int ret = -1;
void *map = NULL;
unsigned long mapsize;
git_zstream stream;
char hdr[MAX_HEADER_LEN];
-
- *contents = NULL;
+ unsigned long *size = oi->sizep;
map = map_loose_object_1(the_repository, path, NULL, &mapsize);
if (!map) {
@@ -2584,19 +2534,19 @@ int read_loose_object(const char *path,
goto out;
}
- if (unpack_loose_header(&stream, map, mapsize, hdr, sizeof(hdr)) < 0) {
+ if (unpack_loose_header(&stream, map, mapsize, hdr, sizeof(hdr),
+ NULL) < 0) {
error(_("unable to unpack header of %s"), path);
goto out;
}
- *type = parse_loose_header(hdr, size);
- if (*type < 0) {
+ if (parse_loose_header(hdr, oi) < 0) {
error(_("unable to parse header of %s"), path);
git_inflate_end(&stream);
goto out;
}
- if (*type == OBJ_BLOB && *size > big_file_threshold) {
+ if (*oi->typep == OBJ_BLOB && *size > big_file_threshold) {
if (check_stream_oid(&stream, hdr, *size, path, expected_oid) < 0)
goto out;
} else {
@@ -2608,12 +2558,8 @@ int read_loose_object(const char *path,
}
if (check_object_signature(the_repository, expected_oid,
*contents, *size,
- type_name(*type))) {
- error(_("hash mismatch for %s (expected %s)"), path,
- oid_to_hex(expected_oid));
- free(*contents);
+ oi->type_name->buf, real_oid))
goto out;
- }
}
ret = 0; /* everything checks out */
diff --git a/object-name.c b/object-name.c
index 3263c19..fdff460 100644
--- a/object-name.c
+++ b/object-name.c
@@ -806,7 +806,7 @@ static int get_oid_basic(struct repository *r, const char *str, int len,
refs_found = repo_dwim_ref(r, str, len, &tmp_oid, &real_ref, 0);
if (refs_found > 0) {
warning(warn_msg, len, str);
- if (advice_object_name_warning)
+ if (advice_enabled(ADVICE_OBJECT_NAME_WARNING))
fprintf(stderr, "%s\n", _(object_name_msg));
}
free(real_ref);
diff --git a/object-store.h b/object-store.h
index d24915c..952efb6 100644
--- a/object-store.h
+++ b/object-store.h
@@ -10,6 +10,7 @@
#include "khash.h"
#include "dir.h"
#include "oidtree.h"
+#include "oidset.h"
struct object_directory {
struct object_directory *next;
@@ -38,6 +39,7 @@ KHASH_INIT(odb_path_map, const char * /* key: odb_path */,
void prepare_alt_odb(struct repository *r);
char *compute_alternate_path(const char *path, struct strbuf *err);
+struct object_directory *find_odb(struct repository *r, const char *obj_dir);
typedef int alt_odb_fn(struct object_directory *, void *);
int foreach_alt_odb(alt_odb_fn, void*);
typedef void alternate_ref_fn(const struct object_id *oid, void *);
@@ -75,9 +77,8 @@ struct packed_git {
const void *index_data;
size_t index_size;
uint32_t num_objects;
- uint32_t num_bad_objects;
uint32_t crc_offset;
- unsigned char *bad_object_sha1;
+ struct oidset bad_objects;
int index_version;
time_t mtime;
int pack_fd;
@@ -222,8 +223,14 @@ int hash_object_file(const struct git_hash_algo *algo, const void *buf,
unsigned long len, const char *type,
struct object_id *oid);
-int write_object_file(const void *buf, unsigned long len,
- const char *type, struct object_id *oid);
+int write_object_file_flags(const void *buf, unsigned long len,
+ const char *type, struct object_id *oid,
+ unsigned flags);
+static inline int write_object_file(const void *buf, unsigned long len,
+ const char *type, struct object_id *oid)
+{
+ return write_object_file_flags(buf, len, type, oid, 0);
+}
int hash_object_file_literally(const void *buf, unsigned long len,
const char *type, struct object_id *oid,
@@ -244,6 +251,7 @@ int force_object_loose(const struct object_id *oid, time_t mtime);
/*
* Open the loose object at path, check its hash, and return the contents,
+ * use the "oi" argument to assert things about the object, or e.g. populate its
* type, and size. If the object is a blob, then "contents" may return NULL,
* to allow streaming of large blobs.
*
@@ -251,9 +259,9 @@ int force_object_loose(const struct object_id *oid, time_t mtime);
*/
int read_loose_object(const char *path,
const struct object_id *expected_oid,
- enum object_type *type,
- unsigned long *size,
- void **contents);
+ struct object_id *real_oid,
+ void **contents,
+ struct object_info *oi);
/* Retry packed storage after checking packed and loose storage */
#define HAS_OBJECT_RECHECK_PACKED 1
@@ -370,7 +378,7 @@ struct object_info {
* Initializer for a "struct object_info" that wants no items. You may
* also memset() the memory to all-zeroes.
*/
-#define OBJECT_INFO_INIT {NULL}
+#define OBJECT_INFO_INIT { 0 }
/* Invoke lookup_replace_object() on the given hash */
#define OBJECT_INFO_LOOKUP_REPLACE 1
@@ -455,6 +463,12 @@ enum for_each_object_flags {
* Visit objects within a pack in packfile order rather than .idx order
*/
FOR_EACH_OBJECT_PACK_ORDER = (1<<2),
+
+ /* Only iterate over packs that are not marked as kept in-core. */
+ FOR_EACH_OBJECT_SKIP_IN_CORE_KEPT_PACKS = (1<<3),
+
+ /* Only iterate over packs that do not have .keep files. */
+ FOR_EACH_OBJECT_SKIP_ON_DISK_KEPT_PACKS = (1<<4),
};
/*
diff --git a/object.c b/object.c
index 4e85955..23a24e6 100644
--- a/object.c
+++ b/object.c
@@ -279,7 +279,7 @@ struct object *parse_object(struct repository *r, const struct object_id *oid)
if ((obj && obj->type == OBJ_BLOB && repo_has_object_file(r, oid)) ||
(!obj && repo_has_object_file(r, oid) &&
oid_object_info(r, oid, NULL) == OBJ_BLOB)) {
- if (check_object_signature(r, repl, NULL, 0, NULL) < 0) {
+ if (check_object_signature(r, repl, NULL, 0, NULL, NULL) < 0) {
error(_("hash mismatch %s"), oid_to_hex(oid));
return NULL;
}
@@ -290,7 +290,7 @@ struct object *parse_object(struct repository *r, const struct object_id *oid)
buffer = repo_read_object_file(r, oid, &type, &size);
if (buffer) {
if (check_object_signature(r, repl, buffer, size,
- type_name(type)) < 0) {
+ type_name(type), NULL) < 0) {
free(buffer);
error(_("hash mismatch %s"), oid_to_hex(repl));
return NULL;
diff --git a/object.h b/object.h
index 3b38c9c..cb556ab 100644
--- a/object.h
+++ b/object.h
@@ -55,7 +55,7 @@ struct object_array {
} *objects;
};
-#define OBJECT_ARRAY_INIT { 0, 0, NULL }
+#define OBJECT_ARRAY_INIT { 0 }
/*
* object flag allocation:
@@ -75,7 +75,6 @@ struct object_array {
* builtin/fsck.c: 0--3
* builtin/gc.c: 0
* builtin/index-pack.c: 2021
- * builtin/pack-objects.c: 20
* builtin/reflog.c: 10--12
* builtin/show-branch.c: 0-------------------------------------------26
* builtin/unpack-objects.c: 2021
diff --git a/oid-array.h b/oid-array.h
index 72bca78..f60f9af 100644
--- a/oid-array.h
+++ b/oid-array.h
@@ -56,7 +56,7 @@ struct oid_array {
int sorted;
};
-#define OID_ARRAY_INIT { NULL, 0, 0, 0 }
+#define OID_ARRAY_INIT { 0 }
/**
* Add an item to the set. The object ID will be placed at the end of the array
diff --git a/oidset.c b/oidset.c
index 5aac633..b36a2ba 100644
--- a/oidset.c
+++ b/oidset.c
@@ -36,11 +36,6 @@ void oidset_clear(struct oidset *set)
oidset_init(set, 0);
}
-int oidset_size(struct oidset *set)
-{
- return kh_size(&set->set);
-}
-
void oidset_parse_file(struct oidset *set, const char *path)
{
oidset_parse_file_carefully(set, path, NULL, NULL);
diff --git a/oidset.h b/oidset.h
index 01f6560..ba4a5a2 100644
--- a/oidset.h
+++ b/oidset.h
@@ -57,7 +57,10 @@ int oidset_remove(struct oidset *set, const struct object_id *oid);
/**
* Returns the number of oids in the set.
*/
-int oidset_size(struct oidset *set);
+static inline int oidset_size(const struct oidset *set)
+{
+ return kh_size(&set->set);
+}
/**
* Remove all entries from the oidset, freeing any resources associated with
diff --git a/pack-bitmap-write.c b/pack-bitmap-write.c
index 88d9e69..9c55c15 100644
--- a/pack-bitmap-write.c
+++ b/pack-bitmap-write.c
@@ -48,7 +48,7 @@ void bitmap_writer_show_progress(int show)
}
/**
- * Build the initial type index for the packfile
+ * Build the initial type index for the packfile or multi-pack-index
*/
void bitmap_writer_build_type_index(struct packing_data *to_pack,
struct pack_idx_entry **index,
@@ -125,15 +125,20 @@ static inline void push_bitmapped_commit(struct commit *commit)
writer.selected_nr++;
}
-static uint32_t find_object_pos(const struct object_id *oid)
+static uint32_t find_object_pos(const struct object_id *oid, int *found)
{
struct object_entry *entry = packlist_find(writer.to_pack, oid);
if (!entry) {
- die("Failed to write bitmap index. Packfile doesn't have full closure "
+ if (found)
+ *found = 0;
+ warning("Failed to write bitmap index. Packfile doesn't have full closure "
"(object %s is missing)", oid_to_hex(oid));
+ return 0;
}
+ if (found)
+ *found = 1;
return oe_in_pack_pos(writer.to_pack, entry);
}
@@ -331,9 +336,10 @@ static void bitmap_builder_clear(struct bitmap_builder *bb)
bb->commits_nr = bb->commits_alloc = 0;
}
-static void fill_bitmap_tree(struct bitmap *bitmap,
- struct tree *tree)
+static int fill_bitmap_tree(struct bitmap *bitmap,
+ struct tree *tree)
{
+ int found;
uint32_t pos;
struct tree_desc desc;
struct name_entry entry;
@@ -342,9 +348,11 @@ static void fill_bitmap_tree(struct bitmap *bitmap,
* 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);
+ pos = find_object_pos(&tree->object.oid, &found);
+ if (!found)
+ return -1;
if (bitmap_get(bitmap, pos))
- return;
+ return 0;
bitmap_set(bitmap, pos);
if (parse_tree(tree) < 0)
@@ -355,11 +363,15 @@ static void fill_bitmap_tree(struct bitmap *bitmap,
while (tree_entry(&desc, &entry)) {
switch (object_type(entry.mode)) {
case OBJ_TREE:
- fill_bitmap_tree(bitmap,
- lookup_tree(the_repository, &entry.oid));
+ if (fill_bitmap_tree(bitmap,
+ lookup_tree(the_repository, &entry.oid)) < 0)
+ return -1;
break;
case OBJ_BLOB:
- bitmap_set(bitmap, find_object_pos(&entry.oid));
+ pos = find_object_pos(&entry.oid, &found);
+ if (!found)
+ return -1;
+ bitmap_set(bitmap, pos);
break;
default:
/* Gitlink, etc; not reachable */
@@ -368,15 +380,18 @@ static void fill_bitmap_tree(struct bitmap *bitmap,
}
free_tree_buffer(tree);
+ return 0;
}
-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)
+static int 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)
{
+ int found;
+ uint32_t pos;
if (!ent->bitmap)
ent->bitmap = bitmap_new();
@@ -401,11 +416,16 @@ static void fill_bitmap_commit(struct bb_commit *ent,
* Mark ourselves and queue our tree. The commit
* walk ensures we cover all parents.
*/
- bitmap_set(ent->bitmap, find_object_pos(&c->object.oid));
+ pos = find_object_pos(&c->object.oid, &found);
+ if (!found)
+ return -1;
+ bitmap_set(ent->bitmap, pos);
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);
+ pos = find_object_pos(&p->item->object.oid, &found);
+ if (!found)
+ return -1;
if (!bitmap_get(ent->bitmap, pos)) {
bitmap_set(ent->bitmap, pos);
prio_queue_put(queue, p->item);
@@ -413,8 +433,12 @@ static void fill_bitmap_commit(struct bb_commit *ent,
}
}
- while (tree_queue->nr)
- fill_bitmap_tree(ent->bitmap, prio_queue_get(tree_queue));
+ while (tree_queue->nr) {
+ if (fill_bitmap_tree(ent->bitmap,
+ prio_queue_get(tree_queue)) < 0)
+ return -1;
+ }
+ return 0;
}
static void store_selected(struct bb_commit *ent, struct commit *commit)
@@ -432,7 +456,7 @@ static void store_selected(struct bb_commit *ent, struct commit *commit)
kh_value(writer.bitmaps, hash_pos) = stored;
}
-void bitmap_writer_build(struct packing_data *to_pack)
+int bitmap_writer_build(struct packing_data *to_pack)
{
struct bitmap_builder bb;
size_t i;
@@ -441,6 +465,7 @@ void bitmap_writer_build(struct packing_data *to_pack)
struct prio_queue tree_queue = { NULL };
struct bitmap_index *old_bitmap;
uint32_t *mapping;
+ int closed = 1; /* until proven otherwise */
writer.bitmaps = kh_init_oid_map();
writer.to_pack = to_pack;
@@ -463,8 +488,11 @@ void bitmap_writer_build(struct packing_data *to_pack)
struct commit *child;
int reused = 0;
- fill_bitmap_commit(ent, commit, &queue, &tree_queue,
- old_bitmap, mapping);
+ if (fill_bitmap_commit(ent, commit, &queue, &tree_queue,
+ old_bitmap, mapping) < 0) {
+ closed = 0;
+ break;
+ }
if (ent->selected) {
store_selected(ent, commit);
@@ -492,6 +520,7 @@ void bitmap_writer_build(struct packing_data *to_pack)
clear_prio_queue(&queue);
clear_prio_queue(&tree_queue);
bitmap_builder_clear(&bb);
+ free_bitmap_index(old_bitmap);
free(mapping);
trace2_region_leave("pack-bitmap-write", "building_bitmaps_total",
@@ -499,7 +528,9 @@ void bitmap_writer_build(struct packing_data *to_pack)
stop_progress(&writer.progress);
- compute_xor_offsets();
+ if (closed)
+ compute_xor_offsets();
+ return closed ? 0 : -1;
}
/**
diff --git a/pack-bitmap.c b/pack-bitmap.c
index d999616..f47a0a7 100644
--- a/pack-bitmap.c
+++ b/pack-bitmap.c
@@ -13,6 +13,7 @@
#include "repository.h"
#include "object-store.h"
#include "list-objects-filter-options.h"
+#include "midx.h"
#include "config.h"
/*
@@ -35,8 +36,15 @@ struct stored_bitmap {
* the active bitmap index is the largest one.
*/
struct bitmap_index {
- /* Packfile to which this bitmap index belongs to */
+ /*
+ * The pack or multi-pack index (MIDX) that this bitmap index belongs
+ * to.
+ *
+ * Exactly one of these must be non-NULL; this specifies the object
+ * order used to interpret this bitmap.
+ */
struct packed_git *pack;
+ struct multi_pack_index *midx;
/*
* Mark the first `reuse_objects` in the packfile as reused:
@@ -71,6 +79,9 @@ struct bitmap_index {
/* If not NULL, this is a name-hash cache pointing into map. */
uint32_t *hashes;
+ /* The checksum of the packfile or MIDX; points into map. */
+ const unsigned char *checksum;
+
/*
* Extended index.
*
@@ -136,6 +147,13 @@ static struct ewah_bitmap *read_bitmap_1(struct bitmap_index *index)
return b;
}
+static uint32_t bitmap_num_objects(struct bitmap_index *index)
+{
+ if (index->midx)
+ return index->midx->num_objects;
+ return index->pack->num_objects;
+}
+
static int load_bitmap_header(struct bitmap_index *index)
{
struct bitmap_disk_header *header = (void *)index->map;
@@ -154,7 +172,7 @@ 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));
+ size_t cache_size = st_mult(bitmap_num_objects(index), sizeof(uint32_t));
unsigned char *index_end = index->map + index->map_size - the_hash_algo->rawsz;
if ((flags & BITMAP_OPT_FULL_DAG) == 0)
@@ -170,6 +188,7 @@ static int load_bitmap_header(struct bitmap_index *index)
}
index->entry_count = ntohl(header->entry_count);
+ index->checksum = header->checksum;
index->map_pos += header_size;
return 0;
}
@@ -218,6 +237,15 @@ static inline uint8_t read_u8(const unsigned char *buffer, size_t *pos)
#define MAX_XOR_OFFSET 160
+static int nth_bitmap_object_oid(struct bitmap_index *index,
+ struct object_id *oid,
+ uint32_t n)
+{
+ if (index->midx)
+ return nth_midxed_object_oid(oid, index->midx, n) ? 0 : -1;
+ return nth_packed_object_id(oid, index->pack, n);
+}
+
static int load_bitmap_entries_v1(struct bitmap_index *index)
{
uint32_t i;
@@ -237,7 +265,7 @@ static int load_bitmap_entries_v1(struct bitmap_index *index)
xor_offset = read_u8(index->map, &index->map_pos);
flags = read_u8(index->map, &index->map_pos);
- if (nth_packed_object_id(&oid, index->pack, commit_idx_pos) < 0)
+ if (nth_bitmap_object_oid(index, &oid, commit_idx_pos) < 0)
return error("corrupt ewah bitmap: commit index %u out of range",
(unsigned)commit_idx_pos);
@@ -262,7 +290,14 @@ static int load_bitmap_entries_v1(struct bitmap_index *index)
return 0;
}
-static char *pack_bitmap_filename(struct packed_git *p)
+char *midx_bitmap_filename(struct multi_pack_index *midx)
+{
+ return xstrfmt("%s-%s.bitmap",
+ get_midx_filename(midx->object_dir),
+ hash_to_hex(get_midx_checksum(midx)));
+}
+
+char *pack_bitmap_filename(struct packed_git *p)
{
size_t len;
@@ -271,6 +306,57 @@ static char *pack_bitmap_filename(struct packed_git *p)
return xstrfmt("%.*s.bitmap", (int)len, p->pack_name);
}
+static int open_midx_bitmap_1(struct bitmap_index *bitmap_git,
+ struct multi_pack_index *midx)
+{
+ struct stat st;
+ char *idx_name = midx_bitmap_filename(midx);
+ int fd = git_open(idx_name);
+
+ free(idx_name);
+
+ if (fd < 0)
+ return -1;
+
+ if (fstat(fd, &st)) {
+ close(fd);
+ return -1;
+ }
+
+ if (bitmap_git->pack || bitmap_git->midx) {
+ /* ignore extra bitmap file; we can only handle one */
+ warning("ignoring extra bitmap file: %s",
+ get_midx_filename(midx->object_dir));
+ close(fd);
+ return -1;
+ }
+
+ bitmap_git->midx = midx;
+ bitmap_git->map_size = xsize_t(st.st_size);
+ bitmap_git->map_pos = 0;
+ bitmap_git->map = xmmap(NULL, bitmap_git->map_size, PROT_READ,
+ MAP_PRIVATE, fd, 0);
+ close(fd);
+
+ if (load_bitmap_header(bitmap_git) < 0)
+ goto cleanup;
+
+ if (!hasheq(get_midx_checksum(bitmap_git->midx), bitmap_git->checksum))
+ goto cleanup;
+
+ if (load_midx_revindex(bitmap_git->midx) < 0) {
+ warning(_("multi-pack bitmap is missing required reverse index"));
+ goto cleanup;
+ }
+ return 0;
+
+cleanup:
+ munmap(bitmap_git->map, bitmap_git->map_size);
+ bitmap_git->map_size = 0;
+ bitmap_git->map = NULL;
+ return -1;
+}
+
static int open_pack_bitmap_1(struct bitmap_index *bitmap_git, struct packed_git *packfile)
{
int fd;
@@ -292,7 +378,8 @@ static int open_pack_bitmap_1(struct bitmap_index *bitmap_git, struct packed_git
return -1;
}
- if (bitmap_git->pack) {
+ if (bitmap_git->pack || bitmap_git->midx) {
+ /* ignore extra bitmap file; we can only handle one */
warning("ignoring extra bitmap file: %s", packfile->pack_name);
close(fd);
return -1;
@@ -319,13 +406,39 @@ static int open_pack_bitmap_1(struct bitmap_index *bitmap_git, struct packed_git
return 0;
}
-static int load_pack_bitmap(struct bitmap_index *bitmap_git)
+static int load_reverse_index(struct bitmap_index *bitmap_git)
+{
+ if (bitmap_is_midx(bitmap_git)) {
+ uint32_t i;
+ int ret;
+
+ /*
+ * The multi-pack-index's .rev file is already loaded via
+ * open_pack_bitmap_1().
+ *
+ * But we still need to open the individual pack .rev files,
+ * since we will need to make use of them in pack-objects.
+ */
+ for (i = 0; i < bitmap_git->midx->num_packs; i++) {
+ if (prepare_midx_pack(the_repository, bitmap_git->midx, i))
+ die(_("load_reverse_index: could not open pack"));
+ ret = load_pack_revindex(bitmap_git->midx->packs[i]);
+ if (ret)
+ return ret;
+ }
+ return 0;
+ }
+ return load_pack_revindex(bitmap_git->pack);
+}
+
+static int load_bitmap(struct bitmap_index *bitmap_git)
{
assert(bitmap_git->map);
bitmap_git->bitmaps = kh_init_oid_map();
bitmap_git->ext_index.positions = kh_init_oid_pos();
- if (load_pack_revindex(bitmap_git->pack))
+
+ if (load_reverse_index(bitmap_git))
goto failed;
if (!(bitmap_git->commits = read_bitmap_1(bitmap_git)) ||
@@ -369,11 +482,46 @@ static int open_pack_bitmap(struct repository *r,
return ret;
}
+static int open_midx_bitmap(struct repository *r,
+ struct bitmap_index *bitmap_git)
+{
+ struct multi_pack_index *midx;
+
+ assert(!bitmap_git->map);
+
+ for (midx = get_multi_pack_index(r); midx; midx = midx->next) {
+ if (!open_midx_bitmap_1(bitmap_git, midx))
+ return 0;
+ }
+ return -1;
+}
+
+static int open_bitmap(struct repository *r,
+ struct bitmap_index *bitmap_git)
+{
+ assert(!bitmap_git->map);
+
+ if (!open_midx_bitmap(r, bitmap_git))
+ return 0;
+ return open_pack_bitmap(r, bitmap_git);
+}
+
struct bitmap_index *prepare_bitmap_git(struct repository *r)
{
struct bitmap_index *bitmap_git = xcalloc(1, sizeof(*bitmap_git));
- if (!open_pack_bitmap(r, bitmap_git) && !load_pack_bitmap(bitmap_git))
+ if (!open_bitmap(r, bitmap_git) && !load_bitmap(bitmap_git))
+ return bitmap_git;
+
+ free_bitmap_index(bitmap_git);
+ return NULL;
+}
+
+struct bitmap_index *prepare_midx_bitmap_git(struct multi_pack_index *midx)
+{
+ struct bitmap_index *bitmap_git = xcalloc(1, sizeof(*bitmap_git));
+
+ if (!open_midx_bitmap_1(bitmap_git, midx) && !load_bitmap(bitmap_git))
return bitmap_git;
free_bitmap_index(bitmap_git);
@@ -404,7 +552,7 @@ static inline int bitmap_position_extended(struct bitmap_index *bitmap_git,
if (pos < kh_end(positions)) {
int bitmap_pos = kh_value(positions, pos);
- return bitmap_pos + bitmap_git->pack->num_objects;
+ return bitmap_pos + bitmap_num_objects(bitmap_git);
}
return -1;
@@ -423,10 +571,26 @@ static inline int bitmap_position_packfile(struct bitmap_index *bitmap_git,
return pos;
}
+static int bitmap_position_midx(struct bitmap_index *bitmap_git,
+ const struct object_id *oid)
+{
+ uint32_t want, got;
+ if (!bsearch_midx(oid, bitmap_git->midx, &want))
+ return -1;
+
+ if (midx_to_pack_pos(bitmap_git->midx, want, &got) < 0)
+ return -1;
+ return got;
+}
+
static int bitmap_position(struct bitmap_index *bitmap_git,
const struct object_id *oid)
{
- int pos = bitmap_position_packfile(bitmap_git, oid);
+ int pos;
+ if (bitmap_is_midx(bitmap_git))
+ pos = bitmap_position_midx(bitmap_git, oid);
+ else
+ pos = bitmap_position_packfile(bitmap_git, oid);
return (pos >= 0) ? pos : bitmap_position_extended(bitmap_git, oid);
}
@@ -456,7 +620,7 @@ static int ext_index_add_object(struct bitmap_index *bitmap_git,
bitmap_pos = kh_value(eindex->positions, hash_pos);
}
- return bitmap_pos + bitmap_git->pack->num_objects;
+ return bitmap_pos + bitmap_num_objects(bitmap_git);
}
struct bitmap_show_data {
@@ -673,7 +837,7 @@ static void show_extended_objects(struct bitmap_index *bitmap_git,
for (i = 0; i < eindex->count; ++i) {
struct object *obj;
- if (!bitmap_get(objects, bitmap_git->pack->num_objects + i))
+ if (!bitmap_get(objects, bitmap_num_objects(bitmap_git) + i))
continue;
obj = eindex->objects[i];
@@ -737,6 +901,7 @@ static void show_objects_for_type(
continue;
for (offset = 0; offset < BITS_IN_EWORD; ++offset) {
+ struct packed_git *pack;
struct object_id oid;
uint32_t hash = 0, index_pos;
off_t ofs;
@@ -746,14 +911,28 @@ static void show_objects_for_type(
offset += ewah_bit_ctz64(word >> offset);
- 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_is_midx(bitmap_git)) {
+ struct multi_pack_index *m = bitmap_git->midx;
+ uint32_t pack_id;
+
+ index_pos = pack_pos_to_midx(m, pos + offset);
+ ofs = nth_midxed_offset(m, index_pos);
+ nth_midxed_object_oid(&oid, m, index_pos);
+
+ pack_id = nth_midxed_pack_int_id(m, index_pos);
+ pack = bitmap_git->midx->packs[pack_id];
+ } else {
+ index_pos = pack_pos_to_index(bitmap_git->pack, pos + offset);
+ ofs = pack_pos_to_offset(bitmap_git->pack, pos + offset);
+ nth_bitmap_object_oid(bitmap_git, &oid, index_pos);
+
+ pack = bitmap_git->pack;
+ }
if (bitmap_git->hashes)
hash = get_be32(bitmap_git->hashes + index_pos);
- show_reach(&oid, object_type, 0, hash, bitmap_git->pack, ofs);
+ show_reach(&oid, object_type, 0, hash, pack, ofs);
}
}
}
@@ -765,8 +944,13 @@ static int in_bitmapped_pack(struct bitmap_index *bitmap_git,
struct object *object = roots->item;
roots = roots->next;
- if (find_pack_entry_one(object->oid.hash, bitmap_git->pack) > 0)
- return 1;
+ if (bitmap_is_midx(bitmap_git)) {
+ if (bsearch_midx(&object->oid, bitmap_git->midx, NULL))
+ return 1;
+ } else {
+ if (find_pack_entry_one(object->oid.hash, bitmap_git->pack) > 0)
+ return 1;
+ }
}
return 0;
@@ -832,7 +1016,7 @@ static void filter_bitmap_exclude_type(struct bitmap_index *bitmap_git,
* them individually.
*/
for (i = 0; i < eindex->count; i++) {
- uint32_t pos = i + bitmap_git->pack->num_objects;
+ uint32_t pos = i + bitmap_num_objects(bitmap_git);
if (eindex->objects[i]->type == type &&
bitmap_get(to_filter, pos) &&
!bitmap_get(tips, pos))
@@ -853,23 +1037,35 @@ static void filter_bitmap_blob_none(struct bitmap_index *bitmap_git,
static unsigned long get_size_by_pos(struct bitmap_index *bitmap_git,
uint32_t pos)
{
- struct packed_git *pack = bitmap_git->pack;
unsigned long size;
struct object_info oi = OBJECT_INFO_INIT;
oi.sizep = &size;
- if (pos < pack->num_objects) {
- off_t ofs = pack_pos_to_offset(pack, pos);
+ if (pos < bitmap_num_objects(bitmap_git)) {
+ struct packed_git *pack;
+ off_t ofs;
+
+ if (bitmap_is_midx(bitmap_git)) {
+ uint32_t midx_pos = pack_pos_to_midx(bitmap_git->midx, pos);
+ uint32_t pack_id = nth_midxed_pack_int_id(bitmap_git->midx, midx_pos);
+
+ pack = bitmap_git->midx->packs[pack_id];
+ ofs = nth_midxed_offset(bitmap_git->midx, midx_pos);
+ } else {
+ pack = bitmap_git->pack;
+ 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,
- pack_pos_to_index(pack, pos));
+ nth_bitmap_object_oid(bitmap_git, &oid,
+ pack_pos_to_index(pack, pos));
die(_("unable to get size of %s"), oid_to_hex(&oid));
}
} else {
struct eindex *eindex = &bitmap_git->ext_index;
- struct object *obj = eindex->objects[pos - pack->num_objects];
+ struct object *obj = eindex->objects[pos - bitmap_num_objects(bitmap_git)];
if (oid_object_info_extended(the_repository, &obj->oid, &oi, 0) < 0)
die(_("unable to get size of %s"), oid_to_hex(&obj->oid));
}
@@ -911,7 +1107,7 @@ static void filter_bitmap_blob_limit(struct bitmap_index *bitmap_git,
}
for (i = 0; i < eindex->count; i++) {
- uint32_t pos = i + bitmap_git->pack->num_objects;
+ uint32_t pos = i + bitmap_num_objects(bitmap_git);
if (eindex->objects[i]->type == OBJ_BLOB &&
bitmap_get(to_filter, pos) &&
!bitmap_get(tips, pos) &&
@@ -1041,7 +1237,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 */
CALLOC_ARRAY(bitmap_git, 1);
- if (open_pack_bitmap(revs->repo, bitmap_git) < 0)
+ if (open_bitmap(revs->repo, bitmap_git) < 0)
goto cleanup;
for (i = 0; i < revs->pending.nr; ++i) {
@@ -1085,7 +1281,7 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
* from disk. this is the point of no return; after this the rev_list
* becomes invalidated and we must perform the revwalk through bitmaps
*/
- if (load_pack_bitmap(bitmap_git) < 0)
+ if (load_bitmap(bitmap_git) < 0)
goto cleanup;
object_array_clear(&revs->pending);
@@ -1128,22 +1324,49 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
return NULL;
}
-static void try_partial_reuse(struct bitmap_index *bitmap_git,
- size_t pos,
- struct bitmap *reuse,
- struct pack_window **w_curs)
+/*
+ * -1 means "stop trying further objects"; 0 means we may or may not have
+ * reused, but you can keep feeding bits.
+ */
+static int try_partial_reuse(struct packed_git *pack,
+ size_t pos,
+ struct bitmap *reuse,
+ struct pack_window **w_curs)
{
- off_t offset, header;
+ off_t offset, delta_obj_offset;
enum object_type type;
unsigned long size;
- if (pos >= bitmap_git->pack->num_objects)
- return; /* not actually in the pack */
+ /*
+ * try_partial_reuse() is called either on (a) objects in the
+ * bitmapped pack (in the case of a single-pack bitmap) or (b)
+ * objects in the preferred pack of a multi-pack bitmap.
+ * Importantly, the latter can pretend as if only a single pack
+ * exists because:
+ *
+ * - The first pack->num_objects bits of a MIDX bitmap are
+ * reserved for the preferred pack, and
+ *
+ * - Ties due to duplicate objects are always resolved in
+ * favor of the preferred pack.
+ *
+ * Therefore we do not need to ever ask the MIDX for its copy of
+ * an object by OID, since it will always select it from the
+ * preferred pack. Likewise, the selected copy of the base
+ * object for any deltas will reside in the same pack.
+ *
+ * This means that we can reuse pos when looking up the bit in
+ * the reuse bitmap, too, since bits corresponding to the
+ * preferred pack precede all bits from other packs.
+ */
- offset = header = pack_pos_to_offset(bitmap_git->pack, pos);
- type = unpack_object_header(bitmap_git->pack, w_curs, &offset, &size);
+ if (pos >= pack->num_objects)
+ return -1; /* not actually in the pack or MIDX preferred pack */
+
+ offset = delta_obj_offset = pack_pos_to_offset(pack, pos);
+ type = unpack_object_header(pack, w_curs, &offset, &size);
if (type < 0)
- return; /* broken packfile, punt */
+ return -1; /* broken packfile, punt */
if (type == OBJ_REF_DELTA || type == OBJ_OFS_DELTA) {
off_t base_offset;
@@ -1157,12 +1380,12 @@ static void try_partial_reuse(struct bitmap_index *bitmap_git,
* and the normal slow path will complain about it in
* more detail.
*/
- base_offset = get_delta_base(bitmap_git->pack, w_curs,
- &offset, type, header);
+ base_offset = get_delta_base(pack, w_curs, &offset, type,
+ delta_obj_offset);
if (!base_offset)
- return;
- if (offset_to_pack_pos(bitmap_git->pack, base_offset, &base_pos) < 0)
- return;
+ return 0;
+ if (offset_to_pack_pos(pack, base_offset, &base_pos) < 0)
+ return 0;
/*
* We assume delta dependencies always point backwards. This
@@ -1174,7 +1397,7 @@ static void try_partial_reuse(struct bitmap_index *bitmap_git,
* odd parameters.
*/
if (base_pos >= pos)
- return;
+ return 0;
/*
* And finally, if we're not sending the base as part of our
@@ -1185,13 +1408,22 @@ static void try_partial_reuse(struct bitmap_index *bitmap_git,
* object_entry code path handle it.
*/
if (!bitmap_get(reuse, base_pos))
- return;
+ return 0;
}
/*
* If we got here, then the object is OK to reuse. Mark it.
*/
bitmap_set(reuse, pos);
+ return 0;
+}
+
+uint32_t midx_preferred_pack(struct bitmap_index *bitmap_git)
+{
+ struct multi_pack_index *m = bitmap_git->midx;
+ if (!m)
+ BUG("midx_preferred_pack: requires non-empty MIDX");
+ return nth_midxed_pack_int_id(m, pack_pos_to_midx(bitmap_git->midx, 0));
}
int reuse_partial_packfile_from_bitmap(struct bitmap_index *bitmap_git,
@@ -1199,20 +1431,37 @@ int reuse_partial_packfile_from_bitmap(struct bitmap_index *bitmap_git,
uint32_t *entries,
struct bitmap **reuse_out)
{
+ struct packed_git *pack;
struct bitmap *result = bitmap_git->result;
struct bitmap *reuse;
struct pack_window *w_curs = NULL;
size_t i = 0;
uint32_t offset;
+ uint32_t objects_nr;
assert(result);
+ load_reverse_index(bitmap_git);
+
+ if (bitmap_is_midx(bitmap_git))
+ pack = bitmap_git->midx->packs[midx_preferred_pack(bitmap_git)];
+ else
+ pack = bitmap_git->pack;
+ objects_nr = pack->num_objects;
+
while (i < result->word_alloc && result->words[i] == (eword_t)~0)
i++;
- /* Don't mark objects not in the packfile */
- if (i > bitmap_git->pack->num_objects / BITS_IN_EWORD)
- i = bitmap_git->pack->num_objects / BITS_IN_EWORD;
+ /*
+ * Don't mark objects not in the packfile or preferred pack. This bitmap
+ * marks objects eligible for reuse, but the pack-reuse code only
+ * understands how to reuse a single pack. Since the preferred pack is
+ * guaranteed to have all bases for its deltas (in a multi-pack bitmap),
+ * we use it instead of another pack. In single-pack bitmaps, the choice
+ * is made for us.
+ */
+ if (i > objects_nr / BITS_IN_EWORD)
+ i = objects_nr / BITS_IN_EWORD;
reuse = bitmap_word_alloc(i);
memset(reuse->words, 0xFF, i * sizeof(eword_t));
@@ -1226,10 +1475,23 @@ int reuse_partial_packfile_from_bitmap(struct bitmap_index *bitmap_git,
break;
offset += ewah_bit_ctz64(word >> offset);
- try_partial_reuse(bitmap_git, pos + offset, reuse, &w_curs);
+ if (try_partial_reuse(pack, pos + offset,
+ reuse, &w_curs) < 0) {
+ /*
+ * try_partial_reuse indicated we couldn't reuse
+ * any bits, so there is no point in trying more
+ * bits in the current word, or any other words
+ * in result.
+ *
+ * Jump out of both loops to avoid future
+ * unnecessary calls to try_partial_reuse.
+ */
+ goto done;
+ }
}
}
+done:
unuse_pack(&w_curs);
*entries = bitmap_popcount(reuse);
@@ -1243,7 +1505,7 @@ int reuse_partial_packfile_from_bitmap(struct bitmap_index *bitmap_git,
* need to be handled separately.
*/
bitmap_and_not(result, reuse);
- *packfile_out = bitmap_git->pack;
+ *packfile_out = pack;
*reuse_out = reuse;
return 0;
}
@@ -1296,7 +1558,7 @@ static uint32_t count_object_type(struct bitmap_index *bitmap_git,
for (i = 0; i < eindex->count; ++i) {
if (eindex->objects[i]->type == type &&
- bitmap_get(objects, bitmap_git->pack->num_objects + i))
+ bitmap_get(objects, bitmap_num_objects(bitmap_git) + i))
count++;
}
@@ -1325,10 +1587,52 @@ void count_bitmap_commit_list(struct bitmap_index *bitmap_git,
struct bitmap_test_data {
struct bitmap_index *bitmap_git;
struct bitmap *base;
+ struct bitmap *commits;
+ struct bitmap *trees;
+ struct bitmap *blobs;
+ struct bitmap *tags;
struct progress *prg;
size_t seen;
};
+static void test_bitmap_type(struct bitmap_test_data *tdata,
+ struct object *obj, int pos)
+{
+ enum object_type bitmap_type = OBJ_NONE;
+ int bitmaps_nr = 0;
+
+ if (bitmap_get(tdata->commits, pos)) {
+ bitmap_type = OBJ_COMMIT;
+ bitmaps_nr++;
+ }
+ if (bitmap_get(tdata->trees, pos)) {
+ bitmap_type = OBJ_TREE;
+ bitmaps_nr++;
+ }
+ if (bitmap_get(tdata->blobs, pos)) {
+ bitmap_type = OBJ_BLOB;
+ bitmaps_nr++;
+ }
+ if (bitmap_get(tdata->tags, pos)) {
+ bitmap_type = OBJ_TAG;
+ bitmaps_nr++;
+ }
+
+ if (bitmap_type == OBJ_NONE)
+ die("object %s not found in type bitmaps",
+ oid_to_hex(&obj->oid));
+
+ if (bitmaps_nr > 1)
+ die("object %s does not have a unique type",
+ oid_to_hex(&obj->oid));
+
+ if (bitmap_type != obj->type)
+ die("object %s: real type %s, expected: %s",
+ oid_to_hex(&obj->oid),
+ type_name(obj->type),
+ type_name(bitmap_type));
+}
+
static void test_show_object(struct object *object, const char *name,
void *data)
{
@@ -1338,6 +1642,7 @@ static void test_show_object(struct object *object, const char *name,
bitmap_pos = bitmap_position(tdata->bitmap_git, &object->oid);
if (bitmap_pos < 0)
die("Object not in bitmap: %s\n", oid_to_hex(&object->oid));
+ test_bitmap_type(tdata, object, bitmap_pos);
bitmap_set(tdata->base, bitmap_pos);
display_progress(tdata->prg, ++tdata->seen);
@@ -1352,6 +1657,7 @@ static void test_show_commit(struct commit *commit, void *data)
&commit->object.oid);
if (bitmap_pos < 0)
die("Object not in bitmap: %s\n", oid_to_hex(&commit->object.oid));
+ test_bitmap_type(tdata, &commit->object, bitmap_pos);
bitmap_set(tdata->base, bitmap_pos);
display_progress(tdata->prg, ++tdata->seen);
@@ -1399,6 +1705,10 @@ void test_bitmap_walk(struct rev_info *revs)
tdata.bitmap_git = bitmap_git;
tdata.base = bitmap_new();
+ tdata.commits = ewah_to_bitmap(bitmap_git->commits);
+ tdata.trees = ewah_to_bitmap(bitmap_git->trees);
+ tdata.blobs = ewah_to_bitmap(bitmap_git->blobs);
+ tdata.tags = ewah_to_bitmap(bitmap_git->tags);
tdata.prg = start_progress("Verifying bitmap entries", result_popcnt);
tdata.seen = 0;
@@ -1432,6 +1742,33 @@ int test_bitmap_commits(struct repository *r)
return 0;
}
+int test_bitmap_hashes(struct repository *r)
+{
+ struct bitmap_index *bitmap_git = prepare_bitmap_git(r);
+ struct object_id oid;
+ uint32_t i, index_pos;
+
+ if (!bitmap_git->hashes)
+ goto cleanup;
+
+ for (i = 0; i < bitmap_num_objects(bitmap_git); i++) {
+ if (bitmap_is_midx(bitmap_git))
+ index_pos = pack_pos_to_midx(bitmap_git->midx, i);
+ else
+ index_pos = pack_pos_to_index(bitmap_git->pack, i);
+
+ nth_bitmap_object_oid(bitmap_git, &oid, index_pos);
+
+ printf("%s %"PRIu32"\n",
+ oid_to_hex(&oid), get_be32(bitmap_git->hashes + index_pos));
+ }
+
+cleanup:
+ free_bitmap_index(bitmap_git);
+
+ return 0;
+}
+
int rebuild_bitmap(const uint32_t *reposition,
struct ewah_bitmap *source,
struct bitmap *dest)
@@ -1469,19 +1806,32 @@ uint32_t *create_bitmap_mapping(struct bitmap_index *bitmap_git,
uint32_t i, num_objects;
uint32_t *reposition;
- num_objects = bitmap_git->pack->num_objects;
+ if (!bitmap_is_midx(bitmap_git))
+ load_reverse_index(bitmap_git);
+ else if (load_midx_revindex(bitmap_git->midx) < 0)
+ BUG("rebuild_existing_bitmaps: missing required rev-cache "
+ "extension");
+
+ num_objects = bitmap_num_objects(bitmap_git);
CALLOC_ARRAY(reposition, num_objects);
for (i = 0; i < num_objects; ++i) {
struct object_id oid;
struct object_entry *oe;
+ uint32_t index_pos;
- nth_packed_object_id(&oid, bitmap_git->pack,
- pack_pos_to_index(bitmap_git->pack, i));
+ if (bitmap_is_midx(bitmap_git))
+ index_pos = pack_pos_to_midx(bitmap_git->midx, i);
+ else
+ index_pos = pack_pos_to_index(bitmap_git->pack, i);
+ nth_bitmap_object_oid(bitmap_git, &oid, index_pos);
oe = packlist_find(mapping, &oid);
- if (oe)
+ if (oe) {
reposition[i] = oe_in_pack_pos(mapping, oe) + 1;
+ if (bitmap_git->hashes && !oe->hash)
+ oe->hash = get_be32(bitmap_git->hashes + index_pos);
+ }
}
return reposition;
@@ -1503,6 +1853,19 @@ void free_bitmap_index(struct bitmap_index *b)
free(b->ext_index.hashes);
bitmap_free(b->result);
bitmap_free(b->haves);
+ if (bitmap_is_midx(b)) {
+ /*
+ * Multi-pack bitmaps need to have resources associated with
+ * their on-disk reverse indexes unmapped so that stale .rev and
+ * .bitmap files can be removed.
+ *
+ * Unlike pack-based bitmaps, multi-pack bitmaps can be read and
+ * written in the same 'git multi-pack-index write --bitmap'
+ * process. Close resources so they can be removed safely on
+ * platforms like Windows.
+ */
+ close_midx_revindex(b->midx);
+ }
free(b);
}
@@ -1517,7 +1880,6 @@ 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;
@@ -1534,15 +1896,35 @@ static off_t get_disk_usage_for_type(struct bitmap_index *bitmap_git,
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);
+
+ if (bitmap_is_midx(bitmap_git)) {
+ uint32_t pack_pos;
+ uint32_t midx_pos = pack_pos_to_midx(bitmap_git->midx, base + offset);
+ off_t offset = nth_midxed_offset(bitmap_git->midx, midx_pos);
+
+ uint32_t pack_id = nth_midxed_pack_int_id(bitmap_git->midx, midx_pos);
+ struct packed_git *pack = bitmap_git->midx->packs[pack_id];
+
+ if (offset_to_pack_pos(pack, offset, &pack_pos) < 0) {
+ struct object_id oid;
+ nth_midxed_object_oid(&oid, bitmap_git->midx, midx_pos);
+
+ die(_("could not find %s in pack %s at offset %"PRIuMAX),
+ oid_to_hex(&oid),
+ pack->pack_name,
+ (uintmax_t)offset);
+ }
+
+ total += pack_pos_to_offset(pack, pack_pos + 1) - offset;
+ } else {
+ size_t pos = base + offset;
+ total += pack_pos_to_offset(bitmap_git->pack, pos + 1) -
+ pack_pos_to_offset(bitmap_git->pack, pos);
+ }
}
}
@@ -1552,7 +1934,6 @@ static off_t get_disk_usage_for_type(struct bitmap_index *bitmap_git,
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;
@@ -1564,7 +1945,7 @@ static off_t get_disk_usage_for_extended(struct bitmap_index *bitmap_git)
for (i = 0; i < eindex->count; i++) {
struct object *obj = eindex->objects[i];
- if (!bitmap_get(result, pack->num_objects + i))
+ if (!bitmap_get(result, bitmap_num_objects(bitmap_git) + i))
continue;
if (oid_object_info_extended(the_repository, &obj->oid, &oi, 0) < 0)
@@ -1594,7 +1975,28 @@ off_t get_disk_usage_from_bitmap(struct bitmap_index *bitmap_git,
return total;
}
+int bitmap_is_midx(struct bitmap_index *bitmap_git)
+{
+ return !!bitmap_git->midx;
+}
+
const struct string_list *bitmap_preferred_tips(struct repository *r)
{
return repo_config_get_value_multi(r, "pack.preferbitmaptips");
}
+
+int bitmap_is_preferred_refname(struct repository *r, const char *refname)
+{
+ const struct string_list *preferred_tips = bitmap_preferred_tips(r);
+ struct string_list_item *item;
+
+ if (!preferred_tips)
+ return 0;
+
+ for_each_string_list_item(item, preferred_tips) {
+ if (starts_with(refname, item->string))
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/pack-bitmap.h b/pack-bitmap.h
index 99d733e..19a63fa 100644
--- a/pack-bitmap.h
+++ b/pack-bitmap.h
@@ -44,6 +44,7 @@ typedef int (*show_reachable_fn)(
struct bitmap_index;
struct bitmap_index *prepare_bitmap_git(struct repository *r);
+struct bitmap_index *prepare_midx_bitmap_git(struct multi_pack_index *midx);
void count_bitmap_commit_list(struct bitmap_index *, uint32_t *commits,
uint32_t *trees, uint32_t *blobs, uint32_t *tags);
void traverse_bitmap_commit_list(struct bitmap_index *,
@@ -51,9 +52,11 @@ void traverse_bitmap_commit_list(struct bitmap_index *,
show_reachable_fn show_reachable);
void test_bitmap_walk(struct rev_info *revs);
int test_bitmap_commits(struct repository *r);
+int test_bitmap_hashes(struct repository *r);
struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
struct list_objects_filter_options *filter,
int filter_provided_objects);
+uint32_t midx_preferred_pack(struct bitmap_index *bitmap_git);
int reuse_partial_packfile_from_bitmap(struct bitmap_index *,
struct packed_git **packfile,
uint32_t *entries,
@@ -87,12 +90,17 @@ 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);
+int bitmap_writer_build(struct packing_data *to_pack);
void bitmap_writer_finish(struct pack_idx_entry **index,
uint32_t index_nr,
const char *filename,
uint16_t options);
+char *midx_bitmap_filename(struct multi_pack_index *midx);
+char *pack_bitmap_filename(struct packed_git *p);
+
+int bitmap_is_midx(struct bitmap_index *bitmap_git);
const struct string_list *bitmap_preferred_tips(struct repository *r);
+int bitmap_is_preferred_refname(struct repository *r, const char *refname);
#endif
diff --git a/pack-check.c b/pack-check.c
index c8e560d..3f418e3 100644
--- a/pack-check.c
+++ b/pack-check.c
@@ -142,7 +142,8 @@ static int verify_packfile(struct repository *r,
err = error("cannot unpack %s from %s at offset %"PRIuMAX"",
oid_to_hex(&oid), p->pack_name,
(uintmax_t)entries[i].offset);
- else if (check_object_signature(r, &oid, data, size, type_name(type)))
+ else if (check_object_signature(r, &oid, data, size,
+ type_name(type), NULL))
err = error("packed %s from %s is corrupt",
oid_to_hex(&oid), p->pack_name);
else if (fn) {
diff --git a/packfile.c b/packfile.c
index 9ef6d98..89402cf 100644
--- a/packfile.c
+++ b/packfile.c
@@ -339,6 +339,7 @@ void close_pack(struct packed_git *p)
close_pack_fd(p);
close_pack_index(p);
close_pack_revindex(p);
+ oidset_clear(&p->bad_objects);
}
void close_object_store(struct raw_object_store *o)
@@ -860,7 +861,7 @@ static void prepare_pack(const char *full_name, size_t full_name_len,
if (!strcmp(file_name, "multi-pack-index"))
return;
if (starts_with(file_name, "multi-pack-index") &&
- ends_with(file_name, ".rev"))
+ (ends_with(file_name, ".bitmap") || ends_with(file_name, ".rev")))
return;
if (ends_with(file_name, ".idx") ||
ends_with(file_name, ".rev") ||
@@ -1161,31 +1162,19 @@ int unpack_object_header(struct packed_git *p,
return type;
}
-void mark_bad_packed_object(struct packed_git *p, const unsigned char *sha1)
+void mark_bad_packed_object(struct packed_git *p, const struct object_id *oid)
{
- unsigned i;
- const unsigned hashsz = the_hash_algo->rawsz;
- for (i = 0; i < p->num_bad_objects; i++)
- if (hasheq(sha1, p->bad_object_sha1 + hashsz * i))
- return;
- p->bad_object_sha1 = xrealloc(p->bad_object_sha1,
- st_mult(GIT_MAX_RAWSZ,
- st_add(p->num_bad_objects, 1)));
- hashcpy(p->bad_object_sha1 + hashsz * p->num_bad_objects, sha1);
- p->num_bad_objects++;
+ oidset_insert(&p->bad_objects, oid);
}
const struct packed_git *has_packed_and_bad(struct repository *r,
- const unsigned char *sha1)
+ const struct object_id *oid)
{
struct packed_git *p;
- unsigned i;
for (p = r->objects->packed_git; p; p = p->next)
- for (i = 0; i < p->num_bad_objects; i++)
- if (hasheq(sha1,
- p->bad_object_sha1 + the_hash_algo->rawsz * i))
- return p;
+ if (oidset_contains(&p->bad_objects, oid))
+ return p;
return NULL;
}
@@ -1272,7 +1261,7 @@ static int retry_bad_packed_offset(struct repository *r,
if (offset_to_pack_pos(p, obj_offset, &pos) < 0)
return OBJ_BAD;
nth_packed_object_id(&oid, p, pack_pos_to_index(p, pos));
- mark_bad_packed_object(p, oid.hash);
+ mark_bad_packed_object(p, &oid);
type = oid_object_info(r, &oid, NULL);
if (type <= OBJ_NONE)
return OBJ_BAD;
@@ -1722,7 +1711,7 @@ void *unpack_entry(struct repository *r, struct packed_git *p, off_t obj_offset,
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);
+ mark_bad_packed_object(p, &oid);
data = NULL;
goto out;
}
@@ -1811,7 +1800,7 @@ void *unpack_entry(struct repository *r, struct packed_git *p, off_t obj_offset,
" at offset %"PRIuMAX" from %s",
oid_to_hex(&base_oid), (uintmax_t)obj_offset,
p->pack_name);
- mark_bad_packed_object(p, base_oid.hash);
+ mark_bad_packed_object(p, &base_oid);
base = read_object(r, &base_oid, &type, &base_size);
external_base = base;
}
@@ -2016,13 +2005,9 @@ static int fill_pack_entry(const struct object_id *oid,
{
off_t offset;
- if (p->num_bad_objects) {
- unsigned i;
- for (i = 0; i < p->num_bad_objects; i++)
- if (hasheq(oid->hash,
- p->bad_object_sha1 + the_hash_algo->rawsz * i))
- return 0;
- }
+ if (oidset_size(&p->bad_objects) &&
+ oidset_contains(&p->bad_objects, oid))
+ return 0;
offset = find_pack_entry_one(oid->hash, p);
if (!offset)
@@ -2205,6 +2190,12 @@ int for_each_packed_object(each_packed_object_fn cb, void *data,
if ((flags & FOR_EACH_OBJECT_PROMISOR_ONLY) &&
!p->pack_promisor)
continue;
+ if ((flags & FOR_EACH_OBJECT_SKIP_IN_CORE_KEPT_PACKS) &&
+ p->pack_keep_in_core)
+ continue;
+ if ((flags & FOR_EACH_OBJECT_SKIP_ON_DISK_KEPT_PACKS) &&
+ p->pack_keep)
+ continue;
if (open_pack_index(p)) {
pack_errors = 1;
continue;
diff --git a/packfile.h b/packfile.h
index 3ae117a..1861467 100644
--- a/packfile.h
+++ b/packfile.h
@@ -159,8 +159,8 @@ int packed_object_info(struct repository *r,
struct packed_git *pack,
off_t offset, struct object_info *);
-void mark_bad_packed_object(struct packed_git *p, const unsigned char *sha1);
-const struct packed_git *has_packed_and_bad(struct repository *r, const unsigned char *sha1);
+void mark_bad_packed_object(struct packed_git *, const struct object_id *);
+const struct packed_git *has_packed_and_bad(struct repository *, const struct object_id *);
#define ON_DISK_KEEP_PACKS 1
#define IN_CORE_KEEP_PACKS 2
diff --git a/parallel-checkout.c b/parallel-checkout.c
index ddc0ff3..ed9c999 100644
--- a/parallel-checkout.c
+++ b/parallel-checkout.c
@@ -603,8 +603,7 @@ static void gather_results_from_workers(struct pc_worker *workers,
continue;
if (pfd->revents & POLLIN) {
- int len = packet_read(pfd->fd, NULL, NULL,
- packet_buffer,
+ int len = packet_read(pfd->fd, packet_buffer,
sizeof(packet_buffer), 0);
if (len < 0) {
diff --git a/parse-options.c b/parse-options.c
index 2abff13..fc5b43f 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -8,10 +8,13 @@
static int disallow_abbreviated_options;
-#define OPT_SHORT 1
-#define OPT_UNSET 2
+enum opt_parsed {
+ OPT_LONG = 0,
+ OPT_SHORT = 1<<0,
+ OPT_UNSET = 1<<1,
+};
-int optbug(const struct option *opt, const char *reason)
+static int optbug(const struct option *opt, const char *reason)
{
if (opt->long_name) {
if (opt->short_name)
@@ -22,9 +25,26 @@ int optbug(const struct option *opt, const char *reason)
return error("BUG: switch '%c' %s", opt->short_name, reason);
}
+static const char *optname(const struct option *opt, enum opt_parsed flags)
+{
+ static struct strbuf sb = STRBUF_INIT;
+
+ strbuf_reset(&sb);
+ if (flags & OPT_SHORT)
+ strbuf_addf(&sb, "switch `%c'", opt->short_name);
+ else if (flags & OPT_UNSET)
+ strbuf_addf(&sb, "option `no-%s'", opt->long_name);
+ else if (flags == OPT_LONG)
+ strbuf_addf(&sb, "option `%s'", opt->long_name);
+ else
+ BUG("optname() got unknown flags %d", flags);
+
+ return sb.buf;
+}
+
static enum parse_opt_result get_arg(struct parse_opt_ctx_t *p,
const struct option *opt,
- int flags, const char **arg)
+ enum opt_parsed flags, const char **arg)
{
if (p->opt) {
*arg = p->opt;
@@ -50,7 +70,7 @@ static void fix_filename(const char *prefix, const char **file)
static enum parse_opt_result opt_command_mode_error(
const struct option *opt,
const struct option *all_opts,
- int flags)
+ enum opt_parsed flags)
{
const struct option *that;
struct strbuf that_name = STRBUF_INIT;
@@ -82,7 +102,7 @@ static enum parse_opt_result opt_command_mode_error(
static enum parse_opt_result get_value(struct parse_opt_ctx_t *p,
const struct option *opt,
const struct option *all_opts,
- int flags)
+ enum opt_parsed flags)
{
const char *s, *arg;
const int unset = flags & OPT_UNSET;
@@ -298,11 +318,11 @@ static enum parse_opt_result parse_long_opt(
const struct option *all_opts = options;
const char *arg_end = strchrnul(arg, '=');
const struct option *abbrev_option = NULL, *ambiguous_option = NULL;
- int abbrev_flags = 0, ambiguous_flags = 0;
+ enum opt_parsed abbrev_flags = OPT_LONG, ambiguous_flags = OPT_LONG;
for (; options->type != OPTION_END; options++) {
const char *rest, *long_name = options->long_name;
- int flags = 0, opt_flags = 0;
+ enum opt_parsed flags = OPT_LONG, opt_flags = OPT_LONG;
if (!long_name)
continue;
@@ -310,19 +330,6 @@ static enum parse_opt_result parse_long_opt(
again:
if (!skip_prefix(arg, long_name, &rest))
rest = NULL;
- if (options->type == OPTION_ARGUMENT) {
- if (!rest)
- continue;
- if (*rest == '=')
- return error(_("%s takes no value"),
- optname(options, flags));
- if (*rest)
- continue;
- if (options->value)
- *(int *)options->value = options->defval;
- p->out[p->cpidx++] = arg - 2;
- return PARSE_OPT_DONE;
- }
if (!rest) {
/* abbreviated? */
if (!(p->flags & PARSE_OPT_KEEP_UNKNOWN) &&
@@ -494,7 +501,8 @@ static void parse_options_check(const struct option *opts)
static void parse_options_start_1(struct parse_opt_ctx_t *ctx,
int argc, const char **argv, const char *prefix,
- const struct option *options, int flags)
+ const struct option *options,
+ enum parse_opt_flags flags)
{
ctx->argc = argc;
ctx->argv = argv;
@@ -519,7 +527,8 @@ static void parse_options_start_1(struct parse_opt_ctx_t *ctx,
void parse_options_start(struct parse_opt_ctx_t *ctx,
int argc, const char **argv, const char *prefix,
- const struct option *options, int flags)
+ const struct option *options,
+ enum parse_opt_flags flags)
{
memset(ctx, 0, sizeof(*ctx));
parse_options_start_1(ctx, argc, argv, prefix, options, flags);
@@ -710,13 +719,14 @@ static void free_preprocessed_options(struct option *options)
free(options);
}
-static int usage_with_options_internal(struct parse_opt_ctx_t *,
- const char * const *,
- const struct option *, int, int);
+static enum parse_opt_result usage_with_options_internal(struct parse_opt_ctx_t *,
+ const char * const *,
+ const struct option *,
+ int, int);
-int parse_options_step(struct parse_opt_ctx_t *ctx,
- const struct option *options,
- const char * const usagestr[])
+enum parse_opt_result parse_options_step(struct parse_opt_ctx_t *ctx,
+ const struct option *options,
+ const char * const usagestr[])
{
int internal_help = !(ctx->flags & PARSE_OPT_NO_INTERNAL_HELP);
@@ -850,9 +860,11 @@ int parse_options_end(struct parse_opt_ctx_t *ctx)
return ctx->cpidx + ctx->argc;
}
-int parse_options(int argc, const char **argv, const char *prefix,
- const struct option *options, const char * const usagestr[],
- int flags)
+int parse_options(int argc, const char **argv,
+ const char *prefix,
+ const struct option *options,
+ const char * const usagestr[],
+ enum parse_opt_flags flags)
{
struct parse_opt_ctx_t ctx;
struct option *real_options;
@@ -874,7 +886,7 @@ int parse_options(int argc, const char **argv, const char *prefix,
case PARSE_OPT_NON_OPTION:
case PARSE_OPT_DONE:
break;
- default: /* PARSE_OPT_UNKNOWN */
+ case PARSE_OPT_UNKNOWN:
if (ctx.argv[0][1] == '-') {
error(_("unknown option `%s'"), ctx.argv[0] + 2);
} else if (isascii(*ctx.opt)) {
@@ -910,32 +922,85 @@ static int usage_argh(const struct option *opts, FILE *outfile)
#define USAGE_OPTS_WIDTH 24
#define USAGE_GAP 2
-static int usage_with_options_internal(struct parse_opt_ctx_t *ctx,
- const char * const *usagestr,
- const struct option *opts, int full, int err)
+static enum parse_opt_result usage_with_options_internal(struct parse_opt_ctx_t *ctx,
+ const char * const *usagestr,
+ const struct option *opts,
+ int full, int err)
{
FILE *outfile = err ? stderr : stdout;
int need_newline;
+ const char *usage_prefix = _("usage: %s");
+ /*
+ * The translation could be anything, but we can count on
+ * msgfmt(1)'s --check option to have asserted that "%s" is in
+ * the translation. So compute the length of the "usage: "
+ * part. We are assuming that the translator wasn't overly
+ * clever and used e.g. "%1$s" instead of "%s", there's only
+ * one "%s" in "usage_prefix" above, so there's no reason to
+ * do so even with a RTL language.
+ */
+ size_t usage_len = strlen(usage_prefix) - strlen("%s");
+ /*
+ * TRANSLATORS: the colon here should align with the
+ * one in "usage: %s" translation.
+ */
+ const char *or_prefix = _(" or: %s");
+ /*
+ * TRANSLATORS: You should only need to translate this format
+ * string if your language is a RTL language (e.g. Arabic,
+ * Hebrew etc.), not if it's a LTR language (e.g. German,
+ * Russian, Chinese etc.).
+ *
+ * When a translated usage string has an embedded "\n" it's
+ * because options have wrapped to the next line. The line
+ * after the "\n" will then be padded to align with the
+ * command name, such as N_("git cmd [opt]\n<8
+ * spaces>[opt2]"), where the 8 spaces are the same length as
+ * "git cmd ".
+ *
+ * This format string prints out that already-translated
+ * line. The "%*s" is whitespace padding to account for the
+ * padding at the start of the line that we add in this
+ * function. The "%s" is a line in the (hopefully already
+ * translated) N_() usage string, which contained embedded
+ * newlines before we split it up.
+ */
+ const char *usage_continued = _("%*s%s");
+ const char *prefix = usage_prefix;
+ int saw_empty_line = 0;
+
if (!usagestr)
return PARSE_OPT_HELP;
if (!err && ctx && ctx->flags & PARSE_OPT_SHELL_EVAL)
fprintf(outfile, "cat <<\\EOF\n");
- fprintf_ln(outfile, _("usage: %s"), _(*usagestr++));
- while (*usagestr && **usagestr)
- /*
- * TRANSLATORS: the colon here should align with the
- * one in "usage: %s" translation.
- */
- fprintf_ln(outfile, _(" or: %s"), _(*usagestr++));
while (*usagestr) {
- if (**usagestr)
- fprintf_ln(outfile, _(" %s"), _(*usagestr));
- else
- fputc('\n', outfile);
- usagestr++;
+ const char *str = _(*usagestr++);
+ struct string_list list = STRING_LIST_INIT_DUP;
+ unsigned int j;
+
+ if (!saw_empty_line && !*str)
+ saw_empty_line = 1;
+
+ string_list_split(&list, str, '\n', -1);
+ for (j = 0; j < list.nr; j++) {
+ const char *line = list.items[j].string;
+
+ if (saw_empty_line && *line)
+ fprintf_ln(outfile, _(" %s"), line);
+ else if (saw_empty_line)
+ fputc('\n', outfile);
+ else if (!j)
+ fprintf_ln(outfile, prefix, line);
+ else
+ fprintf_ln(outfile, usage_continued,
+ (int)usage_len, "", line);
+ }
+ string_list_clear(&list, 0);
+
+ prefix = or_prefix;
}
need_newline = 1;
@@ -1013,18 +1078,3 @@ void NORETURN usage_msg_opt(const char *msg,
fprintf(stderr, "fatal: %s\n\n", msg);
usage_with_options(usagestr, options);
}
-
-const char *optname(const struct option *opt, int flags)
-{
- static struct strbuf sb = STRBUF_INIT;
-
- strbuf_reset(&sb);
- if (flags & OPT_SHORT)
- strbuf_addf(&sb, "switch `%c'", opt->short_name);
- else if (flags & OPT_UNSET)
- strbuf_addf(&sb, "option `no-%s'", opt->long_name);
- else
- strbuf_addf(&sb, "option `%s'", opt->long_name);
-
- return sb.buf;
-}
diff --git a/parse-options.h b/parse-options.h
index a845a9d..275fb44 100644
--- a/parse-options.h
+++ b/parse-options.h
@@ -8,7 +8,6 @@
enum parse_opt_type {
/* special types */
OPTION_END,
- OPTION_ARGUMENT,
OPTION_GROUP,
OPTION_NUMBER,
OPTION_ALIAS,
@@ -34,6 +33,7 @@ enum parse_opt_flags {
PARSE_OPT_KEEP_UNKNOWN = 1 << 3,
PARSE_OPT_NO_INTERNAL_HELP = 1 << 4,
PARSE_OPT_ONE_SHOT = 1 << 5,
+ PARSE_OPT_SHELL_EVAL = 1 << 6,
};
enum parse_opt_option_flags {
@@ -45,7 +45,6 @@ enum parse_opt_option_flags {
PARSE_OPT_NODASH = 1 << 5,
PARSE_OPT_LITERAL_ARGHELP = 1 << 6,
PARSE_OPT_FROM_ALIAS = 1 << 7,
- PARSE_OPT_SHELL_EVAL = 1 << 8,
PARSE_OPT_NOCOMPLETE = 1 << 9,
PARSE_OPT_COMP_ARG = 1 << 10,
PARSE_OPT_CMDMODE = 1 << 11,
@@ -135,7 +134,7 @@ struct option {
const char *argh;
const char *help;
- int flags;
+ enum parse_opt_option_flags flags;
parse_opt_cb *callback;
intptr_t defval;
parse_opt_ll_cb *ll_callback;
@@ -155,8 +154,6 @@ struct option {
#define OPT_INTEGER_F(s, l, v, h, f) { OPTION_INTEGER, (s), (l), (v), N_("n"), (h), (f) }
#define OPT_END() { OPTION_END }
-#define OPT_ARGUMENT(l, v, h) { OPTION_ARGUMENT, 0, (l), (v), NULL, \
- (h), PARSE_OPT_NOARG, NULL, 1 }
#define OPT_GROUP(h) { OPTION_GROUP, 0, NULL, NULL, NULL, (h) }
#define OPT_BIT(s, l, v, h, b) OPT_BIT_F(s, l, v, h, b, 0)
#define OPT_BITOP(s, l, v, h, set, clear) { OPTION_BITOP, (s), (l), (v), NULL, (h), \
@@ -169,8 +166,10 @@ struct option {
#define OPT_BOOL(s, l, v, h) OPT_BOOL_F(s, l, v, h, 0)
#define OPT_HIDDEN_BOOL(s, l, v, h) { OPTION_SET_INT, (s), (l), (v), NULL, \
(h), PARSE_OPT_NOARG | PARSE_OPT_HIDDEN, NULL, 1}
-#define OPT_CMDMODE(s, l, v, h, i) { OPTION_SET_INT, (s), (l), (v), NULL, \
- (h), PARSE_OPT_CMDMODE|PARSE_OPT_NOARG|PARSE_OPT_NONEG, NULL, (i) }
+#define OPT_CMDMODE_F(s, l, v, h, i, f) { OPTION_SET_INT, (s), (l), (v), NULL, \
+ (h), PARSE_OPT_CMDMODE|PARSE_OPT_NOARG|PARSE_OPT_NONEG | (f), NULL, (i) }
+#define OPT_CMDMODE(s, l, v, h, i) OPT_CMDMODE_F(s, l, v, h, i, 0)
+
#define OPT_INTEGER(s, l, v, h) OPT_INTEGER_F(s, l, v, h, 0)
#define OPT_MAGNITUDE(s, l, v, h) { OPTION_MAGNITUDE, (s), (l), (v), \
N_("n"), (h), PARSE_OPT_NONEG }
@@ -216,7 +215,8 @@ struct option {
*/
int parse_options(int argc, const char **argv, const char *prefix,
const struct option *options,
- const char * const usagestr[], int flags);
+ const char * const usagestr[],
+ enum parse_opt_flags flags);
NORETURN void usage_with_options(const char * const *usagestr,
const struct option *options);
@@ -225,9 +225,6 @@ NORETURN void usage_msg_opt(const char *msg,
const char * const *usagestr,
const struct option *options);
-int optbug(const struct option *opt, const char *reason);
-const char *optname(const struct option *opt, int flags);
-
/*
* Use these assertions for callbacks that expect to be called with NONEG and
* NOARG respectively, and do not otherwise handle the "unset" and "arg"
@@ -265,7 +262,7 @@ struct parse_opt_ctx_t {
const char **out;
int argc, cpidx, total;
const char *opt;
- int flags;
+ enum parse_opt_flags flags;
const char *prefix;
const char **alias_groups; /* must be in groups of 3 elements! */
struct option *updated_options;
@@ -273,11 +270,12 @@ struct parse_opt_ctx_t {
void parse_options_start(struct parse_opt_ctx_t *ctx,
int argc, const char **argv, const char *prefix,
- const struct option *options, int flags);
+ const struct option *options,
+ enum parse_opt_flags flags);
-int parse_options_step(struct parse_opt_ctx_t *ctx,
- const struct option *options,
- const char * const usagestr[]);
+enum parse_opt_result parse_options_step(struct parse_opt_ctx_t *ctx,
+ const struct option *options,
+ const char * const usagestr[]);
int parse_options_end(struct parse_opt_ctx_t *ctx);
diff --git a/path.c b/path.c
index 94ef673..d73146b 100644
--- a/path.c
+++ b/path.c
@@ -12,6 +12,7 @@
#include "packfile.h"
#include "object-store.h"
#include "lockfile.h"
+#include "exec-cmd.h"
static int get_st_mode_bits(const char *path, int *mode)
{
@@ -719,19 +720,25 @@ static struct passwd *getpw_str(const char *username, size_t len)
}
/*
- * Return a string with ~ and ~user expanded via getpw*. If buf != NULL,
- * then it is a newly allocated string. Returns NULL on getpw failure or
- * if path is NULL.
+ * Return a string with ~ and ~user expanded via getpw*. Returns NULL on getpw
+ * failure or if path is NULL.
*
- * If real_home is true, strbuf_realpath($HOME) is used in the expansion.
+ * If real_home is true, strbuf_realpath($HOME) is used in the `~/` expansion.
+ *
+ * If the path starts with `%(prefix)/`, the remainder is interpreted as
+ * relative to where Git is installed, and expanded to the absolute path.
*/
-char *expand_user_path(const char *path, int real_home)
+char *interpolate_path(const char *path, int real_home)
{
struct strbuf user_path = STRBUF_INIT;
const char *to_copy = path;
if (path == NULL)
goto return_null;
+
+ if (skip_prefix(path, "%(prefix)/", &path))
+ return system_path(path);
+
if (path[0] == '~') {
const char *first_slash = strchrnul(path, '/');
const char *username = path + 1;
@@ -812,7 +819,7 @@ const char *enter_repo(const char *path, int strict)
strbuf_add(&validated_path, path, len);
if (used_path.buf[0] == '~') {
- char *newpath = expand_user_path(used_path.buf, 0);
+ char *newpath = interpolate_path(used_path.buf, 0);
if (!newpath)
return NULL;
strbuf_attach(&used_path, newpath, strlen(newpath),
@@ -1507,21 +1514,28 @@ int looks_like_command_line_option(const char *str)
return str && str[0] == '-';
}
-char *xdg_config_home(const char *filename)
+char *xdg_config_home_for(const char *subdir, const char *filename)
{
const char *home, *config_home;
+ assert(subdir);
assert(filename);
config_home = getenv("XDG_CONFIG_HOME");
if (config_home && *config_home)
- return mkpathdup("%s/git/%s", config_home, filename);
+ return mkpathdup("%s/%s/%s", config_home, subdir, filename);
home = getenv("HOME");
if (home)
- return mkpathdup("%s/.config/git/%s", home, filename);
+ return mkpathdup("%s/.config/%s/%s", home, subdir, filename);
+
return NULL;
}
+char *xdg_config_home(const char *filename)
+{
+ return xdg_config_home_for("git", filename);
+}
+
char *xdg_cache_home(const char *filename)
{
const char *home, *cache_home;
diff --git a/path.h b/path.h
index 251c78d..b68691a 100644
--- a/path.h
+++ b/path.h
@@ -181,10 +181,7 @@ struct path_cache {
const char *shallow;
};
-#define PATH_CACHE_INIT \
- { \
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL \
- }
+#define PATH_CACHE_INIT { 0 }
const char *git_path_squash_msg(struct repository *r);
const char *git_path_merge_msg(struct repository *r);
diff --git a/pathspec.c b/pathspec.c
index 08f8d3e..ddeeba7 100644
--- a/pathspec.c
+++ b/pathspec.c
@@ -37,11 +37,10 @@ void add_pathspec_matches_against_index(const struct pathspec *pathspec,
num_unmatched++;
if (!num_unmatched)
return;
- /* TODO: audit for interaction with sparse-index. */
- ensure_full_index(istate);
for (i = 0; i < istate->cache_nr; i++) {
const struct cache_entry *ce = istate->cache[i];
- if (sw_action == PS_IGNORE_SKIP_WORKTREE && ce_skip_worktree(ce))
+ if (sw_action == PS_IGNORE_SKIP_WORKTREE &&
+ (ce_skip_worktree(ce) || !path_in_sparse_checkout(ce->name, istate)))
continue;
ce_path_match(istate, ce, pathspec, seen);
}
@@ -72,7 +71,7 @@ char *find_pathspecs_matching_skip_worktree(const struct pathspec *pathspec)
for (i = 0; i < istate->cache_nr; i++) {
struct cache_entry *ce = istate->cache[i];
- if (ce_skip_worktree(ce))
+ if (ce_skip_worktree(ce) || !path_in_sparse_checkout(ce->name, istate))
ce_path_match(istate, ce, pathspec, seen);
}
diff --git a/pkt-line.c b/pkt-line.c
index 9f63eae..2dc8ac2 100644
--- a/pkt-line.c
+++ b/pkt-line.c
@@ -243,6 +243,43 @@ void packet_write(int fd_out, const char *buf, size_t size)
die("%s", err.buf);
}
+void packet_fwrite(FILE *f, const char *buf, size_t size)
+{
+ size_t packet_size;
+ char header[4];
+
+ if (size > LARGE_PACKET_DATA_MAX)
+ die(_("packet write failed - data exceeds max packet size"));
+
+ packet_trace(buf, size, 1);
+ packet_size = size + 4;
+
+ set_packet_header(header, packet_size);
+ fwrite_or_die(f, header, 4);
+ fwrite_or_die(f, buf, size);
+}
+
+void packet_fwrite_fmt(FILE *fh, const char *fmt, ...)
+{
+ static struct strbuf buf = STRBUF_INIT;
+ va_list args;
+
+ strbuf_reset(&buf);
+
+ va_start(args, fmt);
+ format_packet(&buf, "", fmt, args);
+ va_end(args);
+
+ fwrite_or_die(fh, buf.buf, buf.len);
+}
+
+void packet_fflush(FILE *f)
+{
+ packet_trace("0000", 4, 1);
+ fwrite_or_die(f, "0000", 4);
+ fflush_or_die(f);
+}
+
void packet_buf_write(struct strbuf *buf, const char *fmt, ...)
{
va_list args;
@@ -252,22 +289,6 @@ void packet_buf_write(struct strbuf *buf, const char *fmt, ...)
va_end(args);
}
-void packet_buf_write_len(struct strbuf *buf, const char *data, size_t len)
-{
- size_t orig_len, n;
-
- orig_len = buf->len;
- strbuf_addstr(buf, "0000");
- strbuf_add(buf, data, len);
- n = buf->len - orig_len;
-
- if (n > LARGE_PACKET_MAX)
- die(_("protocol error: impossibly long line"));
-
- set_packet_header(&buf->buf[orig_len], n);
- packet_trace(data, len, 1);
-}
-
int write_packetized_from_fd_no_flush(int fd_in, int fd_out)
{
char *buf = xmalloc(LARGE_PACKET_DATA_MAX);
@@ -416,38 +437,28 @@ enum packet_read_status packet_read_with_status(int fd, char **src_buffer,
return PACKET_READ_NORMAL;
}
-int packet_read(int fd, char **src_buffer, size_t *src_len,
- char *buffer, unsigned size, int options)
+int packet_read(int fd, char *buffer, unsigned size, int options)
{
int pktlen = -1;
- packet_read_with_status(fd, src_buffer, src_len, buffer, size,
- &pktlen, options);
+ packet_read_with_status(fd, NULL, NULL, buffer, size, &pktlen,
+ options);
return pktlen;
}
-static char *packet_read_line_generic(int fd,
- char **src, size_t *src_len,
- int *dst_len)
+char *packet_read_line(int fd, int *dst_len)
{
- int len = packet_read(fd, src, src_len,
- packet_buffer, sizeof(packet_buffer),
+ int len = packet_read(fd, packet_buffer, sizeof(packet_buffer),
PACKET_READ_CHOMP_NEWLINE);
if (dst_len)
*dst_len = len;
return (len > 0) ? packet_buffer : NULL;
}
-char *packet_read_line(int fd, int *len_p)
-{
- return packet_read_line_generic(fd, NULL, NULL, len_p);
-}
-
int packet_read_line_gently(int fd, int *dst_len, char **dst_line)
{
- int len = packet_read(fd, NULL, NULL,
- packet_buffer, sizeof(packet_buffer),
+ int len = packet_read(fd, packet_buffer, sizeof(packet_buffer),
PACKET_READ_CHOMP_NEWLINE|PACKET_READ_GENTLE_ON_EOF);
if (dst_len)
*dst_len = len;
@@ -456,11 +467,6 @@ int packet_read_line_gently(int fd, int *dst_len, char **dst_line)
return len;
}
-char *packet_read_line_buf(char **src, size_t *src_len, int *dst_len)
-{
- return packet_read_line_generic(-1, src, src_len, dst_len);
-}
-
ssize_t read_packetized_to_strbuf(int fd_in, struct strbuf *sb_out, int options)
{
int packet_len;
@@ -470,7 +476,7 @@ ssize_t read_packetized_to_strbuf(int fd_in, struct strbuf *sb_out, int options)
for (;;) {
strbuf_grow(sb_out, LARGE_PACKET_DATA_MAX);
- packet_len = packet_read(fd_in, NULL, NULL,
+ packet_len = packet_read(fd_in,
/* strbuf_grow() above always allocates one extra byte to
* store a '\0' at the end of the string. packet_read()
* writes a '\0' extra byte at the end, too. Let it know
diff --git a/pkt-line.h b/pkt-line.h
index 5af5f45..467ae01 100644
--- a/pkt-line.h
+++ b/pkt-line.h
@@ -29,13 +29,23 @@ void packet_buf_delim(struct strbuf *buf);
void set_packet_header(char *buf, int size);
void packet_write(int fd_out, const char *buf, size_t size);
void packet_buf_write(struct strbuf *buf, const char *fmt, ...) __attribute__((format (printf, 2, 3)));
-void packet_buf_write_len(struct strbuf *buf, const char *data, size_t len);
int packet_flush_gently(int fd);
int packet_write_fmt_gently(int fd, const char *fmt, ...) __attribute__((format (printf, 2, 3)));
int write_packetized_from_fd_no_flush(int fd_in, int fd_out);
int write_packetized_from_buf_no_flush(const char *src_in, size_t len, int fd_out);
/*
+ * Stdio versions of packet_write functions. When mixing these with fd
+ * based functions, take care to call fflush(3) before doing fd writes or
+ * closing the fd.
+ */
+void packet_fwrite(FILE *f, const char *buf, size_t size);
+void packet_fwrite_fmt(FILE *f, const char *fmt, ...) __attribute__((format (printf, 2, 3)));
+
+/* packet_fflush writes a flush packet and flushes the stdio buffer of f */
+void packet_fflush(FILE *f);
+
+/*
* Read a packetized line into the buffer, which must be at least size bytes
* long. The return value specifies the number of bytes read into the buffer.
*
@@ -77,8 +87,7 @@ int write_packetized_from_buf_no_flush(const char *src_in, size_t len, int fd_ou
#define PACKET_READ_CHOMP_NEWLINE (1u<<1)
#define PACKET_READ_DIE_ON_ERR_PACKET (1u<<2)
#define PACKET_READ_GENTLE_ON_READ_ERROR (1u<<3)
-int packet_read(int fd, char **src_buffer, size_t *src_len, char
- *buffer, unsigned size, int options);
+int packet_read(int fd, char *buffer, unsigned size, int options);
/*
* Convert a four hex digit packet line length header into its numeric
@@ -128,12 +137,6 @@ char *packet_read_line(int fd, int *size);
int packet_read_line_gently(int fd, int *size, char **dst_line);
/*
- * Same as packet_read_line, but read from a buf rather than a descriptor;
- * see packet_read for details on how src_* is used.
- */
-char *packet_read_line_buf(char **src_buf, size_t *src_len, int *size);
-
-/*
* Reads a stream of variable sized packets until a flush packet is detected.
*/
ssize_t read_packetized_to_strbuf(int fd_in, struct strbuf *sb_out, int options);
diff --git a/po/TEAMS b/po/TEAMS
index 66ad06b..3dd51fc 100644
--- a/po/TEAMS
+++ b/po/TEAMS
@@ -52,7 +52,7 @@
Language: pt_PT (Portuguese - Portugal)
Repository: https://github.com/git-l10n-pt-PT/git-po/
-Leader: Daniel Santos <hello@brighterdan.com>
+Leader: Daniel Santos <daniel@brilhante.top>
Language: ru (Russian)
Repository: https://github.com/DJm00n/git-po-ru/
diff --git a/po/bg.po b/po/bg.po
index 905eb8e..51d7c72 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -62,6 +62,7 @@
# fallback резервен вариант
# pathspec magic опция за магически пътища
# bitmap index индекс на база битови маски
+# multi-pack bitmap многопакетната битова маска
# mark маркер
# plumbing команди от системно ниво
# porcelain команди от потребителско ниво
@@ -143,9 +144,10 @@
# blame извеждане на авторство
# refname име на указател
# cone pattern matching пътеводно напасване
+# sparse-checkout cone пътеводен сегмент на частичното изтегляне
# negative pattern отрицателен шаблон
# colored hunk/diff оцветено парче/разлика
-# up to date обновен, освен като самостотелва дума - актуален или completely up to date - напълно актуален
+# up to date обновен, освен като самостоятелна дума - актуален или completely up to date - напълно актуален
# stateless без запазване на състоянието
# end packet пакет за край
# identity самоличност, информация за
@@ -157,8 +159,10 @@
# expired остарял
# reroll-count номер на редакция
# Nth re-roll N-та поредна редакция
-# fetch доставам
+# fetch доставям
# prefetch предварително доставяне
+# scheduler планиращ модул
+# snapshot снимка
# ------------------------
# „$var“ - може да не сработва за shell има gettext и eval_gettext - проверка - намират се лесно по „$
# ------------------------
@@ -175,10 +179,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.31\n"
+"Project-Id-Version: git 2.34\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2021-08-03 17:06+0800\n"
-"PO-Revision-Date: 2021-08-06 13:38+0300\n"
+"POT-Creation-Date: 2021-11-10 08:55+0800\n"
+"PO-Revision-Date: 2021-11-12 19:22+0100\n"
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
"Language: bg\n"
@@ -187,213 +191,214 @@
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: add-interactive.c:376
+#: add-interactive.c:380
#, c-format
msgid "Huh (%s)?"
msgstr "Неуспешен анализ — „%s“."
-#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3493
-#: sequencer.c:3964 sequencer.c:4119 builtin/rebase.c:1528
-#: builtin/rebase.c:1953
+#: add-interactive.c:533 add-interactive.c:834 reset.c:65 sequencer.c:3512
+#: sequencer.c:3979 sequencer.c:4141 builtin/rebase.c:1233
+#: builtin/rebase.c:1642
msgid "could not read index"
msgstr "индексът не може да бъде прочетен"
-#: add-interactive.c:584 git-add--interactive.perl:269
+#: add-interactive.c:588 git-add--interactive.perl:269
#: git-add--interactive.perl:294
msgid "binary"
msgstr "двоично"
-#: add-interactive.c:642 git-add--interactive.perl:278
+#: add-interactive.c:646 git-add--interactive.perl:278
#: git-add--interactive.perl:332
msgid "nothing"
msgstr "нищо"
-#: add-interactive.c:643 git-add--interactive.perl:314
+#: add-interactive.c:647 git-add--interactive.perl:314
#: git-add--interactive.perl:329
msgid "unchanged"
msgstr "няма промени"
-#: add-interactive.c:680 git-add--interactive.perl:641
+#: add-interactive.c:684 git-add--interactive.perl:641
msgid "Update"
msgstr "Обновяване"
-#: add-interactive.c:697 add-interactive.c:885
+#: add-interactive.c:701 add-interactive.c:889
#, c-format
msgid "could not stage '%s'"
msgstr "неуспешно добавяне в индекса на „%s“"
-#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3707
+#: add-interactive.c:707 add-interactive.c:896 reset.c:89 sequencer.c:3718
msgid "could not write index"
msgstr "индексът не може да бъде записан"
-#: add-interactive.c:706 git-add--interactive.perl:626
+#: add-interactive.c:710 git-add--interactive.perl:626
#, c-format, perl-format
msgid "updated %d path\n"
msgid_plural "updated %d paths\n"
msgstr[0] "%d файл обновен\n"
msgstr[1] "%d файла обновени\n"
-#: add-interactive.c:724 git-add--interactive.perl:676
+#: add-interactive.c:728 git-add--interactive.perl:676
#, c-format, perl-format
msgid "note: %s is untracked now.\n"
msgstr "БЕЛЕЖКА: „%s“ вече не се следи.\n"
-#: add-interactive.c:729 apply.c:4127 builtin/checkout.c:298
-#: builtin/reset.c:145
+#: add-interactive.c:733 apply.c:4149 builtin/checkout.c:298
+#: builtin/reset.c:151
#, c-format
msgid "make_cache_entry failed for path '%s'"
msgstr "неуспешно създаване на запис в кеша чрез „make_cache_entry“ за „%s“"
-#: add-interactive.c:759 git-add--interactive.perl:653
+#: add-interactive.c:763 git-add--interactive.perl:653
msgid "Revert"
msgstr "Отмяна"
-#: add-interactive.c:775
+#: add-interactive.c:779
msgid "Could not parse HEAD^{tree}"
msgstr "Указателят „HEAD^{tree}“ не може да бъде анализиран"
-#: add-interactive.c:813 git-add--interactive.perl:629
+#: add-interactive.c:817 git-add--interactive.perl:629
#, c-format, perl-format
msgid "reverted %d path\n"
msgid_plural "reverted %d paths\n"
msgstr[0] "%d файл с отменени промени\n"
msgstr[1] "%d файла с отменени промени\n"
-#: add-interactive.c:864 git-add--interactive.perl:693
+#: add-interactive.c:868 git-add--interactive.perl:693
#, c-format
msgid "No untracked files.\n"
msgstr "Няма неследени файлове.\n"
-#: add-interactive.c:868 git-add--interactive.perl:687
+#: add-interactive.c:872 git-add--interactive.perl:687
msgid "Add untracked"
msgstr "Добавяне на неследени"
-#: add-interactive.c:895 git-add--interactive.perl:623
+#: add-interactive.c:899 git-add--interactive.perl:623
#, c-format, perl-format
msgid "added %d path\n"
msgid_plural "added %d paths\n"
msgstr[0] "%d файл добавен\n"
msgstr[1] "%d файла добавени\n"
-#: add-interactive.c:925
+#: add-interactive.c:929
#, c-format
msgid "ignoring unmerged: %s"
msgstr "пренебрегване на неслятото: „%s“"
-#: add-interactive.c:937 add-patch.c:1752 git-add--interactive.perl:1369
+#: add-interactive.c:941 add-patch.c:1752 git-add--interactive.perl:1369
#, c-format
msgid "Only binary files changed.\n"
msgstr "Само двоични файлове са променени.\n"
-#: add-interactive.c:939 add-patch.c:1750 git-add--interactive.perl:1371
+#: add-interactive.c:943 add-patch.c:1750 git-add--interactive.perl:1371
#, c-format
msgid "No changes.\n"
msgstr "Няма промени.\n"
-#: add-interactive.c:943 git-add--interactive.perl:1379
+#: add-interactive.c:947 git-add--interactive.perl:1379
msgid "Patch update"
msgstr "Обновяване на кръпка"
-#: add-interactive.c:982 git-add--interactive.perl:1792
+#: add-interactive.c:986 git-add--interactive.perl:1792
msgid "Review diff"
msgstr "Преглед на разликата"
-#: add-interactive.c:1010
+#: add-interactive.c:1014
msgid "show paths with changes"
msgstr "извеждане на пътищата с промени"
-#: add-interactive.c:1012
+#: add-interactive.c:1016
msgid "add working tree state to the staged set of changes"
msgstr "добавяне на състоянието на работното дърво към промените в индекса"
-#: add-interactive.c:1014
+#: add-interactive.c:1018
msgid "revert staged set of changes back to the HEAD version"
msgstr "връщане на състоянието на индекса към соченото от „HEAD“"
-#: add-interactive.c:1016
+#: add-interactive.c:1020
msgid "pick hunks and update selectively"
msgstr "интерактивни избор и промяна на парчета код"
-#: add-interactive.c:1018
+#: add-interactive.c:1022
msgid "view diff between HEAD and index"
msgstr "разлика между соченото от „HEAD“ и индекса"
-#: add-interactive.c:1020
+#: add-interactive.c:1024
msgid "add contents of untracked files to the staged set of changes"
msgstr "добавяне на съдържанието на неследените файлове към индекса"
-#: add-interactive.c:1028 add-interactive.c:1077
+#: add-interactive.c:1032 add-interactive.c:1081
msgid "Prompt help:"
msgstr "Помощ:"
-#: add-interactive.c:1030
+#: add-interactive.c:1034
msgid "select a single item"
msgstr "избор на eдин елемент"
-#: add-interactive.c:1032
+#: add-interactive.c:1036
msgid "select a range of items"
msgstr "избор на поредица от елементи"
-#: add-interactive.c:1034
+#: add-interactive.c:1038
msgid "select multiple ranges"
msgstr "избор на няколко поредици от елементи"
-#: add-interactive.c:1036 add-interactive.c:1081
+#: add-interactive.c:1040 add-interactive.c:1085
msgid "select item based on unique prefix"
msgstr "избор на базата на уникален префикс"
-#: add-interactive.c:1038
+#: add-interactive.c:1042
msgid "unselect specified items"
msgstr "изваждане на указаното от избора"
-#: add-interactive.c:1040
+#: add-interactive.c:1044
msgid "choose all items"
msgstr "избор на всички елементи"
-#: add-interactive.c:1042
+#: add-interactive.c:1046
msgid "(empty) finish selecting"
msgstr "(празно) приключване на избирането"
-#: add-interactive.c:1079
+#: add-interactive.c:1083
msgid "select a numbered item"
msgstr "избор на номериран елемент"
-#: add-interactive.c:1083
+#: add-interactive.c:1087
msgid "(empty) select nothing"
msgstr "(празно) без избор на нищо"
-#: add-interactive.c:1091 builtin/clean.c:813 git-add--interactive.perl:1896
+#: add-interactive.c:1095 builtin/clean.c:813 git-add--interactive.perl:1896
msgid "*** Commands ***"
msgstr "●●● Команди ●●●"
-#: add-interactive.c:1092 builtin/clean.c:814 git-add--interactive.perl:1893
+#: add-interactive.c:1096 builtin/clean.c:814 git-add--interactive.perl:1893
msgid "What now"
msgstr "Избор на следващо действие"
-#: add-interactive.c:1144 git-add--interactive.perl:213
+#: add-interactive.c:1148 git-add--interactive.perl:213
msgid "staged"
msgstr "в индекса"
-#: add-interactive.c:1144 git-add--interactive.perl:213
+#: add-interactive.c:1148 git-add--interactive.perl:213
msgid "unstaged"
msgstr "извън индекса"
-#: add-interactive.c:1144 apply.c:4994 apply.c:4997 builtin/am.c:2309
-#: builtin/am.c:2312 builtin/bugreport.c:135 builtin/clone.c:128
-#: builtin/fetch.c:152 builtin/merge.c:285 builtin/pull.c:190
-#: builtin/submodule--helper.c:408 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
+#: add-interactive.c:1148 apply.c:5016 apply.c:5019 builtin/am.c:2311
+#: builtin/am.c:2314 builtin/bugreport.c:107 builtin/clone.c:128
+#: builtin/fetch.c:152 builtin/merge.c:286 builtin/pull.c:194
+#: builtin/submodule--helper.c:404 builtin/submodule--helper.c:1857
+#: builtin/submodule--helper.c:1860 builtin/submodule--helper.c:2503
+#: builtin/submodule--helper.c:2506 builtin/submodule--helper.c:2573
+#: builtin/submodule--helper.c:2578 builtin/submodule--helper.c:2811
#: git-add--interactive.perl:213
msgid "path"
msgstr "път"
-#: add-interactive.c:1151
+#: add-interactive.c:1155
msgid "could not refresh index"
msgstr "индексът не може да бъде обновен"
#
-#: add-interactive.c:1165 builtin/clean.c:778 git-add--interactive.perl:1803
+#: add-interactive.c:1169 builtin/clean.c:778 git-add--interactive.perl:1803
#, c-format
msgid "Bye.\n"
msgstr "Изход.\n"
@@ -927,7 +932,7 @@
msgid "'git apply' failed"
msgstr "неуспешно изпълнение на „git apply“"
-#: advice.c:145
+#: advice.c:78
#, c-format
msgid ""
"\n"
@@ -937,37 +942,37 @@
"За да изключите това предупреждение, изпълнете:\n"
" git config advice.%s false"
-#: advice.c:161
+#: advice.c:94
#, c-format
msgid "%shint: %.*s%s\n"
msgstr "%sподсказка: %.*s%s\n"
-#: advice.c:252
+#: advice.c:178
msgid "Cherry-picking is not possible because you have unmerged files."
msgstr "Отбирането на подавания е блокирано от неслети файлове."
-#: advice.c:254
+#: advice.c:180
msgid "Committing is not possible because you have unmerged files."
msgstr "Подаването е блокирано от неслети файлове."
-#: advice.c:256
+#: advice.c:182
msgid "Merging is not possible because you have unmerged files."
msgstr "Сливането е блокирано от неслети файлове."
-#: advice.c:258
+#: advice.c:184
msgid "Pulling is not possible because you have unmerged files."
msgstr "Издърпването е блокирано от неслети файлове."
-#: advice.c:260
+#: advice.c:186
msgid "Reverting is not possible because you have unmerged files."
msgstr "Отмяната е блокирана от неслети файлове."
-#: advice.c:262
+#: advice.c:188
#, c-format
msgid "It is not possible to %s because you have unmerged files."
msgstr "Действието „%s“ е блокирано от неслети файлове."
-#: advice.c:270
+#: advice.c:196
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."
@@ -975,40 +980,47 @@
"Редактирайте ги в работното дърво, и тогава ползвайте „git add/rm ФАЙЛ“,\n"
"за да отбележите коригирането им. След това извършете подаването."
-#: advice.c:278
+#: advice.c:204
msgid "Exiting because of an unresolved conflict."
msgstr "Изход от програмата заради некоригиран конфликт."
-#: advice.c:283 builtin/merge.c:1374
+#: advice.c:209 builtin/merge.c:1379
msgid "You have not concluded your merge (MERGE_HEAD exists)."
msgstr "Не сте завършили сливане. (Указателят „MERGE_HEAD“ съществува)."
-#: advice.c:285
+#: advice.c:211
msgid "Please, commit your changes before merging."
msgstr "Промените трябва да се подадат преди сливане."
-#: advice.c:286
+#: advice.c:212
msgid "Exiting because of unfinished merge."
msgstr "Изход от програмата заради незавършено сливане."
-#: advice.c:296
+#: advice.c:217
+msgid "Not possible to fast-forward, aborting."
+msgstr "Не може да се извърши превъртане, преустановяване на действието."
+
+#: advice.c:227
#, c-format
msgid ""
-"The following pathspecs didn't match any eligible path, but they do match "
-"index\n"
-"entries outside the current sparse checkout:\n"
+"The following paths and/or pathspecs matched paths that exist\n"
+"outside of your sparse-checkout definition, so will not be\n"
+"updated in the index:\n"
msgstr ""
-"Следните пътища не съвпадат с никой от настроените, но съвпадат с обекти\n"
-"в индекса, които са извън текущото частично изтегляне:\n"
+"Следните пътища напасват с пътища извън дефиницията за частично\n"
+"изтегляне и няма да се обновят в индекса:\n"
-#: advice.c:303
+#: advice.c:234
msgid ""
-"Disable or modify the sparsity rules if you intend to update such entries."
+"If you intend to update such entries, try one of the following:\n"
+"* Use the --sparse option.\n"
+"* Disable or modify the sparsity rules."
msgstr ""
-"Изключете или променете правилата за частичност, ако искате до обновявате "
-"такива обекти."
+"Ако искате да ги обновите, пробвайте едно от следните:\n"
+" ⁃ ползвайте опцията „--sparse“\n"
+" ⁃ изключете или променете правилата за частичност."
-#: advice.c:310
+#: advice.c:242
#, c-format
msgid ""
"Note: switching to '%s'.\n"
@@ -1197,37 +1209,37 @@
msgid "** warning: file %s becomes empty but is not deleted"
msgstr "● предупреждение: файлът „%s“ вече е празен, но не е изтрит"
-#: apply.c:1977
+#: apply.c:1978
#, c-format
msgid "corrupt binary patch at line %d: %.*s"
msgstr "грешка в двоичната кръпка на ред %d: %.*s"
-#: apply.c:2014
+#: apply.c:2015
#, c-format
msgid "unrecognized binary patch at line %d"
msgstr "неразпозната двоичната кръпка на ред %d"
-#: apply.c:2176
+#: apply.c:2177
#, c-format
msgid "patch with only garbage at line %d"
msgstr "кръпката е с изцяло повредени данни на ред %d"
-#: apply.c:2262
+#: apply.c:2263
#, c-format
msgid "unable to read symlink %s"
msgstr "символната връзка „%s“ не може да бъде прочетена"
-#: apply.c:2266
+#: apply.c:2267
#, c-format
msgid "unable to open or read %s"
msgstr "файлът „%s“ не може да бъде отворен или прочетен"
-#: apply.c:2935
+#: apply.c:2936
#, c-format
msgid "invalid start of line: '%c'"
msgstr "неправилно начало на ред: „%c“"
-#: apply.c:3056
+#: apply.c:3057
#, c-format
msgid "Hunk #%d succeeded at %d (offset %d line)."
msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
@@ -1236,13 +1248,13 @@
msgstr[1] ""
"%d-то парче код бе успешно приложено на ред %d (отместване от %d реда)."
-#: apply.c:3068
+#: apply.c:3069
#, c-format
msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
msgstr ""
"Контекстът е намален на (%ld/%ld) за прилагането на парчето код на ред %d"
-#: apply.c:3074
+#: apply.c:3075
#, c-format
msgid ""
"while searching for:\n"
@@ -1251,316 +1263,317 @@
"при търсене за:\n"
"%.*s"
-#: apply.c:3096
+#: apply.c:3097
#, c-format
msgid "missing binary patch data for '%s'"
msgstr "липсват данните за двоичната кръпка за „%s“"
-#: apply.c:3104
+#: apply.c:3105
#, c-format
msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
msgstr ""
"двоичната кръпка не може да се приложи в обратна посока, когато обратното "
"парче за „%s“ липсва"
-#: apply.c:3151
+#: apply.c:3152
#, c-format
msgid "cannot apply binary patch to '%s' without full index line"
msgstr "към „%s“ не може да се приложи двоична кръпка без пълен индекс"
-#: apply.c:3162
+#: apply.c:3163
#, c-format
msgid ""
"the patch applies to '%s' (%s), which does not match the current contents."
msgstr "кръпката съответства на „%s“ (%s), който не съвпада по съдържание."
-#: apply.c:3170
+#: apply.c:3171
#, c-format
msgid "the patch applies to an empty '%s' but it is not empty"
msgstr "кръпката съответства на „%s“, който трябва да е празен, но не е"
-#: apply.c:3188
+#: apply.c:3189
#, c-format
msgid "the necessary postimage %s for '%s' cannot be read"
msgstr ""
"необходимият резултат след операцията — „%s“ за „%s“ не може да бъде "
"прочетен"
-#: apply.c:3201
+#: apply.c:3202
#, c-format
msgid "binary patch does not apply to '%s'"
msgstr "двоичната кръпка не може да бъде приложена върху „%s“"
-#: apply.c:3208
+#: apply.c:3209
#, c-format
msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
msgstr ""
"двоичната кръпка за „%s“ води до неправилни резултати (очакваше се: „%s“, а "
"бе получено: „%s“)"
-#: apply.c:3229
+#: apply.c:3230
#, c-format
msgid "patch failed: %s:%ld"
msgstr "неуспешно прилагане на кръпка: „%s:%ld“"
-#: apply.c:3352
+#: apply.c:3353
#, c-format
msgid "cannot checkout %s"
msgstr "„%s“ не може да се изтегли"
-#: apply.c:3404 apply.c:3415 apply.c:3461 midx.c:98 pack-revindex.c:214
+#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:102 pack-revindex.c:214
#: setup.c:308
#, c-format
msgid "failed to read %s"
msgstr "файлът „%s“ не може да бъде прочетен"
-#: apply.c:3412
+#: apply.c:3413
#, c-format
msgid "reading from '%s' beyond a symbolic link"
msgstr "изчитане на „%s“ след проследяване на символна връзка"
-#: apply.c:3441 apply.c:3687
+#: apply.c:3442 apply.c:3709
#, c-format
msgid "path %s has been renamed/deleted"
msgstr "обектът с път „%s“ е преименуван или изтрит"
-#: apply.c:3527 apply.c:3702
+#: apply.c:3549 apply.c:3724
#, c-format
msgid "%s: does not exist in index"
msgstr "„%s“ не съществува в индекса"
-#: apply.c:3536 apply.c:3710 apply.c:3954
+#: apply.c:3558 apply.c:3732 apply.c:3976
#, c-format
msgid "%s: does not match index"
msgstr "„%s“ не съответства на индекса"
-#: apply.c:3571
+#: apply.c:3593
msgid "repository lacks the necessary blob to perform 3-way merge."
msgstr "в хранилището липсват необходимите обекти-BLOB, за тройно сливане."
-#: apply.c:3574
+#: apply.c:3596
#, c-format
msgid "Performing three-way merge...\n"
msgstr "Тройно сливане…\n"
-#: apply.c:3590 apply.c:3594
+#: apply.c:3612 apply.c:3616
#, c-format
msgid "cannot read the current contents of '%s'"
msgstr "текущото съдържание на „%s“ не може да бъде прочетено"
-#: apply.c:3606
+#: apply.c:3628
#, c-format
msgid "Failed to perform three-way merge...\n"
msgstr "Неуспешно тройно сливане…\n"
-#: apply.c:3620
+#: apply.c:3642
#, c-format
msgid "Applied patch to '%s' with conflicts.\n"
msgstr "Конфликти при прилагането на кръпката към „%s“.\n"
-#: apply.c:3625
+#: apply.c:3647
#, c-format
msgid "Applied patch to '%s' cleanly.\n"
msgstr "Кръпката бе приложена чисто към „%s“.\n"
-#: apply.c:3642
+#: apply.c:3664
#, c-format
msgid "Falling back to direct application...\n"
msgstr "Преминаване към пряко прилагане…\n"
-#: apply.c:3654
+#: apply.c:3676
msgid "removal patch leaves file contents"
msgstr "изтриващата кръпка оставя файла непразен"
-#: apply.c:3727
+#: apply.c:3749
#, c-format
msgid "%s: wrong type"
msgstr "„%s“: неправилен вид"
-#: apply.c:3729
+#: apply.c:3751
#, c-format
msgid "%s has type %o, expected %o"
msgstr "„%s“ е от вид „%o“, а се очакваше „%o“"
-#: apply.c:3894 apply.c:3896 read-cache.c:863 read-cache.c:892
-#: read-cache.c:1353
+#: apply.c:3916 apply.c:3918 read-cache.c:876 read-cache.c:905
+#: read-cache.c:1368
#, c-format
msgid "invalid path '%s'"
msgstr "неправилен път: „%s“"
-#: apply.c:3952
+#: apply.c:3974
#, c-format
msgid "%s: already exists in index"
msgstr "„%s“: вече съществува в индекса"
-#: apply.c:3956
+#: apply.c:3978
#, c-format
msgid "%s: already exists in working directory"
msgstr "„%s“: вече съществува в работното дърво"
-#: apply.c:3976
+#: apply.c:3998
#, c-format
msgid "new mode (%o) of %s does not match old mode (%o)"
msgstr "новите права за достъп (%o) на „%s“ не съвпадат със старите (%o)"
-#: apply.c:3981
+#: apply.c:4003
#, c-format
msgid "new mode (%o) of %s does not match old mode (%o) of %s"
msgstr ""
"новите права за достъп (%o) на „%s“ не съвпадат със старите (%o) на „%s“"
-#: apply.c:4001
+#: apply.c:4023
#, c-format
msgid "affected file '%s' is beyond a symbolic link"
msgstr "засегнатият файл „%s“ е след символна връзка"
-#: apply.c:4005
+#: apply.c:4027
#, c-format
msgid "%s: patch does not apply"
msgstr "Кръпката „%s“ не може да бъде приложена"
-#: apply.c:4020
+#: apply.c:4042
#, c-format
msgid "Checking patch %s..."
msgstr "Проверяване на кръпката „%s“…"
-#: apply.c:4112
+#: apply.c:4134
#, c-format
msgid "sha1 information is lacking or useless for submodule %s"
msgstr ""
"информацията за сумата по SHA1 за подмодула липсва или не е достатъчна (%s)."
-#: apply.c:4119
+#: apply.c:4141
#, c-format
msgid "mode change for %s, which is not in current HEAD"
msgstr "смяна на режима на достъпа на „%s“, който не е в текущия връх „HEAD“"
-#: apply.c:4122
+#: apply.c:4144
#, c-format
msgid "sha1 information is lacking or useless (%s)."
msgstr "информацията за сумата по SHA1 липсва или не е достатъчна (%s)."
-#: apply.c:4131
+#: apply.c:4153
#, c-format
msgid "could not add %s to temporary index"
msgstr "„%s“ не може да се добави към временния индекс"
-#: apply.c:4141
+#: apply.c:4163
#, c-format
msgid "could not write temporary index to %s"
msgstr "временният индекс не може да се запази в „%s“"
-#: apply.c:4279
+#: apply.c:4301
#, c-format
msgid "unable to remove %s from index"
msgstr "„%s“ не може да се извади от индекса"
-#: apply.c:4313
+#: apply.c:4335
#, c-format
msgid "corrupt patch for submodule %s"
msgstr "повредена кръпка за модула „%s“"
-#: apply.c:4319
+#: apply.c:4341
#, c-format
msgid "unable to stat newly created file '%s'"
msgstr ""
"не може да се получи информация чрез „stat“ за новосъздадения файл „%s“"
-#: apply.c:4327
+#: apply.c:4349
#, c-format
msgid "unable to create backing store for newly created file %s"
msgstr ""
"не може да се за създаде мястото за съхранение на новосъздадения файл „%s“"
-#: apply.c:4333 apply.c:4478
+#: apply.c:4355 apply.c:4500
#, c-format
msgid "unable to add cache entry for %s"
msgstr "не може да се добави запис в кеша за „%s“"
-#: apply.c:4376 builtin/bisect--helper.c:525
+#: apply.c:4398 builtin/bisect--helper.c:540 builtin/gc.c:2241
+#: builtin/gc.c:2276
#, c-format
msgid "failed to write to '%s'"
msgstr "в „%s“ не може да се пише"
-#: apply.c:4380
+#: apply.c:4402
#, c-format
msgid "closing file '%s'"
msgstr "затваряне на файла „%s“"
-#: apply.c:4450
+#: apply.c:4472
#, c-format
msgid "unable to write file '%s' mode %o"
msgstr "файлът „%s“ не може да се запише с режим на достъп „%o“"
-#: apply.c:4548
+#: apply.c:4570
#, c-format
msgid "Applied patch %s cleanly."
msgstr "Кръпката „%s“ бе приложена чисто."
-#: apply.c:4556
+#: apply.c:4578
msgid "internal error"
msgstr "вътрешна грешка"
-#: apply.c:4559
+#: apply.c:4581
#, c-format
msgid "Applying patch %%s with %d reject..."
msgid_plural "Applying patch %%s with %d rejects..."
msgstr[0] "Прилагане на кръпката „%%s“ с %d отхвърлено парче…"
msgstr[1] "Прилагане на кръпката „%%s“ с %d отхвърлени парчета…"
-#: apply.c:4570
+#: apply.c:4592
#, c-format
msgid "truncating .rej filename to %.*s.rej"
msgstr "съкращаване на името на файла с отхвърлените парчета на „ %.*s.rej“"
-#: apply.c:4578 builtin/fetch.c:993 builtin/fetch.c:1394
+#: apply.c:4600 builtin/fetch.c:998 builtin/fetch.c:1408
#, c-format
msgid "cannot open %s"
msgstr "„%s“ не може да бъде отворен"
-#: apply.c:4592
+#: apply.c:4614
#, c-format
msgid "Hunk #%d applied cleanly."
msgstr "%d-то парче бе успешно приложено."
-#: apply.c:4596
+#: apply.c:4618
#, c-format
msgid "Rejected hunk #%d."
msgstr "%d-то парче бе отхвърлено."
-#: apply.c:4725
+#: apply.c:4747
#, c-format
msgid "Skipped patch '%s'."
msgstr "Пропусната кръпка: „%s“"
-#: apply.c:4733
+#: apply.c:4755
msgid "unrecognized input"
msgstr "непознат вход"
-#: apply.c:4753
+#: apply.c:4775
msgid "unable to read index file"
msgstr "индексът не може да бъде записан"
-#: apply.c:4910
+#: apply.c:4932
#, c-format
msgid "can't open patch '%s': %s"
msgstr "кръпката „%s“ не може да бъде отворена: %s"
-#: apply.c:4937
+#: apply.c:4959
#, c-format
msgid "squelched %d whitespace error"
msgid_plural "squelched %d whitespace errors"
msgstr[0] "пренебрегната е %d грешка в знаците за интервали"
msgstr[1] "пренебрегнати са %d грешки в знаците за интервали"
-#: apply.c:4943 apply.c:4958
+#: apply.c:4965 apply.c:4980
#, c-format
msgid "%d line adds whitespace errors."
msgid_plural "%d lines add whitespace errors."
msgstr[0] "%d ред добавя грешки в знаците за интервали."
msgstr[1] "%d реда добавят грешки в знаците за интервали."
-#: apply.c:4951
+#: apply.c:4973
#, c-format
msgid "%d line applied after fixing whitespace errors."
msgid_plural "%d lines applied after fixing whitespace errors."
@@ -1569,138 +1582,138 @@
msgstr[1] ""
"Добавени са %d реда след корекцията на грешките в знаците за интервали."
-#: apply.c:4967 builtin/add.c:678 builtin/mv.c:304 builtin/rm.c:423
+#: apply.c:4989 builtin/add.c:707 builtin/mv.c:338 builtin/rm.c:429
msgid "Unable to write new index file"
msgstr "Новият индекс не може да бъде записан"
-#: apply.c:4995
+#: apply.c:5017
msgid "don't apply changes matching the given path"
msgstr "без прилагане на промените напасващи на дадения път"
-#: apply.c:4998
+#: apply.c:5020
msgid "apply changes matching the given path"
msgstr "прилагане на промените напасващи на дадения път"
-#: apply.c:5000 builtin/am.c:2318
+#: apply.c:5022 builtin/am.c:2320
msgid "num"
msgstr "БРОЙ"
-#: apply.c:5001
+#: apply.c:5023
msgid "remove <num> leading slashes from traditional diff paths"
msgstr "премахване на този БРОЙ водещи елементи от пътищата в разликата"
-#: apply.c:5004
+#: apply.c:5026
msgid "ignore additions made by the patch"
msgstr "игнориране на редовете добавени от тази кръпка"
-#: apply.c:5006
+#: apply.c:5028
msgid "instead of applying the patch, output diffstat for the input"
msgstr "извеждане на статистика на промените без прилагане на кръпката"
-#: apply.c:5010
+#: apply.c:5032
msgid "show number of added and deleted lines in decimal notation"
msgstr "извеждане на броя на добавените и изтритите редове"
-#: apply.c:5012
+#: apply.c:5034
msgid "instead of applying the patch, output a summary for the input"
msgstr "извеждане на статистика на входните данни без прилагане на кръпката"
-#: apply.c:5014
+#: apply.c:5036
msgid "instead of applying the patch, see if the patch is applicable"
msgstr "проверка дали кръпката може да се приложи, без действително прилагане"
-#: apply.c:5016
+#: apply.c:5038
msgid "make sure the patch is applicable to the current index"
msgstr "проверка дали кръпката може да бъде приложена към текущия индекс"
-#: apply.c:5018
+#: apply.c:5040
msgid "mark new files with `git add --intent-to-add`"
msgstr "отбелязване на новите файлове с „git add --intent-to-add“"
-#: apply.c:5020
+#: apply.c:5042
msgid "apply a patch without touching the working tree"
msgstr "прилагане на кръпката без промяна на работното дърво"
-#: apply.c:5022
+#: apply.c:5044
msgid "accept a patch that touches outside the working area"
msgstr "прилагане на кръпка, която променя и файлове извън работното дърво"
-#: apply.c:5025
+#: apply.c:5047
msgid "also apply the patch (use with --stat/--summary/--check)"
msgstr ""
"кръпката да бъде приложена. Опцията се комбинира с „--check“/„--stat“/„--"
"summary“"
-#: apply.c:5027
+#: apply.c:5049
msgid "attempt three-way merge, fall back on normal patch if that fails"
msgstr ""
"пробване с тройно сливане, ако това не сработи — стандартно прилагане на "
"кръпка"
-#: apply.c:5029
+#: apply.c:5051
msgid "build a temporary index based on embedded index information"
msgstr ""
"създаване на временен индекс на база на включената информация за индекса"
-#: apply.c:5032 builtin/checkout-index.c:196 builtin/ls-files.c:617
+#: apply.c:5054 builtin/checkout-index.c:196
msgid "paths are separated with NUL character"
msgstr "разделяне на пътищата с нулевия знак „NUL“"
-#: apply.c:5034
+#: apply.c:5056
msgid "ensure at least <n> lines of context match"
msgstr "да се осигури контекст от поне такъв БРОЙ съвпадащи редове"
-#: apply.c:5035 builtin/am.c:2294 builtin/am.c:2297
+#: apply.c:5057 builtin/am.c:2296 builtin/am.c:2299
#: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
-#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3991
-#: builtin/rebase.c:1347
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3960
+#: builtin/rebase.c:1051
msgid "action"
msgstr "действие"
-#: apply.c:5036
+#: apply.c:5058
msgid "detect new or modified lines that have whitespace errors"
msgstr "засичане на нови или променени редове с грешки в знаците за интервали"
-#: apply.c:5039 apply.c:5042
+#: apply.c:5061 apply.c:5064
msgid "ignore changes in whitespace when finding context"
msgstr ""
"игнориране на промените в знаците за интервали при откриване на контекста"
-#: apply.c:5045
+#: apply.c:5067
msgid "apply the patch in reverse"
msgstr "прилагане на кръпката в обратна посока"
-#: apply.c:5047
+#: apply.c:5069
msgid "don't expect at least one line of context"
msgstr "без изискване на дори и един ред контекст"
-#: apply.c:5049
+#: apply.c:5071
msgid "leave the rejected hunks in corresponding *.rej files"
msgstr "оставяне на отхвърлените парчета във файлове с разширение „.rej“"
-#: apply.c:5051
+#: apply.c:5073
msgid "allow overlapping hunks"
msgstr "позволяване на застъпващи се парчета"
-#: apply.c:5052 builtin/add.c:364 builtin/check-ignore.c:22
-#: builtin/commit.c:1481 builtin/count-objects.c:98 builtin/fsck.c:756
-#: builtin/log.c:2297 builtin/mv.c:123 builtin/read-tree.c:128
+#: apply.c:5074 builtin/add.c:372 builtin/check-ignore.c:22
+#: builtin/commit.c:1483 builtin/count-objects.c:98 builtin/fsck.c:788
+#: builtin/log.c:2297 builtin/mv.c:123 builtin/read-tree.c:120
msgid "be verbose"
msgstr "повече подробности"
-#: apply.c:5054
+#: apply.c:5076
msgid "tolerate incorrectly detected missing new-line at the end of file"
msgstr "пренебрегване на неправилно липсващ знак за нов ред в края на файл"
-#: apply.c:5057
+#: apply.c:5079
msgid "do not trust the line counts in the hunk headers"
msgstr "без доверяване на номерата на редовете в заглавните части на парчетата"
-#: apply.c:5059 builtin/am.c:2306
+#: apply.c:5081 builtin/am.c:2308
msgid "root"
msgstr "НАЧАЛНА_ДИРЕКТОРИЯ"
-#: apply.c:5060
+#: apply.c:5082
msgid "prepend <root> to all filenames"
msgstr "добавяне на тази НАЧАЛНА_ДИРЕКТОРИЯ към имената на всички файлове"
@@ -1772,151 +1785,151 @@
msgid "cannot read %s"
msgstr "обектът „%s“ не може да бъде прочетен"
-#: archive.c:342 sequencer.c:460 sequencer.c:1915 sequencer.c:3095
-#: sequencer.c:3537 sequencer.c:3665 builtin/am.c:262 builtin/commit.c:833
-#: builtin/merge.c:1143
+#: archive.c:341 sequencer.c:473 sequencer.c:1932 sequencer.c:3114
+#: sequencer.c:3556 sequencer.c:3684 builtin/am.c:263 builtin/commit.c:834
+#: builtin/merge.c:1145
#, c-format
msgid "could not read '%s'"
msgstr "файлът „%s“ не може да бъде прочетен"
-#: archive.c:427 builtin/add.c:205 builtin/add.c:645 builtin/rm.c:328
+#: archive.c:426 builtin/add.c:215 builtin/add.c:674 builtin/rm.c:334
#, c-format
msgid "pathspec '%s' did not match any files"
msgstr "пътят „%s“ не съвпада с никой файл"
-#: archive.c:451
+#: archive.c:450
#, c-format
msgid "no such ref: %.*s"
msgstr "такъв указател няма: %.*s"
-#: archive.c:457
+#: archive.c:456
#, c-format
msgid "not a valid object name: %s"
msgstr "неправилно име на обект: „%s“"
-#: archive.c:470
+#: archive.c:469
#, c-format
msgid "not a tree object: %s"
msgstr "не е обект-дърво: %s"
-#: archive.c:482
+#: archive.c:481
msgid "current working directory is untracked"
msgstr "текущата работна директория не е следена"
-#: archive.c:523
+#: archive.c:522
#, c-format
msgid "File not found: %s"
msgstr "Файлът „%s“ липсва"
-#: archive.c:525
+#: archive.c:524
#, c-format
msgid "Not a regular file: %s"
msgstr "„%s“ не е обикновен файл"
-#: archive.c:552
+#: archive.c:551
msgid "fmt"
msgstr "ФОРМАТ"
-#: archive.c:552
+#: archive.c:551
msgid "archive format"
msgstr "ФОРМАТ на архива"
-#: archive.c:553 builtin/log.c:1775
+#: archive.c:552 builtin/log.c:1775
msgid "prefix"
msgstr "ПРЕФИКС"
-#: archive.c:554
+#: archive.c:553
msgid "prepend prefix to each pathname in the archive"
msgstr "добавяне на този ПРЕФИКС към всеки път в архива"
-#: archive.c:555 archive.c:558 builtin/blame.c:884 builtin/blame.c:888
-#: builtin/blame.c:889 builtin/commit-tree.c:117 builtin/config.c:135
-#: builtin/fast-export.c:1207 builtin/fast-export.c:1209
-#: builtin/fast-export.c:1213 builtin/grep.c:921 builtin/hash-object.c:105
-#: builtin/ls-files.c:653 builtin/ls-files.c:656 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:191
+#: archive.c:554 archive.c:557 builtin/blame.c:880 builtin/blame.c:884
+#: builtin/blame.c:885 builtin/commit-tree.c:115 builtin/config.c:135
+#: builtin/fast-export.c:1208 builtin/fast-export.c:1210
+#: builtin/fast-export.c:1214 builtin/grep.c:935 builtin/hash-object.c:103
+#: builtin/ls-files.c:651 builtin/ls-files.c:654 builtin/notes.c:410
+#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:190
msgid "file"
msgstr "ФАЙЛ"
-#: archive.c:556
+#: archive.c:555
msgid "add untracked file to archive"
msgstr "добавяне на неследените файлове към архива"
-#: archive.c:559 builtin/archive.c:90
+#: archive.c:558 builtin/archive.c:88
msgid "write the archive to this file"
msgstr "запазване на архива в този ФАЙЛ"
-#: archive.c:561
+#: archive.c:560
msgid "read .gitattributes in working directory"
msgstr "изчитане на „.gitattributes“ в работната директория"
-#: archive.c:562
+#: archive.c:561
msgid "report archived files on stderr"
msgstr "извеждане на архивираните файлове на стандартната грешка"
-#: archive.c:564
+#: archive.c:563
msgid "set compression level"
msgstr "задаване на нивото на компресиране"
-#: archive.c:567
+#: archive.c:566
msgid "list supported archive formats"
msgstr "извеждане на списъка с поддържаните формати"
-#: archive.c:569 builtin/archive.c:91 builtin/clone.c:118 builtin/clone.c:121
-#: builtin/submodule--helper.c:1830 builtin/submodule--helper.c:2335
+#: archive.c:568 builtin/archive.c:89 builtin/clone.c:118 builtin/clone.c:121
+#: builtin/submodule--helper.c:1869 builtin/submodule--helper.c:2512
msgid "repo"
msgstr "хранилище"
-#: archive.c:570 builtin/archive.c:92
+#: archive.c:569 builtin/archive.c:90
msgid "retrieve the archive from remote repository <repo>"
msgstr "получаване на архива от отдалеченото ХРАНИЛИЩЕ"
-#: archive.c:571 builtin/archive.c:93 builtin/difftool.c:717
-#: builtin/notes.c:498
+#: archive.c:570 builtin/archive.c:91 builtin/difftool.c:714
+#: builtin/notes.c:496
msgid "command"
msgstr "команда"
-#: archive.c:572 builtin/archive.c:94
+#: archive.c:571 builtin/archive.c:92
msgid "path to the remote git-upload-archive command"
msgstr "път към отдалечената команда „git-upload-archive“"
-#: archive.c:579
+#: archive.c:578
msgid "Unexpected option --remote"
msgstr "Неочаквана опция „--remote“"
-#: archive.c:581
+#: archive.c:580
msgid "Option --exec can only be used together with --remote"
msgstr "опцията „--exec“ изисква „--remote“"
-#: archive.c:583
+#: archive.c:582
msgid "Unexpected option --output"
msgstr "Неочаквана опция „--output“"
-#: archive.c:585
+#: archive.c:584
msgid "Options --add-file and --remote cannot be used together"
msgstr "опциите „--add-file“ и „--remote“ са несъвместими"
-#: archive.c:607
+#: archive.c:606
#, c-format
msgid "Unknown archive format '%s'"
msgstr "Непознат формат на архив: „%s“"
-#: archive.c:616
+#: archive.c:615
#, c-format
msgid "Argument not supported for format '%s': -%d"
msgstr "Аргументът не се поддържа за форма̀та „%s“: -%d"
-#: attr.c:202
+#: attr.c:203
#, c-format
msgid "%.*s is not a valid attribute name"
msgstr "„%.*s“ е неправилно име за атрибут"
-#: attr.c:363
+#: attr.c:364
#, c-format
msgid "%s not allowed: %s:%d"
msgstr "%s: командата не е позволена: „%s:%d“"
-#: attr.c:403
+#: attr.c:404
msgid ""
"Negative patterns are ignored in git attributes\n"
"Use '\\!' for literal leading exclamation."
@@ -1924,22 +1937,22 @@
"Отрицателните шаблони се игнорират в атрибутите на git.\n"
"Ако ви трябва начална удивителна, ползвайте „\\!“."
-#: bisect.c:489
+#: bisect.c:488
#, c-format
msgid "Badly quoted content in file '%s': %s"
msgstr "Неправилно цитирано съдържание във файла „%s“: %s"
-#: bisect.c:699
+#: bisect.c:698
#, c-format
msgid "We cannot bisect more!\n"
msgstr "Повече не може да се търси двоично!\n"
-#: bisect.c:766
+#: bisect.c:764
#, c-format
msgid "Not a valid commit name %s"
msgstr "Неправилно име на подаване „%s“"
-#: bisect.c:791
+#: bisect.c:789
#, c-format
msgid ""
"The merge base %s is bad.\n"
@@ -1948,7 +1961,7 @@
"Неправилна база за сливане: %s.\n"
"Следователно грешката е коригирана между „%s“ и [%s].\n"
-#: bisect.c:796
+#: bisect.c:794
#, c-format
msgid ""
"The merge base %s is new.\n"
@@ -1957,7 +1970,7 @@
"Нова база за сливане: %s.\n"
"Свойството е променено между „%s“ и [%s].\n"
-#: bisect.c:801
+#: bisect.c:799
#, c-format
msgid ""
"The merge base %s is %s.\n"
@@ -1966,7 +1979,7 @@
"Базата за сливане „%s“ е %s.\n"
"Следователно първото %s подаване е между „%s“ и [%s].\n"
-#: bisect.c:809
+#: bisect.c:807
#, c-format
msgid ""
"Some %s revs are not ancestors of the %s rev.\n"
@@ -1977,7 +1990,7 @@
"Двоичното търсене с git bisect няма да работи правилно.\n"
"Дали не сте объркали указателите „%s“ и „%s“?\n"
-#: bisect.c:822
+#: bisect.c:820
#, c-format
msgid ""
"the merge base between %s and [%s] must be skipped.\n"
@@ -1988,36 +2001,36 @@
"Не може да сме сигурни, че първото %s подаване е между „%s“ и „%s“.\n"
"Двоичното търсене продължава."
-#: bisect.c:861
+#: bisect.c:859
#, c-format
msgid "Bisecting: a merge base must be tested\n"
msgstr "Двоично търсене: трябва да се провери база за сливане\n"
-#: bisect.c:911
+#: bisect.c:909
#, c-format
msgid "a %s revision is needed"
msgstr "необходима е версия „%s“"
-#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:298
+#: bisect.c:939
#, c-format
msgid "could not create file '%s'"
msgstr "файлът „%s“ не може да бъде създаден"
-#: bisect.c:987 builtin/merge.c:153
+#: bisect.c:985 builtin/merge.c:154
#, c-format
msgid "could not read file '%s'"
msgstr "файлът „%s“ не може да бъде прочетен"
-#: bisect.c:1027
+#: bisect.c:1025
msgid "reading bisect refs failed"
msgstr "неуспешно прочитане на указателите за двоично търсене"
-#: bisect.c:1057
+#: bisect.c:1055
#, c-format
msgid "%s was both %s and %s\n"
msgstr "„%s“ e както „%s“, така и „%s“\n"
-#: bisect.c:1066
+#: bisect.c:1064
#, c-format
msgid ""
"No testable commit found.\n"
@@ -2026,7 +2039,7 @@
"Липсва подходящо за тестване подаване.\n"
"Проверете параметрите за пътищата.\n"
-#: bisect.c:1095
+#: bisect.c:1093
#, c-format
msgid "(roughly %d step)"
msgid_plural "(roughly %d steps)"
@@ -2036,7 +2049,7 @@
#. TRANSLATORS: the last %s will be replaced with "(roughly %d
#. steps)" translation.
#.
-#: bisect.c:1101
+#: bisect.c:1099
#, 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"
@@ -2057,11 +2070,12 @@
"Едновременното задаване на опциите „--reverse“ и „--first-parent“ изисква "
"указването на крайно подаване"
-#: blame.c:2820 bundle.c:224 ref-filter.c:2274 remote.c:2041 sequencer.c:2333
-#: sequencer.c:4865 submodule.c:844 builtin/commit.c:1113 builtin/log.c:414
-#: builtin/log.c:1021 builtin/log.c:1629 builtin/log.c:2056 builtin/log.c:2346
-#: builtin/merge.c:428 builtin/pack-objects.c:3343 builtin/pack-objects.c:3806
-#: builtin/pack-objects.c:3821 builtin/shortlog.c:255
+#: blame.c:2820 bundle.c:224 midx.c:1039 ref-filter.c:2370 remote.c:2041
+#: sequencer.c:2350 sequencer.c:4902 submodule.c:883 builtin/commit.c:1114
+#: builtin/log.c:414 builtin/log.c:1021 builtin/log.c:1629 builtin/log.c:2056
+#: builtin/log.c:2346 builtin/merge.c:429 builtin/pack-objects.c:3373
+#: builtin/pack-objects.c:3775 builtin/pack-objects.c:3790
+#: builtin/shortlog.c:255
msgid "revision walk setup failed"
msgstr "неуспешно настройване на обхождането на версиите"
@@ -2240,8 +2254,8 @@
msgid "unrecognized header: %s%s (%d)"
msgstr "непозната заглавна част: %s%s (%d)"
-#: bundle.c:140 rerere.c:464 rerere.c:674 sequencer.c:2593 sequencer.c:3385
-#: builtin/commit.c:861
+#: bundle.c:140 rerere.c:464 rerere.c:674 sequencer.c:2618 sequencer.c:3404
+#: builtin/commit.c:862
#, c-format
msgid "could not open '%s'"
msgstr "„%s“ не може да се отвори"
@@ -2300,7 +2314,7 @@
msgid "cannot write bundle version %d with algorithm %s"
msgstr "пратка %d не може да се запише с алгоритъм %s"
-#: bundle.c:524 builtin/log.c:210 builtin/log.c:1938 builtin/shortlog.c:396
+#: bundle.c:524 builtin/log.c:210 builtin/log.c:1938 builtin/shortlog.c:399
#, c-format
msgid "unrecognized argument: %s"
msgstr "непознат аргумент: %s"
@@ -2342,7 +2356,7 @@
msgid "invalid color value: %.*s"
msgstr "неправилна стойност за цвят: %.*s"
-#: commit-graph.c:204 midx.c:47
+#: commit-graph.c:204 midx.c:51
msgid "invalid hash version"
msgstr "неправилна версия на контролна сума"
@@ -2388,197 +2402,197 @@
msgid "unable to find all commit-graph files"
msgstr "някои файлове на гра̀фа с подаванията не може да бъдат открити"
-#: commit-graph.c:745 commit-graph.c:782
+#: commit-graph.c:746 commit-graph.c:783
msgid "invalid commit position. commit-graph is likely corrupt"
msgstr ""
"неправилна позиция на подаването. Вероятно графът с подаванията е повреден"
-#: commit-graph.c:766
+#: commit-graph.c:767
#, c-format
msgid "could not find commit %s"
msgstr "подаването „%s“ не може да бъде открито"
-#: commit-graph.c:799
+#: commit-graph.c:800
msgid "commit-graph requires overflow generation data but has none"
msgstr ""
"графът с подаванията изисква генериране на данни за отместването, но такива "
"липсват"
-#: commit-graph.c:1075 builtin/am.c:1341
+#: commit-graph.c:1105 builtin/am.c:1342
#, c-format
msgid "unable to parse commit %s"
msgstr "подаването не може да бъде анализирано: %s"
-#: commit-graph.c:1337 builtin/pack-objects.c:3057
+#: commit-graph.c:1367 builtin/pack-objects.c:3070
#, c-format
msgid "unable to get type of object %s"
msgstr "видът на обекта „%s“ не може да бъде определен"
-#: commit-graph.c:1368
+#: commit-graph.c:1398
msgid "Loading known commits in commit graph"
msgstr "Зареждане на познатите подавания в гра̀фа с подаванията"
-#: commit-graph.c:1385
+#: commit-graph.c:1415
msgid "Expanding reachable commits in commit graph"
msgstr "Разширяване на достижимите подавания в гра̀фа"
-#: commit-graph.c:1405
+#: commit-graph.c:1435
msgid "Clearing commit marks in commit graph"
msgstr "Изчистване на отбелязванията на подаванията в гра̀фа с подаванията"
-#: commit-graph.c:1424
+#: commit-graph.c:1454
msgid "Computing commit graph topological levels"
msgstr "Изчисляване на топологичните нива в гра̀фа с подаванията"
-#: commit-graph.c:1477
+#: commit-graph.c:1507
msgid "Computing commit graph generation numbers"
msgstr "Изчисляване на номерата на поколенията в гра̀фа с подаванията"
-#: commit-graph.c:1558
+#: commit-graph.c:1588
msgid "Computing commit changed paths Bloom filters"
msgstr "Изчисляване на филтрите на Блум на пътищата с промяна при подаването"
-#: commit-graph.c:1635
+#: commit-graph.c:1665
msgid "Collecting referenced commits"
msgstr "Събиране на свързаните подавания"
-#: commit-graph.c:1660
+#: commit-graph.c:1690
#, 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:1673
+#: commit-graph.c:1703
#, c-format
msgid "error adding pack %s"
msgstr "грешка при добавяне на пакетен файл „%s“"
-#: commit-graph.c:1677
+#: commit-graph.c:1707
#, c-format
msgid "error opening index for %s"
msgstr "грешка при отваряне на индекса на „%s“"
-#: commit-graph.c:1714
+#: commit-graph.c:1744
msgid "Finding commits for commit graph among packed objects"
msgstr "Откриване на подаванията в гра̀фа измежду пакетираните обекти"
-#: commit-graph.c:1732
+#: commit-graph.c:1762
msgid "Finding extra edges in commit graph"
msgstr "Откриване на още върхове в гра̀фа с подаванията"
-#: commit-graph.c:1781
+#: commit-graph.c:1811
msgid "failed to write correct number of base graph ids"
msgstr "правилният брой на базовите идентификатори не може да се запише"
-#: commit-graph.c:1812 midx.c:911
+#: commit-graph.c:1842 midx.c:1146
#, c-format
msgid "unable to create leading directories of %s"
msgstr "родителските директории на „%s“ не може да бъдат създадени"
-#: commit-graph.c:1825
+#: commit-graph.c:1855
msgid "unable to create temporary graph layer"
msgstr "не може да бъде създаден временен слой за гра̀фа с подаванията"
-#: commit-graph.c:1830
+#: commit-graph.c:1860
#, c-format
msgid "unable to adjust shared permissions for '%s'"
msgstr "правата за споделен достъп до „%s“ не може да бъдат зададени"
-#: commit-graph.c:1887
+#: commit-graph.c:1917
#, 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:1923
+#: commit-graph.c:1953
msgid "unable to open commit-graph chain file"
msgstr "файлът с веригата на гра̀фа с подаванията не може да се отвори"
-#: commit-graph.c:1939
+#: commit-graph.c:1969
msgid "failed to rename base commit-graph file"
msgstr "основният файл на гра̀фа с подаванията не може да бъде преименуван"
-#: commit-graph.c:1959
+#: commit-graph.c:1989
msgid "failed to rename temporary commit-graph file"
msgstr "временният файл на гра̀фа с подаванията не може да бъде преименуван"
-#: commit-graph.c:2092
+#: commit-graph.c:2122
msgid "Scanning merged commits"
msgstr "Търсене на подаванията със сливания"
-#: commit-graph.c:2136
+#: commit-graph.c:2166
msgid "Merging commit-graph"
msgstr "Сливане на гра̀фа с подаванията"
-#: commit-graph.c:2244
+#: commit-graph.c:2274
msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
msgstr ""
"опит за запис на гра̀фа с подаванията, но настройката „core.commitGraph“ е "
"изключена"
-#: commit-graph.c:2351
+#: commit-graph.c:2381
msgid "too many commits to write graph"
msgstr "прекалено много подавания за записване на гра̀фа"
-#: commit-graph.c:2449
+#: commit-graph.c:2479
msgid "the commit-graph file has incorrect checksum and is likely corrupt"
msgstr "графът с подаванията е с грешна сума за проверка — вероятно е повреден"
-#: commit-graph.c:2459
+#: commit-graph.c:2489
#, c-format
msgid "commit-graph has incorrect OID order: %s then %s"
msgstr ""
"неправилна подредба на обектите по идентификатор в гра̀фа с подаванията: „%s“ "
"е преди „%s“, а не трябва"
-#: commit-graph.c:2469 commit-graph.c:2484
+#: commit-graph.c:2499 commit-graph.c:2514
#, c-format
msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
msgstr ""
"неправилна стойност за откъс в гра̀фа с подаванията: fanout[%d] = %u, а "
"трябва да е %u"
-#: commit-graph.c:2476
+#: commit-graph.c:2506
#, c-format
msgid "failed to parse commit %s from commit-graph"
msgstr "подаване „%s“ в гра̀фа с подаванията не може да се анализира"
-#: commit-graph.c:2494
+#: commit-graph.c:2524
msgid "Verifying commits in commit graph"
msgstr "Проверка на подаванията в гра̀фа"
-#: commit-graph.c:2509
+#: commit-graph.c:2539
#, c-format
msgid "failed to parse commit %s from object database for commit-graph"
msgstr ""
"подаване „%s“ в базата от данни към гра̀фа с подаванията не може да се "
"анализира"
-#: commit-graph.c:2516
+#: commit-graph.c:2546
#, c-format
msgid "root tree OID for commit %s in commit-graph is %s != %s"
msgstr ""
"идентификаторът на обект за кореновото дърво за подаване „%s“ в гра̀фа с "
"подаванията е „%s“, а трябва да е „%s“"
-#: commit-graph.c:2526
+#: commit-graph.c:2556
#, c-format
msgid "commit-graph parent list for commit %s is too long"
msgstr "списъкът с родители на „%s“ в гра̀фа с подаванията е прекалено дълъг"
-#: commit-graph.c:2535
+#: commit-graph.c:2565
#, c-format
msgid "commit-graph parent for %s is %s != %s"
msgstr "родителят на „%s“ в гра̀фа с подаванията е „%s“, а трябва да е „%s“"
-#: commit-graph.c:2549
+#: commit-graph.c:2579
#, c-format
msgid "commit-graph parent list for commit %s terminates early"
msgstr "списъкът с родители на „%s“ в гра̀фа с подаванията е прекалено къс"
-#: commit-graph.c:2554
+#: commit-graph.c:2584
#, c-format
msgid ""
"commit-graph has generation number zero for commit %s, but non-zero elsewhere"
@@ -2586,7 +2600,7 @@
"номерът на поколението на подаване „%s“ в гра̀фа с подаванията е 0, а другаде "
"не е"
-#: commit-graph.c:2558
+#: commit-graph.c:2588
#, c-format
msgid ""
"commit-graph has non-zero generation number for commit %s, but zero elsewhere"
@@ -2594,32 +2608,32 @@
"номерът на поколението на подаване „%s“ в гра̀фа с подаванията не е 0, а "
"другаде е"
-#: commit-graph.c:2575
+#: commit-graph.c:2605
#, c-format
msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
msgstr ""
"номерът на поколението на подаване „%s“ в гра̀фа с подаванията е %<PRIuMAX> < "
"%<PRIuMAX>"
-#: commit-graph.c:2581
+#: commit-graph.c:2611
#, c-format
msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
msgstr ""
"датата на подаване на „%s“ в гра̀фа с подаванията е %<PRIuMAX>, а трябва да е "
"%<PRIuMAX>"
-#: commit.c:52 sequencer.c:3088 builtin/am.c:372 builtin/am.c:417
-#: builtin/am.c:422 builtin/am.c:1420 builtin/am.c:2067 builtin/replace.c:457
+#: commit.c:53 sequencer.c:3107 builtin/am.c:373 builtin/am.c:418
+#: builtin/am.c:423 builtin/am.c:1421 builtin/am.c:2068 builtin/replace.c:457
#, c-format
msgid "could not parse %s"
msgstr "„%s“ не може да се анализира"
-#: commit.c:54
+#: commit.c:55
#, c-format
msgid "%s %s is not a commit!"
msgstr "%s %s не е подаване!"
-#: commit.c:194
+#: commit.c:196
msgid ""
"Support for <GIT_DIR>/info/grafts is deprecated\n"
"and will be removed in a future Git version.\n"
@@ -2642,29 +2656,29 @@
"\n"
" git config advice.graftFileDeprecated false"
-#: commit.c:1237
+#: commit.c:1239
#, c-format
msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
msgstr ""
"Подаването „%s“ е с недоверен подпис от GPG, който твърди, че е на „%s“."
-#: commit.c:1241
+#: commit.c:1243
#, c-format
msgid "Commit %s has a bad GPG signature allegedly by %s."
msgstr ""
"Подаването „%s“ е с неправилен подпис от GPG, който твърди, че е на „%s“."
-#: commit.c:1244
+#: commit.c:1246
#, c-format
msgid "Commit %s does not have a GPG signature."
msgstr "Подаването „%s“ е без подпис от GPG."
-#: commit.c:1247
+#: commit.c:1249
#, c-format
msgid "Commit %s has a good GPG signature by %s\n"
msgstr "Подаването „%s“ е с коректен подпис от GPG на „%s“.\n"
-#: commit.c:1501
+#: commit.c:1503
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"
@@ -2678,7 +2692,7 @@
msgid "memory exhausted"
msgstr "паметта свърши"
-#: config.c:126
+#: config.c:125
#, c-format
msgid ""
"exceeded maximum include depth (%d) while including\n"
@@ -2693,35 +2707,35 @@
" %s\n"
"Това може да се дължи на зацикляне при вмъкването."
-#: config.c:142
+#: config.c:141
#, c-format
msgid "could not expand include path '%s'"
msgstr "пътят за вмъкване „%s“не може да бъде разширен"
-#: config.c:153
+#: config.c:152
msgid "relative config includes must come from files"
msgstr "относителните вмъквания на конфигурации трябва да идват от файлове"
-#: config.c:199
+#: config.c:201
msgid "relative config include conditionals must come from files"
msgstr "относителните условни изрази за вмъкване трябва да идват от файлове"
-#: config.c:396
+#: config.c:398
#, c-format
msgid "invalid config format: %s"
msgstr "неправилен формат на настройка: %s"
-#: config.c:400
+#: config.c:402
#, c-format
msgid "missing environment variable name for configuration '%.*s'"
msgstr "липсва име на променлива на средата за настройката „%.*s“"
-#: config.c:405
+#: config.c:407
#, c-format
msgid "missing environment variable '%s' for configuration '%.*s'"
msgstr "липсва променлива на средата „%s“ за настройката „%.*s“"
-#: config.c:442
+#: config.c:443
#, c-format
msgid "key does not contain a section: %s"
msgstr "ключът не съдържа раздел: „%s“"
@@ -2731,168 +2745,168 @@
msgid "key does not contain variable name: %s"
msgstr "ключът не съдържа име на променлива: „%s“"
-#: config.c:472 sequencer.c:2785
+#: config.c:470 sequencer.c:2804
#, c-format
msgid "invalid key: %s"
msgstr "неправилен ключ: „%s“"
-#: config.c:478
+#: config.c:475
#, c-format
msgid "invalid key (newline): %s"
msgstr "неправилен ключ (нов ред): „%s“"
-#: config.c:511
+#: config.c:495
msgid "empty config key"
msgstr "празен ключ за настройка"
-#: config.c:529 config.c:541
+#: config.c:513 config.c:525
#, c-format
msgid "bogus config parameter: %s"
msgstr "неправилен конфигурационен параметър: „%s“"
-#: config.c:555 config.c:572 config.c:579 config.c:588
+#: config.c:539 config.c:556 config.c:563 config.c:572
#, c-format
msgid "bogus format in %s"
msgstr "неправилен формат в „%s“"
-#: config.c:622
+#: config.c:606
#, c-format
msgid "bogus count in %s"
msgstr "неправилен брой в „%s“"
-#: config.c:626
+#: config.c:610
#, c-format
msgid "too many entries in %s"
msgstr "прекалено много записи в „%s“"
-#: config.c:636
+#: config.c:620
#, c-format
msgid "missing config key %s"
msgstr "ключът за настройка „%s“ липсва"
-#: config.c:644
+#: config.c:628
#, c-format
msgid "missing config value %s"
msgstr "стойността за настройка „%s“ липсва"
-#: config.c:995
+#: config.c:979
#, c-format
msgid "bad config line %d in blob %s"
msgstr "неправилен ред за настройки %d в BLOB „%s“"
-#: config.c:999
+#: config.c:983
#, c-format
msgid "bad config line %d in file %s"
msgstr "неправилен ред за настройки %d във файла „%s“"
-#: config.c:1003
+#: config.c:987
#, c-format
msgid "bad config line %d in standard input"
msgstr "неправилен ред за настройки %d на стандартния вход"
-#: config.c:1007
+#: config.c:991
#, c-format
msgid "bad config line %d in submodule-blob %s"
msgstr "неправилен ред за настройки %d в BLOB за подмодул „%s“"
-#: config.c:1011
+#: config.c:995
#, c-format
msgid "bad config line %d in command line %s"
msgstr "неправилен ред за настройки %d на командния ред „%s“"
-#: config.c:1015
+#: config.c:999
#, c-format
msgid "bad config line %d in %s"
msgstr "неправилен ред за настройки %d в „%s“"
-#: config.c:1152
+#: config.c:1136
msgid "out of range"
msgstr "извън диапазона"
-#: config.c:1152
+#: config.c:1136
msgid "invalid unit"
msgstr "неправилна мерна единица"
-#: config.c:1153
+#: config.c:1137
#, c-format
msgid "bad numeric config value '%s' for '%s': %s"
msgstr "неправилна числова стойност „%s“ за „%s“: %s"
-#: config.c:1163
+#: config.c:1147
#, c-format
msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
msgstr "неправилна числова стойност „%s“ за „%s“ в BLOB „%s“: %s"
-#: config.c:1166
+#: config.c:1150
#, c-format
msgid "bad numeric config value '%s' for '%s' in file %s: %s"
msgstr "неправилна числова стойност „%s“ за „%s“ във файла „%s“: %s"
-#: config.c:1169
+#: config.c:1153
#, c-format
msgid "bad numeric config value '%s' for '%s' in standard input: %s"
msgstr "неправилна числова стойност „%s“ за „%s“ на стандартния вход: %s"
-#: config.c:1172
+#: config.c:1156
#, c-format
msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
msgstr "неправилна числова стойност „%s“ за „%s“ в BLOB от подмодул „%s“: %s"
-#: config.c:1175
+#: config.c:1159
#, c-format
msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
msgstr "неправилна числова стойност „%s“ за „%s“ на командния ред „%s“: %s"
-#: config.c:1178
+#: config.c:1162
#, c-format
msgid "bad numeric config value '%s' for '%s' in %s: %s"
msgstr "неправилна числова стойност „%s“ за „%s“ в %s: %s"
-#: config.c:1257
+#: config.c:1241
#, c-format
msgid "bad boolean config value '%s' for '%s'"
msgstr "неправилна булева стойност „%s“ за „%s“"
-#: config.c:1275
+#: config.c:1259
#, c-format
msgid "failed to expand user dir in: '%s'"
msgstr "домашната папка на потребителя не може да бъде открита: „%s“"
-#: config.c:1284
+#: config.c:1268
#, c-format
msgid "'%s' for '%s' is not a valid timestamp"
msgstr "„%s“ не е правилна стойност за време за „%s“"
-#: config.c:1377
+#: config.c:1361
#, c-format
msgid "abbrev length out of range: %d"
msgstr "дължината на съкращаване е извън интервала ([4; 40]): %d"
-#: config.c:1391 config.c:1402
+#: config.c:1375 config.c:1386
#, c-format
msgid "bad zlib compression level %d"
msgstr "неправилно ниво на компресиране: %d"
-#: config.c:1494
+#: config.c:1476
msgid "core.commentChar should only be one character"
msgstr "настройката „core.commentChar“ трябва да е само един знак"
-#: config.c:1527
+#: config.c:1509
#, c-format
msgid "invalid mode for object creation: %s"
msgstr "неправилен режим за създаването на обекти: %s"
-#: config.c:1599
+#: config.c:1581
#, c-format
msgid "malformed value for %s"
msgstr "неправилна стойност за „%s“"
-#: config.c:1625
+#: config.c:1607
#, c-format
msgid "malformed value for %s: %s"
msgstr "неправилна стойност за „%s“: „%s“"
-#: config.c:1626
+#: config.c:1608
msgid "must be one of nothing, matching, simple, upstream or current"
msgstr ""
"трябва да е една от следните стойности: „nothing“ (без изтласкване при липса "
@@ -2900,132 +2914,132 @@
"„simple“ (клонът със същото име, от който се издърпва), „upstream“ (клонът, "
"от който се издърпва) или „current“ (клонът със същото име)"
-#: config.c:1687 builtin/pack-objects.c:4084
+#: config.c:1669 builtin/pack-objects.c:4053
#, c-format
msgid "bad pack compression level %d"
msgstr "неправилно ниво на компресиране при пакетиране: %d"
-#: config.c:1809
+#: config.c:1792
#, c-format
msgid "unable to load config blob object '%s'"
msgstr "обектът-BLOB „%s“ с конфигурации не може да се зареди"
-#: config.c:1812
+#: config.c:1795
#, c-format
msgid "reference '%s' does not point to a blob"
msgstr "указателят „%s“ не сочи към обект-BLOB"
-#: config.c:1829
+#: config.c:1813
#, c-format
msgid "unable to resolve config blob '%s'"
msgstr "обектът-BLOB „%s“ с конфигурации не може да бъде открит"
-#: config.c:1874
+#: config.c:1858
#, c-format
msgid "failed to parse %s"
msgstr "„%s“ не може да бъде анализиран"
-#: config.c:1930
+#: config.c:1914
msgid "unable to parse command-line config"
msgstr "неправилни настройки от командния ред"
-#: config.c:2294
+#: config.c:2282
msgid "unknown error occurred while reading the configuration files"
msgstr "неочаквана грешка при изчитането на конфигурационните файлове"
-#: config.c:2468
+#: config.c:2456
#, c-format
msgid "Invalid %s: '%s'"
msgstr "Неправилен %s: „%s“"
-#: config.c:2513
+#: config.c:2501
#, c-format
msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
msgstr ""
"стойността на „splitIndex.maxPercentChange“ трябва да е между 1 и 100, а не "
"%d"
-#: config.c:2559
+#: config.c:2547
#, c-format
msgid "unable to parse '%s' from command-line config"
msgstr "неразпозната стойност „%s“ от командния ред"
-#: config.c:2561
+#: config.c:2549
#, c-format
msgid "bad config variable '%s' in file '%s' at line %d"
msgstr "неправилна настройка „%s“ във файла „%s“ на ред №%d"
-#: config.c:2645
+#: config.c:2633
#, c-format
msgid "invalid section name '%s'"
msgstr "неправилно име на раздел: „%s“"
-#: config.c:2677
+#: config.c:2665
#, c-format
msgid "%s has multiple values"
msgstr "зададени са няколко стойности за „%s“"
-#: config.c:2706
+#: config.c:2694
#, c-format
msgid "failed to write new configuration file %s"
msgstr "новият конфигурационен файл „%s“ не може да бъде запазен"
-#: config.c:2958 config.c:3285
+#: config.c:2946 config.c:3273
#, c-format
msgid "could not lock config file %s"
msgstr "конфигурационният файл „%s“ не може да бъде заключен"
-#: config.c:2969
+#: config.c:2957
#, c-format
msgid "opening %s"
msgstr "отваряне на „%s“"
-#: config.c:3006 builtin/config.c:361
+#: config.c:2994 builtin/config.c:361
#, c-format
msgid "invalid pattern: %s"
msgstr "неправилен шаблон: %s"
-#: config.c:3031
+#: config.c:3019
#, c-format
msgid "invalid config file %s"
msgstr "неправилен конфигурационен файл: „%s“"
-#: config.c:3044 config.c:3298
+#: config.c:3032 config.c:3286
#, c-format
msgid "fstat on %s failed"
msgstr "неуспешно изпълнение на „fstat“ върху „%s“"
-#: config.c:3055
+#: config.c:3043
#, c-format
msgid "unable to mmap '%s'%s"
msgstr "неуспешно изпълнение на „mmap“ върху „%s“%s"
-#: config.c:3065 config.c:3303
+#: config.c:3053 config.c:3291
#, c-format
msgid "chmod on %s failed"
msgstr "неуспешна смяна на права с „chmod“ върху „%s“"
-#: config.c:3150 config.c:3400
+#: config.c:3138 config.c:3388
#, c-format
msgid "could not write config file %s"
msgstr "конфигурационният файл „%s“ не може да бъде записан"
-#: config.c:3184
+#: config.c:3172
#, c-format
msgid "could not set '%s' to '%s'"
msgstr "„%s“ не може да се зададе да е „%s“"
-#: config.c:3186 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
+#: config.c:3174 builtin/remote.c:662 builtin/remote.c:860 builtin/remote.c:868
#, c-format
msgid "could not unset '%s'"
msgstr "„%s“ не може да се премахне"
-#: config.c:3276
+#: config.c:3264
#, c-format
msgid "invalid section name: %s"
msgstr "неправилно име на раздел: %s"
-#: config.c:3443
+#: config.c:3431
#, c-format
msgid "missing value for '%s'"
msgstr "липсва стойност за „%s“"
@@ -3061,72 +3075,72 @@
msgstr ""
"след първоначалната обява на възможностите се очаква изчистване на буферите"
-#: connect.c:263
+#: connect.c:265
#, c-format
msgid "ignoring capabilities after first line '%s'"
msgstr "пропускане на възможностите след първия ред „%s“"
-#: connect.c:284
+#: connect.c:286
msgid "protocol error: unexpected capabilities^{}"
msgstr "протоколна грешка: неочаквани възможности^{}"
-#: connect.c:306
+#: connect.c:308
#, c-format
msgid "protocol error: expected shallow sha-1, got '%s'"
msgstr "протоколна грешка: очаква се SHA1 на плитък обект, а бе получено: „%s“"
-#: connect.c:308
+#: connect.c:310
msgid "repository on the other end cannot be shallow"
msgstr "отсрещното хранилище не може да е плитко"
-#: connect.c:347
+#: connect.c:349
msgid "invalid packet"
msgstr "неправилен пакет"
-#: connect.c:367
+#: connect.c:369
#, c-format
msgid "protocol error: unexpected '%s'"
msgstr "протоколна грешка: неочаквано „%s“"
-#: connect.c:497
+#: connect.c:499
#, c-format
msgid "unknown object format '%s' specified by server"
msgstr "сървърът указа непознат формат на обект: „%s“"
-#: connect.c:526
+#: connect.c:528
#, c-format
msgid "invalid ls-refs response: %s"
msgstr "неправилен отговор на „ls-refs“: „%s“"
-#: connect.c:530
+#: connect.c:532
msgid "expected flush after ref listing"
msgstr "след изброяването на указателите се очаква изчистване на буферите"
-#: connect.c:533
+#: connect.c:535
msgid "expected response end packet after ref listing"
msgstr "след изброяването на указателите се очаква пакет за край"
-#: connect.c:666
+#: connect.c:670
#, c-format
msgid "protocol '%s' is not supported"
msgstr "протокол „%s“ не се поддържа"
-#: connect.c:717
+#: connect.c:721
msgid "unable to set SO_KEEPALIVE on socket"
msgstr "неуспешно задаване на „SO_KEEPALIVE“ на гнездо"
-#: connect.c:757 connect.c:820
+#: connect.c:761 connect.c:824
#, c-format
msgid "Looking up %s ... "
msgstr "Търсене на „%s“… "
-#: connect.c:761
+#: connect.c:765
#, 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:765 connect.c:836
+#: connect.c:769 connect.c:840
#, c-format
msgid ""
"done.\n"
@@ -3135,7 +3149,7 @@
"готово.\n"
"Свързване към „%s“ (порт %s)…"
-#: connect.c:787 connect.c:864
+#: connect.c:791 connect.c:868
#, c-format
msgid ""
"unable to connect to %s:\n"
@@ -3145,90 +3159,90 @@
"%s"
#. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:793 connect.c:870
+#: connect.c:797 connect.c:874
msgid "done."
msgstr "действието завърши."
-#: connect.c:824
+#: connect.c:828
#, c-format
msgid "unable to look up %s (%s)"
msgstr "„%s“ не може да се открие (%s)"
-#: connect.c:830
+#: connect.c:834
#, c-format
msgid "unknown port %s"
msgstr "непознат порт „%s“"
-#: connect.c:967 connect.c:1299
+#: connect.c:971 connect.c:1303
#, c-format
msgid "strange hostname '%s' blocked"
msgstr "необичайното име на хост „%s“ е блокирано"
-#: connect.c:969
+#: connect.c:973
#, c-format
msgid "strange port '%s' blocked"
msgstr "необичайният порт „%s“ е блокиран"
-#: connect.c:979
+#: connect.c:983
#, c-format
msgid "cannot start proxy %s"
msgstr "посредникът „%s“ не може да се стартира"
-#: connect.c:1050
+#: connect.c:1054
msgid "no path specified; see 'git help pull' for valid url syntax"
msgstr ""
"не е указан път. Проверете синтаксиса с командата:\n"
"\n"
" git help pull"
-#: connect.c:1190
+#: connect.c:1194
msgid "newline is forbidden in git:// hosts and repo paths"
msgstr ""
"знакът за нов ред не е позволен в адресите и в пътищата до хранилищата "
"„git://“"
-#: connect.c:1247
+#: connect.c:1251
msgid "ssh variant 'simple' does not support -4"
msgstr "вариантът за „ssh“ — „simple“ (опростен), не поддържа опцията „-4“"
-#: connect.c:1259
+#: connect.c:1263
msgid "ssh variant 'simple' does not support -6"
msgstr "вариантът за „ssh“ — „simple“ (опростен), не поддържа опцията „-6“"
-#: connect.c:1276
+#: connect.c:1280
msgid "ssh variant 'simple' does not support setting port"
msgstr ""
"вариантът за „ssh“ — „simple“ (опростен), не поддържа задаването на порт"
-#: connect.c:1388
+#: connect.c:1392
#, c-format
msgid "strange pathname '%s' blocked"
msgstr "необичайният път „%s“ е блокиран"
-#: connect.c:1436
+#: connect.c:1440
msgid "unable to fork"
msgstr "неуспешно създаване на процес"
-#: connected.c:108 builtin/fsck.c:189 builtin/prune.c:45
+#: connected.c:109 builtin/fsck.c:189 builtin/prune.c:45
msgid "Checking connectivity"
msgstr "Проверка на свързаността"
-#: connected.c:120
+#: connected.c:122
msgid "Could not run 'git rev-list'"
msgstr "Командата „git rev-list“ не може да бъде изпълнена."
-#: connected.c:144
+#: connected.c:146
msgid "failed write to rev-list"
msgstr "неуспешен запис на списъка с версиите"
-#: connected.c:149
+#: connected.c:151
msgid "failed to close rev-list's stdin"
msgstr "стандартният вход на списъка с версиите не може да бъде затворен"
#: convert.c:183
#, c-format
msgid "illegal crlf_action %d"
-msgstr "неправилно действие за край на ред: %d"
+msgstr "неправилно действие за край на ред (crlf_action): %d"
#: convert.c:196
#, c-format
@@ -3338,7 +3352,7 @@
msgid "path name too long for external filter"
msgstr "пътят е прекалено дълъг за външен филтър"
-#: convert.c:934
+#: convert.c:935
#, c-format
msgid ""
"external filter '%s' is not available anymore although not all paths have "
@@ -3347,17 +3361,17 @@
"външният филтър „%s“ вече не е наличен, въпреки че не всички пътища са "
"филтрирани"
-#: convert.c:1234
+#: convert.c:1236
msgid "true/false are no valid working-tree-encodings"
msgstr ""
"„true“/„false“ (истина/лъжа̀) не може да са кодирания на работното дърво"
-#: convert.c:1414 convert.c:1447
+#: convert.c:1416 convert.c:1449
#, c-format
msgid "%s: clean filter '%s' failed"
msgstr "%s: неуспешно изпълнение на декодиращ филтър „%s“"
-#: convert.c:1490
+#: convert.c:1492
#, c-format
msgid "%s: smudge filter %s failed"
msgstr "%s: неуспешно изпълнение на кодиращ филтър „%s“"
@@ -3375,17 +3389,17 @@
msgid "refusing to work with credential missing protocol field"
msgstr "адресът трябва задължително да съдържа протокол"
-#: credential.c:394
+#: credential.c:395
#, c-format
msgid "url contains a newline in its %s component: %s"
msgstr "адресът съдържа нов ред в частта за %s: %s"
-#: credential.c:438
+#: credential.c:439
#, c-format
msgid "url has no scheme: %s"
msgstr "адресът е без схема: %s"
-#: credential.c:511
+#: credential.c:512
#, c-format
msgid "credential url cannot be parsed: %s"
msgstr "адресът за идентификация не може да се анализира: „%s“"
@@ -3489,23 +3503,23 @@
msgid "unknown value for --diff-merges: %s"
msgstr "непозната стойност за опцията „--diff-merges“: „%s“"
-#: diff-lib.c:557
+#: diff-lib.c:561
msgid "--merge-base does not work with ranges"
msgstr "опцията „--merge-base“ не работи с диапазони"
-#: diff-lib.c:559
+#: diff-lib.c:563
msgid "--merge-base only works with commits"
msgstr "опцията „--merge-base“ работи само с подавания"
-#: diff-lib.c:576
+#: diff-lib.c:580
msgid "unable to get HEAD"
msgstr "Указателят „HEAD“ не може да бъде получен"
-#: diff-lib.c:583
+#: diff-lib.c:587
msgid "no merge base found"
msgstr "липсва база за сливане"
-#: diff-lib.c:585
+#: diff-lib.c:589
msgid "multiple merge bases found"
msgstr "много бази за сливане"
@@ -3521,28 +3535,28 @@
"Не е хранилище на git. Ползвайте опцията „--no-index“, за да сравните "
"пътища извън работно дърво"
-#: diff.c:156
+#: diff.c:157
#, c-format
msgid " Failed to parse dirstat cut-off percentage '%s'\n"
msgstr ""
" Неуспешно разпознаване на „%s“ като процент-праг за статистиката по "
"директории\n"
-#: diff.c:161
+#: diff.c:162
#, c-format
msgid " Unknown dirstat parameter '%s'\n"
msgstr " Непознат параметър „%s“ за статистиката по директории'\n"
-#: diff.c:297
+#: diff.c:298
msgid ""
"color moved setting must be one of 'no', 'default', 'blocks', 'zebra', "
"'dimmed-zebra', 'plain'"
msgstr ""
"настройката за цвят за преместване трябва да е една от: „no“ (без), "
-"„default“ (стандартно), „blocks“ (парчета), „zebra“ (райе), "
-"„dimmed_zebra“ (тъмно райе), „plain“ (обикновено)"
+"„default“ (стандартно), „blocks“ (парчета), „zebra“ (райе), „dimmed-"
+"zebra“ (тъмно райе), „plain“ (обикновено)"
-#: diff.c:325
+#: diff.c:326
#, c-format
msgid ""
"unknown color-moved-ws mode '%s', possible values are 'ignore-space-change', "
@@ -3555,7 +3569,7 @@
"„allow-indentation-change“ (позволяване на промените в празните знаци за "
"форматиране)"
-#: diff.c:333
+#: diff.c:334
msgid ""
"color-moved-ws: allow-indentation-change cannot be combined with other "
"whitespace modes"
@@ -3563,12 +3577,12 @@
"„color-moved-ws“: „allow-indentation-change“ е несъвместима с другите режими "
"за празни знаци"
-#: diff.c:410
+#: diff.c:411
#, c-format
msgid "Unknown value for 'diff.submodule' config variable: '%s'"
msgstr "Непозната стойност „%s“ за настройката „diff.submodule“"
-#: diff.c:470
+#: diff.c:471
#, c-format
msgid ""
"Found errors in 'diff.dirstat' config variable:\n"
@@ -3577,53 +3591,53 @@
"Грешки в настройката „diff.dirstat“:\n"
"%s"
-#: diff.c:4282
+#: diff.c:4290
#, c-format
msgid "external diff died, stopping at %s"
msgstr ""
"външната програма за разлики завърши неуспешно. Спиране на работата при „%s“"
-#: diff.c:4634
+#: diff.c:4642
msgid "--name-only, --name-status, --check and -s are mutually exclusive"
msgstr ""
"опциите „--name-only“, „--name-status“, „--check“ и „-s“ са несъвместими "
"една с друга"
-#: diff.c:4637
+#: diff.c:4645
msgid "-G, -S and --find-object are mutually exclusive"
msgstr "опциите „-G“, „-S“ и „--find-object“ са несъвместими една с друга"
-#: diff.c:4640
+#: diff.c:4648
msgid ""
"-G and --pickaxe-regex are mutually exclusive, use --pickaxe-regex with -S"
msgstr ""
"опциите „-G“ и „--pickaxe-regex“ са несъвместими една с друга. Пробвайте „--"
"pickaxe-regex“ със „-S“"
-#: diff.c:4643
+#: diff.c:4651
msgid ""
-"---pickaxe-all and --find-object are mutually exclusive, use --pickaxe-all "
+"--pickaxe-all and --find-object are mutually exclusive, use --pickaxe-all "
"with -G and -S"
msgstr ""
"опциите „--pickaxe-all“ и „--find-object“ са несъвместими една с друга. "
"Пробвайте „--pickaxe-all“ с „-G“ и „-S“"
-#: diff.c:4722
+#: diff.c:4730
msgid "--follow requires exactly one pathspec"
msgstr "опцията „--follow“ изисква точно един път"
-#: diff.c:4770
+#: diff.c:4778
#, c-format
msgid "invalid --stat value: %s"
msgstr "неправилна стойност за „--stat“: %s"
-#: diff.c:4775 diff.c:4780 diff.c:4785 diff.c:4790 diff.c:5318
-#: parse-options.c:197 parse-options.c:201 builtin/commit-graph.c:180
+#: diff.c:4783 diff.c:4788 diff.c:4793 diff.c:4798 diff.c:5326
+#: parse-options.c:217 parse-options.c:221
#, c-format
msgid "%s expects a numerical value"
msgstr "опцията „%s“ очаква число за аргумент"
-#: diff.c:4807
+#: diff.c:4815
#, c-format
msgid ""
"Failed to parse --dirstat/-X option parameter:\n"
@@ -3632,44 +3646,44 @@
"Неразпознат параметър към опцията „--dirstat/-X“:\n"
"%s"
-#: diff.c:4892
+#: diff.c:4900
#, c-format
msgid "unknown change class '%c' in --diff-filter=%s"
msgstr "непознат вид промяна: „%c“ в „--diff-filter=%s“"
-#: diff.c:4916
+#: diff.c:4924
#, c-format
msgid "unknown value after ws-error-highlight=%.*s"
msgstr "непозната стойност след „ws-error-highlight=%.*s“"
-#: diff.c:4930
+#: diff.c:4938
#, c-format
msgid "unable to resolve '%s'"
msgstr "„%s“ не може да се открие"
-#: diff.c:4980 diff.c:4986
+#: diff.c:4988 diff.c:4994
#, c-format
msgid "%s expects <n>/<m> form"
msgstr ""
"опцията „%s“ изисква стойности за МИНИМАЛЕН_%%_ПРОМЯНА_ЗА_ИЗТОЧНИК_/"
"МАКСИМАЛЕН_%%_ПРОМЯНА_ЗА_ЗАМЯНА от"
-#: diff.c:4998
+#: diff.c:5006
#, c-format
msgid "%s expects a character, got '%s'"
msgstr "опцията „%s“ изисква знак, а не: „%s“"
-#: diff.c:5019
+#: diff.c:5027
#, c-format
msgid "bad --color-moved argument: %s"
msgstr "неправилен аргумент за „--color-moved“: „%s“"
-#: diff.c:5038
+#: diff.c:5046
#, c-format
msgid "invalid mode '%s' in --color-moved-ws"
msgstr "неправилен режим „%s“ за „ --color-moved-ws“"
-#: diff.c:5078
+#: diff.c:5086
msgid ""
"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
"\"histogram\""
@@ -3678,158 +3692,158 @@
"Майерс), „minimal“ (минимизиране на разликите), „patience“ (пасианс) и "
"„histogram“ (хистограмен)"
-#: diff.c:5114 diff.c:5134
+#: diff.c:5122 diff.c:5142
#, c-format
msgid "invalid argument to %s"
msgstr "неправилен аргумент към „%s“"
-#: diff.c:5238
+#: diff.c:5246
#, c-format
msgid "invalid regex given to -I: '%s'"
msgstr "неправилен регулярен израз подаден към „-I“: „%s“"
-#: diff.c:5287
+#: diff.c:5295
#, c-format
msgid "failed to parse --submodule option parameter: '%s'"
msgstr "неразпознат параметър към опцията „--submodule“: „%s“"
-#: diff.c:5343
+#: diff.c:5351
#, c-format
msgid "bad --word-diff argument: %s"
msgstr "неправилен аргумент към „--word-diff“: „%s“"
-#: diff.c:5379
+#: diff.c:5387
msgid "Diff output format options"
msgstr "Формат на изхода за разликите"
-#: diff.c:5381 diff.c:5387
+#: diff.c:5389 diff.c:5395
msgid "generate patch"
msgstr "създаване на кръпки"
-#: diff.c:5384 builtin/log.c:179
+#: diff.c:5392 builtin/log.c:179
msgid "suppress diff output"
msgstr "без извеждане на разликите"
-#: diff.c:5389 diff.c:5503 diff.c:5510
+#: diff.c:5397 diff.c:5511 diff.c:5518
msgid "<n>"
msgstr "БРОЙ"
-#: diff.c:5390 diff.c:5393
+#: diff.c:5398 diff.c:5401
msgid "generate diffs with <n> lines context"
msgstr "файловете с разлики да са с контекст с такъв БРОЙ редове"
-#: diff.c:5395
+#: diff.c:5403
msgid "generate the diff in raw format"
msgstr "файловете с разлики да са в суров формат"
-#: diff.c:5398
+#: diff.c:5406
msgid "synonym for '-p --raw'"
-msgstr "псевдоним на „-p --stat“"
+msgstr "псевдоним на „-p --raw“"
-#: diff.c:5402
+#: diff.c:5410
msgid "synonym for '-p --stat'"
msgstr "псевдоним на „-p --stat“"
-#: diff.c:5406
+#: diff.c:5414
msgid "machine friendly --stat"
msgstr "„--stat“ във формат за четене от програма"
-#: diff.c:5409
+#: diff.c:5417
msgid "output only the last line of --stat"
msgstr "извеждане само на последния ред на „--stat“"
-#: diff.c:5411 diff.c:5419
+#: diff.c:5419 diff.c:5427
msgid "<param1,param2>..."
msgstr "ПАРАМЕТЪР_1, ПАРАМЕТЪР_2, …"
-#: diff.c:5412
+#: diff.c:5420
msgid ""
"output the distribution of relative amount of changes for each sub-directory"
msgstr "извеждане на разпределението на промените за всяка поддиректория"
-#: diff.c:5416
+#: diff.c:5424
msgid "synonym for --dirstat=cumulative"
msgstr "псевдоним на „--dirstat=cumulative“"
-#: diff.c:5420
+#: diff.c:5428
msgid "synonym for --dirstat=files,param1,param2..."
-msgstr "псевдоним на „--dirstat=ФАЙЛОВЕ,ПАРАМЕТЪР_1,ПАРАМЕТЪР_2,…“"
+msgstr "псевдоним на „--dirstat=ФАЙЛ…,ПАРАМЕТЪР_1,ПАРАМЕТЪР_2,…“"
-#: diff.c:5424
+#: diff.c:5432
msgid "warn if changes introduce conflict markers or whitespace errors"
msgstr ""
"предупреждаване, ако промените водят до маркери за конфликт или грешки в "
"празните знаци"
-#: diff.c:5427
+#: diff.c:5435
msgid "condensed summary such as creations, renames and mode changes"
msgstr ""
"съкратено резюме на създадените, преименуваните и файловете с промяна на "
"режима на достъп"
-#: diff.c:5430
+#: diff.c:5438
msgid "show only names of changed files"
msgstr "извеждане само на имената на променените файлове"
-#: diff.c:5433
+#: diff.c:5441
msgid "show only names and status of changed files"
msgstr "извеждане само на имената и статистиката за променените файлове"
-#: diff.c:5435
+#: diff.c:5443
msgid "<width>[,<name-width>[,<count>]]"
msgstr "ШИРОЧИНА[,ИМЕ-ШИРОЧИНА[,БРОЙ]]"
-#: diff.c:5436
+#: diff.c:5444
msgid "generate diffstat"
msgstr "извеждане на статистика за промените"
-#: diff.c:5438 diff.c:5441 diff.c:5444
+#: diff.c:5446 diff.c:5449 diff.c:5452
msgid "<width>"
msgstr "ШИРОЧИНА"
-#: diff.c:5439
+#: diff.c:5447
msgid "generate diffstat with a given width"
msgstr "статистика с такава ШИРОЧИНА за промените"
-#: diff.c:5442
+#: diff.c:5450
msgid "generate diffstat with a given name width"
msgstr "статистика за промените с такава ШИРОЧИНА на имената"
-#: diff.c:5445
+#: diff.c:5453
msgid "generate diffstat with a given graph width"
msgstr "статистика за промените с такава ШИРОЧИНА на гра̀фа"
-#: diff.c:5447
+#: diff.c:5455
msgid "<count>"
msgstr "БРОЙ"
-#: diff.c:5448
+#: diff.c:5456
msgid "generate diffstat with limited lines"
msgstr "ограничаване на БРОя на редовете в статистиката за промените"
-#: diff.c:5451
+#: diff.c:5459
msgid "generate compact summary in diffstat"
msgstr "кратко резюме в статистиката за промените"
-#: diff.c:5454
+#: diff.c:5462
msgid "output a binary diff that can be applied"
msgstr "извеждане на двоична разлика във вид за прилагане"
-#: diff.c:5457
+#: diff.c:5465
msgid "show full pre- and post-image object names on the \"index\" lines"
msgstr ""
"показване на пълните имена на обекти в редовете за индекса при вариантите "
"преди и след промяната"
-#: diff.c:5459
+#: diff.c:5467
msgid "show colored diff"
msgstr "разлики в цвят"
-#: diff.c:5460
+#: diff.c:5468
msgid "<kind>"
msgstr "ВИД"
-#: diff.c:5461
+#: diff.c:5469
msgid ""
"highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
"diff"
@@ -3837,7 +3851,7 @@
"грешките в празните знаци да се указват в редовете за контекста, вариантите "
"преди и след разликата,"
-#: diff.c:5464
+#: diff.c:5472
msgid ""
"do not munge pathnames and use NULs as output field terminators in --raw or "
"--numstat"
@@ -3845,261 +3859,261 @@
"без преименуване на пътищата. Да се използват нулеви байтове за разделители "
"на полета в изхода при ползване на опцията „--raw“ или „--numstat“"
-#: diff.c:5467 diff.c:5470 diff.c:5473 diff.c:5582
+#: diff.c:5475 diff.c:5478 diff.c:5481 diff.c:5590
msgid "<prefix>"
msgstr "ПРЕФИКС"
-#: diff.c:5468
+#: diff.c:5476
msgid "show the given source prefix instead of \"a/\""
msgstr "префикс вместо „a/“ за източник"
-#: diff.c:5471
+#: diff.c:5479
msgid "show the given destination prefix instead of \"b/\""
msgstr "префикс вместо „b/“ за цел"
-#: diff.c:5474
+#: diff.c:5482
msgid "prepend an additional prefix to every line of output"
msgstr "добавяне на допълнителен префикс за всеки ред на изхода"
-#: diff.c:5477
+#: diff.c:5485
msgid "do not show any source or destination prefix"
msgstr "без префикс за източника и целта"
-#: diff.c:5480
+#: diff.c:5488
msgid "show context between diff hunks up to the specified number of lines"
msgstr ""
"извеждане на контекст между последователните парчета с разлики от указания "
"БРОЙ редове"
-#: diff.c:5484 diff.c:5489 diff.c:5494
+#: diff.c:5492 diff.c:5497 diff.c:5502
msgid "<char>"
msgstr "ЗНАК"
-#: diff.c:5485
+#: diff.c:5493
msgid "specify the character to indicate a new line instead of '+'"
msgstr "знак вместо „+“ за нов вариант на ред"
-#: diff.c:5490
+#: diff.c:5498
msgid "specify the character to indicate an old line instead of '-'"
msgstr "знак вместо „-“ за стар вариант на ред"
-#: diff.c:5495
+#: diff.c:5503
msgid "specify the character to indicate a context instead of ' '"
msgstr "знак вместо „ “ за контекст"
-#: diff.c:5498
+#: diff.c:5506
msgid "Diff rename options"
msgstr "Настройки за разлики с преименуване"
-#: diff.c:5499
+#: diff.c:5507
msgid "<n>[/<m>]"
msgstr "МИНИМАЛЕН_%_ПРОМЯНА_ЗА_ИЗТОЧНИК[/МАКСИМАЛEН_%_ПРОМЯНА_ЗА_ЗАМЯНА]"
-#: diff.c:5500
+#: diff.c:5508
msgid "break complete rewrite changes into pairs of delete and create"
msgstr ""
"заместване на пълните промени с последователност от изтриване и създаване"
-#: diff.c:5504
+#: diff.c:5512
msgid "detect renames"
msgstr "засичане на преименуванията"
-#: diff.c:5508
+#: diff.c:5516
msgid "omit the preimage for deletes"
msgstr "без предварителен вариант при изтриване"
-#: diff.c:5511
+#: diff.c:5519
msgid "detect copies"
msgstr "засичане на копиранията"
-#: diff.c:5515
+#: diff.c:5523
msgid "use unmodified files as source to find copies"
msgstr "търсене на копирано и от непроменените файлове"
-#: diff.c:5517
+#: diff.c:5525
msgid "disable rename detection"
msgstr "без търсене на преименувания"
-#: diff.c:5520
+#: diff.c:5528
msgid "use empty blobs as rename source"
msgstr "празни обекти като източник при преименувания"
-#: diff.c:5522
+#: diff.c:5530
msgid "continue listing the history of a file beyond renames"
msgstr ""
"продължаване на извеждането на историята — без отрязването при преименувания "
"на файл"
-#: diff.c:5525
+#: diff.c:5533
msgid ""
"prevent rename/copy detection if the number of rename/copy targets exceeds "
"given limit"
msgstr ""
"без засичане на преименувания/копирания, ако броят им надвишава тази стойност"
-#: diff.c:5527
+#: diff.c:5535
msgid "Diff algorithm options"
msgstr "Опции към алгоритъма за разлики"
-#: diff.c:5529
+#: diff.c:5537
msgid "produce the smallest possible diff"
msgstr "търсене на възможно най-малка разлика"
-#: diff.c:5532
+#: diff.c:5540
msgid "ignore whitespace when comparing lines"
msgstr "без промени в празните знаци при сравняване на редове"
-#: diff.c:5535
+#: diff.c:5543
msgid "ignore changes in amount of whitespace"
msgstr "без промени в празните знаци"
-#: diff.c:5538
+#: diff.c:5546
msgid "ignore changes in whitespace at EOL"
msgstr "без промени в празните знаци в края на редовете"
-#: diff.c:5541
+#: diff.c:5549
msgid "ignore carrier-return at the end of line"
msgstr "без промени в знаците за край на ред"
-#: diff.c:5544
+#: diff.c:5552
msgid "ignore changes whose lines are all blank"
msgstr "без промени в редовете, които са изцяло от празни знаци"
-#: diff.c:5546 diff.c:5568 diff.c:5571 diff.c:5616
+#: diff.c:5554 diff.c:5576 diff.c:5579 diff.c:5624
msgid "<regex>"
msgstr "РЕГУЛЯРЕН_ИЗРАЗ"
-#: diff.c:5547
+#: diff.c:5555
msgid "ignore changes whose all lines match <regex>"
msgstr "без промени в редовете, които напасват РЕГУЛЯРНия_ИЗРАЗ"
-#: diff.c:5550
+#: diff.c:5558
msgid "heuristic to shift diff hunk boundaries for easy reading"
msgstr ""
"евристика за преместване на границите на парчетата за улесняване на четенето"
-#: diff.c:5553
+#: diff.c:5561
msgid "generate diff using the \"patience diff\" algorithm"
msgstr "разлика чрез алгоритъм за подредба като пасианс"
-#: diff.c:5557
+#: diff.c:5565
msgid "generate diff using the \"histogram diff\" algorithm"
msgstr "разлика по хистограмния алгоритъм"
-#: diff.c:5559
+#: diff.c:5567
msgid "<algorithm>"
msgstr "АЛГОРИТЪМ"
-#: diff.c:5560
+#: diff.c:5568
msgid "choose a diff algorithm"
msgstr "избор на АЛГОРИТЪМа за разлики"
-#: diff.c:5562
+#: diff.c:5570
msgid "<text>"
msgstr "ТЕКСТ"
-#: diff.c:5563
+#: diff.c:5571
msgid "generate diff using the \"anchored diff\" algorithm"
msgstr "разлика чрез алгоритъма със закотвяне"
-#: diff.c:5565 diff.c:5574 diff.c:5577
+#: diff.c:5573 diff.c:5582 diff.c:5585
msgid "<mode>"
msgstr "РЕЖИМ"
-#: diff.c:5566
+#: diff.c:5574
msgid "show word diff, using <mode> to delimit changed words"
msgstr ""
"разлика по думи, като се ползва този РЕЖИМ за отделянето на променените думи"
-#: diff.c:5569
+#: diff.c:5577
msgid "use <regex> to decide what a word is"
msgstr "РЕГУЛЯРЕН_ИЗРАЗ за разделяне по думи"
-#: diff.c:5572
+#: diff.c:5580
msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
msgstr "псевдоним на „--word-diff=color --word-diff-regex=РЕГУЛЯРЕН_ИЗРАЗ“"
-#: diff.c:5575
+#: diff.c:5583
msgid "moved lines of code are colored differently"
msgstr "различен цвят за извеждане на преместените редове"
-#: diff.c:5578
+#: diff.c:5586
msgid "how white spaces are ignored in --color-moved"
msgstr ""
"режим за прескачането на празните знаци при задаването на „--color-moved“"
-#: diff.c:5581
+#: diff.c:5589
msgid "Other diff options"
msgstr "Други опции за разлики"
-#: diff.c:5583
+#: diff.c:5591
msgid "when run from subdir, exclude changes outside and show relative paths"
msgstr ""
"при изпълнение от поддиректория да се пренебрегват разликите извън нея и да "
"се ползват относителни пътища"
-#: diff.c:5587
+#: diff.c:5595
msgid "treat all files as text"
msgstr "обработка на всички файлове като текстови"
-#: diff.c:5589
+#: diff.c:5597
msgid "swap two inputs, reverse the diff"
msgstr "размяна на двата входа — обръщане на разликата"
-#: diff.c:5591
+#: diff.c:5599
msgid "exit with 1 if there were differences, 0 otherwise"
msgstr ""
"завършване с код за състояние 1 при наличието на разлики, а в противен "
"случай — с 0"
-#: diff.c:5593
+#: diff.c:5601
msgid "disable all output of the program"
msgstr "без всякакъв изход от програмата"
-#: diff.c:5595
+#: diff.c:5603
msgid "allow an external diff helper to be executed"
msgstr "позволяване на изпълнение на външна помощна програма за разлики"
-#: diff.c:5597
+#: diff.c:5605
msgid "run external text conversion filters when comparing binary files"
msgstr ""
"изпълнение на външни програми-филтри при сравнението на двоични файлове"
-#: diff.c:5599
+#: diff.c:5607
msgid "<when>"
msgstr "КОГА"
-#: diff.c:5600
+#: diff.c:5608
msgid "ignore changes to submodules in the diff generation"
msgstr "игнориране на промените в подмодулите при извеждането на разликите"
-#: diff.c:5603
+#: diff.c:5611
msgid "<format>"
msgstr "ФОРМАТ"
-#: diff.c:5604
+#: diff.c:5612
msgid "specify how differences in submodules are shown"
msgstr "начин за извеждане на промените в подмодулите"
-#: diff.c:5608
+#: diff.c:5616
msgid "hide 'git add -N' entries from the index"
msgstr "без включване в индекса на записите, добавени с „git add -N“"
-#: diff.c:5611
+#: diff.c:5619
msgid "treat 'git add -N' entries as real in the index"
msgstr "включване в индекса на записите, добавени с „git add -N“"
-#: diff.c:5613
+#: diff.c:5621
msgid "<string>"
msgstr "НИЗ"
-#: diff.c:5614
+#: diff.c:5622
msgid ""
"look for differences that change the number of occurrences of the specified "
"string"
msgstr "търсене на разлики, които променят броя на поява на указаните низове"
-#: diff.c:5617
+#: diff.c:5625
msgid ""
"look for differences that change the number of occurrences of the specified "
"regex"
@@ -4107,69 +4121,69 @@
"търсене на разлики, които променят броя на поява на низовете, които напасват "
"на регулярния израз"
-#: diff.c:5620
+#: diff.c:5628
msgid "show all changes in the changeset with -S or -G"
msgstr "извеждане на всички промени с „-G“/„-S“"
-#: diff.c:5623
+#: diff.c:5631
msgid "treat <string> in -S as extended POSIX regular expression"
msgstr "НИЗът към „-S“ да се тълкува като разширен регулярен израз по POSIX"
-#: diff.c:5626
+#: diff.c:5634
msgid "control the order in which files appear in the output"
msgstr "управление на подредбата на файловете в изхода"
-#: diff.c:5627 diff.c:5630
+#: diff.c:5635 diff.c:5638
msgid "<path>"
msgstr "ПЪТ"
-#: diff.c:5628
+#: diff.c:5636
msgid "show the change in the specified path first"
msgstr "първо извеждане на промяната в указания път"
-#: diff.c:5631
+#: diff.c:5639
msgid "skip the output to the specified path"
msgstr "прескачане на изхода към указания път"
-#: diff.c:5633
+#: diff.c:5641
msgid "<object-id>"
msgstr "ИДЕНТИФИКАТОР_НА_ОБЕКТ"
-#: diff.c:5634
+#: diff.c:5642
msgid ""
"look for differences that change the number of occurrences of the specified "
"object"
msgstr "търсене на разлики, които променят броя на поява на указания обект"
-#: diff.c:5636
+#: diff.c:5644
msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
msgstr "[(A|C|D|M|R|T|U|X|B)…[*]]"
-#: diff.c:5637
+#: diff.c:5645
msgid "select files by diff type"
msgstr "избор на файловете по вид разлика"
-#: diff.c:5639
+#: diff.c:5647
msgid "<file>"
msgstr "ФАЙЛ"
-#: diff.c:5640
+#: diff.c:5648
msgid "Output to a specific file"
msgstr "Изход към указания файл"
-#: diff.c:6298
+#: diff.c:6306
msgid "exhaustive rename detection was skipped due to too many files."
msgstr ""
"пълното търсене на преименувания на обекти се прескача поради многото "
"файлове."
-#: diff.c:6301
+#: diff.c:6309
msgid "only found copies from modified paths due to too many files."
msgstr ""
"установени са само точните копия на променените пътища поради многото "
"файлове."
-#: diff.c:6304
+#: diff.c:6312
#, c-format
msgid ""
"you may want to set your %s variable to at least %d and retry the command."
@@ -4180,7 +4194,7 @@
msgid "failed to read orderfile '%s'"
msgstr "файлът с подредбата на съответствията „%s“ не може да бъде прочетен"
-#: diffcore-rename.c:1510
+#: diffcore-rename.c:1564
msgid "Performing inexact rename detection"
msgstr "Търсене на преименувания на обекти съчетани с промени"
@@ -4199,363 +4213,451 @@
msgid "unrecognized pattern: '%s'"
msgstr "непознат шаблон: „%s“"
-#: dir.c:792 dir.c:806
+#: dir.c:790 dir.c:804
#, c-format
msgid "unrecognized negative pattern: '%s'"
msgstr "непознат отрицателен шаблон: „%s“"
-#: dir.c:824
+#: dir.c:820
#, c-format
msgid "your sparse-checkout file may have issues: pattern '%s' is repeated"
msgstr ""
"файлът определящ частичността на изтегленото хранилище може да има проблем: "
"шаблонът „%s“ се повтаря"
-#: dir.c:834
+#: dir.c:830
msgid "disabling cone pattern matching"
msgstr "изключване на пътеводното напасване"
-#: dir.c:1221
+#: dir.c:1214
#, c-format
msgid "cannot use %s as an exclude file"
msgstr "„%s“ не може да се ползва за игнорираните файлове (като gitignore)"
-#: dir.c:2358
+#: dir.c:2464
#, c-format
msgid "could not open directory '%s'"
msgstr "директорията „%s“ не може да бъде отворена"
-#: dir.c:2660
+#: dir.c:2766
msgid "failed to get kernel name and information"
msgstr "името и версията на ядрото не бяха получени"
-#: dir.c:2784
+#: dir.c:2890
msgid "untracked cache is disabled on this system or location"
msgstr ""
"кешът за неследените файлове е изключен на тази система или местоположение"
-#: dir.c:3617
+#: dir.c:3158
+msgid ""
+"No directory name could be guessed.\n"
+"Please specify a directory on the command line"
+msgstr ""
+"Името на директорията не може да бъде отгатнато.\n"
+"Задайте директорията изрично на командния ред"
+
+#: dir.c:3837
#, c-format
msgid "index file corrupt in repo %s"
msgstr "файлът с индекса е повреден в хранилището „%s“"
-#: dir.c:3664 dir.c:3669
+#: dir.c:3884 dir.c:3889
#, c-format
msgid "could not create directories for %s"
msgstr "директориите за „%s“ не може да бъдат създадени"
-#: dir.c:3698
+#: dir.c:3918
#, c-format
msgid "could not migrate git directory from '%s' to '%s'"
msgstr "директорията на git не може да се мигрира от „%s“ до „%s“"
-#: editor.c:74
+#: editor.c:77
#, c-format
msgid "hint: Waiting for your editor to close the file...%c"
msgstr "Подсказка: чака се редакторът ви да затвори файла …%c"
-#: entry.c:176
+#: entry.c:177
msgid "Filtering content"
msgstr "Филтриране на съдържанието"
-#: entry.c:497
+#: entry.c:498
#, c-format
msgid "could not stat file '%s'"
msgstr "неуспешно изпълнение на „stat“ върху файла „%s“"
-#: environment.c:152
+#: environment.c:143
#, c-format
msgid "bad git namespace path \"%s\""
msgstr "неправилен път към пространства от имена „%s“"
-#: environment.c:335
-#, c-format
-msgid "could not set GIT_DIR to '%s'"
-msgstr "GIT_DIR не може да се зададе да е „%s“"
-
#: exec-cmd.c:363
#, c-format
msgid "too many args to run %s"
msgstr "прекалено много аргументи за изпълнение „%s“"
-#: fetch-pack.c:182
+#: fetch-pack.c:193
msgid "git fetch-pack: expected shallow list"
msgstr "git fetch-pack: очаква се плитък списък"
-#: fetch-pack.c:185
+#: fetch-pack.c:196
msgid "git fetch-pack: expected a flush packet after shallow list"
msgstr "git fetch-pack: след плитък списък се очаква изчистващ пакет „flush“"
-#: fetch-pack.c:196
+#: fetch-pack.c:207
msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
msgstr ""
"git fetch-pack: очаква се „ACK“/„NAK“, а бе получен изчистващ пакет „flush“"
-#: fetch-pack.c:216
+#: fetch-pack.c:227
#, c-format
msgid "git fetch-pack: expected ACK/NAK, got '%s'"
msgstr "git fetch-pack: очаква се „ACK“/„NAK“, а бе получено „%s“"
-#: fetch-pack.c:227
+#: fetch-pack.c:238
msgid "unable to write to remote"
msgstr "невъзможно писане към отдалечено хранилище"
-#: fetch-pack.c:288
+#: fetch-pack.c:299
msgid "--stateless-rpc requires multi_ack_detailed"
msgstr "опцията „--stateless-rpc“ изисква „multi_ack_detailed“"
-#: fetch-pack.c:383 fetch-pack.c:1423
+#: fetch-pack.c:394 fetch-pack.c:1434
#, c-format
msgid "invalid shallow line: %s"
msgstr "неправилен плитък ред: „%s“"
-#: fetch-pack.c:389 fetch-pack.c:1429
+#: fetch-pack.c:400 fetch-pack.c:1440
#, c-format
msgid "invalid unshallow line: %s"
msgstr "неправилен неплитък ред: „%s“"
-#: fetch-pack.c:391 fetch-pack.c:1431
+#: fetch-pack.c:402 fetch-pack.c:1442
#, c-format
msgid "object not found: %s"
msgstr "обектът „%s“ липсва"
-#: fetch-pack.c:394 fetch-pack.c:1434
+#: fetch-pack.c:405 fetch-pack.c:1445
#, c-format
msgid "error in object: %s"
msgstr "грешка в обекта: „%s“"
-#: fetch-pack.c:396 fetch-pack.c:1436
+#: fetch-pack.c:407 fetch-pack.c:1447
#, c-format
msgid "no shallow found: %s"
msgstr "не е открит плитък обект: %s"
-#: fetch-pack.c:399 fetch-pack.c:1440
+#: fetch-pack.c:410 fetch-pack.c:1451
#, c-format
msgid "expected shallow/unshallow, got %s"
msgstr "очаква се плитък или не обект, а бе получено: „%s“"
-#: fetch-pack.c:439
+#: fetch-pack.c:450
#, c-format
msgid "got %s %d %s"
msgstr "получено бе %s %d %s"
-#: fetch-pack.c:456
+#: fetch-pack.c:467
#, c-format
msgid "invalid commit %s"
msgstr "неправилно подаване: „%s“"
-#: fetch-pack.c:487
+#: fetch-pack.c:498
msgid "giving up"
msgstr "преустановяване"
-#: fetch-pack.c:500 progress.c:339
+#: fetch-pack.c:511 progress.c:339
msgid "done"
msgstr "действието завърши"
-#: fetch-pack.c:512
+#: fetch-pack.c:523
#, c-format
msgid "got %s (%d) %s"
msgstr "получено бе %s (%d) %s"
-#: fetch-pack.c:548
+#: fetch-pack.c:559
#, c-format
msgid "Marking %s as complete"
msgstr "Отбелязване на „%s“ като пълно"
-#: fetch-pack.c:763
+#: fetch-pack.c:774
#, c-format
msgid "already have %s (%s)"
msgstr "вече има „%s“ (%s)"
-#: fetch-pack.c:849
+#: fetch-pack.c:860
msgid "fetch-pack: unable to fork off sideband demultiplexer"
msgstr "fetch-pack: не може да се създаде процес за демултиплексора"
-#: fetch-pack.c:857
+#: fetch-pack.c:868
msgid "protocol error: bad pack header"
msgstr "протоколна грешка: неправилна заглавна част на пакет"
-#: fetch-pack.c:951
+#: fetch-pack.c:962
#, c-format
msgid "fetch-pack: unable to fork off %s"
msgstr "fetch-pack: не може да се създаде процес за „%s“"
-#: fetch-pack.c:957
+#: fetch-pack.c:968
msgid "fetch-pack: invalid index-pack output"
msgstr "fetch-pack: неправилен изход от командата „index-pack“"
-#: fetch-pack.c:974
+#: fetch-pack.c:985
#, c-format
msgid "%s failed"
msgstr "неуспешно изпълнение на „%s“"
-#: fetch-pack.c:976
+#: fetch-pack.c:987
msgid "error in sideband demultiplexer"
msgstr "грешка в демултиплексора"
-#: fetch-pack.c:1019
+#: fetch-pack.c:1030
#, c-format
msgid "Server version is %.*s"
msgstr "Версията на сървъра е: %.*s"
-#: fetch-pack.c:1027 fetch-pack.c:1033 fetch-pack.c:1036 fetch-pack.c:1042
-#: fetch-pack.c:1046 fetch-pack.c:1050 fetch-pack.c:1054 fetch-pack.c:1058
-#: fetch-pack.c:1062 fetch-pack.c:1066 fetch-pack.c:1070 fetch-pack.c:1074
-#: fetch-pack.c:1080 fetch-pack.c:1086 fetch-pack.c:1091 fetch-pack.c:1096
+#: fetch-pack.c:1038 fetch-pack.c:1044 fetch-pack.c:1047 fetch-pack.c:1053
+#: fetch-pack.c:1057 fetch-pack.c:1061 fetch-pack.c:1065 fetch-pack.c:1069
+#: fetch-pack.c:1073 fetch-pack.c:1077 fetch-pack.c:1081 fetch-pack.c:1085
+#: fetch-pack.c:1091 fetch-pack.c:1097 fetch-pack.c:1102 fetch-pack.c:1107
#, c-format
msgid "Server supports %s"
msgstr "Сървърът поддържа „%s“"
-#: fetch-pack.c:1029
+#: fetch-pack.c:1040
msgid "Server does not support shallow clients"
msgstr "Сървърът не поддържа плитки клиенти"
-#: fetch-pack.c:1089
+#: fetch-pack.c:1100
msgid "Server does not support --shallow-since"
msgstr "Сървърът не поддържа опцията „--shallow-since“"
-#: fetch-pack.c:1094
+#: fetch-pack.c:1105
msgid "Server does not support --shallow-exclude"
msgstr "Сървърът не поддържа опцията „--shallow-exclude“"
-#: fetch-pack.c:1098
+#: fetch-pack.c:1109
msgid "Server does not support --deepen"
msgstr "Сървърът не поддържа опцията „--deepen“"
-#: fetch-pack.c:1100
+#: fetch-pack.c:1111
msgid "Server does not support this repository's object format"
msgstr "Сървърът не поддържа форма̀та на обектите на това хранилище"
-#: fetch-pack.c:1113
+#: fetch-pack.c:1124
msgid "no common commits"
msgstr "няма общи подавания"
-#: fetch-pack.c:1122 fetch-pack.c:1469 builtin/clone.c:1238
+#: fetch-pack.c:1133 fetch-pack.c:1480 builtin/clone.c:1130
msgid "source repository is shallow, reject to clone."
msgstr "клонираното хранилище е плитко, затова няма да се клонира."
-#: fetch-pack.c:1128 fetch-pack.c:1660
+#: fetch-pack.c:1139 fetch-pack.c:1671
msgid "git fetch-pack: fetch failed."
msgstr "git fetch-pack: неуспешно доставяне."
-#: fetch-pack.c:1242
+#: fetch-pack.c:1253
#, c-format
msgid "mismatched algorithms: client %s; server %s"
msgstr "различни алгоритми — на клиента: „%s“, на сървъра: „%s“"
-#: fetch-pack.c:1246
+#: fetch-pack.c:1257
#, c-format
msgid "the server does not support algorithm '%s'"
msgstr "сървърът не поддържа алгоритъм „%s“"
-#: fetch-pack.c:1279
+#: fetch-pack.c:1290
msgid "Server does not support shallow requests"
msgstr "Сървърът не поддържа плитки заявки"
-#: fetch-pack.c:1286
+#: fetch-pack.c:1297
msgid "Server supports filter"
msgstr "Сървърът поддържа филтри"
-#: fetch-pack.c:1329 fetch-pack.c:2043
+#: fetch-pack.c:1340 fetch-pack.c:2053
msgid "unable to write request to remote"
msgstr "невъзможно писане към отдалечено хранилище"
-#: fetch-pack.c:1347
+#: fetch-pack.c:1358
#, c-format
msgid "error reading section header '%s'"
msgstr "грешка при прочитане на заглавната част на раздел „%s“"
-#: fetch-pack.c:1353
+#: fetch-pack.c:1364
#, c-format
msgid "expected '%s', received '%s'"
msgstr "очаква се „%s“, а бе получено „%s“"
-#: fetch-pack.c:1387
+#: fetch-pack.c:1398
#, c-format
msgid "unexpected acknowledgment line: '%s'"
msgstr "неочакван ред за потвърждение: „%s“"
-#: fetch-pack.c:1392
+#: fetch-pack.c:1403
#, c-format
msgid "error processing acks: %d"
msgstr "грешка при обработка на потвържденията: %d"
-#: fetch-pack.c:1402
+#: fetch-pack.c:1413
msgid "expected packfile to be sent after 'ready'"
msgstr ""
"очакваше се пакетният файл да бъде изпратен след отговор за готовност (ready)"
-#: fetch-pack.c:1404
+#: fetch-pack.c:1415
msgid "expected no other sections to be sent after no 'ready'"
msgstr ""
"очакваше се след липса на отговор за готовност (ready) да не се се пращат "
"други раздели"
-#: fetch-pack.c:1445
+#: fetch-pack.c:1456
#, c-format
msgid "error processing shallow info: %d"
msgstr "грешка при обработка на информация за дълбочината/плиткостта: %d"
-#: fetch-pack.c:1494
+#: fetch-pack.c:1505
#, c-format
msgid "expected wanted-ref, got '%s'"
msgstr "очаква се искан указател, а бе получено: „%s“"
-#: fetch-pack.c:1499
+#: fetch-pack.c:1510
#, c-format
msgid "unexpected wanted-ref: '%s'"
msgstr "неочакван искан указател: „%s“"
-#: fetch-pack.c:1504
+#: fetch-pack.c:1515
#, c-format
msgid "error processing wanted refs: %d"
msgstr "грешка при обработката на исканите указатели: %d"
-#: fetch-pack.c:1534
+#: fetch-pack.c:1545
msgid "git fetch-pack: expected response end packet"
msgstr "git fetch-pack: очаква се пакет за край на отговора"
-#: fetch-pack.c:1939
+#: fetch-pack.c:1949
msgid "no matching remote head"
msgstr "не може да бъде открит подходящ връх от отдалеченото хранилище"
-#: fetch-pack.c:1962 builtin/clone.c:697
+#: fetch-pack.c:1972 builtin/clone.c:581
msgid "remote did not send all necessary objects"
msgstr "отдалеченото хранилище не изпрати всички необходими обекти."
-#: fetch-pack.c:2065
+#: fetch-pack.c:2075
msgid "unexpected 'ready' from remote"
msgstr "неочаквано състояние за готовност от отдалечено хранилище"
-#: fetch-pack.c:2088
+#: fetch-pack.c:2098
#, c-format
msgid "no such remote ref %s"
msgstr "такъв отдалечен указател няма: %s"
-#: fetch-pack.c:2091
+#: fetch-pack.c:2101
#, c-format
msgid "Server does not allow request for unadvertised object %s"
msgstr "Сървърът не позволява заявка за необявен обект „%s“"
-#: gpg-interface.c:273
+#: gpg-interface.c:329 gpg-interface.c:451 gpg-interface.c:902
+#: gpg-interface.c:918
msgid "could not create temporary file"
msgstr "не може да се създаде временен файл"
-#: gpg-interface.c:276
+#: gpg-interface.c:332 gpg-interface.c:454
#, c-format
msgid "failed writing detached signature to '%s'"
msgstr "Програмата не успя да запише самостоятелния подпис в „%s“"
-#: gpg-interface.c:470
+#: gpg-interface.c:445
+msgid ""
+"gpg.ssh.allowedSignersFile needs to be configured and exist for ssh "
+"signature verification"
+msgstr ""
+"настройката „gpg.ssh.allowedSignersFile“ трябва да е зададена за проверка на "
+"подписите на ssh"
+
+#: gpg-interface.c:469
+msgid ""
+"ssh-keygen -Y find-principals/verify is needed for ssh signature "
+"verification (available in openssh version 8.2p1+)"
+msgstr ""
+"За проверка на подписите е необходима командата (достъпна от openssh ≥ "
+"8.2p1+):\n"
+"\n"
+" ssh-keygen -Y find-principals/verify"
+
+#: gpg-interface.c:523
+#, c-format
+msgid "ssh signing revocation file configured but not found: %s"
+msgstr ""
+"файлът за отхвърляне на подписи на ssh е настроен, но не може да се открие: "
+"%s"
+
+#: gpg-interface.c:576
+#, c-format
+msgid "bad/incompatible signature '%s'"
+msgstr "лош/несъвместим подпис „%s“"
+
+#: gpg-interface.c:735 gpg-interface.c:740
+#, c-format
+msgid "failed to get the ssh fingerprint for key '%s'"
+msgstr "отпечатъкът по ssh на ключа „%s“ не може да бъде получен"
+
+#: gpg-interface.c:762
+msgid ""
+"either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured"
+msgstr ""
+"Поне една от настройките „user.signingkey“ или „gpg.ssh.defaultKeyCommand“ "
+"трябва да е зададена"
+
+#: gpg-interface.c:780
+#, c-format
+msgid "gpg.ssh.defaultKeyCommand succeeded but returned no keys: %s %s"
+msgstr ""
+"командата „gpg.ssh.defaultKeyCommand“ завърши успешно, но не върна никакви "
+"ключове: %s %s"
+
+#: gpg-interface.c:786
+#, c-format
+msgid "gpg.ssh.defaultKeyCommand failed: %s %s"
+msgstr "неуспешно изпълнение на „gpg.ssh.defaultKeyCommand“: %s %s"
+
+#: gpg-interface.c:874
msgid "gpg failed to sign the data"
-msgstr "Програмата „gpg“ не подписа данните."
+msgstr "Програмата „gpg“ не подписа данните"
+
+#: gpg-interface.c:895
+msgid "user.signingkey needs to be set for ssh signing"
+msgstr ""
+"за подписване със ssh е необходимо да зададете настройката „user.signingkey“"
+
+#: gpg-interface.c:906
+#, c-format
+msgid "failed writing ssh signing key to '%s'"
+msgstr "неуспешно запазване на ключа за подписване на ssh в „%s“"
+
+#: gpg-interface.c:924
+#, c-format
+msgid "failed writing ssh signing key buffer to '%s'"
+msgstr "неуспешно запазване на буфера за подписване на ssh в „%s“"
+
+#: gpg-interface.c:942
+msgid ""
+"ssh-keygen -Y sign is needed for ssh signing (available in openssh version "
+"8.2p1+)"
+msgstr ""
+"За подписване със ssh е необходима командата (достъпна от openssh ≥ "
+"8.2p1+):\n"
+"\n"
+" ssh-keygen -Y"
+
+#: gpg-interface.c:954
+#, c-format
+msgid "failed reading ssh signing data buffer from '%s'"
+msgstr "неуспешно прочитане на буфера за подписване на ssh от „%s“"
#: graph.c:98
#, c-format
msgid "ignored invalid color '%.*s' in log.graphColors"
msgstr "прескачане на неправилния цвят „%.*s“ в „log.graphColors“"
-#: grep.c:531
+#: grep.c:533
msgid ""
"given pattern contains NULL byte (via -f <file>). This is only supported "
"with -P under PCRE v2"
@@ -4563,109 +4665,109 @@
"зададеният шаблон съдържа нулев знак (идва от -f „ФАЙЛ“). Това се поддържа "
"в комбинация с „-P“ само при ползването на „PCRE v2“"
-#: grep.c:1895
+#: grep.c:1928
#, c-format
msgid "'%s': unable to read %s"
msgstr "„%s“: файлът сочен от „%s“ не може да бъде прочетен"
-#: grep.c:1912 setup.c:176 builtin/clone.c:416 builtin/diff.c:90
+#: grep.c:1945 setup.c:176 builtin/clone.c:302 builtin/diff.c:90
#: builtin/rm.c:136
#, c-format
msgid "failed to stat '%s'"
msgstr "не може да бъде получена информация чрез „stat“ за „%s“"
-#: grep.c:1923
+#: grep.c:1956
#, c-format
msgid "'%s': short read"
msgstr "„%s“: изчитането върна по-малко байтове от очакваното"
-#: help.c:23
+#: help.c:24
msgid "start a working area (see also: git help tutorial)"
msgstr "създаване на работно дърво (погледнете: „git help tutorial“)"
-#: help.c:24
+#: help.c:25
msgid "work on the current change (see also: git help everyday)"
msgstr "работа по текущата промяна (погледнете: „git help everyday“)"
-#: help.c:25
+#: help.c:26
msgid "examine the history and state (see also: git help revisions)"
msgstr "преглед на историята и състоянието (погледнете: „git help revisions“)"
-#: help.c:26
+#: help.c:27
msgid "grow, mark and tweak your common history"
msgstr "увеличаване, отбелязване и промяна на общата история"
-#: help.c:27
+#: help.c:28
msgid "collaborate (see also: git help workflows)"
msgstr "съвместна работа (погледнете: „git help workflows“)"
-#: help.c:31
+#: help.c:32
msgid "Main Porcelain Commands"
msgstr "Основни команди от потребителско ниво"
-#: help.c:32
+#: help.c:33
msgid "Ancillary Commands / Manipulators"
msgstr "Помощни команди / Променящи"
-#: help.c:33
+#: help.c:34
msgid "Ancillary Commands / Interrogators"
msgstr "Помощни команди / Запитващи"
-#: help.c:34
+#: help.c:35
msgid "Interacting with Others"
msgstr "Съвместна работа с други хора"
-#: help.c:35
+#: help.c:36
msgid "Low-level Commands / Manipulators"
msgstr "Команди от ниско ниво / Променящи"
-#: help.c:36
+#: help.c:37
msgid "Low-level Commands / Interrogators"
msgstr "Команди от ниско ниво / Запитващи"
-#: help.c:37
+#: help.c:38
msgid "Low-level Commands / Syncing Repositories"
msgstr "Команди от ниско ниво / Синхронизация на хранилища"
-#: help.c:38
+#: help.c:39
msgid "Low-level Commands / Internal Helpers"
msgstr "Команди от ниско ниво / Допълнителни инструменти"
-#: help.c:300
+#: help.c:313
#, c-format
msgid "available git commands in '%s'"
msgstr "налични команди на git от „%s“"
-#: help.c:307
+#: help.c:320
msgid "git commands available from elsewhere on your $PATH"
msgstr "команди на git от други директории от „$PATH“"
-#: help.c:316
+#: help.c:329
msgid "These are common Git commands used in various situations:"
msgstr "Това са най-често използваните команди на Git:"
-#: help.c:365 git.c:100
+#: help.c:378 git.c:100
#, c-format
msgid "unsupported command listing type '%s'"
msgstr "неподдържан списък от команди „%s“"
-#: help.c:405
+#: help.c:418
msgid "The Git concept guides are:"
msgstr "Ръководствата за концепциите в Git са:"
-#: help.c:429
+#: help.c:442
msgid "See 'git help <command>' to read about a specific subcommand"
msgstr "За повече информация за КОМАНДА изпълнете „git help КОМАНДА“"
-#: help.c:434
+#: help.c:447
msgid "External commands"
msgstr "Външни команди"
-#: help.c:449
+#: help.c:462
msgid "Command aliases"
msgstr "Псевдоними на командите"
-#: help.c:527
+#: help.c:543
#, c-format
msgid ""
"'%s' appears to be a git command, but we were not\n"
@@ -4674,36 +4776,41 @@
"Изглежда, че „%s“ е команда на git, но тя не може да\n"
"бъде изпълнена. Вероятно пакетът „git-%s“ е повреден."
-#: help.c:543 help.c:631
+#: help.c:565 help.c:662
#, c-format
msgid "git: '%s' is not a git command. See 'git --help'."
msgstr "git: „%s“ не е команда на git. Погледнете изхода от „git --help“."
-#: help.c:591
+#: help.c:613
msgid "Uh oh. Your system reports no Git commands at all."
msgstr "Странно, изглежда, че на системата ви няма нито една команда на git."
-#: help.c:613
+#: help.c:635
#, c-format
msgid "WARNING: You called a Git command named '%s', which does not exist."
msgstr ""
"ПРЕДУПРЕЖДЕНИЕ: Пробвахте да изпълните команда на Git на име „%s“, а такава "
"не съществува."
-#: help.c:618
+#: help.c:640
#, c-format
msgid "Continuing under the assumption that you meant '%s'."
msgstr ""
"Изпълнението автоматично продължава, като се счита, че имате предвид „%s“."
-#: help.c:623
+#: help.c:646
+#, c-format
+msgid "Run '%s' instead? (y/N)"
+msgstr "Да се изпълни „%s“ вместо това? (y/N)"
+
+#: help.c:654
#, c-format
msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
msgstr ""
"Изпълнението автоматично ще продължи след %0.1f сек., като се счита, че "
"имате предвид „%s“."
-#: help.c:635
+#: help.c:666
msgid ""
"\n"
"The most similar command is"
@@ -4717,16 +4824,16 @@
"\n"
"Най-близките команди са"
-#: help.c:675
+#: help.c:706
msgid "git version [<options>]"
msgstr "git version [ОПЦИЯ…]"
-#: help.c:730
+#: help.c:761
#, c-format
msgid "%s: %s - %s"
msgstr "%s: %s — %s"
-#: help.c:734
+#: help.c:765
msgid ""
"\n"
"Did you mean this?"
@@ -4740,6 +4847,16 @@
"\n"
"Команди с подобно име са:"
+#: hook.c:27
+#, c-format
+msgid ""
+"The '%s' hook was ignored because it's not set as executable.\n"
+"You can disable this warning with `git config advice.ignoredHook false`."
+msgstr ""
+"Куката „%s“ се прескача, защото липсват права за изпълнение.\n"
+"За да изключите това предупреждение, изпълнете:\n"
+" git config advice.ignoredHook false"
+
#: ident.c:353
msgid "Author identity unknown\n"
msgstr "Липсва информация за автора\n"
@@ -4805,7 +4922,7 @@
msgid "name consists only of disallowed characters: %s"
msgstr "името съдържа само непозволени знаци: „%s“"
-#: ident.c:454 builtin/commit.c:647
+#: ident.c:454 builtin/commit.c:648
#, c-format
msgid "invalid date format: %s"
msgstr "неправилен формат на дата: %s"
@@ -4902,7 +5019,12 @@
msgid "invalid value '%s' for lsrefs.unborn"
msgstr "неправилна стойност „%s“ за „lsrefs.unborn“"
-#: ls-refs.c:167
+#: ls-refs.c:174
+#, c-format
+msgid "unexpected line: '%s'"
+msgstr "неочакван ред: „%s“"
+
+#: ls-refs.c:178
msgid "expected flush after ls-refs arguments"
msgstr "след аргументите към „ls-refs“ се очаква изчистване на буферите"
@@ -4910,39 +5032,39 @@
msgid "quoted CRLF detected"
msgstr "цитирани знаци CRLF"
-#: mailinfo.c:1254 builtin/am.c:176 builtin/mailinfo.c:46
+#: mailinfo.c:1254 builtin/am.c:177 builtin/mailinfo.c:46
#, c-format
msgid "bad action '%s' for '%s'"
msgstr "неправилно действие „%s“ за „%s“"
-#: merge-ort.c:1228 merge-recursive.c:1206
+#: merge-ort.c:1584 merge-recursive.c:1211
#, c-format
msgid "Failed to merge submodule %s (not checked out)"
msgstr "Неуспешно сливане на подмодула „%s“ (не е изтеглен)"
-#: merge-ort.c:1237 merge-recursive.c:1213
+#: merge-ort.c:1593 merge-recursive.c:1218
#, c-format
msgid "Failed to merge submodule %s (commits not present)"
msgstr "Неуспешно сливане на подмодула „%s“ (няма подавания)"
-#: merge-ort.c:1246 merge-recursive.c:1220
+#: merge-ort.c:1602 merge-recursive.c:1225
#, c-format
msgid "Failed to merge submodule %s (commits don't follow merge-base)"
msgstr ""
"Подмодулът „%s“ не може да бъде слят (базата за сливане не предшества "
"подаванията)"
-#: merge-ort.c:1256 merge-ort.c:1263
+#: merge-ort.c:1612 merge-ort.c:1620
#, c-format
msgid "Note: Fast-forwarding submodule %s to %s"
msgstr "Бележка: Превъртане на подмодула „%s“ към „%s“"
-#: merge-ort.c:1284
+#: merge-ort.c:1642
#, c-format
msgid "Failed to merge submodule %s"
msgstr "Неуспешно сливане на подмодула „%s“"
-#: merge-ort.c:1291
+#: merge-ort.c:1649
#, c-format
msgid ""
"Failed to merge submodule %s, but a possible merge resolution exists:\n"
@@ -4951,7 +5073,7 @@
"Неуспешно сливане на подмодула „%s“, но е открито възможно решение:\n"
"%s\n"
-#: merge-ort.c:1295 merge-recursive.c:1274
+#: merge-ort.c:1653 merge-recursive.c:1281
#, c-format
msgid ""
"If this is correct simply add it to the index for example\n"
@@ -4967,7 +5089,7 @@
"\n"
"Това приема предложеното.\n"
-#: merge-ort.c:1308
+#: merge-ort.c:1666
#, c-format
msgid ""
"Failed to merge submodule %s, but multiple possible merges exist:\n"
@@ -4976,21 +5098,21 @@
"Неуспешно сливане на подмодула „%s“, но са открити множество решения:\n"
"%s"
-#: merge-ort.c:1527 merge-recursive.c:1363
+#: merge-ort.c:1887 merge-recursive.c:1372
msgid "Failed to execute internal merge"
msgstr "Неуспешно вътрешно сливане"
-#: merge-ort.c:1532 merge-recursive.c:1368
+#: merge-ort.c:1892 merge-recursive.c:1377
#, c-format
msgid "Unable to add %s to database"
msgstr "„%s“ не може да се добави в базата с данни"
-#: merge-ort.c:1539 merge-recursive.c:1401
+#: merge-ort.c:1899 merge-recursive.c:1410
#, c-format
msgid "Auto-merging %s"
msgstr "Автоматично сливане на „%s“"
-#: merge-ort.c:1678 merge-recursive.c:2123
+#: merge-ort.c:2038 merge-recursive.c:2132
#, c-format
msgid ""
"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -4999,7 +5121,7 @@
"КОНФЛИКТ (косвено преименуване на директория): следният файл или директория "
"„%s“ не позволяват косвеното преименуване на следния път/ища: %s."
-#: merge-ort.c:1688 merge-recursive.c:2133
+#: merge-ort.c:2048 merge-recursive.c:2142
#, c-format
msgid ""
"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -5009,7 +5131,7 @@
"съответства на „%s“. Косвено преименуване на директория води до поставянето "
"на тези пътища там: %s."
-#: merge-ort.c:1746
+#: merge-ort.c:2106
#, c-format
msgid ""
"CONFLICT (directory rename split): Unclear where to rename %s to; it was "
@@ -5020,7 +5142,7 @@
"да се преименува „%s“, защото е преместен в няколко нови директории, без "
"никоя от тях да е по-честа цел."
-#: merge-ort.c:1900 merge-recursive.c:2469
+#: merge-ort.c:2260 merge-recursive.c:2478
#, c-format
msgid ""
"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
@@ -5029,7 +5151,7 @@
"ПРЕДУПРЕЖДЕНИЕ: прескачане на преименуването на „%s“ на „%s“ в „%s“, защото "
"„%s“ също е с променено име."
-#: merge-ort.c:2044 merge-recursive.c:3252
+#: merge-ort.c:2400 merge-recursive.c:3261
#, c-format
msgid ""
"Path updated: %s added in %s inside a directory that was renamed in %s; "
@@ -5038,7 +5160,7 @@
"Обновен път: „%s“ е добавен в „%s“ в директория, която е преименувана в "
"„%s“. Обектът се мести в „%s“."
-#: merge-ort.c:2051 merge-recursive.c:3259
+#: merge-ort.c:2407 merge-recursive.c:3268
#, c-format
msgid ""
"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
@@ -5047,7 +5169,7 @@
"Обновен път: „%s“ е преименуван на „%s“ в „%s“ в директория, която е "
"преименувана в „%s“. Обектът се мести в „%s“."
-#: merge-ort.c:2064 merge-recursive.c:3255
+#: merge-ort.c:2420 merge-recursive.c:3264
#, c-format
msgid ""
"CONFLICT (file location): %s added in %s inside a directory that was renamed "
@@ -5056,7 +5178,7 @@
"КОНФЛИКТ (места на файлове): „%s“ е добавен в „%s“ в директория, която е "
"преименувана в „%s“. Предложението е да преместите обекта в „%s“."
-#: merge-ort.c:2072 merge-recursive.c:3262
+#: merge-ort.c:2428 merge-recursive.c:3271
#, c-format
msgid ""
"CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
@@ -5065,14 +5187,14 @@
"КОНФЛИКТ (места на файлове): „%s“ е преименуван на „%s“ в „%s“ в директория, "
"която е преименувана в „%s“. Предложението е да преместите обекта в „%s“."
-#: merge-ort.c:2228
+#: merge-ort.c:2584
#, 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:2323
+#: merge-ort.c:2679
#, c-format
msgid ""
"CONFLICT (rename involved in collision): rename of %s -> %s has content "
@@ -5083,24 +5205,24 @@
"има и промени в съдържанието, а и има съвпадение на пътя. Може да се "
"получат вложени маркери за конфликт."
-#: merge-ort.c:2342 merge-ort.c:2366
+#: merge-ort.c:2698 merge-ort.c:2722
#, c-format
msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
msgstr ""
"КОНФЛИКТ (преименуване/добавяне): „%s“ е преименуван на „%s“ в клон „%s“, а "
"е изтрит в „%s“."
-#: merge-ort.c:2819 merge-recursive.c:3013
+#: merge-ort.c:3212 merge-recursive.c:3022
#, c-format
msgid "cannot read object %s"
msgstr "обектът „%s“ не може да се прочете"
-#: merge-ort.c:2822 merge-recursive.c:3016
+#: merge-ort.c:3215 merge-recursive.c:3025
#, c-format
msgid "object %s is not a blob"
msgstr "обектът „%s“ не е BLOB"
-#: merge-ort.c:3250
+#: merge-ort.c:3644
#, c-format
msgid ""
"CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
@@ -5109,7 +5231,7 @@
"КОНФЛИКТ (файл/директория): директория на мястото на „%s“ от „%s“, вместо "
"това се извършва преместване в „%s“."
-#: merge-ort.c:3326
+#: merge-ort.c:3721
#, c-format
msgid ""
"CONFLICT (distinct types): %s had different types on each side; renamed both "
@@ -5118,7 +5240,7 @@
"КОНФЛИКТ (различни видове): „%s“ е различен вид обект в двата варианта. И "
"двата се преименуват, за да може всичко да е отразено."
-#: merge-ort.c:3333
+#: merge-ort.c:3728
#, c-format
msgid ""
"CONFLICT (distinct types): %s had different types on each side; renamed one "
@@ -5127,24 +5249,24 @@
"КОНФЛИКТ (различни видове): „%s“ е различен вид обект в двата варианта. "
"Извършва се преименуване в единия, за да може всичко да е отразено."
-#: merge-ort.c:3433 merge-recursive.c:3092
+#: merge-ort.c:3819 merge-recursive.c:3101
msgid "content"
msgstr "съдържание"
-#: merge-ort.c:3435 merge-recursive.c:3096
+#: merge-ort.c:3821 merge-recursive.c:3105
msgid "add/add"
msgstr "добавяне/добавяне"
-#: merge-ort.c:3437 merge-recursive.c:3141
+#: merge-ort.c:3823 merge-recursive.c:3150
msgid "submodule"
msgstr "ПОДМОДУЛ"
-#: merge-ort.c:3439 merge-recursive.c:3142
+#: merge-ort.c:3825 merge-recursive.c:3151
#, c-format
msgid "CONFLICT (%s): Merge conflict in %s"
msgstr "КОНФЛИКТ (%s): Конфликт при сливане на „%s“"
-#: merge-ort.c:3470
+#: merge-ort.c:3856
#, c-format
msgid ""
"CONFLICT (modify/delete): %s deleted in %s and modified in %s. Version %s "
@@ -5153,7 +5275,7 @@
"КОНФЛИКТ (промяна/изтриване): „%s“ е изтрит в %s, а е променен в %s. Версия "
"%s на „%s“ е оставена в дървото."
-#: merge-ort.c:3757
+#: merge-ort.c:4152
#, c-format
msgid ""
"Note: %s not up to date and in way of checking out conflicted version; old "
@@ -5165,12 +5287,12 @@
#. 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:4116
+#: merge-ort.c:4521
#, c-format
msgid "collecting merge info failed for trees %s, %s, %s"
msgstr "неуспешно събиране на информацията за сливането на „%s“, „%s“ и „%s“"
-#: merge-ort-wrappers.c:13 merge-recursive.c:3707
+#: merge-ort-wrappers.c:13 merge-recursive.c:3716
#, c-format
msgid ""
"Your local changes to the following files would be overwritten by merge:\n"
@@ -5179,113 +5301,113 @@
"Сливането ще презапише локалните промени на тези файлове:\n"
" %s"
-#: merge-ort-wrappers.c:33 merge-recursive.c:3473 builtin/merge.c:402
+#: merge-ort-wrappers.c:33 merge-recursive.c:3482 builtin/merge.c:403
msgid "Already up to date."
msgstr "Вече е обновено."
-#: merge-recursive.c:357
+#: merge-recursive.c:353
msgid "(bad commit)\n"
msgstr "(лошо подаване)\n"
-#: merge-recursive.c:380
+#: merge-recursive.c:381
#, c-format
msgid "add_cacheinfo failed for path '%s'; merge aborting."
msgstr ""
"неуспешно изпълнение на „add_cacheinfo“ за пътя „%s“. Сливането е "
"преустановено."
-#: merge-recursive.c:389
+#: merge-recursive.c:390
#, c-format
msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
msgstr ""
"неуспешно изпълнение на „add_cacheinfo“ за обновяването на пътя „%s“. "
"Сливането е преустановено."
-#: merge-recursive.c:877
+#: merge-recursive.c:881
#, c-format
msgid "failed to create path '%s'%s"
msgstr "грешка при създаването на пътя „%s“%s"
-#: merge-recursive.c:888
+#: merge-recursive.c:892
#, c-format
msgid "Removing %s to make room for subdirectory\n"
msgstr "Изтриване на „%s“, за да се освободи място за поддиректория\n"
-#: merge-recursive.c:902 merge-recursive.c:921
+#: merge-recursive.c:906 merge-recursive.c:925
msgid ": perhaps a D/F conflict?"
msgstr ": възможно е да има конфликт директория/файл."
-#: merge-recursive.c:911
+#: merge-recursive.c:915
#, c-format
msgid "refusing to lose untracked file at '%s'"
msgstr ""
"преустановяване на действието, за да не се изтрие неследеният файл „%s“"
-#: merge-recursive.c:952 builtin/cat-file.c:41
+#: merge-recursive.c:956 builtin/cat-file.c:41
#, c-format
msgid "cannot read object %s '%s'"
msgstr "обектът „%s“ (%s) не може да бъде прочетен"
-#: merge-recursive.c:957
+#: merge-recursive.c:961
#, c-format
msgid "blob expected for %s '%s'"
msgstr "обектът „%s“ (%s) се очакваше да е BLOB, а не е"
-#: merge-recursive.c:982
+#: merge-recursive.c:986
#, c-format
msgid "failed to open '%s': %s"
msgstr "„%s“ не може да се отвори: %s"
-#: merge-recursive.c:993
+#: merge-recursive.c:997
#, c-format
msgid "failed to symlink '%s': %s"
msgstr "неуспешно създаване на символната връзка „%s“: %s"
-#: merge-recursive.c:998
+#: merge-recursive.c:1002
#, c-format
msgid "do not know what to do with %06o %s '%s'"
msgstr ""
"не е ясно какво да се прави с обекта „%2$s“ (%3$s) с права за достъп „%1$06o“"
-#: merge-recursive.c:1228 merge-recursive.c:1240
+#: merge-recursive.c:1233 merge-recursive.c:1246
#, c-format
msgid "Fast-forwarding submodule %s to the following commit:"
msgstr "Превъртане на подмодула „%s“ до следното подаване:"
-#: merge-recursive.c:1231 merge-recursive.c:1243
+#: merge-recursive.c:1236 merge-recursive.c:1249
#, c-format
msgid "Fast-forwarding submodule %s"
msgstr "Превъртане на подмодула „%s“"
-#: merge-recursive.c:1266
+#: merge-recursive.c:1273
#, c-format
msgid "Failed to merge submodule %s (merge following commits not found)"
msgstr ""
"Неуспешно сливане на подмодула „%s“ (липсва сливането, което се предшества "
"от подаванията)"
-#: merge-recursive.c:1270
+#: merge-recursive.c:1277
#, c-format
msgid "Failed to merge submodule %s (not fast-forward)"
msgstr "Неуспешно сливане на подмодула „%s“ (не е превъртане)"
-#: merge-recursive.c:1271
+#: merge-recursive.c:1278
msgid "Found a possible merge resolution for the submodule:\n"
msgstr ""
"Открито е сливане, което може да решава проблема със сливането на "
"подмодула:\n"
-#: merge-recursive.c:1283
+#: merge-recursive.c:1290
#, c-format
msgid "Failed to merge submodule %s (multiple merges found)"
msgstr "Неуспешно сливане на подмодула „%s“ (открити са множество сливания)"
-#: merge-recursive.c:1425
+#: merge-recursive.c:1434
#, c-format
msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
msgstr "Грешка: за да не се изтрие неследеният файл „%s“, се записва в „%s“."
-#: merge-recursive.c:1497
+#: merge-recursive.c:1506
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5294,7 +5416,7 @@
"КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ в %s. Версия %s на „%s“ "
"е оставена в дървото."
-#: merge-recursive.c:1502
+#: merge-recursive.c:1511
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5303,7 +5425,7 @@
"КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ е преименуван на „%s“ в "
"%s. Версия %s на „%s“ е оставена в дървото."
-#: merge-recursive.c:1509
+#: merge-recursive.c:1518
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5312,7 +5434,7 @@
"КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ в %s. Версия %s на „%s“ "
"е оставена в дървото: %s."
-#: merge-recursive.c:1514
+#: merge-recursive.c:1523
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5321,45 +5443,45 @@
"КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ е преименуван на „%s“ в "
"%s. Версия %s на „%s“ е оставена в дървото: %s."
-#: merge-recursive.c:1549
+#: merge-recursive.c:1558
msgid "rename"
msgstr "преименуване"
-#: merge-recursive.c:1549
+#: merge-recursive.c:1558
msgid "renamed"
msgstr "преименуван"
-#: merge-recursive.c:1600 merge-recursive.c:2506 merge-recursive.c:3169
+#: merge-recursive.c:1609 merge-recursive.c:2515 merge-recursive.c:3178
#, c-format
msgid "Refusing to lose dirty file at %s"
msgstr "Преустановяване на действието, за да не се изгуби промененият „%s“"
-#: merge-recursive.c:1610
+#: merge-recursive.c:1619
#, c-format
msgid "Refusing to lose untracked file at %s, even though it's in the way."
msgstr ""
"Отказ да се загуби неследеният файл „%s“, защото е на място, където пречи."
-#: merge-recursive.c:1668
+#: merge-recursive.c:1677
#, c-format
msgid "CONFLICT (rename/add): Rename %s->%s in %s. Added %s in %s"
msgstr ""
"КОНФЛИКТ (преименуване/добавяне): „%s“ е преименуван на „%s“ в клон „%s“, а "
"„%s“ е добавен в „%s“"
-#: merge-recursive.c:1699
+#: merge-recursive.c:1708
#, c-format
msgid "%s is a directory in %s adding as %s instead"
msgstr "„%s“ е директория в „%s“, затова се добавя като „%s“"
-#: merge-recursive.c:1704
+#: merge-recursive.c:1713
#, c-format
msgid "Refusing to lose untracked file at %s; adding as %s instead"
msgstr ""
"Преустановяване на действието, за да не се изгуби неследеният файл „%s“. "
"Вместо него се добавя „%s“"
-#: merge-recursive.c:1731
+#: merge-recursive.c:1740
#, c-format
msgid ""
"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -5368,18 +5490,18 @@
"КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон "
"„%s“, а „%s“ е преименуван на „%s“ в „%s“/%s."
-#: merge-recursive.c:1736
+#: merge-recursive.c:1745
msgid " (left unresolved)"
msgstr " (некоригиран конфликт)"
-#: merge-recursive.c:1828
+#: merge-recursive.c:1837
#, c-format
msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
msgstr ""
"КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон "
"„%s“, а „%s“ е преименуван на „%s“ в „%s“"
-#: merge-recursive.c:2091
+#: merge-recursive.c:2100
#, c-format
msgid ""
"CONFLICT (directory rename split): Unclear where to place %s because "
@@ -5390,7 +5512,7 @@
"постави „%s“, защото няколко нови директории поделят съдържанието на "
"директория „%s“, като никоя не съдържа мнозинство от файловете ѝ."
-#: merge-recursive.c:2225
+#: merge-recursive.c:2234
#, c-format
msgid ""
"CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -5399,81 +5521,81 @@
"КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон "
"„%s“, а „%s“ е преименуван на „%s“ в „%s“"
-#: merge-recursive.c:3080
+#: merge-recursive.c:3089
msgid "modify"
msgstr "промяна"
-#: merge-recursive.c:3080
+#: merge-recursive.c:3089
msgid "modified"
msgstr "променен"
-#: merge-recursive.c:3119
+#: merge-recursive.c:3128
#, c-format
msgid "Skipped %s (merged same as existing)"
msgstr "Прескачане на „%s“ (слетият резултат е идентичен със сегашния)"
-#: merge-recursive.c:3172
+#: merge-recursive.c:3181
#, c-format
msgid "Adding as %s instead"
msgstr "Добавяне като „%s“"
-#: merge-recursive.c:3376
+#: merge-recursive.c:3385
#, c-format
msgid "Removing %s"
msgstr "Изтриване на „%s“"
-#: merge-recursive.c:3399
+#: merge-recursive.c:3408
msgid "file/directory"
msgstr "файл/директория"
-#: merge-recursive.c:3404
+#: merge-recursive.c:3413
msgid "directory/file"
msgstr "директория/файл"
-#: merge-recursive.c:3411
+#: merge-recursive.c:3420
#, c-format
msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
msgstr ""
"КОНФЛИКТ (%s): Съществува директория на име „%s“ в „%s“. Добавяне на „%s“ "
"като „%s“"
-#: merge-recursive.c:3420
+#: merge-recursive.c:3429
#, c-format
msgid "Adding %s"
msgstr "Добавяне на „%s“"
-#: merge-recursive.c:3429
+#: merge-recursive.c:3438
#, c-format
msgid "CONFLICT (add/add): Merge conflict in %s"
msgstr "КОНФЛИКТ (добавяне/добавяне): Конфликт при сливане на „%s“"
-#: merge-recursive.c:3482
+#: merge-recursive.c:3491
#, c-format
msgid "merging of trees %s and %s failed"
msgstr "неуспешно сливане на дърветата „%s“ и „%s“"
-#: merge-recursive.c:3576
+#: merge-recursive.c:3585
msgid "Merging:"
msgstr "Сливане:"
-#: merge-recursive.c:3589
+#: merge-recursive.c:3598
#, c-format
msgid "found %u common ancestor:"
msgid_plural "found %u common ancestors:"
msgstr[0] "открит е %u общ предшественик:"
msgstr[1] "открити са %u общи предшественици:"
-#: merge-recursive.c:3639
+#: merge-recursive.c:3648
msgid "merge returned no commit"
msgstr "сливането не върна подаване"
-#: merge-recursive.c:3804
+#: merge-recursive.c:3816
#, c-format
msgid "Could not parse object '%s'"
msgstr "Неуспешен анализ на обекта „%s“"
-#: merge-recursive.c:3822 builtin/merge.c:716 builtin/merge.c:900
-#: builtin/stash.c:473
+#: merge-recursive.c:3834 builtin/merge.c:718 builtin/merge.c:904
+#: builtin/stash.c:489
msgid "Unable to write index."
msgstr "Индексът не може да бъде прочетен"
@@ -5481,143 +5603,176 @@
msgid "failed to read the cache"
msgstr "кешът не може да бъде прочетен"
-#: merge.c:108 rerere.c:704 builtin/am.c:1932 builtin/am.c:1966
-#: builtin/checkout.c:595 builtin/checkout.c:849 builtin/clone.c:821
-#: builtin/stash.c:267
+#: merge.c:102 rerere.c:704 builtin/am.c:1933 builtin/am.c:1967
+#: builtin/checkout.c:590 builtin/checkout.c:842 builtin/clone.c:706
+#: builtin/stash.c:269
msgid "unable to write new index file"
msgstr "неуспешно записване на новия индекс"
-#: midx.c:74
+#: midx.c:78
msgid "multi-pack-index OID fanout is of the wrong size"
msgstr "неправилен размер на откъс (OID fanout) на индекса за множество пакети"
-#: midx.c:105
+#: midx.c:109
#, c-format
msgid "multi-pack-index file %s is too small"
msgstr "файлът с индекса за множество пакети „%s“ е твърде малък"
-#: midx.c:121
+#: midx.c:125
#, c-format
msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
msgstr "отпечатъкът на индекса за множество пакети 0x%08x не съвпада с 0x%08x"
-#: midx.c:126
+#: midx.c:130
#, c-format
msgid "multi-pack-index version %d not recognized"
msgstr "непозната версия на индекс за множество пакети — %d"
-#: midx.c:131
+#: midx.c:135
#, c-format
msgid "multi-pack-index hash version %u does not match version %u"
msgstr ""
"версията на контролната сума на индекса за множество пакети %u не съвпада с "
"%u"
-#: midx.c:148
+#: midx.c:152
msgid "multi-pack-index missing required pack-name chunk"
msgstr "липсва откъс (pack-name) от индекс за множество пакети"
-#: midx.c:150
+#: midx.c:154
msgid "multi-pack-index missing required OID fanout chunk"
msgstr "липсва откъс (OID fanout) от индекс за множество пакети"
-#: midx.c:152
+#: midx.c:156
msgid "multi-pack-index missing required OID lookup chunk"
msgstr "липсва откъс (OID lookup) от индекс за множество пакети"
-#: midx.c:154
+#: midx.c:158
msgid "multi-pack-index missing required object offsets chunk"
msgstr "липсва откъс за отместванията на обекти от индекс за множество пакети"
-#: midx.c:170
+#: midx.c:174
#, c-format
msgid "multi-pack-index pack names out of order: '%s' before '%s'"
msgstr ""
"неправилна подредба на имената в индекс за множество пакети: „%s“ се появи "
"преди „%s“"
-#: midx.c:214
+#: midx.c:221
#, c-format
msgid "bad pack-int-id: %u (%u total packs)"
msgstr ""
"неправилен идентификатор на пакет (pack-int-id): %u (от общо %u пакети)"
-#: midx.c:264
+#: midx.c:271
msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
msgstr ""
"индексът за множество пакети съдържа 64-битови отмествания, но размерът на "
"„off_t“ е недостатъчен"
-#: midx.c:490
+#: midx.c:502
#, c-format
msgid "failed to add packfile '%s'"
msgstr "пакетният файл „%s“ не може да бъде добавен"
-#: midx.c:496
+#: midx.c:508
#, c-format
msgid "failed to open pack-index '%s'"
msgstr "индексът за пакети „%s“ не може да бъде отворен"
-#: midx.c:564
+#: midx.c:576
#, c-format
msgid "failed to locate object %d in packfile"
msgstr "обект %d в пакетния файл липсва"
-#: midx.c:880 builtin/index-pack.c:1533
+#: midx.c:892
msgid "cannot store reverse index file"
msgstr "файлът за индекса не може да бъде съхранен"
-#: midx.c:920
+#: midx.c:990
+#, c-format
+msgid "could not parse line: %s"
+msgstr "редът не може да се анализира: „%s“"
+
+#: midx.c:992
+#, c-format
+msgid "malformed line: %s"
+msgstr "неправилен ред: „%s“."
+
+#: midx.c:1159
msgid "ignoring existing multi-pack-index; checksum mismatch"
msgstr ""
"индексът за множество пакети се прескача, защото контролната сума не съвпада"
-#: midx.c:943
+#: midx.c:1184
+msgid "could not load pack"
+msgstr "пакетът не може да се зареди"
+
+#: midx.c:1190
+#, c-format
+msgid "could not open index for %s"
+msgstr "индексът за „%s“ не може да се отвори"
+
+#: midx.c:1201
msgid "Adding packfiles to multi-pack-index"
msgstr "Добавяне на пакетни файлове към индекс за множество пакети"
-#: midx.c:989
-#, c-format
-msgid "did not see pack-file %s to drop"
-msgstr "пакетният файл за триене „%s“ не може да се открие"
-
-#: midx.c:1034
+#: midx.c:1244
#, c-format
msgid "unknown preferred pack: '%s'"
msgstr "непознат предпочитан пакет: %s"
-#: midx.c:1039
+#: midx.c:1289
+#, c-format
+msgid "cannot select preferred pack %s with no objects"
+msgstr ""
+"не може да изберете „%s“, който не съдържа обекти, за предпочитан пакет"
+
+#: midx.c:1321
+#, c-format
+msgid "did not see pack-file %s to drop"
+msgstr "пакетният файл за триене „%s“ не може да се открие"
+
+#: midx.c:1367
#, c-format
msgid "preferred pack '%s' is expired"
msgstr "предпочитаният пакет „%s“ е остарял"
-#: midx.c:1055
+#: midx.c:1380
msgid "no pack files to index."
msgstr "няма пакетни файлове за индексиране"
-#: midx.c:1135 builtin/clean.c:37
+#: midx.c:1417
+msgid "could not write multi-pack bitmap"
+msgstr "многопакетната битова маска не може да бъде запазена"
+
+#: midx.c:1427
+msgid "could not write multi-pack-index"
+msgstr "индексът за множество пакети не може да бъде запазен"
+
+#: midx.c:1486 builtin/clean.c:37
#, c-format
msgid "failed to remove %s"
msgstr "файлът „%s“ не може да бъде изтрит"
-#: midx.c:1166
+#: midx.c:1517
#, c-format
msgid "failed to clear multi-pack-index at %s"
msgstr "индексът за множество пакети не може да бъде изчистен при „%s“"
-#: midx.c:1225
+#: midx.c:1577
msgid "multi-pack-index file exists, but failed to parse"
msgstr "файлът с индекса за множество пакети, но не може да бъде анализиран"
-#: midx.c:1233
+#: midx.c:1585
msgid "incorrect checksum"
msgstr "неправилна контролна сума"
-#: midx.c:1236
+#: midx.c:1588
msgid "Looking for referenced packfiles"
msgstr "Търсене на указаните пакетни файлове"
-#: midx.c:1251
+#: midx.c:1603
#, c-format
msgid ""
"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
@@ -5625,75 +5780,75 @@
"неправилна подредба на откъси (OID fanout): fanout[%d] = %<PRIx32> > "
"%<PRIx32> = fanout[%d]"
-#: midx.c:1256
+#: midx.c:1608
msgid "the midx contains no oid"
msgstr "във файла с индекса за множество пакети няма идентификатори на обекти"
-#: midx.c:1265
+#: midx.c:1617
msgid "Verifying OID order in multi-pack-index"
msgstr ""
"Проверка на подредбата на идентификатори на обекти във файл с индекс към "
"множество пакетни файлове"
-#: midx.c:1274
+#: midx.c:1626
#, 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:1294
+#: midx.c:1646
msgid "Sorting objects by packfile"
msgstr "Подредба на обектите по пакетни файлове"
-#: midx.c:1301
+#: midx.c:1653
msgid "Verifying object offsets"
msgstr "Проверка на отместването на обекти"
-#: midx.c:1317
+#: midx.c:1669
#, c-format
msgid "failed to load pack entry for oid[%d] = %s"
msgstr "записът в пакета за обекта oid[%d] = %s не може да бъде зареден"
-#: midx.c:1323
+#: midx.c:1675
#, c-format
msgid "failed to load pack-index for packfile %s"
msgstr "индексът на пакета „%s“ не може да бъде зареден"
-#: midx.c:1332
+#: midx.c:1684
#, c-format
msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
msgstr "неправилно отместване на обект за oid[%d] = %s: %<PRIx64> != %<PRIx64>"
-#: midx.c:1357
+#: midx.c:1709
msgid "Counting referenced objects"
msgstr "Преброяване на свързаните обекти"
-#: midx.c:1367
+#: midx.c:1719
msgid "Finding and deleting unreferenced packfiles"
msgstr "Търсене и изтриване на несвързаните пакетни файлове"
-#: midx.c:1558
+#: midx.c:1911
msgid "could not start pack-objects"
msgstr "командата „pack-objects“ не може да бъде стартирана"
-#: midx.c:1578
+#: midx.c:1931
msgid "could not finish pack-objects"
msgstr "командата „pack-objects“ не може да бъде завършена"
#: name-hash.c:542
#, c-format
msgid "unable to create lazy_dir thread: %s"
-msgstr "не може да се създаде нишка за директории: %s"
+msgstr "не може да се създаде нишка за директории (lazy_dir): %s"
#: name-hash.c:564
#, c-format
msgid "unable to create lazy_name thread: %s"
-msgstr "не може да се създаде нишка за имена: %s"
+msgstr "не може да се създаде нишка за имена (lazy_name): %s"
#: name-hash.c:570
#, c-format
msgid "unable to join lazy_name thread: %s"
-msgstr "не може да се изчака нишка за имена: %s"
+msgstr "не може да се изчака нишка за имена (lazy_name): %s"
#: notes-merge.c:277
#, c-format
@@ -5743,266 +5898,263 @@
msgid "Bad %s value: '%s'"
msgstr "Зададена е лоша стойност на променливата „%s“: „%s“"
-#: object-file.c:526
+#: object-file.c:459
#, c-format
msgid "object directory %s does not exist; check .git/objects/info/alternates"
msgstr ""
"директорията за обекти „%s“ не съществува, проверете „.git/objects/info/"
"alternates“"
-#: object-file.c:584
+#: object-file.c:517
#, c-format
msgid "unable to normalize alternate object path: %s"
msgstr "алтернативният път към обекти не може да бъде нормализиран: „%s“"
-#: object-file.c:658
+#: object-file.c:591
#, c-format
msgid "%s: ignoring alternate object stores, nesting too deep"
msgstr ""
"%s: алтернативните хранилища за обекти се пренебрегват поради прекалено "
"дълбоко влагане"
-#: object-file.c:665
+#: object-file.c:598
#, c-format
msgid "unable to normalize object directory: %s"
msgstr "директорията за обекти „%s“ не може да бъде нормализирана"
-#: object-file.c:708
+#: object-file.c:641
msgid "unable to fdopen alternates lockfile"
msgstr "заключващият файл за алтернативите не може да се отвори с „fdopen“"
-#: object-file.c:726
+#: object-file.c:659
msgid "unable to read alternates file"
msgstr "файлът с алтернативите не може да бъде прочетен"
-#: object-file.c:733
+#: object-file.c:666
msgid "unable to move new alternates file into place"
msgstr "новият файл с алтернативите не може да бъде преместен на мястото му"
-#: object-file.c:768
+#: object-file.c:701
#, c-format
msgid "path '%s' does not exist"
msgstr "пътят „%s“ не съществува."
-#: object-file.c:789
+#: object-file.c:722
#, c-format
msgid "reference repository '%s' as a linked checkout is not supported yet."
msgstr "все още не се поддържа еталонно хранилище „%s“ като свързано."
-#: object-file.c:795
+#: object-file.c:728
#, c-format
msgid "reference repository '%s' is not a local repository."
msgstr "еталонното хранилище „%s“ не е локално"
-#: object-file.c:801
+#: object-file.c:734
#, c-format
msgid "reference repository '%s' is shallow"
msgstr "еталонното хранилище „%s“ е плитко"
-#: object-file.c:809
+#: object-file.c:742
#, c-format
msgid "reference repository '%s' is grafted"
msgstr "еталонното хранилище „%s“ е с присаждане"
-#: object-file.c:869
+#: object-file.c:773
+#, c-format
+msgid "could not find object directory matching %s"
+msgstr "директорията с обекти, която отговаря на „%s“, не може да бъде открита"
+
+#: object-file.c:823
#, c-format
msgid "invalid line while parsing alternate refs: %s"
msgstr "неправилен ред при анализа на алтернативните указатели: „%s“"
-#: object-file.c:1019
+#: object-file.c:973
#, c-format
msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
msgstr ""
"неуспешен опит за „mmap“ %<PRIuMAX>, което е над позволеното %<PRIuMAX>"
-#: object-file.c:1054
+#: object-file.c:1008
#, c-format
msgid "mmap failed%s"
msgstr "неуспешно изпълнение на „mmap“%s"
-#: object-file.c:1218
+#: object-file.c:1174
#, c-format
msgid "object file %s is empty"
msgstr "файлът с обектите „%s“ е празен"
-#: object-file.c:1353 object-file.c:2548
+#: object-file.c:1293 object-file.c:2499
#, c-format
msgid "corrupt loose object '%s'"
msgstr "непакетираният обект „%s“ е повреден"
-#: object-file.c:1355 object-file.c:2552
+#: object-file.c:1295 object-file.c:2503
#, c-format
msgid "garbage at end of loose object '%s'"
msgstr "грешни данни в края на непакетирания обект „%s“"
-#: object-file.c:1397
-msgid "invalid object type"
-msgstr "неправилен вид обект"
-
-#: object-file.c:1481
-#, c-format
-msgid "unable to unpack %s header with --allow-unknown-type"
-msgstr ""
-"заглавната част „%s“ не може да се разпакетира с опцията „--allow-unknown-"
-"type“"
-
-#: object-file.c:1484
-#, c-format
-msgid "unable to unpack %s header"
-msgstr "заглавната част на „%s“ не може да бъде разпакетирана"
-
-#: object-file.c:1490
-#, c-format
-msgid "unable to parse %s header with --allow-unknown-type"
-msgstr ""
-"заглавната част „%s“ не може да се анализира с опцията „--allow-unknown-type“"
-
-#: object-file.c:1493
+#: object-file.c:1417
#, c-format
msgid "unable to parse %s header"
msgstr "заглавната част на „%s“ не може да бъде анализирана"
-#: object-file.c:1717
+#: object-file.c:1419
+msgid "invalid object type"
+msgstr "неправилен вид обект"
+
+#: object-file.c:1430
+#, c-format
+msgid "unable to unpack %s header"
+msgstr "заглавната част на „%s“ не може да бъде разпакетирана"
+
+#: object-file.c:1434
+#, c-format
+msgid "header for %s too long, exceeds %d bytes"
+msgstr "заглавната част на „%s“ е прекалено дълга — надхвърля %d байта"
+
+#: object-file.c:1664
#, c-format
msgid "failed to read object %s"
msgstr "обектът „%s“ не може да бъде прочетен"
-#: object-file.c:1721
+#: object-file.c:1668
#, c-format
msgid "replacement %s not found for %s"
msgstr "заместителят „%s“ на „%s“ не може да бъде открит"
-#: object-file.c:1725
+#: object-file.c:1672
#, c-format
msgid "loose object %s (stored in %s) is corrupt"
msgstr "непакетираният обект „%s“ (в „%s“) е повреден"
-#: object-file.c:1729
+#: object-file.c:1676
#, c-format
msgid "packed object %s (stored in %s) is corrupt"
msgstr "пакетираният обект „%s“ (в „%s“) е повреден"
-#: object-file.c:1834
+#: object-file.c:1781
#, c-format
msgid "unable to write file %s"
msgstr "файлът „%s“ не може да бъде записан"
-#: object-file.c:1841
+#: object-file.c:1788
#, c-format
msgid "unable to set permission to '%s'"
msgstr "правата за достъп до „%s“ не може да бъдат зададени"
-#: object-file.c:1848
+#: object-file.c:1795
msgid "file write error"
msgstr "грешка при запис на файл"
-#: object-file.c:1868
+#: object-file.c:1815
msgid "error when closing loose object file"
msgstr "грешка при затварянето на файла с непакетиран обект"
-#: object-file.c:1933
+#: object-file.c:1882
#, c-format
msgid "insufficient permission for adding an object to repository database %s"
msgstr ""
"няма права за добавяне на обект към базата от данни на хранилището „%s“"
-#: object-file.c:1935
+#: object-file.c:1884
msgid "unable to create temporary file"
msgstr "не може да бъде създаден временен файл"
-#: object-file.c:1959
+#: object-file.c:1908
msgid "unable to write loose object file"
msgstr "грешка при записа на файла с непакетиран обект"
-#: object-file.c:1965
+#: object-file.c:1914
#, c-format
msgid "unable to deflate new object %s (%d)"
msgstr "новият обект „%s“ не може да се компресира с „deflate“: %d"
-#: object-file.c:1969
+#: object-file.c:1918
#, c-format
msgid "deflateEnd on object %s failed (%d)"
msgstr "неуспешно приключване на „deflate“ върху „%s“: %d"
-#: object-file.c:1973
+#: object-file.c:1922
#, c-format
msgid "confused by unstable object source data for %s"
msgstr "грешка поради нестабилния източник данни за обектите „%s“"
-#: object-file.c:1983 builtin/pack-objects.c:1237
+#: object-file.c:1933 builtin/pack-objects.c:1243
#, c-format
msgid "failed utime() on %s"
msgstr "неуспешно задаване на време на достъп/създаване чрез „utime“ на „%s“"
-#: object-file.c:2060
+#: object-file.c:2011
#, c-format
msgid "cannot read object for %s"
msgstr "обектът за „%s“ не може да се прочете"
-#: object-file.c:2111
+#: object-file.c:2062
msgid "corrupt commit"
msgstr "повредено подаване"
-#: object-file.c:2119
+#: object-file.c:2070
msgid "corrupt tag"
msgstr "повреден етикет"
-#: object-file.c:2219
+#: object-file.c:2170
#, c-format
msgid "read error while indexing %s"
msgstr "грешка при четене по време на индексиране на „%s“"
-#: object-file.c:2222
+#: object-file.c:2173
#, c-format
msgid "short read while indexing %s"
msgstr "непълно прочитане по време на индексиране на „%s“"
-#: object-file.c:2295 object-file.c:2305
+#: object-file.c:2246 object-file.c:2256
#, c-format
msgid "%s: failed to insert into database"
msgstr "„%s“ не може да се вмъкне в базата от данни"
-#: object-file.c:2311
+#: object-file.c:2262
#, c-format
msgid "%s: unsupported file type"
msgstr "неподдържан вид файл: „%s“"
-#: object-file.c:2335
+#: object-file.c:2286 builtin/fetch.c:1445
#, c-format
msgid "%s is not a valid object"
msgstr "„%s“ е неправилен обект"
-#: object-file.c:2337
+#: object-file.c:2288
#, c-format
msgid "%s is not a valid '%s' object"
msgstr "„%s“ е неправилен обект от вид „%s“"
-#: object-file.c:2364 builtin/index-pack.c:192
+#: object-file.c:2315
#, c-format
msgid "unable to open %s"
msgstr "обектът „%s“ не може да бъде отворен"
-#: object-file.c:2559 object-file.c:2612
+#: object-file.c:2510
#, c-format
msgid "hash mismatch for %s (expected %s)"
msgstr "неправилна контролна сума за „%s“ (трябва да е %s)"
-#: object-file.c:2583
+#: object-file.c:2533
#, c-format
msgid "unable to mmap %s"
msgstr "неуспешно изпълнение на „mmap“ върху „%s“"
-#: object-file.c:2588
+#: object-file.c:2539
#, c-format
msgid "unable to unpack header of %s"
msgstr "заглавната част на „%s“ не може да бъде разпакетирана"
-#: object-file.c:2594
+#: object-file.c:2544
#, c-format
msgid "unable to parse header of %s"
msgstr "заглавната част на „%s“ не може да бъде анализирана"
-#: object-file.c:2605
+#: object-file.c:2555
#, c-format
msgid "unable to unpack contents of %s"
msgstr "съдържанието на „%s“ не може да бъде разпакетирано"
@@ -6032,9 +6184,9 @@
"с 40 шестнадесетични знака, защото стандартно те ще бъдат прескачани.\n"
"Възможно е такива указатели да са създадени случайно. Например:\n"
"\n"
-" git switch -c $BRANCH $(git rev-parse …)\n"
+" git switch -c $br $(git rev-parse …)\n"
"\n"
-"където стойността на променливата на средата BRANCH е празна, при което\n"
+"където стойността на променливата на средата „$br“ е празна, при което\n"
"се създава подобен указател. Прегледайте тези указатели и ги изтрийте.\n"
"За да изключите това съобщение, изпълнете:\n"
"\n"
@@ -6131,12 +6283,27 @@
msgid "hash mismatch %s"
msgstr "разлика в контролната сума: „%s“"
-#: pack-bitmap.c:868 pack-bitmap.c:874 builtin/pack-objects.c:2411
+#: pack-bitmap.c:348
+msgid "multi-pack bitmap is missing required reverse index"
+msgstr "задължителният обратен индекс липсва в многопакетната битова маска"
+
+#: pack-bitmap.c:424
+msgid "load_reverse_index: could not open pack"
+msgstr ""
+"load_reverse_index: пакетът не може да се отвори (при зареждане на обратния "
+"индекс)"
+
+#: pack-bitmap.c:1064 pack-bitmap.c:1070 builtin/pack-objects.c:2424
#, c-format
msgid "unable to get size of %s"
msgstr "размерът на „%s“ не може да бъде получен"
-#: pack-bitmap.c:1571 builtin/rev-list.c:92
+#: pack-bitmap.c:1916
+#, c-format
+msgid "could not find %s in pack %s at offset %<PRIuMAX>"
+msgstr "„%s“ липсва в пакет „%s“ при отместване %<PRIuMAX>"
+
+#: pack-bitmap.c:1952 builtin/rev-list.c:92
#, c-format
msgid "unable to get disk usage of %s"
msgstr "използваното място за „%s“ не може да бъде получено"
@@ -6168,50 +6335,50 @@
"идентификатор на контролна сума %2$<PRIu32> на файла с обратен индекс „%1$s“ "
"не се поддържа"
-#: pack-write.c:250
+#: pack-write.c:251
msgid "cannot both write and verify reverse index"
msgstr "обратният индекс не може едновременно да се записва и да се проверява"
-#: pack-write.c:271
+#: pack-write.c:270
#, c-format
msgid "could not stat: %s"
msgstr "не може да се получи информация чрез „stat“ за „%s“"
-#: pack-write.c:283
+#: pack-write.c:282
#, c-format
msgid "failed to make %s readable"
msgstr "не може да се дадат права за четене на „%s“"
-#: pack-write.c:522
+#: pack-write.c:520
#, c-format
msgid "could not write '%s' promisor file"
msgstr "гарантиращият файл „%s“ не може да се запише"
-#: packfile.c:625
+#: packfile.c:626
msgid "offset before end of packfile (broken .idx?)"
msgstr ""
"отместване преди края на пакетния файл (възможно е индексът да е повреден)"
-#: packfile.c:655
+#: packfile.c:656
#, c-format
msgid "packfile %s cannot be mapped%s"
msgstr "не може да се изпълни „mmap“ върху пакетния файл „%s“%s"
-#: packfile.c:1934
+#: packfile.c:1923
#, c-format
msgid "offset before start of pack index for %s (corrupt index?)"
msgstr ""
"отместване преди началото на индекса на пакетния файл „%s“ (възможно е "
"индексът да е повреден)"
-#: packfile.c:1938
+#: packfile.c:1927
#, c-format
msgid "offset beyond end of pack index for %s (truncated index?)"
msgstr ""
"отместване преди края на индекса на пакетния файл „%s“ (възможно е индексът "
"да е отрязан)"
-#: parse-options-cb.c:20 parse-options-cb.c:24
+#: parse-options-cb.c:20 parse-options-cb.c:24 builtin/commit-graph.c:175
#, c-format
msgid "option `%s' expects a numerical value"
msgstr "опцията „%s“ очаква число за аргумент"
@@ -6233,72 +6400,72 @@
msgid "malformed object name '%s'"
msgstr "неправилно име на обект „%s“"
-#: parse-options.c:38
+#: parse-options.c:58
#, c-format
msgid "%s requires a value"
msgstr "опцията „%s“ изисква аргумент"
-#: parse-options.c:73
+#: parse-options.c:93
#, c-format
msgid "%s is incompatible with %s"
msgstr "опциите „%s“ и „%s“ са несъвместими"
-#: parse-options.c:78
+#: parse-options.c:98
#, c-format
msgid "%s : incompatible with something else"
msgstr "опцията „%s“ е несъвместима с нещо"
-#: parse-options.c:92 parse-options.c:96 parse-options.c:317
+#: parse-options.c:112 parse-options.c:116
#, c-format
msgid "%s takes no value"
msgstr "опцията „%s“ не приема аргументи"
-#: parse-options.c:94
+#: parse-options.c:114
#, c-format
msgid "%s isn't available"
msgstr "опцията „%s“ не е налична"
-#: parse-options.c:217
+#: parse-options.c:237
#, c-format
msgid "%s expects a non-negative integer value with an optional k/m/g suffix"
msgstr ""
"„%s“ очаква неотрицателно цяло число, евентуално със суфикс „k“/„m“/„g“"
-#: parse-options.c:386
+#: parse-options.c:393
#, c-format
msgid "ambiguous option: %s (could be --%s%s or --%s%s)"
msgstr "нееднозначна опция: „%s“ (може да е „--%s%s“ или „--%s%s“)"
-#: parse-options.c:420 parse-options.c:428
+#: parse-options.c:427 parse-options.c:435
#, c-format
msgid "did you mean `--%s` (with two dashes)?"
msgstr "„--%s“ (с 2 тирета) ли имахте предвид?"
-#: parse-options.c:668 parse-options.c:988
+#: parse-options.c:677 parse-options.c:1053
#, c-format
msgid "alias of --%s"
msgstr "псевдоним на „--%s“"
-#: parse-options.c:879
+#: parse-options.c:891
#, c-format
msgid "unknown option `%s'"
msgstr "непозната опция: „%s“"
-#: parse-options.c:881
+#: parse-options.c:893
#, c-format
msgid "unknown switch `%c'"
msgstr "непознат флаг „%c“"
-#: parse-options.c:883
+#: parse-options.c:895
#, c-format
msgid "unknown non-ascii option in string: `%s'"
msgstr "непозната стойност извън „ascii“ в низа: „%s“"
-#: parse-options.c:907
+#: parse-options.c:919
msgid "..."
msgstr "…"
-#: parse-options.c:926
+#: parse-options.c:933
#, c-format
msgid "usage: %s"
msgstr "употреба: %s"
@@ -6306,48 +6473,72 @@
#. TRANSLATORS: the colon here should align with the
#. one in "usage: %s" translation.
#.
-#: parse-options.c:932
+#: parse-options.c:948
#, c-format
msgid " or: %s"
msgstr " или: %s"
-#: parse-options.c:935
+#. TRANSLATORS: You should only need to translate this format
+#. string if your language is a RTL language (e.g. Arabic,
+#. Hebrew etc.), not if it's a LTR language (e.g. German,
+#. Russian, Chinese etc.).
+#. *
+#. When a translated usage string has an embedded "\n" it's
+#. because options have wrapped to the next line. The line
+#. after the "\n" will then be padded to align with the
+#. command name, such as N_("git cmd [opt]\n<8
+#. spaces>[opt2]"), where the 8 spaces are the same length as
+#. "git cmd ".
+#. *
+#. This format string prints out that already-translated
+#. line. The "%*s" is whitespace padding to account for the
+#. padding at the start of the line that we add in this
+#. function. The "%s" is a line in the (hopefully already
+#. translated) N_() usage string, which contained embedded
+#. newlines before we split it up.
+#.
+#: parse-options.c:969
+#, c-format
+msgid "%*s%s"
+msgstr "%*s%s"
+
+#: parse-options.c:992
#, c-format
msgid " %s"
msgstr " %s"
-#: parse-options.c:974
+#: parse-options.c:1039
msgid "-NUM"
msgstr "-ЧИСЛО"
-#: path.c:915
+#: path.c:922
#, c-format
msgid "Could not make %s writable by group"
msgstr "Не може да се дадат права за запис в директорията „%s“ на групата"
-#: pathspec.c:151
+#: pathspec.c:150
msgid "Escape character '\\' not allowed as last character in attr value"
msgstr ""
"Екраниращият знак „\\“не може да е последен знак в стойността на атрибут"
-#: pathspec.c:169
+#: pathspec.c:168
msgid "Only one 'attr:' specification is allowed."
msgstr "Позволено е само едно указване на „attr:“."
-#: pathspec.c:172
+#: pathspec.c:171
msgid "attr spec must not be empty"
msgstr "„attr:“ трябва да указва стойност"
-#: pathspec.c:215
+#: pathspec.c:214
#, c-format
msgid "invalid attribute name %s"
msgstr "неправилно име на атрибут: „%s“"
-#: pathspec.c:280
+#: pathspec.c:279
msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
msgstr "глобалните настройки за пътища „glob“ и „noglob“ са несъвместими"
-#: pathspec.c:287
+#: pathspec.c:286
msgid ""
"global 'literal' pathspec setting is incompatible with all other global "
"pathspec settings"
@@ -6355,51 +6546,51 @@
"глобалната настройка за дословни пътища „literal“ е несъвместима с всички "
"други глобални настройки за пътища"
-#: pathspec.c:327
+#: pathspec.c:326
msgid "invalid parameter for pathspec magic 'prefix'"
msgstr "неправилен параметър за опцията за магически пътища „prefix“"
-#: pathspec.c:348
+#: pathspec.c:347
#, c-format
msgid "Invalid pathspec magic '%.*s' in '%s'"
msgstr "Неправилна стойност за опцията за магически пътища „%.*s“ в „%s“"
-#: pathspec.c:353
+#: pathspec.c:352
#, c-format
msgid "Missing ')' at the end of pathspec magic in '%s'"
msgstr "Знакът „)“ липсва в опцията за магически пътища в „%s“"
-#: pathspec.c:391
+#: pathspec.c:390
#, c-format
msgid "Unimplemented pathspec magic '%c' in '%s'"
msgstr "Магическите пътища „%c“ са без реализация за „%s“"
-#: pathspec.c:450
+#: pathspec.c:449
#, c-format
msgid "%s: 'literal' and 'glob' are incompatible"
msgstr "%s: опциите „literal“ и „glob“ са несъвместими"
-#: pathspec.c:466
+#: pathspec.c:465
#, c-format
msgid "%s: '%s' is outside repository at '%s'"
msgstr "%s: „%s“ е извън хранилището при „%s“"
-#: pathspec.c:542
+#: pathspec.c:541
#, c-format
msgid "'%s' (mnemonic: '%c')"
msgstr "„%s“ (клавиш: „%c“)"
-#: pathspec.c:552
+#: pathspec.c:551
#, c-format
msgid "%s: pathspec magic not supported by this command: %s"
msgstr "%s: магическите пътища не се поддържат от командата „%s“"
-#: pathspec.c:619
+#: pathspec.c:618
#, c-format
msgid "pathspec '%s' is beyond a symbolic link"
msgstr "пътят „%s“ е след символна връзка"
-#: pathspec.c:664
+#: pathspec.c:663
#, c-format
msgid "line is badly quoted: %s"
msgstr "неправилно цитиран ред: %s"
@@ -6420,7 +6611,7 @@
msgid "flush packet write failed"
msgstr "неуспешно изчистване на буферите при запис на пакет"
-#: pkt-line.c:153 pkt-line.c:265
+#: pkt-line.c:153
msgid "protocol error: impossibly long line"
msgstr "протоколна грешка: прекалено дълъг ред"
@@ -6428,7 +6619,7 @@
msgid "packet write with format failed"
msgstr "неуспешен запис на пакет с формат"
-#: pkt-line.c:204
+#: pkt-line.c:204 pkt-line.c:252
msgid "packet write failed - data exceeds max packet size"
msgstr ""
"неуспешен запис на пакетен файл — данните надвишават максималният размер на "
@@ -6439,25 +6630,25 @@
msgid "packet write failed: %s"
msgstr "неуспешен запис на пакет: %s"
-#: pkt-line.c:328 pkt-line.c:329
+#: pkt-line.c:349 pkt-line.c:350
msgid "read error"
msgstr "грешка при четене"
-#: pkt-line.c:339 pkt-line.c:340
+#: pkt-line.c:360 pkt-line.c:361
msgid "the remote end hung up unexpectedly"
msgstr "отдалеченото хранилище неочаквано прекъсна връзката"
-#: pkt-line.c:369 pkt-line.c:371
+#: pkt-line.c:390 pkt-line.c:392
#, c-format
msgid "protocol error: bad line length character: %.4s"
msgstr "протоколна грешка: неправилeн знак за дължина на ред: %.4s"
-#: pkt-line.c:386 pkt-line.c:388 pkt-line.c:394 pkt-line.c:396
+#: pkt-line.c:407 pkt-line.c:409 pkt-line.c:415 pkt-line.c:417
#, c-format
msgid "protocol error: bad line length %d"
msgstr "протоколна грешка: неправилна дължина на ред: %d"
-#: pkt-line.c:413 sideband.c:165
+#: pkt-line.c:434 sideband.c:165
#, c-format
msgid "remote error: %s"
msgstr "отдалечена грешка: %s"
@@ -6471,7 +6662,7 @@
msgid "unable to create threaded lstat: %s"
msgstr "не може да се създаде нишка за изпълнението на „lstat“: %s"
-#: pretty.c:988
+#: pretty.c:1051
msgid "unable to parse --pretty format"
msgstr "аргументът към опцията „--pretty“ не може да се анализира"
@@ -6503,21 +6694,21 @@
msgid "Removing duplicate objects"
msgstr "Изтриване на повтарящите се обекти"
-#: range-diff.c:78
+#: range-diff.c:67
msgid "could not start `log`"
msgstr "командата за журнала с подавания „log“ не може да се стартира"
-#: range-diff.c:80
+#: range-diff.c:69
msgid "could not read `log` output"
msgstr ""
"изходът от командата за журнала с подавания „log“ не може да се прочете"
-#: range-diff.c:101 sequencer.c:5550
+#: range-diff.c:97 sequencer.c:5605
#, c-format
msgid "could not parse commit '%s'"
msgstr "подаването „%s“ не може да бъде анализирано"
-#: range-diff.c:115
+#: range-diff.c:111
#, c-format
msgid ""
"could not parse first line of `log` output: did not start with 'commit ': "
@@ -6526,12 +6717,12 @@
"първият ред от изхода на командата „log“ не може да се анализира, защото не "
"започва с „commit “: „%s“"
-#: range-diff.c:140
+#: range-diff.c:137
#, c-format
msgid "could not parse git header '%.*s'"
msgstr "заглавната част на git „%.*s“ не може да се анализира"
-#: range-diff.c:307
+#: range-diff.c:304
msgid "failed to generate diff"
msgstr "неуспешно търсене на разлика"
@@ -6561,7 +6752,7 @@
"%s: може да добавяте само обикновени файлове, символни връзки и директории "
"на git"
-#: read-cache.c:753
+#: read-cache.c:753 builtin/submodule--helper.c:3241
#, c-format
msgid "'%s' does not have a commit checked out"
msgstr "не е изтеглено подаване в „%s“"
@@ -6581,16 +6772,16 @@
msgid "unable to stat '%s'"
msgstr "„stat“ не може да се изпълни върху „%s“"
-#: read-cache.c:1358
+#: read-cache.c:1373
#, c-format
msgid "'%s' appears as both a file and as a directory"
msgstr "„%s“ съществува и като файл, и като директория"
-#: read-cache.c:1573
+#: read-cache.c:1588
msgid "Refresh index"
msgstr "Обновяване на индекса"
-#: read-cache.c:1705
+#: read-cache.c:1720
#, c-format
msgid ""
"index.version set, but the value is invalid.\n"
@@ -6599,7 +6790,7 @@
"Зададена е неправилна стойност на настройката „index.version“.\n"
"Ще се ползва версия %i"
-#: read-cache.c:1715
+#: read-cache.c:1730
#, c-format
msgid ""
"GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -6609,146 +6800,152 @@
"„GIT_INDEX_VERSION“.\n"
"Ще се ползва версия %i"
-#: read-cache.c:1771
+#: read-cache.c:1786
#, c-format
msgid "bad signature 0x%08x"
msgstr "неправилен подпис: „0x%08x“"
-#: read-cache.c:1774
+#: read-cache.c:1789
#, c-format
msgid "bad index version %d"
msgstr "неправилна версия на индекса %d"
-#: read-cache.c:1783
+#: read-cache.c:1798
msgid "bad index file sha1 signature"
msgstr "неправилен подпис за контролна сума по SHA1 на файла на индекса"
-#: read-cache.c:1817
+#: read-cache.c:1832
#, c-format
msgid "index uses %.4s extension, which we do not understand"
msgstr ""
"индексът ползва разширение „%.4s“, което не се поддържа от тази версия на git"
-#: read-cache.c:1819
+#: read-cache.c:1834
#, c-format
msgid "ignoring %.4s extension"
msgstr "игнориране на разширението „%.4s“"
-#: read-cache.c:1856
+#: read-cache.c:1871
#, c-format
msgid "unknown index entry format 0x%08x"
msgstr "непознат формат на запис в индекса: „0x%08x“"
-#: read-cache.c:1872
+#: read-cache.c:1887
#, c-format
msgid "malformed name field in the index, near path '%s'"
msgstr "неправилно име на поле в индекса близо до пътя „%s“"
-#: read-cache.c:1929
+#: read-cache.c:1944
msgid "unordered stage entries in index"
msgstr "неподредени записи в индекса"
-#: read-cache.c:1932
+#: read-cache.c:1947
#, c-format
msgid "multiple stage entries for merged file '%s'"
msgstr "множество записи за слетия файл „%s“"
-#: read-cache.c:1935
+#: read-cache.c:1950
#, c-format
msgid "unordered stage entries for '%s'"
msgstr "неподредени записи за „%s“"
-#: read-cache.c:2041 read-cache.c:2339 rerere.c:549 rerere.c:583 rerere.c:1095
-#: submodule.c:1622 builtin/add.c:575 builtin/check-ignore.c:183
-#: builtin/checkout.c:522 builtin/checkout.c:711 builtin/clean.c:987
-#: builtin/commit.c:377 builtin/diff-tree.c:122 builtin/grep.c:505
-#: builtin/mv.c:146 builtin/reset.c:247 builtin/rm.c:291
-#: builtin/submodule--helper.c:331
+#: read-cache.c:2065 read-cache.c:2363 rerere.c:549 rerere.c:583 rerere.c:1095
+#: submodule.c:1662 builtin/add.c:603 builtin/check-ignore.c:183
+#: builtin/checkout.c:519 builtin/checkout.c:708 builtin/clean.c:987
+#: builtin/commit.c:378 builtin/diff-tree.c:122 builtin/grep.c:519
+#: builtin/mv.c:148 builtin/reset.c:253 builtin/rm.c:293
+#: builtin/submodule--helper.c:327 builtin/submodule--helper.c:3201
msgid "index file corrupt"
msgstr "файлът с индекса е повреден"
-#: read-cache.c:2185
+#: read-cache.c:2209
#, c-format
msgid "unable to create load_cache_entries thread: %s"
-msgstr "не може да се създаде нишка за зареждане на обектите от кеша: %s"
+msgstr ""
+"не може да се създаде нишка за зареждане на обектите от кеша "
+"(load_cache_entries): %s"
-#: read-cache.c:2198
+#: read-cache.c:2222
#, c-format
msgid "unable to join load_cache_entries thread: %s"
-msgstr "не може да се изчака нишка за зареждане на обектите от кеша: %s"
+msgstr ""
+"не може да се изчака нишка за зареждане на обектите от кеша "
+"(load_cache_entries): %s"
-#: read-cache.c:2231
+#: read-cache.c:2255
#, c-format
msgid "%s: index file open failed"
msgstr "%s: неуспешно отваряне на файла на индекса"
-#: read-cache.c:2235
+#: read-cache.c:2259
#, c-format
msgid "%s: cannot stat the open index"
msgstr "%s: не може да се получи информация за отворения индекс със „stat“"
-#: read-cache.c:2239
+#: read-cache.c:2263
#, c-format
msgid "%s: index file smaller than expected"
msgstr "%s: файлът на индекса е по-малък от очакваното"
-#: read-cache.c:2243
+#: read-cache.c:2267
#, c-format
msgid "%s: unable to map index file%s"
msgstr "%s: неуспешно изпълнение на „mmap“ върху индексния файл%s"
-#: read-cache.c:2286
+#: read-cache.c:2310
#, c-format
msgid "unable to create load_index_extensions thread: %s"
msgstr ""
-"не може да се създаде нишка за зареждане на разширенията на индекса: %s"
+"не може да се създаде нишка за зареждане на разширенията на индекса "
+"(load_index_extensions): %s"
-#: read-cache.c:2313
+#: read-cache.c:2337
#, c-format
msgid "unable to join load_index_extensions thread: %s"
msgstr ""
-"не може да се създаде нишка за зареждане на разширенията на индекса: %s"
+"не може да се създаде нишка за зареждане на разширенията на индекса "
+"(load_index_extensions): %s"
-#: read-cache.c:2351
+#: read-cache.c:2375
#, c-format
msgid "could not freshen shared index '%s'"
msgstr "споделеният индекс „%s“ не може да се обнови"
-#: read-cache.c:2398
+#: read-cache.c:2434
#, c-format
msgid "broken index, expect %s in %s, got %s"
msgstr "грешки в индекса — в „%2$s“ се очаква „%1$s“, а бе получено „%3$s“"
-#: read-cache.c:3031 strbuf.c:1173 wrapper.c:633 builtin/merge.c:1145
+#: read-cache.c:3065 strbuf.c:1179 wrapper.c:641 builtin/merge.c:1147
#, c-format
msgid "could not close '%s'"
msgstr "„%s“ не може да се затвори"
-#: read-cache.c:3074
+#: read-cache.c:3108
msgid "failed to convert to a sparse-index"
msgstr "индексът не може да бъде превърнат в частичен"
-#: read-cache.c:3145 sequencer.c:2684 sequencer.c:4440
+#: read-cache.c:3179
#, c-format
msgid "could not stat '%s'"
msgstr "неуспешно изпълнение на „stat“ върху „%s“"
-#: read-cache.c:3158
+#: read-cache.c:3192
#, c-format
msgid "unable to open git dir: %s"
msgstr "не може да се отвори директорията на git: %s"
-#: read-cache.c:3170
+#: read-cache.c:3204
#, c-format
msgid "unable to unlink: %s"
msgstr "неуспешно изтриване на „%s“"
-#: read-cache.c:3199
+#: read-cache.c:3233
#, c-format
msgid "cannot fix permission bits on '%s'"
msgstr "правата за достъп до „%s“ не може да бъдат поправени"
-#: read-cache.c:3348
+#: read-cache.c:3390
#, c-format
msgid "%s: cannot drop to stage #0"
msgstr "%s: не може да се премине към етап №0"
@@ -6830,7 +7027,7 @@
msgstr[0] "Пребазиране на „%s“ върху „%s“ (%d команди)"
msgstr[1] "Пребазиране на „%s“ върху „%s“ (%d команда)"
-#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:218
+#: rebase-interactive.c:75
msgid ""
"\n"
"Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
@@ -6838,7 +7035,7 @@
"\n"
"Не изтривайте редове. Подаванията може да се прескачат с командата „drop“.\n"
-#: rebase-interactive.c:78 git-rebase--preserve-merges.sh:222
+#: rebase-interactive.c:78
msgid ""
"\n"
"If you remove a line here THAT COMMIT WILL BE LOST.\n"
@@ -6846,7 +7043,7 @@
"\n"
"Ако изтриете ред, съответстващото му подаване ще бъде ИЗТРИТО.\n"
-#: rebase-interactive.c:84 git-rebase--preserve-merges.sh:861
+#: rebase-interactive.c:84
msgid ""
"\n"
"You are editing the todo file of an ongoing interactive rebase.\n"
@@ -6861,7 +7058,7 @@
" git rebase --continue\n"
"\n"
-#: rebase-interactive.c:89 git-rebase--preserve-merges.sh:938
+#: rebase-interactive.c:89
msgid ""
"\n"
"However, if you remove everything, the rebase will be aborted.\n"
@@ -6871,14 +7068,14 @@
"Ако изтриете всичко, пребазирането ще бъде преустановено.\n"
"\n"
-#: rebase-interactive.c:113 rerere.c:469 rerere.c:676 sequencer.c:3836
-#: sequencer.c:3862 sequencer.c:5656 builtin/fsck.c:328 builtin/rebase.c:271
+#: rebase-interactive.c:113 rerere.c:469 rerere.c:676 sequencer.c:3888
+#: sequencer.c:3914 sequencer.c:5711 builtin/fsck.c:328 builtin/gc.c:1789
+#: builtin/rebase.c:190
#, c-format
msgid "could not write '%s'"
msgstr "„%s“ не може да се запише"
-#: rebase-interactive.c:119 builtin/rebase.c:203 builtin/rebase.c:229
-#: builtin/rebase.c:253
+#: rebase-interactive.c:119
#, c-format
msgid "could not write '%s'."
msgstr "„%s“ не може да се запише."
@@ -6909,12 +7106,10 @@
"предупреждение)\n"
"или „error“ (считане за грешка).\n"
-#: rebase-interactive.c:236 rebase-interactive.c:241 sequencer.c:2597
-#: builtin/rebase.c:189 builtin/rebase.c:214 builtin/rebase.c:240
-#: builtin/rebase.c:265
+#: rebase.c:29
#, c-format
-msgid "could not read '%s'."
-msgstr "от „%s“ не може да се чете."
+msgid "%s: 'preserve' superseded by 'merges'"
+msgstr "%s: „merges“ заменя „preserve“"
#: ref-filter.c:42 wt-status.c:2036
msgid "gone"
@@ -6935,257 +7130,278 @@
msgid "ahead %d, behind %d"
msgstr "напред с %d, назад с %d"
-#: ref-filter.c:230
+#: ref-filter.c:235
#, c-format
msgid "expected format: %%(color:<color>)"
msgstr "очакван формат: %%(color:ЦВЯТ)"
-#: ref-filter.c:232
+#: ref-filter.c:237
#, c-format
msgid "unrecognized color: %%(color:%s)"
msgstr "непознат цвят: %%(color:%s)"
-#: ref-filter.c:254
+#: ref-filter.c:259
#, c-format
msgid "Integer value expected refname:lstrip=%s"
msgstr "очаква се цяло число за „refname:lstrip=%s“"
-#: ref-filter.c:258
+#: ref-filter.c:263
#, c-format
msgid "Integer value expected refname:rstrip=%s"
msgstr "очаква се цяло число за „refname:rstrip=%s“"
-#: ref-filter.c:260
+#: ref-filter.c:265
#, c-format
msgid "unrecognized %%(%s) argument: %s"
msgstr "непознат аргумент за „%%(%s)“: %s"
-#: ref-filter.c:315
+#: ref-filter.c:320
#, c-format
msgid "%%(objecttype) does not take arguments"
msgstr "%%(objecttype) не приема аргументи"
-#: ref-filter.c:339
+#: ref-filter.c:344
#, c-format
msgid "unrecognized %%(objectsize) argument: %s"
msgstr "непознат аргумент за %%(objectsize): %s"
-#: ref-filter.c:347
+#: ref-filter.c:352
#, c-format
msgid "%%(deltabase) does not take arguments"
msgstr "%%(deltabase) не приема аргументи"
-#: ref-filter.c:359
+#: ref-filter.c:364
#, c-format
msgid "%%(body) does not take arguments"
msgstr "%%(body) не приема аргументи"
-#: ref-filter.c:372
+#: ref-filter.c:377
#, c-format
msgid "unrecognized %%(subject) argument: %s"
msgstr "непознат аргумент за %%(subject): %s"
-#: ref-filter.c:391
+#: ref-filter.c:396
#, c-format
msgid "expected %%(trailers:key=<value>)"
-msgstr "очаква се %%(trailers:КЛЮЧ=СТОЙНОСТ)"
+msgstr "очаква се %%(trailers:key=ЕПИЛОГ)"
-#: ref-filter.c:393
+#: ref-filter.c:398
#, c-format
msgid "unknown %%(trailers) argument: %s"
msgstr "непознат аргумент „%%(trailers)“: %s"
-#: ref-filter.c:424
+#: ref-filter.c:429
#, c-format
msgid "positive value expected contents:lines=%s"
msgstr "очаква се положителна стойност за „contents:lines=%s“"
-#: ref-filter.c:426
+#: ref-filter.c:431
#, c-format
msgid "unrecognized %%(contents) argument: %s"
msgstr "непознат аргумент за %%(contents): %s"
-#: ref-filter.c:441
+#: ref-filter.c:443
+#, c-format
+msgid "unrecognized %%(raw) argument: %s"
+msgstr "непознат аргумент за „%%(raw)“: %s"
+
+#: ref-filter.c:458
#, c-format
msgid "positive value expected '%s' in %%(%s)"
msgstr "очаква се положителна стойност за „%s“ в %%(%s)"
-#: ref-filter.c:445
+#: ref-filter.c:462
#, c-format
msgid "unrecognized argument '%s' in %%(%s)"
msgstr "непознат аргумент „%s“ в %%(%s)"
-#: ref-filter.c:459
+#: ref-filter.c:476
#, c-format
msgid "unrecognized email option: %s"
msgstr "непозната опция за е-поща: %s"
-#: ref-filter.c:489
+#: ref-filter.c:506
#, c-format
msgid "expected format: %%(align:<width>,<position>)"
msgstr "очакван формат: %%(align:ШИРОЧИНА,ПОЗИЦИЯ)"
-#: ref-filter.c:501
+#: ref-filter.c:518
#, c-format
msgid "unrecognized position:%s"
msgstr "непозната позиция: %s"
-#: ref-filter.c:508
+#: ref-filter.c:525
#, c-format
msgid "unrecognized width:%s"
msgstr "непозната широчина: %s"
-#: ref-filter.c:517
+#: ref-filter.c:534
#, c-format
msgid "unrecognized %%(align) argument: %s"
msgstr "непознат аргумент за %%(align): %s"
-#: ref-filter.c:525
+#: ref-filter.c:542
#, c-format
msgid "positive width expected with the %%(align) atom"
msgstr "очаква се положителна широчина с лексемата „%%(align)“"
-#: ref-filter.c:543
+#: ref-filter.c:560
#, c-format
msgid "unrecognized %%(if) argument: %s"
msgstr "непознат аргумент за „%%(if)“: %s"
-#: ref-filter.c:645
+#: ref-filter.c:568
+#, c-format
+msgid "%%(rest) does not take arguments"
+msgstr "%%(rest) не приема аргументи"
+
+#: ref-filter.c:680
#, c-format
msgid "malformed field name: %.*s"
msgstr "неправилно име на обект: „%.*s“"
-#: ref-filter.c:672
+#: ref-filter.c:707
#, c-format
msgid "unknown field name: %.*s"
msgstr "непознато име на обект: „%.*s“"
-#: ref-filter.c:676
+#: ref-filter.c:711
#, c-format
msgid ""
"not a git repository, but the field '%.*s' requires access to object data"
msgstr "не е хранилище на git, а полето „%.*s“ изисква достъп данни на обектни"
-#: ref-filter.c:801
+#: ref-filter.c:844
#, c-format
msgid "format: %%(if) atom used without a %%(then) atom"
msgstr "формат: лексемата %%(if) е използвана без съответната ѝ %%(then)"
-#: ref-filter.c:865
+#: ref-filter.c:910
#, c-format
msgid "format: %%(then) atom used without an %%(if) atom"
msgstr "формат: лексемата %%(then) е използвана без съответната ѝ %%(if)"
-#: ref-filter.c:867
+#: ref-filter.c:912
#, c-format
msgid "format: %%(then) atom used more than once"
msgstr "формат: лексемата %%(then) е използвана повече от един път"
-#: ref-filter.c:869
+#: ref-filter.c:914
#, c-format
msgid "format: %%(then) atom used after %%(else)"
msgstr "формат: лексемата %%(then) е използвана след %%(else)"
-#: ref-filter.c:897
+#: ref-filter.c:946
#, c-format
msgid "format: %%(else) atom used without an %%(if) atom"
msgstr "формат: лексемата %%(else) е използвана без съответната ѝ %%(if)"
-#: ref-filter.c:899
+#: ref-filter.c:948
#, c-format
msgid "format: %%(else) atom used without a %%(then) atom"
msgstr "формат: лексемата %%(else) е използвана без съответната ѝ %%(then)"
-#: ref-filter.c:901
+#: ref-filter.c:950
#, c-format
msgid "format: %%(else) atom used more than once"
msgstr "формат: лексемата %%(else) е използвана повече от един път"
-#: ref-filter.c:916
+#: ref-filter.c:965
#, c-format
msgid "format: %%(end) atom used without corresponding atom"
msgstr "формат: лексемата %%(end) е използвана без съответната ѝ"
-#: ref-filter.c:973
+#: ref-filter.c:1027
#, c-format
msgid "malformed format string %s"
msgstr "неправилен форматиращ низ „%s“"
-#: ref-filter.c:1621
+#: ref-filter.c:1033
+#, c-format
+msgid "this command reject atom %%(%.*s)"
+msgstr "тази команда отхвърли лексемата %%(%.*s)"
+
+#: ref-filter.c:1040
+#, c-format
+msgid "--format=%.*s cannot be used with --python, --shell, --tcl"
+msgstr ""
+"опцията „--format=%.*s“ е несъвместима с „--python“, „--shell“, „--tcl“"
+
+#: ref-filter.c:1706
#, c-format
msgid "(no branch, rebasing %s)"
msgstr "(извън клон, пребазиране на „%s“)"
-#: ref-filter.c:1624
+#: ref-filter.c:1709
#, c-format
msgid "(no branch, rebasing detached HEAD %s)"
msgstr "(извън клон, пребазиране на несвързан указател „HEAD“ при „%s“)"
-#: ref-filter.c:1627
+#: ref-filter.c:1712
#, c-format
msgid "(no branch, bisect started on %s)"
msgstr "(извън клон, двоично търсене от „%s“)"
-#: ref-filter.c:1631
+#: ref-filter.c:1716
#, c-format
msgid "(HEAD detached at %s)"
msgstr "(указателят „HEAD“ не е свързан и е при „%s“)"
-#: ref-filter.c:1634
+#: ref-filter.c:1719
#, c-format
msgid "(HEAD detached from %s)"
msgstr "(указателят „HEAD“ не е свързан и е отделѐн от „%s“)"
-#: ref-filter.c:1637
+#: ref-filter.c:1722
msgid "(no branch)"
msgstr "(извън клон)"
-#: ref-filter.c:1669 ref-filter.c:1880
+#: ref-filter.c:1754 ref-filter.c:1972
#, c-format
msgid "missing object %s for %s"
msgstr "обектът „%s“ липсва за „%s“"
-#: ref-filter.c:1679
+#: ref-filter.c:1764
#, c-format
msgid "parse_object_buffer failed on %s for %s"
msgstr "неуспешно анализиране чрез „parse_object_buffer“ на „%s“ за „%s“"
-#: ref-filter.c:2064
+#: ref-filter.c:2155
#, c-format
msgid "malformed object at '%s'"
msgstr "обект със сгрешен формат при „%s“"
-#: ref-filter.c:2153
+#: ref-filter.c:2245
#, c-format
msgid "ignoring ref with broken name %s"
msgstr "игнориране на указателя с грешно име „%s“"
-#: ref-filter.c:2158 refs.c:676
+#: ref-filter.c:2250 refs.c:673
#, c-format
msgid "ignoring broken ref %s"
msgstr "игнориране на повредения указател „%s“"
-#: ref-filter.c:2498
+#: ref-filter.c:2623
#, c-format
msgid "format: %%(end) atom missing"
msgstr "грешка във форма̀та: липсва лексемата %%(end)"
-#: ref-filter.c:2592
+#: ref-filter.c:2726
#, c-format
msgid "malformed object name %s"
msgstr "неправилно име на обект „%s“"
-#: ref-filter.c:2597
+#: ref-filter.c:2731
#, c-format
msgid "option `%s' must point to a commit"
msgstr "опцията „%s“ не сочи към подаване"
-#: refs.c:264
+#: refs.c:261
#, c-format
msgid "%s does not point to a valid object!"
msgstr "„%s“ не сочи към позволен обект!"
-#: refs.c:566
+#: refs.c:563
#, c-format
msgid ""
"Using '%s' as the name for the initial branch. This default branch name\n"
@@ -7210,81 +7426,81 @@
"\n"
" git branch -m ИМЕ\n"
-#: refs.c:588
+#: refs.c:585
#, c-format
msgid "could not retrieve `%s`"
msgstr "„%s“ не може да бъде получен"
-#: refs.c:598
+#: refs.c:595
#, c-format
msgid "invalid branch name: %s = %s"
msgstr "неправилно име на клон: „%s = %s“"
-#: refs.c:674
+#: refs.c:671
#, c-format
msgid "ignoring dangling symref %s"
msgstr "игнориране на указател на обект извън клон „%s“"
-#: refs.c:922
+#: refs.c:920
#, c-format
msgid "log for ref %s has gap after %s"
msgstr "има пропуски в журнала с подаванията за указателя „%s“ след „%s“"
-#: refs.c:929
+#: refs.c:927
#, c-format
msgid "log for ref %s unexpectedly ended on %s"
msgstr "журналът с подаванията за указателя „%s“ свършва неочаквано след „%s“"
-#: refs.c:994
+#: refs.c:992
#, c-format
msgid "log for %s is empty"
msgstr "журналът с подаванията за указателя „%s“ е празен"
-#: refs.c:1086
+#: refs.c:1084
#, c-format
msgid "refusing to update ref with bad name '%s'"
msgstr "указател не може да се обнови с грешно име „%s“"
-#: refs.c:1157
+#: refs.c:1155
#, c-format
msgid "update_ref failed for ref '%s': %s"
-msgstr "неуспешно обновяване на указателя „%s“: %s"
+msgstr "неуспешно обновяване на указателя (update_ref) „%s“: %s"
-#: refs.c:2051
+#: refs.c:2062
#, c-format
msgid "multiple updates for ref '%s' not allowed"
msgstr "не са позволени повече от една промени на указателя „%s“"
-#: refs.c:2131
+#: refs.c:2142
msgid "ref updates forbidden inside quarantine environment"
msgstr "обновяванията на указатели са забранени в среди под карантина"
-#: refs.c:2142
+#: refs.c:2153
msgid "ref updates aborted by hook"
msgstr "обновяванията на указатели са преустановени от кука"
-#: refs.c:2242 refs.c:2272
+#: refs.c:2253 refs.c:2283
#, c-format
msgid "'%s' exists; cannot create '%s'"
msgstr "„%s“ съществува, не може да се създаде „%s“"
-#: refs.c:2248 refs.c:2283
+#: refs.c:2259 refs.c:2294
#, c-format
msgid "cannot process '%s' and '%s' at the same time"
msgstr "невъзможно е едновременно да се обработват „%s“ и „%s“"
-#: refs/files-backend.c:1228
+#: refs/files-backend.c:1271
#, c-format
msgid "could not remove reference %s"
msgstr "Указателят „%s“ не може да бъде изтрит"
-#: refs/files-backend.c:1242 refs/packed-backend.c:1542
-#: refs/packed-backend.c:1552
+#: refs/files-backend.c:1285 refs/packed-backend.c:1549
+#: refs/packed-backend.c:1559
#, c-format
msgid "could not delete reference %s: %s"
msgstr "Указателят „%s“ не може да бъде изтрит: %s"
-#: refs/files-backend.c:1245 refs/packed-backend.c:1555
+#: refs/files-backend.c:1288 refs/packed-backend.c:1562
#, c-format
msgid "could not delete references: %s"
msgstr "Указателите не може да бъдат изтрити: %s"
@@ -7588,7 +7804,7 @@
msgid "there were errors while writing '%s' (%s)"
msgstr "грешки при записването на „%s“ (%s)"
-#: rerere.c:482
+#: rerere.c:482 builtin/gc.c:2246 builtin/gc.c:2281
#, c-format
msgid "failed to flush '%s'"
msgstr "грешка при изчистването на буферите при записването на „%s“"
@@ -7636,8 +7852,8 @@
msgid "Recorded preimage for '%s'"
msgstr "Предварителният вариант на „%s“ е запазен"
-#: rerere.c:865 submodule.c:2076 builtin/log.c:2002
-#: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:1890
+#: rerere.c:865 submodule.c:2121 builtin/log.c:2002
+#: builtin/submodule--helper.c:1776 builtin/submodule--helper.c:1819
#, c-format
msgid "could not create directory '%s'"
msgstr "Директорията „%s“ не може да бъде създадена"
@@ -7675,49 +7891,43 @@
msgid "could not determine HEAD revision"
msgstr "не може да се определи към какво да сочи указателят „HEAD“"
-#: reset.c:70 reset.c:76 sequencer.c:3689
+#: reset.c:70 reset.c:76 sequencer.c:3705
#, c-format
msgid "failed to find tree of %s"
msgstr "дървото, сочено от „%s“, не може да бъде открито"
-#: revision.c:2344
+#: revision.c:2259
+msgid "--unsorted-input is incompatible with --no-walk"
+msgstr "опциите „--unsorted-input“ и „--no-walk“ са несъвместими"
+
+#: revision.c:2346
msgid "--unpacked=<packfile> no longer supported"
msgstr "опцията „--unpacked=ПАКЕТЕН_ФАЙЛ“ вече не се поддържа"
-#: revision.c:2684
+#: revision.c:2655 revision.c:2659
+msgid "--no-walk is incompatible with --unsorted-input"
+msgstr "опциите „--no-walk“ и „--unsorted-input“ са несъвместими"
+
+#: revision.c:2690
msgid "your current branch appears to be broken"
msgstr "Текущият клон е повреден"
-#: revision.c:2687
+#: revision.c:2693
#, c-format
msgid "your current branch '%s' does not have any commits yet"
msgstr "Текущият клон „%s“ е без подавания "
-#: revision.c:2893
+#: revision.c:2895
msgid "-L does not yet support diff formats besides -p and -s"
msgstr ""
"опцията „-L“ поддържа единствено форматирането на разликите според опциите „-"
"p“ и „-s“"
-#: run-command.c:766
-msgid "open /dev/null failed"
-msgstr "неуспешно отваряне на „/dev/null“"
-
-#: run-command.c:1274
+#: run-command.c:1278
#, c-format
msgid "cannot create async thread: %s"
msgstr "не може да се създаде асинхронна нишка: %s"
-#: run-command.c:1344
-#, c-format
-msgid ""
-"The '%s' hook was ignored because it's not set as executable.\n"
-"You can disable this warning with `git config advice.ignoredHook false`."
-msgstr ""
-"Куката „%s“ се прескача, защото липсват права за изпълнение.\n"
-"За да изключите това предупреждение, изпълнете:\n"
-" git config advice.ignoredHook false"
-
#: send-pack.c:150
msgid "unexpected flush packet while reading remote unpack status"
msgstr ""
@@ -7739,24 +7949,24 @@
msgid "failed to sign the push certificate"
msgstr "сертификатът за изтласкване не може да бъде подписан"
-#: send-pack.c:433
+#: send-pack.c:435
msgid "send-pack: unable to fork off fetch subprocess"
msgstr "send-pack: неуспешно създаване на процес"
-#: send-pack.c:455
+#: send-pack.c:457
msgid "push negotiation failed; proceeding anyway with push"
msgstr "неуспешно договаряне на изтласкване, но се продължава с изтласкването"
-#: send-pack.c:526
+#: send-pack.c:528
msgid "the receiving end does not support this repository's hash algorithm"
msgstr ""
"отсрещната страна не поддържа алгоритъма за контролни суми на това хранилище"
-#: send-pack.c:535
+#: send-pack.c:537
msgid "the receiving end does not support --signed push"
msgstr "отсрещната страна не поддържа изтласкване с опцията „--signed“"
-#: send-pack.c:537
+#: send-pack.c:539
msgid ""
"not sending a push certificate since the receiving end does not support --"
"signed push"
@@ -7764,101 +7974,149 @@
"отсрещната страна не поддържа изтласкване с опцията „--signed“, затова не се "
"използва сертификат"
-#: send-pack.c:544
+#: send-pack.c:546
msgid "the receiving end does not support --atomic push"
msgstr "получаващата страна не поддържа изтласкване с опцията „--atomic“"
-#: send-pack.c:549
+#: send-pack.c:551
msgid "the receiving end does not support push options"
msgstr "отсрещната страна не поддържа опции при изтласкване"
-#: sequencer.c:196
+#: sequencer.c:197
#, c-format
msgid "invalid commit message cleanup mode '%s'"
msgstr "несъществуващ режим на изчистване „%s“ на съобщение при подаване"
-#: sequencer.c:324
+#: sequencer.c:325
#, c-format
msgid "could not delete '%s'"
msgstr "„%s“ не може да бъде изтрит"
-#: sequencer.c:344 builtin/rebase.c:757 builtin/rebase.c:1592 builtin/rm.c:402
+#: sequencer.c:345 sequencer.c:4754 builtin/rebase.c:563 builtin/rebase.c:1297
+#: builtin/rm.c:408
#, c-format
msgid "could not remove '%s'"
msgstr "„%s“ не може да бъде изтрит"
-#: sequencer.c:354
+#: sequencer.c:355
msgid "revert"
msgstr "отмяна"
-#: sequencer.c:356
+#: sequencer.c:357
msgid "cherry-pick"
msgstr "отбиране"
-#: sequencer.c:358
+#: sequencer.c:359
msgid "rebase"
msgstr "пребазиране"
-#: sequencer.c:360
+#: sequencer.c:361
#, c-format
msgid "unknown action: %d"
msgstr "неизвестно действие: %d"
-#: sequencer.c:419
+#: sequencer.c:420
msgid ""
"after resolving the conflicts, mark the corrected paths\n"
"with 'git add <paths>' or 'git rm <paths>'"
msgstr ""
-"след коригирането на конфликтите, отбележете съответните\n"
-"пътища с „git add ПЪТ…“ или „git rm ПЪТ…“."
+"след коригирането на конфликтите, отбележете съответните пътища с:\n"
+"\n"
+" git add ПЪТ…\n"
+"\n"
+"или\n"
+"\n"
+" git rm ПЪТ…"
-#: sequencer.c:422
+#: sequencer.c:423
msgid ""
-"after resolving the conflicts, mark the corrected paths\n"
-"with 'git add <paths>' or 'git rm <paths>'\n"
-"and commit the result with 'git commit'"
+"After resolving the conflicts, mark them with\n"
+"\"git add/rm <pathspec>\", then run\n"
+"\"git cherry-pick --continue\".\n"
+"You can instead skip this commit with \"git cherry-pick --skip\".\n"
+"To abort and get back to the state before \"git cherry-pick\",\n"
+"run \"git cherry-pick --abort\"."
msgstr ""
-"след коригирането на конфликтите, отбележете съответните\n"
-"пътища с „git add ПЪТ…“ или „git rm ПЪТ…“, след което\n"
-"подайте резултата с командата „git commit'“."
+"След коригирането на конфликтите отбележете решаването им чрез:\n"
+"\n"
+" git add/rm ПЪТ…\n"
+"\n"
+"и изпълнете:\n"
+"\n"
+" git cherry-pick --continue\n"
+"\n"
+"Ако предпочитате да прескочите тази кръпка, изпълнете:\n"
+"\n"
+" git cherry-pick --skip\n"
+"\n"
+"За да откажете пребазирането и да се върнете към първоначалното състояние,\n"
+"изпълнете:\n"
+"\n"
+" git cherry-pick --abort"
-#: sequencer.c:435 sequencer.c:3271
+#: sequencer.c:430
+msgid ""
+"After resolving the conflicts, mark them with\n"
+"\"git add/rm <pathspec>\", then run\n"
+"\"git revert --continue\".\n"
+"You can instead skip this commit with \"git revert --skip\".\n"
+"To abort and get back to the state before \"git revert\",\n"
+"run \"git revert --abort\"."
+msgstr ""
+"След коригирането на конфликтите отбележете решаването им чрез:\n"
+"\n"
+" git add/rm ПЪТ…\n"
+"\n"
+"и изпълнете:\n"
+"\n"
+" git revert --continue\n"
+"\n"
+"Ако предпочитате да прескочите тази кръпка, изпълнете:\n"
+"\n"
+" git revert --skip\n"
+"\n"
+"За да откажете пребазирането и да се върнете към първоначалното състояние,\n"
+"изпълнете:\n"
+"\n"
+" git revert --abort"
+
+#: sequencer.c:448 sequencer.c:3290
#, c-format
msgid "could not lock '%s'"
msgstr "„%s“ не може да се заключи"
-#: sequencer.c:437 sequencer.c:3070 sequencer.c:3275 sequencer.c:3289
-#: sequencer.c:3547 sequencer.c:5566 strbuf.c:1170 wrapper.c:631
+#: sequencer.c:450 sequencer.c:3089 sequencer.c:3294 sequencer.c:3308
+#: sequencer.c:3566 sequencer.c:5621 strbuf.c:1176 wrapper.c:639
#, c-format
msgid "could not write to '%s'"
msgstr "в „%s“ не може да се пише"
-#: sequencer.c:442
+#: sequencer.c:455
#, c-format
msgid "could not write eol to '%s'"
msgstr "краят на ред не може да се запише в „%s“"
-#: sequencer.c:447 sequencer.c:3075 sequencer.c:3277 sequencer.c:3291
-#: sequencer.c:3555
+#: sequencer.c:460 sequencer.c:3094 sequencer.c:3296 sequencer.c:3310
+#: sequencer.c:3574
#, c-format
msgid "failed to finalize '%s'"
msgstr "„%s“ не може да се завърши"
-#: sequencer.c:486
+#: sequencer.c:499
#, c-format
msgid "your local changes would be overwritten by %s."
msgstr "локалните ви промени ще бъдат презаписани при %s."
-#: sequencer.c:490
+#: sequencer.c:503
msgid "commit your changes or stash them to proceed."
msgstr "подайте или скатайте промените, за да продължите"
-#: sequencer.c:522
+#: sequencer.c:535
#, c-format
msgid "%s: fast-forward"
msgstr "%s: превъртане"
-#: sequencer.c:561 builtin/tag.c:609
+#: sequencer.c:574 builtin/tag.c:610
#, c-format
msgid "Invalid cleanup mode %s"
msgstr "Несъществуващ режим на изчистване „%s“"
@@ -7866,65 +8124,65 @@
#. TRANSLATORS: %s will be "revert", "cherry-pick" or
#. "rebase".
#.
-#: sequencer.c:671
+#: sequencer.c:685
#, c-format
msgid "%s: Unable to write new index file"
msgstr "%s: новият индекс не може да бъде запазен"
-#: sequencer.c:685
+#: sequencer.c:699
msgid "unable to update cache tree"
msgstr "дървото на кеша не може да бъде обновено"
-#: sequencer.c:699
+#: sequencer.c:713
msgid "could not resolve HEAD commit"
msgstr "подаването, сочено от указателя „HEAD“, не може да бъде открито"
-#: sequencer.c:779
+#: sequencer.c:793
#, c-format
msgid "no key present in '%.*s'"
msgstr "в „%.*s“ няма ключове"
-#: sequencer.c:790
+#: sequencer.c:804
#, c-format
msgid "unable to dequote value of '%s'"
msgstr "цитирането на стойността на „%s“ не може да бъде изчистено"
-#: sequencer.c:827 wrapper.c:201 wrapper.c:371 builtin/am.c:729
-#: builtin/am.c:821 builtin/merge.c:1140 builtin/rebase.c:910
+#: sequencer.c:841 wrapper.c:209 wrapper.c:379 builtin/am.c:730
+#: builtin/am.c:822 builtin/rebase.c:694
#, c-format
msgid "could not open '%s' for reading"
msgstr "файлът не може да бъде прочетен: „%s“"
-#: sequencer.c:837
+#: sequencer.c:851
msgid "'GIT_AUTHOR_NAME' already given"
msgstr "настройката за автор „GIT_AUTHOR_NAME“ вече е зададена"
-#: sequencer.c:842
+#: sequencer.c:856
msgid "'GIT_AUTHOR_EMAIL' already given"
msgstr "настройката за е-поща „GIT_AUTHOR_EMAIL“ вече е зададена"
-#: sequencer.c:847
+#: sequencer.c:861
msgid "'GIT_AUTHOR_DATE' already given"
msgstr "настройката за дата „GIT_AUTHOR_DATE“ вече е зададена"
-#: sequencer.c:851
+#: sequencer.c:865
#, c-format
msgid "unknown variable '%s'"
msgstr "непозната променлива „%s“"
-#: sequencer.c:856
+#: sequencer.c:870
msgid "missing 'GIT_AUTHOR_NAME'"
msgstr "настройката за автор „GIT_AUTHOR_NAME“ липсва"
-#: sequencer.c:858
+#: sequencer.c:872
msgid "missing 'GIT_AUTHOR_EMAIL'"
msgstr "настройката за е-поща „GIT_AUTHOR_EMAIL“ липсва"
-#: sequencer.c:860
+#: sequencer.c:874
msgid "missing 'GIT_AUTHOR_DATE'"
msgstr "настройката за дата „GIT_AUTHOR_DATE“ липсва"
-#: sequencer.c:925
+#: sequencer.c:939
#, c-format
msgid ""
"you have staged changes in your working tree\n"
@@ -7953,13 +8211,13 @@
"\n"
" git rebase --continue\n"
-#: sequencer.c:1212
+#: sequencer.c:1229
msgid "'prepare-commit-msg' hook failed"
msgstr ""
"неуспешно изпълнение на куката при промяна на съобщението при подаване "
"(prepare-commit-msg)"
-#: sequencer.c:1218
+#: sequencer.c:1235
msgid ""
"Your name and email address were configured automatically based\n"
"on your username and hostname. Please check that they are accurate.\n"
@@ -7987,7 +8245,7 @@
"\n"
" git commit --amend --reset-author\n"
-#: sequencer.c:1231
+#: sequencer.c:1248
msgid ""
"Your name and email address were configured automatically based\n"
"on your username and hostname. Please check that they are accurate.\n"
@@ -8012,356 +8270,361 @@
"\n"
" git commit --amend --reset-author\n"
-#: sequencer.c:1273
+#: sequencer.c:1290
msgid "couldn't look up newly created commit"
msgstr "току що създаденото подаване не може да бъде открито"
-#: sequencer.c:1275
+#: sequencer.c:1292
msgid "could not parse newly created commit"
msgstr "току що създаденото подаване не може да бъде анализирано"
-#: sequencer.c:1321
+#: sequencer.c:1338
msgid "unable to resolve HEAD after creating commit"
msgstr ""
"състоянието сочено от указателя „HEAD“ не може да бъде открито след "
"подаването"
-#: sequencer.c:1323
+#: sequencer.c:1340
msgid "detached HEAD"
msgstr "несвързан връх „HEAD“"
-#: sequencer.c:1327
+#: sequencer.c:1344
msgid " (root-commit)"
msgstr " (начално подаване)"
-#: sequencer.c:1348
+#: sequencer.c:1365
msgid "could not parse HEAD"
msgstr "указателят „HEAD“ не може да бъде анализиран"
-#: sequencer.c:1350
+#: sequencer.c:1367
#, c-format
msgid "HEAD %s is not a commit!"
msgstr "указателят „HEAD“ „%s“ сочи към нещо, което не е подаване!"
-#: sequencer.c:1354 sequencer.c:1432 builtin/commit.c:1702
+#: sequencer.c:1371 sequencer.c:1449 builtin/commit.c:1707
msgid "could not parse HEAD commit"
msgstr "върховото подаване „HEAD“ не може да бъде прочетено"
-#: sequencer.c:1410 sequencer.c:2295
+#: sequencer.c:1427 sequencer.c:2312
msgid "unable to parse commit author"
msgstr "авторът на подаването не може да бъде анализиран"
-#: sequencer.c:1421 builtin/am.c:1615 builtin/merge.c:706
+#: sequencer.c:1438 builtin/am.c:1616 builtin/merge.c:708
msgid "git write-tree failed to write a tree"
msgstr "Командата „git write-tree“ не успя да запише обект-дърво"
-#: sequencer.c:1454 sequencer.c:1574
+#: sequencer.c:1471 sequencer.c:1591
#, c-format
msgid "unable to read commit message from '%s'"
msgstr "съобщението за подаване не може да бъде прочетено от „%s“"
-#: sequencer.c:1485 sequencer.c:1517
+#: sequencer.c:1502 sequencer.c:1534
#, c-format
msgid "invalid author identity '%s'"
msgstr "неправилна самоличност за автор: „%s“"
-#: sequencer.c:1491
+#: sequencer.c:1508
msgid "corrupt author: missing date information"
msgstr "повредена информация за автор: липсва дата"
-#: sequencer.c:1530 builtin/am.c:1642 builtin/commit.c:1816 builtin/merge.c:909
-#: builtin/merge.c:934 t/helper/test-fast-rebase.c:78
+#: sequencer.c:1547 builtin/am.c:1643 builtin/commit.c:1821 builtin/merge.c:913
+#: builtin/merge.c:938 t/helper/test-fast-rebase.c:78
msgid "failed to write commit object"
msgstr "обектът за подаването не може да бъде записан"
-#: sequencer.c:1557 sequencer.c:4492 t/helper/test-fast-rebase.c:199
+#: sequencer.c:1574 sequencer.c:4526 t/helper/test-fast-rebase.c:199
#: t/helper/test-fast-rebase.c:217
#, c-format
msgid "could not update %s"
msgstr "„%s“ не може да се обнови"
-#: sequencer.c:1606
+#: sequencer.c:1623
#, c-format
msgid "could not parse commit %s"
msgstr "подаването „%s“ не може да бъде анализирано"
-#: sequencer.c:1611
+#: sequencer.c:1628
#, c-format
msgid "could not parse parent commit %s"
msgstr "родителското подаване „%s“ не може да бъде анализирано"
-#: sequencer.c:1694 sequencer.c:1975
+#: sequencer.c:1711 sequencer.c:1992
#, c-format
msgid "unknown command: %d"
msgstr "непозната команда: %d"
-#: sequencer.c:1736 git-rebase--preserve-merges.sh:486
+#: sequencer.c:1753
msgid "This is the 1st commit message:"
msgstr "Това е 1-то съобщение при подаване:"
-#: sequencer.c:1737
+#: sequencer.c:1754
#, c-format
msgid "This is the commit message #%d:"
msgstr "Това е съобщение при подаване №%d:"
-#: sequencer.c:1738
+#: sequencer.c:1755
msgid "The 1st commit message will be skipped:"
msgstr "Съобщението при подаване №1 ще бъде прескочено:"
-#: sequencer.c:1739
+#: sequencer.c:1756
#, c-format
msgid "The commit message #%d will be skipped:"
msgstr "Съобщението при подаване №%d ще бъде прескочено:"
-#: sequencer.c:1740
+#: sequencer.c:1757
#, c-format
msgid "This is a combination of %d commits."
msgstr "Това е обединение от %d подавания"
-#: sequencer.c:1887 sequencer.c:1944
+#: sequencer.c:1904 sequencer.c:1961
#, c-format
msgid "cannot write '%s'"
msgstr "„%s“ не може да се запази"
-#: sequencer.c:1934
+#: sequencer.c:1951
msgid "need a HEAD to fixup"
msgstr "За вкарване в предходното подаване ви трябва указател „HEAD“"
-#: sequencer.c:1936 sequencer.c:3582
+#: sequencer.c:1953 sequencer.c:3601
msgid "could not read HEAD"
msgstr "указателят „HEAD“ не може да се прочете"
-#: sequencer.c:1938
+#: sequencer.c:1955
msgid "could not read HEAD's commit message"
msgstr ""
"съобщението за подаване към указателя „HEAD“ не може да бъде прочетено: %s"
-#: sequencer.c:1962
+#: sequencer.c:1979
#, c-format
msgid "could not read commit message of %s"
msgstr "съобщението за подаване към „%s“ не може да бъде прочетено"
-#: sequencer.c:2072
+#: sequencer.c:2089
msgid "your index file is unmerged."
msgstr "индексът не е слят."
-#: sequencer.c:2079
+#: sequencer.c:2096
msgid "cannot fixup root commit"
msgstr "началното подаване не може да се вкара в предходното му"
-#: sequencer.c:2098
+#: sequencer.c:2115
#, c-format
msgid "commit %s is a merge but no -m option was given."
msgstr "подаването „%s“ е сливане, но не е дадена опцията „-m“"
-#: sequencer.c:2106 sequencer.c:2114
+#: sequencer.c:2123 sequencer.c:2131
#, c-format
msgid "commit %s does not have parent %d"
msgstr "подаването „%s“ няма родител %d"
-#: sequencer.c:2120
+#: sequencer.c:2137
#, 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:2139
+#: sequencer.c:2156
#, c-format
msgid "%s: cannot parse parent commit %s"
msgstr "%s: неразпозната стойност за родителското подаване „%s“"
-#: sequencer.c:2205
+#: sequencer.c:2222
#, c-format
msgid "could not rename '%s' to '%s'"
msgstr "„%s“ не може да се преименува на „%s“"
-#: sequencer.c:2265
+#: sequencer.c:2282
#, c-format
msgid "could not revert %s... %s"
msgstr "подаването „%s“… не може да бъде отменено: „%s“"
-#: sequencer.c:2266
+#: sequencer.c:2283
#, c-format
msgid "could not apply %s... %s"
msgstr "подаването „%s“… не може да бъде приложено: „%s“"
-#: sequencer.c:2287
+#: sequencer.c:2304
#, c-format
msgid "dropping %s %s -- patch contents already upstream\n"
msgstr "прескачане на %s %s — кръпката вече е приложена\n"
-#: sequencer.c:2345
+#: sequencer.c:2362
#, c-format
msgid "git %s: failed to read the index"
msgstr "git %s: неуспешно изчитане на индекса"
-#: sequencer.c:2352
+#: sequencer.c:2370
#, c-format
msgid "git %s: failed to refresh the index"
msgstr "git %s: неуспешно обновяване на индекса"
-#: sequencer.c:2425
+#: sequencer.c:2450
#, c-format
msgid "%s does not accept arguments: '%s'"
msgstr "„%s“ не приема аргументи: „%s“"
-#: sequencer.c:2434
+#: sequencer.c:2459
#, c-format
msgid "missing arguments for %s"
msgstr "„%s“ изисква аргументи"
-#: sequencer.c:2477
+#: sequencer.c:2502
#, c-format
msgid "could not parse '%s'"
msgstr "„%s“ не може да се анализира"
-#: sequencer.c:2538
+#: sequencer.c:2563
#, c-format
msgid "invalid line %d: %.*s"
msgstr "неправилен ред %d: %.*s"
-#: sequencer.c:2549
+#: sequencer.c:2574
#, c-format
msgid "cannot '%s' without a previous commit"
msgstr "Без предишно подаване не може да се изпълни „%s“"
-#: sequencer.c:2635
+#: sequencer.c:2622 builtin/rebase.c:184
+#, c-format
+msgid "could not read '%s'."
+msgstr "от „%s“ не може да се чете."
+
+#: sequencer.c:2660
msgid "cancelling a cherry picking in progress"
msgstr "преустановяване на извършваното в момента отбиране на подавания"
-#: sequencer.c:2644
+#: sequencer.c:2669
msgid "cancelling a revert in progress"
msgstr "преустановяване на извършваното в момента отмяна на подаване"
-#: sequencer.c:2690
+#: sequencer.c:2709
msgid "please fix this using 'git rebase --edit-todo'."
msgstr "коригирайте това чрез „git rebase --edit-todo“."
-#: sequencer.c:2692
+#: sequencer.c:2711
#, c-format
msgid "unusable instruction sheet: '%s'"
msgstr "неизползваем файл с описание на предстоящите действия: „%s“"
-#: sequencer.c:2697
+#: sequencer.c:2716
msgid "no commits parsed."
msgstr "никое от подаванията не може да се разпознае."
-#: sequencer.c:2708
+#: sequencer.c:2727
msgid "cannot cherry-pick during a revert."
msgstr ""
"по време на отмяна на подаване не може да се извърши отбиране на подаване."
-#: sequencer.c:2710
+#: sequencer.c:2729
msgid "cannot revert during a cherry-pick."
msgstr "по време на отбиране не може да се извърши отмяна на подаване."
-#: sequencer.c:2788
+#: sequencer.c:2807
#, c-format
msgid "invalid value for %s: %s"
msgstr "неправилна стойност за „%s“: „%s“"
-#: sequencer.c:2897
+#: sequencer.c:2916
msgid "unusable squash-onto"
msgstr "подаването, в което другите да се вкарат, не може да се използва"
-#: sequencer.c:2917
+#: sequencer.c:2936
#, c-format
msgid "malformed options sheet: '%s'"
msgstr "неправилен файл с опции: „%s“"
-#: sequencer.c:3012 sequencer.c:4868
+#: sequencer.c:3031 sequencer.c:4905
msgid "empty commit set passed"
msgstr "зададено е празно множество от подавания"
-#: sequencer.c:3029
+#: sequencer.c:3048
msgid "revert is already in progress"
msgstr "в момента вече се извършва отмяна на подавания"
-#: sequencer.c:3031
+#: sequencer.c:3050
#, c-format
msgid "try \"git revert (--continue | %s--abort | --quit)\""
-msgstr "използвайте „git cherry-pick (--continue | %s--abort | --quit)“"
+msgstr "използвайте „git revert (--continue | %s--abort | --quit)“"
-#: sequencer.c:3034
+#: sequencer.c:3053
msgid "cherry-pick is already in progress"
msgstr "в момента вече се извършва отбиране на подавания"
-#: sequencer.c:3036
+#: sequencer.c:3055
#, c-format
msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
msgstr "използвайте „git cherry-pick (--continue | %s--abort | --quit)“"
-#: sequencer.c:3050
+#: sequencer.c:3069
#, c-format
msgid "could not create sequencer directory '%s'"
msgstr ""
"директорията за определянето на последователността „%s“ не може да бъде "
"създадена"
-#: sequencer.c:3065
+#: sequencer.c:3084
msgid "could not lock HEAD"
msgstr "указателят „HEAD“ не може да се заключи"
-#: sequencer.c:3125 sequencer.c:4581
+#: sequencer.c:3144 sequencer.c:4615
msgid "no cherry-pick or revert in progress"
msgstr ""
"в момента не се извършва отбиране на подавания или пребазиране на клона"
-#: sequencer.c:3127 sequencer.c:3138
+#: sequencer.c:3146 sequencer.c:3157
msgid "cannot resolve HEAD"
msgstr "Подаването сочено от указателя „HEAD“ не може да бъде открито"
-#: sequencer.c:3129 sequencer.c:3173
+#: sequencer.c:3148 sequencer.c:3192
msgid "cannot abort from a branch yet to be born"
msgstr ""
"действието не може да бъде преустановено, когато сте на клон, който тепърва "
"предстои да бъде създаден"
-#: sequencer.c:3159 builtin/grep.c:758
+#: sequencer.c:3178 builtin/grep.c:772
#, c-format
msgid "cannot open '%s'"
msgstr "„%s“ не може да бъде отворен"
-#: sequencer.c:3161
+#: sequencer.c:3180
#, c-format
msgid "cannot read '%s': %s"
msgstr "„%s“ не може да бъде прочетен: %s"
-#: sequencer.c:3162
+#: sequencer.c:3181
msgid "unexpected end of file"
msgstr "неочакван край на файл"
-#: sequencer.c:3168
+#: sequencer.c:3187
#, c-format
msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
msgstr ""
"запазеният преди започването на отбирането файл за указателя „HEAD“ — „%s“ е "
"повреден"
-#: sequencer.c:3179
+#: sequencer.c:3198
msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
msgstr ""
"Изглежда указателят „HEAD“ е променен. Проверете към какво сочи.\n"
"Не се правят промени."
-#: sequencer.c:3220
+#: sequencer.c:3239
msgid "no revert in progress"
msgstr "в момента не тече пребазиране"
-#: sequencer.c:3229
+#: sequencer.c:3248
msgid "no cherry-pick in progress"
msgstr "в момента не се извършва отбиране на подавания"
-#: sequencer.c:3239
+#: sequencer.c:3258
msgid "failed to skip the commit"
msgstr "неуспешно прескачане на подаването"
-#: sequencer.c:3246
+#: sequencer.c:3265
msgid "there is nothing to skip"
msgstr "няма какво да се прескочи"
-#: sequencer.c:3249
+#: sequencer.c:3268
#, c-format
msgid ""
"have you committed already?\n"
@@ -8371,16 +8634,16 @@
"\n"
" git %s --continue"
-#: sequencer.c:3411 sequencer.c:4472
+#: sequencer.c:3430 sequencer.c:4506
msgid "cannot read HEAD"
msgstr "указателят „HEAD“ не може да бъде прочетен"
-#: sequencer.c:3428
+#: sequencer.c:3447
#, c-format
msgid "unable to copy '%s' to '%s'"
msgstr "„%s“ не може да се копира като „%s“"
-#: sequencer.c:3436
+#: sequencer.c:3455
#, c-format
msgid ""
"You can amend the commit now, with\n"
@@ -8399,27 +8662,27 @@
"\n"
" git rebase --continue\n"
-#: sequencer.c:3446
+#: sequencer.c:3465
#, c-format
msgid "Could not apply %s... %.*s"
msgstr "Подаването „%s“… не може да бъде приложено: „%.*s“"
-#: sequencer.c:3453
+#: sequencer.c:3472
#, c-format
msgid "Could not merge %.*s"
msgstr "Невъзможно сливане на „%.*s“"
-#: sequencer.c:3467 sequencer.c:3471 builtin/difftool.c:644
+#: sequencer.c:3486 sequencer.c:3490 builtin/difftool.c:639
#, c-format
msgid "could not copy '%s' to '%s'"
msgstr "„%s“ не може да се копира като „%s“"
-#: sequencer.c:3483
+#: sequencer.c:3502
#, c-format
msgid "Executing: %s\n"
msgstr "В момента се изпълнява: %s\n"
-#: sequencer.c:3498
+#: sequencer.c:3517
#, c-format
msgid ""
"execution failed: %s\n"
@@ -8434,11 +8697,11 @@
" git rebase --continue\n"
"\n"
-#: sequencer.c:3504
+#: sequencer.c:3523
msgid "and made changes to the index and/or the working tree\n"
msgstr "и променѝ индекса и/или работното дърво\n"
-#: sequencer.c:3510
+#: sequencer.c:3529
#, c-format
msgid ""
"execution succeeded: %s\n"
@@ -8455,90 +8718,90 @@
" git rebase --continue\n"
"\n"
-#: sequencer.c:3572
+#: sequencer.c:3591
#, c-format
msgid "illegal label name: '%.*s'"
msgstr "неправилно име на етикет: „%.*s“"
-#: sequencer.c:3645
+#: sequencer.c:3664
msgid "writing fake root commit"
msgstr "запазване на фалшиво начално подаване"
-#: sequencer.c:3650
+#: sequencer.c:3669
msgid "writing squash-onto"
msgstr "запазване на подаването, в което другите да се вкарат"
-#: sequencer.c:3734
+#: sequencer.c:3748
#, c-format
msgid "could not resolve '%s'"
msgstr "„%s“ не може да бъде открит"
-#: sequencer.c:3767
+#: sequencer.c:3780
msgid "cannot merge without a current revision"
msgstr "без текущо подаване не може да се слива"
-#: sequencer.c:3789
+#: sequencer.c:3802
#, c-format
msgid "unable to parse '%.*s'"
msgstr "„%.*s“ не може да се анализира"
-#: sequencer.c:3798
+#: sequencer.c:3811
#, c-format
msgid "nothing to merge: '%.*s'"
msgstr "няма нищо за сливане: „%.*s“"
-#: sequencer.c:3810
+#: sequencer.c:3823
msgid "octopus merge cannot be executed on top of a [new root]"
msgstr "върху начално подаване не може да се извърши множествено сливане"
-#: sequencer.c:3826
+#: sequencer.c:3878
#, c-format
msgid "could not get commit message of '%s'"
msgstr "съобщението за подаване към „%s“ не може да бъде получено"
-#: sequencer.c:4009
+#: sequencer.c:4024
#, c-format
msgid "could not even attempt to merge '%.*s'"
msgstr "сливането на „%.*s“ не може даже да започне"
-#: sequencer.c:4025
+#: sequencer.c:4040
msgid "merge: Unable to write new index file"
msgstr "сливане: новият индекс не може да бъде запазен"
-#: sequencer.c:4099
+#: sequencer.c:4121
msgid "Cannot autostash"
msgstr "Не може да се скатае автоматично"
-#: sequencer.c:4102
+#: sequencer.c:4124
#, c-format
msgid "Unexpected stash response: '%s'"
msgstr "Неочакван резултат при скатаване: „%s“"
-#: sequencer.c:4108
+#: sequencer.c:4130
#, c-format
msgid "Could not create directory for '%s'"
msgstr "Директорията за „%s“ не може да бъде създадена"
-#: sequencer.c:4111
+#: sequencer.c:4133
#, c-format
msgid "Created autostash: %s\n"
msgstr "Автоматично скатано: „%s“\n"
-#: sequencer.c:4115
+#: sequencer.c:4137
msgid "could not reset --hard"
msgstr "неуспешно изпълнение на „git reset --hard“"
-#: sequencer.c:4140
+#: sequencer.c:4162
#, c-format
msgid "Applied autostash.\n"
msgstr "Автоматично скатаното е приложено.\n"
-#: sequencer.c:4152
+#: sequencer.c:4174
#, c-format
msgid "cannot store %s"
msgstr "„%s“ не може да бъде запазен"
-#: sequencer.c:4155
+#: sequencer.c:4177
#, c-format
msgid ""
"%s\n"
@@ -8550,29 +8813,29 @@
"„git stash pop“ или да ги изхвърлите чрез „git stash drop“, когато "
"поискате.\n"
-#: sequencer.c:4160
+#: sequencer.c:4182
msgid "Applying autostash resulted in conflicts."
msgstr "Конфликти при прилагането на автоматично скатаното."
-#: sequencer.c:4161
+#: sequencer.c:4183
msgid "Autostash exists; creating a new stash entry."
msgstr "Вече има запис за автоматично скатано, затова се създава нов запис."
-#: sequencer.c:4233 git-rebase--preserve-merges.sh:769
+#: sequencer.c:4255
msgid "could not detach HEAD"
msgstr "указателят „HEAD“ не може да се отдели"
-#: sequencer.c:4248
+#: sequencer.c:4270
#, c-format
msgid "Stopped at HEAD\n"
msgstr "Бе спряно при „HEAD“\n"
-#: sequencer.c:4250
+#: sequencer.c:4272
#, c-format
msgid "Stopped at %s\n"
msgstr "Бе спряно при „%s“\n"
-#: sequencer.c:4258
+#: sequencer.c:4304
#, c-format
msgid ""
"Could not execute the todo command\n"
@@ -8595,58 +8858,58 @@
" git rebase --edit-todo\n"
" git rebase --continue\n"
-#: sequencer.c:4304
+#: sequencer.c:4350
#, c-format
msgid "Rebasing (%d/%d)%s"
msgstr "Пребазиране (%d/%d)%s"
-#: sequencer.c:4350
+#: sequencer.c:4396
#, c-format
msgid "Stopped at %s... %.*s\n"
msgstr "Спиране при „%s“… %.*s\n"
-#: sequencer.c:4421
+#: sequencer.c:4466
#, c-format
msgid "unknown command %d"
msgstr "непозната команда %d"
-#: sequencer.c:4480
+#: sequencer.c:4514
msgid "could not read orig-head"
msgstr "указателят за „orig-head“ не може да се прочете"
-#: sequencer.c:4485
+#: sequencer.c:4519
msgid "could not read 'onto'"
msgstr "указателят за „onto“ не може да се прочете"
-#: sequencer.c:4499
+#: sequencer.c:4533
#, c-format
msgid "could not update HEAD to %s"
msgstr "„HEAD“ не може да бъде обновен до „%s“"
-#: sequencer.c:4559
+#: sequencer.c:4593
#, c-format
msgid "Successfully rebased and updated %s.\n"
msgstr "Успешно пребазиране и обновяване на „%s“.\n"
-#: sequencer.c:4611
+#: sequencer.c:4645
msgid "cannot rebase: You have unstaged changes."
msgstr "не може да пребазирате, защото има промени, които не са в индекса."
-#: sequencer.c:4620
+#: sequencer.c:4654
msgid "cannot amend non-existing commit"
msgstr "несъществуващо подаване не може да се поправи"
-#: sequencer.c:4622
+#: sequencer.c:4656
#, c-format
msgid "invalid file: '%s'"
msgstr "неправилен файл: „%s“"
-#: sequencer.c:4624
+#: sequencer.c:4658
#, c-format
msgid "invalid contents: '%s'"
msgstr "неправилно съдържание: „%s“"
-#: sequencer.c:4627
+#: sequencer.c:4661
msgid ""
"\n"
"You have uncommitted changes in your working tree. Please, commit them\n"
@@ -8656,50 +8919,60 @@
"В работното дърво има неподадени промени. Първо ги подайте, а след това\n"
"отново изпълнете „git rebase --continue“."
-#: sequencer.c:4663 sequencer.c:4702
+#: sequencer.c:4697 sequencer.c:4736
#, c-format
msgid "could not write file: '%s'"
msgstr "файлът „%s“ не може да бъде записан"
-#: sequencer.c:4718
+#: sequencer.c:4752
msgid "could not remove CHERRY_PICK_HEAD"
msgstr "указателят „CHERRY_PICK_HEAD“ не може да бъде изтрит"
-#: sequencer.c:4725
+#: sequencer.c:4762
msgid "could not commit staged changes."
msgstr "промените в индекса не може да бъдат подадени."
-#: sequencer.c:4845
+#: sequencer.c:4882
#, c-format
msgid "%s: can't cherry-pick a %s"
msgstr "%s: не може да се отбере „%s“"
-#: sequencer.c:4849
+#: sequencer.c:4886
#, c-format
msgid "%s: bad revision"
msgstr "%s: неправилна версия"
-#: sequencer.c:4884
+#: sequencer.c:4921
msgid "can't revert as initial commit"
msgstr "първоначалното подаване не може да бъде отменено"
-#: sequencer.c:5361
+#: sequencer.c:5192 sequencer.c:5421
+#, c-format
+msgid "skipped previously applied commit %s"
+msgstr "прескачане на вече приложеното подаване „%s“"
+
+#: sequencer.c:5262 sequencer.c:5437
+msgid "use --reapply-cherry-picks to include skipped commits"
+msgstr ""
+"може да включите пропуснатите подавания с опцията „--reapply-cherry-picks“"
+
+#: sequencer.c:5408
msgid "make_script: unhandled options"
msgstr "make_script: неподдържани опции"
-#: sequencer.c:5364
+#: sequencer.c:5411
msgid "make_script: error preparing revisions"
msgstr "make_script: грешка при подготовката на версии"
-#: sequencer.c:5614 sequencer.c:5631
+#: sequencer.c:5669 sequencer.c:5686
msgid "nothing to do"
msgstr "няма какво да се прави"
-#: sequencer.c:5650
+#: sequencer.c:5705
msgid "could not skip unnecessary pick commands"
msgstr "излишните команди за отбиране не бяха прескочени"
-#: sequencer.c:5750
+#: sequencer.c:5805
msgid "the script was already rearranged."
msgstr "скриптът вече е преподреден."
@@ -8866,27 +9139,15 @@
"(0%.3o).\n"
"Собственикът на файла трябва да има права за писане и четене."
-#: setup.c:1430
-msgid "open /dev/null or dup failed"
-msgstr "неуспешно изпълнение на „open“ или „dup“ върху „/dev/null“"
-
-#: setup.c:1445
+#: setup.c:1443
msgid "fork failed"
msgstr "неуспешно създаване на процес чрез „fork“"
-#: setup.c:1450 t/helper/test-simple-ipc.c:285
+#: setup.c:1448
msgid "setsid failed"
msgstr "неуспешно изпълнение на „setsid“"
-#: sparse-index.c:162
-msgid "attempting to use sparse-index without cone mode"
-msgstr "опит за ползване на частичен индекс без пътеводен режим"
-
-#: sparse-index.c:174
-msgid "unable to update cache-tree, staying full"
-msgstr "дървото на кеша не може да бъде обновено и остава пълно"
-
-#: sparse-index.c:261
+#: sparse-index.c:273
#, c-format
msgid "index entry is a directory, but not sparse (%08x)"
msgstr "обектът в индекса е директория, но не частично изтеглена (%08x)"
@@ -8943,13 +9204,13 @@
msgstr[0] "%u байт/сек."
msgstr[1] "%u байта/сек."
-#: strbuf.c:1168 wrapper.c:199 wrapper.c:369 builtin/am.c:738
-#: builtin/rebase.c:866
+#: strbuf.c:1174 wrapper.c:207 wrapper.c:377 builtin/am.c:739
+#: builtin/rebase.c:650
#, c-format
msgid "could not open '%s' for writing"
msgstr "„%s“ не може да бъде отворен за запис"
-#: strbuf.c:1177
+#: strbuf.c:1183
#, c-format
msgid "could not edit '%s'"
msgstr "„%s“ не може да се редактира"
@@ -8975,7 +9236,7 @@
msgid "invalid value for %s"
msgstr "Неправилна стойност за „%s“"
-#: submodule-config.c:766
+#: submodule-config.c:767
#, c-format
msgid "Could not update .gitmodules entry %s"
msgstr "Записът „%s“ във файла „.gitmodules“ не може да бъде променен"
@@ -9000,22 +9261,22 @@
msgid "staging updated .gitmodules failed"
msgstr "неуспешно добавяне на променения файл „.gitmodules“ в индекса"
-#: submodule.c:328
+#: submodule.c:358
#, c-format
msgid "in unpopulated submodule '%s'"
msgstr "в неподготвения подмодул „%s“"
-#: submodule.c:359
+#: submodule.c:389
#, c-format
msgid "Pathspec '%s' is in submodule '%.*s'"
msgstr "Пътят „%s“ е в подмодула „%.*s“"
-#: submodule.c:436
+#: submodule.c:466
#, c-format
msgid "bad --ignore-submodules argument: %s"
msgstr "неправилен аргумент за „--ignore-submodules“: „%s“"
-#: submodule.c:805
+#: submodule.c:844
#, c-format
msgid ""
"Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -9024,12 +9285,12 @@
"Подмодулът при подаване %s на пътя „%s“ е различен от другия модул със "
"същото име, затова първият се прескача."
-#: submodule.c:908
+#: submodule.c:954
#, c-format
msgid "submodule entry '%s' (%s) is a %s, not a commit"
msgstr "записът за подмодула „%s“ (%s) е %s, а не подаване!"
-#: submodule.c:993
+#: submodule.c:1042
#, c-format
msgid ""
"Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
@@ -9038,36 +9299,36 @@
"Командата „git rev-list ПОДАВАНИЯ --not --remotes -n 1“ не може да се "
"изпълни в подмодула „%s“"
-#: submodule.c:1116
+#: submodule.c:1165
#, c-format
msgid "process for submodule '%s' failed"
msgstr "процесът за подмодула „%s“ завърши неуспешно"
-#: submodule.c:1145 builtin/branch.c:691 builtin/submodule--helper.c:2469
+#: submodule.c:1194 builtin/branch.c:692 builtin/submodule--helper.c:2713
msgid "Failed to resolve HEAD as a valid ref."
msgstr "Не може да се открие към какво сочи указателят „HEAD“"
-#: submodule.c:1156
+#: submodule.c:1205
#, c-format
msgid "Pushing submodule '%s'\n"
msgstr "Изтласкване на подмодула „%s“\n"
-#: submodule.c:1159
+#: submodule.c:1208
#, c-format
msgid "Unable to push submodule '%s'\n"
msgstr "Подмодулът „%s“ не може да бъде изтласкан\n"
-#: submodule.c:1451
+#: submodule.c:1491
#, c-format
msgid "Fetching submodule %s%s\n"
msgstr "Доставяне на подмодула „%s%s“\n"
-#: submodule.c:1485
+#: submodule.c:1525
#, c-format
msgid "Could not access submodule '%s'\n"
msgstr "Подмодулът „%s“ не може да бъде достъпен\n"
-#: submodule.c:1640
+#: submodule.c:1680
#, c-format
msgid ""
"Errors during submodule fetch:\n"
@@ -9076,63 +9337,63 @@
"Грешки при доставяне на подмодул:\n"
"%s"
-#: submodule.c:1665
+#: submodule.c:1705
#, c-format
msgid "'%s' not recognized as a git repository"
msgstr "„%s“ не е хранилище на git"
-#: submodule.c:1682
+#: submodule.c:1722
#, c-format
msgid "Could not run 'git status --porcelain=2' in submodule %s"
msgstr ""
"Командата „git status --porcelain=2“ не може да се изпълни в подмодула „%s“"
-#: submodule.c:1723
+#: submodule.c:1763
#, c-format
msgid "'git status --porcelain=2' failed in submodule %s"
msgstr ""
"командата „git status --porcelain=2“ не може да се изпълни в подмодула „%s“"
-#: submodule.c:1798
+#: submodule.c:1838
#, c-format
msgid "could not start 'git status' in submodule '%s'"
msgstr "командата „git status“ не може да се изпълни в подмодула „%s“"
-#: submodule.c:1811
+#: submodule.c:1851
#, c-format
msgid "could not run 'git status' in submodule '%s'"
msgstr "командата „git status“ не може да се изпълни в подмодула „%s“"
-#: submodule.c:1826
+#: submodule.c:1868
#, c-format
msgid "Could not unset core.worktree setting in submodule '%s'"
msgstr "Настройката „core.worktree“ не може да се изтрие в подмодула „%s“"
-#: submodule.c:1853 submodule.c:2163
+#: submodule.c:1895 submodule.c:2210
#, c-format
msgid "could not recurse into submodule '%s'"
msgstr "неуспешна обработка на поддиректориите в подмодула „%s“"
-#: submodule.c:1874
+#: submodule.c:1917
msgid "could not reset submodule index"
msgstr "неуспешно зануляване на индекса на подмодула"
-#: submodule.c:1916
+#: submodule.c:1959
#, c-format
msgid "submodule '%s' has dirty index"
msgstr "индексът на подмодула „%s“ не е чист"
-#: submodule.c:1968
+#: submodule.c:2013
#, c-format
msgid "Submodule '%s' could not be updated."
msgstr "Подмодулът „%s“ не може да се обнови."
-#: submodule.c:2036
+#: submodule.c:2081
#, c-format
msgid "submodule git dir '%s' is inside git dir '%.*s'"
msgstr "„%s“ (директория на подмодул) е в директорията на git: „%.*s“"
-#: submodule.c:2057
+#: submodule.c:2102
#, c-format
msgid ""
"relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -9140,17 +9401,17 @@
"не се поддържа „relocate_gitdir“ за подмодула „%s“, който има повече от едно "
"работно дърво"
-#: submodule.c:2069 submodule.c:2128
+#: submodule.c:2114 submodule.c:2174
#, c-format
msgid "could not lookup name for submodule '%s'"
msgstr "името на подмодула „%s“ не може да бъде намерено"
-#: submodule.c:2073
+#: submodule.c:2118
#, c-format
msgid "refusing to move '%s' into an existing git dir"
msgstr "„%s“ не може да се премести в съществуваща директория на git"
-#: submodule.c:2080
+#: submodule.c:2124
#, c-format
msgid ""
"Migrating git directory of '%s%s' from\n"
@@ -9161,11 +9422,11 @@
"„%s“ към\n"
"„%s“\n"
-#: submodule.c:2208
+#: submodule.c:2255
msgid "could not start ls-files in .."
msgstr "„ls-stat“ не може да се стартира в „..“"
-#: submodule.c:2248
+#: submodule.c:2295
#, c-format
msgid "ls-tree returned unexpected return code %d"
msgstr "„ls-tree“ завърши с неочакван изходен код: %d"
@@ -9187,7 +9448,7 @@
msgstr "непозната стойност „%s“ за настройката „%s“"
#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
-#: builtin/remote.c:324
+#: builtin/remote.c:327
#, c-format
msgid "more than one %s"
msgstr "стойността „%s“ се повтаря в настройките"
@@ -9202,11 +9463,11 @@
msgid "could not read input file '%s'"
msgstr "входният файл „%s“ не може да бъде прочетен"
-#: trailer.c:766 builtin/mktag.c:88 imap-send.c:1577
+#: trailer.c:766 builtin/mktag.c:89 imap-send.c:1573
msgid "could not read from stdin"
msgstr "от стандартния вход не може да се чете"
-#: trailer.c:1024 wrapper.c:676
+#: trailer.c:1024 wrapper.c:684
#, c-format
msgid "could not stat %s"
msgstr "Не може да се получи информация чрез „stat“ за „%s“"
@@ -9278,7 +9539,7 @@
msgid "error while running fast-import"
msgstr "грешка при изпълнението на бързо внасяне"
-#: transport-helper.c:549 transport-helper.c:1247
+#: transport-helper.c:549 transport-helper.c:1251
#, c-format
msgid "could not read ref %s"
msgstr "указателят „%s“ не може да се прочете"
@@ -9296,7 +9557,7 @@
msgid "invalid remote service path"
msgstr "неправилен път на отдалечената услуга"
-#: transport-helper.c:661 transport.c:1477
+#: transport-helper.c:661 transport.c:1475
msgid "operation not supported by protocol"
msgstr "опцията не се поддържа от протокола"
@@ -9305,7 +9566,7 @@
msgid "can't connect to subservice %s"
msgstr "неуспешно свързване към подуслугата „%s“"
-#: transport-helper.c:693 transport.c:400
+#: transport-helper.c:693 transport.c:404
msgid "--negotiate-only requires protocol v2"
msgstr "опцията „--negotiate-only“ изисква версия 2 на протокола"
@@ -9319,63 +9580,62 @@
msgstr ""
"очаква се или успех, или грешка, но насрещната помощна програма върна „%s“"
-#: transport-helper.c:855
+#: transport-helper.c:859
#, c-format
msgid "helper reported unexpected status of %s"
msgstr "насрещната помощна програма завърши с неочакван изходен код: „%s“"
-#: transport-helper.c:938
+#: transport-helper.c:942
#, c-format
msgid "helper %s does not support dry-run"
msgstr "насрещната помощна програма „%s“ не поддържа проби „dry-run“"
-#: transport-helper.c:941
+#: transport-helper.c:945
#, c-format
msgid "helper %s does not support --signed"
msgstr "насрещната помощна програма „%s“ не поддържа опцията „--signed“"
-#: transport-helper.c:944
+#: transport-helper.c:948
#, c-format
msgid "helper %s does not support --signed=if-asked"
msgstr ""
"насрещната помощна програма „%s“ не поддържа опцията „--signed=if-asked“"
-#: transport-helper.c:949
+#: transport-helper.c:953
#, c-format
msgid "helper %s does not support --atomic"
msgstr "насрещната помощна програма „%s“ не поддържа опцията „--atomic“"
-#: transport-helper.c:953
+#: transport-helper.c:957
#, c-format
msgid "helper %s does not support --%s"
msgstr "насрещната помощна програма „%s“ не поддържа опцията „%s“"
-#: transport-helper.c:960
+#: transport-helper.c:964
#, c-format
msgid "helper %s does not support 'push-option'"
msgstr "насрещната помощна програма „%s“ не поддържа опции за изтласкване"
-#: transport-helper.c:1060
+#: transport-helper.c:1064
msgid "remote-helper doesn't support push; refspec needed"
msgstr ""
"насрещната помощна програма не поддържа изтласкване. Необходимо е "
"изброяване на указателите"
-#: transport-helper.c:1065
+#: transport-helper.c:1069
#, c-format
msgid "helper %s does not support 'force'"
-msgstr ""
-"насрещната помощна програма не поддържа „%s“ поддържа опцията „--force“"
+msgstr "насрещната помощна програма „%s“ не поддържа опцията „--force“"
-#: transport-helper.c:1112
+#: transport-helper.c:1116
msgid "couldn't run fast-export"
msgstr "не може да се извърши бързо изнасяне"
-#: transport-helper.c:1117
+#: transport-helper.c:1121
msgid "error while running fast-export"
msgstr "грешка при изпълнението на командата за бързо изнасяне"
-#: transport-helper.c:1142
+#: transport-helper.c:1146
#, c-format
msgid ""
"No refs in common and none specified; doing nothing.\n"
@@ -9384,52 +9644,52 @@
"Няма общи указатели, не са указани никакви указатели —\n"
"нищо няма да бъде направено. Пробвайте да укажете клон.\n"
-#: transport-helper.c:1224
+#: transport-helper.c:1228
#, c-format
msgid "unsupported object format '%s'"
msgstr "обект с неподдържан формат „%s“"
-#: transport-helper.c:1233
+#: transport-helper.c:1237
#, c-format
msgid "malformed response in ref list: %s"
msgstr "неправилен отговор в списъка с указатели: „%s“"
-#: transport-helper.c:1385
+#: transport-helper.c:1389
#, c-format
msgid "read(%s) failed"
msgstr "неуспешно четене на „%s“"
-#: transport-helper.c:1412
+#: transport-helper.c:1416
#, c-format
msgid "write(%s) failed"
msgstr "неуспешен запис в „%s“"
-#: transport-helper.c:1461
+#: transport-helper.c:1465
#, c-format
msgid "%s thread failed"
msgstr "неуспешно изпълнение на нишката „%s“"
-#: transport-helper.c:1465
+#: transport-helper.c:1469
#, c-format
msgid "%s thread failed to join: %s"
msgstr "завършването на нишката „%s“ не може да се изчака: „%s“"
-#: transport-helper.c:1484 transport-helper.c:1488
+#: transport-helper.c:1488 transport-helper.c:1492
#, c-format
msgid "can't start thread for copying data: %s"
msgstr "неуспешно стартиране на нишка за копиране на данните: „%s“"
-#: transport-helper.c:1525
+#: transport-helper.c:1529
#, c-format
msgid "%s process failed to wait"
msgstr "процесът на „%s“ не успя да изчака чрез „waitpid“"
-#: transport-helper.c:1529
+#: transport-helper.c:1533
#, c-format
msgid "%s process failed"
msgstr "неуспешно изпълнение на „%s“"
-#: transport-helper.c:1547 transport-helper.c:1556
+#: transport-helper.c:1551 transport-helper.c:1560
msgid "can't start thread for copying data"
msgstr "неуспешно стартиране на нишка за копиране на данните"
@@ -9443,47 +9703,47 @@
msgid "could not read bundle '%s'"
msgstr "пратката на git „%s“ не може да бъде прочетена"
-#: transport.c:223
+#: transport.c:227
#, c-format
msgid "transport: invalid depth option '%s'"
msgstr "transport: неправилна опция за дълбочина: %s"
-#: transport.c:275
+#: transport.c:279
msgid "see protocol.version in 'git help config' for more details"
msgstr ""
"За повече информация вижте раздела „protocol.version“ в „git help config“"
-#: transport.c:276
+#: transport.c:280
msgid "server options require protocol version 2 or later"
msgstr "опциите на сървъра изискват поне версия 2 на протокола"
-#: transport.c:403
+#: transport.c:407
msgid "server does not support wait-for-done"
msgstr "сървърът не поддържа „wait-for-done“"
-#: transport.c:755
+#: transport.c:759
msgid "could not parse transport.color.* config"
msgstr "стойността на настройката „transport.color.*“ не може да се разпознае"
-#: transport.c:830
+#: transport.c:834
msgid "support for protocol v2 not implemented yet"
msgstr "протокол версия 2 все още не се поддържа"
-#: transport.c:965
+#: transport.c:967
#, c-format
msgid "unknown value for config '%s': %s"
msgstr "непозната стойност за настройката „%s“: „%s“"
-#: transport.c:1031
+#: transport.c:1033
#, c-format
msgid "transport '%s' not allowed"
msgstr "преносът по „%s“ не е позволен"
-#: transport.c:1084
+#: transport.c:1082
msgid "git-over-rsync is no longer supported"
msgstr "командата „git-over-rsync“ вече не се поддържа"
-#: transport.c:1187
+#: transport.c:1185
#, c-format
msgid ""
"The following submodule paths contain changes that can\n"
@@ -9492,7 +9752,7 @@
"Следните пътища за подмодули съдържат промени,\n"
"които липсват от всички отдалечени хранилища:\n"
-#: transport.c:1191
+#: transport.c:1189
#, c-format
msgid ""
"\n"
@@ -9517,11 +9777,11 @@
" git push\n"
"\n"
-#: transport.c:1199
+#: transport.c:1197
msgid "Aborting."
msgstr "Преустановяване на действието."
-#: transport.c:1346
+#: transport.c:1344
msgid "failed to push all needed submodules"
msgstr "неуспешно изтласкване на всички необходими подмодули"
@@ -9790,17 +10050,17 @@
"във файлови системи, които не различават главни от малки букви)\n"
"и само един от участниците в конфликта е в работното дърво:\n"
-#: unpack-trees.c:1618
+#: unpack-trees.c:1620
msgid "Updating index flags"
msgstr "Обновяване на флаговете на индекса"
-#: unpack-trees.c:2707
+#: unpack-trees.c:2772
#, c-format
msgid "worktree and untracked commit have duplicate entries: %s"
msgstr ""
"работното дърво и неследеното подаване съдържат повтарящи се обекти: %s"
-#: upload-pack.c:1548
+#: upload-pack.c:1561
msgid "expected flush after fetch arguments"
msgstr "след аргументите на „fetch“ се очаква изчистване на буферите"
@@ -9837,7 +10097,7 @@
msgid "Fetching objects"
msgstr "Доставяне на обектите"
-#: worktree.c:236 builtin/am.c:2152
+#: worktree.c:236 builtin/am.c:2154 builtin/bisect--helper.c:156
#, c-format
msgid "failed to read '%s'"
msgstr "„%s“ не може да бъде прочетен"
@@ -9936,17 +10196,27 @@
msgid "gitdir file points to non-existent location"
msgstr "файлът „gitdir“ сочи несъществуващо местоположение"
-#: wrapper.c:197 wrapper.c:367
+#: wrapper.c:151
+#, c-format
+msgid "could not setenv '%s'"
+msgstr "променливата на средата „%s“ не може да се зададе чрез „setenv“"
+
+#: wrapper.c:203
+#, c-format
+msgid "unable to create '%s'"
+msgstr "пакетният файл „%s“ не може да бъде създаден"
+
+#: wrapper.c:205 wrapper.c:375
#, c-format
msgid "could not open '%s' for reading and writing"
msgstr "„%s“ не може да бъде отворен и за четене, и за запис"
-#: wrapper.c:398 wrapper.c:599
+#: wrapper.c:406 wrapper.c:607
#, c-format
msgid "unable to access '%s'"
msgstr "няма достъп до „%s“"
-#: wrapper.c:607
+#: wrapper.c:615
msgid "unable to get current working directory"
msgstr "текущата работна директория е недостъпна"
@@ -10508,25 +10778,25 @@
msgid "cannot %s: Your index contains uncommitted changes."
msgstr "не може да извършите „%s“, защото в индекса има неподадени промени."
-#: compat/simple-ipc/ipc-unix-socket.c:182
+#: compat/simple-ipc/ipc-unix-socket.c:183
msgid "could not send IPC command"
msgstr "командата за комуникация между процеси не може да бъде пратена"
-#: compat/simple-ipc/ipc-unix-socket.c:189
+#: compat/simple-ipc/ipc-unix-socket.c:190
msgid "could not read IPC response"
msgstr "отговорът за комуникацията между процеси не може да бъде прочетен"
-#: compat/simple-ipc/ipc-unix-socket.c:866
+#: compat/simple-ipc/ipc-unix-socket.c:870
#, c-format
msgid "could not start accept_thread '%s'"
msgstr "неуспешно изпълнение на „accept_thread“ върху нишката „%s“"
-#: compat/simple-ipc/ipc-unix-socket.c:878
+#: compat/simple-ipc/ipc-unix-socket.c:882
#, c-format
msgid "could not start worker[0] for '%s'"
msgstr "не може да се стартира нишката worker[0] за „%s“"
-#: compat/precompose_utf8.c:58 builtin/clone.c:461
+#: compat/precompose_utf8.c:58 builtin/clone.c:347
#, c-format
msgid "failed to unlink '%s'"
msgstr "неуспешно изтриване на „%s“"
@@ -10535,136 +10805,136 @@
msgid "git add [<options>] [--] <pathspec>..."
msgstr "git add [ОПЦИЯ…] [--] ПЪТ…"
-#: builtin/add.c:61
+#: builtin/add.c:64
#, c-format
msgid "cannot chmod %cx '%s'"
msgstr "правата на „%2$s“ не може да се зададат да са %1$cx"
-#: builtin/add.c:99
+#: builtin/add.c:106
#, c-format
msgid "unexpected diff status %c"
msgstr "неочакван изходен код при генериране на разлика: %c"
-#: builtin/add.c:104 builtin/commit.c:297
+#: builtin/add.c:111 builtin/commit.c:298
msgid "updating files failed"
msgstr "неуспешно обновяване на файловете"
-#: builtin/add.c:114
+#: builtin/add.c:121
#, c-format
msgid "remove '%s'\n"
msgstr "изтриване на „%s“\n"
-#: builtin/add.c:198
+#: builtin/add.c:205
msgid "Unstaged changes after refreshing the index:"
msgstr "Промени, които и след обновяването на индекса не са добавени към него:"
-#: builtin/add.c:307 builtin/rev-parse.c:993
+#: builtin/add.c:317 builtin/rev-parse.c:993
msgid "Could not read the index"
msgstr "Индексът не може да бъде прочетен"
-#: builtin/add.c:318
-#, c-format
-msgid "Could not open '%s' for writing."
-msgstr "Файлът „%s“ не може да бъде отворен за запис."
-
-#: builtin/add.c:322
+#: builtin/add.c:330
msgid "Could not write patch"
msgstr "Кръпката не може да бъде записана"
-#: builtin/add.c:325
+#: builtin/add.c:333
msgid "editing patch failed"
msgstr "неуспешно редактиране на кръпка"
-#: builtin/add.c:328
+#: builtin/add.c:336
#, c-format
msgid "Could not stat '%s'"
msgstr "Не може да се получи информация чрез „stat“ за файла „%s“"
-#: builtin/add.c:330
+#: builtin/add.c:338
msgid "Empty patch. Aborted."
msgstr "Празна кръпка, преустановяване на действието."
-#: builtin/add.c:335
+#: builtin/add.c:343
#, c-format
msgid "Could not apply '%s'"
msgstr "Кръпката „%s“ не може да бъде приложена"
-#: builtin/add.c:343
+#: builtin/add.c:351
msgid "The following paths are ignored by one of your .gitignore files:\n"
msgstr ""
"Следните пътища ще бъдат игнорирани според някой от файловете „.gitignore“:\n"
-#: builtin/add.c:363 builtin/clean.c:901 builtin/fetch.c:173 builtin/mv.c:124
-#: builtin/prune-packed.c:14 builtin/pull.c:204 builtin/push.c:550
-#: builtin/remote.c:1427 builtin/rm.c:243 builtin/send-pack.c:190
+#: builtin/add.c:371 builtin/clean.c:901 builtin/fetch.c:173 builtin/mv.c:124
+#: builtin/prune-packed.c:14 builtin/pull.c:208 builtin/push.c:550
+#: builtin/remote.c:1429 builtin/rm.c:244 builtin/send-pack.c:194
msgid "dry run"
msgstr "пробно изпълнение"
-#: builtin/add.c:366
+#: builtin/add.c:374
msgid "interactive picking"
msgstr "интерактивно отбиране на промени"
-#: builtin/add.c:367 builtin/checkout.c:1567 builtin/reset.c:308
+#: builtin/add.c:375 builtin/checkout.c:1560 builtin/reset.c:314
msgid "select hunks interactively"
msgstr "интерактивен избор на парчета код"
-#: builtin/add.c:368
+#: builtin/add.c:376
msgid "edit current diff and apply"
msgstr "редактиране на текущата разлика и прилагане"
-#: builtin/add.c:369
+#: builtin/add.c:377
msgid "allow adding otherwise ignored files"
msgstr "добавяне и на иначе игнорираните файлове"
-#: builtin/add.c:370
+#: builtin/add.c:378
msgid "update tracked files"
msgstr "обновяване на следените файлове"
-#: builtin/add.c:371
+#: builtin/add.c:379
msgid "renormalize EOL of tracked files (implies -u)"
msgstr "уеднаквяване на знаците за край на файл (включва опцията „-u“)"
-#: builtin/add.c:372
+#: builtin/add.c:380
msgid "record only the fact that the path will be added later"
msgstr "отбелязване само на факта, че пътят ще бъде добавен по-късно"
-#: builtin/add.c:373
+#: builtin/add.c:381
msgid "add changes from all tracked and untracked files"
msgstr "добавяне на всички промени в следените и неследените файлове"
-#: builtin/add.c:376
+#: builtin/add.c:384
msgid "ignore paths removed in the working tree (same as --no-all)"
msgstr ""
"игнориране на пътищата, които са изтрити от работното дърво (същото като „--"
"no-all“)"
-#: builtin/add.c:378
+#: builtin/add.c:386
msgid "don't add, only refresh the index"
msgstr "без добавяне на нови файлове, само обновяване на индекса"
-#: builtin/add.c:379
+#: builtin/add.c:387
msgid "just skip files which cannot be added because of errors"
msgstr "прескачане на файловете, които не може да бъдат добавени поради грешки"
-#: builtin/add.c:380
+#: builtin/add.c:388
msgid "check if - even missing - files are ignored in dry run"
msgstr ""
"проверка, че при пробно изпълнение всички файлове, дори и изтритите, се "
"игнорират"
-#: builtin/add.c:382 builtin/update-index.c:1006
+#: builtin/add.c:389 builtin/mv.c:128 builtin/rm.c:251
+msgid "allow updating entries outside of the sparse-checkout cone"
+msgstr ""
+"обновяване и на записите извън пътеводния сегмент на частичното изтегляне"
+
+#: builtin/add.c:391 builtin/update-index.c:1004
msgid "override the executable bit of the listed files"
msgstr "изрично задаване на стойността на флага дали файлът е изпълним"
-#: builtin/add.c:384
+#: builtin/add.c:393
msgid "warn when adding an embedded repository"
msgstr "предупреждаване при добавяне на вградено хранилище"
-#: builtin/add.c:386
+#: builtin/add.c:395
msgid "backend for `git stash -p`"
msgstr "реализация на „git stash -p“"
-#: builtin/add.c:404
+#: builtin/add.c:413
#, c-format
msgid ""
"You've added another git repository inside your current repository.\n"
@@ -10695,12 +10965,12 @@
"\n"
"За повече информация погледнете „git help submodule“."
-#: builtin/add.c:432
+#: builtin/add.c:442
#, c-format
msgid "adding embedded git repository: %s"
msgstr "добавяне на вградено хранилище: %s"
-#: builtin/add.c:451
+#: builtin/add.c:462
msgid ""
"Use -f if you really want to add them.\n"
"Turn this message off by running\n"
@@ -10711,56 +10981,56 @@
"\n"
" git config advice.addIgnoredFile false"
-#: builtin/add.c:460
+#: builtin/add.c:477
msgid "adding files failed"
msgstr "неуспешно добавяне на файлове"
-#: builtin/add.c:488
+#: builtin/add.c:513
msgid "--dry-run is incompatible with --interactive/--patch"
msgstr ""
"опцията „--dry-run“ е несъвместима с всяка от опциите „--interactive“/„--"
"patch“"
-#: builtin/add.c:490 builtin/commit.c:357
+#: builtin/add.c:515 builtin/commit.c:358
msgid "--pathspec-from-file is incompatible with --interactive/--patch"
msgstr ""
"опцията „--pathspec-from-file“ е несъвместима с всяка от опциите „--"
"interactive“/„--patch“"
-#: builtin/add.c:507
+#: builtin/add.c:532
msgid "--pathspec-from-file is incompatible with --edit"
msgstr "опциите „--pathspec-from-file“ и „--edit“ са несъвместими"
-#: builtin/add.c:519
+#: builtin/add.c:544
msgid "-A and -u are mutually incompatible"
msgstr "опциите „-A“ и „-u“ са несъвместими"
-#: builtin/add.c:522
+#: builtin/add.c:547
msgid "Option --ignore-missing can only be used together with --dry-run"
msgstr "опцията „--ignore-missing“ изисква „--dry-run“"
-#: builtin/add.c:526
+#: builtin/add.c:551
#, c-format
msgid "--chmod param '%s' must be either -x or +x"
msgstr "параметърът към „--chmod“ — „%s“ може да е или „-x“, или „+x“"
-#: builtin/add.c:544 builtin/checkout.c:1735 builtin/commit.c:363
-#: builtin/reset.c:328 builtin/rm.c:273 builtin/stash.c:1633
+#: builtin/add.c:572 builtin/checkout.c:1731 builtin/commit.c:364
+#: builtin/reset.c:334 builtin/rm.c:275 builtin/stash.c:1650
msgid "--pathspec-from-file is incompatible with pathspec arguments"
msgstr ""
"опцията „--pathspec-from-file“ е несъвместима с аргументи, указващи пътища"
-#: builtin/add.c:551 builtin/checkout.c:1747 builtin/commit.c:369
-#: builtin/reset.c:334 builtin/rm.c:279 builtin/stash.c:1639
+#: builtin/add.c:579 builtin/checkout.c:1743 builtin/commit.c:370
+#: builtin/reset.c:340 builtin/rm.c:281 builtin/stash.c:1656
msgid "--pathspec-file-nul requires --pathspec-from-file"
msgstr "опцията „--pathspec-file-nul“ изисква опция „--pathspec-from-file“"
-#: builtin/add.c:555
+#: builtin/add.c:583
#, c-format
msgid "Nothing specified, nothing added.\n"
msgstr "Нищо не е зададено и нищо не е добавено.\n"
-#: builtin/add.c:557
+#: builtin/add.c:585
msgid ""
"Maybe you wanted to say 'git add .'?\n"
"Turn this message off by running\n"
@@ -10771,110 +11041,110 @@
"\n"
" git config advice.addEmptyPathspec false"
-#: builtin/am.c:365
+#: builtin/am.c:366
msgid "could not parse author script"
msgstr "скриптът за автор не може да се анализира"
-#: builtin/am.c:455
+#: builtin/am.c:456
#, c-format
msgid "'%s' was deleted by the applypatch-msg hook"
msgstr "„%s“ бе изтрит от куката „applypatch-msg“"
-#: builtin/am.c:497
+#: builtin/am.c:498
#, c-format
msgid "Malformed input line: '%s'."
msgstr "Даденият входен ред е с неправилен формат: „%s“."
-#: builtin/am.c:535
+#: builtin/am.c:536
#, c-format
msgid "Failed to copy notes from '%s' to '%s'"
msgstr "Бележката не може да се копира от „%s“ към „%s“"
-#: builtin/am.c:561
+#: builtin/am.c:562
msgid "fseek failed"
msgstr "неуспешно изпълнение на „fseek“"
-#: builtin/am.c:749
+#: builtin/am.c:750
#, c-format
msgid "could not parse patch '%s'"
msgstr "кръпката „%s“ не може да се анализира"
-#: builtin/am.c:814
+#: builtin/am.c:815
msgid "Only one StGIT patch series can be applied at once"
msgstr ""
"Само една поредица от кръпки от „StGIT“ може да бъде прилагана в даден момент"
-#: builtin/am.c:862
+#: builtin/am.c:863
msgid "invalid timestamp"
msgstr "неправилна стойност за време"
-#: builtin/am.c:867 builtin/am.c:879
+#: builtin/am.c:868 builtin/am.c:880
msgid "invalid Date line"
msgstr "неправилен ред за дата „Date“"
-#: builtin/am.c:874
+#: builtin/am.c:875
msgid "invalid timezone offset"
msgstr "неправилно отместване на часовия пояс"
-#: builtin/am.c:967
+#: builtin/am.c:968
msgid "Patch format detection failed."
msgstr "Форматът на кръпката не може да бъде определен."
-#: builtin/am.c:972 builtin/clone.c:414
+#: builtin/am.c:973 builtin/clone.c:300
#, c-format
msgid "failed to create directory '%s'"
msgstr "директорията „%s“ не може да бъде създадена"
-#: builtin/am.c:977
+#: builtin/am.c:978
msgid "Failed to split patches."
msgstr "Кръпките не може да бъдат разделени."
-#: builtin/am.c:1126
+#: builtin/am.c:1127
#, c-format
msgid "When you have resolved this problem, run \"%s --continue\"."
msgstr "След коригирането на този проблем изпълнете „%s --continue“."
-#: builtin/am.c:1127
+#: builtin/am.c:1128
#, c-format
msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
msgstr "Ако предпочитате да прескочите тази кръпка, изпълнете „%s --skip“."
-#: builtin/am.c:1128
+#: builtin/am.c:1129
#, c-format
msgid "To restore the original branch and stop patching, run \"%s --abort\"."
msgstr "За да се върнете към първоначалното състояние, изпълнете „%s --abort“."
-#: builtin/am.c:1223
+#: builtin/am.c:1224
msgid "Patch sent with format=flowed; space at the end of lines might be lost."
msgstr ""
"Кръпката е пратена с форматиране „format=flowed“. Празните знаци в края на "
"редовете може да се загубят."
-#: builtin/am.c:1251
+#: builtin/am.c:1252
msgid "Patch is empty."
msgstr "Кръпката е празна."
-#: builtin/am.c:1316
+#: builtin/am.c:1317
#, c-format
msgid "missing author line in commit %s"
msgstr "липсва ред за авторство в подаването „%s“"
-#: builtin/am.c:1319
+#: builtin/am.c:1320
#, c-format
msgid "invalid ident line: %.*s"
msgstr "грешен ред с идентичност: %.*s"
-#: builtin/am.c:1538
+#: builtin/am.c:1539
msgid "Repository lacks necessary blobs to fall back on 3-way merge."
msgstr ""
"В хранилището липсват необходимите обекти-BLOB, за да се премине към тройно "
"сливане."
-#: builtin/am.c:1540
+#: builtin/am.c:1541
msgid "Using index info to reconstruct a base tree..."
msgstr "Базовото дърво се реконструира от информацията в индекса…"
-#: builtin/am.c:1559
+#: builtin/am.c:1560
msgid ""
"Did you hand edit your patch?\n"
"It does not apply to blobs recorded in its index."
@@ -10882,24 +11152,24 @@
"Кръпката не може да се приложи към обектите-BLOB в индекса.\n"
"Да не би да сте я редактирали на ръка?"
-#: builtin/am.c:1565
+#: builtin/am.c:1566
msgid "Falling back to patching base and 3-way merge..."
msgstr "Преминаване към прилагане на кръпка към базата и тройно сливане…"
-#: builtin/am.c:1591
+#: builtin/am.c:1592
msgid "Failed to merge in the changes."
msgstr "Неуспешно сливане на промените."
-#: builtin/am.c:1623
+#: builtin/am.c:1624
msgid "applying to an empty history"
msgstr "прилагане върху празна история"
-#: builtin/am.c:1675 builtin/am.c:1679
+#: builtin/am.c:1676 builtin/am.c:1680
#, c-format
msgid "cannot resume: %s does not exist."
msgstr "не може да се продължи — „%s“ не съществува."
-#: builtin/am.c:1697
+#: builtin/am.c:1698
msgid "Commit Body is:"
msgstr "Тялото на кръпката за прилагане е:"
@@ -10907,38 +11177,38 @@
#. in your translation. The program will only accept English
#. input at this point.
#.
-#: builtin/am.c:1707
+#: builtin/am.c:1708
#, c-format
msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
msgstr ""
"Прилагане? „y“ — да/„n“ — не/„e“ — редактиране/„v“ — преглед/„a“ — приемане "
"на всичко:"
-#: builtin/am.c:1753 builtin/commit.c:408
+#: builtin/am.c:1754 builtin/commit.c:409
msgid "unable to write index file"
msgstr "индексът не може да бъде записан"
-#: builtin/am.c:1757
+#: builtin/am.c:1758
#, c-format
msgid "Dirty index: cannot apply patches (dirty: %s)"
msgstr ""
"Индексът не е чист: кръпките не може да бъдат приложени (замърсени са: %s)"
-#: builtin/am.c:1797 builtin/am.c:1865
+#: builtin/am.c:1798 builtin/am.c:1865
#, c-format
msgid "Applying: %.*s"
msgstr "Прилагане: %.*s"
-#: builtin/am.c:1814
+#: builtin/am.c:1815
msgid "No changes -- Patch already applied."
msgstr "Без промени — кръпката вече е приложена."
-#: builtin/am.c:1820
+#: builtin/am.c:1821
#, c-format
msgid "Patch failed at %s %.*s"
msgstr "Неуспешно прилагане на кръпка при %s %.*s“"
-#: builtin/am.c:1824
+#: builtin/am.c:1825
msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
msgstr ""
"За да видите неуспешно приложени кръпки, използвайте:\n"
@@ -10966,17 +11236,17 @@
"След корекция на конфликтите изпълнете „git add“ върху поправените файлове.\n"
"За да приемете „изтрити от тях“, изпълнете „git rm“ върху изтритите файлове."
-#: builtin/am.c:1982 builtin/am.c:1986 builtin/am.c:1998 builtin/reset.c:347
-#: builtin/reset.c:355
+#: builtin/am.c:1983 builtin/am.c:1987 builtin/am.c:1999 builtin/reset.c:353
+#: builtin/reset.c:361
#, c-format
msgid "Could not parse object '%s'."
msgstr "„%s“ не е разпознат като обект."
-#: builtin/am.c:2034
+#: builtin/am.c:2035 builtin/am.c:2111
msgid "failed to clean index"
msgstr "индексът не може да бъде изчистен"
-#: builtin/am.c:2078
+#: builtin/am.c:2079
msgid ""
"You seem to have moved HEAD since the last 'am' failure.\n"
"Not rewinding to ORIG_HEAD"
@@ -10987,166 +11257,166 @@
"сочи към\n"
"„ORIG_HEAD“"
-#: builtin/am.c:2185
+#: builtin/am.c:2187
#, c-format
msgid "Invalid value for --patch-format: %s"
msgstr "Неправилна стойност за „--patch-format“: „%s“"
-#: builtin/am.c:2227
+#: builtin/am.c:2229
#, c-format
msgid "Invalid value for --show-current-patch: %s"
msgstr "Неправилна стойност за „--show-current-patch“: „%s“"
-#: builtin/am.c:2231
+#: builtin/am.c:2233
#, c-format
msgid "--show-current-patch=%s is incompatible with --show-current-patch=%s"
msgstr ""
"опциите „--show-current-patch=%s“ и „--show-current-patch=%s“ са несъвместими"
-#: builtin/am.c:2262
+#: builtin/am.c:2264
msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
msgstr "git am [ОПЦИЯ…] [(ФАЙЛ_С_ПОЩА|ДИРЕКТОРИЯ_С_ПОЩА)…]"
-#: builtin/am.c:2263
+#: builtin/am.c:2265
msgid "git am [<options>] (--continue | --skip | --abort)"
-msgstr "git am [ОПЦИЯ…] (--continue | --quit | --abort)"
+msgstr "git am [ОПЦИЯ…] (--continue | --skip | --abort)"
-#: builtin/am.c:2269
+#: builtin/am.c:2271
msgid "run interactively"
msgstr "интерактивна работа"
-#: builtin/am.c:2271
+#: builtin/am.c:2273
msgid "historical option -- no-op"
msgstr "изоставена опция, съществува по исторически причини, нищо не прави"
-#: builtin/am.c:2273
+#: builtin/am.c:2275
msgid "allow fall back on 3way merging if needed"
msgstr "да се преминава към тройно сливане при нужда."
-#: builtin/am.c:2274 builtin/init-db.c:547 builtin/prune-packed.c:16
-#: builtin/repack.c:472 builtin/stash.c:945
+#: builtin/am.c:2276 builtin/init-db.c:547 builtin/prune-packed.c:16
+#: builtin/repack.c:640 builtin/stash.c:961
msgid "be quiet"
msgstr "без извеждане на информация"
-#: builtin/am.c:2276
+#: builtin/am.c:2278
msgid "add a Signed-off-by trailer to the commit message"
msgstr "добавяне на епилог за подпис „Signed-off-by“ в съобщението за подаване"
-#: builtin/am.c:2279
+#: builtin/am.c:2281
msgid "recode into utf8 (default)"
msgstr "прекодиране в UTF-8 (стандартно)"
-#: builtin/am.c:2281
+#: builtin/am.c:2283
msgid "pass -k flag to git-mailinfo"
msgstr "подаване на опцията „-k“ на командата „git-mailinfo“"
-#: builtin/am.c:2283
+#: builtin/am.c:2285
msgid "pass -b flag to git-mailinfo"
msgstr "подаване на опцията „-b“ на командата „git-mailinfo“"
-#: builtin/am.c:2285
+#: builtin/am.c:2287
msgid "pass -m flag to git-mailinfo"
msgstr "подаване на опцията „-m“ на командата „git-mailinfo“"
-#: builtin/am.c:2287
+#: builtin/am.c:2289
msgid "pass --keep-cr flag to git-mailsplit for mbox format"
msgstr ""
"подаване на опцията „--keep-cr“ на командата „git-mailsplit“ за формат „mbox“"
-#: builtin/am.c:2290
+#: builtin/am.c:2292
msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
msgstr ""
"без подаване на опцията „--keep-cr“ на командата „git-mailsplit“ независимо "
"от „am.keepcr“"
-#: builtin/am.c:2293
+#: builtin/am.c:2295
msgid "strip everything before a scissors line"
msgstr "пропускане на всичко преди реда за отрязване"
-#: builtin/am.c:2295
+#: builtin/am.c:2297
msgid "pass it through git-mailinfo"
msgstr "прекарване през „git-mailinfo“"
-#: builtin/am.c:2298 builtin/am.c:2301 builtin/am.c:2304 builtin/am.c:2307
-#: builtin/am.c:2310 builtin/am.c:2313 builtin/am.c:2316 builtin/am.c:2319
-#: builtin/am.c:2325
+#: builtin/am.c:2300 builtin/am.c:2303 builtin/am.c:2306 builtin/am.c:2309
+#: builtin/am.c:2312 builtin/am.c:2315 builtin/am.c:2318 builtin/am.c:2321
+#: builtin/am.c:2327
msgid "pass it through git-apply"
msgstr "прекарване през „git-apply“"
-#: builtin/am.c:2315 builtin/commit.c:1512 builtin/fmt-merge-msg.c:17
-#: builtin/fmt-merge-msg.c:20 builtin/grep.c:905 builtin/merge.c:261
-#: builtin/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
-#: builtin/rebase.c:1342 builtin/repack.c:483 builtin/repack.c:487
-#: builtin/repack.c:489 builtin/show-branch.c:650 builtin/show-ref.c:172
-#: builtin/tag.c:447 parse-options.h:155 parse-options.h:176
-#: parse-options.h:317
+#: builtin/am.c:2317 builtin/commit.c:1514 builtin/fmt-merge-msg.c:17
+#: builtin/fmt-merge-msg.c:20 builtin/grep.c:919 builtin/merge.c:262
+#: builtin/pull.c:142 builtin/pull.c:204 builtin/pull.c:221
+#: builtin/rebase.c:1046 builtin/repack.c:651 builtin/repack.c:655
+#: builtin/repack.c:657 builtin/show-branch.c:649 builtin/show-ref.c:172
+#: builtin/tag.c:445 parse-options.h:154 parse-options.h:175
+#: parse-options.h:315
msgid "n"
msgstr "БРОЙ"
-#: builtin/am.c:2321 builtin/branch.c:672 builtin/bugreport.c:137
-#: builtin/for-each-ref.c:40 builtin/replace.c:556 builtin/tag.c:481
+#: builtin/am.c:2323 builtin/branch.c:673 builtin/bugreport.c:109
+#: builtin/for-each-ref.c:40 builtin/replace.c:556 builtin/tag.c:479
#: builtin/verify-tag.c:38
msgid "format"
msgstr "ФОРМАТ"
-#: builtin/am.c:2322
+#: builtin/am.c:2324
msgid "format the patch(es) are in"
msgstr "формат на кръпките"
-#: builtin/am.c:2328
+#: builtin/am.c:2330
msgid "override error message when patch failure occurs"
msgstr "избрано от вас съобщение за грешка при прилагане на кръпки"
-#: builtin/am.c:2330
+#: builtin/am.c:2332
msgid "continue applying patches after resolving a conflict"
msgstr "продължаване на прилагането на кръпки след коригирането на конфликт"
-#: builtin/am.c:2333
+#: builtin/am.c:2335
msgid "synonyms for --continue"
msgstr "псевдоними на „--continue“"
-#: builtin/am.c:2336
+#: builtin/am.c:2338
msgid "skip the current patch"
msgstr "прескачане на текущата кръпка"
-#: builtin/am.c:2339
+#: builtin/am.c:2341
msgid "restore the original branch and abort the patching operation"
msgstr ""
"възстановяване на първоначалното състояние на клона и преустановяване на "
"прилагането на кръпката"
-#: builtin/am.c:2342
+#: builtin/am.c:2344
msgid "abort the patching operation but keep HEAD where it is"
msgstr ""
"преустановяване на прилагането на кръпката без промяна към кое сочи „HEAD“"
-#: builtin/am.c:2346
+#: builtin/am.c:2348
msgid "show the patch being applied"
msgstr "показване на прилаганата кръпка"
-#: builtin/am.c:2351
+#: builtin/am.c:2353
msgid "lie about committer date"
msgstr "дата за подаване различна от първоначалната"
-#: builtin/am.c:2353
+#: builtin/am.c:2355
msgid "use current timestamp for author date"
msgstr "използване на текущото време като това за автор"
-#: builtin/am.c:2355 builtin/commit-tree.c:120 builtin/commit.c:1640
-#: builtin/merge.c:298 builtin/pull.c:175 builtin/rebase.c:537
-#: builtin/rebase.c:1395 builtin/revert.c:117 builtin/tag.c:462
+#: builtin/am.c:2357 builtin/commit-tree.c:118 builtin/commit.c:1642
+#: builtin/merge.c:299 builtin/pull.c:179 builtin/rebase.c:1099
+#: builtin/revert.c:117 builtin/tag.c:460
msgid "key-id"
msgstr "ИДЕНТИФИКАТОР_НА_КЛЮЧ"
-#: builtin/am.c:2356 builtin/rebase.c:538 builtin/rebase.c:1396
+#: builtin/am.c:2358 builtin/rebase.c:1100
msgid "GPG-sign commits"
msgstr "подписване на подаванията с GPG"
-#: builtin/am.c:2359
+#: builtin/am.c:2361
msgid "(internal use for git-rebase)"
msgstr "(ползва се вътрешно за „git-rebase“)"
-#: builtin/am.c:2377
+#: builtin/am.c:2379
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."
@@ -11154,18 +11424,18 @@
"Опциите „-b“/„--binary“ отдавна не правят нищо и\n"
"ще бъдат премахнати в бъдеще. Не ги ползвайте."
-#: builtin/am.c:2384
+#: builtin/am.c:2386
msgid "failed to read the index"
msgstr "неуспешно изчитане на индекса"
-#: builtin/am.c:2399
+#: builtin/am.c:2401
#, c-format
msgid "previous rebase directory %s still exists but mbox given."
msgstr ""
"предишната директория за пребазиране „%s“ все още съществува, а е зададен "
"файл „mbox“."
-#: builtin/am.c:2423
+#: builtin/am.c:2425
#, c-format
msgid ""
"Stray %s directory found.\n"
@@ -11174,11 +11444,11 @@
"Открита е излишна директория „%s“.\n"
"Може да я изтриете с командата „git am --abort“."
-#: builtin/am.c:2429
+#: builtin/am.c:2431
msgid "Resolve operation not in progress, we are not resuming."
msgstr "В момента не тече операция по коригиране и няма как да се продължи."
-#: builtin/am.c:2439
+#: builtin/am.c:2441
msgid "interactive mode requires patches on the command line"
msgstr "интерактивният режим изисква кръпки на командния ред"
@@ -11186,45 +11456,36 @@
msgid "git apply [<options>] [<patch>...]"
msgstr "git apply [ОПЦИЯ…] [КРЪПКА…]"
-#: builtin/archive.c:17
-#, c-format
-msgid "could not create archive file '%s'"
-msgstr "архивният файл „%s“ не може да бъде създаден"
-
-#: builtin/archive.c:20
+#: builtin/archive.c:18
msgid "could not redirect output"
msgstr "изходът не може да бъде пренасочен"
-#: builtin/archive.c:37
+#: builtin/archive.c:35
msgid "git archive: Remote with no URL"
msgstr "git archive: Липсва адрес за отдалеченото хранилище"
-#: builtin/archive.c:61
+#: builtin/archive.c:59
msgid "git archive: expected ACK/NAK, got a flush packet"
msgstr ""
"git archive: очакваше се „ACK“/„NAK“, а бе получен изчистващ пакет „flush“"
-#: builtin/archive.c:64
+#: builtin/archive.c:62
#, c-format
msgid "git archive: NACK %s"
msgstr "git archive: получен е „NACK“ — %s"
-#: builtin/archive.c:65
+#: builtin/archive.c:63
msgid "git archive: protocol error"
msgstr "git archive: протоколна грешка"
-#: builtin/archive.c:69
+#: builtin/archive.c:67
msgid "git archive: expected a flush"
msgstr "git archive: очакваше се изчистване на буферите чрез „flush“"
-#: builtin/bisect--helper.c:23
+#: builtin/bisect--helper.c:24
msgid "git bisect--helper --bisect-reset [<commit>]"
msgstr "git bisect--helper --bisect-reset [ПОДАВАНЕ]"
-#: builtin/bisect--helper.c:24
-msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
-msgstr "git bisect--helper --bisect-next-check ЛОШО ДОБРО УПРАВЛЯВАЩА_ДУМА"
-
#: builtin/bisect--helper.c:25
msgid ""
"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
@@ -11248,60 +11509,73 @@
#: builtin/bisect--helper.c:29
msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
-msgstr "git bisect--helper --bisect-reset (ЛОШО) [ВЕРСИЯ]"
+msgstr "git bisect--helper --bisect-state (ЛОШО) [ВЕРСИЯ]"
#: builtin/bisect--helper.c:30
msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
-msgstr "git bisect--helper --bisect-reset (ДОБРО) [ВЕРСИЯ…]"
+msgstr "git bisect--helper --bisect-state (ДОБРО) [ВЕРСИЯ…]"
#: builtin/bisect--helper.c:31
msgid "git bisect--helper --bisect-replay <filename>"
-msgstr "git bisect--helper --bisect-next ИМЕ_НА_ФАЙЛ"
+msgstr "git bisect--helper --bisect-replay ИМЕ_НА_ФАЙЛ"
#: builtin/bisect--helper.c:32
msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
-msgstr "git bisect--helper --bisect-reset [(ВЕРСИЯ|ДИАПАЗОН)…]"
+msgstr "git bisect--helper --bisect-skip [(ВЕРСИЯ|ДИАПАЗОН)…]"
-#: builtin/bisect--helper.c:107
+#: builtin/bisect--helper.c:33
+msgid "git bisect--helper --bisect-visualize"
+msgstr "git bisect--helper --bisect-visualize"
+
+#: builtin/bisect--helper.c:34
+msgid "git bisect--helper --bisect-run <cmd>..."
+msgstr "git bisect--helper --bisect-run КОМАНДА…"
+
+#: builtin/bisect--helper.c:109
#, c-format
msgid "cannot open file '%s' in mode '%s'"
msgstr "файлът „%s“ не може да се отвори в режим „%s“"
-#: builtin/bisect--helper.c:114
+#: builtin/bisect--helper.c:116
#, c-format
msgid "could not write to file '%s'"
msgstr "във файла „%s“ не може да се пише"
-#: builtin/bisect--helper.c:155
+#: builtin/bisect--helper.c:154
+#, c-format
+msgid "cannot open file '%s' for reading"
+msgstr "файлът „%s“ не може да бъде отворен за четене"
+
+#: builtin/bisect--helper.c:170
#, c-format
msgid "'%s' is not a valid term"
msgstr "„%s“ е неправилна управляваща дума"
-#: builtin/bisect--helper.c:159
+#: builtin/bisect--helper.c:174
#, c-format
msgid "can't use the builtin command '%s' as a term"
msgstr "„%s“ е вградена команда и не може да се използва като управляваща дума"
-#: builtin/bisect--helper.c:169
+#: builtin/bisect--helper.c:184
#, c-format
msgid "can't change the meaning of the term '%s'"
msgstr "не може да смените значението на управляващата дума „%s“"
-#: builtin/bisect--helper.c:179
+#: builtin/bisect--helper.c:194
msgid "please use two different terms"
msgstr "използвайте две различни управляващи думи"
-#: builtin/bisect--helper.c:195
+#: builtin/bisect--helper.c:210
#, c-format
msgid "We are not bisecting.\n"
msgstr "В момента не се извършва двоично търсене.\n"
-#: builtin/bisect--helper.c:203
+#: builtin/bisect--helper.c:218
#, c-format
msgid "'%s' is not a valid commit"
msgstr "„%s“ не е подаване"
-#: builtin/bisect--helper.c:212
+#: builtin/bisect--helper.c:227
#, c-format
msgid ""
"could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
@@ -11309,27 +11583,27 @@
"първоначално указаното „%s“ в указателя „HEAD“ не може да бъде\n"
"изтеглено. Пробвайте да изпълните командата „git bisect reset ПОДАВАНЕ“."
-#: builtin/bisect--helper.c:256
+#: builtin/bisect--helper.c:271
#, c-format
msgid "Bad bisect_write argument: %s"
msgstr "Неправилен аргумент на функцията „bisect_write“: „%s“"
-#: builtin/bisect--helper.c:261
+#: builtin/bisect--helper.c:276
#, c-format
msgid "couldn't get the oid of the rev '%s'"
msgstr "идентификаторът на обект на версия „%s“ не може да бъде получен"
-#: builtin/bisect--helper.c:273
+#: builtin/bisect--helper.c:288
#, c-format
msgid "couldn't open the file '%s'"
msgstr "файлът „%s“ не може да бъде отворен"
-#: builtin/bisect--helper.c:299
+#: builtin/bisect--helper.c:314
#, c-format
msgid "Invalid command: you're currently in a %s/%s bisect"
msgstr "Неправилна команда: в момента се изпълнява двоично търсене по %s/%s."
-#: builtin/bisect--helper.c:326
+#: builtin/bisect--helper.c:341
#, c-format
msgid ""
"You need to give me at least one %s and %s revision.\n"
@@ -11338,7 +11612,7 @@
"Трябва да зададете поне една „%s“ и една „%s“ версия. (Това може да се\n"
"направи съответно и чрез командите „git bisect %s“ и „git bisect %s“.)"
-#: builtin/bisect--helper.c:330
+#: builtin/bisect--helper.c:345
#, c-format
msgid ""
"You need to start by \"git bisect start\".\n"
@@ -11349,7 +11623,7 @@
"Трябва да зададете поне една „%s“ и една „%s“ версия. (Това може да се\n"
"направи съответно и чрез командите „git bisect %s“ и „git bisect %s“.)"
-#: builtin/bisect--helper.c:350
+#: builtin/bisect--helper.c:365
#, c-format
msgid "bisecting only with a %s commit"
msgstr "двоично търсене само по „%s“ подаване."
@@ -11358,15 +11632,15 @@
#. translation. The program will only accept English input
#. at this point.
#.
-#: builtin/bisect--helper.c:358
+#: builtin/bisect--helper.c:373
msgid "Are you sure [Y/n]? "
msgstr "Да се продължи ли? „Y“ — ДА, „n“ — не"
-#: builtin/bisect--helper.c:419
+#: builtin/bisect--helper.c:434
msgid "no terms defined"
msgstr "не са указани управляващи думи"
-#: builtin/bisect--helper.c:422
+#: builtin/bisect--helper.c:437
#, c-format
msgid ""
"Your current terms are %s for the old state\n"
@@ -11375,7 +11649,7 @@
"Текущите управляващи думи са: %s за старото състояние\n"
"и %s за новото състояние.\n"
-#: builtin/bisect--helper.c:432
+#: builtin/bisect--helper.c:447
#, c-format
msgid ""
"invalid argument %s for 'git bisect terms'.\n"
@@ -11384,56 +11658,56 @@
"на „git bisect terms“ е подаден неправилен аргумент „%s“\n"
"Поддържат се опциите „--term-good“/„--term-old“ и „--term-bad„/„--term-new“."
-#: builtin/bisect--helper.c:499 builtin/bisect--helper.c:1023
+#: builtin/bisect--helper.c:514 builtin/bisect--helper.c:1038
msgid "revision walk setup failed\n"
msgstr "неуспешно настройване на обхождането на версиите\n"
-#: builtin/bisect--helper.c:521
+#: builtin/bisect--helper.c:536
#, c-format
msgid "could not open '%s' for appending"
msgstr "файлът „%s“ не може да се отвори за добавяне"
-#: builtin/bisect--helper.c:640 builtin/bisect--helper.c:653
+#: builtin/bisect--helper.c:655 builtin/bisect--helper.c:668
msgid "'' is not a valid term"
msgstr "„“ е неправилна управляваща дума"
-#: builtin/bisect--helper.c:663
+#: builtin/bisect--helper.c:678
#, c-format
msgid "unrecognized option: '%s'"
msgstr "непозната опция: %s"
-#: builtin/bisect--helper.c:667
+#: builtin/bisect--helper.c:682
#, c-format
msgid "'%s' does not appear to be a valid revision"
msgstr "„%s“ не изглежда като указател към версия"
-#: builtin/bisect--helper.c:698
+#: builtin/bisect--helper.c:713
msgid "bad HEAD - I need a HEAD"
msgstr "Неправилен указател „HEAD“"
-#: builtin/bisect--helper.c:713
+#: builtin/bisect--helper.c:728
#, c-format
msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
msgstr ""
"Неуспешно преминаване към „%s“. Изпълнете командата „git bisect start "
"СЪЩЕСТВУВАЩ_КЛОН“."
-#: builtin/bisect--helper.c:734
+#: builtin/bisect--helper.c:749
msgid "won't bisect on cg-seek'ed tree"
msgstr ""
"не може да се търси двоично, когато е изпълнена командата „cg-seek“ от "
"„cogito“"
-#: builtin/bisect--helper.c:737
+#: builtin/bisect--helper.c:752
msgid "bad HEAD - strange symbolic ref"
msgstr "Неправилен указател „HEAD“ — необичаен символен указател"
-#: builtin/bisect--helper.c:757
+#: builtin/bisect--helper.c:772
#, c-format
msgid "invalid ref: '%s'"
msgstr "неправилен указател: „%s“"
-#: builtin/bisect--helper.c:815
+#: builtin/bisect--helper.c:830
msgid "You need to start by \"git bisect start\"\n"
msgstr "Започнете като изпълните командата „git bisect start“\n"
@@ -11441,108 +11715,158 @@
#. translation. The program will only accept English input
#. at this point.
#.
-#: builtin/bisect--helper.c:826
+#: builtin/bisect--helper.c:841
msgid "Do you want me to do it for you [Y/n]? "
msgstr "Да се извърши ли автоматично? „Y“ — ДА, „n“ — не"
-#: builtin/bisect--helper.c:844
+#: builtin/bisect--helper.c:859
msgid "Please call `--bisect-state` with at least one argument"
msgstr "опцията „--bisect-state“ изисква поне един аргумент"
-#: builtin/bisect--helper.c:857
+#: builtin/bisect--helper.c:872
#, c-format
msgid "'git bisect %s' can take only one argument."
msgstr "Командата „git bisect %s“ приема само един аргумент."
-#: builtin/bisect--helper.c:869 builtin/bisect--helper.c:882
+#: builtin/bisect--helper.c:884 builtin/bisect--helper.c:897
#, c-format
msgid "Bad rev input: %s"
msgstr "Неправилна версия: „%s“"
-#: builtin/bisect--helper.c:889
+#: builtin/bisect--helper.c:904
#, c-format
msgid "Bad rev input (not a commit): %s"
msgstr "Неправилна версия (не е подаване): „%s“"
-#: builtin/bisect--helper.c:921
+#: builtin/bisect--helper.c:936
msgid "We are not bisecting."
msgstr "В момента не се извършва двоично търсене."
-#: builtin/bisect--helper.c:971
+#: builtin/bisect--helper.c:986
#, c-format
msgid "'%s'?? what are you talking about?"
msgstr ""
"Непозната команда „%s“. Възможностите са: „start“, „skip“, „good“, „bad“ (и "
"вариантите им)"
-#: builtin/bisect--helper.c:983
+#: builtin/bisect--helper.c:998
#, c-format
msgid "cannot read file '%s' for replaying"
msgstr ""
"файлът „%s“ не може да бъде прочетен, за да се изпълнят командите от него "
"наново"
-#: builtin/bisect--helper.c:1056
+#: builtin/bisect--helper.c:1107 builtin/bisect--helper.c:1274
+msgid "bisect run failed: no command provided."
+msgstr "неуспешно двоично търсене, не е зададена команда."
+
+#: builtin/bisect--helper.c:1116
+#, c-format
+msgid "running %s\n"
+msgstr "изпълнение на %s\n"
+
+#: builtin/bisect--helper.c:1120
+#, c-format
+msgid "bisect run failed: exit code %d from '%s' is < 0 or >= 128"
+msgstr ""
+"неуспешно двоично търсене: изходният код от командата „%2$s“ е %1$d — това е "
+"извън интервала [0, 128)"
+
+#: builtin/bisect--helper.c:1136
+#, c-format
+msgid "cannot open file '%s' for writing"
+msgstr "файлът „%s“ не може да бъде отворен за запис"
+
+#: builtin/bisect--helper.c:1152
+msgid "bisect run cannot continue any more"
+msgstr "двоичното търсене не може да продължи"
+
+#: builtin/bisect--helper.c:1154
+#, c-format
+msgid "bisect run success"
+msgstr "успешно двоично търсене"
+
+#: builtin/bisect--helper.c:1157
+#, c-format
+msgid "bisect found first bad commit"
+msgstr "двоичното търсене откри първото лошо подаване"
+
+#: builtin/bisect--helper.c:1160
+#, c-format
+msgid ""
+"bisect run failed: 'git bisect--helper --bisect-state %s' exited with error "
+"code %d"
+msgstr ""
+"неуспешно двоично търсене: „git bisect--helper --bisect-state %s“ завърши с "
+"код за грешка: %d"
+
+#: builtin/bisect--helper.c:1192
msgid "reset the bisection state"
msgstr "изчистване на състоянието на двоичното търсене"
-#: builtin/bisect--helper.c:1058
+#: builtin/bisect--helper.c:1194
msgid "check whether bad or good terms exist"
msgstr "проверка дали съществуват одобряващи/отхвърлящи управляващи думи"
-#: builtin/bisect--helper.c:1060
+#: builtin/bisect--helper.c:1196
msgid "print out the bisect terms"
msgstr "извеждане на управляващите думи"
-#: builtin/bisect--helper.c:1062
+#: builtin/bisect--helper.c:1198
msgid "start the bisect session"
msgstr "начало на двоично търсене"
-#: builtin/bisect--helper.c:1064
+#: builtin/bisect--helper.c:1200
msgid "find the next bisection commit"
msgstr "откриване на следващото подаване при двоично търсене"
-#: builtin/bisect--helper.c:1066
+#: builtin/bisect--helper.c:1202
msgid "mark the state of ref (or refs)"
msgstr "задаване на състоянието на указателя/ите"
-#: builtin/bisect--helper.c:1068
+#: builtin/bisect--helper.c:1204
msgid "list the bisection steps so far"
msgstr "извеждане на стъпките на двоичното търсене досега"
-#: builtin/bisect--helper.c:1070
+#: builtin/bisect--helper.c:1206
msgid "replay the bisection process from the given file"
msgstr "наново изпълнение на двоичното търсене чрез дадения файл"
-#: builtin/bisect--helper.c:1072
+#: builtin/bisect--helper.c:1208
msgid "skip some commits for checkout"
msgstr "прескачане на някои подавания при изтегляне"
-#: builtin/bisect--helper.c:1074
+#: builtin/bisect--helper.c:1210
+msgid "visualize the bisection"
+msgstr "визуализиране на двоичното търсене"
+
+#: builtin/bisect--helper.c:1212
+msgid "use <cmd>... to automatically bisect."
+msgstr ""
+"за автоматично определяне на състоянието при двоичното търсене да се ползва "
+"тази КОМАНДА…"
+
+#: builtin/bisect--helper.c:1214
msgid "no log for BISECT_WRITE"
msgstr "липсва запис за „BISECT_WRITE“"
-#: builtin/bisect--helper.c:1089
+#: builtin/bisect--helper.c:1229
msgid "--bisect-reset requires either no argument or a commit"
msgstr "опцията „--bisect-reset“ изисква или 0 аргументи, или 1 — подаване"
-#: builtin/bisect--helper.c:1094
-msgid "--bisect-next-check requires 2 or 3 arguments"
-msgstr "опцията „--bisect-next-check“ изисква 2 или 3 аргумента"
-
-#: builtin/bisect--helper.c:1100
+#: builtin/bisect--helper.c:1234
msgid "--bisect-terms requires 0 or 1 argument"
msgstr "опцията „--bisect-terms“ изисква 0 или 1 аргумента"
-#: builtin/bisect--helper.c:1109
+#: builtin/bisect--helper.c:1243
msgid "--bisect-next requires 0 arguments"
msgstr "опцията „--bisect-next“ не приема аргументи"
-#: builtin/bisect--helper.c:1120
+#: builtin/bisect--helper.c:1254
msgid "--bisect-log requires 0 arguments"
msgstr "опцията „--bisect-log“ не приема аргументи"
-#: builtin/bisect--helper.c:1125
+#: builtin/bisect--helper.c:1259
msgid "no logfile given"
msgstr "не е зададен журнален файл"
@@ -11554,167 +11878,169 @@
msgid "<rev-opts> are documented in git-rev-list(1)"
msgstr "ОПЦИИте_ЗА_ВЕРСИЯТА са документирани в ръководството git-rev-list(1)"
-#: builtin/blame.c:410
+#: builtin/blame.c:406
#, c-format
msgid "expecting a color: %s"
msgstr "трябва да е цвят: %s"
-#: builtin/blame.c:417
+#: builtin/blame.c:413
msgid "must end with a color"
msgstr "трябва да завършва с цвят"
-#: builtin/blame.c:728
+#: builtin/blame.c:724
#, c-format
msgid "invalid color '%s' in color.blame.repeatedLines"
msgstr "неправилен цвят „%s“ в „color.blame.repeatedLines“"
-#: builtin/blame.c:746
+#: builtin/blame.c:742
msgid "invalid value for blame.coloring"
msgstr "неправилна стойност за „blame.coloring“"
-#: builtin/blame.c:845
+#: builtin/blame.c:841
#, c-format
msgid "cannot find revision %s to ignore"
msgstr "версията за прескачане „%s“ не може да бъде открита"
-#: builtin/blame.c:867
+#: builtin/blame.c:863
msgid "show blame entries as we find them, incrementally"
msgstr "извеждане на авторството с намирането му, последователно"
-#: builtin/blame.c:868
+#: builtin/blame.c:864
msgid "do not show object names of boundary commits (Default: off)"
msgstr ""
"без извеждане на имената на обектите за граничните подавания (стандартно "
"опцията е изключена)"
-#: builtin/blame.c:869
+#: builtin/blame.c:865
msgid "do not treat root commits as boundaries (Default: off)"
msgstr ""
"началните подавания да не се считат за гранични (стандартно опцията е "
"изключена)"
-#: builtin/blame.c:870
+#: builtin/blame.c:866
msgid "show work cost statistics"
msgstr "извеждане на статистика за извършените действия"
-#: builtin/blame.c:871 builtin/checkout.c:1524 builtin/clone.c:94
-#: builtin/commit-graph.c:84 builtin/commit-graph.c:222 builtin/fetch.c:179
-#: builtin/merge.c:297 builtin/multi-pack-index.c:55 builtin/pull.c:119
-#: builtin/push.c:566 builtin/send-pack.c:198
+#: builtin/blame.c:867 builtin/checkout.c:1517 builtin/clone.c:94
+#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:179
+#: builtin/merge.c:298 builtin/multi-pack-index.c:103
+#: builtin/multi-pack-index.c:154 builtin/multi-pack-index.c:178
+#: builtin/multi-pack-index.c:204 builtin/pull.c:120 builtin/push.c:566
+#: builtin/send-pack.c:202
msgid "force progress reporting"
msgstr "извеждане на напредъка"
-#: builtin/blame.c:872
+#: builtin/blame.c:868
msgid "show output score for blame entries"
msgstr "извеждане на допълнителна информация за определянето на авторството"
-#: builtin/blame.c:873
+#: builtin/blame.c:869
msgid "show original filename (Default: auto)"
msgstr ""
"извеждане на първоначалното име на файл (стандартно това е автоматично)"
-#: builtin/blame.c:874
+#: builtin/blame.c:870
msgid "show original linenumber (Default: off)"
msgstr ""
"извеждане на първоначалния номер на ред (стандартно опцията е изключена)"
-#: builtin/blame.c:875
+#: builtin/blame.c:871
msgid "show in a format designed for machine consumption"
msgstr "извеждане във формат за по-нататъшна обработка"
-#: builtin/blame.c:876
+#: builtin/blame.c:872
msgid "show porcelain format with per-line commit information"
msgstr ""
"извеждане във формат за команди от потребителско ниво с информация на всеки "
"ред"
-#: builtin/blame.c:877
+#: builtin/blame.c:873
msgid "use the same output mode as git-annotate (Default: off)"
msgstr ""
"използване на същия формат като „git-annotate“ (стандартно опцията е "
"изключена)"
-#: builtin/blame.c:878
+#: builtin/blame.c:874
msgid "show raw timestamp (Default: off)"
msgstr "извеждане на неформатирани времена (стандартно опцията е изключена)"
-#: builtin/blame.c:879
+#: builtin/blame.c:875
msgid "show long commit SHA1 (Default: off)"
msgstr "извеждане на пълните суми по SHA1 (стандартно опцията е изключена)"
-#: builtin/blame.c:880
+#: builtin/blame.c:876
msgid "suppress author name and timestamp (Default: off)"
msgstr "без име на автор и време на промяна (стандартно опцията е изключена)"
-#: builtin/blame.c:881
+#: builtin/blame.c:877
msgid "show author email instead of name (Default: off)"
msgstr ""
"извеждане на е-пощата на автора, а не името му (стандартно опцията е "
"изключена)"
-#: builtin/blame.c:882
+#: builtin/blame.c:878
msgid "ignore whitespace differences"
msgstr "без разлики в знаците за интервали"
-#: builtin/blame.c:883 builtin/log.c:1823
+#: builtin/blame.c:879 builtin/log.c:1823
msgid "rev"
msgstr "ВЕРС"
-#: builtin/blame.c:883
+#: builtin/blame.c:879
msgid "ignore <rev> when blaming"
msgstr "прескачане на ВЕРСията при извеждане на авторството"
-#: builtin/blame.c:884
+#: builtin/blame.c:880
msgid "ignore revisions from <file>"
msgstr "прескачане на версиите указани във ФАЙЛа"
-#: builtin/blame.c:885
+#: builtin/blame.c:881
msgid "color redundant metadata from previous line differently"
msgstr ""
"оцветяване на повтарящите се метаданни от предишния ред в различен цвят"
-#: builtin/blame.c:886
+#: builtin/blame.c:882
msgid "color lines by age"
msgstr "оцветяване на редовете по възраст"
-#: builtin/blame.c:887
+#: builtin/blame.c:883
msgid "spend extra cycles to find better match"
msgstr "допълнителни изчисления за по-добри резултати"
-#: builtin/blame.c:888
+#: builtin/blame.c:884
msgid "use revisions from <file> instead of calling git-rev-list"
msgstr "изчитане на версиите от ФАЙЛа, а не чрез изпълнение на „git-rev-list“"
-#: builtin/blame.c:889
+#: builtin/blame.c:885
msgid "use <file>'s contents as the final image"
msgstr "използване на съдържанието на ФАЙЛа като крайно положение"
-#: builtin/blame.c:890 builtin/blame.c:891
+#: builtin/blame.c:886 builtin/blame.c:887
msgid "score"
msgstr "напасване на редовете"
-#: builtin/blame.c:890
+#: builtin/blame.c:886
msgid "find line copies within and across files"
msgstr ""
"търсене на копирани редове както в рамките на един файл, така и от един файл "
"към друг"
-#: builtin/blame.c:891
+#: builtin/blame.c:887
msgid "find line movements within and across files"
msgstr ""
"търсене на преместени редове както в рамките на един файл, така и от един "
"файл към друг"
-#: builtin/blame.c:892
+#: builtin/blame.c:888
msgid "range"
msgstr "диапазон"
-#: builtin/blame.c:893
+#: builtin/blame.c:889
msgid "process only line range <start>,<end> or function :<funcname>"
msgstr ""
"информация само за редовете в диапазона НАЧАЛО,КРАЙ или само на :ФУНКЦИЯта"
-#: builtin/blame.c:945
+#: builtin/blame.c:944
msgid "--progress can't be used with --incremental or porcelain formats"
msgstr ""
"опцията „--progress“ е несъвместима с „--incremental“ и форма̀та на командите "
@@ -11728,18 +12054,18 @@
#. your language may need more or fewer display
#. columns.
#.
-#: builtin/blame.c:996
+#: builtin/blame.c:995
msgid "4 years, 11 months ago"
msgstr "преди 4 години и 11 месеца"
-#: builtin/blame.c:1112
+#: builtin/blame.c:1111
#, 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:1157
+#: builtin/blame.c:1156
msgid "Blaming lines"
msgstr "Редове с авторство"
@@ -11840,75 +12166,75 @@
msgid "Deleted branch %s (was %s).\n"
msgstr "Изтрит клон „%s“ (той сочеше към „%s“).\n"
-#: builtin/branch.c:440 builtin/tag.c:63
+#: builtin/branch.c:441 builtin/tag.c:63
msgid "unable to parse format string"
msgstr "форматиращият низ не може да бъде анализиран: %s"
-#: builtin/branch.c:471
+#: builtin/branch.c:472
msgid "could not resolve HEAD"
msgstr "подаването, сочено от указателя „HEAD“, не може да се установи"
-#: builtin/branch.c:477
+#: builtin/branch.c:478
#, c-format
msgid "HEAD (%s) points outside of refs/heads/"
msgstr "„HEAD“ (%s) сочи извън директорията „refs/heads“"
-#: builtin/branch.c:492
+#: builtin/branch.c:493
#, c-format
msgid "Branch %s is being rebased at %s"
msgstr "Клонът „%s“ се пребазира върху „%s“"
-#: builtin/branch.c:496
+#: builtin/branch.c:497
#, c-format
msgid "Branch %s is being bisected at %s"
msgstr "Търси се двоично в клона „%s“ при „%s“"
-#: builtin/branch.c:513
+#: builtin/branch.c:514
msgid "cannot copy the current branch while not on any."
msgstr "не може да копирате текущия клон, защото сте извън който и да е клон"
-#: builtin/branch.c:515
+#: builtin/branch.c:516
msgid "cannot rename the current branch while not on any."
msgstr ""
"не може да преименувате текущия клон, защото сте извън който и да е клон"
-#: builtin/branch.c:526
+#: builtin/branch.c:527
#, c-format
msgid "Invalid branch name: '%s'"
msgstr "Неправилно име на клон: „%s“"
-#: builtin/branch.c:555
+#: builtin/branch.c:556
msgid "Branch rename failed"
msgstr "Неуспешно преименуване на клон"
-#: builtin/branch.c:557
+#: builtin/branch.c:558
msgid "Branch copy failed"
msgstr "Неуспешно копиране на клон"
-#: builtin/branch.c:561
+#: builtin/branch.c:562
#, c-format
msgid "Created a copy of a misnamed branch '%s'"
msgstr "Клонът с неправилно име „%s“ е копиран"
-#: builtin/branch.c:564
+#: builtin/branch.c:565
#, c-format
msgid "Renamed a misnamed branch '%s' away"
msgstr "Клонът с неправилно име „%s“ е преименуван"
-#: builtin/branch.c:570
+#: builtin/branch.c:571
#, c-format
msgid "Branch renamed to %s, but HEAD is not updated!"
msgstr "Клонът е преименуван на „%s“, но указателят „HEAD“ не е обновен"
-#: builtin/branch.c:579
+#: builtin/branch.c:580
msgid "Branch is renamed, but update of config-file failed"
msgstr "Клонът е преименуван, но конфигурационният файл не е обновен"
-#: builtin/branch.c:581
+#: builtin/branch.c:582
msgid "Branch is copied, but update of config-file failed"
msgstr "Клонът е копиран, но конфигурационният файл не е обновен"
-#: builtin/branch.c:597
+#: builtin/branch.c:598
#, c-format
msgid ""
"Please edit the description for the branch\n"
@@ -11919,183 +12245,183 @@
" %s\n"
"Редовете, които започват с „%c“, ще бъдат пропуснати.\n"
-#: builtin/branch.c:631
+#: builtin/branch.c:632
msgid "Generic options"
msgstr "Общи настройки"
-#: builtin/branch.c:633
+#: builtin/branch.c:634
msgid "show hash and subject, give twice for upstream branch"
msgstr ""
"извеждане на контролната сума и темата. Повтарянето на опцията прибавя "
"отдалечените клони"
-#: builtin/branch.c:634
+#: builtin/branch.c:635
msgid "suppress informational messages"
msgstr "без информационни съобщения"
-#: builtin/branch.c:635
+#: builtin/branch.c:636
msgid "set up tracking mode (see git-pull(1))"
msgstr "задаване на режима на следене (виж git-pull(1))"
-#: builtin/branch.c:637
+#: builtin/branch.c:638
msgid "do not use"
msgstr "да не се ползва"
-#: builtin/branch.c:639 builtin/rebase.c:533
+#: builtin/branch.c:640
msgid "upstream"
msgstr "клон-източник"
-#: builtin/branch.c:639
+#: builtin/branch.c:640
msgid "change the upstream info"
msgstr "смяна на клона-източник"
-#: builtin/branch.c:640
+#: builtin/branch.c:641
msgid "unset the upstream info"
msgstr "изчистване на информацията за клон-източник"
-#: builtin/branch.c:641
+#: builtin/branch.c:642
msgid "use colored output"
msgstr "цветен изход"
-#: builtin/branch.c:642
+#: builtin/branch.c:643
msgid "act on remote-tracking branches"
msgstr "действие върху следящите клони"
-#: builtin/branch.c:644 builtin/branch.c:646
+#: builtin/branch.c:645 builtin/branch.c:647
msgid "print only branches that contain the commit"
msgstr "извеждане само на клоните, които съдържат това ПОДАВАНЕ"
-#: builtin/branch.c:645 builtin/branch.c:647
+#: builtin/branch.c:646 builtin/branch.c:648
msgid "print only branches that don't contain the commit"
msgstr "извеждане само на клоните, които не съдържат това ПОДАВАНЕ"
-#: builtin/branch.c:650
+#: builtin/branch.c:651
msgid "Specific git-branch actions:"
msgstr "Специални действия на „git-branch“:"
-#: builtin/branch.c:651
+#: builtin/branch.c:652
msgid "list both remote-tracking and local branches"
msgstr "извеждане както на следящите, така и на локалните клони"
-#: builtin/branch.c:653
+#: builtin/branch.c:654
msgid "delete fully merged branch"
msgstr "изтриване на клони, които са напълно слети"
-#: builtin/branch.c:654
+#: builtin/branch.c:655
msgid "delete branch (even if not merged)"
msgstr "изтриване и на клони, които не са напълно слети"
-#: builtin/branch.c:655
+#: builtin/branch.c:656
msgid "move/rename a branch and its reflog"
msgstr ""
"преместване/преименуване на клон и принадлежащият му журнал на указателите"
-#: builtin/branch.c:656
+#: builtin/branch.c:657
msgid "move/rename a branch, even if target exists"
msgstr "преместване/преименуване на клон, дори ако има вече клон с такова име"
-#: builtin/branch.c:657
+#: builtin/branch.c:658
msgid "copy a branch and its reflog"
msgstr "копиране на клон и принадлежащия му журнал на указателите"
-#: builtin/branch.c:658
+#: builtin/branch.c:659
msgid "copy a branch, even if target exists"
msgstr "копиране на клон, дори ако има вече клон с такова име"
-#: builtin/branch.c:659
+#: builtin/branch.c:660
msgid "list branch names"
msgstr "извеждане на имената на клоните"
-#: builtin/branch.c:660
+#: builtin/branch.c:661
msgid "show current branch name"
msgstr "извеждане на името на текущия клон"
-#: builtin/branch.c:661
+#: builtin/branch.c:662
msgid "create the branch's reflog"
msgstr "създаване на журнала на указателите на клона"
-#: builtin/branch.c:663
+#: builtin/branch.c:664
msgid "edit the description for the branch"
msgstr "редактиране на описанието на клона"
-#: builtin/branch.c:664
+#: builtin/branch.c:665
msgid "force creation, move/rename, deletion"
msgstr "принудително създаване, преместване, преименуване, изтриване"
-#: builtin/branch.c:665
+#: builtin/branch.c:666
msgid "print only branches that are merged"
msgstr "извеждане само на слетите клони"
-#: builtin/branch.c:666
+#: builtin/branch.c:667
msgid "print only branches that are not merged"
msgstr "извеждане само на неслетите клони"
-#: builtin/branch.c:667
+#: builtin/branch.c:668
msgid "list branches in columns"
msgstr "извеждане по колони"
-#: builtin/branch.c:669 builtin/for-each-ref.c:44 builtin/notes.c:415
-#: builtin/notes.c:418 builtin/notes.c:581 builtin/notes.c:584
-#: builtin/tag.c:477
+#: builtin/branch.c:670 builtin/for-each-ref.c:44 builtin/notes.c:413
+#: builtin/notes.c:416 builtin/notes.c:579 builtin/notes.c:582
+#: builtin/tag.c:475
msgid "object"
msgstr "ОБЕКТ"
-#: builtin/branch.c:670
+#: builtin/branch.c:671
msgid "print only branches of the object"
msgstr "извеждане само на клоните на ОБЕКТА"
-#: builtin/branch.c:671 builtin/for-each-ref.c:50 builtin/tag.c:484
+#: builtin/branch.c:672 builtin/for-each-ref.c:50 builtin/tag.c:482
msgid "sorting and filtering are case insensitive"
msgstr "подредбата и филтрирането третират еднакво малките и главните букви"
-#: builtin/branch.c:672 builtin/for-each-ref.c:40 builtin/tag.c:482
+#: builtin/branch.c:673 builtin/for-each-ref.c:40 builtin/tag.c:480
#: builtin/verify-tag.c:38
msgid "format to use for the output"
msgstr "ФОРМАТ за изхода"
-#: builtin/branch.c:695 builtin/clone.c:794
+#: builtin/branch.c:696 builtin/clone.c:678
msgid "HEAD not found below refs/heads!"
msgstr "В директорията „refs/heads“ липсва файл „HEAD“"
-#: builtin/branch.c:719
+#: builtin/branch.c:720
msgid "--column and --verbose are incompatible"
msgstr "опциите „--column“ и „--verbose“ са несъвместими"
-#: builtin/branch.c:734 builtin/branch.c:790 builtin/branch.c:799
+#: builtin/branch.c:735 builtin/branch.c:792 builtin/branch.c:801
msgid "branch name required"
msgstr "Необходимо е име на клон"
-#: builtin/branch.c:766
+#: builtin/branch.c:768
msgid "Cannot give description to detached HEAD"
msgstr "Не може да зададете описание на несвързан „HEAD“"
-#: builtin/branch.c:771
+#: builtin/branch.c:773
msgid "cannot edit description of more than one branch"
msgstr "Не може да редактирате описанието на повече от един клон едновременно"
-#: builtin/branch.c:778
+#: builtin/branch.c:780
#, c-format
msgid "No commit on branch '%s' yet."
msgstr "В клона „%s“ все още няма подавания."
-#: builtin/branch.c:781
+#: builtin/branch.c:783
#, c-format
msgid "No branch named '%s'."
msgstr "Липсва клон на име „%s“."
-#: builtin/branch.c:796
+#: builtin/branch.c:798
msgid "too many branches for a copy operation"
msgstr "прекалено много клони за копиране"
-#: builtin/branch.c:805
+#: builtin/branch.c:807
msgid "too many arguments for a rename operation"
msgstr "прекалено много аргументи към командата за преименуване"
-#: builtin/branch.c:810
+#: builtin/branch.c:812
msgid "too many arguments to set new upstream"
msgstr "прекалено много аргументи към командата за следене"
-#: builtin/branch.c:814
+#: builtin/branch.c:816
#, c-format
msgid ""
"could not set upstream of HEAD to %s when it does not point to any branch."
@@ -12103,31 +12429,31 @@
"Следеното от „HEAD“ не може да се зададе да е „%s“, защото то не сочи към "
"никой клон."
-#: builtin/branch.c:817 builtin/branch.c:840
+#: builtin/branch.c:819 builtin/branch.c:842
#, c-format
msgid "no such branch '%s'"
msgstr "Няма клон на име „%s“."
-#: builtin/branch.c:821
+#: builtin/branch.c:823
#, c-format
msgid "branch '%s' does not exist"
msgstr "Не съществува клон на име „%s“."
-#: builtin/branch.c:834
+#: builtin/branch.c:836
msgid "too many arguments to unset upstream"
msgstr "прекалено много аргументи към командата за спиране на следене"
-#: builtin/branch.c:838
+#: builtin/branch.c:840
msgid "could not unset upstream of HEAD when it does not point to any branch."
msgstr ""
"Следеното от „HEAD“ не може да махне, защото то не сочи към никой клон."
-#: builtin/branch.c:844
+#: builtin/branch.c:846
#, c-format
msgid "Branch '%s' has no upstream information"
msgstr "Няма информация клонът „%s“ да следи някой друг"
-#: builtin/branch.c:854
+#: builtin/branch.c:856
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>?"
@@ -12135,7 +12461,7 @@
"опциите „-a“ и „-r“ на „git branch“ са несъвместими с име на клон.\n"
"Пробвайте с: „-a|-r --list ШАБЛОН“"
-#: builtin/branch.c:858
+#: builtin/branch.c:860
msgid ""
"the '--set-upstream' option is no longer supported. Please use '--track' or "
"'--set-upstream-to' instead."
@@ -12143,32 +12469,32 @@
"опцията „--set-upstream“ вече не се поддържа. Използвайте „--track“ или „--"
"set-upstream-to“"
-#: builtin/bugreport.c:15
+#: builtin/bugreport.c:16
msgid "git version:\n"
msgstr "версия на git:\n"
-#: builtin/bugreport.c:21
+#: builtin/bugreport.c:22
#, c-format
msgid "uname() failed with error '%s' (%d)\n"
msgstr "грешка при изпълнението на „uname()“ — „%s“ (%d)\n"
-#: builtin/bugreport.c:31
+#: builtin/bugreport.c:32
msgid "compiler info: "
msgstr "компилатор: "
-#: builtin/bugreport.c:34
+#: builtin/bugreport.c:35
msgid "libc info: "
msgstr "библиотека на C: "
-#: builtin/bugreport.c:80
+#: builtin/bugreport.c:49
msgid "not run from a git repository - no hooks to show\n"
msgstr "командата е стартирана извън хранилище на Git, затова няма куки\n"
-#: builtin/bugreport.c:90
+#: builtin/bugreport.c:62
msgid "git bugreport [-o|--output-directory <file>] [-s|--suffix <format>]"
msgstr "git bugreport [-o|--output-directory ФАЙЛ] [-s|--suffix ФОРМАТ]"
-#: builtin/bugreport.c:97
+#: builtin/bugreport.c:69
msgid ""
"Thank you for filling out a Git bug report!\n"
"Please answer the following questions to help us understand your issue.\n"
@@ -12204,38 +12530,33 @@
"Разгледайте останалата част от доклада за грешка по-долу.\n"
"Може да изтриете редовете, които не искате да споделите.\n"
-#: builtin/bugreport.c:136
+#: builtin/bugreport.c:108
msgid "specify a destination for the bugreport file"
msgstr "укажете файла, в който да се запази докладът за грешка"
-#: builtin/bugreport.c:138
+#: builtin/bugreport.c:110
msgid "specify a strftime format suffix for the filename"
msgstr "укажете суфикса на файла във формат за „strftime“"
-#: builtin/bugreport.c:160
+#: builtin/bugreport.c:132
#, c-format
msgid "could not create leading directories for '%s'"
msgstr "родителските директории на „%s“ не може да бъдат създадени"
-#: builtin/bugreport.c:167
+#: builtin/bugreport.c:139
msgid "System Info"
msgstr "Информация за системата"
-#: builtin/bugreport.c:170
+#: builtin/bugreport.c:142
msgid "Enabled Hooks"
msgstr "Включени куки"
-#: builtin/bugreport.c:177
-#, c-format
-msgid "couldn't create a new file at '%s'"
-msgstr "новият файл „%s“ не може да бъде създаден"
-
-#: builtin/bugreport.c:180
+#: builtin/bugreport.c:149
#, c-format
msgid "unable to write to %s"
msgstr "в „%s“ не може да се пише"
-#: builtin/bugreport.c:190
+#: builtin/bugreport.c:159
#, c-format
msgid "Created new report at '%s'.\n"
msgstr "Новият доклад е създаден в „%s“.\n"
@@ -12256,54 +12577,54 @@
msgid "git bundle unbundle <file> [<refname>...]"
msgstr "git bundle unbundle ФАЙЛ [ИМЕ_НА_УКАЗАТЕЛ…]"
-#: builtin/bundle.c:67 builtin/pack-objects.c:3907
+#: builtin/bundle.c:65 builtin/pack-objects.c:3876
msgid "do not show progress meter"
msgstr "без извеждане на напредъка"
-#: builtin/bundle.c:69 builtin/pack-objects.c:3909
+#: builtin/bundle.c:67 builtin/bundle.c:167 builtin/pack-objects.c:3878
msgid "show progress meter"
msgstr "извеждане на напредъка"
-#: builtin/bundle.c:71 builtin/pack-objects.c:3911
+#: builtin/bundle.c:69 builtin/pack-objects.c:3880
msgid "show progress meter during object writing phase"
msgstr "извеждане на напредъка във фазата на запазване на обектите"
-#: builtin/bundle.c:74 builtin/pack-objects.c:3914
+#: builtin/bundle.c:72 builtin/pack-objects.c:3883
msgid "similar to --all-progress when progress meter is shown"
msgstr ""
"същото действие като опцията „--all-progress“ при извеждането на напредъка"
-#: builtin/bundle.c:76
+#: builtin/bundle.c:74
msgid "specify bundle format version"
msgstr "версия на пратката"
-#: builtin/bundle.c:96
+#: builtin/bundle.c:94
msgid "Need a repository to create a bundle."
msgstr "За създаването на пратка е необходимо хранилище."
-#: builtin/bundle.c:109
+#: builtin/bundle.c:107
msgid "do not show bundle details"
msgstr "без подробна информация за пратките"
-#: builtin/bundle.c:128
+#: builtin/bundle.c:126
#, c-format
msgid "%s is okay\n"
msgstr "Пратката „%s“ е наред\n"
-#: builtin/bundle.c:179
+#: builtin/bundle.c:182
msgid "Need a repository to unbundle."
msgstr "За приемането на пратка е необходимо хранилище."
-#: builtin/bundle.c:191 builtin/remote.c:1700
-msgid "be verbose; must be placed before a subcommand"
-msgstr "повече подробности. Поставя се пред подкоманда"
+#: builtin/bundle.c:185
+msgid "Unbundling objects"
+msgstr "Разпакетиране на пратки от обекти"
-#: builtin/bundle.c:213 builtin/remote.c:1731
+#: builtin/bundle.c:219 builtin/remote.c:1733
#, c-format
msgid "Unknown subcommand: %s"
msgstr "Непозната подкоманда: %s"
-#: builtin/cat-file.c:596
+#: builtin/cat-file.c:622
msgid ""
"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
"p | <type> | --textconv | --filters) [--path=<path>] <object>"
@@ -12311,7 +12632,7 @@
"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
"p | ВИД | --textconv --filters) [--path=ПЪТ] ОБЕКТ"
-#: builtin/cat-file.c:597
+#: builtin/cat-file.c:623
msgid ""
"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
"symlinks] [--textconv | --filters]"
@@ -12319,79 +12640,79 @@
"git cat-file (--batch[=ФОРМАТ] | --batch-check[=ФОРМАТ]) [--follow-symlinks] "
"[--textconv | --filters]"
-#: builtin/cat-file.c:618
+#: builtin/cat-file.c:644
msgid "only one batch option may be specified"
msgstr "може да укажете само една пакетна опция"
-#: builtin/cat-file.c:636
+#: builtin/cat-file.c:662
msgid "<type> can be one of: blob, tree, commit, tag"
msgstr ""
"ВИДът може да е: „blob“ (BLOB), „tree“ (дърво), „commit“ (подаване), "
"„tag“ (етикет)"
-#: builtin/cat-file.c:637
+#: builtin/cat-file.c:663
msgid "show object type"
msgstr "извеждане на вида на обект"
-#: builtin/cat-file.c:638
+#: builtin/cat-file.c:664
msgid "show object size"
msgstr "извеждане на размера на обект"
-#: builtin/cat-file.c:640
+#: builtin/cat-file.c:666
msgid "exit with zero when there's no error"
msgstr "изход с 0, когато няма грешка"
-#: builtin/cat-file.c:641
+#: builtin/cat-file.c:667
msgid "pretty-print object's content"
msgstr "форматирано извеждане на съдържанието на обекта"
-#: builtin/cat-file.c:643
+#: builtin/cat-file.c:669
msgid "for blob objects, run textconv on object's content"
msgstr ""
"да се стартира програмата зададена в настройката „textconv“ за преобразуване "
"на съдържанието на обекта-BLOB"
-#: builtin/cat-file.c:645
+#: builtin/cat-file.c:671
msgid "for blob objects, run filters on object's content"
msgstr ""
"да се стартират програмите за преобразуване на съдържанието на обектите-BLOB"
-#: builtin/cat-file.c:646
+#: builtin/cat-file.c:672
msgid "blob"
msgstr "обект-BLOB"
-#: builtin/cat-file.c:647
+#: builtin/cat-file.c:673
msgid "use a specific path for --textconv/--filters"
msgstr "опциите „--textconv“/„--filters“ изискват път"
-#: builtin/cat-file.c:649
+#: builtin/cat-file.c:675
msgid "allow -s and -t to work with broken/corrupt objects"
msgstr "позволяване на опциите „-s“ и „-t“ да работят с повредени обекти"
-#: builtin/cat-file.c:650
+#: builtin/cat-file.c:676
msgid "buffer --batch output"
msgstr "буфериране на изхода от „--batch“"
-#: builtin/cat-file.c:652
+#: builtin/cat-file.c:678
msgid "show info and content of objects fed from the standard input"
msgstr ""
"извеждане на информация и съдържание на обектите подадени на стандартния вход"
-#: builtin/cat-file.c:656
+#: builtin/cat-file.c:682
msgid "show info about objects fed from the standard input"
msgstr "извеждане на информация за обектите подадени на стандартния вход"
-#: builtin/cat-file.c:660
+#: builtin/cat-file.c:686
msgid "follow in-tree symlinks (used with --batch or --batch-check)"
msgstr ""
"следване на символните връзки сочещи в дървото (ползва се с „--batch“ или „--"
"batch-check“)"
-#: builtin/cat-file.c:662
+#: builtin/cat-file.c:688
msgid "show all objects with --batch or --batch-check"
msgstr "извеждане на всички обекти с „--batch“ или „--batch-check“"
-#: builtin/cat-file.c:664
+#: builtin/cat-file.c:690
msgid "do not order --batch-all-objects output"
msgstr "без подреждане на изхода от „--batch-all-objects“"
@@ -12411,7 +12732,7 @@
msgid "use .gitattributes only from the index"
msgstr "използване на файла „.gitattributes“ само от индекса"
-#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:102
+#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:100
msgid "read file names from stdin"
msgstr "изчитане на имената на файловете от стандартния вход"
@@ -12419,8 +12740,8 @@
msgid "terminate input and output records by a NUL character"
msgstr "разделяне на входните и изходните записи с нулевия знак „NUL“"
-#: builtin/check-ignore.c:21 builtin/checkout.c:1520 builtin/gc.c:549
-#: builtin/worktree.c:493
+#: builtin/check-ignore.c:21 builtin/checkout.c:1513 builtin/gc.c:549
+#: builtin/worktree.c:494
msgid "suppress progress reporting"
msgstr "без показване на напредъка"
@@ -12478,10 +12799,10 @@
msgstr "git checkout--worker [ОПЦИЯ…]"
#: builtin/checkout--worker.c:118 builtin/checkout-index.c:201
-#: 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:491
-#: builtin/worktree.c:728
+#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1863
+#: builtin/submodule--helper.c:1866 builtin/submodule--helper.c:1874
+#: builtin/submodule--helper.c:2510 builtin/submodule--helper.c:2576
+#: builtin/worktree.c:492 builtin/worktree.c:729
msgid "string"
msgstr "НИЗ"
@@ -12575,69 +12896,69 @@
msgid "Unable to add merge result for '%s'"
msgstr "Резултатът за „%s“ не може да бъде слян"
-#: builtin/checkout.c:414
+#: builtin/checkout.c:411
#, c-format
msgid "Recreated %d merge conflict"
msgid_plural "Recreated %d merge conflicts"
msgstr[0] "Пресъздаден е %d конфликт при сливане"
msgstr[1] "Пресъздадени са %d конфликта при сливане"
-#: builtin/checkout.c:419
+#: builtin/checkout.c:416
#, c-format
msgid "Updated %d path from %s"
msgid_plural "Updated %d paths from %s"
msgstr[0] "Обновен е %d път от „%s“"
msgstr[1] "Обновени са %d пътя от „%s“"
-#: builtin/checkout.c:426
+#: builtin/checkout.c:423
#, c-format
msgid "Updated %d path from the index"
msgid_plural "Updated %d paths from the index"
msgstr[0] "Обновен е %d път от индекса"
msgstr[1] "Обновени са %d пътя от индекса"
-#: builtin/checkout.c:449 builtin/checkout.c:452 builtin/checkout.c:455
-#: builtin/checkout.c:459
+#: builtin/checkout.c:446 builtin/checkout.c:449 builtin/checkout.c:452
+#: builtin/checkout.c:456
#, c-format
msgid "'%s' cannot be used with updating paths"
msgstr "опцията „%s“ е несъвместима с обновяването на пътища"
-#: builtin/checkout.c:462 builtin/checkout.c:465
+#: builtin/checkout.c:459 builtin/checkout.c:462
#, c-format
msgid "'%s' cannot be used with %s"
msgstr "опциите „%s“ и „%s“ са несъвместими"
-#: builtin/checkout.c:469
+#: builtin/checkout.c:466
#, c-format
msgid "Cannot update paths and switch to branch '%s' at the same time."
msgstr ""
"Невъзможно е едновременно да обновявате пътища и да преминете към клона „%s“."
-#: builtin/checkout.c:473
+#: builtin/checkout.c:470
#, c-format
msgid "neither '%s' or '%s' is specified"
msgstr "не е указано нито „%s“, нито „%s“"
-#: builtin/checkout.c:477
+#: builtin/checkout.c:474
#, c-format
msgid "'%s' must be used when '%s' is not specified"
msgstr "опцията „%s“ е задължителна, когато „%s“ не е зададена"
-#: builtin/checkout.c:482 builtin/checkout.c:487
+#: builtin/checkout.c:479 builtin/checkout.c:484
#, c-format
msgid "'%s' or '%s' cannot be used with %s"
msgstr "опцията „%3$s“ е несъвместима както с „%1$s“, така и с „%2$s“"
-#: builtin/checkout.c:563 builtin/checkout.c:570
+#: builtin/checkout.c:558 builtin/checkout.c:565
#, c-format
msgid "path '%s' is unmerged"
msgstr "пътят „%s“ не е слят"
-#: builtin/checkout.c:739
+#: builtin/checkout.c:736
msgid "you need to resolve your current index first"
msgstr "първо трябва да коригирате индекса си"
-#: builtin/checkout.c:793
+#: builtin/checkout.c:786
#, c-format
msgid ""
"cannot continue with staged changes in the following files:\n"
@@ -12647,50 +12968,50 @@
"индекса:\n"
"%s"
-#: builtin/checkout.c:886
+#: builtin/checkout.c:879
#, c-format
msgid "Can not do reflog for '%s': %s\n"
msgstr "Журналът на указателите за „%s“ не може да се проследи: %s\n"
-#: builtin/checkout.c:928
+#: builtin/checkout.c:921
msgid "HEAD is now at"
msgstr "Указателят „HEAD“ в момента сочи към"
-#: builtin/checkout.c:932 builtin/clone.c:725 t/helper/test-fast-rebase.c:203
+#: builtin/checkout.c:925 builtin/clone.c:609 t/helper/test-fast-rebase.c:203
msgid "unable to update HEAD"
msgstr "Указателят „HEAD“ не може да бъде обновен"
-#: builtin/checkout.c:936
+#: builtin/checkout.c:929
#, c-format
msgid "Reset branch '%s'\n"
msgstr "Зануляване на клона „%s“\n"
-#: builtin/checkout.c:939
+#: builtin/checkout.c:932
#, c-format
msgid "Already on '%s'\n"
msgstr "Вече сте на „%s“\n"
-#: builtin/checkout.c:943
+#: builtin/checkout.c:936
#, c-format
msgid "Switched to and reset branch '%s'\n"
msgstr "Преминаване към клона „%s“ и зануляване на промените\n"
-#: builtin/checkout.c:945 builtin/checkout.c:1376
+#: builtin/checkout.c:938 builtin/checkout.c:1369
#, c-format
msgid "Switched to a new branch '%s'\n"
msgstr "Преминахте към новия клон „%s“\n"
-#: builtin/checkout.c:947
+#: builtin/checkout.c:940
#, c-format
msgid "Switched to branch '%s'\n"
msgstr "Преминахте към клона „%s“\n"
-#: builtin/checkout.c:998
+#: builtin/checkout.c:991
#, c-format
msgid " ... and %d more.\n"
msgstr "… и още %d.\n"
-#: builtin/checkout.c:1004
+#: builtin/checkout.c:997
#, c-format
msgid ""
"Warning: you are leaving %d commit behind, not connected to\n"
@@ -12712,7 +13033,7 @@
"\n"
"%s\n"
-#: builtin/checkout.c:1023
+#: builtin/checkout.c:1016
#, c-format
msgid ""
"If you want to keep it by creating a new branch, this may be a good time\n"
@@ -12739,19 +13060,19 @@
" git branch ИМЕ_НА_НОВИЯ_КЛОН %s\n"
"\n"
-#: builtin/checkout.c:1058
+#: builtin/checkout.c:1051
msgid "internal error in revision walk"
msgstr "вътрешна грешка при обхождането на версиите"
-#: builtin/checkout.c:1062
+#: builtin/checkout.c:1055
msgid "Previous HEAD position was"
msgstr "Преди това „HEAD“ сочеше към"
-#: builtin/checkout.c:1102 builtin/checkout.c:1371
+#: builtin/checkout.c:1095 builtin/checkout.c:1364
msgid "You are on a branch yet to be born"
msgstr "В момента сте на клон, който все още не е създаден"
-#: builtin/checkout.c:1184
+#: builtin/checkout.c:1177
#, c-format
msgid ""
"'%s' could be both a local file and a tracking branch.\n"
@@ -12760,7 +13081,7 @@
"„%s“ може да е както локален файл, така и следящ клон. За уточняване\n"
"ползвайте разделителя „--“ (и евентуално опцията „--no-guess“)"
-#: builtin/checkout.c:1191
+#: builtin/checkout.c:1184
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"
@@ -12782,51 +13103,51 @@
"\n"
" checkout.defaultRemote=origin"
-#: builtin/checkout.c:1201
+#: builtin/checkout.c:1194
#, c-format
msgid "'%s' matched multiple (%d) remote tracking branches"
msgstr "„%s“ напасва с множество (%d) отдалечени клони"
-#: builtin/checkout.c:1267
+#: builtin/checkout.c:1260
msgid "only one reference expected"
msgstr "очаква се само един указател"
-#: builtin/checkout.c:1284
+#: builtin/checkout.c:1277
#, c-format
msgid "only one reference expected, %d given."
msgstr "очаква се един указател, а сте подали %d."
-#: builtin/checkout.c:1330 builtin/worktree.c:268 builtin/worktree.c:436
+#: builtin/checkout.c:1323 builtin/worktree.c:269 builtin/worktree.c:437
#, c-format
msgid "invalid reference: %s"
msgstr "неправилен указател: %s"
-#: builtin/checkout.c:1343 builtin/checkout.c:1709
+#: builtin/checkout.c:1336 builtin/checkout.c:1705
#, c-format
msgid "reference is not a tree: %s"
msgstr "указателят не сочи към обект-дърво: %s"
-#: builtin/checkout.c:1390
+#: builtin/checkout.c:1383
#, c-format
msgid "a branch is expected, got tag '%s'"
msgstr "очаква се клон, а не етикет — „%s“"
-#: builtin/checkout.c:1392
+#: builtin/checkout.c:1385
#, c-format
msgid "a branch is expected, got remote branch '%s'"
msgstr "очаква се локален, а не отдалечен клон — „%s“"
-#: builtin/checkout.c:1393 builtin/checkout.c:1401
+#: builtin/checkout.c:1386 builtin/checkout.c:1394
#, c-format
msgid "a branch is expected, got '%s'"
msgstr "очаква се клон, а не „%s“"
-#: builtin/checkout.c:1396
+#: builtin/checkout.c:1389
#, c-format
msgid "a branch is expected, got commit '%s'"
msgstr "очаква се клон, а не подаване — „%s“"
-#: builtin/checkout.c:1412
+#: builtin/checkout.c:1405
msgid ""
"cannot switch branch while merging\n"
"Consider \"git merge --quit\" or \"git worktree add\"."
@@ -12834,7 +13155,7 @@
"по време на сливане не може да преминете към друг клон.\n"
"Пробвайте с „git merge --quit“ или „git worktree add“."
-#: builtin/checkout.c:1416
+#: builtin/checkout.c:1409
msgid ""
"cannot switch branch in the middle of an am session\n"
"Consider \"git am --quit\" or \"git worktree add\"."
@@ -12843,7 +13164,7 @@
"клон.\n"
"Пробвайте с „git am --quit“ или „git worktree add“."
-#: builtin/checkout.c:1420
+#: builtin/checkout.c:1413
msgid ""
"cannot switch branch while rebasing\n"
"Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -12851,7 +13172,7 @@
"по време на пребазиране не може да преминете към друг клон.\n"
"Пробвайте с „git rebase --quit“ или „git worktree add“."
-#: builtin/checkout.c:1424
+#: builtin/checkout.c:1417
msgid ""
"cannot switch branch while cherry-picking\n"
"Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -12859,7 +13180,7 @@
"по време на отбиране на подавания не може да преминете към друг клон.\n"
"Пробвайте с „git cherry-pick --quit“ или „git worktree add“."
-#: builtin/checkout.c:1428
+#: builtin/checkout.c:1421
msgid ""
"cannot switch branch while reverting\n"
"Consider \"git revert --quit\" or \"git worktree add\"."
@@ -12867,139 +13188,139 @@
"по време на отмяна на подавания не може да преминете към друг клон.\n"
"Пробвайте с „git revert --quit“ или „git worktree add“."
-#: builtin/checkout.c:1432
+#: builtin/checkout.c:1425
msgid "you are switching branch while bisecting"
msgstr "преминаване към друг клон по време на двоично търсене"
-#: builtin/checkout.c:1439
+#: builtin/checkout.c:1432
msgid "paths cannot be used with switching branches"
msgstr "задаването на път е несъвместимо с преминаването от един клон към друг"
-#: builtin/checkout.c:1442 builtin/checkout.c:1446 builtin/checkout.c:1450
+#: builtin/checkout.c:1435 builtin/checkout.c:1439 builtin/checkout.c:1443
#, c-format
msgid "'%s' cannot be used with switching branches"
msgstr "опцията „%s“ е несъвместима с преминаването от един клон към друг"
-#: builtin/checkout.c:1454 builtin/checkout.c:1457 builtin/checkout.c:1460
-#: builtin/checkout.c:1465 builtin/checkout.c:1470
+#: builtin/checkout.c:1447 builtin/checkout.c:1450 builtin/checkout.c:1453
+#: builtin/checkout.c:1458 builtin/checkout.c:1463
#, c-format
msgid "'%s' cannot be used with '%s'"
msgstr "опцията „%s“ е несъвместима с „%s“"
-#: builtin/checkout.c:1467
+#: builtin/checkout.c:1460
#, c-format
msgid "'%s' cannot take <start-point>"
msgstr "опцията „%s“ е несъвместима със задаването на НАЧАЛО"
-#: builtin/checkout.c:1475
+#: builtin/checkout.c:1468
#, c-format
msgid "Cannot switch branch to a non-commit '%s'"
msgstr ""
"За да преминете към клон, подайте указател, който сочи към подаване. „%s“ "
"не е такъв"
-#: builtin/checkout.c:1482
+#: builtin/checkout.c:1475
msgid "missing branch or commit argument"
msgstr "липсва аргумент — клон или подаване"
-#: builtin/checkout.c:1525
+#: builtin/checkout.c:1518
msgid "perform a 3-way merge with the new branch"
msgstr "извършване на тройно сливане с новия клон"
-#: builtin/checkout.c:1526 builtin/log.c:1810 parse-options.h:323
+#: builtin/checkout.c:1519 builtin/log.c:1810 parse-options.h:321
msgid "style"
msgstr "СТИЛ"
-#: builtin/checkout.c:1527
+#: builtin/checkout.c:1520
msgid "conflict style (merge or diff3)"
msgstr "действие при конфликт (сливане или тройна разлика)"
-#: builtin/checkout.c:1539 builtin/worktree.c:488
+#: builtin/checkout.c:1532 builtin/worktree.c:489
msgid "detach HEAD at named commit"
msgstr "отделяне на указателя „HEAD“ към указаното подаване"
-#: builtin/checkout.c:1540
+#: builtin/checkout.c:1533
msgid "set upstream info for new branch"
msgstr "задаване на кой клон бива следен при създаването на новия клон"
-#: builtin/checkout.c:1542
+#: builtin/checkout.c:1535
msgid "force checkout (throw away local modifications)"
msgstr "принудително изтегляне (вашите промени ще бъдат занулени)"
-#: builtin/checkout.c:1544
+#: builtin/checkout.c:1537
msgid "new-branch"
msgstr "НОВ_КЛОН"
-#: builtin/checkout.c:1544
+#: builtin/checkout.c:1537
msgid "new unparented branch"
msgstr "нов клон без родител"
-#: builtin/checkout.c:1546 builtin/merge.c:301
+#: builtin/checkout.c:1539 builtin/merge.c:302
msgid "update ignored files (default)"
msgstr "обновяване на игнорираните файлове (стандартно)"
-#: builtin/checkout.c:1549
+#: builtin/checkout.c:1542
msgid "do not check if another worktree is holding the given ref"
msgstr "без проверка дали друго работно дърво държи указателя"
-#: builtin/checkout.c:1562
+#: builtin/checkout.c:1555
msgid "checkout our version for unmerged files"
msgstr "изтегляне на вашата версия на неслетите файлове"
-#: builtin/checkout.c:1565
+#: builtin/checkout.c:1558
msgid "checkout their version for unmerged files"
msgstr "изтегляне на чуждата версия на неслетите файлове"
-#: builtin/checkout.c:1569
+#: builtin/checkout.c:1562
msgid "do not limit pathspecs to sparse entries only"
msgstr "без ограничаване на изброените пътища само до частично изтеглените"
-#: builtin/checkout.c:1624
+#: builtin/checkout.c:1620
#, c-format
msgid "-%c, -%c and --orphan are mutually exclusive"
msgstr "опциите „-%c“, „-%c“ и „--orphan“ са несъвместими една с друга"
-#: builtin/checkout.c:1628
+#: builtin/checkout.c:1624
msgid "-p and --overlay are mutually exclusive"
msgstr "опциите „-p“ и „--overlay“ са несъвместими"
-#: builtin/checkout.c:1665
+#: builtin/checkout.c:1661
msgid "--track needs a branch name"
msgstr "опцията „--track“ изисква име на клон"
-#: builtin/checkout.c:1670
+#: builtin/checkout.c:1666
#, c-format
msgid "missing branch name; try -%c"
msgstr "липсва име на клон, използвайте опцията „-%c“"
-#: builtin/checkout.c:1702
+#: builtin/checkout.c:1698
#, c-format
msgid "could not resolve %s"
msgstr "„%s“ не може да бъде открит"
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1714
msgid "invalid path specification"
msgstr "указан е неправилен път"
-#: builtin/checkout.c:1725
+#: builtin/checkout.c:1721
#, c-format
msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
msgstr "„%s“ не е подаване, затова от него не може да се създаде клон „%s“"
-#: builtin/checkout.c:1729
+#: builtin/checkout.c:1725
#, c-format
msgid "git checkout: --detach does not take a path argument '%s'"
msgstr "git checkout: опцията „--detach“ не приема аргумент-път „%s“"
-#: builtin/checkout.c:1738
+#: builtin/checkout.c:1734
msgid "--pathspec-from-file is incompatible with --detach"
msgstr "опциите „--pathspec-from-file“ и „--detach“ са несъвместими"
-#: builtin/checkout.c:1741 builtin/reset.c:325 builtin/stash.c:1630
+#: builtin/checkout.c:1737 builtin/reset.c:331 builtin/stash.c:1647
msgid "--pathspec-from-file is incompatible with --patch"
msgstr "опциите „--pathspec-from-file“ и „--patch“ са несъвместими"
-#: builtin/checkout.c:1754
+#: builtin/checkout.c:1750
msgid ""
"git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
"checking out of the index."
@@ -13007,74 +13328,75 @@
"git checkout: опциите „--ours“/„--theirs“, „--force“ и „--merge“\n"
"са несъвместими с изтегляне от индекса."
-#: builtin/checkout.c:1759
+#: builtin/checkout.c:1755
msgid "you must specify path(s) to restore"
msgstr "трябва да укажете поне един път за възстановяване"
-#: builtin/checkout.c:1785 builtin/checkout.c:1787 builtin/checkout.c:1836
-#: builtin/checkout.c:1838 builtin/clone.c:126 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2719 builtin/worktree.c:484
-#: builtin/worktree.c:486
+#: builtin/checkout.c:1781 builtin/checkout.c:1783 builtin/checkout.c:1832
+#: builtin/checkout.c:1834 builtin/clone.c:126 builtin/remote.c:170
+#: builtin/remote.c:172 builtin/submodule--helper.c:2958
+#: builtin/submodule--helper.c:3252 builtin/worktree.c:485
+#: builtin/worktree.c:487
msgid "branch"
msgstr "клон"
-#: builtin/checkout.c:1786
+#: builtin/checkout.c:1782
msgid "create and checkout a new branch"
msgstr "създаване и преминаване към нов клон"
-#: builtin/checkout.c:1788
+#: builtin/checkout.c:1784
msgid "create/reset and checkout a branch"
msgstr "създаване/зануляване на клон и преминаване към него"
-#: builtin/checkout.c:1789
+#: builtin/checkout.c:1785
msgid "create reflog for new branch"
msgstr "създаване на журнал на указателите за нов клон"
-#: builtin/checkout.c:1791
+#: builtin/checkout.c:1787
msgid "second guess 'git checkout <no-such-branch>' (default)"
msgstr ""
"опит за отгатване на име на клон след неуспешен опит с „git checkout "
"НЕСЪЩЕСТВУВАЩ_КЛОН“ (стандартно)"
-#: builtin/checkout.c:1792
+#: builtin/checkout.c:1788
msgid "use overlay mode (default)"
msgstr "използване на припокриващ режим (стандартно)"
-#: builtin/checkout.c:1837
+#: builtin/checkout.c:1833
msgid "create and switch to a new branch"
msgstr "създаване и преминаване към нов клон"
-#: builtin/checkout.c:1839
+#: builtin/checkout.c:1835
msgid "create/reset and switch to a branch"
msgstr "създаване/зануляване на клон и преминаване към него"
-#: builtin/checkout.c:1841
+#: builtin/checkout.c:1837
msgid "second guess 'git switch <no-such-branch>'"
msgstr ""
"опит за отгатване на име на клон след неуспешен опит с „git switch "
"НЕСЪЩЕСТВУВАЩ_КЛОН“"
-#: builtin/checkout.c:1843
+#: builtin/checkout.c:1839
msgid "throw away local modifications"
msgstr "зануляване на локалните промени"
-#: builtin/checkout.c:1877
+#: builtin/checkout.c:1873
msgid "which tree-ish to checkout from"
msgstr "към кой указател към дърво да се премине"
-#: builtin/checkout.c:1879
+#: builtin/checkout.c:1875
msgid "restore the index"
msgstr "възстановяване на индекса"
-#: builtin/checkout.c:1881
+#: builtin/checkout.c:1877
msgid "restore the working tree (default)"
msgstr "възстановяване на работното дърво (стандартно)"
-#: builtin/checkout.c:1883
+#: builtin/checkout.c:1879
msgid "ignore unmerged entries"
msgstr "пренебрегване на неслетите елементи"
-#: builtin/checkout.c:1884
+#: builtin/checkout.c:1880
msgid "use overlay mode"
msgstr "използване на припокриващ режим"
@@ -13213,8 +13535,8 @@
msgstr "изтриване на цели директории"
#: builtin/clean.c:906 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:923 builtin/log.c:184 builtin/log.c:186
-#: builtin/ls-files.c:650 builtin/name-rev.c:526 builtin/name-rev.c:528
+#: builtin/grep.c:937 builtin/log.c:184 builtin/log.c:186
+#: builtin/ls-files.c:648 builtin/name-rev.c:526 builtin/name-rev.c:528
#: builtin/show-ref.c:179
msgid "pattern"
msgstr "ШАБЛОН"
@@ -13305,19 +13627,20 @@
msgid "directory from which templates will be used"
msgstr "директория, която съдържа шаблоните, които да се ползват"
-#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1831
-#: builtin/submodule--helper.c:2336
+#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1870
+#: builtin/submodule--helper.c:2513 builtin/submodule--helper.c:3259
msgid "reference repository"
msgstr "еталонно хранилище"
-#: builtin/clone.c:123 builtin/submodule--helper.c:1833
-#: builtin/submodule--helper.c:2338
+#: builtin/clone.c:123 builtin/submodule--helper.c:1872
+#: builtin/submodule--helper.c:2515
msgid "use --reference only while cloning"
msgstr "опцията „--reference“ може да се използва само при клониране"
#: builtin/clone.c:124 builtin/column.c:27 builtin/init-db.c:550
-#: builtin/merge-file.c:46 builtin/pack-objects.c:3975 builtin/repack.c:495
-#: t/helper/test-simple-ipc.c:696 t/helper/test-simple-ipc.c:698
+#: builtin/merge-file.c:46 builtin/pack-objects.c:3944 builtin/repack.c:663
+#: builtin/submodule--helper.c:3261 t/helper/test-simple-ipc.c:595
+#: t/helper/test-simple-ipc.c:597
msgid "name"
msgstr "ИМЕ"
@@ -13333,8 +13656,8 @@
msgid "path to git-upload-pack on the remote"
msgstr "път към командата „git-upload-pack“ на отдалеченото хранилище"
-#: builtin/clone.c:130 builtin/fetch.c:180 builtin/grep.c:862
-#: builtin/pull.c:208
+#: builtin/clone.c:130 builtin/fetch.c:180 builtin/grep.c:876
+#: builtin/pull.c:212
msgid "depth"
msgstr "ДЪЛБОЧИНА"
@@ -13342,8 +13665,8 @@
msgid "create a shallow clone of that depth"
msgstr "плитко клониране до тази ДЪЛБОЧИНА"
-#: builtin/clone.c:132 builtin/fetch.c:182 builtin/pack-objects.c:3964
-#: builtin/pull.c:211
+#: builtin/clone.c:132 builtin/fetch.c:182 builtin/pack-objects.c:3933
+#: builtin/pull.c:215
msgid "time"
msgstr "ВРЕМЕ"
@@ -13352,16 +13675,16 @@
msgstr "плитко клониране до момент във времето"
#: builtin/clone.c:134 builtin/fetch.c:184 builtin/fetch.c:207
-#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1318
+#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1022
msgid "revision"
msgstr "ВЕРСИЯ"
-#: builtin/clone.c:135 builtin/fetch.c:185 builtin/pull.c:215
+#: builtin/clone.c:135 builtin/fetch.c:185 builtin/pull.c:219
msgid "deepen history of shallow clone, excluding rev"
msgstr "задълбочаване на историята на плитко хранилище до изключващ указател"
-#: builtin/clone.c:137 builtin/submodule--helper.c:1843
-#: builtin/submodule--helper.c:2352
+#: builtin/clone.c:137 builtin/submodule--helper.c:1882
+#: builtin/submodule--helper.c:2529
msgid "clone only one branch, HEAD or --branch"
msgstr ""
"клониране само на един клон — или сочения от отдалечения „HEAD“, или изрично "
@@ -13393,21 +13716,21 @@
msgstr "задаване на настройките на новото хранилище"
#: builtin/clone.c:147 builtin/fetch.c:202 builtin/ls-remote.c:77
-#: builtin/pull.c:230 builtin/push.c:575 builtin/send-pack.c:196
+#: builtin/pull.c:234 builtin/push.c:575 builtin/send-pack.c:200
msgid "server-specific"
msgstr "специфични за сървъра"
#: builtin/clone.c:147 builtin/fetch.c:202 builtin/ls-remote.c:77
-#: builtin/pull.c:231 builtin/push.c:575 builtin/send-pack.c:197
+#: builtin/pull.c:235 builtin/push.c:575 builtin/send-pack.c:201
msgid "option to transmit"
msgstr "опция за пренос"
-#: builtin/clone.c:148 builtin/fetch.c:203 builtin/pull.c:234
+#: builtin/clone.c:148 builtin/fetch.c:203 builtin/pull.c:238
#: builtin/push.c:576
msgid "use IPv4 addresses only"
msgstr "само адреси IPv4"
-#: builtin/clone.c:150 builtin/fetch.c:205 builtin/pull.c:237
+#: builtin/clone.c:150 builtin/fetch.c:205 builtin/pull.c:241
#: builtin/push.c:578
msgid "use IPv6 addresses only"
msgstr "само адреси IPv6"
@@ -13422,51 +13745,43 @@
"инициализиране на файла за частично изтегляне („.git/info/sparse-checkout“) "
"да съдържа само файловете в основната директория"
-#: builtin/clone.c:292
-msgid ""
-"No directory name could be guessed.\n"
-"Please specify a directory on the command line"
-msgstr ""
-"Името на директорията не може да бъде отгатнато.\n"
-"Задайте директорията изрично на командния ред"
-
-#: builtin/clone.c:345
+#: builtin/clone.c:231
#, c-format
msgid "info: Could not add alternate for '%s': %s\n"
msgstr ""
"ПРЕДУПРЕЖДЕНИЕ: не може да се добави алтернативен източник на „%s“: %s\n"
-#: builtin/clone.c:418
+#: builtin/clone.c:304
#, c-format
msgid "%s exists and is not a directory"
msgstr "„%s“ съществува и не е директория"
-#: builtin/clone.c:436
+#: builtin/clone.c:322
#, c-format
msgid "failed to start iterator over '%s'"
msgstr "неуспешно итериране по „%s“"
-#: builtin/clone.c:467
+#: builtin/clone.c:353
#, c-format
msgid "failed to create link '%s'"
msgstr "връзката „%s“ не може да бъде създадена"
-#: builtin/clone.c:471
+#: builtin/clone.c:357
#, c-format
msgid "failed to copy file to '%s'"
msgstr "файлът не може да бъде копиран като „%s“"
-#: builtin/clone.c:476
+#: builtin/clone.c:362
#, c-format
msgid "failed to iterate over '%s'"
msgstr "неуспешно итериране по „%s“"
-#: builtin/clone.c:503
+#: builtin/clone.c:389
#, c-format
msgid "done.\n"
msgstr "действието завърши.\n"
-#: builtin/clone.c:517
+#: builtin/clone.c:403
msgid ""
"Clone succeeded, but checkout failed.\n"
"You can inspect what was checked out with 'git status'\n"
@@ -13479,108 +13794,108 @@
"\n"
" git restore --source=HEAD :/\n"
-#: builtin/clone.c:594
+#: builtin/clone.c:480
#, c-format
msgid "Could not find remote branch %s to clone."
msgstr ""
"Клонът „%s“ от отдалеченото хранилище, което клонирате,\n"
"и който следва да бъде изтеглен, не съществува."
-#: builtin/clone.c:713
+#: builtin/clone.c:597
#, c-format
msgid "unable to update %s"
msgstr "обектът „%s“ не може да бъде обновен"
-#: builtin/clone.c:761
+#: builtin/clone.c:645
msgid "failed to initialize sparse-checkout"
msgstr "частичното изтегляне не може да се инициализира"
-#: builtin/clone.c:784
+#: builtin/clone.c:668
msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
msgstr ""
"указателят „HEAD“ от отдалеченото хранилище сочи към нещо,\n"
"което не съществува. Не може да се изтегли определен клон.\n"
-#: builtin/clone.c:816
+#: builtin/clone.c:701
msgid "unable to checkout working tree"
msgstr "работното дърво не може да бъде подготвено"
-#: builtin/clone.c:894
+#: builtin/clone.c:779
msgid "unable to write parameters to config file"
msgstr "настройките не може да бъдат записани в конфигурационния файл"
-#: builtin/clone.c:957
+#: builtin/clone.c:842
msgid "cannot repack to clean up"
msgstr "не може да се извърши пакетиране за изчистване на файловете"
-#: builtin/clone.c:959
+#: builtin/clone.c:844
msgid "cannot unlink temporary alternates file"
msgstr "временният файл за алтернативни обекти не може да бъде изтрит"
-#: builtin/clone.c:1001 builtin/receive-pack.c:2490
+#: builtin/clone.c:886 builtin/receive-pack.c:2493
msgid "Too many arguments."
msgstr "Прекалено много аргументи."
-#: builtin/clone.c:1005
+#: builtin/clone.c:890
msgid "You must specify a repository to clone."
msgstr "Трябва да укажете кое хранилище искате да клонирате."
-#: builtin/clone.c:1018
+#: builtin/clone.c:903
#, c-format
msgid "--bare and --origin %s options are incompatible."
msgstr "опциите „--bare“ и „--origin %s“ са несъвместими."
-#: builtin/clone.c:1021
+#: builtin/clone.c:906
msgid "--bare and --separate-git-dir are incompatible."
msgstr "опциите „--bare“ и „--separate-git-dir“ са несъвместими."
-#: builtin/clone.c:1035
+#: builtin/clone.c:920
#, c-format
msgid "repository '%s' does not exist"
msgstr "не съществува хранилище „%s“"
-#: builtin/clone.c:1039 builtin/fetch.c:2014
+#: builtin/clone.c:924 builtin/fetch.c:2029
#, c-format
msgid "depth %s is not a positive number"
msgstr "дълбочината трябва да е положително цяло число, а не „%s“"
-#: builtin/clone.c:1049
+#: builtin/clone.c:934
#, c-format
msgid "destination path '%s' already exists and is not an empty directory."
msgstr "целевият път „%s“ съществува и не е празна директория."
-#: builtin/clone.c:1055
+#: builtin/clone.c:940
#, c-format
msgid "repository path '%s' already exists and is not an empty directory."
msgstr "пътят в хранилището „%s“ съществува и не е празна директория."
-#: builtin/clone.c:1069
+#: builtin/clone.c:954
#, c-format
msgid "working tree '%s' already exists."
msgstr "в „%s“ вече съществува работно дърво."
-#: builtin/clone.c:1084 builtin/clone.c:1105 builtin/difftool.c:272
-#: builtin/log.c:1997 builtin/worktree.c:280 builtin/worktree.c:312
+#: builtin/clone.c:969 builtin/clone.c:990 builtin/difftool.c:262
+#: builtin/log.c:1997 builtin/worktree.c:281 builtin/worktree.c:313
#, c-format
msgid "could not create leading directories of '%s'"
msgstr "родителските директории на „%s“ не може да бъдат създадени"
-#: builtin/clone.c:1089
+#: builtin/clone.c:974
#, c-format
msgid "could not create work tree dir '%s'"
msgstr "работното дърво в „%s“ не може да бъде създадено."
-#: builtin/clone.c:1109
+#: builtin/clone.c:994
#, c-format
msgid "Cloning into bare repository '%s'...\n"
msgstr "Клониране и създаване на голо хранилище в „%s“…\n"
-#: builtin/clone.c:1111
+#: builtin/clone.c:996
#, c-format
msgid "Cloning into '%s'...\n"
msgstr "Клониране и създаване на хранилище в „%s“…\n"
-#: builtin/clone.c:1135
+#: builtin/clone.c:1025
msgid ""
"clone --recursive is not compatible with both --reference and --reference-if-"
"able"
@@ -13588,53 +13903,53 @@
"опцията „--recursive“ е несъвместима с опциите „--reference“ и „--reference-"
"if-able“"
-#: builtin/clone.c:1188 builtin/remote.c:200 builtin/remote.c:705
+#: builtin/clone.c:1080 builtin/remote.c:200 builtin/remote.c:710
#, c-format
msgid "'%s' is not a valid remote name"
msgstr "„%s“ е неправилно име за отдалечено хранилище"
-#: builtin/clone.c:1229
+#: builtin/clone.c:1121
msgid "--depth is ignored in local clones; use file:// instead."
msgstr ""
"При локално клониране опцията „--depth“ се прескача. Ползвайте схемата "
"„file://“."
-#: builtin/clone.c:1231
+#: builtin/clone.c:1123
msgid "--shallow-since is ignored in local clones; use file:// instead."
msgstr ""
"При локално клониране опцията „--shallow-since“ се прескача. Ползвайте "
"схемата „file://“."
-#: builtin/clone.c:1233
+#: builtin/clone.c:1125
msgid "--shallow-exclude is ignored in local clones; use file:// instead."
msgstr ""
"При локално клониране опцията „--shallow-exclude“ се прескача. Ползвайте "
"схемата „file://“."
-#: builtin/clone.c:1235
+#: builtin/clone.c:1127
msgid "--filter is ignored in local clones; use file:// instead."
msgstr ""
"При локално клониране опцията „--filter“ се прескача. Ползвайте схемата "
"„file://“."
-#: builtin/clone.c:1240
+#: builtin/clone.c:1132
msgid "source repository is shallow, ignoring --local"
msgstr "клонираното хранилище е плитко, затова опцията „--local“ се прескача"
-#: builtin/clone.c:1245
+#: builtin/clone.c:1137
msgid "--local is ignored"
msgstr "опцията „--local“ се прескача"
-#: builtin/clone.c:1324 builtin/clone.c:1383
+#: builtin/clone.c:1216 builtin/clone.c:1276
msgid "remote transport reported error"
msgstr "отдалеченият транспорт върна грешка"
-#: builtin/clone.c:1336 builtin/clone.c:1344
+#: builtin/clone.c:1228 builtin/clone.c:1239
#, c-format
msgid "Remote branch %s not found in upstream %s"
msgstr "Отдалеченият клон „%s“ липсва в клонираното хранилище „%s“"
-#: builtin/clone.c:1347
+#: builtin/clone.c:1242
msgid "You appear to have cloned an empty repository."
msgstr "Изглежда клонирахте празно хранилище."
@@ -13670,14 +13985,14 @@
msgid "--command must be the first argument"
msgstr "опцията „--command“ трябва да е първият аргумент"
-#: builtin/commit-graph.c:13 builtin/commit-graph.c:22
+#: builtin/commit-graph.c:13
msgid ""
"git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
msgstr ""
"git commit-graph verify [--object-dir ДИР_ОБЕКТИ] [--shallow] [--"
"[no-]progress]"
-#: builtin/commit-graph.c:14 builtin/commit-graph.c:27
+#: builtin/commit-graph.c:16
msgid ""
"git commit-graph write [--object-dir <objdir>] [--append] [--"
"split[=<strategy>]] [--reachable|--stdin-packs|--stdin-commits] [--changed-"
@@ -13687,99 +14002,97 @@
"split[=СТРАТЕГИЯ]] [--reachable|--stdin-packs|--stdin-commits] [--changed-"
"paths] [--[no-]max-new-filters <n>] [--[no-]progress] ОПЦИИ_ЗА_РАЗДЕЛЯНЕ"
-#: builtin/commit-graph.c:64
-#, c-format
-msgid "could not find object directory matching %s"
-msgstr "директорията с обекти, която отговаря на „%s“, не може да бъде открита"
-
-#: builtin/commit-graph.c:80 builtin/commit-graph.c:210
-#: builtin/commit-graph.c:316 builtin/fetch.c:191 builtin/log.c:1779
+#: builtin/commit-graph.c:51 builtin/fetch.c:191 builtin/log.c:1779
msgid "dir"
msgstr "директория"
-#: builtin/commit-graph.c:81 builtin/commit-graph.c:211
-#: builtin/commit-graph.c:317
+#: builtin/commit-graph.c:52
msgid "the object directory to store the graph"
msgstr "ДИРекторията_с_ОБЕКТИ за запазване на гра̀фа"
-#: builtin/commit-graph.c:83
+#: builtin/commit-graph.c:73
msgid "if the commit-graph is split, only verify the tip file"
msgstr ""
"ако гра̀фа с подаванията е раздробен, да се проверява само файлът на върха"
-#: builtin/commit-graph.c:106
+#: builtin/commit-graph.c:100
#, c-format
msgid "Could not open commit-graph '%s'"
msgstr "Графът с подаванията не може да се отвори: „%s“"
-#: builtin/commit-graph.c:142
+#: builtin/commit-graph.c:137
#, c-format
msgid "unrecognized --split argument, %s"
msgstr "непознат аргумент към „--split“: %s"
-#: builtin/commit-graph.c:155
+#: builtin/commit-graph.c:150
#, c-format
msgid "unexpected non-hex object ID: %s"
msgstr "неочакван, нешестнайсетичен идентификатор на обект: %s"
-#: builtin/commit-graph.c:160
+#: builtin/commit-graph.c:155
#, c-format
msgid "invalid object: %s"
msgstr "неправилен обект: „%s“"
-#: builtin/commit-graph.c:213
+#: builtin/commit-graph.c:205
msgid "start walk at all refs"
msgstr "обхождането да започне от всички указатели"
-#: builtin/commit-graph.c:215
+#: builtin/commit-graph.c:207
msgid "scan pack-indexes listed by stdin for commits"
msgstr ""
"проверка на подаванията за индексите на пакетите изброени на командния ред"
-#: builtin/commit-graph.c:217
+#: builtin/commit-graph.c:209
msgid "start walk at commits listed by stdin"
msgstr "започване на обхождането при подаванията подадени на стандартния вход"
-#: builtin/commit-graph.c:219
+#: builtin/commit-graph.c:211
msgid "include all commits already in the commit-graph file"
msgstr ""
"включване на всички подавания, които вече са във файла с гра̀фа на подаванията"
-#: builtin/commit-graph.c:221
+#: builtin/commit-graph.c:213
msgid "enable computation for changed paths"
msgstr "включване на изчисленията за променените пътища"
-#: builtin/commit-graph.c:224
+#: builtin/commit-graph.c:215
msgid "allow writing an incremental commit-graph file"
msgstr "позволяване на запис на нарастващ файл с гра̀фа на подаванията"
-#: builtin/commit-graph.c:228
+#: builtin/commit-graph.c:219
msgid "maximum number of commits in a non-base split commit-graph"
msgstr "максимален брой подавания в небазово ниво на раздробен граф"
-#: builtin/commit-graph.c:230
+#: builtin/commit-graph.c:221
msgid "maximum ratio between two levels of a split commit-graph"
msgstr ""
"максимално отношение на броя подавания в две последователни нива в раздробен "
"граф"
-#: builtin/commit-graph.c:232
+#: builtin/commit-graph.c:223
msgid "only expire files older than a given date-time"
msgstr "обявяване за остарели само на файловете по-стари от това ВРЕМЕ"
-#: builtin/commit-graph.c:234
+#: builtin/commit-graph.c:225
msgid "maximum number of changed-path Bloom filters to compute"
msgstr "максимален брой промени в пътищата следени от филтрите на Блум"
-#: builtin/commit-graph.c:255
+#: builtin/commit-graph.c:251
msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs"
msgstr ""
"опциите „--reachable“, „--stdin-commits“ и „--stdin-packs“ са несъвместими"
-#: builtin/commit-graph.c:287
+#: builtin/commit-graph.c:282
msgid "Collecting commits from input"
msgstr "Получаване на подаванията от входа"
+#: builtin/commit-graph.c:328 builtin/multi-pack-index.c:255
+#, c-format
+msgid "unrecognized subcommand: %s"
+msgstr "непозната подкоманда: %s"
+
#: builtin/commit-tree.c:18
msgid ""
"git commit-tree [(-p <parent>)...] [-S[<keyid>]] [(-m <message>)...] [(-F "
@@ -13793,70 +14106,65 @@
msgid "duplicate parent %s ignored"
msgstr "прескачане на повтарящ се родител: „%s“"
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:562
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:562
#, c-format
msgid "not a valid object name %s"
msgstr "неправилно име на обект: „%s“"
-#: builtin/commit-tree.c:93
-#, c-format
-msgid "git commit-tree: failed to open '%s'"
-msgstr "git commit-tree: „%s“ не може да се отвори"
-
-#: builtin/commit-tree.c:96
+#: builtin/commit-tree.c:94
#, c-format
msgid "git commit-tree: failed to read '%s'"
msgstr "git commit-tree: „%s“ не може да се прочете"
-#: builtin/commit-tree.c:98
+#: builtin/commit-tree.c:96
#, c-format
msgid "git commit-tree: failed to close '%s'"
msgstr "git commit-tree: „%s“ не може да се затвори"
-#: builtin/commit-tree.c:111
+#: builtin/commit-tree.c:109
msgid "parent"
msgstr "родител"
-#: builtin/commit-tree.c:112
+#: builtin/commit-tree.c:110
msgid "id of a parent commit object"
msgstr "ИДЕНТИФИКАТОР на обекта за подаването-родител"
-#: builtin/commit-tree.c:114 builtin/commit.c:1624 builtin/merge.c:282
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1601
-#: builtin/tag.c:456
+#: builtin/commit-tree.c:112 builtin/commit.c:1626 builtin/merge.c:283
+#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1618
+#: builtin/tag.c:454
msgid "message"
msgstr "СЪОБЩЕНИЕ"
-#: builtin/commit-tree.c:115 builtin/commit.c:1624
+#: builtin/commit-tree.c:113 builtin/commit.c:1626
msgid "commit message"
msgstr "СЪОБЩЕНИЕ при подаване"
-#: builtin/commit-tree.c:118
+#: builtin/commit-tree.c:116
msgid "read commit log message from file"
msgstr "изчитане на съобщението за подаване от ФАЙЛ"
-#: builtin/commit-tree.c:121 builtin/commit.c:1641 builtin/merge.c:299
-#: builtin/pull.c:176 builtin/revert.c:118
+#: builtin/commit-tree.c:119 builtin/commit.c:1643 builtin/merge.c:300
+#: builtin/pull.c:180 builtin/revert.c:118
msgid "GPG sign commit"
msgstr "подписване на подаването с GPG"
-#: builtin/commit-tree.c:133
+#: builtin/commit-tree.c:131
msgid "must give exactly one tree"
msgstr "трябва да е точно едно дърво"
-#: builtin/commit-tree.c:140
+#: builtin/commit-tree.c:138
msgid "git commit-tree: failed to read"
msgstr "git commit-tree: не може да се прочете"
-#: builtin/commit.c:41
+#: builtin/commit.c:42
msgid "git commit [<options>] [--] <pathspec>..."
msgstr "git commit [ОПЦИЯ…] [--] ПЪТ…"
-#: builtin/commit.c:46
+#: builtin/commit.c:47
msgid "git status [<options>] [--] <pathspec>..."
msgstr "git status [ОПЦИЯ…] [--] ПЪТ…"
-#: builtin/commit.c:51
+#: builtin/commit.c:52
msgid ""
"You asked to amend the most recent commit, but doing so would make\n"
"it empty. You can repeat your command with --allow-empty, or you can\n"
@@ -13868,7 +14176,7 @@
"с опцията „--allow-empty“, или да го изтриете от историята с командата:\n"
"„git reset HEAD^“.\n"
-#: builtin/commit.c:56
+#: builtin/commit.c:57
msgid ""
"The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
"If you wish to commit it anyway, use:\n"
@@ -13883,21 +14191,21 @@
" git commit --allow-empty\n"
"\n"
-#: builtin/commit.c:63
+#: builtin/commit.c:64
msgid "Otherwise, please use 'git rebase --skip'\n"
msgstr ""
"В противен случай използвайте командата:\n"
"\n"
" git rebase --skip\n"
-#: builtin/commit.c:66
+#: builtin/commit.c:67
msgid "Otherwise, please use 'git cherry-pick --skip'\n"
msgstr ""
"В противен случай използвайте командата:\n"
"\n"
" git cherry-pick --skip\n"
-#: builtin/commit.c:69
+#: builtin/commit.c:70
msgid ""
"and then use:\n"
"\n"
@@ -13919,73 +14227,73 @@
" git cherry-pick --skip\n"
"\n"
-#: builtin/commit.c:324
+#: builtin/commit.c:325
msgid "failed to unpack HEAD tree object"
msgstr "върховото дърво (HEAD tree object) не може да бъде извадено от пакет"
-#: builtin/commit.c:360
+#: builtin/commit.c:361
msgid "--pathspec-from-file with -a does not make sense"
msgstr "опциите „-a“ и „--pathspec-from-file“ са несъвместими"
-#: builtin/commit.c:374
+#: builtin/commit.c:375
msgid "No paths with --include/--only does not make sense."
msgstr "опциите „--include“ и „--only“ изискват аргументи."
-#: builtin/commit.c:386
+#: builtin/commit.c:387
msgid "unable to create temporary index"
msgstr "временният индекс не може да бъде създаден"
-#: builtin/commit.c:395
+#: builtin/commit.c:396
msgid "interactive add failed"
msgstr "неуспешно интерактивно добавяне"
-#: builtin/commit.c:410
+#: builtin/commit.c:411
msgid "unable to update temporary index"
msgstr "временният индекс не може да бъде обновен"
-#: builtin/commit.c:412
+#: builtin/commit.c:413
msgid "Failed to update main cache tree"
msgstr "Дървото на основния кеш не може да бъде обновено"
-#: builtin/commit.c:437 builtin/commit.c:460 builtin/commit.c:508
+#: builtin/commit.c:438 builtin/commit.c:461 builtin/commit.c:509
msgid "unable to write new_index file"
-msgstr "новият индекс не може да бъде записан"
+msgstr "новият индекс (new_index) не може да бъде записан"
-#: builtin/commit.c:489
+#: builtin/commit.c:490
msgid "cannot do a partial commit during a merge."
msgstr "по време на сливане не може да се извърши частично подаване."
-#: builtin/commit.c:491
+#: builtin/commit.c:492
msgid "cannot do a partial commit during a cherry-pick."
msgstr "по време на отбиране не може да се извърши частично подаване."
-#: builtin/commit.c:493
+#: builtin/commit.c:494
msgid "cannot do a partial commit during a rebase."
msgstr "по време на пребазиране не може да се извърши частично подаване."
-#: builtin/commit.c:501
+#: builtin/commit.c:502
msgid "cannot read the index"
msgstr "индексът не може да бъде прочетен"
-#: builtin/commit.c:520
+#: builtin/commit.c:521
msgid "unable to write temporary index file"
msgstr "временният индекс не може да бъде записан"
-#: builtin/commit.c:618
+#: builtin/commit.c:619
#, c-format
msgid "commit '%s' lacks author header"
msgstr "заглавната част за автор в подаването „%s“ липсва"
-#: builtin/commit.c:620
+#: builtin/commit.c:621
#, c-format
msgid "commit '%s' has malformed author line"
msgstr "заглавната част за автор в подаването „%s“ е неправилна"
-#: builtin/commit.c:639
+#: builtin/commit.c:640
msgid "malformed --author parameter"
msgstr "неправилен параметър към опцията „--author“"
-#: builtin/commit.c:692
+#: builtin/commit.c:693
msgid ""
"unable to select a comment character that is not used\n"
"in the current commit message"
@@ -13993,43 +14301,43 @@
"не може да се избере знак за коментар — в текущото съобщение за подаване са "
"използвани всички подобни знаци"
-#: builtin/commit.c:746 builtin/commit.c:780 builtin/commit.c:1165
+#: builtin/commit.c:747 builtin/commit.c:781 builtin/commit.c:1166
#, c-format
msgid "could not lookup commit %s"
msgstr "следното подаване не може да бъде открито: %s"
-#: builtin/commit.c:758 builtin/shortlog.c:413
+#: builtin/commit.c:759 builtin/shortlog.c:416
#, c-format
msgid "(reading log message from standard input)\n"
msgstr "(изчитане на съобщението за подаване от стандартния вход)\n"
-#: builtin/commit.c:760
+#: builtin/commit.c:761
msgid "could not read log from standard input"
msgstr "съобщението за подаване не бе прочетено стандартния вход"
-#: builtin/commit.c:764
+#: builtin/commit.c:765
#, c-format
msgid "could not read log file '%s'"
msgstr "файлът със съобщението за подаване „%s“ не може да бъде прочетен"
-#: builtin/commit.c:801
+#: builtin/commit.c:802
#, c-format
msgid "cannot combine -m with --fixup:%s"
msgstr "опциите „-m“ и „--fixup“ са несъвместими:%s"
-#: builtin/commit.c:813 builtin/commit.c:829
+#: builtin/commit.c:814 builtin/commit.c:830
msgid "could not read SQUASH_MSG"
msgstr "съобщението за вкарване SQUASH_MSG не може да бъде прочетено"
-#: builtin/commit.c:820
+#: builtin/commit.c:821
msgid "could not read MERGE_MSG"
msgstr "съобщението за сливане MERGE_MSG не може да бъде прочетено"
-#: builtin/commit.c:880
+#: builtin/commit.c:881
msgid "could not write commit template"
msgstr "шаблонът за подаване не може да бъде запазен"
-#: builtin/commit.c:893
+#: builtin/commit.c:894
#, c-format
msgid ""
"Please enter the commit message for your changes. Lines starting\n"
@@ -14038,7 +14346,7 @@
"Въведете съобщението за подаване на промените. Редовете, които започват\n"
"с „%c“, ще бъдат пропуснати.\n"
-#: builtin/commit.c:895
+#: builtin/commit.c:896
#, c-format
msgid ""
"Please enter the commit message for your changes. Lines starting\n"
@@ -14047,7 +14355,7 @@
"Въведете съобщението за подаване на промените. Редовете, които започват\n"
"с „%c“, ще бъдат пропуснати, а празно съобщение преустановява подаването.\n"
-#: builtin/commit.c:899
+#: builtin/commit.c:900
#, c-format
msgid ""
"Please enter the commit message for your changes. Lines starting\n"
@@ -14056,7 +14364,7 @@
"Въведете съобщението за подаване на промените. Редовете, които започват\n"
"с „%c“, също ще бъдат включени — може да ги изтриете вие.\n"
-#: builtin/commit.c:903
+#: builtin/commit.c:904
#, c-format
msgid ""
"Please enter the commit message for your changes. Lines starting\n"
@@ -14067,7 +14375,7 @@
"с „%c“, също ще бъдат включени — може да ги изтриете вие. Празно \n"
"съобщение преустановява подаването.\n"
-#: builtin/commit.c:915
+#: builtin/commit.c:916
msgid ""
"\n"
"It looks like you may be committing a merge.\n"
@@ -14082,7 +14390,7 @@
" git update-ref -d MERGE_HEAD\n"
"и опитайте отново.\n"
-#: builtin/commit.c:920
+#: builtin/commit.c:921
msgid ""
"\n"
"It looks like you may be committing a cherry-pick.\n"
@@ -14097,78 +14405,78 @@
" git update-ref -d CHERRY_PICK_HEAD\n"
"и опитайте отново.\n"
-#: builtin/commit.c:947
+#: builtin/commit.c:948
#, c-format
msgid "%sAuthor: %.*s <%.*s>"
msgstr "%sАвтор: %.*s <%.*s>"
-#: builtin/commit.c:955
+#: builtin/commit.c:956
#, c-format
msgid "%sDate: %s"
msgstr "%sДата: %s"
-#: builtin/commit.c:962
+#: builtin/commit.c:963
#, c-format
msgid "%sCommitter: %.*s <%.*s>"
msgstr "%sПодаващ: %.*s <%.*s>"
-#: builtin/commit.c:980
+#: builtin/commit.c:981
msgid "Cannot read index"
msgstr "Индексът не може да бъде прочетен"
-#: builtin/commit.c:1025
+#: builtin/commit.c:1026
msgid "unable to pass trailers to --trailers"
msgstr "епилогът не може да се подаде на „--trailers“"
-#: builtin/commit.c:1065
+#: builtin/commit.c:1066
msgid "Error building trees"
msgstr "Грешка при изграждане на дърветата"
-#: builtin/commit.c:1079 builtin/tag.c:319
+#: builtin/commit.c:1080 builtin/tag.c:317
#, c-format
msgid "Please supply the message using either -m or -F option.\n"
msgstr "Подайте съобщението с някоя от опциите „-m“ или „-F“.\n"
-#: builtin/commit.c:1123
+#: builtin/commit.c:1124
#, c-format
msgid "--author '%s' is not 'Name <email>' and matches no existing author"
msgstr ""
"опцията „--author '%s'“ не отговаря на форма̀та „Име <е-поща>“ и не съвпада с "
"никой автор"
-#: builtin/commit.c:1137
+#: builtin/commit.c:1138
#, c-format
msgid "Invalid ignored mode '%s'"
msgstr "Неправилен режим за игнорираните файлове: „%s“"
-#: builtin/commit.c:1155 builtin/commit.c:1448
+#: builtin/commit.c:1156 builtin/commit.c:1450
#, c-format
msgid "Invalid untracked files mode '%s'"
msgstr "Неправилен режим за неследените файлове: „%s“"
-#: builtin/commit.c:1195
+#: builtin/commit.c:1196
msgid "--long and -z are incompatible"
msgstr "опциите „--long“ и „-z“ са несъвместими."
-#: builtin/commit.c:1226
+#: builtin/commit.c:1227
msgid "You are in the middle of a merge -- cannot reword."
msgstr ""
"В момента се извършва сливане, не може да промените съобщение при подаване."
-#: builtin/commit.c:1228
+#: builtin/commit.c:1229
msgid "You are in the middle of a cherry-pick -- cannot reword."
msgstr ""
"В момента се извършва отбиране на подаване, не може да промените съобщение "
"при подаване."
-#: builtin/commit.c:1231
+#: builtin/commit.c:1232
#, c-format
msgid "cannot combine reword option of --fixup with path '%s'"
msgstr ""
"опцията за промяна на съобщението на „--fixup“ и указването на път „%s“ са "
"несъвместими"
-#: builtin/commit.c:1233
+#: builtin/commit.c:1234
msgid ""
"reword option of --fixup is mutually exclusive with --patch/--interactive/--"
"all/--include/--only"
@@ -14176,107 +14484,107 @@
"опцията за промяна на съобщението на „--fixup“ и „--patch“/„--interactive“/"
"„--all“/„--include“/„--only“ са несъвместими"
-#: builtin/commit.c:1252
+#: builtin/commit.c:1253
msgid "Using both --reset-author and --author does not make sense"
msgstr "опциите „--reset-author“ и „--author“ са несъвместими."
-#: builtin/commit.c:1261
+#: builtin/commit.c:1260
msgid "You have nothing to amend."
msgstr "Няма какво да бъде поправено."
-#: builtin/commit.c:1264
+#: builtin/commit.c:1263
msgid "You are in the middle of a merge -- cannot amend."
msgstr "В момента се извършва сливане, не може да поправяте."
-#: builtin/commit.c:1266
+#: builtin/commit.c:1265
msgid "You are in the middle of a cherry-pick -- cannot amend."
msgstr "В момента се извършва отбиране на подаване, не може да поправяте."
-#: builtin/commit.c:1268
+#: builtin/commit.c:1267
msgid "You are in the middle of a rebase -- cannot amend."
msgstr "В момента се извършва пребазиране, не може да поправяте."
-#: builtin/commit.c:1271
+#: builtin/commit.c:1270
msgid "Options --squash and --fixup cannot be used together"
msgstr "опциите „--squash“ и „--fixup“ са несъвместими."
-#: builtin/commit.c:1281
+#: builtin/commit.c:1280
msgid "Only one of -c/-C/-F/--fixup can be used."
msgstr "опциите „-c“, „-C“, „-F“ и „--fixup““ са несъвместими."
-#: builtin/commit.c:1283
+#: builtin/commit.c:1282
msgid "Option -m cannot be combined with -c/-C/-F."
msgstr "опцията „-m“ е несъвместима с „-c“, „-C“ и „-F“."
-#: builtin/commit.c:1292
+#: builtin/commit.c:1291
msgid "--reset-author can be used only with -C, -c or --amend."
msgstr ""
"опцията „--reset-author“ може да се използва само заедно с „-C“, „-c“ или\n"
"„--amend“."
-#: builtin/commit.c:1310
+#: builtin/commit.c:1309
msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
msgstr ""
"опциите „--include“, „--only“, „--all“, „--interactive“ и „--patch“ са\n"
"несъвместими."
-#: builtin/commit.c:1338
+#: builtin/commit.c:1337
#, c-format
msgid "unknown option: --fixup=%s:%s"
msgstr "непозната опция: --fixup=%s:%s"
-#: builtin/commit.c:1352
+#: builtin/commit.c:1354
#, c-format
msgid "paths '%s ...' with -a does not make sense"
msgstr "опцията „-a“ е несъвместима със задаването на пътища: „%s…“"
-#: builtin/commit.c:1483 builtin/commit.c:1652
+#: builtin/commit.c:1485 builtin/commit.c:1654
msgid "show status concisely"
msgstr "кратка информация за състоянието"
-#: builtin/commit.c:1485 builtin/commit.c:1654
+#: builtin/commit.c:1487 builtin/commit.c:1656
msgid "show branch information"
msgstr "информация за клоните"
-#: builtin/commit.c:1487
+#: builtin/commit.c:1489
msgid "show stash information"
msgstr "информация за скатаното"
-#: builtin/commit.c:1489 builtin/commit.c:1656
+#: builtin/commit.c:1491 builtin/commit.c:1658
msgid "compute full ahead/behind values"
msgstr "изчисляване на точните стойности напред/назад"
-#: builtin/commit.c:1491
+#: builtin/commit.c:1493
msgid "version"
msgstr "версия"
-#: builtin/commit.c:1491 builtin/commit.c:1658 builtin/push.c:551
-#: builtin/worktree.c:690
+#: builtin/commit.c:1493 builtin/commit.c:1660 builtin/push.c:551
+#: builtin/worktree.c:691
msgid "machine-readable output"
msgstr "формат на изхода за четене от програма"
-#: builtin/commit.c:1494 builtin/commit.c:1660
+#: builtin/commit.c:1496 builtin/commit.c:1662
msgid "show status in long format (default)"
msgstr "подробна информация за състоянието (стандартно)"
-#: builtin/commit.c:1497 builtin/commit.c:1663
+#: builtin/commit.c:1499 builtin/commit.c:1665
msgid "terminate entries with NUL"
msgstr "разделяне на елементите с нулевия знак „NUL“"
-#: builtin/commit.c:1499 builtin/commit.c:1503 builtin/commit.c:1666
-#: builtin/fast-export.c:1198 builtin/fast-export.c:1201
-#: builtin/fast-export.c:1204 builtin/rebase.c:1407 parse-options.h:337
+#: builtin/commit.c:1501 builtin/commit.c:1505 builtin/commit.c:1668
+#: builtin/fast-export.c:1199 builtin/fast-export.c:1202
+#: builtin/fast-export.c:1205 builtin/rebase.c:1111 parse-options.h:335
msgid "mode"
msgstr "РЕЖИМ"
-#: builtin/commit.c:1500 builtin/commit.c:1666
+#: builtin/commit.c:1502 builtin/commit.c:1668
msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
msgstr ""
"извеждане на неследените файлове. Възможните РЕЖИМи са „all“ (подробна "
"информация), „normal“ (кратка информация), „no“ (без неследените файлове). "
"Стандартният РЕЖИМ е: „all“."
-#: builtin/commit.c:1504
+#: builtin/commit.c:1506
msgid ""
"show ignored files, optional modes: traditional, matching, no. (Default: "
"traditional)"
@@ -14285,11 +14593,11 @@
"„traditional“ (традиционен), „matching“ (напасващи), „no“ (без игнорираните "
"файлове). Стандартният РЕЖИМ е: „traditional“."
-#: builtin/commit.c:1506 parse-options.h:193
+#: builtin/commit.c:1508 parse-options.h:192
msgid "when"
msgstr "КОГА"
-#: builtin/commit.c:1507
+#: builtin/commit.c:1509
msgid ""
"ignore changes to submodules, optional when: all, dirty, untracked. "
"(Default: all)"
@@ -14298,197 +14606,197 @@
"една от „all“ (всички), „dirty“ (тези с неподадени промени), "
"„untracked“ (неследени)"
-#: builtin/commit.c:1509
+#: builtin/commit.c:1511
msgid "list untracked files in columns"
msgstr "извеждане на неследените файлове в колони"
-#: builtin/commit.c:1510
+#: builtin/commit.c:1512
msgid "do not detect renames"
msgstr "без засичане на преименуванията"
-#: builtin/commit.c:1512
+#: builtin/commit.c:1514
msgid "detect renames, optionally set similarity index"
msgstr "засичане на преименуванията, може да се зададе коефициент на прилика"
-#: builtin/commit.c:1535
+#: builtin/commit.c:1537
msgid "Unsupported combination of ignored and untracked-files arguments"
msgstr "Неподдържана комбинация от аргументи за игнорирани и неследени файлове"
-#: builtin/commit.c:1617
+#: builtin/commit.c:1619
msgid "suppress summary after successful commit"
msgstr "без информация след успешно подаване"
-#: builtin/commit.c:1618
+#: builtin/commit.c:1620
msgid "show diff in commit message template"
msgstr "добавяне на разликата към шаблона за съобщението при подаване"
-#: builtin/commit.c:1620
+#: builtin/commit.c:1622
msgid "Commit message options"
msgstr "Опции за съобщението при подаване"
-#: builtin/commit.c:1621 builtin/merge.c:286 builtin/tag.c:458
+#: builtin/commit.c:1623 builtin/merge.c:287 builtin/tag.c:456
msgid "read message from file"
msgstr "взимане на съобщението от ФАЙЛ"
-#: builtin/commit.c:1622
+#: builtin/commit.c:1624
msgid "author"
msgstr "АВТОР"
-#: builtin/commit.c:1622
+#: builtin/commit.c:1624
msgid "override author for commit"
msgstr "задаване на АВТОР за подаването"
-#: builtin/commit.c:1623 builtin/gc.c:550
+#: builtin/commit.c:1625 builtin/gc.c:550
msgid "date"
msgstr "ДАТА"
-#: builtin/commit.c:1623
+#: builtin/commit.c:1625
msgid "override date for commit"
msgstr "задаване на ДАТА за подаването"
-#: builtin/commit.c:1625 builtin/commit.c:1626 builtin/commit.c:1632
-#: parse-options.h:329 ref-filter.h:90
+#: builtin/commit.c:1627 builtin/commit.c:1628 builtin/commit.c:1634
+#: parse-options.h:327 ref-filter.h:92
msgid "commit"
msgstr "ПОДАВАНЕ"
-#: builtin/commit.c:1625
+#: builtin/commit.c:1627
msgid "reuse and edit message from specified commit"
msgstr "преизползване и редактиране на съобщението от указаното ПОДАВАНЕ"
-#: builtin/commit.c:1626
+#: builtin/commit.c:1628
msgid "reuse message from specified commit"
msgstr "преизползване на съобщението от указаното ПОДАВАНЕ"
#. TRANSLATORS: Leave "[(amend|reword):]" as-is,
#. and only translate <commit>.
#.
-#: builtin/commit.c:1631
+#: builtin/commit.c:1633
msgid "[(amend|reword):]commit"
msgstr "[(amend|reword):]подаване"
-#: builtin/commit.c:1631
+#: builtin/commit.c:1633
msgid ""
"use autosquash formatted message to fixup or amend/reword specified commit"
msgstr ""
"използване на автоматичното съобщение за вкарване на указаното ПОДАВАНЕ в "
"предходното без следа или за промяна на подаването или съобщението"
-#: builtin/commit.c:1632
+#: builtin/commit.c:1634
msgid "use autosquash formatted message to squash specified commit"
msgstr ""
"използване на автоматичното съобщение за вкарване на указаното ПОДАВАНЕ в "
"предното"
-#: builtin/commit.c:1633
+#: builtin/commit.c:1635
msgid "the commit is authored by me now (used with -C/-c/--amend)"
msgstr ""
"смяна на автора да съвпада с подаващия (използва се с „-C“/„-c“/„--amend“)"
-#: builtin/commit.c:1634 builtin/interpret-trailers.c:111
+#: builtin/commit.c:1636 builtin/interpret-trailers.c:111
msgid "trailer"
-msgstr "епилог"
+msgstr "ЕПИЛОГ"
-#: builtin/commit.c:1634
+#: builtin/commit.c:1636
msgid "add custom trailer(s)"
-msgstr "добовяне на друг епилог"
+msgstr "добавяне на друг ЕПИЛОГ"
-#: builtin/commit.c:1635 builtin/log.c:1754 builtin/merge.c:302
-#: builtin/pull.c:145 builtin/revert.c:110
+#: builtin/commit.c:1637 builtin/log.c:1754 builtin/merge.c:303
+#: builtin/pull.c:146 builtin/revert.c:110
msgid "add a Signed-off-by trailer"
msgstr "добавяне на епилог за подпис „Signed-off-by“"
-#: builtin/commit.c:1636
+#: builtin/commit.c:1638
msgid "use specified template file"
msgstr "използване на указания шаблонен ФАЙЛ"
-#: builtin/commit.c:1637
+#: builtin/commit.c:1639
msgid "force edit of commit"
msgstr "редактиране на подаване"
-#: builtin/commit.c:1639
+#: builtin/commit.c:1641
msgid "include status in commit message template"
msgstr "вмъкване на състоянието в шаблона за съобщението при подаване"
-#: builtin/commit.c:1644
+#: builtin/commit.c:1646
msgid "Commit contents options"
msgstr "Опции за избор на файлове при подаване"
-#: builtin/commit.c:1645
+#: builtin/commit.c:1647
msgid "commit all changed files"
msgstr "подаване на всички променени файлове"
-#: builtin/commit.c:1646
+#: builtin/commit.c:1648
msgid "add specified files to index for commit"
msgstr "добавяне на указаните файлове към индекса за подаване"
-#: builtin/commit.c:1647
+#: builtin/commit.c:1649
msgid "interactively add files"
msgstr "интерактивно добавяне на файлове"
-#: builtin/commit.c:1648
+#: builtin/commit.c:1650
msgid "interactively add changes"
msgstr "интерактивно добавяне на промени"
-#: builtin/commit.c:1649
+#: builtin/commit.c:1651
msgid "commit only specified files"
msgstr "подаване само на указаните файлове"
-#: builtin/commit.c:1650
+#: builtin/commit.c:1652
msgid "bypass pre-commit and commit-msg hooks"
msgstr ""
"без изпълнение на куките преди подаване и при промяна на съобщението за "
"подаване (pre-commit и commit-msg)"
-#: builtin/commit.c:1651
+#: builtin/commit.c:1653
msgid "show what would be committed"
msgstr "отпечатване на това, което би било подадено"
-#: builtin/commit.c:1664
+#: builtin/commit.c:1666
msgid "amend previous commit"
msgstr "поправяне на предишното подаване"
-#: builtin/commit.c:1665
+#: builtin/commit.c:1667
msgid "bypass post-rewrite hook"
msgstr "без изпълнение на куката след презаписване (post-rewrite)"
-#: builtin/commit.c:1672
+#: builtin/commit.c:1674
msgid "ok to record an empty change"
msgstr "позволяване на празни подавания"
-#: builtin/commit.c:1674
+#: builtin/commit.c:1676
msgid "ok to record a change with an empty message"
msgstr "позволяване на подавания с празни съобщения"
-#: builtin/commit.c:1747
+#: builtin/commit.c:1752
#, c-format
msgid "Corrupt MERGE_HEAD file (%s)"
msgstr "Повреден файл за върха за сливането „MERGE_HEAD“ (%s)"
-#: builtin/commit.c:1754
+#: builtin/commit.c:1759
msgid "could not read MERGE_MODE"
msgstr "режимът на сливане „MERGE_MODE“ не може да бъде прочетен"
-#: builtin/commit.c:1775
+#: builtin/commit.c:1780
#, c-format
msgid "could not read commit message: %s"
msgstr "съобщението за подаване не може да бъде прочетено: %s"
-#: builtin/commit.c:1782
+#: builtin/commit.c:1787
#, c-format
msgid "Aborting commit due to empty commit message.\n"
msgstr "Неизвършване на подаване поради празно съобщение.\n"
-#: builtin/commit.c:1787
+#: builtin/commit.c:1792
#, c-format
msgid "Aborting commit; you did not edit the message.\n"
msgstr "Неизвършване на подаване поради нередактирано съобщение.\n"
-#: builtin/commit.c:1798
+#: builtin/commit.c:1803
#, c-format
msgid "Aborting commit due to empty commit message body.\n"
msgstr "Неизвършване на подаване поради празно съобщение.\n"
-#: builtin/commit.c:1834
+#: builtin/commit.c:1839
msgid ""
"repository has been updated, but unable to write\n"
"new_index file. Check that disk is not full and quota is\n"
@@ -14756,7 +15064,7 @@
#: builtin/config.c:684
msgid "$HOME not set"
-msgstr "променливата „HOME“ не е зададена"
+msgstr "стойността „$HOME“ не е зададена"
#: builtin/config.c:708
msgid ""
@@ -14764,7 +15072,7 @@
"extension worktreeConfig is enabled. Please read \"CONFIGURATION FILE\"\n"
"section in \"git help worktree\" for details"
msgstr ""
-"опцията „--worktre“ не приема множество работни дървета, преди\n"
+"опцията „--worktree“ не приема множество работни дървета, преди\n"
"включването на разширението в настройките „worktreeConfig“. За\n"
"повече информация вижте раздела „CONFIGURATION FILE“ в\n"
"„git help worktree“"
@@ -14865,10 +15173,10 @@
#: builtin/credential-cache--daemon.c:316
msgid "credential-cache--daemon unavailable; no unix socket support"
msgstr ""
-"демонът за кеша с идентификациите е недостъпен — липсва поддръжка на гнезда "
-"на unix"
+"демонът за кеша с идентификациите е недостъпен (credential-cache--daemon) — "
+"липсва поддръжка на гнезда на unix"
-#: builtin/credential-cache.c:154
+#: builtin/credential-cache.c:180
msgid "credential-cache unavailable; no unix socket support"
msgstr ""
"кешът с идентификациите е недостъпен — липсва поддръжка на гнезда на unix"
@@ -15049,7 +15357,7 @@
#: builtin/diff-tree.c:155
msgid "--stdin and --merge-base are mutually exclusive"
-msgstr "опциите „-stdin“ и „--merge-base“ са несъвместими"
+msgstr "опциите „--stdin“ и „--merge-base“ са несъвместими"
#: builtin/diff-tree.c:157
msgid "--merge-base only works with two commits"
@@ -15074,7 +15382,7 @@
msgid "Not a git repository"
msgstr "Не е хранилище на Git"
-#: builtin/diff.c:532 builtin/grep.c:684
+#: builtin/diff.c:532 builtin/grep.c:698
#, c-format
msgid "invalid object '%s' given."
msgstr "зададен е неправилен обект „%s“."
@@ -15098,115 +15406,115 @@
msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
msgstr "git difftool [ОПЦИЯ…] [ПОДАВАНЕ [ПОДАВАНЕ]] [[--] ПЪТ…]"
-#: builtin/difftool.c:261
-#, c-format
-msgid "failed: %d"
-msgstr "неуспешно действие с изходен код: %d"
-
-#: builtin/difftool.c:303
+#: builtin/difftool.c:293
#, c-format
msgid "could not read symlink %s"
msgstr "символната връзка „%s“ не може да бъде прочетена"
-#: builtin/difftool.c:305
+#: builtin/difftool.c:295
#, c-format
msgid "could not read symlink file %s"
msgstr "файлът, сочен от символната връзка „%s“, не може да бъде прочетен"
-#: builtin/difftool.c:313
+#: builtin/difftool.c:303
#, c-format
msgid "could not read object %s for symlink %s"
msgstr "обектът „%s“ за символната връзка „%s“ не може да бъде прочетен"
-#: builtin/difftool.c:413
+#: builtin/difftool.c:427
msgid ""
-"combined diff formats('-c' and '--cc') are not supported in\n"
-"directory diff mode('-d' and '--dir-diff')."
+"combined diff formats ('-c' and '--cc') are not supported in\n"
+"directory diff mode ('-d' and '--dir-diff')."
msgstr ""
"комбинираните формати на разликите („-c“ и „--cc“) не се поддържат\n"
"в режима за разлики върху директории („-d“ и „--dir-diff“)."
-#: builtin/difftool.c:637
+#: builtin/difftool.c:632
#, c-format
msgid "both files modified: '%s' and '%s'."
msgstr "и двата файла са променени: „%s“ и „%s“."
-#: builtin/difftool.c:639
+#: builtin/difftool.c:634
msgid "working tree file has been left."
msgstr "работното дърво е изоставено."
-#: builtin/difftool.c:650
+#: builtin/difftool.c:645
#, c-format
msgid "temporary files exist in '%s'."
msgstr "в „%s“ има временни файлове."
-#: builtin/difftool.c:651
+#: builtin/difftool.c:646
msgid "you may want to cleanup or recover these."
msgstr "възможно е да ги изчистите или възстановите"
-#: builtin/difftool.c:699
+#: builtin/difftool.c:651
+#, c-format
+msgid "failed: %d"
+msgstr "неуспешно действие с изходен код: %d"
+
+#: builtin/difftool.c:696
msgid "use `diff.guitool` instead of `diff.tool`"
msgstr "използвайте „diff.guitool“ вместо „diff.tool“"
-#: builtin/difftool.c:701
+#: builtin/difftool.c:698
msgid "perform a full-directory diff"
msgstr "разлика по директории"
-#: builtin/difftool.c:703
+#: builtin/difftool.c:700
msgid "do not prompt before launching a diff tool"
msgstr "стартиране на ПРОГРАМАта за разлики без предупреждение"
-#: builtin/difftool.c:708
+#: builtin/difftool.c:705
msgid "use symlinks in dir-diff mode"
msgstr "следване на символните връзки при разлика по директории"
-#: builtin/difftool.c:709
+#: builtin/difftool.c:706
msgid "tool"
msgstr "ПРОГРАМА"
-#: builtin/difftool.c:710
+#: builtin/difftool.c:707
msgid "use the specified diff tool"
msgstr "използване на указаната ПРОГРАМА"
-#: builtin/difftool.c:712
+#: builtin/difftool.c:709
msgid "print a list of diff tools that may be used with `--tool`"
msgstr ""
"извеждане на списък с всички ПРОГРАМи, които може да се ползват с опцията „--"
"tool“"
-#: builtin/difftool.c:715
+#: builtin/difftool.c:712
msgid ""
-"make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
+"make 'git-difftool' exit when an invoked diff tool returns a non-zero exit "
"code"
msgstr ""
-"„git-difftool“ да спре работа, когато стартираната ПРОГРАМА завърши с "
-"ненулев код"
+"„git-difftool“ да спре работа, когато стартираната ПРОГРАМА за разлики "
+"завърши с ненулев код"
-#: builtin/difftool.c:718
+#: builtin/difftool.c:715
msgid "specify a custom command for viewing diffs"
msgstr "команда за разглеждане на разлики"
-#: builtin/difftool.c:719
+#: builtin/difftool.c:716
msgid "passed to `diff`"
msgstr "подава се към „diff“"
-#: builtin/difftool.c:734
+#: builtin/difftool.c:732
msgid "difftool requires worktree or --no-index"
msgstr "„git-difftool“ изисква работно дърво или опцията „--no-index“"
-#: builtin/difftool.c:741
+#: builtin/difftool.c:739
msgid "--dir-diff is incompatible with --no-index"
msgstr "опциите „--dir-diff“ и „--no-index“ са несъвместими"
-#: builtin/difftool.c:744
+#: builtin/difftool.c:742
msgid "--gui, --tool and --extcmd are mutually exclusive"
msgstr "опциите „--gui“, „--tool“ и „--extcmd“ са несъвместими една с друга"
-#: builtin/difftool.c:752
+#: builtin/difftool.c:750
msgid "no <tool> given for --tool=<tool>"
msgstr "не е зададена програма за „--tool=ПРОГРАМА“"
-#: builtin/difftool.c:759
+#: builtin/difftool.c:757
msgid "no <cmd> given for --extcmd=<cmd>"
msgstr "не е зададена команда за „--extcmd=КОМАНДА“"
@@ -15214,7 +15522,7 @@
msgid "git env--helper --type=[bool|ulong] <options> <env-var>"
msgstr "git env--helper --type=[bool|ulong] ОПЦИИ ПРОМЕНЛИВИ"
-#: builtin/env--helper.c:42 builtin/hash-object.c:98
+#: builtin/env--helper.c:42 builtin/hash-object.c:96
msgid "type"
msgstr "ВИД"
@@ -15246,100 +15554,100 @@
msgid "git fast-export [rev-list-opts]"
msgstr "git fast-export [ОПЦИИ_ЗА_СПИСЪКА_С_ВЕРСИИ]"
-#: builtin/fast-export.c:868
+#: builtin/fast-export.c:869
msgid "Error: Cannot export nested tags unless --mark-tags is specified."
msgstr ""
"Грешка: непреките етикети не се изнасят, освен ако не зададете „--mark-tags“."
-#: builtin/fast-export.c:1177
+#: builtin/fast-export.c:1178
msgid "--anonymize-map token cannot be empty"
msgstr "опцията „--anonymize-map“ изисква аргумент"
-#: builtin/fast-export.c:1197
+#: builtin/fast-export.c:1198
msgid "show progress after <n> objects"
msgstr "Съобщение за напредъка на всеки такъв БРОЙ обекта"
-#: builtin/fast-export.c:1199
+#: builtin/fast-export.c:1200
msgid "select handling of signed tags"
msgstr "Как да се обработват подписаните етикети"
-#: builtin/fast-export.c:1202
+#: builtin/fast-export.c:1203
msgid "select handling of tags that tag filtered objects"
msgstr "Как да се обработват етикетите на филтрираните обекти"
-#: builtin/fast-export.c:1205
+#: builtin/fast-export.c:1206
msgid "select handling of commit messages in an alternate encoding"
msgstr ""
"как да се обработват съобщенията за подаване, които са в друго кодиране"
-#: builtin/fast-export.c:1208
+#: builtin/fast-export.c:1209
msgid "dump marks to this file"
msgstr "запазване на маркерите в този ФАЙЛ"
-#: builtin/fast-export.c:1210
+#: builtin/fast-export.c:1211
msgid "import marks from this file"
msgstr "внасяне на маркерите от този ФАЙЛ"
-#: builtin/fast-export.c:1214
+#: builtin/fast-export.c:1215
msgid "import marks from this file if it exists"
msgstr "внасяне на маркерите от този ФАЙЛ, ако съществува"
-#: builtin/fast-export.c:1216
+#: builtin/fast-export.c:1217
msgid "fake a tagger when tags lack one"
msgstr ""
"да се използва изкуствено име на човек при липса на създател на етикета"
-#: builtin/fast-export.c:1218
+#: builtin/fast-export.c:1219
msgid "output full tree for each commit"
msgstr "извеждане на цялото дърво за всяко подаване"
-#: builtin/fast-export.c:1220
+#: builtin/fast-export.c:1221
msgid "use the done feature to terminate the stream"
msgstr "използване на маркер за завършване на потока"
-#: builtin/fast-export.c:1221
+#: builtin/fast-export.c:1222
msgid "skip output of blob data"
msgstr "без извеждане на съдържанието на обектите-BLOB"
-#: builtin/fast-export.c:1222 builtin/log.c:1826
+#: builtin/fast-export.c:1223 builtin/log.c:1826
msgid "refspec"
msgstr "УКАЗАТЕЛ_НА_ВЕРСИЯ"
-#: builtin/fast-export.c:1223
+#: builtin/fast-export.c:1224
msgid "apply refspec to exported refs"
msgstr "прилагане на УКАЗАТЕЛя_НА_ВЕРСИЯ към изнесените указатели"
-#: builtin/fast-export.c:1224
+#: builtin/fast-export.c:1225
msgid "anonymize output"
msgstr "анонимизиране на извежданата информация"
-#: builtin/fast-export.c:1225
+#: builtin/fast-export.c:1226
msgid "from:to"
msgstr "ОТ:КЪМ"
-#: builtin/fast-export.c:1226
+#: builtin/fast-export.c:1227
msgid "convert <from> to <to> in anonymized output"
msgstr "заместване ОТ със КЪМ в анонимизирания изход"
-#: builtin/fast-export.c:1229
+#: builtin/fast-export.c:1230
msgid "reference parents which are not in fast-export stream by object id"
msgstr ""
"указване на родителите, които не са в потока на бързо изнасяне, с "
"идентификатор на обект"
-#: builtin/fast-export.c:1231
+#: builtin/fast-export.c:1232
msgid "show original object ids of blobs/commits"
msgstr "извеждане на първоначалните идентификатори на обектите BLOB/подавяния"
-#: builtin/fast-export.c:1233
+#: builtin/fast-export.c:1234
msgid "label tags with mark ids"
msgstr "задаване на идентификатори на маркери на етикетите"
-#: builtin/fast-export.c:1256
+#: builtin/fast-export.c:1257
msgid "--anonymize-map without --anonymize does not make sense"
msgstr "опцията „--anonymize-map“ изисква „--anonymize“"
-#: builtin/fast-export.c:1271
+#: builtin/fast-export.c:1272
msgid "Cannot pass both --import-marks and --import-marks-if-exists"
msgstr "опциите „--import-marks“ и „--import-marks-if-exists“ са несъвместими"
@@ -15397,15 +15705,15 @@
msgid "fetch.parallel cannot be negative"
msgstr "опцията „fetch.parallel“ трябва да е неотрицателна"
-#: builtin/fetch.c:145 builtin/pull.c:185
+#: builtin/fetch.c:145 builtin/pull.c:189
msgid "fetch from all remotes"
msgstr "доставяне от всички отдалечени хранилища"
-#: builtin/fetch.c:147 builtin/pull.c:245
+#: builtin/fetch.c:147 builtin/pull.c:249
msgid "set upstream for git pull/fetch"
msgstr "задаване на клон за следене за издърпване/доставяне"
-#: builtin/fetch.c:149 builtin/pull.c:188
+#: builtin/fetch.c:149 builtin/pull.c:192
msgid "append to .git/FETCH_HEAD instead of overwriting"
msgstr "добавяне към „.git/FETCH_HEAD“ вместо замяна"
@@ -15413,7 +15721,7 @@
msgid "use atomic transaction to update references"
msgstr "изискване на атомарни операции за обновяване на указателите"
-#: builtin/fetch.c:153 builtin/pull.c:191
+#: builtin/fetch.c:153 builtin/pull.c:195
msgid "path to upload pack on remote end"
msgstr "отдалечен път, където да се качи пакетът"
@@ -15425,7 +15733,7 @@
msgid "fetch from multiple remotes"
msgstr "доставяне от множество отдалечени хранилища"
-#: builtin/fetch.c:158 builtin/pull.c:195
+#: builtin/fetch.c:158 builtin/pull.c:199
msgid "fetch all tags and associated objects"
msgstr "доставяне на всички етикети и принадлежащи обекти"
@@ -15443,7 +15751,7 @@
"промяна на указателя, така че и той, както останалите, да бъде в „refs/"
"prefetch/“"
-#: builtin/fetch.c:166 builtin/pull.c:198
+#: builtin/fetch.c:166 builtin/pull.c:202
msgid "prune remote-tracking branches no longer on remote"
msgstr "окастряне на клоните следящи вече несъществуващи отдалечени клони"
@@ -15453,7 +15761,7 @@
"окастряне на локалните етикети, които вече не съществуват в отдалеченото "
"хранилище и презаписване на променените"
-#: builtin/fetch.c:169 builtin/fetch.c:194 builtin/pull.c:122
+#: builtin/fetch.c:169 builtin/fetch.c:194 builtin/pull.c:123
msgid "on-demand"
msgstr "ПРИ НУЖДА"
@@ -15465,7 +15773,7 @@
msgid "write fetched references to the FETCH_HEAD file"
msgstr "запазване на доставените указатели във файла „FETCH_HEAD“"
-#: builtin/fetch.c:176 builtin/pull.c:206
+#: builtin/fetch.c:176 builtin/pull.c:210
msgid "keep downloaded pack"
msgstr "запазване на изтеглените пакети с обекти"
@@ -15473,16 +15781,16 @@
msgid "allow updating of HEAD ref"
msgstr "позволяване на обновяването на указателя „HEAD“"
-#: builtin/fetch.c:181 builtin/fetch.c:187 builtin/pull.c:209
-#: builtin/pull.c:218
+#: builtin/fetch.c:181 builtin/fetch.c:187 builtin/pull.c:213
+#: builtin/pull.c:222
msgid "deepen history of shallow clone"
msgstr "задълбочаване на историята на плитко хранилище"
-#: builtin/fetch.c:183 builtin/pull.c:212
+#: builtin/fetch.c:183 builtin/pull.c:216
msgid "deepen history of shallow repository based on time"
msgstr "задълбочаване на историята на плитко хранилище до определено време"
-#: builtin/fetch.c:189 builtin/pull.c:221
+#: builtin/fetch.c:189 builtin/pull.c:225
msgid "convert to a complete repository"
msgstr "превръщане в пълно хранилище"
@@ -15498,19 +15806,19 @@
"стандартно рекурсивно изтегляне на подмодулите (файловете с настройки са с "
"приоритет)"
-#: builtin/fetch.c:199 builtin/pull.c:224
+#: builtin/fetch.c:199 builtin/pull.c:228
msgid "accept refs that update .git/shallow"
msgstr "приемане на указатели, които обновяват „.git/shallow“"
-#: builtin/fetch.c:200 builtin/pull.c:226
+#: builtin/fetch.c:200 builtin/pull.c:230
msgid "refmap"
msgstr "КАРТА_С_УКАЗАТЕЛИ"
-#: builtin/fetch.c:201 builtin/pull.c:227
+#: builtin/fetch.c:201 builtin/pull.c:231
msgid "specify fetch refmap"
msgstr "указване на КАРТАта_С_УКАЗАТЕЛИ за доставяне"
-#: builtin/fetch.c:208 builtin/pull.c:240
+#: builtin/fetch.c:208 builtin/pull.c:244
msgid "report that we have only objects reachable from this object"
msgstr "докладване, че всички обекти може са достижими при започване от този"
@@ -15524,7 +15832,7 @@
msgid "run 'maintenance --auto' after fetching"
msgstr "изпълняване на „maintenance --auto“ след доставяне"
-#: builtin/fetch.c:217 builtin/pull.c:243
+#: builtin/fetch.c:217 builtin/pull.c:247
msgid "check for forced-updates on all updated branches"
msgstr "проверка за принудителни обновявания на всички клони"
@@ -15540,62 +15848,62 @@
msgid "Couldn't find remote ref HEAD"
msgstr "Указателят „HEAD“ в отдалеченото хранилище не може да бъде открит"
-#: builtin/fetch.c:757
+#: builtin/fetch.c:760
#, c-format
msgid "configuration fetch.output contains invalid value %s"
msgstr "настройката „fetch.output“ е с неправилна стойност „%s“"
-#: builtin/fetch.c:856
+#: builtin/fetch.c:862
#, c-format
msgid "object %s not found"
msgstr "обектът „%s“ липсва"
-#: builtin/fetch.c:860
+#: builtin/fetch.c:866
msgid "[up to date]"
msgstr "[актуален]"
-#: builtin/fetch.c:873 builtin/fetch.c:889 builtin/fetch.c:961
+#: builtin/fetch.c:879 builtin/fetch.c:895 builtin/fetch.c:967
msgid "[rejected]"
msgstr "[отхвърлен]"
-#: builtin/fetch.c:874
+#: builtin/fetch.c:880
msgid "can't fetch in current branch"
msgstr "в текущия клон не може да се доставя"
-#: builtin/fetch.c:884
+#: builtin/fetch.c:890
msgid "[tag update]"
msgstr "[обновяване на етикетите]"
-#: builtin/fetch.c:885 builtin/fetch.c:922 builtin/fetch.c:944
-#: builtin/fetch.c:956
+#: builtin/fetch.c:891 builtin/fetch.c:928 builtin/fetch.c:950
+#: builtin/fetch.c:962
msgid "unable to update local ref"
msgstr "локален указател не може да бъде обновен"
-#: builtin/fetch.c:889
+#: builtin/fetch.c:895
msgid "would clobber existing tag"
msgstr "съществуващ етикет ще бъде презаписан"
-#: builtin/fetch.c:911
+#: builtin/fetch.c:917
msgid "[new tag]"
msgstr "[нов етикет]"
-#: builtin/fetch.c:914
+#: builtin/fetch.c:920
msgid "[new branch]"
msgstr "[нов клон]"
-#: builtin/fetch.c:917
+#: builtin/fetch.c:923
msgid "[new ref]"
msgstr "[нов указател]"
-#: builtin/fetch.c:956
+#: builtin/fetch.c:962
msgid "forced update"
msgstr "принудително обновяване"
-#: builtin/fetch.c:961
+#: builtin/fetch.c:967
msgid "non-fast-forward"
msgstr "същинско сливане"
-#: builtin/fetch.c:1065
+#: builtin/fetch.c:1070
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"
@@ -15606,7 +15914,7 @@
"\n"
" git config fetch.showForcedUpdates true"
-#: builtin/fetch.c:1069
+#: builtin/fetch.c:1074
#, c-format
msgid ""
"It took %.2f seconds to check forced updates. You can use\n"
@@ -15620,23 +15928,23 @@
"\n"
" git config fetch.showForcedUpdates false\n"
-#: builtin/fetch.c:1101
+#: builtin/fetch.c:1105
#, c-format
msgid "%s did not send all necessary objects\n"
msgstr "хранилището „%s“ не изпрати всички необходими обекти\n"
-#: builtin/fetch.c:1129
+#: builtin/fetch.c:1134
#, c-format
msgid "rejected %s because shallow roots are not allowed to be updated"
msgstr ""
"отхвърляне на „%s“, защото плитките върхове не може да бъдат обновявани"
-#: builtin/fetch.c:1206 builtin/fetch.c:1357
+#: builtin/fetch.c:1223 builtin/fetch.c:1371
#, c-format
msgid "From %.*s\n"
msgstr "От %.*s\n"
-#: builtin/fetch.c:1228
+#: builtin/fetch.c:1244
#, c-format
msgid ""
"some local refs could not be updated; try running\n"
@@ -15646,57 +15954,62 @@
"„git remote prune %s“, за да премахнете остарелите клони, които\n"
"предизвикват конфликта"
-#: builtin/fetch.c:1327
+#: builtin/fetch.c:1341
#, c-format
msgid " (%s will become dangling)"
msgstr " (обектът „%s“ ще се окаже извън клон)"
-#: builtin/fetch.c:1328
+#: builtin/fetch.c:1342
#, c-format
msgid " (%s has become dangling)"
msgstr " (обектът „%s“ вече е извън клон)"
-#: builtin/fetch.c:1360
+#: builtin/fetch.c:1374
msgid "[deleted]"
msgstr "[изтрит]"
-#: builtin/fetch.c:1361 builtin/remote.c:1118
+#: builtin/fetch.c:1375 builtin/remote.c:1128
msgid "(none)"
msgstr "(нищо)"
-#: builtin/fetch.c:1384
+#: builtin/fetch.c:1398
#, c-format
msgid "Refusing to fetch into current branch %s of non-bare repository"
msgstr "Не може да доставите в текущия клон „%s“ на хранилище, което не е голо"
-#: builtin/fetch.c:1403
+#: builtin/fetch.c:1417
#, c-format
msgid "Option \"%s\" value \"%s\" is not valid for %s"
msgstr "Стойността „%2$s“ за опцията „%1$s“ не е съвместима с „%3$s“"
-#: builtin/fetch.c:1406
+#: builtin/fetch.c:1420
#, c-format
msgid "Option \"%s\" is ignored for %s\n"
msgstr "опцията „%s“ се прескача при „%s“\n"
-#: builtin/fetch.c:1618
+#: builtin/fetch.c:1447
+#, c-format
+msgid "the object %s does not exist"
+msgstr "обектът „%s“ не съществува"
+
+#: builtin/fetch.c:1633
msgid "multiple branches detected, incompatible with --set-upstream"
msgstr ""
"засечени са множество клони, това е несъвместимо с опцията „--set-upstream“"
-#: builtin/fetch.c:1633
+#: builtin/fetch.c:1648
msgid "not setting upstream for a remote remote-tracking branch"
msgstr "не може да указвате клон за следене на отдалечен етикет"
-#: builtin/fetch.c:1635
+#: builtin/fetch.c:1650
msgid "not setting upstream for a remote tag"
msgstr "не може да указвате клон за следене на отдалечен етикет"
-#: builtin/fetch.c:1637
+#: builtin/fetch.c:1652
msgid "unknown branch type"
msgstr "непознат вид клон"
-#: builtin/fetch.c:1639
+#: builtin/fetch.c:1654
msgid ""
"no source branch found.\n"
"you need to specify exactly one branch with the --set-upstream option."
@@ -15704,22 +16017,22 @@
"не е открит клон за следене.\n"
"Трябва изрично да зададете един клон с опцията „--set-upstream option“."
-#: builtin/fetch.c:1768 builtin/fetch.c:1831
+#: builtin/fetch.c:1783 builtin/fetch.c:1846
#, c-format
msgid "Fetching %s\n"
msgstr "Доставяне на „%s“\n"
-#: builtin/fetch.c:1778 builtin/fetch.c:1833 builtin/remote.c:101
+#: builtin/fetch.c:1793 builtin/fetch.c:1848 builtin/remote.c:101
#, c-format
msgid "Could not fetch %s"
msgstr "„%s“ не може да се достави"
-#: builtin/fetch.c:1790
+#: builtin/fetch.c:1805
#, c-format
msgid "could not fetch '%s' (exit code: %d)\n"
msgstr "„%s“ не може да се достави (изходният код е: %d)\n"
-#: builtin/fetch.c:1894
+#: builtin/fetch.c:1909
msgid ""
"No remote repository specified. Please, specify either a URL or a\n"
"remote name from which new revisions should be fetched."
@@ -15727,70 +16040,70 @@
"Не сте указали отдалечено хранилище. Задайте или адрес, или име\n"
"на отдалечено хранилище, откъдето да се доставят новите версии."
-#: builtin/fetch.c:1930
+#: builtin/fetch.c:1945
msgid "You need to specify a tag name."
msgstr "Трябва да укажете име на етикет."
-#: builtin/fetch.c:1994
+#: builtin/fetch.c:2009
msgid "--negotiate-only needs one or more --negotiate-tip=*"
msgstr ""
"Опцията „--negotiate-only“ изисква една или повече опции „--negotiate-tip=*“"
-#: builtin/fetch.c:1998
+#: builtin/fetch.c:2013
msgid "Negative depth in --deepen is not supported"
msgstr "Отрицателна дълбочина като аргумент на „--deepen“ не се поддържа"
-#: builtin/fetch.c:2000
+#: builtin/fetch.c:2015
msgid "--deepen and --depth are mutually exclusive"
msgstr "опциите „--deepen“ и „--depth“ са несъвместими"
-#: builtin/fetch.c:2005
+#: builtin/fetch.c:2020
msgid "--depth and --unshallow cannot be used together"
msgstr "опциите „--depth“ и „--unshallow“ са несъвместими"
-#: builtin/fetch.c:2007
+#: builtin/fetch.c:2022
msgid "--unshallow on a complete repository does not make sense"
msgstr "не може да използвате опцията „--unshallow“ върху пълно хранилище"
-#: builtin/fetch.c:2024
+#: builtin/fetch.c:2039
msgid "fetch --all does not take a repository argument"
msgstr "към „git fetch --all“ не може да добавите аргумент-хранилище"
-#: builtin/fetch.c:2026
+#: builtin/fetch.c:2041
msgid "fetch --all does not make sense with refspecs"
msgstr "към „git fetch --all“ не може да добавите аргумент-указател на версия"
-#: builtin/fetch.c:2035
+#: builtin/fetch.c:2050
#, c-format
msgid "No such remote or remote group: %s"
msgstr "Няма нито отдалечено хранилище, нито група от хранилища на име „%s“"
-#: builtin/fetch.c:2042
+#: builtin/fetch.c:2057
msgid "Fetching a group and specifying refspecs does not make sense"
msgstr "Указването на група и указването на версия са несъвместими"
-#: builtin/fetch.c:2058
+#: builtin/fetch.c:2073
msgid "must supply remote when using --negotiate-only"
msgstr "опцията „--negotiate-only“ изисква хранилище"
-#: builtin/fetch.c:2063
+#: builtin/fetch.c:2078
msgid "Protocol does not support --negotiate-only, exiting."
msgstr "Протоколът не поддържа опцията „--negotiate-only“, изход от прогамата."
-#: builtin/fetch.c:2082
+#: builtin/fetch.c:2097
msgid ""
"--filter can only be used with the remote configured in extensions."
"partialclone"
msgstr ""
"опцията „--filter“ може да се ползва само с отдалеченото хранилище указано в "
-"настройката „extensions.partialClone“"
+"настройката „extensions.partialclone“"
-#: builtin/fetch.c:2086
+#: builtin/fetch.c:2101
msgid "--atomic can only be used when fetching from one remote"
msgstr ""
"опцията „--atomic“ поддържа доставяне само от едно отдалечено хранилище"
-#: builtin/fetch.c:2090
+#: builtin/fetch.c:2105
msgid "--stdin can only be used when fetching from one remote"
msgstr "опцията „--stdin“ поддържа доставяне само от едно отдалечено хранилище"
@@ -15858,7 +16171,7 @@
msgid "show only <n> matched refs"
msgstr "извеждане само на този БРОЙ напаснати указатели"
-#: builtin/for-each-ref.c:41 builtin/tag.c:483
+#: builtin/for-each-ref.c:41 builtin/tag.c:481
msgid "respect format colors"
msgstr "спазване на цветовете на форма̀та"
@@ -15886,15 +16199,15 @@
msgid "git for-each-repo --config=<config> <command-args>"
msgstr "git for-each-repo --config=НАСТРОЙКА АРГУМЕНТ…"
-#: builtin/for-each-repo.c:37
+#: builtin/for-each-repo.c:34
msgid "config"
msgstr "настройка"
-#: builtin/for-each-repo.c:38
+#: builtin/for-each-repo.c:35
msgid "config key storing a list of repository paths"
msgstr "настройка, която съдържа списък с пътища към хранилища"
-#: builtin/for-each-repo.c:46
+#: builtin/for-each-repo.c:43
msgid "missing --config=<config>"
msgstr "липсва --config=НАСТРОЙКА"
@@ -16014,130 +16327,140 @@
msgid "notice: No default references"
msgstr "внимание: няма указатели по подразбиране"
-#: builtin/fsck.c:606
+#: builtin/fsck.c:621
+#, c-format
+msgid "%s: hash-path mismatch, found at: %s"
+msgstr "%s: разлика в контролната сума при: %s"
+
+#: builtin/fsck.c:624
#, c-format
msgid "%s: object corrupt or missing: %s"
-msgstr "„%s“: липсващ обект: „%s“"
+msgstr "%s: развален или липсващ обект: %s"
-#: builtin/fsck.c:619
+#: builtin/fsck.c:628
+#, c-format
+msgid "%s: object is of unknown type '%s': %s"
+msgstr "%s: обектът е непознат вид „%s“: %s"
+
+#: builtin/fsck.c:644
#, c-format
msgid "%s: object could not be parsed: %s"
msgstr "„%s“: не може да се анализира: „%s“"
-#: builtin/fsck.c:639
+#: builtin/fsck.c:664
#, c-format
msgid "bad sha1 file: %s"
msgstr "неправилен ред с контролна сума по SHA1: „%s“"
-#: builtin/fsck.c:654
+#: builtin/fsck.c:685
msgid "Checking object directory"
msgstr "Проверка на директория с обекти"
-#: builtin/fsck.c:657
+#: builtin/fsck.c:688
msgid "Checking object directories"
msgstr "Проверка на директориите с обекти"
-#: builtin/fsck.c:672
+#: builtin/fsck.c:704
#, c-format
msgid "Checking %s link"
msgstr "Проверка на връзките на „%s“"
#
-#: builtin/fsck.c:677 builtin/index-pack.c:864
+#: builtin/fsck.c:709 builtin/index-pack.c:859
#, c-format
msgid "invalid %s"
msgstr "неправилен указател „%s“"
-#: builtin/fsck.c:684
+#: builtin/fsck.c:716
#, c-format
msgid "%s points to something strange (%s)"
msgstr "„%s“ сочи към нещо необичайно (%s)"
-#: builtin/fsck.c:690
+#: builtin/fsck.c:722
#, c-format
msgid "%s: detached HEAD points at nothing"
msgstr "%s: несвързаният връх „HEAD“ не сочи към нищо"
-#: builtin/fsck.c:694
+#: builtin/fsck.c:726
#, c-format
msgid "notice: %s points to an unborn branch (%s)"
msgstr "предупреждение: „%s“ сочи към все още несъществуващ клон (%s)"
-#: builtin/fsck.c:706
+#: builtin/fsck.c:738
msgid "Checking cache tree"
msgstr "Проверка на дървото на кеша"
-#: builtin/fsck.c:711
+#: builtin/fsck.c:743
#, c-format
msgid "%s: invalid sha1 pointer in cache-tree"
msgstr "„%s“: неправилен указател за SHA1 в дървото на кеша"
-#: builtin/fsck.c:720
+#: builtin/fsck.c:752
msgid "non-tree in cache-tree"
msgstr "в дървото на кеша има нещо, което не е дърво"
-#: builtin/fsck.c:751
+#: builtin/fsck.c:783
msgid "git fsck [<options>] [<object>...]"
msgstr "git fsck [ОПЦИЯ…] [ОБЕКТ…]"
-#: builtin/fsck.c:757
+#: builtin/fsck.c:789
msgid "show unreachable objects"
msgstr "показване на недостижимите обекти"
-#: builtin/fsck.c:758
+#: builtin/fsck.c:790
msgid "show dangling objects"
msgstr "показване на обектите извън клоните"
-#: builtin/fsck.c:759
+#: builtin/fsck.c:791
msgid "report tags"
msgstr "показване на етикетите"
-#: builtin/fsck.c:760
+#: builtin/fsck.c:792
msgid "report root nodes"
msgstr "показване на кореновите възли"
-#: builtin/fsck.c:761
+#: builtin/fsck.c:793
msgid "make index objects head nodes"
msgstr "задаване на обекти от индекса да са коренови"
-#: builtin/fsck.c:762
+#: builtin/fsck.c:794
msgid "make reflogs head nodes (default)"
msgstr "проследяване и на указателите от журнала с указателите (стандартно)"
-#: builtin/fsck.c:763
+#: builtin/fsck.c:795
msgid "also consider packs and alternate objects"
msgstr "допълнително да се проверяват пакетите и алтернативните обекти"
-#: builtin/fsck.c:764
+#: builtin/fsck.c:796
msgid "check only connectivity"
msgstr "проверка само на връзката"
-#: builtin/fsck.c:765 builtin/mktag.c:75
+#: builtin/fsck.c:797 builtin/mktag.c:76
msgid "enable more strict checking"
msgstr "по-строги проверки"
-#: builtin/fsck.c:767
+#: builtin/fsck.c:799
msgid "write dangling objects in .git/lost-found"
msgstr "запазване на обектите извън клоните в директорията „.git/lost-found“"
-#: builtin/fsck.c:768 builtin/prune.c:134
+#: builtin/fsck.c:800 builtin/prune.c:134
msgid "show progress"
msgstr "показване на напредъка"
-#: builtin/fsck.c:769
+#: builtin/fsck.c:801
msgid "show verbose names for reachable objects"
msgstr "показване на подробни имена на достижимите обекти"
-#: builtin/fsck.c:828 builtin/index-pack.c:262
+#: builtin/fsck.c:861 builtin/index-pack.c:261
msgid "Checking objects"
msgstr "Проверка на обектите"
-#: builtin/fsck.c:856
+#: builtin/fsck.c:889
#, c-format
msgid "%s: object missing"
msgstr "„%s“: липсващ обект"
-#: builtin/fsck.c:867
+#: builtin/fsck.c:900
#, c-format
msgid "invalid parameter: expected sha1, got '%s'"
msgstr "неправилен параметър: очаква се SHA1, а бе получено: „%s“"
@@ -16161,7 +16484,7 @@
msgid "cannot stat '%s'"
msgstr "не може да се получи информация чрез „stat“ за директорията „%s“"
-#: builtin/gc.c:496 builtin/notes.c:240 builtin/tag.c:573
+#: builtin/gc.c:496 builtin/notes.c:238 builtin/tag.c:574
#, c-format
msgid "cannot read '%s'"
msgstr "файлът „%s“ не може да бъде прочетен"
@@ -16170,14 +16493,13 @@
#, c-format
msgid ""
"The last gc run reported the following. Please correct the root cause\n"
-"and remove %s.\n"
+"and remove %s\n"
"Automatic cleanup will not be performed until the file is removed.\n"
"\n"
"%s"
msgstr ""
-"При последното изпълнение на „git gc“ бе докладвана грешка. Коригирайте "
-"причината за\n"
-"нея и изтрийте „%s“.\n"
+"При последното изпълнение на „git gc“ бе докладвано следното — коригирайте\n"
+"причината за него и изтрийте „%s“.\n"
"Автоматичното изчистване на боклука няма да работи, преди да изтриете "
"файла.\n"
"\n"
@@ -16265,153 +16587,192 @@
msgid "unrecognized --schedule argument '%s'"
msgstr "непознат аргумент към „--schedule“: %s"
-#: builtin/gc.c:869
+#: builtin/gc.c:868
msgid "failed to write commit-graph"
msgstr "графът с подаванията не може да бъде записан"
-#: builtin/gc.c:905
+#: builtin/gc.c:904
msgid "failed to prefetch remotes"
msgstr "неуспешно предварително доставяне на отдалечените клони"
-#: builtin/gc.c:1022
+#: builtin/gc.c:1020
msgid "failed to start 'git pack-objects' process"
msgstr "процесът за командата „git pack-objects“ не може да бъде стартиран"
-#: builtin/gc.c:1039
+#: builtin/gc.c:1037
msgid "failed to finish 'git pack-objects' process"
msgstr "процесът за командата „git pack-objects“ не може да завърши"
-#: builtin/gc.c:1091
+#: builtin/gc.c:1088
msgid "failed to write multi-pack-index"
msgstr "индексът за множество пакети не може да бъде записан"
-#: builtin/gc.c:1109
+#: builtin/gc.c:1104
msgid "'git multi-pack-index expire' failed"
msgstr "неуспешно изпълнение на „git multi-pack-index expire“"
-#: builtin/gc.c:1170
+#: builtin/gc.c:1163
msgid "'git multi-pack-index repack' failed"
msgstr "неуспешно изпълнение на „git multi-pack-index repack“"
-#: builtin/gc.c:1179
+#: builtin/gc.c:1172
msgid ""
"skipping incremental-repack task because core.multiPackIndex is disabled"
msgstr ""
"задачата „incremental-repack“ се прескача, защото настройката „core."
"multiPackIndex“ е изключена"
-#: builtin/gc.c:1283
+#: builtin/gc.c:1276
#, c-format
msgid "lock file '%s' exists, skipping maintenance"
msgstr "заключващият файл „%s“ съществува. Действието се прескача"
-#: builtin/gc.c:1313
+#: builtin/gc.c:1306
#, c-format
msgid "task '%s' failed"
msgstr "неуспешно изпълнение на задачата „%s“"
-#: builtin/gc.c:1395
+#: builtin/gc.c:1388
#, c-format
msgid "'%s' is not a valid task"
msgstr "„%s“ не е правилна задача"
-#: builtin/gc.c:1400
+#: builtin/gc.c:1393
#, c-format
msgid "task '%s' cannot be selected multiple times"
msgstr "задачата „%s“ не може да се избере повече от веднъж"
-#: builtin/gc.c:1415
+#: builtin/gc.c:1408
msgid "run tasks based on the state of the repository"
msgstr "изпълняване на задачи според състоянието на хранилището"
-#: builtin/gc.c:1416
+#: builtin/gc.c:1409
msgid "frequency"
msgstr "честота"
-#: builtin/gc.c:1417
+#: builtin/gc.c:1410
msgid "run tasks based on frequency"
msgstr "изпълняване на задачи по график"
-#: builtin/gc.c:1420
+#: builtin/gc.c:1413
msgid "do not report progress or other information over stderr"
msgstr "без извеждане на напредъка и друга информация на стандартния изход"
-#: builtin/gc.c:1421
+#: builtin/gc.c:1414
msgid "task"
msgstr "задача"
-#: builtin/gc.c:1422
+#: builtin/gc.c:1415
msgid "run a specific task"
msgstr "изпълнение на определена задача"
-#: builtin/gc.c:1439
+#: builtin/gc.c:1432
msgid "use at most one of --auto and --schedule=<frequency>"
-msgstr ""
-"може да се указва максимум една от опциите „--auto“ и „--schedule=ЧЕСТОТА“"
+msgstr "опциите „--auto“ и „--schedule=ЧЕСТОТА“ са несъвместими"
-#: builtin/gc.c:1482
+#: builtin/gc.c:1475
msgid "failed to run 'git config'"
msgstr "неуспешно изпълнение на „git config“"
-#: builtin/gc.c:1547
+#: builtin/gc.c:1627
#, c-format
msgid "failed to expand path '%s'"
msgstr "грешка при заместването на пътя „%s“"
-#: builtin/gc.c:1576
+#: builtin/gc.c:1654 builtin/gc.c:1692
msgid "failed to start launchctl"
msgstr "неуспешно стартиране на „launchctl“."
-#: builtin/gc.c:1613
+#: builtin/gc.c:1767 builtin/gc.c:2220
#, c-format
msgid "failed to create directories for '%s'"
msgstr "директориите за „%s“ не може да бъдат създадени"
-#: builtin/gc.c:1674
+#: builtin/gc.c:1794
#, c-format
msgid "failed to bootstrap service %s"
msgstr "услугата „%s“ не може се настрои първоначално"
-#: builtin/gc.c:1745
+#: builtin/gc.c:1887
msgid "failed to create temp xml file"
msgstr "неуспешно създаване на временен файл за xml"
-#: builtin/gc.c:1835
+#: builtin/gc.c:1977
msgid "failed to start schtasks"
msgstr "задачите за периодично изпълнение не може да се стартират"
-#: builtin/gc.c:1879
+#: builtin/gc.c:2046
msgid "failed to run 'crontab -l'; your system might not support 'cron'"
msgstr ""
"неуспешно изпълнение на „crontab -l“. Системата ви може да не поддържа "
"„cron“"
-#: builtin/gc.c:1896
+#: builtin/gc.c:2063
msgid "failed to run 'crontab'; your system might not support 'cron'"
msgstr ""
"неуспешно изпълнение на „crontab“. Системата ви може да не поддържа „cron“"
-#: builtin/gc.c:1900
+#: builtin/gc.c:2067
msgid "failed to open stdin of 'crontab'"
msgstr "стандартният вход на „crontab“ не може да се отвори"
-#: builtin/gc.c:1942
+#: builtin/gc.c:2109
msgid "'crontab' died"
msgstr "процесът на „crontab“ умря"
-#: builtin/gc.c:1976
+#: builtin/gc.c:2174
+msgid "failed to start systemctl"
+msgstr "неуспешно стартиране на „systemctl“"
+
+#: builtin/gc.c:2184
+msgid "failed to run systemctl"
+msgstr "неуспешно изпълнение на „systemctl“"
+
+#: builtin/gc.c:2193 builtin/gc.c:2198 builtin/worktree.c:62
+#: builtin/worktree.c:945
+#, c-format
+msgid "failed to delete '%s'"
+msgstr "неуспешно изтриване на „%s“"
+
+#: builtin/gc.c:2378
+#, c-format
+msgid "unrecognized --scheduler argument '%s'"
+msgstr "непознат аргумент към „--scheduler“: %s"
+
+#: builtin/gc.c:2403
+msgid "neither systemd timers nor crontab are available"
+msgstr "липсват както таймери на systemd, така и crontab"
+
+#: builtin/gc.c:2418
+#, c-format
+msgid "%s scheduler is not available"
+msgstr "планиращият модул „%s“ липсва"
+
+#: builtin/gc.c:2432
msgid "another process is scheduling background maintenance"
msgstr "друг процес задава поддръжката на заден фон"
-#: builtin/gc.c:2000
+#: builtin/gc.c:2454
+msgid "git maintenance start [--scheduler=<scheduler>]"
+msgstr "git maintenance start [--scheduler=ПЛАНИРАЩ_МОДУЛ]"
+
+#: builtin/gc.c:2463
+msgid "scheduler"
+msgstr "ПЛАНИРАЩ_МОДУЛ"
+
+#: builtin/gc.c:2464
+msgid "scheduler to trigger git maintenance run"
+msgstr "ПЛАНИРАЩият_МОДУЛ, който да изпълнява задачите"
+
+#: builtin/gc.c:2478
msgid "failed to add repo to global config"
msgstr "неуспешно добавяне на хранилище към файла с глобални настройки"
-#: builtin/gc.c:2010
+#: builtin/gc.c:2487
msgid "git maintenance <subcommand> [<options>]"
msgstr "git maintenance ПОДКОМАНДА [ОПЦИЯ…]"
-#: builtin/gc.c:2029
+#: builtin/gc.c:2506
#, c-format
msgid "invalid subcommand: %s"
msgstr "неправилна подкоманда: „%s“"
@@ -16420,12 +16781,12 @@
msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
msgstr "git grep [ОПЦИЯ…] [-e] ШАБЛОН [ВЕРСИЯ…] [[--] ПЪТ…]"
-#: builtin/grep.c:223
+#: builtin/grep.c:239
#, c-format
msgid "grep: failed to create thread: %s"
msgstr "grep: неуспешно създаване на нишка: %s"
-#: builtin/grep.c:277
+#: builtin/grep.c:293
#, c-format
msgid "invalid number of threads specified (%d) for %s"
msgstr "зададен е неправилен брой нишки (%d) за %s"
@@ -16434,275 +16795,275 @@
#. variable for tweaking threads, currently
#. grep.threads
#.
-#: builtin/grep.c:285 builtin/index-pack.c:1588 builtin/index-pack.c:1791
-#: builtin/pack-objects.c:3129
+#: builtin/grep.c:301 builtin/index-pack.c:1582 builtin/index-pack.c:1785
+#: builtin/pack-objects.c:3142
#, c-format
msgid "no threads support, ignoring %s"
msgstr "липсва поддръжка за нишки. „%s“ ще се пренебрегне"
-#: builtin/grep.c:473 builtin/grep.c:603 builtin/grep.c:643
+#: builtin/grep.c:488 builtin/grep.c:617 builtin/grep.c:657
#, c-format
msgid "unable to read tree (%s)"
msgstr "дървото не може да бъде прочетено (%s)"
-#: builtin/grep.c:658
+#: builtin/grep.c:672
#, c-format
msgid "unable to grep from object of type %s"
msgstr "не може да се изпълни „grep“ от обект от вида %s"
-#: builtin/grep.c:738
+#: builtin/grep.c:752
#, c-format
msgid "switch `%c' expects a numerical value"
msgstr "опцията „%c“ очаква число за аргумент"
-#: builtin/grep.c:837
+#: builtin/grep.c:851
msgid "search in index instead of in the work tree"
msgstr "търсене в индекса, а не в работното дърво"
-#: builtin/grep.c:839
+#: builtin/grep.c:853
msgid "find in contents not managed by git"
msgstr "търсене и във файловете, които не са под управлението на git"
-#: builtin/grep.c:841
+#: builtin/grep.c:855
msgid "search in both tracked and untracked files"
msgstr "търсене и в следените, и в неследените файлове"
-#: builtin/grep.c:843
+#: builtin/grep.c:857
msgid "ignore files specified via '.gitignore'"
msgstr "игнориране на файловете указани в „.gitignore“"
-#: builtin/grep.c:845
+#: builtin/grep.c:859
msgid "recursively search in each submodule"
msgstr "рекурсивно търсене във всички подмодули"
-#: builtin/grep.c:848
+#: builtin/grep.c:862
msgid "show non-matching lines"
msgstr "извеждане на редовете, които не съвпадат"
-#: builtin/grep.c:850
+#: builtin/grep.c:864
msgid "case insensitive matching"
msgstr "без значение на регистъра на буквите (главни/малки)"
-#: builtin/grep.c:852
+#: builtin/grep.c:866
msgid "match patterns only at word boundaries"
msgstr "напасване на шаблоните само по границите на думите"
-#: builtin/grep.c:854
+#: builtin/grep.c:868
msgid "process binary files as text"
msgstr "обработване на двоичните файлове като текстови"
-#: builtin/grep.c:856
+#: builtin/grep.c:870
msgid "don't match patterns in binary files"
msgstr "прескачане на двоичните файлове"
-#: builtin/grep.c:859
+#: builtin/grep.c:873
msgid "process binary files with textconv filters"
msgstr ""
"обработване на двоичните файлове чрез филтри за преобразуване към текст"
-#: builtin/grep.c:861
+#: builtin/grep.c:875
msgid "search in subdirectories (default)"
msgstr "търсене в поддиректориите (стандартно)"
-#: builtin/grep.c:863
+#: builtin/grep.c:877
msgid "descend at most <depth> levels"
msgstr "навлизане максимално на тази ДЪЛБОЧИНА в дървото"
-#: builtin/grep.c:867
+#: builtin/grep.c:881
msgid "use extended POSIX regular expressions"
msgstr "разширени регулярни изрази по POSIX"
-#: builtin/grep.c:870
+#: builtin/grep.c:884
msgid "use basic POSIX regular expressions (default)"
msgstr "основни регулярни изрази по POSIX (стандартно)"
-#: builtin/grep.c:873
+#: builtin/grep.c:887
msgid "interpret patterns as fixed strings"
msgstr "шаблоните са дословни низове"
-#: builtin/grep.c:876
+#: builtin/grep.c:890
msgid "use Perl-compatible regular expressions"
msgstr "регулярни изрази на Perl"
-#: builtin/grep.c:879
+#: builtin/grep.c:893
msgid "show line numbers"
msgstr "извеждане на номерата на редовете"
-#: builtin/grep.c:880
+#: builtin/grep.c:894
msgid "show column number of first match"
msgstr "извеждане на номера на колоната на първото напасване"
-#: builtin/grep.c:881
+#: builtin/grep.c:895
msgid "don't show filenames"
msgstr "без извеждане на имената на файловете"
-#: builtin/grep.c:882
+#: builtin/grep.c:896
msgid "show filenames"
msgstr "извеждане на имената на файловете"
-#: builtin/grep.c:884
+#: builtin/grep.c:898
msgid "show filenames relative to top directory"
msgstr ""
"извеждане на относителните имена на файловете спрямо основната директория на "
"хранилището"
-#: builtin/grep.c:886
+#: builtin/grep.c:900
msgid "show only filenames instead of matching lines"
msgstr "извеждане само на имената на файловете без напасващите редове"
-#: builtin/grep.c:888
+#: builtin/grep.c:902
msgid "synonym for --files-with-matches"
msgstr "псевдоним на „--files-with-matches“"
-#: builtin/grep.c:891
+#: builtin/grep.c:905
msgid "show only the names of files without match"
msgstr ""
"извеждане само на имената на файловете, които не съдържат ред, напасващ на "
"шаблона"
-#: builtin/grep.c:893
+#: builtin/grep.c:907
msgid "print NUL after filenames"
msgstr "извеждане на нулевия знак „NUL“ след всяко име на файл"
-#: builtin/grep.c:896
+#: builtin/grep.c:910
msgid "show only matching parts of a line"
msgstr "извеждане само на частите на редовете, които съвпадат"
-#: builtin/grep.c:898
+#: builtin/grep.c:912
msgid "show the number of matches instead of matching lines"
msgstr "извеждане на броя на съвпаденията вместо напасващите редове"
-#: builtin/grep.c:899
+#: builtin/grep.c:913
msgid "highlight matches"
msgstr "оцветяване на напасванията"
-#: builtin/grep.c:901
+#: builtin/grep.c:915
msgid "print empty line between matches from different files"
msgstr "извеждане на празен ред между напасванията от различни файлове"
-#: builtin/grep.c:903
+#: builtin/grep.c:917
msgid "show filename only once above matches from same file"
msgstr ""
"извеждане на името на файла само веднъж за всички напасвания от този файл"
-#: builtin/grep.c:906
+#: builtin/grep.c:920
msgid "show <n> context lines before and after matches"
msgstr "извеждане на такъв БРОЙ редове преди и след напасванията"
-#: builtin/grep.c:909
+#: builtin/grep.c:923
msgid "show <n> context lines before matches"
msgstr "извеждане на такъв БРОЙ редове преди напасванията"
-#: builtin/grep.c:911
+#: builtin/grep.c:925
msgid "show <n> context lines after matches"
msgstr "извеждане на такъв БРОЙ редове след напасванията"
-#: builtin/grep.c:913
+#: builtin/grep.c:927
msgid "use <n> worker threads"
msgstr "използване на такъв БРОЙ работещи нишки"
-#: builtin/grep.c:914
+#: builtin/grep.c:928
msgid "shortcut for -C NUM"
msgstr "псевдоним на „-C БРОЙ“"
-#: builtin/grep.c:917
+#: builtin/grep.c:931
msgid "show a line with the function name before matches"
msgstr "извеждане на ред с името на функцията, в която е напаснат шаблона"
-#: builtin/grep.c:919
+#: builtin/grep.c:933
msgid "show the surrounding function"
msgstr "извеждане на обхващащата функция"
-#: builtin/grep.c:922
+#: builtin/grep.c:936
msgid "read patterns from file"
msgstr "изчитане на шаблоните от ФАЙЛ"
-#: builtin/grep.c:924
+#: builtin/grep.c:938
msgid "match <pattern>"
msgstr "напасване на ШАБЛОН"
-#: builtin/grep.c:926
+#: builtin/grep.c:940
msgid "combine patterns specified with -e"
msgstr "комбиниране на шаблоните указани с опцията „-e“"
-#: builtin/grep.c:938
+#: builtin/grep.c:952
msgid "indicate hit with exit status without output"
msgstr ""
"без извеждане на стандартния изход. Изходният код указва наличието на "
"напасване"
-#: builtin/grep.c:940
+#: builtin/grep.c:954
msgid "show only matches from files that match all patterns"
msgstr ""
"извеждане на редове само от файловете, които напасват на всички шаблони"
-#: builtin/grep.c:943
+#: builtin/grep.c:957
msgid "pager"
msgstr "програма за преглед по страници"
-#: builtin/grep.c:943
+#: builtin/grep.c:957
msgid "show matching files in the pager"
msgstr "извеждане на съвпадащите файлове в програма за преглед по страници"
-#: builtin/grep.c:947
+#: builtin/grep.c:961
msgid "allow calling of grep(1) (ignored by this build)"
msgstr ""
"позволяване на стартирането на grep(1) (текущият компилат пренебрегва тази "
"опция)"
-#: builtin/grep.c:1013
+#: builtin/grep.c:1027
msgid "no pattern given"
msgstr "не сте задали шаблон"
-#: builtin/grep.c:1049
+#: builtin/grep.c:1063
msgid "--no-index or --untracked cannot be used with revs"
-msgstr "опциите „--cached“ и „--untracked“ са несъвместими с версии."
+msgstr "опциите „--no-index“ и „--untracked“ са несъвместими с версии."
-#: builtin/grep.c:1057
+#: builtin/grep.c:1071
#, c-format
msgid "unable to resolve revision: %s"
msgstr "версията „%s“ не може бъде открита"
-#: builtin/grep.c:1087
+#: builtin/grep.c:1101
msgid "--untracked not supported with --recurse-submodules"
msgstr "опциите „--untracked“ и „--recurse-submodules“ са несъвместими"
-#: builtin/grep.c:1091
+#: builtin/grep.c:1105
msgid "invalid option combination, ignoring --threads"
msgstr "неправилна комбинация от опции, „--threads“ ще се пренебрегне"
-#: builtin/grep.c:1094 builtin/pack-objects.c:4090
+#: builtin/grep.c:1108 builtin/pack-objects.c:4059
msgid "no threads support, ignoring --threads"
msgstr "липсва поддръжка за нишки. „--threads“ ще се пренебрегне"
-#: builtin/grep.c:1097 builtin/index-pack.c:1585 builtin/pack-objects.c:3126
+#: builtin/grep.c:1111 builtin/index-pack.c:1579 builtin/pack-objects.c:3139
#, c-format
msgid "invalid number of threads specified (%d)"
msgstr "зададен е неправилен брой нишки: %d"
-#: builtin/grep.c:1131
+#: builtin/grep.c:1145
msgid "--open-files-in-pager only works on the worktree"
msgstr "опцията „--open-files-in-pager“ изисква търсене в работното дърво"
-#: builtin/grep.c:1157
+#: builtin/grep.c:1171
msgid "--cached or --untracked cannot be used with --no-index"
msgstr "опциите „--cached“ и „--untracked“ са несъвместими с „--no-index“"
-#: builtin/grep.c:1160
+#: builtin/grep.c:1174
msgid "--untracked cannot be used with --cached"
msgstr "опциите „--untracked“ и „--cached“ са несъвместими"
-#: builtin/grep.c:1166
+#: builtin/grep.c:1180
msgid "--[no-]exclude-standard cannot be used for tracked contents"
msgstr ""
"опциите „--(no-)exclude-standard“ са несъвместими с търсене по следени "
"файлове"
-#: builtin/grep.c:1174
+#: builtin/grep.c:1188
msgid "both --cached and trees are given"
msgstr "опцията „--cached“ е несъвместима със задаване на дърво"
-#: builtin/hash-object.c:85
+#: builtin/hash-object.c:83
msgid ""
"git hash-object [-t <type>] [-w] [--path=<file> | --no-filters] [--stdin] "
"[--] <file>..."
@@ -16710,97 +17071,109 @@
"git hash-object [-t ВИД] [-w] [--path=ФАЙЛ | --no-filters] [--stdin] [--] "
"ФАЙЛ…"
-#: builtin/hash-object.c:86
+#: builtin/hash-object.c:84
msgid "git hash-object --stdin-paths"
msgstr "git hash-object --stdin-paths"
-#: builtin/hash-object.c:98
+#: builtin/hash-object.c:96
msgid "object type"
msgstr "ВИД на обекта"
-#: builtin/hash-object.c:99
+#: builtin/hash-object.c:97
msgid "write the object into the object database"
msgstr "записване на обекта в базата от данни за обектите"
-#: builtin/hash-object.c:101
+#: builtin/hash-object.c:99
msgid "read the object from stdin"
msgstr "изчитане на обекта от стандартния вход"
-#: builtin/hash-object.c:103
+#: builtin/hash-object.c:101
msgid "store file as is without filters"
msgstr "запазване на файла както е — без филтри"
-#: builtin/hash-object.c:104
+#: builtin/hash-object.c:102
msgid ""
"just hash any random garbage to create corrupt objects for debugging Git"
msgstr ""
"създаване и изчисляване на контролни суми на произволни данни за повредени "
"обекти за трасиране на Git"
-#: builtin/hash-object.c:105
+#: builtin/hash-object.c:103
msgid "process file as it were from this path"
msgstr "обработване на ФАЙЛа все едно е с този път"
-#: builtin/help.c:47
+#: builtin/help.c:55
msgid "print all available commands"
msgstr "показване на всички налични команди"
-#: builtin/help.c:48
+#: builtin/help.c:57
msgid "exclude guides"
msgstr "без въведения"
-#: builtin/help.c:49
-msgid "print list of useful guides"
-msgstr "показване на списък с въведения"
-
-#: builtin/help.c:50
-msgid "print all configuration variable names"
-msgstr "показване на имената на всички конфигуриращи променливи"
-
-#: builtin/help.c:52
+#: builtin/help.c:58
msgid "show man page"
msgstr "показване на страница от ръководството"
-#: builtin/help.c:53
+#: builtin/help.c:59
msgid "show manual in web browser"
msgstr "показване на страница от ръководството в уеб браузър"
-#: builtin/help.c:55
+#: builtin/help.c:61
msgid "show info page"
msgstr "показване на информационна страница"
-#: builtin/help.c:57
+#: builtin/help.c:63
msgid "print command description"
msgstr "извеждане на описанието на команда"
-#: builtin/help.c:62
-msgid "git help [--all] [--guides] [--man | --web | --info] [<command>]"
-msgstr "git help [--all] [--guides] [--man | --web | --info] [КОМАНДА]"
+#: builtin/help.c:65
+msgid "print list of useful guides"
+msgstr "показване на списък с въведения"
-#: builtin/help.c:163
+#: builtin/help.c:67
+msgid "print all configuration variable names"
+msgstr "показване на имената на всички конфигуриращи променливи"
+
+#: builtin/help.c:78
+msgid ""
+"git help [-a|--all] [--[no-]verbose]]\n"
+" [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
+msgstr ""
+"git help [-a|--all] [--[no-]verbose]]\n"
+" [[-i|--info] [-m|--man] [-w|--web]] [КОМАНДА]"
+
+#: builtin/help.c:80
+msgid "git help [-g|--guides]"
+msgstr "git help [-g|--guides]"
+
+#: builtin/help.c:81
+msgid "git help [-c|--config]"
+msgstr "git help [-c|--config]"
+
+#: builtin/help.c:196
#, c-format
msgid "unrecognized help format '%s'"
msgstr "непознат формат на помощта „%s“"
-#: builtin/help.c:190
+#: builtin/help.c:223
msgid "Failed to start emacsclient."
msgstr "Неуспешно стартиране на „emacsclient“."
-#: builtin/help.c:203
+#: builtin/help.c:236
msgid "Failed to parse emacsclient version."
msgstr "Версията на „emacsclient“ не може да се анализира."
-#: builtin/help.c:211
+#: builtin/help.c:244
#, c-format
msgid "emacsclient version '%d' too old (< 22)."
msgstr "Прекалено стара версия на „emacsclient“ — %d (< 22)."
-#: builtin/help.c:229 builtin/help.c:251 builtin/help.c:261 builtin/help.c:269
+#: builtin/help.c:262 builtin/help.c:284 builtin/help.c:294 builtin/help.c:302
#, c-format
msgid "failed to exec '%s'"
msgstr "неуспешно изпълнение на „%s“"
-#: builtin/help.c:307
+#: builtin/help.c:340
#, c-format
msgid ""
"'%s': path for unsupported man viewer.\n"
@@ -16809,7 +17182,7 @@
"„%s“: път към неподдържана програма за преглед на\n"
" ръководството. Вместо нея пробвайте „man.<tool>.cmd“."
-#: builtin/help.c:319
+#: builtin/help.c:352
#, c-format
msgid ""
"'%s': cmd for supported man viewer.\n"
@@ -16818,342 +17191,327 @@
"„%s“: команда за поддържана програма за преглед на\n"
" ръководството. Вместо нея пробвайте „man.<tool>.path“."
-#: builtin/help.c:436
+#: builtin/help.c:467
#, c-format
msgid "'%s': unknown man viewer."
msgstr "„%s“: непозната програма за преглед на ръководството."
-#: builtin/help.c:452
+#: builtin/help.c:483
msgid "no man viewer handled the request"
msgstr "никоя програма за преглед на ръководство не успя да обработи заявката"
-#: builtin/help.c:459
+#: builtin/help.c:490
msgid "no info viewer handled the request"
msgstr ""
"никоя програма за преглед на информационните страници не успя да обработи "
"заявката"
-#: builtin/help.c:517 builtin/help.c:528 git.c:348
+#: builtin/help.c:551 builtin/help.c:562 git.c:348
#, c-format
msgid "'%s' is aliased to '%s'"
msgstr "„%s“ е псевдоним на „%s“"
-#: builtin/help.c:531 git.c:380
+#: builtin/help.c:565 git.c:380
#, c-format
msgid "bad alias.%s string: %s"
msgstr "неправилен низ за настройката „alias.%s“: „%s“"
-#: builtin/help.c:561 builtin/help.c:591
+#: builtin/help.c:581
+msgid "this option doesn't take any other arguments"
+msgstr "опцията не приема аргументи"
+
+#: builtin/help.c:602 builtin/help.c:629
#, c-format
msgid "usage: %s%s"
msgstr "употреба: %s%s"
-#: builtin/help.c:575
+#: builtin/help.c:624
msgid "'git help config' for more information"
msgstr "За повече информация изпълнете „git help config“"
-#: builtin/index-pack.c:222
+#: builtin/index-pack.c:221
#, c-format
msgid "object type mismatch at %s"
msgstr "неправилен вид на обекта „%s“"
-#: builtin/index-pack.c:242
+#: builtin/index-pack.c:241
#, c-format
msgid "did not receive expected object %s"
msgstr "очакваният обект „%s“ не бе получен"
-#: builtin/index-pack.c:245
+#: builtin/index-pack.c:244
#, c-format
msgid "object %s: expected type %s, found %s"
msgstr "неправилен вид на обекта „%s“: очакваше се „%s“, а бе получен „%s“"
-#: builtin/index-pack.c:295
+#: builtin/index-pack.c:294
#, c-format
msgid "cannot fill %d byte"
msgid_plural "cannot fill %d bytes"
msgstr[0] "не може да се запълни %d байт"
msgstr[1] "не може да се запълнят %d байта"
-#: builtin/index-pack.c:305
+#: builtin/index-pack.c:304
msgid "early EOF"
msgstr "неочакван край на файл"
-#: builtin/index-pack.c:306
+#: builtin/index-pack.c:305
msgid "read error on input"
msgstr "грешка при четене на входните данни"
-#: builtin/index-pack.c:318
+#: builtin/index-pack.c:317
msgid "used more bytes than were available"
msgstr "използвани са повече от наличните байтове"
-#: builtin/index-pack.c:325 builtin/pack-objects.c:756
+#: builtin/index-pack.c:324 builtin/pack-objects.c:756
msgid "pack too large for current definition of off_t"
msgstr "пакетният файл е прекалено голям за текущата стойност на типа „off_t“"
-#: builtin/index-pack.c:328 builtin/unpack-objects.c:95
+#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
msgid "pack exceeds maximum allowed size"
msgstr "пакетният файл надвишава максималния възможен размер"
-#: builtin/index-pack.c:343
-#, c-format
-msgid "unable to create '%s'"
-msgstr "пакетният файл „%s“ не може да бъде създаден"
-
-#: builtin/index-pack.c:349
-#, c-format
-msgid "cannot open packfile '%s'"
-msgstr "пакетният файл „%s“ не може да бъде отворен"
-
-#: builtin/index-pack.c:363
+#: builtin/index-pack.c:358
msgid "pack signature mismatch"
msgstr "несъответствие в подписа към пакетния файл"
-#: builtin/index-pack.c:365
+#: builtin/index-pack.c:360
#, c-format
msgid "pack version %<PRIu32> unsupported"
msgstr "не се поддържа пакетиране вeрсия „%<PRIu32>“"
-#: builtin/index-pack.c:381
+#: builtin/index-pack.c:376
#, c-format
msgid "pack has bad object at offset %<PRIuMAX>: %s"
msgstr "повреден обект в пакетния файл при отместване %<PRIuMAX>: %s"
-#: builtin/index-pack.c:487
+#: builtin/index-pack.c:482
#, c-format
msgid "inflate returned %d"
msgstr "декомпресирането с „inflate“ върна %d"
-#: builtin/index-pack.c:536
+#: builtin/index-pack.c:531
msgid "offset value overflow for delta base object"
msgstr "стойността на отместването за обекта-разлика води до препълване"
-#: builtin/index-pack.c:544
+#: builtin/index-pack.c:539
msgid "delta base offset is out of bound"
msgstr "стойността на отместването за обекта-разлика е извън диапазона"
-#: builtin/index-pack.c:552
+#: builtin/index-pack.c:547
#, c-format
msgid "unknown object type %d"
msgstr "непознат вид обект %d"
-#: builtin/index-pack.c:583
+#: builtin/index-pack.c:578
msgid "cannot pread pack file"
msgstr "пакетният файл не може да бъде прочетен"
-#: builtin/index-pack.c:585
+#: builtin/index-pack.c:580
#, c-format
msgid "premature end of pack file, %<PRIuMAX> byte missing"
msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
msgstr[0] "неочакван край на файл, липсва %<PRIuMAX> байт"
msgstr[1] "неочакван край на файл, липсват %<PRIuMAX> байта"
-#: builtin/index-pack.c:611
+#: builtin/index-pack.c:606
msgid "serious inflate inconsistency"
msgstr "сериозна грешка при декомпресиране с „inflate“"
-#: builtin/index-pack.c:756 builtin/index-pack.c:762 builtin/index-pack.c:786
-#: builtin/index-pack.c:825 builtin/index-pack.c:834
+#: builtin/index-pack.c:751 builtin/index-pack.c:757 builtin/index-pack.c:781
+#: builtin/index-pack.c:820 builtin/index-pack.c:829
#, c-format
msgid "SHA1 COLLISION FOUND WITH %s !"
msgstr ""
"СЪВПАДЕНИЕ НА СТОЙНОСТИТЕ ЗА СУМИТЕ ЗА SHA1: „%s“ НА ДВА РАЗЛИЧНИ ОБЕКТА!"
-#: builtin/index-pack.c:759 builtin/pack-objects.c:292
+#: builtin/index-pack.c:754 builtin/pack-objects.c:292
#: builtin/pack-objects.c:352 builtin/pack-objects.c:458
#, c-format
msgid "unable to read %s"
msgstr "обектът „%s“ не може да бъде прочетен"
-#: builtin/index-pack.c:823
+#: builtin/index-pack.c:818
#, c-format
msgid "cannot read existing object info %s"
msgstr "съществуващият обект в „%s“ не може да бъде прочетен"
-#: builtin/index-pack.c:831
+#: builtin/index-pack.c:826
#, c-format
msgid "cannot read existing object %s"
msgstr "съществуващият обект „%s“ не може да бъде прочетен"
-#: builtin/index-pack.c:845
+#: builtin/index-pack.c:840
#, c-format
msgid "invalid blob object %s"
msgstr "неправилен обект-BLOB „%s“"
-#: builtin/index-pack.c:848 builtin/index-pack.c:867
+#: builtin/index-pack.c:843 builtin/index-pack.c:862
msgid "fsck error in packed object"
msgstr "грешка при проверката на пакетирани обекти"
-#: builtin/index-pack.c:869
+#: builtin/index-pack.c:864
#, c-format
msgid "Not all child objects of %s are reachable"
msgstr "Някои обекти, наследници на „%s“, не може да бъдат достигнати"
-#: builtin/index-pack.c:930 builtin/index-pack.c:977
+#: builtin/index-pack.c:925 builtin/index-pack.c:972
msgid "failed to apply delta"
msgstr "разликата не може да бъде приложена"
-#: builtin/index-pack.c:1160
+#: builtin/index-pack.c:1156
msgid "Receiving objects"
msgstr "Получаване на обекти"
-#: builtin/index-pack.c:1160
+#: builtin/index-pack.c:1156
msgid "Indexing objects"
msgstr "Индексиране на обекти"
-#: builtin/index-pack.c:1194
+#: builtin/index-pack.c:1190
msgid "pack is corrupted (SHA1 mismatch)"
msgstr "пакетният файл е повреден (нееднакви суми по SHA1)"
-#: builtin/index-pack.c:1199
+#: builtin/index-pack.c:1195
msgid "cannot fstat packfile"
msgstr "не може да се получи информация за пакетния файл с „fstat“"
-#: builtin/index-pack.c:1202
+#: builtin/index-pack.c:1198
msgid "pack has junk at the end"
msgstr "в края на пакетния файл има повредени данни"
-#: builtin/index-pack.c:1214
+#: builtin/index-pack.c:1210
msgid "confusion beyond insanity in parse_pack_objects()"
-msgstr ""
-"фатална грешка във функцията „parse_pack_objects“. Това е грешка в Git, "
-"докладвайте я на разработчиците, като пратите е-писмо на адрес: „git@vger."
-"kernel.org“."
+msgstr "фатална грешка във функцията „parse_pack_objects“"
-#: builtin/index-pack.c:1237
+#: builtin/index-pack.c:1233
msgid "Resolving deltas"
msgstr "Откриване на съответните разлики"
-#: builtin/index-pack.c:1248 builtin/pack-objects.c:2892
+#: builtin/index-pack.c:1244 builtin/pack-objects.c:2905
#, c-format
msgid "unable to create thread: %s"
msgstr "не може да се създаде нишка: %s"
-#: builtin/index-pack.c:1281
+#: builtin/index-pack.c:1277
msgid "confusion beyond insanity"
-msgstr ""
-"фатална грешка във функцията „conclude_pack“. Това е грешка в Git, "
-"докладвайте я на разработчиците, като пратите е-писмо на адрес: „git@vger."
-"kernel.org“."
+msgstr "фатална грешка"
-#: builtin/index-pack.c:1287
+#: builtin/index-pack.c:1283
#, c-format
msgid "completed with %d local object"
msgid_plural "completed with %d local objects"
msgstr[0] "действието завърши с %d локален обект"
msgstr[1] "действието завърши с %d локални обекта"
-#: builtin/index-pack.c:1299
+#: builtin/index-pack.c:1295
#, c-format
msgid "Unexpected tail checksum for %s (disk corruption?)"
msgstr ""
"Неочаквана последваща сума за грешки за „%s“ (причината може да е грешка в "
"диска)"
-#: builtin/index-pack.c:1303
+#: builtin/index-pack.c:1299
#, c-format
msgid "pack has %d unresolved delta"
msgid_plural "pack has %d unresolved deltas"
msgstr[0] "в пакета има %d ненапасваща разлика"
msgstr[1] "в пакета има %d ненапасващи разлики"
-#: builtin/index-pack.c:1327
+#: builtin/index-pack.c:1323
#, c-format
msgid "unable to deflate appended object (%d)"
msgstr "добавеният обект не може да се компресира с „deflate“: %d"
-#: builtin/index-pack.c:1423
+#: builtin/index-pack.c:1419
#, c-format
msgid "local object %s is corrupt"
msgstr "локалният обект „%s“ е повреден"
-#: builtin/index-pack.c:1444
+#: builtin/index-pack.c:1440
#, c-format
msgid "packfile name '%s' does not end with '.%s'"
msgstr "името на пакетния файл „%s“ не завършва с „%s“"
-#: builtin/index-pack.c:1468
+#: builtin/index-pack.c:1464
#, c-format
msgid "cannot write %s file '%s'"
msgstr "грешка при запис на файла „%s“ „%s“"
-#: builtin/index-pack.c:1476
+#: builtin/index-pack.c:1472
#, c-format
msgid "cannot close written %s file '%s'"
msgstr "грешка при затварянето на записания файл „%s“ „%s“"
-#: builtin/index-pack.c:1502
+#: builtin/index-pack.c:1489
+#, c-format
+msgid "unable to rename temporary '*.%s' file to '%s'"
+msgstr "временният файл „*.%s“ не може да се преименува на „%s“"
+
+#: builtin/index-pack.c:1514
msgid "error while closing pack file"
msgstr "грешка при затварянето на пакетния файл"
-#: builtin/index-pack.c:1516
-msgid "cannot store pack file"
-msgstr "пакетният файл не може да бъде запазен"
-
-#: builtin/index-pack.c:1524
-msgid "cannot store index file"
-msgstr "файлът за индекса не може да бъде съхранен"
-
-#: builtin/index-pack.c:1579 builtin/pack-objects.c:3137
+#: builtin/index-pack.c:1573 builtin/pack-objects.c:3150
#, c-format
msgid "bad pack.indexversion=%<PRIu32>"
msgstr "зададена е неправилна версия пакетиране: „pack.indexversion=%<PRIu32>“"
-#: builtin/index-pack.c:1649
+#: builtin/index-pack.c:1643
#, c-format
msgid "Cannot open existing pack file '%s'"
msgstr "Съществуващият пакетен файл „%s“ не може да бъде отворен"
-#: builtin/index-pack.c:1651
+#: builtin/index-pack.c:1645
#, c-format
msgid "Cannot open existing pack idx file for '%s'"
msgstr "Съществуващият индекс за пакетния файл „%s“ не може да бъде отворен"
-#: builtin/index-pack.c:1699
+#: builtin/index-pack.c:1693
#, c-format
msgid "non delta: %d object"
msgid_plural "non delta: %d objects"
msgstr[0] "%d обект не е разлика"
msgstr[1] "%d обекта не са разлика"
-#: builtin/index-pack.c:1706
+#: builtin/index-pack.c:1700
#, 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:1748
+#: builtin/index-pack.c:1742
msgid "Cannot come back to cwd"
msgstr "Процесът не може да се върне към предишната работна директория"
-#: builtin/index-pack.c:1802 builtin/index-pack.c:1805
-#: builtin/index-pack.c:1821 builtin/index-pack.c:1825
+#: builtin/index-pack.c:1796 builtin/index-pack.c:1799
+#: builtin/index-pack.c:1819 builtin/index-pack.c:1823
#, c-format
msgid "bad %s"
msgstr "неправилна стойност „%s“"
-#: builtin/index-pack.c:1831 builtin/init-db.c:379 builtin/init-db.c:614
+#: builtin/index-pack.c:1829 builtin/init-db.c:379 builtin/init-db.c:614
#, c-format
msgid "unknown hash algorithm '%s'"
msgstr "непознат алгоритъм за контролни суми „%s“"
-#: builtin/index-pack.c:1850
+#: builtin/index-pack.c:1848
msgid "--fix-thin cannot be used without --stdin"
msgstr "опцията „--fix-thin“ изисква „--stdin“"
-#: builtin/index-pack.c:1852
+#: builtin/index-pack.c:1850
msgid "--stdin requires a git repository"
msgstr "„--stdin“ изисква хранилище на git"
-#: builtin/index-pack.c:1854
+#: builtin/index-pack.c:1852
msgid "--object-format cannot be used with --stdin"
msgstr "опцията „--object-format“ и „--stdin“ са несъвместими"
-#: builtin/index-pack.c:1869
+#: builtin/index-pack.c:1867
msgid "--verify with no packfile name given"
msgstr "опцията „--verify“ изисква име на пакетен файл"
-#: builtin/index-pack.c:1935 builtin/unpack-objects.c:584
+#: builtin/index-pack.c:1933 builtin/unpack-objects.c:584
msgid "fsck error in pack objects"
msgstr "грешка при проверка с „fsck“ на пакетните обекти"
@@ -17365,7 +17723,7 @@
#: builtin/interpret-trailers.c:123
msgid "--trailer with --only-input does not make sense"
-msgstr "опцията „--trailer“ е несъвместима с „--name-only“"
+msgstr "опцията „--trailer“ е несъвместима с „--only-input“"
#: builtin/interpret-trailers.c:133
msgid "no input file given for in-place editing"
@@ -17738,7 +18096,7 @@
#: builtin/log.c:1933
msgid "--subject-prefix/--rfc and -k are mutually exclusive"
-msgstr "опциите „--subject-prefix“/„-rfc“ и „-k“ са несъвместими"
+msgstr "опциите „--subject-prefix“/„--rfc“ и „-k“ са несъвместими"
#: builtin/log.c:1941
msgid "--name-only does not make sense"
@@ -17815,131 +18173,135 @@
"Следеният отдалечен клон не бе открит, затова изрично задайте "
"ОТДАЛЕЧЕН_КЛОН.\n"
-#: builtin/ls-files.c:563
+#: builtin/ls-files.c:561
msgid "git ls-files [<options>] [<file>...]"
msgstr "git ls-files [ОПЦИЯ…] [ФАЙЛ…]"
-#: builtin/ls-files.c:619
+#: builtin/ls-files.c:615
+msgid "separate paths with the NUL character"
+msgstr "разделяне на пътищата с нулевия знак „NUL“"
+
+#: builtin/ls-files.c:617
msgid "identify the file status with tags"
msgstr "извеждане на състоянието на файловете с еднобуквени флагове"
-#: builtin/ls-files.c:621
+#: builtin/ls-files.c:619
msgid "use lowercase letters for 'assume unchanged' files"
msgstr "малки букви за файловете, които да се счетат за непроменени"
-#: builtin/ls-files.c:623
+#: builtin/ls-files.c:621
msgid "use lowercase letters for 'fsmonitor clean' files"
msgstr "малки букви за файловете за командата „fsmonitor clean“"
-#: builtin/ls-files.c:625
+#: builtin/ls-files.c:623
msgid "show cached files in the output (default)"
msgstr "извеждане на кешираните файлове (стандартно)"
-#: builtin/ls-files.c:627
+#: builtin/ls-files.c:625
msgid "show deleted files in the output"
msgstr "извеждане на изтритите файлове"
-#: builtin/ls-files.c:629
+#: builtin/ls-files.c:627
msgid "show modified files in the output"
msgstr "извеждане на променените файлове"
-#: builtin/ls-files.c:631
+#: builtin/ls-files.c:629
msgid "show other files in the output"
msgstr "извеждане на другите файлове"
-#: builtin/ls-files.c:633
+#: builtin/ls-files.c:631
msgid "show ignored files in the output"
msgstr "извеждане на игнорираните файлове"
-#: builtin/ls-files.c:636
+#: builtin/ls-files.c:634
msgid "show staged contents' object name in the output"
msgstr "извеждане на името на обекта за съдържанието на индекса"
-#: builtin/ls-files.c:638
+#: builtin/ls-files.c:636
msgid "show files on the filesystem that need to be removed"
msgstr "извеждане на файловете, които трябва да бъдат изтрити"
-#: builtin/ls-files.c:640
+#: builtin/ls-files.c:638
msgid "show 'other' directories' names only"
msgstr "извеждане само на името на другите (неследените) директории"
-#: builtin/ls-files.c:642
+#: builtin/ls-files.c:640
msgid "show line endings of files"
msgstr "извеждане на знаците за край на ред във файловете"
-#: builtin/ls-files.c:644
+#: builtin/ls-files.c:642
msgid "don't show empty directories"
msgstr "без извеждане на празните директории"
-#: builtin/ls-files.c:647
+#: builtin/ls-files.c:645
msgid "show unmerged files in the output"
msgstr "извеждане на неслетите файлове"
-#: builtin/ls-files.c:649
+#: builtin/ls-files.c:647
msgid "show resolve-undo information"
msgstr "извеждане на информацията за отмяна на разрешените подавания"
-#: builtin/ls-files.c:651
+#: builtin/ls-files.c:649
msgid "skip files matching pattern"
msgstr "прескачане на файловете напасващи ШАБЛОНа"
-#: builtin/ls-files.c:654
-msgid "exclude patterns are read from <file>"
-msgstr "шаблоните за игнориране да се прочетат от този ФАЙЛ"
+#: builtin/ls-files.c:652
+msgid "read exclude patterns from <file>"
+msgstr "изчитане на шаблоните за игнориране от ФАЙЛ"
-#: builtin/ls-files.c:657
+#: builtin/ls-files.c:655
msgid "read additional per-directory exclude patterns in <file>"
msgstr ""
"изчитане на допълнителните шаблони за игнориране по директория от този ФАЙЛ"
-#: builtin/ls-files.c:659
+#: builtin/ls-files.c:657
msgid "add the standard git exclusions"
msgstr "добавяне на стандартно игнорираните от Git файлове"
-#: builtin/ls-files.c:663
+#: builtin/ls-files.c:661
msgid "make the output relative to the project top directory"
msgstr "пътищата да са относителни спрямо основната директория на проекта"
-#: builtin/ls-files.c:666
+#: builtin/ls-files.c:664
msgid "recurse through submodules"
msgstr "рекурсивно обхождане подмодулите"
-#: builtin/ls-files.c:668
+#: builtin/ls-files.c:666
msgid "if any <file> is not in the index, treat this as an error"
msgstr "грешка, ако някой от тези ФАЙЛове не е в индекса"
-#: builtin/ls-files.c:669
+#: builtin/ls-files.c:667
msgid "tree-ish"
msgstr "УКАЗАТЕЛ_КЪМ_ДЪРВО"
-#: builtin/ls-files.c:670
+#: builtin/ls-files.c:668
msgid "pretend that paths removed since <tree-ish> are still present"
msgstr ""
"считане, че пътищата изтрити след УКАЗАТЕЛя_КЪМ_ДЪРВО все още съществуват"
-#: builtin/ls-files.c:672
+#: builtin/ls-files.c:670
msgid "show debugging data"
msgstr "извеждане на информацията за изчистване на грешки"
-#: builtin/ls-files.c:674
+#: builtin/ls-files.c:672
msgid "suppress duplicate entries"
msgstr "без повтаряне на записите"
#: builtin/ls-remote.c:9
msgid ""
"git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
-" [-q | --quiet] [--exit-code] [--get-url]\n"
-" [--symref] [<repository> [<refs>...]]"
+" [-q | --quiet] [--exit-code] [--get-url]\n"
+" [--symref] [<repository> [<refs>...]]"
msgstr ""
-"git ls-remote [--heads] [--tags] [--refs] [--upload-pack=КОМАНДА]\n"
-" [-q | --quiet] [--exit-code] [--get-url]\n"
-" [--symref] [ХРАНИЛИЩЕ [УКАЗАТЕЛ…]]"
+"git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
+" [-q | --quiet] [--exit-code] [--get-url]\n"
+" [--symref] [ХРАНИЛИЩЕ [УКАЗАТЕЛ…]]"
#: builtin/ls-remote.c:60
msgid "do not print remote URL"
msgstr "без извеждане на адресите на отдалечените хранилища"
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1399
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1103
msgid "exec"
msgstr "КОМАНДА"
@@ -18012,9 +18374,7 @@
#. TRANSLATORS: keep <> in "<" mail ">" info.
#: builtin/mailinfo.c:14
msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
-msgstr ""
-"git mailinfo [ОПЦИЯ…] СЪОБЩЕНИЕ КРЪПКА < ПИСМО >ИНФОРМАЦИЯ\n"
-"git diff --no-index ПЪТ ПЪТ"
+msgstr "git mailinfo [ОПЦИЯ…] СЪОБЩЕНИЕ КРЪПКА < ПИСМО >ИНФОРМАЦИЯ"
#: builtin/mailinfo.c:58
msgid "keep subject"
@@ -18063,7 +18423,7 @@
msgid "use headers in message's body"
msgstr "заглавни части в тялото на писмото"
-#: builtin/mailsplit.c:241
+#: builtin/mailsplit.c:239
#, c-format
msgid "empty mbox: '%s'"
msgstr "празна пощенска кутия mbox: „%s“"
@@ -18180,146 +18540,146 @@
msgid "Merging %s with %s\n"
msgstr "Сливане на „%s“ с „%s“\n"
-#: builtin/merge.c:58
+#: builtin/merge.c:59
msgid "git merge [<options>] [<commit>...]"
msgstr "git merge [ОПЦИЯ…] [ПОДАВАНЕ…]"
-#: builtin/merge.c:123
+#: builtin/merge.c:124
msgid "switch `m' requires a value"
msgstr "опцията „-m“ изисква стойност"
-#: builtin/merge.c:146
+#: builtin/merge.c:147
#, c-format
msgid "option `%s' requires a value"
msgstr "опцията „%s“ изисква стойност"
-#: builtin/merge.c:199
+#: builtin/merge.c:200
#, c-format
msgid "Could not find merge strategy '%s'.\n"
msgstr "Няма такава стратегия за сливане: „%s“.\n"
-#: builtin/merge.c:200
+#: builtin/merge.c:201
#, c-format
msgid "Available strategies are:"
msgstr "Наличните стратегии са:"
-#: builtin/merge.c:205
+#: builtin/merge.c:206
#, c-format
msgid "Available custom strategies are:"
msgstr "Допълнителните стратегии са:"
-#: builtin/merge.c:256 builtin/pull.c:133
+#: builtin/merge.c:257 builtin/pull.c:134
msgid "do not show a diffstat at the end of the merge"
msgstr "без извеждане на статистиката след завършване на сливане"
-#: builtin/merge.c:259 builtin/pull.c:136
+#: builtin/merge.c:260 builtin/pull.c:137
msgid "show a diffstat at the end of the merge"
msgstr "извеждане на статистиката след завършване на сливане"
-#: builtin/merge.c:260 builtin/pull.c:139
+#: builtin/merge.c:261 builtin/pull.c:140
msgid "(synonym to --stat)"
msgstr "(псевдоним на „--stat“)"
-#: builtin/merge.c:262 builtin/pull.c:142
+#: builtin/merge.c:263 builtin/pull.c:143
msgid "add (at most <n>) entries from shortlog to merge commit message"
msgstr ""
"добавяне (на максимум такъв БРОЙ) записи от съкратения журнал в съобщението "
"за подаване"
-#: builtin/merge.c:265 builtin/pull.c:148
+#: builtin/merge.c:266 builtin/pull.c:149
msgid "create a single commit instead of doing a merge"
msgstr "създаване на едно подаване вместо извършване на сливане"
-#: builtin/merge.c:267 builtin/pull.c:151
+#: builtin/merge.c:268 builtin/pull.c:152
msgid "perform a commit if the merge succeeds (default)"
msgstr "извършване на подаване при успешно сливане (стандартно действие)"
-#: builtin/merge.c:269 builtin/pull.c:154
+#: builtin/merge.c:270 builtin/pull.c:155
msgid "edit message before committing"
msgstr "редактиране на съобщението преди подаване"
-#: builtin/merge.c:271
+#: builtin/merge.c:272
msgid "allow fast-forward (default)"
msgstr "позволяване на превъртане (стандартно действие)"
-#: builtin/merge.c:273 builtin/pull.c:161
+#: builtin/merge.c:274 builtin/pull.c:162
msgid "abort if fast-forward is not possible"
msgstr "преустановяване, ако превъртането е невъзможно"
-#: builtin/merge.c:277 builtin/pull.c:164
+#: builtin/merge.c:278 builtin/pull.c:168
msgid "verify that the named commit has a valid GPG signature"
msgstr "проверка, че указаното подаване е с правилен подпис на GPG"
-#: builtin/merge.c:278 builtin/notes.c:787 builtin/pull.c:168
-#: builtin/rebase.c:540 builtin/rebase.c:1413 builtin/revert.c:114
+#: builtin/merge.c:279 builtin/notes.c:785 builtin/pull.c:172
+#: builtin/rebase.c:1117 builtin/revert.c:114
msgid "strategy"
msgstr "СТРАТЕГИЯ"
-#: builtin/merge.c:279 builtin/pull.c:169
+#: builtin/merge.c:280 builtin/pull.c:173
msgid "merge strategy to use"
msgstr "СТРАТЕГИЯ за сливане, която да се ползва"
-#: builtin/merge.c:280 builtin/pull.c:172
+#: builtin/merge.c:281 builtin/pull.c:176
msgid "option=value"
msgstr "ОПЦИЯ=СТОЙНОСТ"
-#: builtin/merge.c:281 builtin/pull.c:173
+#: builtin/merge.c:282 builtin/pull.c:177
msgid "option for selected merge strategy"
msgstr "ОПЦИЯ за избраната стратегия за сливане"
-#: builtin/merge.c:283
+#: builtin/merge.c:284
msgid "merge commit message (for a non-fast-forward merge)"
msgstr "СЪОБЩЕНИЕ при подаването със сливане (при същински сливания)"
-#: builtin/merge.c:290
+#: builtin/merge.c:291
msgid "abort the current in-progress merge"
msgstr "преустановяване на текущото сливане"
-#: builtin/merge.c:292
+#: builtin/merge.c:293
msgid "--abort but leave index and working tree alone"
-msgstr "преустановяване без промяна на индекса и работното дърво"
+msgstr "преустановяване (--abort) без промяна на индекса и работното дърво"
-#: builtin/merge.c:294
+#: builtin/merge.c:295
msgid "continue the current in-progress merge"
msgstr "продължаване на текущото сливане"
-#: builtin/merge.c:296 builtin/pull.c:180
+#: builtin/merge.c:297 builtin/pull.c:184
msgid "allow merging unrelated histories"
msgstr "позволяване на сливане на независими истории"
-#: builtin/merge.c:303
+#: builtin/merge.c:304
msgid "bypass pre-merge-commit and commit-msg hooks"
msgstr ""
"без изпълнение на куките преди подаване и сливане и при промяна на "
"съобщението за подаване (pre-merge-commit и commit-msg)"
-#: builtin/merge.c:320
+#: builtin/merge.c:321
msgid "could not run stash."
msgstr "не може да се извърши скатаване"
-#: builtin/merge.c:325
+#: builtin/merge.c:326
msgid "stash failed"
msgstr "неуспешно скатаване"
-#: builtin/merge.c:330
+#: builtin/merge.c:331
#, c-format
msgid "not a valid object: %s"
msgstr "неправилен обект: „%s“"
-#: builtin/merge.c:352 builtin/merge.c:369
+#: builtin/merge.c:353 builtin/merge.c:370
msgid "read-tree failed"
msgstr "неуспешно прочитане на обект-дърво"
-#: builtin/merge.c:400
+#: builtin/merge.c:401
msgid "Already up to date. (nothing to squash)"
msgstr "Вече е обновено (няма какво да се вкара)"
-#: builtin/merge.c:414
+#: builtin/merge.c:415
#, c-format
msgid "Squash commit -- not updating HEAD\n"
msgstr "Вкарано подаване — указателят „HEAD“ няма да бъде обновен\n"
-#: builtin/merge.c:464
+#: builtin/merge.c:465
#, c-format
msgid "No merge message -- not updating HEAD\n"
msgstr ""
@@ -18330,38 +18690,38 @@
msgid "'%s' does not point to a commit"
msgstr "„%s“ не сочи към подаване"
-#: builtin/merge.c:602
+#: builtin/merge.c:603
#, c-format
msgid "Bad branch.%s.mergeoptions string: %s"
msgstr "Неправилен низ за настройката „branch.%s.mergeoptions“: „%s“"
-#: builtin/merge.c:728
+#: builtin/merge.c:730
msgid "Not handling anything other than two heads merge."
msgstr "Поддържа се само сливане на точно две истории."
-#: builtin/merge.c:741
+#: builtin/merge.c:743
#, c-format
-msgid "Unknown option for merge-recursive: -X%s"
-msgstr "Непозната опция за рекурсивното сливане „merge-recursive“: „-X%s“"
+msgid "unknown strategy option: -X%s"
+msgstr "непозната опция за стратегия: -X%s"
-#: builtin/merge.c:760 t/helper/test-fast-rebase.c:223
+#: builtin/merge.c:762 t/helper/test-fast-rebase.c:223
#, c-format
msgid "unable to write %s"
msgstr "„%s“ не може да бъде записан"
-#: builtin/merge.c:812
+#: builtin/merge.c:814
#, c-format
msgid "Could not read from '%s'"
msgstr "От „%s“ не може да се чете"
-#: builtin/merge.c:821
+#: builtin/merge.c:823
#, c-format
msgid "Not committing merge; use 'git commit' to complete the merge.\n"
msgstr ""
"Сливането няма да бъде подадено. За завършването му и подаването му "
"използвайте командата „git commit“.\n"
-#: builtin/merge.c:827
+#: builtin/merge.c:829
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"
@@ -18370,11 +18730,11 @@
"В съобщението при подаване добавете информация за причината за\n"
"сливането, особено ако сливате обновен отдалечен клон в тематичен клон.\n"
-#: builtin/merge.c:832
+#: builtin/merge.c:834
msgid "An empty message aborts the commit.\n"
msgstr "Празно съобщение предотвратява подаването.\n"
-#: builtin/merge.c:835
+#: builtin/merge.c:837
#, c-format
msgid ""
"Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -18383,76 +18743,76 @@
"Редовете, които започват с „%c“, ще бъдат пропуснати, а празно\n"
"съобщение преустановява подаването.\n"
-#: builtin/merge.c:888
+#: builtin/merge.c:892
msgid "Empty commit message."
msgstr "Празно съобщение при подаване."
-#: builtin/merge.c:903
+#: builtin/merge.c:907
#, c-format
msgid "Wonderful.\n"
msgstr "Първият етап на сливането завърши.\n"
-#: builtin/merge.c:964
+#: builtin/merge.c:968
#, c-format
msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
msgstr ""
"Неуспешно автоматично сливане — коригирайте конфликтите и подайте "
"резултата.\n"
-#: builtin/merge.c:1003
+#: builtin/merge.c:1007
msgid "No current branch."
msgstr "Няма текущ клон."
-#: builtin/merge.c:1005
+#: builtin/merge.c:1009
msgid "No remote for the current branch."
msgstr "Текущият клон не следи никой."
-#: builtin/merge.c:1007
+#: builtin/merge.c:1011
msgid "No default upstream defined for the current branch."
msgstr "Текущият клон не следи никой клон."
-#: builtin/merge.c:1012
+#: builtin/merge.c:1016
#, c-format
msgid "No remote-tracking branch for %s from %s"
msgstr "Никой клон не следи клона „%s“ от хранилището „%s“"
-#: builtin/merge.c:1069
+#: builtin/merge.c:1073
#, c-format
msgid "Bad value '%s' in environment '%s'"
msgstr "Неправилна стойност „%s“ в средата „%s“"
-#: builtin/merge.c:1172
+#: builtin/merge.c:1174
#, c-format
msgid "not something we can merge in %s: %s"
msgstr "не може да се слее в „%s“: %s"
-#: builtin/merge.c:1206
+#: builtin/merge.c:1208
msgid "not something we can merge"
msgstr "не може да се слее"
-#: builtin/merge.c:1316
+#: builtin/merge.c:1321
msgid "--abort expects no arguments"
msgstr "опцията „--abort“ не приема аргументи"
-#: builtin/merge.c:1320
+#: builtin/merge.c:1325
msgid "There is no merge to abort (MERGE_HEAD missing)."
msgstr ""
"Не може да преустановите сливане, защото в момента не се извършва такова "
"(липсва указател „MERGE_HEAD“)."
-#: builtin/merge.c:1338
+#: builtin/merge.c:1343
msgid "--quit expects no arguments"
msgstr "опцията „--quit“ не приема аргументи"
-#: builtin/merge.c:1351
+#: builtin/merge.c:1356
msgid "--continue expects no arguments"
msgstr "опцията „--continue“ не приема аргументи"
-#: builtin/merge.c:1355
+#: builtin/merge.c:1360
msgid "There is no merge in progress (MERGE_HEAD missing)."
msgstr "В момента не се извършва сливане (липсва указател „MERGE_HEAD“)."
-#: builtin/merge.c:1371
+#: builtin/merge.c:1376
msgid ""
"You have not concluded your merge (MERGE_HEAD exists).\n"
"Please, commit your changes before you merge."
@@ -18460,7 +18820,7 @@
"Не сте завършили сливане. (Указателят „MERGE_HEAD“ съществува).\n"
"Подайте промените си, преди да започнете ново сливане."
-#: builtin/merge.c:1378
+#: builtin/merge.c:1383
msgid ""
"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
"Please, commit your changes before you merge."
@@ -18468,100 +18828,94 @@
"Не сте завършили отбиране на подаване (указателят „CHERRY_PICK_HEAD“\n"
"съществува). Подайте промените си, преди да започнете ново сливане."
-#: builtin/merge.c:1381
+#: builtin/merge.c:1386
msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
msgstr ""
"Не сте завършили отбиране на подаване (указателят „CHERRY_PICK_HEAD“\n"
"съществува)."
-#: builtin/merge.c:1395
+#: builtin/merge.c:1400
msgid "You cannot combine --squash with --no-ff."
msgstr "опциите „--squash“ и „--no-ff“ са несъвместими."
-#: builtin/merge.c:1397
+#: builtin/merge.c:1402
msgid "You cannot combine --squash with --commit."
msgstr "опциите „--squash“ и „--commit“ са несъвместими."
-#: builtin/merge.c:1413
+#: builtin/merge.c:1418
msgid "No commit specified and merge.defaultToUpstream not set."
msgstr ""
"Не е указано подаване и настройката „merge.defaultToUpstream“ не е зададена."
-#: builtin/merge.c:1430
+#: builtin/merge.c:1435
msgid "Squash commit into empty head not supported yet"
msgstr "Вкарване на подаване във връх без история все още не се поддържа"
-#: builtin/merge.c:1432
+#: builtin/merge.c:1437
msgid "Non-fast-forward commit does not make sense into an empty head"
msgstr ""
-"Понеже върхът е без история, всички сливания са превъртания, не може да се "
-"извърши същинско сливане изисквано от опцията „--no-ff“"
+"Понеже върхът е без история, сливания, които не са превъртания, са невъзможни"
-#: builtin/merge.c:1437
+#: builtin/merge.c:1442
#, c-format
msgid "%s - not something we can merge"
msgstr "„%s“ — не е нещо, което може да се слее"
-#: builtin/merge.c:1439
+#: builtin/merge.c:1444
msgid "Can merge only exactly one commit into empty head"
msgstr "Може да слеете точно едно подаване във връх без история"
-#: builtin/merge.c:1520
+#: builtin/merge.c:1531
msgid "refusing to merge unrelated histories"
msgstr "независими истории не може да се слеят"
-#: builtin/merge.c:1539
+#: builtin/merge.c:1550
#, c-format
msgid "Updating %s..%s\n"
msgstr "Обновяване „%s..%s“\n"
-#: builtin/merge.c:1585
+#: builtin/merge.c:1598
#, c-format
msgid "Trying really trivial in-index merge...\n"
msgstr "Проба със сливане в рамките на индекса…\n"
-#: builtin/merge.c:1592
+#: builtin/merge.c:1605
#, c-format
msgid "Nope.\n"
msgstr "Неуспешно сливане.\n"
-#: builtin/merge.c:1623
-msgid "Not possible to fast-forward, aborting."
-msgstr "Не може да се извърши превъртане, преустановяване на действието."
-
-#: builtin/merge.c:1651 builtin/merge.c:1716
+#: builtin/merge.c:1664 builtin/merge.c:1730
#, c-format
msgid "Rewinding the tree to pristine...\n"
msgstr "Привеждане на дървото към първоначалното…\n"
-#: builtin/merge.c:1655
+#: builtin/merge.c:1668
#, c-format
msgid "Trying merge strategy %s...\n"
msgstr "Пробване със стратегията за сливане „%s“…\n"
-#: builtin/merge.c:1707
+#: builtin/merge.c:1720
#, c-format
msgid "No merge strategy handled the merge.\n"
msgstr "Никоя стратегия за сливане не може да извърши сливането.\n"
-#: builtin/merge.c:1709
+#: builtin/merge.c:1722
#, c-format
msgid "Merge with strategy %s failed.\n"
msgstr "Неуспешно сливане със стратегия „%s“.\n"
-#: builtin/merge.c:1718
+#: builtin/merge.c:1732
#, c-format
-msgid "Using the %s to prepare resolving by hand.\n"
+msgid "Using the %s strategy to prepare resolving by hand.\n"
msgstr ""
"Ползва се стратегията „%s“, която ще подготви дървото за коригиране на "
"ръка.\n"
-#: builtin/merge.c:1732
+#: builtin/merge.c:1746
#, c-format
msgid "Automatic merge went well; stopped before committing as requested\n"
msgstr ""
-"Автоматичното сливане завърши успешно. Самото подаване не е извършено, "
-"защото бе зададена опцията „--no-commit“.\n"
+"Автоматичното сливане завърши успешно. Самото подаване не е извършено\n"
#: builtin/mktag.c:10
msgid "git mktag"
@@ -18592,15 +18946,15 @@
msgid "object '%s' tagged as '%s', but is a '%s' type"
msgstr "обектът „%s“ е с етикет за %s, но е %s"
-#: builtin/mktag.c:97
+#: builtin/mktag.c:98
msgid "tag on stdin did not pass our strict fsck check"
msgstr "етикетът на стандартния вход не преминава строгата проверка с „fsck“"
-#: builtin/mktag.c:100
+#: builtin/mktag.c:101
msgid "tag on stdin did not refer to a valid object"
msgstr "етикетът на стандартния вход не сочи към правилен обект"
-#: builtin/mktag.c:103 builtin/tag.c:243
+#: builtin/mktag.c:104 builtin/tag.c:243
msgid "unable to write tag file"
msgstr "файлът за етикета не може да бъде запазен"
@@ -18621,37 +18975,55 @@
msgstr "разрешаване на създаването на повече от едно дърво"
#: builtin/multi-pack-index.c:10
-msgid "git multi-pack-index [<options>] write [--preferred-pack=<pack>]"
-msgstr "git multi-pack-index [ОПЦИЯ…] write [--preferred-pack=ПАКЕТ]"
+msgid ""
+"git multi-pack-index [<options>] write [--preferred-pack=<pack>][--refs-"
+"snapshot=<path>]"
+msgstr ""
+"git multi-pack-index [ОПЦИЯ…] write [--preferred-pack=ПАКЕТ] [--refs-"
+"snapshot=ПЪТ]"
-#: builtin/multi-pack-index.c:13
+#: builtin/multi-pack-index.c:14
msgid "git multi-pack-index [<options>] verify"
msgstr "git multi-pack-index [ОПЦИЯ…] verify"
-#: builtin/multi-pack-index.c:16
+#: builtin/multi-pack-index.c:17
msgid "git multi-pack-index [<options>] expire"
msgstr "git multi-pack-index [ОПЦИЯ…] expire"
-#: builtin/multi-pack-index.c:19
+#: builtin/multi-pack-index.c:20
msgid "git multi-pack-index [<options>] repack [--batch-size=<size>]"
msgstr "git multi-pack-index [ОПЦИЯ…] repack [--batch-size=РАЗМЕР]"
-#: builtin/multi-pack-index.c:54
+#: builtin/multi-pack-index.c:57
msgid "object directory containing set of packfile and pack-index pairs"
msgstr ""
"ДИРекторията_с_ОБЕКТи съдържа множество двойки пакетни файлове със "
"съответния им индекс"
-#: builtin/multi-pack-index.c:69
+#: builtin/multi-pack-index.c:98
msgid "preferred-pack"
msgstr "предпочитан_пакет"
-#: builtin/multi-pack-index.c:70
+#: builtin/multi-pack-index.c:99
msgid "pack for reuse when computing a multi-pack bitmap"
msgstr ""
"пакет, който да се преизползва при изчисляване на многопакетна битовата маска"
-#: builtin/multi-pack-index.c:128
+#: builtin/multi-pack-index.c:100
+msgid "write multi-pack bitmap"
+msgstr "запазване на многопакетната битова маска"
+
+#: builtin/multi-pack-index.c:105
+msgid "write multi-pack index containing only given indexes"
+msgstr ""
+"запазване на битовата маска за множество пакети, съдържаща само дадените "
+"индекси"
+
+#: builtin/multi-pack-index.c:107
+msgid "refs snapshot for selecting bitmap commits"
+msgstr "снимка на указателите за избор на подавания по битова маска"
+
+#: builtin/multi-pack-index.c:202
msgid ""
"during repack, collect pack-files of smaller size into a batch that is "
"larger than this size"
@@ -18659,11 +19031,6 @@
"при препакетиране пакетните файлове, които са с по-малък от този размер, да "
"се обединяват в пакети с по-голям от този размер"
-#: builtin/multi-pack-index.c:179
-#, c-format
-msgid "unrecognized subcommand: %s"
-msgstr "непозната подкоманда: %s"
-
#: builtin/mv.c:18
msgid "git mv [<options>] <source>... <destination>"
msgstr "git mv [ОПЦИЯ…] ОБЕКТ… ЦЕЛ"
@@ -18692,72 +19059,72 @@
msgid "skip move/rename errors"
msgstr "прескачане на грешките при преместване/преименуване"
-#: builtin/mv.c:170
+#: builtin/mv.c:172
#, c-format
msgid "destination '%s' is not a directory"
msgstr "целта „%s“ съществува и не е директория"
-#: builtin/mv.c:181
+#: builtin/mv.c:184
#, c-format
msgid "Checking rename of '%s' to '%s'\n"
msgstr "Проверка на преименуването на обект от „%s“ на „%s“\n"
-#: builtin/mv.c:185
+#: builtin/mv.c:190
msgid "bad source"
msgstr "неправилен обект"
-#: builtin/mv.c:188
+#: builtin/mv.c:193
msgid "can not move directory into itself"
msgstr "директория не може да се премести в себе си"
-#: builtin/mv.c:191
+#: builtin/mv.c:196
msgid "cannot move directory over file"
msgstr "директория не може да се премести върху файл"
-#: builtin/mv.c:200
+#: builtin/mv.c:205
msgid "source directory is empty"
msgstr "първоначалната директория е празна"
-#: builtin/mv.c:225
+#: builtin/mv.c:231
msgid "not under version control"
msgstr "не е под контрола на Git"
-#: builtin/mv.c:227
+#: builtin/mv.c:233
msgid "conflicted"
msgstr "конфликт"
-#: builtin/mv.c:230
+#: builtin/mv.c:236
msgid "destination exists"
msgstr "целта съществува"
-#: builtin/mv.c:238
+#: builtin/mv.c:244
#, c-format
msgid "overwriting '%s'"
msgstr "презаписване на „%s“"
-#: builtin/mv.c:241
+#: builtin/mv.c:247
msgid "Cannot overwrite"
msgstr "Презаписването е невъзможно"
-#: builtin/mv.c:244
+#: builtin/mv.c:250
msgid "multiple sources for the same target"
msgstr "множество източници за една цел"
-#: builtin/mv.c:246
+#: builtin/mv.c:252
msgid "destination directory does not exist"
msgstr "целевата директория не съществува"
-#: builtin/mv.c:253
+#: builtin/mv.c:280
#, c-format
msgid "%s, source=%s, destination=%s"
msgstr "%s, обект: „%s“, цел: „%s“"
-#: builtin/mv.c:274
+#: builtin/mv.c:308
#, c-format
msgid "Renaming %s to %s\n"
msgstr "Преименуване на „%s“ на „%s“\n"
-#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:667
+#: builtin/mv.c:314 builtin/remote.c:790 builtin/repack.c:853
#, c-format
msgid "renaming '%s' failed"
msgstr "неуспешно преименуване на „%s“"
@@ -18938,48 +19305,48 @@
msgid "failed to finish 'show' for object '%s'"
msgstr "действието „show“ не може да се завърши за обект „%s“"
-#: builtin/notes.c:197
+#: builtin/notes.c:195
msgid "please supply the note contents using either -m or -F option"
msgstr "задайте съдържанието на бележката с някоя от опциите „-m“ или „-F“"
-#: builtin/notes.c:206
+#: builtin/notes.c:204
msgid "unable to write note object"
msgstr "обектът-бележка не може да бъде записан"
-#: builtin/notes.c:208
+#: builtin/notes.c:206
#, c-format
msgid "the note contents have been left in %s"
msgstr "съдържанието на бележката е във файла „%s“"
-#: builtin/notes.c:242 builtin/tag.c:576
+#: builtin/notes.c:240 builtin/tag.c:577
#, c-format
msgid "could not open or read '%s'"
msgstr "файлът „%s“ не може да бъде отворен или прочетен"
-#: builtin/notes.c:263 builtin/notes.c:313 builtin/notes.c:315
-#: builtin/notes.c:383 builtin/notes.c:438 builtin/notes.c:526
-#: builtin/notes.c:531 builtin/notes.c:610 builtin/notes.c:672
+#: builtin/notes.c:261 builtin/notes.c:311 builtin/notes.c:313
+#: builtin/notes.c:381 builtin/notes.c:436 builtin/notes.c:524
+#: builtin/notes.c:529 builtin/notes.c:608 builtin/notes.c:670
#, c-format
msgid "failed to resolve '%s' as a valid ref."
msgstr "не може да се открие към какво сочи „%s“."
-#: builtin/notes.c:265
+#: builtin/notes.c:263
#, c-format
msgid "failed to read object '%s'."
msgstr "обектът „%s“ не може да бъде прочетен."
-#: builtin/notes.c:268
+#: builtin/notes.c:266
#, c-format
msgid "cannot read note data from non-blob object '%s'."
msgstr ""
"съдържанието на бележка не може да се вземе от обект, който не е BLOB: „%s“."
-#: builtin/notes.c:309
+#: builtin/notes.c:307
#, c-format
msgid "malformed input line: '%s'."
msgstr "входен ред с неправилен формат: „%s“."
-#: builtin/notes.c:324
+#: builtin/notes.c:322
#, c-format
msgid "failed to copy notes from '%s' to '%s'"
msgstr "бележката не може да се копира от „%s“ към „%s“"
@@ -18987,50 +19354,50 @@
#. TRANSLATORS: the first %s will be replaced by a git
#. notes command: 'add', 'merge', 'remove', etc.
#.
-#: builtin/notes.c:356
+#: builtin/notes.c:354
#, c-format
msgid "refusing to %s notes in %s (outside of refs/notes/)"
msgstr ""
"няма да се извърши „%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
-#: builtin/prune-packed.c:25 builtin/tag.c:586
+#: builtin/notes.c:374 builtin/notes.c:429 builtin/notes.c:507
+#: builtin/notes.c:519 builtin/notes.c:596 builtin/notes.c:663
+#: builtin/notes.c:813 builtin/notes.c:961 builtin/notes.c:983
+#: builtin/prune-packed.c:25 builtin/tag.c:587
msgid "too many arguments"
msgstr "прекалено много аргументи"
-#: builtin/notes.c:389 builtin/notes.c:678
+#: builtin/notes.c:387 builtin/notes.c:676
#, c-format
msgid "no note found for object %s."
msgstr "няма бележки за обекта „%s“."
-#: builtin/notes.c:410 builtin/notes.c:576
+#: builtin/notes.c:408 builtin/notes.c:574
msgid "note contents as a string"
msgstr "низ, който е съдържанието на бележката"
-#: builtin/notes.c:413 builtin/notes.c:579
+#: builtin/notes.c:411 builtin/notes.c:577
msgid "note contents in a file"
msgstr "ФАЙЛ със съдържанието на бележката"
-#: builtin/notes.c:416 builtin/notes.c:582
+#: builtin/notes.c:414 builtin/notes.c:580
msgid "reuse and edit specified note object"
msgstr "преизползване и редактиране на указания ОБЕКТ-бележка"
-#: builtin/notes.c:419 builtin/notes.c:585
+#: builtin/notes.c:417 builtin/notes.c:583
msgid "reuse specified note object"
msgstr "преизползване на указания ОБЕКТ-бележка"
-#: builtin/notes.c:422 builtin/notes.c:588
+#: builtin/notes.c:420 builtin/notes.c:586
msgid "allow storing empty note"
msgstr "приемане и на празни бележки"
-#: builtin/notes.c:423 builtin/notes.c:496
+#: builtin/notes.c:421 builtin/notes.c:494
msgid "replace existing notes"
msgstr "замяна на съществуващите бележки"
-#: builtin/notes.c:448
+#: builtin/notes.c:446
#, c-format
msgid ""
"Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite "
@@ -19039,31 +19406,31 @@
"Не може да се добави бележка, защото такава вече съществува за обекта „%s“. "
"Използвайте опцията „-f“, за да презапишете съществуващи бележки."
-#: builtin/notes.c:463 builtin/notes.c:544
+#: builtin/notes.c:461 builtin/notes.c:542
#, c-format
msgid "Overwriting existing notes for object %s\n"
msgstr "Презаписване на съществуващите бележки за обекта „%s“\n"
-#: builtin/notes.c:475 builtin/notes.c:637 builtin/notes.c:902
+#: builtin/notes.c:473 builtin/notes.c:635 builtin/notes.c:900
#, c-format
msgid "Removing note for object %s\n"
msgstr "Изтриване на бележката за обекта „%s“\n"
-#: builtin/notes.c:497
+#: builtin/notes.c:495
msgid "read objects from stdin"
msgstr "изчитане на обектите от стандартния вход"
-#: builtin/notes.c:499
+#: builtin/notes.c:497
msgid "load rewriting config for <command> (implies --stdin)"
msgstr ""
"зареждане на настройките за КОМАНДАта, която презаписва подавания (включва "
"опцията „--stdin“)"
-#: builtin/notes.c:517
+#: builtin/notes.c:515
msgid "too few arguments"
msgstr "прекалено малко аргументи"
-#: builtin/notes.c:538
+#: builtin/notes.c:536
#, c-format
msgid ""
"Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite "
@@ -19072,12 +19439,12 @@
"Не може да се копира бележка, защото такава вече съществува за обекта „%s“. "
"Използвайте опцията „-f“, за да презапишете съществуващи бележки."
-#: builtin/notes.c:550
+#: builtin/notes.c:548
#, c-format
msgid "missing notes on source object %s. Cannot copy."
msgstr "няма бележки за обекта-източник „%s“. Не може да се копира."
-#: builtin/notes.c:603
+#: builtin/notes.c:601
#, c-format
msgid ""
"The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n"
@@ -19088,52 +19455,52 @@
"Вместо това ги използвайте с подкомандата „add“: „git notes add -f -m/-F/-c/-"
"C“.\n"
-#: builtin/notes.c:698
+#: builtin/notes.c:696
msgid "failed to delete ref NOTES_MERGE_PARTIAL"
msgstr "указателят „NOTES_MERGE_PARTIAL“ не може да бъде изтрит"
-#: builtin/notes.c:700
+#: builtin/notes.c:698
msgid "failed to delete ref NOTES_MERGE_REF"
msgstr "указателят „NOTES_MERGE_REF“ не може да бъде изтрит"
-#: builtin/notes.c:702
+#: builtin/notes.c:700
msgid "failed to remove 'git notes merge' worktree"
msgstr "работната директория на „git notes merge“ не може да бъде изтрита"
-#: builtin/notes.c:722
+#: builtin/notes.c:720
msgid "failed to read ref NOTES_MERGE_PARTIAL"
msgstr "указателят „NOTES_MERGE_PARTIAL“ не може да бъде прочетен"
-#: builtin/notes.c:724
+#: builtin/notes.c:722
msgid "could not find commit from NOTES_MERGE_PARTIAL."
msgstr "подаването от „NOTES_MERGE_PARTIAL“ не може да се открие."
-#: builtin/notes.c:726
+#: builtin/notes.c:724
msgid "could not parse commit from NOTES_MERGE_PARTIAL."
msgstr "подаването от „NOTES_MERGE_PARTIAL“ не може да се анализира."
-#: builtin/notes.c:739
+#: builtin/notes.c:737
msgid "failed to resolve NOTES_MERGE_REF"
msgstr "не може да се открие към какво сочи „NOTES_MERGE_REF“"
-#: builtin/notes.c:742
+#: builtin/notes.c:740
msgid "failed to finalize notes merge"
msgstr "неуспешно сливане на бележките"
-#: builtin/notes.c:768
+#: builtin/notes.c:766
#, c-format
msgid "unknown notes merge strategy %s"
msgstr "непозната стратегия за сливане на бележки „%s“"
-#: builtin/notes.c:784
+#: builtin/notes.c:782
msgid "General options"
msgstr "Общи опции"
-#: builtin/notes.c:786
+#: builtin/notes.c:784
msgid "Merge options"
msgstr "Опции при сливане"
-#: builtin/notes.c:788
+#: builtin/notes.c:786
msgid ""
"resolve notes conflicts using the given strategy (manual/ours/theirs/union/"
"cat_sort_uniq)"
@@ -19143,46 +19510,46 @@
"„union“ (обединяване), „cat_sort_uniq“ (обединяване, подреждане, уникални "
"резултати)"
-#: builtin/notes.c:790
+#: builtin/notes.c:788
msgid "Committing unmerged notes"
msgstr "Подаване на неслети бележки"
-#: builtin/notes.c:792
+#: builtin/notes.c:790
msgid "finalize notes merge by committing unmerged notes"
msgstr "завършване на сливането чрез подаване на неслети бележки"
-#: builtin/notes.c:794
+#: builtin/notes.c:792
msgid "Aborting notes merge resolution"
msgstr "Преустановяване на корекцията при сливането на бележки"
-#: builtin/notes.c:796
+#: builtin/notes.c:794
msgid "abort notes merge"
msgstr "преустановяване на сливането на бележки"
-#: builtin/notes.c:807
+#: builtin/notes.c:805
msgid "cannot mix --commit, --abort or -s/--strategy"
msgstr "опциите „--commit“, „--abort“ и „-s“/„--strategy“ са несъвместими"
-#: builtin/notes.c:812
+#: builtin/notes.c:810
msgid "must specify a notes ref to merge"
msgstr "трябва да укажете указател към бележка за сливане."
-#: builtin/notes.c:836
+#: builtin/notes.c:834
#, c-format
msgid "unknown -s/--strategy: %s"
msgstr "неизвестна стратегия към опцията „-s“/„--strategy“: „%s“"
-#: builtin/notes.c:873
+#: builtin/notes.c:871
#, c-format
msgid "a notes merge into %s is already in-progress at %s"
msgstr "в момента се извършва сливане на бележките в „%s“ при „%s“"
-#: builtin/notes.c:876
+#: builtin/notes.c:874
#, c-format
msgid "failed to store link to current notes ref (%s)"
msgstr "не може да се запази връзка към указателя на текущата бележка („%s“)."
-#: builtin/notes.c:878
+#: builtin/notes.c:876
#, c-format
msgid ""
"Automatic notes merge failed. Fix conflicts in %s and commit the result with "
@@ -19193,41 +19560,41 @@
"резултата с „git notes merge --commit“ или преустановете сливането с "
"командата „git notes merge --abort“.\n"
-#: builtin/notes.c:897 builtin/tag.c:589
+#: builtin/notes.c:895 builtin/tag.c:590
#, c-format
msgid "Failed to resolve '%s' as a valid ref."
msgstr "Не може да се открие към какво сочи „%s“."
-#: builtin/notes.c:900
+#: builtin/notes.c:898
#, c-format
msgid "Object %s has no note\n"
msgstr "Няма бележки за обекта „%s“\n"
-#: builtin/notes.c:912
+#: builtin/notes.c:910
msgid "attempt to remove non-existent note is not an error"
msgstr "опитът за изтриването на несъществуваща бележка не се счита за грешка"
-#: builtin/notes.c:915
+#: builtin/notes.c:913
msgid "read object names from the standard input"
msgstr "изчитане на имената на обектите от стандартния вход"
-#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:146
+#: builtin/notes.c:952 builtin/prune.c:132 builtin/worktree.c:147
msgid "do not remove, show only"
msgstr "само извеждане без действително окастряне"
-#: builtin/notes.c:955
+#: builtin/notes.c:953
msgid "report pruned notes"
msgstr "докладване на окастрените обекти"
-#: builtin/notes.c:998
+#: builtin/notes.c:996
msgid "notes-ref"
msgstr "УКАЗАТЕЛ_ЗА_БЕЛЕЖКА"
-#: builtin/notes.c:999
+#: builtin/notes.c:997
msgid "use notes from <notes-ref>"
msgstr "да се използва бележката сочена от този УКАЗАТЕЛ_ЗА_БЕЛЕЖКА"
-#: builtin/notes.c:1034 builtin/stash.c:1735
+#: builtin/notes.c:1032 builtin/stash.c:1752
#, c-format
msgid "unknown subcommand: %s"
msgstr "непозната подкоманда: %s"
@@ -19279,87 +19646,91 @@
msgid "expected object at offset %<PRIuMAX> in pack %s"
msgstr "очаква се обект при отместване %<PRIuMAX> в пакетния файл „%s“"
-#: builtin/pack-objects.c:1155
+#: builtin/pack-objects.c:1160
msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
msgstr ""
"изключване на записването на битовата маска, пакетите са разделени поради "
"стойността на „pack.packSizeLimit“"
-#: builtin/pack-objects.c:1168
+#: builtin/pack-objects.c:1173
msgid "Writing objects"
msgstr "Записване на обектите"
-#: builtin/pack-objects.c:1229 builtin/update-index.c:90
+#: builtin/pack-objects.c:1235 builtin/update-index.c:90
#, c-format
msgid "failed to stat %s"
msgstr "не може да бъде получена информация чрез „stat“ за „%s“"
-#: builtin/pack-objects.c:1281
+#: builtin/pack-objects.c:1268
+msgid "failed to write bitmap index"
+msgstr "неуспешно записване на индекси на база битови маски"
+
+#: builtin/pack-objects.c:1294
#, c-format
msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
msgstr "бяха записани %<PRIu32> обекти, а се очакваха %<PRIu32>"
-#: builtin/pack-objects.c:1523
+#: builtin/pack-objects.c:1536
msgid "disabling bitmap writing, as some objects are not being packed"
msgstr ""
"изключване на записването на битовата маска, защото някои обекти няма да се "
"пакетират"
-#: builtin/pack-objects.c:1971
+#: builtin/pack-objects.c:1984
#, c-format
msgid "delta base offset overflow in pack for %s"
msgstr "прекалено далечно начало на отместването за обектите-разлика за „%s“"
-#: builtin/pack-objects.c:1980
+#: builtin/pack-objects.c:1993
#, c-format
msgid "delta base offset out of bound for %s"
msgstr "недостижимо начало на отместването за обектите-разлика за „%s“"
-#: builtin/pack-objects.c:2261
+#: builtin/pack-objects.c:2274
msgid "Counting objects"
msgstr "Преброяване на обектите"
-#: builtin/pack-objects.c:2426
+#: builtin/pack-objects.c:2439
#, c-format
msgid "unable to parse object header of %s"
msgstr "заглавната част на „%s“ не може да бъде анализирана"
-#: builtin/pack-objects.c:2496 builtin/pack-objects.c:2512
-#: builtin/pack-objects.c:2522
+#: builtin/pack-objects.c:2509 builtin/pack-objects.c:2525
+#: builtin/pack-objects.c:2535
#, c-format
msgid "object %s cannot be read"
msgstr "обектът „%s“ не може да се прочете"
-#: builtin/pack-objects.c:2499 builtin/pack-objects.c:2526
+#: builtin/pack-objects.c:2512 builtin/pack-objects.c:2539
#, c-format
msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
msgstr "обектът „%s“ е с неправилна дължина (%<PRIuMAX>, а не %<PRIuMAX>)"
-#: builtin/pack-objects.c:2536
+#: builtin/pack-objects.c:2549
msgid "suboptimal pack - out of memory"
msgstr "неоптимизиран пакет — паметта свърши"
-#: builtin/pack-objects.c:2851
+#: builtin/pack-objects.c:2864
#, c-format
msgid "Delta compression using up to %d threads"
msgstr "Делта компресията ще използва до %d нишки"
-#: builtin/pack-objects.c:2990
+#: builtin/pack-objects.c:3003
#, c-format
msgid "unable to pack objects reachable from tag %s"
msgstr ""
"обектите, които може да бъдат достигнати от етикета „%s“, не може да бъдат "
"пакетирани"
-#: builtin/pack-objects.c:3076
+#: builtin/pack-objects.c:3089
msgid "Compressing objects"
msgstr "Компресиране на обектите"
-#: builtin/pack-objects.c:3082
+#: builtin/pack-objects.c:3095
msgid "inconsistency with delta count"
msgstr "неправилен брой разлики"
-#: builtin/pack-objects.c:3161
+#: builtin/pack-objects.c:3174
#, c-format
msgid ""
"value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
@@ -19368,7 +19739,7 @@
"стойността на „uploadpack.blobpackfileuri“ трябва да е във формат "
"„СУМА_НА_ОБЕКТ СУМА_НА_ПАКЕТ АДРЕС“ (получена е „%s“)"
-#: builtin/pack-objects.c:3164
+#: builtin/pack-objects.c:3177
#, c-format
msgid ""
"object already configured in another uploadpack.blobpackfileuri (got '%s')"
@@ -19376,17 +19747,18 @@
"вече има настройка за обекта в друг ред „uploadpack."
"blobpackfileuri“ (получена е „%s“)"
-#: builtin/pack-objects.c:3199
+#: builtin/pack-objects.c:3212
#, c-format
msgid "could not get type of object %s in pack %s"
msgstr "видът на обекта „%s“ в пакет „%s“ не може да бъде определен"
-#: builtin/pack-objects.c:3321 builtin/pack-objects.c:3335
+#: builtin/pack-objects.c:3340 builtin/pack-objects.c:3351
+#: builtin/pack-objects.c:3365
#, c-format
msgid "could not find pack '%s'"
msgstr "пакетът „%s“ не може да се открие"
-#: builtin/pack-objects.c:3378
+#: builtin/pack-objects.c:3408
#, c-format
msgid ""
"expected edge object ID, got garbage:\n"
@@ -19395,7 +19767,7 @@
"очаква се идентификатор на краен обект, а не:\n"
" %s"
-#: builtin/pack-objects.c:3384
+#: builtin/pack-objects.c:3414
#, c-format
msgid ""
"expected object ID, got garbage:\n"
@@ -19404,264 +19776,264 @@
"очаква се идентификатор на обект, а не:\n"
" %s"
-#: builtin/pack-objects.c:3482
+#: builtin/pack-objects.c:3507
msgid "invalid value for --missing"
msgstr "неправилна стойност за „--missing“"
-#: builtin/pack-objects.c:3541 builtin/pack-objects.c:3650
+#: builtin/pack-objects.c:3532 builtin/pack-objects.c:3619
msgid "cannot open pack index"
msgstr "индексът на пакетния файл не може да бъде отворен"
-#: builtin/pack-objects.c:3572
+#: builtin/pack-objects.c:3541
#, c-format
msgid "loose object at %s could not be examined"
msgstr "непакетираният обект в „%s“ не може да бъде анализиран"
-#: builtin/pack-objects.c:3658
+#: builtin/pack-objects.c:3627
msgid "unable to force loose object"
msgstr "оставането на обекта непакетиран не може да бъде наложено"
-#: builtin/pack-objects.c:3788
+#: builtin/pack-objects.c:3757
#, c-format
msgid "not a rev '%s'"
msgstr "„%s“ не е версия"
-#: builtin/pack-objects.c:3791 builtin/rev-parse.c:1061
+#: builtin/pack-objects.c:3760 builtin/rev-parse.c:1061
#, c-format
msgid "bad revision '%s'"
msgstr "неправилна версия „%s“"
-#: builtin/pack-objects.c:3819
+#: builtin/pack-objects.c:3788
msgid "unable to add recent objects"
msgstr "скорошните обекти не може да бъдат добавени"
-#: builtin/pack-objects.c:3872
+#: builtin/pack-objects.c:3841
#, c-format
msgid "unsupported index version %s"
msgstr "неподдържана версия на индекса „%s“"
-#: builtin/pack-objects.c:3876
+#: builtin/pack-objects.c:3845
#, c-format
msgid "bad index version '%s'"
msgstr "неправилна версия на индекса „%s“"
-#: builtin/pack-objects.c:3915
+#: builtin/pack-objects.c:3884
msgid "<version>[,<offset>]"
msgstr "ВЕРСИЯ[,ОТМЕСТВАНЕ]"
-#: builtin/pack-objects.c:3916
+#: builtin/pack-objects.c:3885
msgid "write the pack index file in the specified idx format version"
msgstr ""
"запазване на индекса на пакетните файлове във форма̀та с указаната версия"
-#: builtin/pack-objects.c:3919
+#: builtin/pack-objects.c:3888
msgid "maximum size of each output pack file"
msgstr "максимален размер на всеки пакетен файл"
-#: builtin/pack-objects.c:3921
+#: builtin/pack-objects.c:3890
msgid "ignore borrowed objects from alternate object store"
msgstr "игнориране на обектите заети от други хранилища на обекти"
-#: builtin/pack-objects.c:3923
+#: builtin/pack-objects.c:3892
msgid "ignore packed objects"
msgstr "игнориране на пакетираните обекти"
-#: builtin/pack-objects.c:3925
+#: builtin/pack-objects.c:3894
msgid "limit pack window by objects"
msgstr "ограничаване на прозореца за пакетиране по брой обекти"
-#: builtin/pack-objects.c:3927
+#: builtin/pack-objects.c:3896
msgid "limit pack window by memory in addition to object limit"
msgstr ""
"ограничаване на прозореца за пакетиране и по памет освен по брой обекти"
-#: builtin/pack-objects.c:3929
+#: builtin/pack-objects.c:3898
msgid "maximum length of delta chain allowed in the resulting pack"
msgstr ""
"максимална дължина на веригата от разлики, която е позволена в пакетния файл"
-#: builtin/pack-objects.c:3931
+#: builtin/pack-objects.c:3900
msgid "reuse existing deltas"
msgstr "преизползване на съществуващите разлики"
-#: builtin/pack-objects.c:3933
+#: builtin/pack-objects.c:3902
msgid "reuse existing objects"
msgstr "преизползване на съществуващите обекти"
-#: builtin/pack-objects.c:3935
+#: builtin/pack-objects.c:3904
msgid "use OFS_DELTA objects"
msgstr "използване на обекти „OFS_DELTA“"
-#: builtin/pack-objects.c:3937
+#: builtin/pack-objects.c:3906
msgid "use threads when searching for best delta matches"
msgstr ""
"стартиране на нишки за претърсване на най-добрите съвпадения на разликите"
-#: builtin/pack-objects.c:3939
+#: builtin/pack-objects.c:3908
msgid "do not create an empty pack output"
msgstr "без създаване на празен пакетен файл"
-#: builtin/pack-objects.c:3941
+#: builtin/pack-objects.c:3910
msgid "read revision arguments from standard input"
msgstr "изчитане на версиите от стандартния вход"
-#: builtin/pack-objects.c:3943
+#: builtin/pack-objects.c:3912
msgid "limit the objects to those that are not yet packed"
msgstr "ограничаване до все още непакетираните обекти"
-#: builtin/pack-objects.c:3946
+#: builtin/pack-objects.c:3915
msgid "include objects reachable from any reference"
msgstr ""
"включване на всички обекти, които може да се достигнат от произволен указател"
-#: builtin/pack-objects.c:3949
+#: builtin/pack-objects.c:3918
msgid "include objects referred by reflog entries"
msgstr "включване и на обектите сочени от записите в журнала на указателите"
-#: builtin/pack-objects.c:3952
+#: builtin/pack-objects.c:3921
msgid "include objects referred to by the index"
msgstr "включване и на обектите сочени от индекса"
-#: builtin/pack-objects.c:3955
+#: builtin/pack-objects.c:3924
msgid "read packs from stdin"
msgstr "изчитане на пакетите от стандартния вход"
-#: builtin/pack-objects.c:3957
+#: builtin/pack-objects.c:3926
msgid "output pack to stdout"
msgstr "извеждане на пакета на стандартния изход"
-#: builtin/pack-objects.c:3959
+#: builtin/pack-objects.c:3928
msgid "include tag objects that refer to objects to be packed"
msgstr ""
"включване и на обектите-етикети, които сочат към обектите, които ще бъдат "
"пакетирани"
-#: builtin/pack-objects.c:3961
+#: builtin/pack-objects.c:3930
msgid "keep unreachable objects"
msgstr "запазване на недостижимите обекти"
-#: builtin/pack-objects.c:3963
+#: builtin/pack-objects.c:3932
msgid "pack loose unreachable objects"
msgstr "пакетиране и на недостижимите обекти"
-#: builtin/pack-objects.c:3965
+#: builtin/pack-objects.c:3934
msgid "unpack unreachable objects newer than <time>"
msgstr "разпакетиране на недостижимите обекти, които са по-нови от това ВРЕМЕ"
-#: builtin/pack-objects.c:3968
+#: builtin/pack-objects.c:3937
msgid "use the sparse reachability algorithm"
msgstr "използване на алгоритъм за частична достижимост"
-#: builtin/pack-objects.c:3970
+#: builtin/pack-objects.c:3939
msgid "create thin packs"
msgstr "създаване на съкратени пакети"
-#: builtin/pack-objects.c:3972
+#: builtin/pack-objects.c:3941
msgid "create packs suitable for shallow fetches"
msgstr "пакетиране подходящо за плитко доставяне"
-#: builtin/pack-objects.c:3974
+#: builtin/pack-objects.c:3943
msgid "ignore packs that have companion .keep file"
msgstr "игнориране на пакетите, които са придружени от файл „.keep“"
-#: builtin/pack-objects.c:3976
+#: builtin/pack-objects.c:3945
msgid "ignore this pack"
msgstr "пропускане на този пакет"
-#: builtin/pack-objects.c:3978
+#: builtin/pack-objects.c:3947
msgid "pack compression level"
msgstr "ниво на компресиране при пакетиране"
-#: builtin/pack-objects.c:3980
+#: builtin/pack-objects.c:3949
msgid "do not hide commits by grafts"
msgstr ""
"извеждане на всички родители — дори и тези, които нормално са скрити при "
"присажданията"
-#: builtin/pack-objects.c:3982
+#: builtin/pack-objects.c:3951
msgid "use a bitmap index if available to speed up counting objects"
msgstr ""
"използване на съществуващи индекси на база битови маски за ускоряване на "
"преброяването на обектите"
-#: builtin/pack-objects.c:3984
+#: builtin/pack-objects.c:3953
msgid "write a bitmap index together with the pack index"
msgstr "запазване и на индекс на база битова маска, заедно с индекса за пакета"
-#: builtin/pack-objects.c:3988
+#: builtin/pack-objects.c:3957
msgid "write a bitmap index if possible"
msgstr "записване на индекси на база битови маски при възможност"
-#: builtin/pack-objects.c:3992
+#: builtin/pack-objects.c:3961
msgid "handling for missing objects"
msgstr "как да се обработват липсващите обекти"
-#: builtin/pack-objects.c:3995
+#: builtin/pack-objects.c:3964
msgid "do not pack objects in promisor packfiles"
msgstr "без пакетиране на обекти в гарантиращи пакети"
-#: builtin/pack-objects.c:3997
+#: builtin/pack-objects.c:3966
msgid "respect islands during delta compression"
msgstr "без промяна на групите при делта компресия"
-#: builtin/pack-objects.c:3999
+#: builtin/pack-objects.c:3968
msgid "protocol"
msgstr "протокол"
-#: builtin/pack-objects.c:4000
+#: builtin/pack-objects.c:3969
msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
msgstr "без ползване на настройки „uploadpack.blobpackfileuri“ с този протокол"
-#: builtin/pack-objects.c:4033
+#: builtin/pack-objects.c:4002
#, c-format
msgid "delta chain depth %d is too deep, forcing %d"
msgstr "веригата с разлики е прекалено дълбока — %d, ще се ползва %d"
-#: builtin/pack-objects.c:4038
+#: builtin/pack-objects.c:4007
#, c-format
msgid "pack.deltaCacheLimit is too high, forcing %d"
msgstr ""
"Стойността на настройката „pack.deltaCacheLimit“ е прекалено голяма. Ще се "
"ползва %d"
-#: builtin/pack-objects.c:4094
+#: builtin/pack-objects.c:4063
msgid "--max-pack-size cannot be used to build a pack for transfer"
msgstr ""
"опцията „--max-pack-size“ не може да се използва за създаване на пакетни "
"файлове за пренос"
-#: builtin/pack-objects.c:4096
+#: builtin/pack-objects.c:4065
msgid "minimum pack size limit is 1 MiB"
msgstr "минималният размер на пакетите е 1 MiB"
-#: builtin/pack-objects.c:4101
+#: builtin/pack-objects.c:4070
msgid "--thin cannot be used to build an indexable pack"
msgstr ""
"опцията „--thin“не може да се използва за създаване на пакетни файлове с "
"индекс"
-#: builtin/pack-objects.c:4104
+#: builtin/pack-objects.c:4073
msgid "--keep-unreachable and --unpack-unreachable are incompatible"
msgstr "опциите „--keep-unreachable“ и „--unpack-unreachable“ са несъвместими"
-#: builtin/pack-objects.c:4110
+#: builtin/pack-objects.c:4079
msgid "cannot use --filter without --stdout"
-msgstr "опцията „-filter“ изисква „-stdout“"
+msgstr "опцията „--filter“ изисква „--stdout“"
-#: builtin/pack-objects.c:4112
+#: builtin/pack-objects.c:4081
msgid "cannot use --filter with --stdin-packs"
-msgstr "опциите „-filter“ и „--stdin-packs“ са несъвместими"
+msgstr "опциите „--filter“ и „--stdin-packs“ са несъвместими"
-#: builtin/pack-objects.c:4116
+#: builtin/pack-objects.c:4085
msgid "cannot use internal rev list with --stdin-packs"
msgstr ""
"вътрешният списък на указатели и опцията „--stdin-packs“ са несъвместими"
-#: builtin/pack-objects.c:4175
+#: builtin/pack-objects.c:4144
msgid "Enumerating objects"
msgstr "Изброяване на обектите"
-#: builtin/pack-objects.c:4212
+#: builtin/pack-objects.c:4181
#, c-format
msgid ""
"Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -19716,7 +20088,7 @@
msgid "limit traversal to objects outside promisor packfiles"
msgstr "ограничаване на обхождането до обекти извън гарантиращи пакети"
-#: builtin/prune.c:152
+#: builtin/prune.c:151
msgid "cannot prune in a precious-objects repo"
msgstr "хранилище с важни обекти не може да се окастря"
@@ -19729,44 +20101,50 @@
msgid "git pull [<options>] [<repository> [<refspec>...]]"
msgstr "git push [ОПЦИЯ…] [ХРАНИЛИЩЕ [УКАЗАТЕЛ_НА_ВЕРСИЯ…]]"
-#: builtin/pull.c:123
+#: builtin/pull.c:124
msgid "control for recursive fetching of submodules"
msgstr "управление на рекурсивното доставяне на подмодулите"
-#: builtin/pull.c:127
+#: builtin/pull.c:128
msgid "Options related to merging"
msgstr "Опции при сливане"
-#: builtin/pull.c:130
+#: builtin/pull.c:131
msgid "incorporate changes by rebasing rather than merging"
msgstr "внасяне на промените чрез пребазиране, а не чрез сливане"
-#: builtin/pull.c:158 builtin/rebase.c:491 builtin/revert.c:126
+#: builtin/pull.c:159 builtin/revert.c:126
msgid "allow fast-forward"
msgstr "позволяване на превъртания"
-#: builtin/pull.c:167 parse-options.h:340
+#: builtin/pull.c:165
+msgid "control use of pre-merge-commit and commit-msg hooks"
+msgstr ""
+"дали куките преди подаване и сливане и при промяна на съобщението за "
+"подаване (pre-merge-commit и commit-msg) да се изпълнят"
+
+#: builtin/pull.c:171 parse-options.h:338
msgid "automatically stash/stash pop before and after"
msgstr "автоматично скатаване/прилагане на скатаното преди и след пребазиране"
-#: builtin/pull.c:183
+#: builtin/pull.c:187
msgid "Options related to fetching"
msgstr "Опции при доставяне"
-#: builtin/pull.c:193
+#: builtin/pull.c:197
msgid "force overwrite of local branch"
msgstr "принудително презаписване на локалния клон"
-#: builtin/pull.c:201
+#: builtin/pull.c:205
msgid "number of submodules pulled in parallel"
msgstr "брой подмодули издърпани паралелно"
-#: builtin/pull.c:317
+#: builtin/pull.c:321
#, c-format
msgid "Invalid value for pull.ff: %s"
msgstr "Неправилна стойност за „pull.ff“: „%s“"
-#: builtin/pull.c:445
+#: builtin/pull.c:449
msgid ""
"There is no candidate for rebasing against among the refs that you just "
"fetched."
@@ -19774,14 +20152,14 @@
"Между указателите, които току що доставихте, няма подходящ кандидат, върху "
"който да пребазирате."
-#: builtin/pull.c:447
+#: builtin/pull.c:451
msgid ""
"There are no candidates for merging among the refs that you just fetched."
msgstr ""
"Между указателите, които току що доставихте, няма подходящ кандидат, който "
"да слеете."
-#: builtin/pull.c:448
+#: builtin/pull.c:452
msgid ""
"Generally this means that you provided a wildcard refspec which had no\n"
"matches on the remote end."
@@ -19789,7 +20167,7 @@
"Най вероятно сте подали шаблон за указатели, който не е напаснал с нищо в "
"отдалеченото хранилище."
-#: builtin/pull.c:451
+#: builtin/pull.c:455
#, c-format
msgid ""
"You asked to pull from the remote '%s', but did not specify\n"
@@ -19800,43 +20178,43 @@
"Понеже това не е хранилището по подразбиране на текущия клон, трябва\n"
"да укажете отдалечения клон на командния ред."
-#: builtin/pull.c:456 builtin/rebase.c:1248
+#: builtin/pull.c:460 builtin/rebase.c:951
msgid "You are not currently on a branch."
msgstr "Извън всички клони."
-#: builtin/pull.c:458 builtin/pull.c:473
+#: builtin/pull.c:462 builtin/pull.c:477
msgid "Please specify which branch you want to rebase against."
msgstr "Укажете върху кой клон искате да пребазирате."
-#: builtin/pull.c:460 builtin/pull.c:475
+#: builtin/pull.c:464 builtin/pull.c:479
msgid "Please specify which branch you want to merge with."
msgstr "Укажете кой клон искате да слеете."
-#: builtin/pull.c:461 builtin/pull.c:476
+#: builtin/pull.c:465 builtin/pull.c:480
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:1254
+#: builtin/pull.c:467 builtin/pull.c:473 builtin/pull.c:482
+#: builtin/rebase.c:957
msgid "<remote>"
msgstr "ОТДАЛЕЧЕНО_ХРАНИЛИЩЕ"
-#: builtin/pull.c:463 builtin/pull.c:478 builtin/pull.c:483
+#: builtin/pull.c:467 builtin/pull.c:482 builtin/pull.c:487
msgid "<branch>"
msgstr "КЛОН"
-#: builtin/pull.c:471 builtin/rebase.c:1246
+#: builtin/pull.c:475 builtin/rebase.c:949
msgid "There is no tracking information for the current branch."
msgstr "Текущият клон не следи никой."
-#: builtin/pull.c:480
+#: builtin/pull.c:484
msgid ""
"If you wish to set tracking information for this branch you can do so with:"
msgstr ""
"Ако искате да зададете информация за следен клон, може да направите това с "
"командата:"
-#: builtin/pull.c:485
+#: builtin/pull.c:489
#, c-format
msgid ""
"Your configuration specifies to merge with the ref '%s'\n"
@@ -19845,20 +20223,20 @@
"За сливане е указан отдалеченият указател „%s“,\n"
"но такъв не е доставен."
-#: builtin/pull.c:596
+#: builtin/pull.c:600
#, c-format
msgid "unable to access commit %s"
msgstr "недостъпно подаване: %s"
-#: builtin/pull.c:902
+#: builtin/pull.c:908
msgid "ignoring --verify-signatures for rebase"
msgstr "без „--verify-signatures“ при пребазиране"
-#: builtin/pull.c:930
+#: builtin/pull.c:942
msgid ""
-"Pulling without specifying how to reconcile divergent branches is\n"
-"discouraged. You can squelch this message by running one of the following\n"
-"commands sometime before your next pull:\n"
+"You have divergent branches and need to specify how to reconcile them.\n"
+"You can do so by running one of the following commands sometime before\n"
+"your next pull:\n"
"\n"
" git config pull.rebase false # merge (the default strategy)\n"
" git config pull.rebase true # rebase\n"
@@ -19870,8 +20248,8 @@
"or --ff-only on the command line to override the configured default per\n"
"invocation.\n"
msgstr ""
-"Не се насърчава издърпване без указване на стратегията за съгласуване на\n"
-"клоните. За да заглушите това съобщение, изпълнете някоя от следните\n"
+"Някои от клоните са се раздалечили и трябва да укажете как да се решава\n"
+"това. За да заглушите това съобщение, изпълнете някоя от следните\n"
"команди преди следващото издърпване:\n"
"\n"
" git config pull.rebase false # сливане (стандартна стратегия)\n"
@@ -19883,19 +20261,19 @@
"използвайте опциите „--rebase“, „--no-rebase“, „--ff-only“. Те са с\n"
"приоритет пред настройките.\n"
-#: builtin/pull.c:990
+#: builtin/pull.c:1016
msgid "Updating an unborn branch with changes added to the index."
msgstr "Обновяване на все още несъздаден клон с промените от индекса"
-#: builtin/pull.c:994
+#: builtin/pull.c:1020
msgid "pull with rebase"
msgstr "издърпване с пребазиране"
-#: builtin/pull.c:995
+#: builtin/pull.c:1021
msgid "please commit or stash them."
msgstr "трябва да подадете или скатаете промените."
-#: builtin/pull.c:1020
+#: builtin/pull.c:1046
#, c-format
msgid ""
"fetch updated the current branch head.\n"
@@ -19905,7 +20283,7 @@
"доставянето обнови върха на текущия клон. Работното\n"
"ви копие бе превъртяно от подаване „%s“."
-#: builtin/pull.c:1026
+#: builtin/pull.c:1052
#, c-format
msgid ""
"Cannot fast-forward your working tree.\n"
@@ -19922,15 +20300,24 @@
" git reset --hard\n"
"за връщане към нормално състояние."
-#: builtin/pull.c:1041
+#: builtin/pull.c:1067
msgid "Cannot merge multiple branches into empty head."
msgstr "Не може да сливате множество клони в празен върхов указател."
-#: builtin/pull.c:1045
+#: builtin/pull.c:1072
msgid "Cannot rebase onto multiple branches."
msgstr "Не може да пребазирате върху повече от един клон."
-#: builtin/pull.c:1065
+#: builtin/pull.c:1074
+msgid "Cannot fast-forward to multiple branches."
+msgstr "Не може да превъртите към повече от един клон."
+
+#: builtin/pull.c:1088
+msgid "Need to specify how to reconcile divergent branches."
+msgstr ""
+"Трябва да укажете как да се решават разликите при разминаване на клоните."
+
+#: builtin/pull.c:1102
msgid "cannot rebase with locally recorded submodule modifications"
msgstr ""
"пребазирането е невъзможно заради локално записаните промени по подмодулите"
@@ -20120,15 +20507,15 @@
msgid "failed to push some refs to '%s'"
msgstr "част от указателите не бяха изтласкани към „%s“"
-#: builtin/push.c:544
+#: builtin/push.c:544 builtin/submodule--helper.c:3258
msgid "repository"
msgstr "хранилище"
-#: builtin/push.c:545 builtin/send-pack.c:189
+#: builtin/push.c:545 builtin/send-pack.c:193
msgid "push all refs"
msgstr "изтласкване на всички указатели"
-#: builtin/push.c:546 builtin/send-pack.c:191
+#: builtin/push.c:546 builtin/send-pack.c:195
msgid "mirror all refs"
msgstr "огледално копие на всички указатели"
@@ -20140,19 +20527,19 @@
msgid "push tags (can't be used with --all or --mirror)"
msgstr "изтласкване на етикетите (несъвместимо с опциите „--all“ и „--mirror“)"
-#: builtin/push.c:552 builtin/send-pack.c:192
+#: builtin/push.c:552 builtin/send-pack.c:196
msgid "force updates"
msgstr "принудително обновяване"
-#: builtin/push.c:553 builtin/send-pack.c:204
+#: builtin/push.c:553 builtin/send-pack.c:208
msgid "<refname>:<expect>"
msgstr "ИМЕ_НА_УКАЗАТЕЛ:ОЧАКВАНА_СТОЙНОСТ"
-#: builtin/push.c:554 builtin/send-pack.c:205
+#: builtin/push.c:554 builtin/send-pack.c:209
msgid "require old value of ref to be at this value"
msgstr "УКАЗАТЕЛят трябва първоначално да е с тази ОЧАКВАНА_СТОЙНОСТ"
-#: builtin/push.c:557 builtin/send-pack.c:208
+#: builtin/push.c:557 builtin/send-pack.c:212
msgid "require remote updates to be integrated locally"
msgstr ""
"изискване обновяванията в отдалечените хранилища да се внасят и в локалното"
@@ -20161,12 +20548,12 @@
msgid "control recursive pushing of submodules"
msgstr "управление на рекурсивното изтласкване на подмодулите"
-#: builtin/push.c:561 builtin/send-pack.c:199
+#: builtin/push.c:561 builtin/send-pack.c:203
msgid "use thin pack"
msgstr "използване на съкратени пакети"
-#: builtin/push.c:562 builtin/push.c:563 builtin/send-pack.c:186
-#: builtin/send-pack.c:187
+#: builtin/push.c:562 builtin/push.c:563 builtin/send-pack.c:190
+#: builtin/send-pack.c:191
msgid "receive pack program"
msgstr "програма за получаването на пакети"
@@ -20188,11 +20575,11 @@
"изтласкване на липсващите в отдалеченото хранилище, но свързани с текущото "
"изтласкване, етикети"
-#: builtin/push.c:572 builtin/send-pack.c:193
+#: builtin/push.c:572 builtin/send-pack.c:197
msgid "GPG sign the push"
msgstr "подписване на изтласкването с GPG"
-#: builtin/push.c:574 builtin/send-pack.c:200
+#: builtin/push.c:574 builtin/send-pack.c:204
msgid "request atomic transaction on remote side"
msgstr "изискване на атомарни операции от отсрещната страна"
@@ -20304,83 +20691,82 @@
#: builtin/read-tree.c:41
msgid ""
"git read-tree [(-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>) "
-"[-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--"
-"index-output=<file>] (--empty | <tree-ish1> [<tree-ish2> [<tree-ish3>]])"
+"[-u | -i]] [--no-sparse-checkout] [--index-output=<file>] (--empty | <tree-"
+"ish1> [<tree-ish2> [<tree-ish3>]])"
msgstr ""
"git read-tree [(-m [--trivial] [--aggressive] | --reset | --prefix=ПРЕФИКС) "
-"[-u [--exclude-per-directory=ФАЙЛ_С_ИЗКЛЮЧЕНИЯ] | -i]] [--no-sparse-"
-"checkout] [--index-output=ФАЙЛ] (--empty | УКАЗАТЕЛ_КЪМ_ДЪРВО_1 "
-"[УКАЗАТЕЛ_КЪМ_ДЪРВО_2 [УКАЗАТЕЛ_КЪМ_ДЪРВО_3]])"
+"[-u | -i]] [--no-sparse-checkout] [--index-output=ФАЙЛ] (--empty | "
+"УКАЗАТЕЛ_КЪМ_ДЪРВО_1 [УКАЗАТЕЛ_КЪМ_ДЪРВО_2 [УКАЗАТЕЛ_КЪМ_ДЪРВО_3]])"
-#: builtin/read-tree.c:124
+#: builtin/read-tree.c:116
msgid "write resulting index to <file>"
msgstr "запазване на индекса в този ФАЙЛ"
-#: builtin/read-tree.c:127
+#: builtin/read-tree.c:119
msgid "only empty the index"
msgstr "само зануляване на индекса"
-#: builtin/read-tree.c:129
+#: builtin/read-tree.c:121
msgid "Merging"
msgstr "Сливане"
-#: builtin/read-tree.c:131
+#: builtin/read-tree.c:123
msgid "perform a merge in addition to a read"
msgstr "да се извърши и сливане след освен изчитането"
-#: builtin/read-tree.c:133
+#: builtin/read-tree.c:125
msgid "3-way merge if no file level merging required"
msgstr "тройно сливане, ако не се налага пофайлово сливане"
-#: builtin/read-tree.c:135
+#: builtin/read-tree.c:127
msgid "3-way merge in presence of adds and removes"
msgstr "тройно сливане при добавяне на добавяне и изтриване на файлове"
-#: builtin/read-tree.c:137
+#: builtin/read-tree.c:129
msgid "same as -m, but discard unmerged entries"
msgstr "същото като опцията „-m“, но неслетите обекти се пренебрегват"
-#: builtin/read-tree.c:138
+#: builtin/read-tree.c:130
msgid "<subdirectory>/"
msgstr "ПОДДИРЕКТОРИЯ/"
-#: builtin/read-tree.c:139
+#: builtin/read-tree.c:131
msgid "read the tree into the index under <subdirectory>/"
msgstr "изчитане на дървото към индекса като да е в тази ПОДДИРЕКТОРИЯ/"
-#: builtin/read-tree.c:142
+#: builtin/read-tree.c:134
msgid "update working tree with merge result"
msgstr "обновяване на работното дърво с резултата от сливането"
-#: builtin/read-tree.c:144
+#: builtin/read-tree.c:136
msgid "gitignore"
msgstr "ФАЙЛ_С_ИЗКЛЮЧЕНИЯ"
-#: builtin/read-tree.c:145
+#: builtin/read-tree.c:137
msgid "allow explicitly ignored files to be overwritten"
msgstr "позволяване на презаписването на изрично пренебрегваните файлове"
-#: builtin/read-tree.c:148
+#: builtin/read-tree.c:140
msgid "don't check the working tree after merging"
msgstr "без проверка на работното дърво след сливането"
-#: builtin/read-tree.c:149
+#: builtin/read-tree.c:141
msgid "don't update the index or the work tree"
msgstr "без обновяване и на индекса, и на работното дърво"
-#: builtin/read-tree.c:151
+#: builtin/read-tree.c:143
msgid "skip applying sparse checkout filter"
msgstr "без прилагане на филтъра за частично изтегляне"
-#: builtin/read-tree.c:153
+#: builtin/read-tree.c:145
msgid "debug unpack-trees"
msgstr "изчистване на грешки в командата „unpack-trees“"
-#: builtin/read-tree.c:157
+#: builtin/read-tree.c:149
msgid "suppress feedback messages"
msgstr "без информационни съобщения"
-#: builtin/read-tree.c:188
+#: builtin/read-tree.c:183
msgid "You need to resolve your current index first"
msgstr "Първо трябва да коригирате индекса си"
@@ -20402,197 +20788,44 @@
msgid "git rebase --continue | --abort | --skip | --edit-todo"
msgstr "git rebase --continue | --abort | --skip | --edit-todo"
-#: builtin/rebase.c:194 builtin/rebase.c:218 builtin/rebase.c:245
-#, c-format
-msgid "unusable todo list: '%s'"
-msgstr "неуспешно изтриване на списъка за изпълнение: „%s“"
-
-#: builtin/rebase.c:311
+#: builtin/rebase.c:230
#, c-format
msgid "could not create temporary %s"
msgstr "не може да се създаде временна директория „%s“"
-#: builtin/rebase.c:317
+#: builtin/rebase.c:236
msgid "could not mark as interactive"
msgstr "невъзможно задаване на интерактивна работа"
-#: builtin/rebase.c:370
+#: builtin/rebase.c:289
msgid "could not generate todo list"
msgstr "файлът с командите не може да се генерира"
-#: builtin/rebase.c:412
+#: builtin/rebase.c:331
msgid "a base commit must be provided with --upstream or --onto"
msgstr "опциите „--upstream“ и „--onto“ изискват базово подаване"
-#: builtin/rebase.c:481
-msgid "git rebase--interactive [<options>]"
-msgstr "git rebase--interactive [ОПЦИЯ…]"
-
-#: builtin/rebase.c:494 builtin/rebase.c:1389
-msgid "keep commits which start empty"
-msgstr "запазванe на първоначално празните подавания"
-
-#: builtin/rebase.c:498 builtin/revert.c:128
-msgid "allow commits with empty messages"
-msgstr "позволяване на празни съобщения при подаване"
-
-#: builtin/rebase.c:500
-msgid "rebase merge commits"
-msgstr "пребазиране на подаванията със сливания"
-
-#: builtin/rebase.c:502
-msgid "keep original branch points of cousins"
-msgstr ""
-"запазване на първоначалните точки на разклоняване на сестринските клони"
-
-#: builtin/rebase.c:504
-msgid "move commits that begin with squash!/fixup!"
-msgstr "преместване на подаванията, които започват със „squash!“/“fixup!“"
-
-#: builtin/rebase.c:505
-msgid "sign commits"
-msgstr "подписване на подаванията"
-
-#: builtin/rebase.c:507 builtin/rebase.c:1328
-msgid "display a diffstat of what changed upstream"
-msgstr "извеждане на статистика с промените в следения клон"
-
-#: builtin/rebase.c:509
-msgid "continue rebase"
-msgstr "продължаване на пребазирането"
-
-#: builtin/rebase.c:511
-msgid "skip commit"
-msgstr "прескачане на подаване"
-
-#: builtin/rebase.c:512
-msgid "edit the todo list"
-msgstr "редактиране на списъка с команди за изпълнение"
-
-#: builtin/rebase.c:514
-msgid "show the current patch"
-msgstr "извеждане на текущата кръпка"
-
-#: builtin/rebase.c:517
-msgid "shorten commit ids in the todo list"
-msgstr "съкратени идентификатори в списъка за изпълнение"
-
-#: builtin/rebase.c:519
-msgid "expand commit ids in the todo list"
-msgstr "пълни идентификатори в списъка за изпълнение"
-
-#: builtin/rebase.c:521
-msgid "check the todo list"
-msgstr "проверка на списъка за изпълнение"
-
-#: builtin/rebase.c:523
-msgid "rearrange fixup/squash lines"
-msgstr ""
-"преподреждане на редовете за вкарване на подаванията подаванията в "
-"предходните им със и без смени на съобщението"
-
-#: builtin/rebase.c:525
-msgid "insert exec commands in todo list"
-msgstr "вмъкване на командите за изпълнение в списъка за изпълнение"
-
-#: builtin/rebase.c:526
-msgid "onto"
-msgstr "върху"
-
-#: builtin/rebase.c:529
-msgid "restrict-revision"
-msgstr "ограничена версия"
-
-#: builtin/rebase.c:529
-msgid "restrict revision"
-msgstr "ограничена версия"
-
-#: builtin/rebase.c:531
-msgid "squash-onto"
-msgstr "подаване, в което другите да се вкарат"
-
-#: builtin/rebase.c:532
-msgid "squash onto"
-msgstr "подаване, в което другите да се вкарат"
-
-#: builtin/rebase.c:534
-msgid "the upstream commit"
-msgstr "подаване на източника"
-
-#: builtin/rebase.c:536
-msgid "head-name"
-msgstr "име на върха"
-
-#: builtin/rebase.c:536
-msgid "head name"
-msgstr "име на върха"
-
-#: builtin/rebase.c:541
-msgid "rebase strategy"
-msgstr "стратегия на пребазиране"
-
-#: builtin/rebase.c:542
-msgid "strategy-opts"
-msgstr "опции на стратегията"
-
-#: builtin/rebase.c:543
-msgid "strategy options"
-msgstr "опции на стратегията"
-
-#: builtin/rebase.c:544
-msgid "switch-to"
-msgstr "преминаване към"
-
-#: builtin/rebase.c:545
-msgid "the branch or commit to checkout"
-msgstr "клонът, към който да се премине"
-
-#: builtin/rebase.c:546
-msgid "onto-name"
-msgstr "име на база"
-
-#: builtin/rebase.c:546
-msgid "onto name"
-msgstr "име на база"
-
-#: builtin/rebase.c:547
-msgid "cmd"
-msgstr "команда"
-
-#: builtin/rebase.c:547
-msgid "the command to run"
-msgstr "команда за изпълнение"
-
-#: builtin/rebase.c:550 builtin/rebase.c:1422
-msgid "automatically re-schedule any `exec` that fails"
-msgstr ""
-"автоматично подаване за повторно изпълнение на командите завършили с неуспех"
-
-#: builtin/rebase.c:566
-msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
-msgstr "опциите „--[no-]rebase-cousins“ изискват опцията „--rebase-merges“"
-
-#: builtin/rebase.c:582
+#: builtin/rebase.c:390
#, c-format
msgid "%s requires the merge backend"
msgstr "„%s“ изисква пребазиране"
-#: builtin/rebase.c:625
+#: builtin/rebase.c:432
#, c-format
msgid "could not get 'onto': '%s'"
msgstr "не може да се премине към новата база, зададена с „onto“: „%s“"
-#: builtin/rebase.c:642
+#: builtin/rebase.c:449
#, c-format
msgid "invalid orig-head: '%s'"
msgstr "неправилен указател към първоначален връх „orig-head“: „%s“"
-#: builtin/rebase.c:667
+#: builtin/rebase.c:474
#, c-format
msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
msgstr "неправилната стойност на „allow_rerere_autoupdate“ се прескача: „%s“"
-#: builtin/rebase.c:813 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:597
msgid ""
"Resolve all conflicts manually, mark them as resolved with\n"
"\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -20606,7 +20839,7 @@
"За да откажете пребазирането и да се върнете към първоначалното състояние,\n"
"изпълнете „git rebase --abort“."
-#: builtin/rebase.c:896
+#: builtin/rebase.c:680
#, c-format
msgid ""
"\n"
@@ -20624,7 +20857,7 @@
"\n"
"В резултат те не може да се пребазират."
-#: builtin/rebase.c:1222
+#: builtin/rebase.c:925
#, c-format
msgid ""
"unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
@@ -20633,7 +20866,7 @@
"неправилна стойност „%s“: вариантите са „drop“ (прескачане), "
"„keep“ (запазване) и „ask“ (питане)"
-#: builtin/rebase.c:1240
+#: builtin/rebase.c:943
#, c-format
msgid ""
"%s\n"
@@ -20650,7 +20883,7 @@
" git rebase КЛОН\n"
"\n"
-#: builtin/rebase.c:1256
+#: builtin/rebase.c:959
#, c-format
msgid ""
"If you wish to set tracking information for this branch you can do so with:\n"
@@ -20663,192 +20896,202 @@
"\n"
" git branch --set-upstream-to=%s/КЛОН %s\n"
-#: builtin/rebase.c:1286
+#: builtin/rebase.c:989
msgid "exec commands cannot contain newlines"
msgstr "командите за изпълнение не може да съдържат нови редове"
-#: builtin/rebase.c:1290
+#: builtin/rebase.c:993
msgid "empty exec command"
msgstr "празна команда за изпълнение"
-#: builtin/rebase.c:1319
+#: builtin/rebase.c:1023
msgid "rebase onto given branch instead of upstream"
msgstr "пребазиране върху зададения, а не следения клон"
-#: builtin/rebase.c:1321
+#: builtin/rebase.c:1025
msgid "use the merge-base of upstream and branch as the current base"
msgstr "за текуща база да се ползва базата за сливане на клона и следеното"
-#: builtin/rebase.c:1323
+#: builtin/rebase.c:1027
msgid "allow pre-rebase hook to run"
msgstr "позволяване на куката преди пребазиране да се изпълни"
-#: builtin/rebase.c:1325
+#: builtin/rebase.c:1029
msgid "be quiet. implies --no-stat"
msgstr "без извеждане на информация. Включва опцията „--no-stat“"
-#: builtin/rebase.c:1331
+#: builtin/rebase.c:1032
+msgid "display a diffstat of what changed upstream"
+msgstr "извеждане на статистика с промените в следения клон"
+
+#: builtin/rebase.c:1035
msgid "do not show diffstat of what changed upstream"
msgstr "без извеждане на статистика с промените в следения клон"
-#: builtin/rebase.c:1334
+#: builtin/rebase.c:1038
msgid "add a Signed-off-by trailer to each commit"
msgstr "добавяне на епилог за подпис „Signed-off-by“ към всяко подаване"
-#: builtin/rebase.c:1337
+#: builtin/rebase.c:1041
msgid "make committer date match author date"
msgstr "датата на подаващия да отговаря на датата на автора"
-#: builtin/rebase.c:1339
+#: builtin/rebase.c:1043
msgid "ignore author date and use current date"
msgstr "да се ползва днешна дата, а не тази на автора"
-#: builtin/rebase.c:1341
+#: builtin/rebase.c:1045
msgid "synonym of --reset-author-date"
msgstr "псевдоним на „--reset-author-date“"
-#: builtin/rebase.c:1343 builtin/rebase.c:1347
+#: builtin/rebase.c:1047 builtin/rebase.c:1051
msgid "passed to 'git apply'"
msgstr "подава се на командата „git apply“"
-#: builtin/rebase.c:1345
+#: builtin/rebase.c:1049
msgid "ignore changes in whitespace"
msgstr "без промени в празните знаци"
-#: builtin/rebase.c:1349 builtin/rebase.c:1352
+#: builtin/rebase.c:1053 builtin/rebase.c:1056
msgid "cherry-pick all commits, even if unchanged"
msgstr "отбиране на всички подавания дори да няма промени"
-#: builtin/rebase.c:1354
+#: builtin/rebase.c:1058
msgid "continue"
msgstr "продължаване"
-#: builtin/rebase.c:1357
+#: builtin/rebase.c:1061
msgid "skip current patch and continue"
msgstr "прескачане на текущата кръпка и продължаване"
-#: builtin/rebase.c:1359
+#: builtin/rebase.c:1063
msgid "abort and check out the original branch"
msgstr "преустановяване и възстановяване на първоначалния клон"
-#: builtin/rebase.c:1362
+#: builtin/rebase.c:1066
msgid "abort but keep HEAD where it is"
msgstr "преустановяване без промяна към какво сочи „HEAD“"
-#: builtin/rebase.c:1363
+#: builtin/rebase.c:1067
msgid "edit the todo list during an interactive rebase"
msgstr "редактиране на файла с команди при интерактивно пребазиране"
-#: builtin/rebase.c:1366
+#: builtin/rebase.c:1070
msgid "show the patch file being applied or merged"
msgstr "показване на кръпката, която се прилага или слива"
-#: builtin/rebase.c:1369
+#: builtin/rebase.c:1073
msgid "use apply strategies to rebase"
msgstr "при пребазиране да се ползва стратегия с прилагане"
-#: builtin/rebase.c:1373
+#: builtin/rebase.c:1077
msgid "use merging strategies to rebase"
msgstr "при пребазиране да се ползва стратегия със сливане"
-#: builtin/rebase.c:1377
+#: builtin/rebase.c:1081
msgid "let the user edit the list of commits to rebase"
msgstr ""
"позволяване на потребителя да редактира списъка с подавания за пребазиране"
-#: builtin/rebase.c:1381
+#: builtin/rebase.c:1085
msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
msgstr "(ОСТАРЯЛО) пресъздаване на сливанията вместо да се прескачат"
-#: builtin/rebase.c:1386
+#: builtin/rebase.c:1090
msgid "how to handle commits that become empty"
msgstr "как да се обработват оказалите се празни подавания"
-#: builtin/rebase.c:1393
+#: builtin/rebase.c:1093
+msgid "keep commits which start empty"
+msgstr "запазванe на първоначално празните подавания"
+
+#: builtin/rebase.c:1097
msgid "move commits that begin with squash!/fixup! under -i"
msgstr ""
"преместване на подаванията, които започват със „squash!“/“fixup!“ при „-i“"
-#: builtin/rebase.c:1400
+#: builtin/rebase.c:1104
msgid "add exec lines after each commit of the editable list"
msgstr ""
"добавяне на редове с команди за изпълнение след всяко подаване в "
"редактирания списък"
-#: builtin/rebase.c:1404
+#: builtin/rebase.c:1108
msgid "allow rebasing commits with empty messages"
msgstr "позволяване на пребазиране на подавания с празни съобщения"
-#: builtin/rebase.c:1408
+#: builtin/rebase.c:1112
msgid "try to rebase merges instead of skipping them"
msgstr "опит за пребазиране на сливанията вместо те да се прескачат"
-#: builtin/rebase.c:1411
+#: builtin/rebase.c:1115
msgid "use 'merge-base --fork-point' to refine upstream"
msgstr ""
"за доуточняването на следения клон, използвайте:\n"
"\n"
" git merge-base --fork-point"
-#: builtin/rebase.c:1413
+#: builtin/rebase.c:1117
msgid "use the given merge strategy"
msgstr "използване на зададената стратегията на сливане"
-#: builtin/rebase.c:1415 builtin/revert.c:115
+#: builtin/rebase.c:1119 builtin/revert.c:115
msgid "option"
msgstr "опция"
-#: builtin/rebase.c:1416
+#: builtin/rebase.c:1120
msgid "pass the argument through to the merge strategy"
msgstr "аргументът да се подаде на стратегията за сливане"
-#: builtin/rebase.c:1419
+#: builtin/rebase.c:1123
msgid "rebase all reachable commits up to the root(s)"
msgstr "пребазиране на всички достижими подавания до началното им подаване"
-#: builtin/rebase.c:1424
+#: builtin/rebase.c:1126
+msgid "automatically re-schedule any `exec` that fails"
+msgstr ""
+"автоматично подаване за повторно изпълнение на командите завършили с неуспех"
+
+#: builtin/rebase.c:1128
msgid "apply all changes, even those already present upstream"
msgstr "прилагане на всички промени, дори и наличните вече в следеното"
-#: builtin/rebase.c:1442
+#: builtin/rebase.c:1149
msgid "It looks like 'git am' is in progress. Cannot rebase."
msgstr ""
-"Изглежда, че сега се прилагат кръпки чрез командата „git-am“. Не може да "
+"Изглежда, че сега се прилагат кръпки чрез командата „git am“. Не може да "
"пребазирате в момента."
-#: builtin/rebase.c:1483
-msgid ""
-"git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
-msgstr ""
-"Опцията „--preserve-merges“ е остаряла. Ползвайте „--rebase-merges“ вместо "
-"нея."
+#: builtin/rebase.c:1180
+msgid "--preserve-merges was replaced by --rebase-merges"
+msgstr "Опцията „--preserve-merges“ е заменена с „--rebase-merges“."
-#: builtin/rebase.c:1488
+#: builtin/rebase.c:1193
msgid "cannot combine '--keep-base' with '--onto'"
msgstr "опциите „--keep-base“ и „--onto“ са несъвместими"
-#: builtin/rebase.c:1490
+#: builtin/rebase.c:1195
msgid "cannot combine '--keep-base' with '--root'"
msgstr "опциите „--keep-base“ и „--root“ са несъвместими"
-#: builtin/rebase.c:1494
+#: builtin/rebase.c:1199
msgid "cannot combine '--root' with '--fork-point'"
msgstr "опциите „--root“ и „--fork-point“ са несъвместими"
-#: builtin/rebase.c:1497
+#: builtin/rebase.c:1202
msgid "No rebase in progress?"
msgstr "Изглежда в момента не тече пребазиране"
-#: builtin/rebase.c:1501
+#: builtin/rebase.c:1206
msgid "The --edit-todo action can only be used during interactive rebase."
msgstr ""
"Опцията „--edit-todo“ е достъпна само по време на интерактивно пребазиране."
-#: builtin/rebase.c:1524 t/helper/test-fast-rebase.c:122
+#: builtin/rebase.c:1229 t/helper/test-fast-rebase.c:122
msgid "Cannot read HEAD"
msgstr "Указателят „HEAD“ не може да бъде прочетен"
-#: builtin/rebase.c:1536
+#: builtin/rebase.c:1241
msgid ""
"You must edit all merge conflicts and then\n"
"mark them as resolved using git add"
@@ -20856,16 +21099,16 @@
"Трябва да редактирате всички конфликти при сливането. След това\n"
"отбележете коригирането им чрез командата „git add“"
-#: builtin/rebase.c:1555
+#: builtin/rebase.c:1260
msgid "could not discard worktree changes"
msgstr "промените в работното дърво не може да бъдат занулени"
-#: builtin/rebase.c:1574
+#: builtin/rebase.c:1279
#, c-format
msgid "could not move back to %s"
msgstr "връщането към „%s“ е невъзможно"
-#: builtin/rebase.c:1620
+#: builtin/rebase.c:1325
#, c-format
msgid ""
"It seems that there is already a %s directory, and\n"
@@ -20886,147 +21129,136 @@
"за\n"
"да не загубите случайно промени.\n"
-#: builtin/rebase.c:1648
+#: builtin/rebase.c:1353
msgid "switch `C' expects a numerical value"
msgstr "опцията „C“ очаква число за аргумент"
-#: builtin/rebase.c:1690
+#: builtin/rebase.c:1395
#, c-format
msgid "Unknown mode: %s"
msgstr "Неизвестна стратегия: „%s“"
-#: builtin/rebase.c:1729
+#: builtin/rebase.c:1434
msgid "--strategy requires --merge or --interactive"
msgstr ""
"опцията „--strategy“ изисква някоя от опциите „--merge“ или „--interactive“"
-#: builtin/rebase.c:1759
+#: builtin/rebase.c:1463
msgid "cannot combine apply options with merge options"
msgstr "опциите за „apply“ са несъвместими с опциите за сливане"
-#: builtin/rebase.c:1772
+#: builtin/rebase.c:1476
#, c-format
msgid "Unknown rebase backend: %s"
msgstr "Непозната реализация на пребазиране: %s"
-#: builtin/rebase.c:1802
+#: builtin/rebase.c:1505
msgid "--reschedule-failed-exec requires --exec or --interactive"
msgstr ""
"опцията „--reschedule-failed-exec“ изисква някоя от опциите „--exec“ или „--"
"interactive“"
-#: builtin/rebase.c:1822
-msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
-msgstr "опциите „--preserve-merges“ и „--rebase-merges“ са несъвместими"
-
-#: builtin/rebase.c:1826
-msgid ""
-"error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
-msgstr ""
-"ГРЕШКА: опциите „--preserve-merges“ и „--reschedule-failed-exec“ са "
-"несъвместими"
-
-#: builtin/rebase.c:1850
+#: builtin/rebase.c:1536
#, c-format
msgid "invalid upstream '%s'"
msgstr "неправилен следен клон: „%s“"
-#: builtin/rebase.c:1856
+#: builtin/rebase.c:1542
msgid "Could not create new root commit"
msgstr "Не може да се създаде ново начално подаване"
-#: builtin/rebase.c:1882
+#: builtin/rebase.c:1568
#, c-format
msgid "'%s': need exactly one merge base with branch"
msgstr "„%s“: изисква се точно една база за сливане с клона"
-#: builtin/rebase.c:1885
+#: builtin/rebase.c:1571
#, c-format
msgid "'%s': need exactly one merge base"
msgstr "„%s“: изисква се точно една база за пребазиране"
-#: builtin/rebase.c:1893
+#: builtin/rebase.c:1580
#, c-format
msgid "Does not point to a valid commit '%s'"
msgstr "Указателят „%s“ не сочи към подаване"
-#: builtin/rebase.c:1921
+#: builtin/rebase.c:1607
#, c-format
-msgid "fatal: no such branch/commit '%s'"
-msgstr "ФАТАЛНА ГРЕШКА: не съществува клон „%s“"
+msgid "no such branch/commit '%s'"
+msgstr "не съществува клон/подаване „%s“"
-#: builtin/rebase.c:1929 builtin/submodule--helper.c:39
-#: builtin/submodule--helper.c:2414
+#: builtin/rebase.c:1618 builtin/submodule--helper.c:39
+#: builtin/submodule--helper.c:2658
#, c-format
msgid "No such ref: %s"
msgstr "Такъв указател няма: %s"
-#: builtin/rebase.c:1940
+#: builtin/rebase.c:1629
msgid "Could not resolve HEAD to a revision"
msgstr "Подаването, сочено от указателя „HEAD“, не може да бъде открито"
-#: builtin/rebase.c:1961
+#: builtin/rebase.c:1650
msgid "Please commit or stash them."
msgstr "Промените трябва или да се подадат, или да се скатаят."
-#: builtin/rebase.c:1997
+#: builtin/rebase.c:1686
#, c-format
msgid "could not switch to %s"
msgstr "не може да се премине към „%s“"
-#: builtin/rebase.c:2008
+#: builtin/rebase.c:1697
msgid "HEAD is up to date."
msgstr "Указателят „HEAD“ е напълно актуален."
-#: builtin/rebase.c:2010
+#: builtin/rebase.c:1699
#, c-format
msgid "Current branch %s is up to date.\n"
msgstr "Текущият клон „%s“ е напълно актуален.\n"
-#: builtin/rebase.c:2018
+#: builtin/rebase.c:1707
msgid "HEAD is up to date, rebase forced."
msgstr "Указателят „HEAD“ е напълно актуален — принудително пребазиране"
-#: builtin/rebase.c:2020
+#: builtin/rebase.c:1709
#, c-format
msgid "Current branch %s is up to date, rebase forced.\n"
msgstr "Текущият клон „%s“ е напълно актуален — принудително пребазиране\n"
-#: builtin/rebase.c:2028
+#: builtin/rebase.c:1717
msgid "The pre-rebase hook refused to rebase."
msgstr "Куката за изпълнение преди пребазиране отхвърли пребазирането."
-#: builtin/rebase.c:2035
+#: builtin/rebase.c:1724
#, c-format
msgid "Changes to %s:\n"
msgstr "Промените в „%s“:\n"
-#: builtin/rebase.c:2038
+#: builtin/rebase.c:1727
#, c-format
msgid "Changes from %s to %s:\n"
msgstr "Промените от „%s“ към „%s“:\n"
-#: builtin/rebase.c:2063
+#: builtin/rebase.c:1752
#, c-format
msgid "First, rewinding head to replay your work on top of it...\n"
msgstr ""
"Първо, указателят „HEAD“ започва да сочи към базата, върху която "
"пребазирате…\n"
-#: builtin/rebase.c:2072
+#: builtin/rebase.c:1761
msgid "Could not detach HEAD"
msgstr "Указателят „HEAD“ не може да се отделѝ"
-#: builtin/rebase.c:2081
+#: builtin/rebase.c:1770
#, c-format
msgid "Fast-forwarded %s to %s.\n"
msgstr "Превъртане на „%s“ към „%s“.\n"
-#: builtin/receive-pack.c:34
+#: builtin/receive-pack.c:35
msgid "git receive-pack <git-dir>"
msgstr "git receive-pack ДИРЕКТОРИЯ_НА_GIT"
-#: builtin/receive-pack.c:1275
+#: builtin/receive-pack.c:1280
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"
@@ -21059,7 +21291,7 @@
"За да заглушите това съобщение, като запазите стандартното поведение,\n"
"задайте настройката „receive.denyCurrentBranch“ да е „refuse“ (отказ)."
-#: builtin/receive-pack.c:1295
+#: builtin/receive-pack.c:1300
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"
@@ -21080,11 +21312,11 @@
"За да заглушите това съобщение, задайте настройката\n"
"„receive.denyDeleteCurrent“ да е „refuse“ (отказ)."
-#: builtin/receive-pack.c:2478
+#: builtin/receive-pack.c:2480
msgid "quiet"
msgstr "без извеждане на информация"
-#: builtin/receive-pack.c:2492
+#: builtin/receive-pack.c:2495
msgid "You must specify a directory."
msgstr "Трябва да укажете директория."
@@ -21124,7 +21356,7 @@
msgid "%s points nowhere!"
msgstr "„%s“ не сочи наникъде!"
-#: builtin/reflog.c:699
+#: builtin/reflog.c:700
msgid "no reflog specified to delete"
msgstr "не е указан журнал с подавания за изтриване"
@@ -21284,7 +21516,7 @@
"указването на следени клони е смислено само за отдалечени хранилища, от "
"които се доставя"
-#: builtin/remote.c:195 builtin/remote.c:700
+#: builtin/remote.c:195 builtin/remote.c:705
#, c-format
msgid "remote %s already exists."
msgstr "вече съществува отдалечено хранилище с име „%s“."
@@ -21294,25 +21526,30 @@
msgid "Could not setup master '%s'"
msgstr "Основният клон „%s“ не може да бъде настроен"
-#: builtin/remote.c:355
+#: builtin/remote.c:322
+#, c-format
+msgid "unhandled branch.%s.rebase=%s; assuming 'true'"
+msgstr "„branch.%s.rebase=%s“ не се поддържа. Приема се „true“ (истина)"
+
+#: builtin/remote.c:366
#, c-format
msgid "Could not get fetch map for refspec %s"
msgstr "Обектите за доставяне за указателя „%s“ не може да бъдат получени"
-#: builtin/remote.c:454 builtin/remote.c:462
+#: builtin/remote.c:460 builtin/remote.c:468
msgid "(matching)"
msgstr "(съвпадащи)"
-#: builtin/remote.c:466
+#: builtin/remote.c:472
msgid "(delete)"
msgstr "(за изтриване)"
-#: builtin/remote.c:655
+#: builtin/remote.c:660
#, c-format
msgid "could not set '%s'"
msgstr "„%s“ не може да се зададе"
-#: builtin/remote.c:660
+#: builtin/remote.c:665
#, c-format
msgid ""
"The %s configuration remote.pushDefault in:\n"
@@ -21323,17 +21560,17 @@
" %s:%d\n"
"използва отдалечено хранилище, което вече не съществува: „%s“"
-#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:943
+#: builtin/remote.c:696 builtin/remote.c:841 builtin/remote.c:948
#, c-format
msgid "No such remote: '%s'"
msgstr "Няма отдалечено хранилище на име „%s“"
-#: builtin/remote.c:710
+#: builtin/remote.c:715
#, c-format
msgid "Could not rename config section '%s' to '%s'"
msgstr "Разделът „%s“ в настройките не може да бъде преименуван на „%s“"
-#: builtin/remote.c:730
+#: builtin/remote.c:735
#, c-format
msgid ""
"Not updating non-default fetch refspec\n"
@@ -21344,17 +21581,17 @@
" %s\n"
" Променете настройките ръчно, ако е необходимо."
-#: builtin/remote.c:770
+#: builtin/remote.c:775
#, c-format
msgid "deleting '%s' failed"
msgstr "неуспешно изтриване на „%s“"
-#: builtin/remote.c:804
+#: builtin/remote.c:809
#, c-format
msgid "creating '%s' failed"
msgstr "неуспешно създаване на „%s“"
-#: builtin/remote.c:882
+#: builtin/remote.c:887
msgid ""
"Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
"to delete it, use:"
@@ -21368,121 +21605,121 @@
"Бележка: Няколко клона извън йерархията „refs/remotes/“ не бяха изтрити.\n"
"Изтрийте ги чрез командата:"
-#: builtin/remote.c:896
+#: builtin/remote.c:901
#, c-format
msgid "Could not remove config section '%s'"
msgstr "Разделът „%s“ в настройките не може да бъде изтрит"
-#: builtin/remote.c:999
+#: builtin/remote.c:1009
#, c-format
msgid " new (next fetch will store in remotes/%s)"
msgstr " нов (следващото доставяне ще го разположи в „remotes/%s“)"
-#: builtin/remote.c:1002
+#: builtin/remote.c:1012
msgid " tracked"
msgstr " следен"
-#: builtin/remote.c:1004
+#: builtin/remote.c:1014
msgid " stale (use 'git remote prune' to remove)"
msgstr " стар (изтрийте чрез „git remote prune“)"
-#: builtin/remote.c:1006
+#: builtin/remote.c:1016
msgid " ???"
msgstr " неясно състояние"
# CHECK
-#: builtin/remote.c:1047
+#: builtin/remote.c:1057
#, c-format
msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
msgstr ""
-"неправилен клон за сливане „%s“. Невъзможно е да пребазирате върху повече "
-"от 1 клон"
+"неправилен клон за сливане „branch.%s.merge“. Невъзможно е да пребазирате "
+"върху повече от 1 клон"
-#: builtin/remote.c:1056
+#: builtin/remote.c:1066
#, c-format
msgid "rebases interactively onto remote %s"
msgstr "интерактивно пребазиране върху отдалечения клон „%s“"
-#: builtin/remote.c:1058
+#: builtin/remote.c:1068
#, c-format
msgid "rebases interactively (with merges) onto remote %s"
msgstr "интерактивно пребазиране (със сливания) върху отдалечения клон „%s“"
-#: builtin/remote.c:1061
+#: builtin/remote.c:1071
#, c-format
msgid "rebases onto remote %s"
msgstr "пребазиране върху отдалечения клон „%s“"
-#: builtin/remote.c:1065
+#: builtin/remote.c:1075
#, c-format
msgid " merges with remote %s"
msgstr " сливане с отдалечения клон „%s“"
-#: builtin/remote.c:1068
+#: builtin/remote.c:1078
#, c-format
msgid "merges with remote %s"
msgstr "сливане с отдалечения клон „%s“"
-#: builtin/remote.c:1071
+#: builtin/remote.c:1081
#, c-format
msgid "%-*s and with remote %s\n"
msgstr "%-*s и с отдалечения клон „%s“\n"
-#: builtin/remote.c:1114
+#: builtin/remote.c:1124
msgid "create"
msgstr "създаден"
-#: builtin/remote.c:1117
+#: builtin/remote.c:1127
msgid "delete"
msgstr "изтрит"
-#: builtin/remote.c:1121
+#: builtin/remote.c:1131
msgid "up to date"
msgstr "актуален"
-#: builtin/remote.c:1124
+#: builtin/remote.c:1134
msgid "fast-forwardable"
msgstr "може да се превърти"
-#: builtin/remote.c:1127
+#: builtin/remote.c:1137
msgid "local out of date"
msgstr "локалният е изостанал"
-#: builtin/remote.c:1134
+#: builtin/remote.c:1144
#, c-format
msgid " %-*s forces to %-*s (%s)"
msgstr " %-*s принудително изтласква към %-*s (%s)"
-#: builtin/remote.c:1137
+#: builtin/remote.c:1147
#, c-format
msgid " %-*s pushes to %-*s (%s)"
msgstr " %-*s изтласква към %-*s (%s)"
-#: builtin/remote.c:1141
+#: builtin/remote.c:1151
#, c-format
msgid " %-*s forces to %s"
msgstr " %-*s принудително изтласква към %s"
-#: builtin/remote.c:1144
+#: builtin/remote.c:1154
#, c-format
msgid " %-*s pushes to %s"
msgstr " %-*s изтласква към %s"
-#: builtin/remote.c:1212
+#: builtin/remote.c:1222
msgid "do not query remotes"
msgstr "без заявки към отдалечените хранилища"
-#: builtin/remote.c:1239
+#: builtin/remote.c:1243
#, c-format
msgid "* remote %s"
msgstr "● отдалечено хранилище „%s“"
-#: builtin/remote.c:1240
+#: builtin/remote.c:1244
#, c-format
msgid " Fetch URL: %s"
msgstr " Адрес за доставяне: %s"
-#: builtin/remote.c:1241 builtin/remote.c:1257 builtin/remote.c:1396
+#: builtin/remote.c:1245 builtin/remote.c:1261 builtin/remote.c:1398
msgid "(no URL)"
msgstr "(без адрес)"
@@ -21490,25 +21727,25 @@
#. with the one in " Fetch URL: %s"
#. translation.
#.
-#: builtin/remote.c:1255 builtin/remote.c:1257
+#: builtin/remote.c:1259 builtin/remote.c:1261
#, c-format
msgid " Push URL: %s"
msgstr " Адрес за изтласкване: %s"
-#: builtin/remote.c:1259 builtin/remote.c:1261 builtin/remote.c:1263
+#: builtin/remote.c:1263 builtin/remote.c:1265 builtin/remote.c:1267
#, c-format
msgid " HEAD branch: %s"
msgstr " клон сочен от HEAD: %s"
-#: builtin/remote.c:1259
+#: builtin/remote.c:1263
msgid "(not queried)"
msgstr "(без проверка)"
-#: builtin/remote.c:1261
+#: builtin/remote.c:1265
msgid "(unknown)"
msgstr "(непознат)"
-#: builtin/remote.c:1265
+#: builtin/remote.c:1269
#, c-format
msgid ""
" HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
@@ -21517,161 +21754,165 @@
"хранилище\n"
" не е еднозначен и е някой от следните):\n"
-#: builtin/remote.c:1277
+#: builtin/remote.c:1281
#, c-format
msgid " Remote branch:%s"
msgid_plural " Remote branches:%s"
msgstr[0] " Отдалечен клон:%s"
msgstr[1] " Отдалечени клони:%s"
-#: builtin/remote.c:1280 builtin/remote.c:1306
+#: builtin/remote.c:1284 builtin/remote.c:1310
msgid " (status not queried)"
msgstr " (състоянието не бе проверено)"
-#: builtin/remote.c:1289
+#: builtin/remote.c:1293
msgid " Local branch configured for 'git pull':"
msgid_plural " Local branches configured for 'git pull':"
msgstr[0] " Локален клон настроен за издърпване чрез „git pull“:"
msgstr[1] " Локални клони настроени за издърпване чрез „git pull“:"
-#: builtin/remote.c:1297
+#: builtin/remote.c:1301
msgid " Local refs will be mirrored by 'git push'"
msgstr " Локалните указатели ще бъдат пренесени чрез „ push“"
-#: builtin/remote.c:1303
+#: builtin/remote.c:1307
#, c-format
msgid " Local ref configured for 'git push'%s:"
msgid_plural " Local refs configured for 'git push'%s:"
msgstr[0] " Локалният указател, настроен за „git push“%s:"
msgstr[1] " Локалните указатели, настроени за „git push“%s:"
-#: builtin/remote.c:1324
+#: builtin/remote.c:1328
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr "задаване на refs/remotes/ИМЕ/HEAD според отдалеченото хранилище"
-#: builtin/remote.c:1326
+#: builtin/remote.c:1330
msgid "delete refs/remotes/<name>/HEAD"
msgstr "изтриване на refs/remotes/ИМЕ/HEAD"
-#: builtin/remote.c:1341
+#: builtin/remote.c:1344
msgid "Cannot determine remote HEAD"
msgstr "Не може да се установи отдалеченият връх"
-#: builtin/remote.c:1343
+#: builtin/remote.c:1346
msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
msgstr ""
"Множество клони с върхове. Изберете изрично някой от тях чрез командата:"
-#: builtin/remote.c:1353
+#: builtin/remote.c:1356
#, c-format
msgid "Could not delete %s"
msgstr "„%s“ не може да бъде изтрит"
-#: builtin/remote.c:1361
+#: builtin/remote.c:1364
#, c-format
msgid "Not a valid ref: %s"
msgstr "Неправилен указател: %s"
-#: builtin/remote.c:1363
+#: builtin/remote.c:1366
#, c-format
msgid "Could not setup %s"
msgstr "„%s“ не може да се настрои"
-#: builtin/remote.c:1381
+#: builtin/remote.c:1384
#, c-format
msgid " %s will become dangling!"
msgstr "„%s“ ще се превърне в обект извън клоните!"
-#: builtin/remote.c:1382
+#: builtin/remote.c:1385
#, c-format
msgid " %s has become dangling!"
msgstr "„%s“ се превърна в обект извън клоните!"
-#: builtin/remote.c:1392
+#: builtin/remote.c:1394
#, c-format
msgid "Pruning %s"
msgstr "Окастряне на „%s“"
-#: builtin/remote.c:1393
+#: builtin/remote.c:1395
#, c-format
msgid "URL: %s"
msgstr "адрес: %s"
-#: builtin/remote.c:1409
+#: builtin/remote.c:1411
#, c-format
msgid " * [would prune] %s"
msgstr " ● [ще бъде окастрено] %s"
-#: builtin/remote.c:1412
+#: builtin/remote.c:1414
#, c-format
msgid " * [pruned] %s"
msgstr " ● [окастрено] %s"
-#: builtin/remote.c:1457
+#: builtin/remote.c:1459
msgid "prune remotes after fetching"
msgstr "окастряне на огледалата на отдалечените хранилища след доставяне"
-#: builtin/remote.c:1521 builtin/remote.c:1577 builtin/remote.c:1647
+#: builtin/remote.c:1523 builtin/remote.c:1579 builtin/remote.c:1649
#, c-format
msgid "No such remote '%s'"
msgstr "Няма отдалечено хранилище на име „%s“"
-#: builtin/remote.c:1539
+#: builtin/remote.c:1541
msgid "add branch"
msgstr "добавяне на клон"
-#: builtin/remote.c:1546
+#: builtin/remote.c:1548
msgid "no remote specified"
msgstr "не е указано отдалечено хранилище"
-#: builtin/remote.c:1563
+#: builtin/remote.c:1565
msgid "query push URLs rather than fetch URLs"
msgstr "запитване към адресите за изтласкване, а не за доставяне"
-#: builtin/remote.c:1565
+#: builtin/remote.c:1567
msgid "return all URLs"
msgstr "извеждане на всички адреси"
-#: builtin/remote.c:1595
+#: builtin/remote.c:1597
#, c-format
msgid "no URLs configured for remote '%s'"
msgstr "не е зададен адрес за отдалеченото хранилище „%s“"
-#: builtin/remote.c:1621
+#: builtin/remote.c:1623
msgid "manipulate push URLs"
msgstr "промяна на адресите за изтласкване"
-#: builtin/remote.c:1623
+#: builtin/remote.c:1625
msgid "add URL"
msgstr "добавяне на адреси"
-#: builtin/remote.c:1625
+#: builtin/remote.c:1627
msgid "delete URLs"
msgstr "изтриване на адреси"
-#: builtin/remote.c:1632
+#: builtin/remote.c:1634
msgid "--add --delete doesn't make sense"
msgstr "опциите „--add“ и „--delete“ са несъвместими"
-#: builtin/remote.c:1673
+#: builtin/remote.c:1675
#, c-format
msgid "Invalid old URL pattern: %s"
msgstr "Неправилен (стар) формат за адрес: %s"
-#: builtin/remote.c:1681
+#: builtin/remote.c:1683
#, c-format
msgid "No such URL found: %s"
msgstr "Такъв адрес не е открит: %s"
-#: builtin/remote.c:1683
+#: builtin/remote.c:1685
msgid "Will not delete all non-push URLs"
msgstr "Никой от адресите, които не са за изтласкване, няма да се изтрие"
-#: builtin/repack.c:26
+#: builtin/remote.c:1702
+msgid "be verbose; must be placed before a subcommand"
+msgstr "повече подробности. Поставя се пред подкоманда"
+
+#: builtin/repack.c:28
msgid "git repack [<options>]"
msgstr "git repack [ОПЦИЯ…]"
-#: builtin/repack.c:31
+#: builtin/repack.c:33
msgid ""
"Incremental repacks are incompatible with bitmap indexes. Use\n"
"--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -21680,154 +21921,167 @@
"Ползвайте опцията --no-write-bitmap-index или изключете настройката\n"
"„pack.writebitmaps“."
-#: builtin/repack.c:198
+#: builtin/repack.c:201
msgid "could not start pack-objects to repack promisor objects"
msgstr ""
"командата „pack-objects“ не може да се стартира за препакетирането на "
"гарантиращите обекти"
-#: builtin/repack.c:270 builtin/repack.c:630
+#: builtin/repack.c:273 builtin/repack.c:816
msgid "repack: Expecting full hex object ID lines only from pack-objects."
msgstr ""
"repack: от „pack-objects“ се изискват редове само с пълни шестнайсетични "
"указатели."
-#: builtin/repack.c:294
+#: builtin/repack.c:297
msgid "could not finish pack-objects to repack promisor objects"
msgstr ""
"командата „pack-objects“ не може да завърши за препакетирането на "
"гарантиращите обекти"
-#: builtin/repack.c:309
+#: builtin/repack.c:312
#, c-format
msgid "cannot open index for %s"
msgstr "грешка при отваряне на индекса за „%s“"
-#: builtin/repack.c:368
+#: builtin/repack.c:371
#, c-format
msgid "pack %s too large to consider in geometric progression"
msgstr "пакет „%s“ е твърде голям, за да е част от геометрична прогресия"
-#: builtin/repack.c:401 builtin/repack.c:408 builtin/repack.c:413
+#: builtin/repack.c:404 builtin/repack.c:411 builtin/repack.c:416
#, c-format
msgid "pack %s too large to roll up"
msgstr "пакет „%s“ е твърде голям за свиване"
-#: builtin/repack.c:460
+#: builtin/repack.c:496
+#, c-format
+msgid "could not open tempfile %s for writing"
+msgstr "временният файл „%s“ не може да бъде отворен за запис"
+
+#: builtin/repack.c:514
+msgid "could not close refs snapshot tempfile"
+msgstr "временният файл със снимка на указателите не може да се затвори"
+
+#: builtin/repack.c:628
msgid "pack everything in a single pack"
msgstr "пакетиране на всичко в пакет"
-#: builtin/repack.c:462
+#: builtin/repack.c:630
msgid "same as -a, and turn unreachable objects loose"
msgstr ""
"същото като опцията „-a“. Допълнително — недостижимите обекти да станат "
"непакетирани"
-#: builtin/repack.c:465
+#: builtin/repack.c:633
msgid "remove redundant packs, and run git-prune-packed"
msgstr ""
"премахване на ненужните пакетирани файлове и изпълнение на командата „git-"
"prune-packed“"
-#: builtin/repack.c:467
+#: builtin/repack.c:635
msgid "pass --no-reuse-delta to git-pack-objects"
msgstr "подаване на опцията „--no-reuse-delta“ на командата „git-pack-objects“"
-#: builtin/repack.c:469
+#: builtin/repack.c:637
msgid "pass --no-reuse-object to git-pack-objects"
msgstr ""
"подаване на опцията „--no-reuse-object“ на командата „git-pack-objects“"
-#: builtin/repack.c:471
+#: builtin/repack.c:639
msgid "do not run git-update-server-info"
msgstr "без изпълнение на командата „git-update-server-info“"
-#: builtin/repack.c:474
+#: builtin/repack.c:642
msgid "pass --local to git-pack-objects"
msgstr "подаване на опцията „--local“ на командата „git-pack-objects“"
-#: builtin/repack.c:476
+#: builtin/repack.c:644
msgid "write bitmap index"
msgstr "създаване и записване на индекси на база битови маски"
-#: builtin/repack.c:478
+#: builtin/repack.c:646
msgid "pass --delta-islands to git-pack-objects"
msgstr "подаване на опцията „--delta-islands“ на командата „git-pack-objects“"
-#: builtin/repack.c:479
+#: builtin/repack.c:647
msgid "approxidate"
msgstr "евристична дата"
-#: builtin/repack.c:480
+#: builtin/repack.c:648
msgid "with -A, do not loosen objects older than this"
msgstr ""
"при комбинирането с опцията „-A“ — без разпакетиране на обектите по стари от "
"това"
-#: builtin/repack.c:482
+#: builtin/repack.c:650
msgid "with -a, repack unreachable objects"
msgstr "с „-a“ — препакетиране на недостижимите обекти"
-#: builtin/repack.c:484
+#: builtin/repack.c:652
msgid "size of the window used for delta compression"
msgstr "размер на прозореца за делта компресията"
-#: builtin/repack.c:485 builtin/repack.c:491
+#: builtin/repack.c:653 builtin/repack.c:659
msgid "bytes"
msgstr "байтове"
-#: builtin/repack.c:486
+#: builtin/repack.c:654
msgid "same as the above, but limit memory size instead of entries count"
msgstr ""
"същото като горната опция, но ограничението да е по размер на паметта, а не "
"по броя на обектите"
-#: builtin/repack.c:488
+#: builtin/repack.c:656
msgid "limits the maximum delta depth"
msgstr "ограничаване на максималната дълбочина на делтата"
-#: builtin/repack.c:490
+#: builtin/repack.c:658
msgid "limits the maximum number of threads"
msgstr "ограничаване на максималния брой нишки"
-#: builtin/repack.c:492
+#: builtin/repack.c:660
msgid "maximum size of each packfile"
msgstr "максимален размер на всеки пакет"
-#: builtin/repack.c:494
+#: builtin/repack.c:662
msgid "repack objects in packs marked with .keep"
msgstr "препакетиране на обектите в пакети белязани с „.keep“"
-#: builtin/repack.c:496
+#: builtin/repack.c:664
msgid "do not repack this pack"
msgstr "без препакетиране на този пакет"
-#: builtin/repack.c:498
+#: builtin/repack.c:666
msgid "find a geometric progression with factor <N>"
msgstr "откриване на геометрична прогресия с частно <N>"
-#: builtin/repack.c:508
+#: builtin/repack.c:668
+msgid "write a multi-pack index of the resulting packs"
+msgstr "запазване на многопакетен индекс за създадените пакети"
+
+#: builtin/repack.c:678
msgid "cannot delete packs in a precious-objects repo"
msgstr "пакетите в хранилище с важни обекти не може да се трият"
-#: builtin/repack.c:512
+#: builtin/repack.c:682
msgid "--keep-unreachable and -A are incompatible"
msgstr "опциите „--keep-unreachable“ и „-A“ са несъвместими"
-#: builtin/repack.c:527
+#: builtin/repack.c:713
msgid "--geometric is incompatible with -A, -a"
msgstr "опциите „--geometric“ и „-A“/„-a“ са несъвместими"
-#: builtin/repack.c:639
+#: builtin/repack.c:825
msgid "Nothing new to pack."
msgstr "Нищо ново за пакетиране"
-#: builtin/repack.c:669
+#: builtin/repack.c:855
#, c-format
msgid "missing required file: %s"
msgstr "липсва задължителния файл „%s“"
-#: builtin/repack.c:671
+#: builtin/repack.c:857
#, c-format
msgid "could not unlink: %s"
msgstr "неуспешно изтриване на „%s“"
@@ -22138,96 +22392,96 @@
msgid "keep"
msgstr "запазващо (keep)"
-#: builtin/reset.c:83
+#: builtin/reset.c:89
msgid "You do not have a valid HEAD."
msgstr "Указателят „HEAD“ е повреден."
-#: builtin/reset.c:85
+#: builtin/reset.c:91
msgid "Failed to find tree of HEAD."
msgstr "Дървото, сочено от указателя „HEAD“, не може да бъде открито."
-#: builtin/reset.c:91
+#: builtin/reset.c:97
#, c-format
msgid "Failed to find tree of %s."
msgstr "Дървото, сочено от „%s“, не може да бъде открито."
-#: builtin/reset.c:116
+#: builtin/reset.c:122
#, c-format
msgid "HEAD is now at %s"
msgstr "Указателят „HEAD“ сочи към „%s“"
-#: builtin/reset.c:195
+#: builtin/reset.c:201
#, c-format
msgid "Cannot do a %s reset in the middle of a merge."
msgstr "Не може да се извърши %s зануляване по време на сливане."
-#: builtin/reset.c:295 builtin/stash.c:589 builtin/stash.c:663
-#: builtin/stash.c:687
+#: builtin/reset.c:301 builtin/stash.c:605 builtin/stash.c:679
+#: builtin/stash.c:703
msgid "be quiet, only report errors"
msgstr "по-малко подробности, да се извеждат само грешките"
-#: builtin/reset.c:297
+#: builtin/reset.c:303
msgid "reset HEAD and index"
msgstr "индекса и указателя „HEAD“, без работното дърво"
-#: builtin/reset.c:298
+#: builtin/reset.c:304
msgid "reset only HEAD"
msgstr "само указателя „HEAD“, без индекса и работното дърво"
-#: builtin/reset.c:300 builtin/reset.c:302
+#: builtin/reset.c:306 builtin/reset.c:308
msgid "reset HEAD, index and working tree"
msgstr "указателя „HEAD“, индекса и работното дърво"
-#: builtin/reset.c:304
+#: builtin/reset.c:310
msgid "reset HEAD but keep local changes"
msgstr "зануляване на указателя „HEAD“, но запазване на локалните промени"
-#: builtin/reset.c:310
+#: builtin/reset.c:316
msgid "record only the fact that removed paths will be added later"
msgstr ""
"отбелязване само на факта, че изтритите пътища ще бъдат добавени по-късно"
-#: builtin/reset.c:344
+#: builtin/reset.c:350
#, c-format
msgid "Failed to resolve '%s' as a valid revision."
msgstr "Стойността „%s“ не е разпозната като съществуваща версия."
-#: builtin/reset.c:352
+#: builtin/reset.c:358
#, c-format
msgid "Failed to resolve '%s' as a valid tree."
msgstr "„%s“ не е разпознат като дърво."
-#: builtin/reset.c:361
+#: builtin/reset.c:367
msgid "--patch is incompatible with --{hard,mixed,soft}"
msgstr ""
"опцията „--patch“ е несъвместима с всяка от опциите „--hard“/„--mixed“/„--"
"soft“"
-#: builtin/reset.c:371
+#: builtin/reset.c:377
msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
msgstr ""
"опцията „--mixed“ не бива да се използва заедно с пътища. Вместо това "
"изпълнете „git reset -- ПЪТ…“."
-#: builtin/reset.c:373
+#: builtin/reset.c:379
#, c-format
msgid "Cannot do %s reset with paths."
msgstr "Не може да извършите %s зануляване, когато сте задали ПЪТ."
-#: builtin/reset.c:388
+#: builtin/reset.c:394
#, c-format
msgid "%s reset is not allowed in a bare repository"
msgstr "В голо хранилище не може да извършите %s зануляване"
-#: builtin/reset.c:392
+#: builtin/reset.c:398
msgid "-N can only be used with --mixed"
msgstr "опцията „-N“ изисква опцията „--mixed“"
-#: builtin/reset.c:413
+#: builtin/reset.c:419
msgid "Unstaged changes after reset:"
msgstr "Промени извън индекса след зануляването:"
-#: builtin/reset.c:416
+#: builtin/reset.c:422
#, c-format
msgid ""
"\n"
@@ -22240,12 +22494,12 @@
"Опцията „--quiet“ заглушава това съобщение еднократно. За постоянно\n"
"заглушаване задайте настройката „reset.quiet“ да е „true“ (истина).\n"
-#: builtin/reset.c:434
+#: builtin/reset.c:440
#, c-format
msgid "Could not reset index file to revision '%s'."
msgstr "Индексът не може да бъде занулен към версия „%s“."
-#: builtin/reset.c:439
+#: builtin/reset.c:445
msgid "Could not write new index file."
msgstr "Новият индекс не може да бъде записан."
@@ -22426,15 +22680,19 @@
msgid "preserve initially empty commits"
msgstr "запазване на първоначално празните подавания"
+#: builtin/revert.c:128
+msgid "allow commits with empty messages"
+msgstr "позволяване на празни съобщения при подаване"
+
#: builtin/revert.c:129
msgid "keep redundant, empty commits"
msgstr "запазване на излишните, празни подавания"
-#: builtin/revert.c:237
+#: builtin/revert.c:241
msgid "revert failed"
msgstr "неуспешна отмяна"
-#: builtin/revert.c:250
+#: builtin/revert.c:254
msgid "cherry-pick failed"
msgstr "неуспешно отбиране"
@@ -22487,72 +22745,73 @@
msgstr[0] "следният файл е с променено съдържание"
msgstr[1] "следните файлове са с променено съдържание"
-#: builtin/rm.c:244
+#: builtin/rm.c:245
msgid "do not list removed files"
msgstr "да не се извеждат изтритите файлове"
-#: builtin/rm.c:245
+#: builtin/rm.c:246
msgid "only remove from the index"
msgstr "изтриване само от индекса"
-#: builtin/rm.c:246
+#: builtin/rm.c:247
msgid "override the up-to-date check"
msgstr "въпреки проверката за актуалността на съдържанието"
-#: builtin/rm.c:247
+#: builtin/rm.c:248
msgid "allow recursive removal"
msgstr "рекурсивно изтриване"
-#: builtin/rm.c:249
+#: builtin/rm.c:250
msgid "exit with a zero status even if nothing matched"
msgstr ""
"изходният код да е 0, дори ако никой файл нe e напаснал с шаблона за "
"изтриване"
-#: builtin/rm.c:283
+#: builtin/rm.c:285
msgid "No pathspec was given. Which files should I remove?"
msgstr "Не са зададени пътища. Кои файлове да се изтрият?"
-#: builtin/rm.c:310
+#: builtin/rm.c:315
msgid "please stage your changes to .gitmodules or stash them to proceed"
msgstr ""
"за да продължите, или вкарайте промените по файла „.gitmodules“ в индекса,\n"
"или ги скатайте"
-#: builtin/rm.c:331
+#: builtin/rm.c:337
#, c-format
msgid "not removing '%s' recursively without -r"
msgstr "без използването на опцията „-r“ „%s“ няма да се изтрие рекурсивно"
-#: builtin/rm.c:379
+#: builtin/rm.c:385
#, c-format
msgid "git rm: unable to remove %s"
msgstr "git rm: „%s“ не може да се изтрие"
#: builtin/send-pack.c:20
msgid ""
-"git send-pack [--all | --mirror] [--dry-run] [--force] [--receive-pack=<git-"
-"receive-pack>] [--verbose] [--thin] [--atomic] [<host>:]<directory> "
-"[<ref>...]\n"
-" --all and explicit <ref> specification are mutually exclusive."
+"git send-pack [--mirror] [--dry-run] [--force]\n"
+" [--receive-pack=<git-receive-pack>]\n"
+" [--verbose] [--thin] [--atomic]\n"
+" [<host>:]<directory> (--all | <ref>...)"
msgstr ""
-"git send-pack [--all | --mirror] [--dry-run] [--force] [--receive-"
-"pack=ПАКЕТ] [--verbose] [--thin] [--atomic] [ХОСТ:]ДИРЕКТОРИЯ [УКАЗАТЕЛ…]\n"
-" опцията „--all“ и изричното посочване на УКАЗАТЕЛ са взаимно несъвместими."
+"git send-pack [--mirror] [--dry-run] [--force]\n"
+" [--receive-pack=ПАКЕТ]\n"
+" [--verbose] [--thin] [--atomic]\n"
+" [ХОСТ:]ДИРЕКТОРИЯ (--all | УКАЗАТЕЛ…])"
-#: builtin/send-pack.c:188
+#: builtin/send-pack.c:192
msgid "remote name"
msgstr "име на отдалечено хранилище"
-#: builtin/send-pack.c:201
+#: builtin/send-pack.c:205
msgid "use stateless RPC protocol"
msgstr "използване на протокол без запазване на състоянието за RPC"
-#: builtin/send-pack.c:202
+#: builtin/send-pack.c:206
msgid "read refs from stdin"
msgstr "четене на указателите от стандартния вход"
-#: builtin/send-pack.c:203
+#: builtin/send-pack.c:207
msgid "print status from remote helper"
msgstr "извеждане на състоянието от отдалечената помощна функция"
@@ -22609,21 +22868,21 @@
msgid "group by field"
msgstr "групиране по поле"
-#: builtin/shortlog.c:391
+#: builtin/shortlog.c:394
msgid "too many arguments given outside repository"
msgstr "прекалено много аргументи извън хранилище"
#: builtin/show-branch.c:13
msgid ""
"git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
-"\t\t[--current] [--color[=<when>] | --no-color] [--sparse]\n"
-"\t\t[--more=<n> | --list | --independent | --merge-base]\n"
-"\t\t[--no-name | --sha1-name] [--topics] [(<rev> | <glob>)...]"
+" [--current] [--color[=<when>] | --no-color] [--sparse]\n"
+" [--more=<n> | --list | --independent | --merge-base]\n"
+" [--no-name | --sha1-name] [--topics] [(<rev> | <glob>)...]"
msgstr ""
"git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
-" [--current] [--color[=КОГА] | --no-color] [--sparse]\n"
-" [--more=БРОЙ | --list | --independent | --merge-base]\n"
-" [--no-name | --sha1-name] [--topics] [(РЕВИЗИЯ | УКАЗАТЕЛ)…]"
+" [--current] [--color[=КОГА] | --no-color] [--sparse]\n"
+" [--more=БРОЙ | --list | --independent | --merge-base]\n"
+" [--no-name | --sha1-name] [--topics] [(РЕВИЗИЯ | УКАЗАТЕЛ)…]"
#: builtin/show-branch.c:17
msgid "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"
@@ -22636,117 +22895,117 @@
msgstr[0] "„%s“ се прескача — не може да се обработят повече от %d указател"
msgstr[1] "„%s“ се прескача — не може да се обработят повече от %d указатели"
-#: builtin/show-branch.c:548
+#: builtin/show-branch.c:547
#, c-format
msgid "no matching refs with %s"
msgstr "никой указател не съвпада с „%s“"
-#: builtin/show-branch.c:645
+#: builtin/show-branch.c:644
msgid "show remote-tracking and local branches"
msgstr "извеждане на следящите и локалните клони"
-#: builtin/show-branch.c:647
+#: builtin/show-branch.c:646
msgid "show remote-tracking branches"
msgstr "извеждане на следящите клони"
-#: builtin/show-branch.c:649
+#: builtin/show-branch.c:648
msgid "color '*!+-' corresponding to the branch"
msgstr "оцветяване на „*!+-“ според клоните"
-#: builtin/show-branch.c:651
+#: builtin/show-branch.c:650
msgid "show <n> more commits after the common ancestor"
msgstr "извеждане на такъв БРОЙ подавания от общия предшественик"
-#: builtin/show-branch.c:653
+#: builtin/show-branch.c:652
msgid "synonym to more=-1"
msgstr "псевдоним на „more=-1“"
-#: builtin/show-branch.c:654
+#: builtin/show-branch.c:653
msgid "suppress naming strings"
msgstr "без низове за имената на клоните"
-#: builtin/show-branch.c:656
+#: builtin/show-branch.c:655
msgid "include the current branch"
msgstr "включване и на текущия клон"
-#: builtin/show-branch.c:658
+#: builtin/show-branch.c:657
msgid "name commits with their object names"
msgstr "именуване на подаванията с имената им на обекти"
-#: builtin/show-branch.c:660
+#: builtin/show-branch.c:659
msgid "show possible merge bases"
msgstr "извеждане на възможните бази за сливания"
-#: builtin/show-branch.c:662
+#: builtin/show-branch.c:661
msgid "show refs unreachable from any other ref"
msgstr "извеждане на недостижимите указатели"
-#: builtin/show-branch.c:664
+#: builtin/show-branch.c:663
msgid "show commits in topological order"
msgstr "извеждане на подаванията в топологическа подредба"
-#: builtin/show-branch.c:667
+#: builtin/show-branch.c:666
msgid "show only commits not on the first branch"
msgstr "извеждане само на подаванията, които не са от първия клон"
-#: builtin/show-branch.c:669
+#: builtin/show-branch.c:668
msgid "show merges reachable from only one tip"
msgstr "извеждане на сливанията, които може да се достигнат само от един връх"
-#: builtin/show-branch.c:671
+#: builtin/show-branch.c:670
msgid "topologically sort, maintaining date order where possible"
msgstr ""
"топологическа подредба, при запазване на подредбата по дата, доколкото е\n"
"възможно"
-#: builtin/show-branch.c:674
+#: builtin/show-branch.c:673
msgid "<n>[,<base>]"
msgstr "БРОЙ[,БАЗА]"
-#: builtin/show-branch.c:675
+#: builtin/show-branch.c:674
msgid "show <n> most recent ref-log entries starting at base"
msgstr "показване на най-много БРОЙ журнални записа с начало съответната БАЗА"
-#: builtin/show-branch.c:711
+#: builtin/show-branch.c:710
msgid ""
"--reflog is incompatible with --all, --remotes, --independent or --merge-base"
msgstr ""
"опцията „--reflog“ е несъвместима с опциите „--all“, „--remotes“, „--"
"independent“ и „--merge-base“"
-#: builtin/show-branch.c:735
+#: builtin/show-branch.c:734
msgid "no branches given, and HEAD is not valid"
msgstr "не е зададен клон, а указателят „HEAD“ е неправилен"
-#: builtin/show-branch.c:738
+#: builtin/show-branch.c:737
msgid "--reflog option needs one branch name"
-msgstr "опцията „--track“ изисква точно едно име на клон"
+msgstr "опцията „--reflog“ изисква точно едно име на клон"
-#: builtin/show-branch.c:741
+#: builtin/show-branch.c:740
#, c-format
msgid "only %d entry can be shown at one time."
msgid_plural "only %d entries can be shown at one time."
msgstr[0] "само %d запис може да бъде показан наведнъж."
msgstr[1] "само %d записа може да бъде показани наведнъж."
-#: builtin/show-branch.c:745
+#: builtin/show-branch.c:744
#, c-format
msgid "no such ref %s"
msgstr "такъв указател няма: %s"
-#: builtin/show-branch.c:831
+#: builtin/show-branch.c:828
#, c-format
msgid "cannot handle more than %d rev."
msgid_plural "cannot handle more than %d revs."
msgstr[0] "не може да се обработи повече от %d указател."
msgstr[1] "не може да се обработят повече от %d указатели."
-#: builtin/show-branch.c:835
+#: builtin/show-branch.c:832
#, c-format
msgid "'%s' is not a valid ref."
msgstr "„%s“ е неправилен указател."
-#: builtin/show-branch.c:838
+#: builtin/show-branch.c:835
#, c-format
msgid "cannot find commit %s (%s)"
msgstr "подаването „%s“ (%s) липсва"
@@ -22820,72 +23079,86 @@
msgstr ""
"това не е частично работно дърво (вероятно липсва файл „sparse-checkout“)"
-#: builtin/sparse-checkout.c:227
+#: builtin/sparse-checkout.c:173
+#, c-format
+msgid ""
+"directory '%s' contains untracked files, but is not in the sparse-checkout "
+"cone"
+msgstr ""
+"директорията „%s“ съдържа неследени файлове, но не е в пътищата на "
+"пътеводното напасване на частичното изтегляне"
+
+#: builtin/sparse-checkout.c:181
+#, c-format
+msgid "failed to remove directory '%s'"
+msgstr "директорията „%s“ не може да бъде изтрита"
+
+#: builtin/sparse-checkout.c:321
msgid "failed to create directory for sparse-checkout file"
msgstr "директорията за частично изтегляне „%s“ не може да бъде създадена"
-#: builtin/sparse-checkout.c:268
+#: builtin/sparse-checkout.c:362
msgid "unable to upgrade repository format to enable worktreeConfig"
msgstr ""
"настройката „worktreeConfig“ не може да се включи, защото форматът на "
"хранилището не може да се обнови"
-#: builtin/sparse-checkout.c:270
+#: builtin/sparse-checkout.c:364
msgid "failed to set extensions.worktreeConfig setting"
msgstr "неуспешно задаване на настройката „extensions.worktreeConfig“"
-#: builtin/sparse-checkout.c:290
+#: builtin/sparse-checkout.c:384
msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
-#: builtin/sparse-checkout.c:310
+#: builtin/sparse-checkout.c:404
msgid "initialize the sparse-checkout in cone mode"
msgstr "инициализиране на частичното изтегляне в пътеводен режим"
-#: builtin/sparse-checkout.c:312
+#: builtin/sparse-checkout.c:406
msgid "toggle the use of a sparse index"
msgstr "превключване на ползването на частичен индекс"
-#: builtin/sparse-checkout.c:340
+#: builtin/sparse-checkout.c:434
msgid "failed to modify sparse-index config"
msgstr "настройките на частичния индекс не може да се променят"
-#: builtin/sparse-checkout.c:361
+#: builtin/sparse-checkout.c:455
#, c-format
msgid "failed to open '%s'"
msgstr "„%s“ не може да се отвори"
-#: builtin/sparse-checkout.c:419
+#: builtin/sparse-checkout.c:507
#, c-format
msgid "could not normalize path %s"
msgstr "пътят „%s“ не може да се нормализира"
-#: builtin/sparse-checkout.c:431
+#: builtin/sparse-checkout.c:519
msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
msgstr "git sparse-checkout (set|add) (--stdin | ШАБЛОН…)"
-#: builtin/sparse-checkout.c:456
+#: builtin/sparse-checkout.c:544
#, c-format
msgid "unable to unquote C-style string '%s'"
msgstr "цитирането на низ, форматиран за C — „%s“ не може да бъде изчистено"
-#: builtin/sparse-checkout.c:510 builtin/sparse-checkout.c:534
+#: builtin/sparse-checkout.c:598 builtin/sparse-checkout.c:622
msgid "unable to load existing sparse-checkout patterns"
msgstr "шаблоните за частично изтегляне не може да се заредят"
-#: builtin/sparse-checkout.c:579
+#: builtin/sparse-checkout.c:667
msgid "read patterns from standard in"
msgstr "изчитане на шаблоните от стандартния вход"
-#: builtin/sparse-checkout.c:594
+#: builtin/sparse-checkout.c:682
msgid "git sparse-checkout reapply"
msgstr "git sparse-checkout reapply"
-#: builtin/sparse-checkout.c:613
+#: builtin/sparse-checkout.c:701
msgid "git sparse-checkout disable"
msgstr "git sparse-checkout disable"
-#: builtin/sparse-checkout.c:644
+#: builtin/sparse-checkout.c:732
msgid "error while refreshing working directory"
msgstr "грешка при обновяване на работната директория"
@@ -22921,7 +23194,7 @@
" [--pathspec-from-file=ФАЙЛ [--pathspec-file-nul]]\n"
" [--] [ПЪТ…]]"
-#: builtin/stash.c:34 builtin/stash.c:87
+#: builtin/stash.c:34
msgid ""
"git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
" [-u|--include-untracked] [-a|--all] [<message>]"
@@ -22951,6 +23224,14 @@
" [-u|--include-untracked] [-a|--all] [-m|--message СЪОБЩЕНИЕ]\n"
" [--] [ПЪТ…]]"
+#: builtin/stash.c:87
+msgid ""
+"git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
+" [-u|--include-untracked] [-a|--all] [<message>]"
+msgstr ""
+"git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
+" [-u|--include-untracked] [-a|--all] [СЪОБЩЕНИЕ]]"
+
#: builtin/stash.c:130
#, c-format
msgid "'%s' is not a stash-like commit"
@@ -22974,7 +23255,7 @@
msgid "git stash clear with arguments is unimplemented"
msgstr "командата „git stash clear“ не поддържа аргументи"
-#: builtin/stash.c:431
+#: builtin/stash.c:447
#, c-format
msgid ""
"WARNING: Untracked file in way of tracked file! Renaming\n"
@@ -22985,168 +23266,168 @@
" „%s“ на „%s“\n"
" за да се направи място.\n"
-#: builtin/stash.c:492
+#: builtin/stash.c:508
msgid "cannot apply a stash in the middle of a merge"
msgstr "по време на сливане не може да приложите нещо скатано"
-#: builtin/stash.c:503
+#: builtin/stash.c:519
#, c-format
msgid "could not generate diff %s^!."
msgstr "файлът с разликите „%s^!“ не може да се генерира"
-#: builtin/stash.c:510
+#: builtin/stash.c:526
msgid "conflicts in index. Try without --index."
msgstr ""
"в индекса има конфликти. Пробвайте да изпълните командата без опцията „--"
"index“."
-#: builtin/stash.c:516
+#: builtin/stash.c:532
msgid "could not save index tree"
msgstr "дървото сочено от индекса не може да бъде запазено"
-#: builtin/stash.c:525
-msgid "could not restore untracked files from stash"
-msgstr "неследени файлове не може да се възстановят от скатаното"
-
-#: builtin/stash.c:539
+#: builtin/stash.c:552
#, c-format
msgid "Merging %s with %s"
msgstr "Сливане на „%s“ с „%s“"
-#: builtin/stash.c:549
+#: builtin/stash.c:562
msgid "Index was not unstashed."
msgstr "Индексът не е изваден от скатаното."
-#: builtin/stash.c:591 builtin/stash.c:689
+#: builtin/stash.c:575
+msgid "could not restore untracked files from stash"
+msgstr "неследени файлове не може да се възстановят от скатаното"
+
+#: builtin/stash.c:607 builtin/stash.c:705
msgid "attempt to recreate the index"
msgstr "опит за повторно създаване на индекса"
-#: builtin/stash.c:635
+#: builtin/stash.c:651
#, c-format
msgid "Dropped %s (%s)"
msgstr "Изтрито: „%s“ (%s)"
-#: builtin/stash.c:638
+#: builtin/stash.c:654
#, c-format
msgid "%s: Could not drop stash entry"
msgstr "Скатаното „%s“ не може да бъде изтрито"
-#: builtin/stash.c:651
+#: builtin/stash.c:667
#, c-format
msgid "'%s' is not a stash reference"
msgstr "„%s“ не е указател към нещо скатано"
-#: builtin/stash.c:701
+#: builtin/stash.c:717
msgid "The stash entry is kept in case you need it again."
msgstr "Скатаното е запазено в случай, че ви потрябва отново."
-#: builtin/stash.c:724
+#: builtin/stash.c:740
msgid "No branch name specified"
msgstr "Не е указано име на клон"
-#: builtin/stash.c:808
+#: builtin/stash.c:824
msgid "failed to parse tree"
msgstr "дървото не може да бъде анализирано"
-#: builtin/stash.c:819
+#: builtin/stash.c:835
msgid "failed to unpack trees"
msgstr "дървото не може да бъде разпакетирано"
-#: builtin/stash.c:839
+#: builtin/stash.c:855
msgid "include untracked files in the stash"
msgstr "скатаване и на неследените файлове"
-#: builtin/stash.c:842
+#: builtin/stash.c:858
msgid "only show untracked files in the stash"
msgstr "извеждане само на неследените файлове в скатаното"
-#: builtin/stash.c:929 builtin/stash.c:966
+#: builtin/stash.c:945 builtin/stash.c:982
#, c-format
msgid "Cannot update %s with %s"
msgstr "Указателят „%s“ не може да бъде обновен да сочи към „%s“"
-#: builtin/stash.c:947 builtin/stash.c:1602 builtin/stash.c:1667
+#: builtin/stash.c:963 builtin/stash.c:1619 builtin/stash.c:1684
msgid "stash message"
msgstr "съобщение при скатаване"
-#: builtin/stash.c:957
+#: builtin/stash.c:973
msgid "\"git stash store\" requires one <commit> argument"
msgstr "командата „git stash store“ изисква точно един аргумент-ПОДАВАНЕ"
-#: builtin/stash.c:1171
+#: builtin/stash.c:1187
msgid "No changes selected"
msgstr "Не са избрани никакви промени"
-#: builtin/stash.c:1271
+#: builtin/stash.c:1287
msgid "You do not have the initial commit yet"
msgstr "Все още липсва първоначално подаване"
-#: builtin/stash.c:1298
+#: builtin/stash.c:1314
msgid "Cannot save the current index state"
msgstr "Състоянието на текущия индекс не може да бъде запазено"
-#: builtin/stash.c:1307
+#: builtin/stash.c:1323
msgid "Cannot save the untracked files"
msgstr "Неследените файлове не може да се запазят"
-#: builtin/stash.c:1318 builtin/stash.c:1327
+#: builtin/stash.c:1334 builtin/stash.c:1343
msgid "Cannot save the current worktree state"
msgstr "Състоянието на работното дърво не може да бъде запазено"
-#: builtin/stash.c:1355
+#: builtin/stash.c:1371
msgid "Cannot record working tree state"
msgstr "Състоянието на работното дърво не може да бъде запазено"
-#: builtin/stash.c:1404
+#: builtin/stash.c:1420
msgid "Can't use --patch and --include-untracked or --all at the same time"
msgstr "опцията „--patch“ е несъвместима с „--include-untracked“ и „--all“"
-#: builtin/stash.c:1422
+#: builtin/stash.c:1438
msgid "Did you forget to 'git add'?"
msgstr "Пробвайте да използвате „git add“"
-#: builtin/stash.c:1437
+#: builtin/stash.c:1453
msgid "No local changes to save"
msgstr "Няма никакви локални промени за скатаване"
-#: builtin/stash.c:1444
+#: builtin/stash.c:1460
msgid "Cannot initialize stash"
msgstr "Скатаването не може да стартира"
-#: builtin/stash.c:1459
+#: builtin/stash.c:1475
msgid "Cannot save the current status"
msgstr "Текущото състояние не може да бъде запазено"
-#: builtin/stash.c:1464
+#: builtin/stash.c:1480
#, c-format
msgid "Saved working directory and index state %s"
msgstr "Състоянието на работната директория и индекса e запазено: „%s“"
-#: builtin/stash.c:1554
+#: builtin/stash.c:1571
msgid "Cannot remove worktree changes"
msgstr "Промените в работното дърво не може да бъдат занулени"
-#: builtin/stash.c:1593 builtin/stash.c:1658
+#: builtin/stash.c:1610 builtin/stash.c:1675
msgid "keep index"
msgstr "запазване на индекса"
-#: builtin/stash.c:1595 builtin/stash.c:1660
+#: builtin/stash.c:1612 builtin/stash.c:1677
msgid "stash in patch mode"
msgstr "скатаване в режим за кръпки"
-#: builtin/stash.c:1596 builtin/stash.c:1661
+#: builtin/stash.c:1613 builtin/stash.c:1678
msgid "quiet mode"
msgstr "без извеждане на информация"
-#: builtin/stash.c:1598 builtin/stash.c:1663
+#: builtin/stash.c:1615 builtin/stash.c:1680
msgid "include untracked files in stash"
msgstr "скатаване и на неследените файлове"
-#: builtin/stash.c:1600 builtin/stash.c:1665
+#: builtin/stash.c:1617 builtin/stash.c:1682
msgid "include ignore files"
msgstr "скатаване и на игнорираните файлове"
-#: builtin/stash.c:1700
+#: builtin/stash.c:1717
msgid ""
"the stash.useBuiltin support has been removed!\n"
"See its entry in 'git help config' for details."
@@ -23170,7 +23451,7 @@
msgid "prepend comment character and space to each line"
msgstr "добавяне на „# “ в началото на всеки ред"
-#: builtin/submodule--helper.c:46 builtin/submodule--helper.c:2423
+#: builtin/submodule--helper.c:46 builtin/submodule--helper.c:2667
#, c-format
msgid "Expecting a full ref name, got %s"
msgstr "Очаква се пълно име на указател, а не „%s“"
@@ -23185,59 +23466,7 @@
msgid "cannot strip one component off url '%s'"
msgstr "не може да се махне компонент от адреса „%s“"
-#: builtin/submodule--helper.c:409 builtin/submodule--helper.c:1819
-msgid "alternative anchor for relative paths"
-msgstr "директория за определянето на относителните пътища"
-
-#: builtin/submodule--helper.c:414
-msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
-msgstr "git submodule--helper list [--prefix=ПЪТ] [ПЪТ…]"
-
-#: 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 "Във файла „.gitmodules“ не е открит адрес за пътя към подмодул „%s“"
-
-#: builtin/submodule--helper.c:524
-#, c-format
-msgid "Entering '%s'\n"
-msgstr "Влизане в „%s“\n"
-
-#: builtin/submodule--helper.c:527
-#, c-format
-msgid ""
-"run_command returned non-zero status for %s\n"
-"."
-msgstr ""
-"изпълнената команда завърши с ненулев изход за „%s“\n"
-"."
-
-#: builtin/submodule--helper.c:549
-#, c-format
-msgid ""
-"run_command returned non-zero status while recursing in the nested "
-"submodules of %s\n"
-"."
-msgstr ""
-"изпълнената команда завърши с ненулев изход при обхождане на подмодулите, "
-"вложени в „%s“\n"
-"."
-
-#: builtin/submodule--helper.c:565
-msgid "suppress output of entering each submodule command"
-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>"
-msgstr "git submodule--helper foreach [--quiet] [--recursive] [--] КОМАНДА"
-
-#: builtin/submodule--helper.c:599
+#: builtin/submodule--helper.c:211
#, c-format
msgid ""
"could not look up configuration '%s'. Assuming this repository is its own "
@@ -23246,55 +23475,107 @@
"настройката „%s“ липсва. Приема се, че това хранилище е правилният източник "
"за себе си."
-#: builtin/submodule--helper.c:666
+#: builtin/submodule--helper.c:405 builtin/submodule--helper.c:1858
+msgid "alternative anchor for relative paths"
+msgstr "директория за определянето на относителните пътища"
+
+#: builtin/submodule--helper.c:410
+msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
+msgstr "git submodule--helper list [--prefix=ПЪТ] [ПЪТ…]"
+
+#: builtin/submodule--helper.c:468 builtin/submodule--helper.c:605
+#: builtin/submodule--helper.c:628
+#, c-format
+msgid "No url found for submodule path '%s' in .gitmodules"
+msgstr "Във файла „.gitmodules“ не е открит адрес за пътя към подмодул „%s“"
+
+#: builtin/submodule--helper.c:520
+#, c-format
+msgid "Entering '%s'\n"
+msgstr "Влизане в „%s“\n"
+
+#: builtin/submodule--helper.c:523
+#, c-format
+msgid ""
+"run_command returned non-zero status for %s\n"
+"."
+msgstr ""
+"изпълнената команда (run_command) завърши с ненулев изход за „%s“\n"
+"."
+
+#: builtin/submodule--helper.c:545
+#, c-format
+msgid ""
+"run_command returned non-zero status while recursing in the nested "
+"submodules of %s\n"
+"."
+msgstr ""
+"изпълнената команда (run_command) завърши с ненулев изход при обхождане на "
+"подмодулите, вложени в „%s“\n"
+"."
+
+#: builtin/submodule--helper.c:561
+msgid "suppress output of entering each submodule command"
+msgstr "без извеждане на изход при въвеждането на всяка команда за подмодули"
+
+#: builtin/submodule--helper.c:563 builtin/submodule--helper.c:864
+#: builtin/submodule--helper.c:1453
+msgid "recurse into nested submodules"
+msgstr "рекурсивно обхождане на подмодулите"
+
+#: builtin/submodule--helper.c:568
+msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
+msgstr "git submodule--helper foreach [--quiet] [--recursive] [--] КОМАНДА"
+
+#: builtin/submodule--helper.c:642
#, c-format
msgid "Failed to register url for submodule path '%s'"
msgstr "Неуспешно регистриране на адрес за пътя към подмодул „%s“"
-#: builtin/submodule--helper.c:670
+#: builtin/submodule--helper.c:646
#, c-format
msgid "Submodule '%s' (%s) registered for path '%s'\n"
msgstr "Регистриран е подмодул „%s“ (%s) за пътя към подмодул „%s“\n"
-#: builtin/submodule--helper.c:680
+#: builtin/submodule--helper.c:656
#, c-format
msgid "warning: command update mode suggested for submodule '%s'\n"
msgstr "ПРЕДУПРЕЖДЕНИЕ: препоръчва се режим на обновяване за подмодула „%s“\n"
-#: builtin/submodule--helper.c:687
+#: builtin/submodule--helper.c:663
#, c-format
msgid "Failed to register update mode for submodule path '%s'"
msgstr ""
"Неуспешно регистриране на режима на обновяване за пътя към подмодул „%s“"
-#: builtin/submodule--helper.c:709
+#: builtin/submodule--helper.c:685
msgid "suppress output for initializing a submodule"
msgstr "без извеждане на информация при инициализирането на подмодул"
-#: builtin/submodule--helper.c:714
+#: builtin/submodule--helper.c:690
msgid "git submodule--helper init [<options>] [<path>]"
msgstr "git submodule--helper init [ОПЦИЯ…] [ПЪТ]"
-#: builtin/submodule--helper.c:787 builtin/submodule--helper.c:922
+#: builtin/submodule--helper.c:763 builtin/submodule--helper.c:898
#, c-format
msgid "no submodule mapping found in .gitmodules for path '%s'"
msgstr "Във файла „.gitmodules“ липсва информация за пътя „%s“"
-#: builtin/submodule--helper.c:835
+#: builtin/submodule--helper.c:811
#, c-format
msgid "could not resolve HEAD ref inside the submodule '%s'"
msgstr "указателят сочен от „HEAD“ в подмодула „%s“ не може да бъде открит"
-#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1457
+#: builtin/submodule--helper.c:838 builtin/submodule--helper.c:1423
#, c-format
msgid "failed to recurse into submodule '%s'"
msgstr "неуспешно рекурсивно обхождане на подмодула „%s“"
-#: builtin/submodule--helper.c:886 builtin/submodule--helper.c:1623
+#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1589
msgid "suppress submodule status output"
msgstr "без изход за състоянието на подмодула"
-#: builtin/submodule--helper.c:887
+#: builtin/submodule--helper.c:863
msgid ""
"use commit stored in the index instead of the one stored in the submodule "
"HEAD"
@@ -23302,100 +23583,100 @@
"използване на подаването указано в индекса, а не това от указателя „HEAD“ на "
"подмодула"
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:869
msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
msgstr "git submodule status [--quiet] [--cached] [--recursive] [ПЪТ…]"
-#: builtin/submodule--helper.c:917
+#: builtin/submodule--helper.c:893
msgid "git submodule--helper name <path>"
msgstr "git submodule--helper name ПЪТ"
-#: builtin/submodule--helper.c:989
+#: builtin/submodule--helper.c:965
#, c-format
msgid "* %s %s(blob)->%s(submodule)"
msgstr "● %s %s(обект-BLOB)→%s(подмодул)"
-#: builtin/submodule--helper.c:992
+#: builtin/submodule--helper.c:968
#, c-format
msgid "* %s %s(submodule)->%s(blob)"
msgstr "● %s %s(подмодул)→%s(обект-BLOB)"
-#: builtin/submodule--helper.c:1005
+#: builtin/submodule--helper.c:981
#, c-format
msgid "%s"
msgstr "%s"
-#: builtin/submodule--helper.c:1055
+#: builtin/submodule--helper.c:1031
#, c-format
msgid "couldn't hash object from '%s'"
msgstr "неуспешно изчисляване на контролната сума на обект от „%s“"
-#: builtin/submodule--helper.c:1059
+#: builtin/submodule--helper.c:1035
#, c-format
msgid "unexpected mode %o\n"
msgstr "неочакван режим „%o“\n"
-#: builtin/submodule--helper.c:1300
+#: builtin/submodule--helper.c:1276
msgid "use the commit stored in the index instead of the submodule HEAD"
msgstr ""
"използване на подаването указано в индекса, а не това от указателя „HEAD“ на "
"подмодула"
-#: builtin/submodule--helper.c:1302
+#: builtin/submodule--helper.c:1278
msgid "compare the commit in the index with that in the submodule HEAD"
msgstr ""
"сравнение на подаването указано в индекса с това от указателя „HEAD“ на "
"подмодула"
-#: builtin/submodule--helper.c:1304
+#: builtin/submodule--helper.c:1280
msgid "skip submodules with 'ignore_config' value set to 'all'"
msgstr "прескачане на подмодули, чиято настройка „ignore_config“ е „all“"
-#: builtin/submodule--helper.c:1306
+#: builtin/submodule--helper.c:1282
msgid "limit the summary size"
msgstr "ограничаване на размера на обобщението"
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1287
msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
-msgstr "git submodule--helper summary [ОПЦИЯ…] [ПОДАВАНЕ] -- [ПЪТ]"
+msgstr "git submodule--helper summary [ОПЦИЯ…] [ПОДАВАНЕ] [--] [ПЪТ]"
-#: builtin/submodule--helper.c:1335
+#: builtin/submodule--helper.c:1311
msgid "could not fetch a revision for HEAD"
msgstr "не може да се достави версия за „HEAD“"
-#: builtin/submodule--helper.c:1340
+#: builtin/submodule--helper.c:1316
msgid "--cached and --files are mutually exclusive"
msgstr "опциите „--cached“ и „--files“ са несъвместими"
-#: builtin/submodule--helper.c:1407
+#: builtin/submodule--helper.c:1373
#, c-format
msgid "Synchronizing submodule url for '%s'\n"
msgstr "Синхронизиране на адреса на подмодул за „%s“\n"
-#: builtin/submodule--helper.c:1413
+#: builtin/submodule--helper.c:1379
#, c-format
msgid "failed to register url for submodule path '%s'"
msgstr "неуспешно регистриране на адрес за пътя към подмодул „%s“"
-#: builtin/submodule--helper.c:1427
+#: builtin/submodule--helper.c:1393
#, c-format
msgid "failed to get the default remote for submodule '%s'"
msgstr "отдалеченият адрес на подмодула „%s“ не може да бъде получен"
-#: builtin/submodule--helper.c:1438
+#: builtin/submodule--helper.c:1404
#, c-format
msgid "failed to update remote for submodule '%s'"
msgstr "отдалеченият адрес на подмодула „%s“ не може да бъде променен"
-#: builtin/submodule--helper.c:1485
+#: builtin/submodule--helper.c:1451
msgid "suppress output of synchronizing submodule url"
msgstr "без извеждане на информация при синхронизирането на подмодул"
-#: builtin/submodule--helper.c:1492
+#: builtin/submodule--helper.c:1458
msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
msgstr "git submodule--helper sync [--quiet] [--recursive] [ПЪТ]"
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1512
#, c-format
msgid ""
"Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you "
@@ -23404,7 +23685,7 @@
"Работното дърво на подмодул „%s“ съдържа директория „.git“.\n"
"(ако искате да ги изтриете заедно с цялата им история, използвайте „rm -rf“)"
-#: builtin/submodule--helper.c:1558
+#: builtin/submodule--helper.c:1524
#, c-format
msgid ""
"Submodule work tree '%s' contains local modifications; use '-f' to discard "
@@ -23413,47 +23694,47 @@
"Работното дърво на подмодул „%s“ съдържа локални промени. Може да ги "
"отхвърлите с опцията „-f“"
-#: builtin/submodule--helper.c:1566
+#: builtin/submodule--helper.c:1532
#, c-format
msgid "Cleared directory '%s'\n"
msgstr "Директорията „%s“ е изчистена\n"
-#: builtin/submodule--helper.c:1568
+#: builtin/submodule--helper.c:1534
#, c-format
msgid "Could not remove submodule work tree '%s'\n"
msgstr ""
"Директорията към работното дърво на подмодула „%s“ не може да бъде изтрита\n"
-#: builtin/submodule--helper.c:1579
+#: builtin/submodule--helper.c:1545
#, c-format
msgid "could not create empty submodule directory %s"
msgstr "празната директория за подмодула „%s“ не може да бъде създадена"
-#: builtin/submodule--helper.c:1595
+#: builtin/submodule--helper.c:1561
#, c-format
msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
msgstr "Регистрацията на подмодула „%s“ (%s) за пътя „%s“ е премахната\n"
-#: builtin/submodule--helper.c:1624
+#: builtin/submodule--helper.c:1590
msgid "remove submodule working trees even if they contain local changes"
msgstr ""
"изтриване на работните дървета на подмодулите, дори когато те съдържат "
"локални промени"
-#: builtin/submodule--helper.c:1625
+#: builtin/submodule--helper.c:1591
msgid "unregister all submodules"
msgstr "премахване на регистрациите на всички подмодули"
-#: builtin/submodule--helper.c:1630
+#: builtin/submodule--helper.c:1596
msgid ""
"git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
msgstr "git submodule deinit [--quiet] [-f | --force] [--all | [--] [ПЪТ…]]"
-#: builtin/submodule--helper.c:1644
+#: builtin/submodule--helper.c:1610
msgid "Use '--all' if you really want to deinitialize all submodules"
msgstr "Използвайте „--all“, за да премахнете всички подмодули"
-#: builtin/submodule--helper.c:1713
+#: builtin/submodule--helper.c:1655
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"
@@ -23465,47 +23746,70 @@
"задайте настройката „submodule.alternateErrorStrategy“ да е „info“ или\n"
"при клониране ползвайте опцията „--reference-if-able“ вместо „--reference“."
-#: builtin/submodule--helper.c:1752 builtin/submodule--helper.c:1755
+#: builtin/submodule--helper.c:1700 builtin/submodule--helper.c:1703
#, c-format
msgid "submodule '%s' cannot add alternate: %s"
msgstr "към подмодула „%s“ не може да се добави алтернативен източник: %s"
-#: builtin/submodule--helper.c:1791
+#: builtin/submodule--helper.c:1739
#, c-format
msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
msgstr ""
"Непозната стойност „%s“ за настройката „submodule.alternateErrorStrategy“"
-#: builtin/submodule--helper.c:1798
+#: builtin/submodule--helper.c:1746
#, c-format
msgid "Value '%s' for submodule.alternateLocation is not recognized"
msgstr "Непозната стойност „%s“ за настройката „submodule.alternateLocation“"
-#: builtin/submodule--helper.c:1822
+#: builtin/submodule--helper.c:1771
+#, c-format
+msgid "refusing to create/use '%s' in another submodule's git dir"
+msgstr ""
+"„%s“ не може нито да се създаде, нито да се ползва в директорията на git на "
+"друг подмодул"
+
+#: builtin/submodule--helper.c:1812
+#, c-format
+msgid "clone of '%s' into submodule path '%s' failed"
+msgstr "Неуспешно клониране на адреса „%s“ в пътя „%s“ като подмодул"
+
+#: builtin/submodule--helper.c:1817
+#, c-format
+msgid "directory not empty: '%s'"
+msgstr "директорията не е празна: „%s“"
+
+#: builtin/submodule--helper.c:1829
+#, c-format
+msgid "could not get submodule directory for '%s'"
+msgstr "директорията на подмодула „%s“ не може да бъде получена"
+
+#: builtin/submodule--helper.c:1861
msgid "where the new submodule will be cloned to"
msgstr "къде да се клонира новият подмодул"
-#: builtin/submodule--helper.c:1825
+#: builtin/submodule--helper.c:1864
msgid "name of the new submodule"
msgstr "име на новия подмодул"
-#: builtin/submodule--helper.c:1828
+#: builtin/submodule--helper.c:1867
msgid "url where to clone the submodule from"
msgstr "адрес, от който да се клонира новият подмодул"
-#: builtin/submodule--helper.c:1836
+#: builtin/submodule--helper.c:1875 builtin/submodule--helper.c:3264
msgid "depth for shallow clones"
msgstr "дълбочина на плитките хранилища"
-#: builtin/submodule--helper.c:1839 builtin/submodule--helper.c:2348
+#: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:2525
+#: builtin/submodule--helper.c:3257
msgid "force cloning progress"
msgstr "извеждане на напредъка на клонирането"
-#: builtin/submodule--helper.c:1841 builtin/submodule--helper.c:2350
+#: builtin/submodule--helper.c:1880 builtin/submodule--helper.c:2527
msgid "disallow cloning into non-empty directory"
msgstr "предотвратяване на клониране в непразна история"
-#: builtin/submodule--helper.c:1848
+#: builtin/submodule--helper.c:1887
msgid ""
"git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
"<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
@@ -23514,108 +23818,185 @@
"git submodule--helper clone [--prefix=ПЪТ] [--quiet] [--reference ХРАНИЛИЩЕ] "
"[--name ИМЕ] [--depth ДЪЛБОЧИНА] [--single-branch] --url АДРЕС --path ПЪТ"
-#: builtin/submodule--helper.c:1873
-#, c-format
-msgid "refusing to create/use '%s' in another submodule's git dir"
-msgstr ""
-"„%s“ не може нито да се създаде, нито да се ползва в директорията на git на "
-"друг подмодул"
-
-#: builtin/submodule--helper.c:1884
-#, c-format
-msgid "clone of '%s' into submodule path '%s' failed"
-msgstr "Неуспешно клониране на адреса „%s“ в пътя „%s“ като подмодул"
-
-#: builtin/submodule--helper.c:1888
-#, c-format
-msgid "directory not empty: '%s'"
-msgstr "директорията не е празна: „%s“"
-
-#: builtin/submodule--helper.c:1900
-#, c-format
-msgid "could not get submodule directory for '%s'"
-msgstr "директорията на подмодула „%s“ не може да бъде получена"
-
-#: builtin/submodule--helper.c:1936
+#: builtin/submodule--helper.c:1924
#, c-format
msgid "Invalid update mode '%s' for submodule path '%s'"
msgstr "Неправилен режим на обновяване „%s“ за пътя към подмодул „%s“"
-#: builtin/submodule--helper.c:1940
+#: builtin/submodule--helper.c:1928
#, c-format
msgid "Invalid update mode '%s' configured for submodule path '%s'"
msgstr ""
"Настроен е неправилен режим на обновяване „%s“ за пътя към подмодул „%s“"
-#: builtin/submodule--helper.c:2041
+#: builtin/submodule--helper.c:2043
#, c-format
msgid "Submodule path '%s' not initialized"
msgstr "Пътят на подмодула „%s“ не е инициализиран"
-#: builtin/submodule--helper.c:2045
+#: builtin/submodule--helper.c:2047
msgid "Maybe you want to use 'update --init'?"
msgstr "Вероятно искахте да използвате „update --init“?"
-#: builtin/submodule--helper.c:2075
+#: builtin/submodule--helper.c:2077
#, c-format
msgid "Skipping unmerged submodule %s"
msgstr "Прескачане на неслетия подмодул „%s“"
-#: builtin/submodule--helper.c:2104
+#: builtin/submodule--helper.c:2106
#, c-format
msgid "Skipping submodule '%s'"
msgstr "Прескачане на подмодула „%s“"
-#: builtin/submodule--helper.c:2254
+#: builtin/submodule--helper.c:2256
#, c-format
msgid "Failed to clone '%s'. Retry scheduled"
msgstr "Неуспешен опит за клониране на „%s“. Насрочен е втори опит"
-#: builtin/submodule--helper.c:2265
+#: builtin/submodule--helper.c:2267
#, c-format
msgid "Failed to clone '%s' a second time, aborting"
msgstr ""
"Втори неуспешен опит за клониране на „%s“. Действието се преустановява"
-#: builtin/submodule--helper.c:2327 builtin/submodule--helper.c:2573
+#: builtin/submodule--helper.c:2372
+#, c-format
+msgid "Unable to checkout '%s' in submodule path '%s'"
+msgstr "Неуспешно изтегляне на версия „%s“ в пътя към подмодул „%s“'"
+
+#: builtin/submodule--helper.c:2376
+#, c-format
+msgid "Unable to rebase '%s' in submodule path '%s'"
+msgstr "Неуспешно пребазиране на версия „%s“ в пътя към подмодул „%s“"
+
+#: builtin/submodule--helper.c:2380
+#, c-format
+msgid "Unable to merge '%s' in submodule path '%s'"
+msgstr "Неуспешно сливане на версия „%s“ в пътя към подмодул „%s“"
+
+#: builtin/submodule--helper.c:2384
+#, c-format
+msgid "Execution of '%s %s' failed in submodule path '%s'"
+msgstr "Неуспешно изпълнение на командата „%s %s“ в пътя към подмодул „%s“"
+
+#: builtin/submodule--helper.c:2408
+#, c-format
+msgid "Submodule path '%s': checked out '%s'\n"
+msgstr "Път към подмодул „%s“: изтеглена е версия „%s“\n"
+
+#: builtin/submodule--helper.c:2412
+#, c-format
+msgid "Submodule path '%s': rebased into '%s'\n"
+msgstr "Път към подмодул „%s“: пребазиран към „%s“\n"
+
+#: builtin/submodule--helper.c:2416
+#, c-format
+msgid "Submodule path '%s': merged in '%s'\n"
+msgstr "Път към подмодул „%s“: слят в „%s“\n"
+
+#: builtin/submodule--helper.c:2420
+#, c-format
+msgid "Submodule path '%s': '%s %s'\n"
+msgstr "Пътят на подмодула „%s“: „%s %s“\n"
+
+#: builtin/submodule--helper.c:2444
+#, c-format
+msgid "Unable to fetch in submodule path '%s'; trying to directly fetch %s:"
+msgstr ""
+"Неуспешно доставяне в пътя към подмодул „%s“, опит за директно доставяне на "
+"„%s“"
+
+#: builtin/submodule--helper.c:2453
+#, c-format
+msgid ""
+"Fetched in submodule path '%s', but it did not contain %s. Direct fetching "
+"of that commit failed."
+msgstr ""
+"Подмодулът в пътя „%s“ е доставен, но не съдържа обекта със сума\n"
+"„%s“. Директното доставяне на това подаване е неуспешно."
+
+#: builtin/submodule--helper.c:2504 builtin/submodule--helper.c:2574
+#: builtin/submodule--helper.c:2812
msgid "path into the working tree"
msgstr "път към работното дърво"
-#: builtin/submodule--helper.c:2330
+#: builtin/submodule--helper.c:2507 builtin/submodule--helper.c:2579
msgid "path into the working tree, across nested submodule boundaries"
msgstr "път към работното дърво, през границите на вложените подмодули"
-#: builtin/submodule--helper.c:2334
+#: builtin/submodule--helper.c:2511 builtin/submodule--helper.c:2577
msgid "rebase, merge, checkout or none"
msgstr ""
"„rebase“ (пребазиране), „merge“ (сливане), „checkout“ (изтегляне) или "
"„none“ (нищо да не се прави)"
-#: builtin/submodule--helper.c:2340
+#: builtin/submodule--helper.c:2517
msgid "create a shallow clone truncated to the specified number of revisions"
msgstr "извършване на плитко клониране, отрязано до указания брой версии"
-#: builtin/submodule--helper.c:2343
+#: builtin/submodule--helper.c:2520
msgid "parallel jobs"
msgstr "брой паралелни процеси"
-#: builtin/submodule--helper.c:2345
+#: builtin/submodule--helper.c:2522
msgid "whether the initial clone should follow the shallow recommendation"
msgstr "дали първоначалното клониране да е плитко, както се препоръчва"
-#: builtin/submodule--helper.c:2346
+#: builtin/submodule--helper.c:2523
msgid "don't print cloning progress"
msgstr "без извеждане на напредъка на клонирането"
-#: builtin/submodule--helper.c:2357
+#: builtin/submodule--helper.c:2534
msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
msgstr "git submodule--helper update-clone [--prefix=ПЪТ] [ПЪТ…]"
-#: builtin/submodule--helper.c:2370
+#: builtin/submodule--helper.c:2547
msgid "bad value for update parameter"
msgstr "неправилен параметър към опцията „--update“"
-#: builtin/submodule--helper.c:2418
+#: builtin/submodule--helper.c:2565
+msgid "suppress output for update by rebase or merge"
+msgstr ""
+"без извеждане на информация при обновяване чрез пребазиране или сливане"
+
+#: builtin/submodule--helper.c:2566
+msgid "force checkout updates"
+msgstr "принудително изтегляне на обновленията"
+
+#: builtin/submodule--helper.c:2568
+msgid "don't fetch new objects from the remote site"
+msgstr "без доставяне на новите обекти от отдалеченото хранилище"
+
+#: builtin/submodule--helper.c:2570
+msgid "overrides update mode in case the repository is a fresh clone"
+msgstr ""
+"различен режим на обновяване, когато хранилището е чисто ново изтеглено"
+
+#: builtin/submodule--helper.c:2571
+msgid "depth for shallow fetch"
+msgstr "дълбочина на плиткото доставяне"
+
+#: builtin/submodule--helper.c:2581
+msgid "sha1"
+msgstr "сума по SHA1"
+
+#: builtin/submodule--helper.c:2582
+msgid "SHA1 expected by superproject"
+msgstr "сумата по SHA1, очаквана от обхващащия модул"
+
+#: builtin/submodule--helper.c:2584
+msgid "subsha1"
+msgstr "сумата по SHA1 на подмодула"
+
+#: builtin/submodule--helper.c:2585
+msgid "SHA1 of submodule's HEAD"
+msgstr "сумата по SHA1 за указателя HEAD на подмодула"
+
+#: builtin/submodule--helper.c:2591
+msgid "git submodule--helper run-update-procedure [<options>] <path>"
+msgstr "git submodule--helper run-update-procedure [ОПЦИЯ…] [ПЪТ]"
+
+#: builtin/submodule--helper.c:2662
#, c-format
msgid ""
"Submodule (%s) branch configured to inherit branch from superproject, but "
@@ -23624,83 +24005,192 @@
"Клонът на подмодула „%s“ е настроен да наследява клона от обхващащия проект, "
"но той не е на никой клон"
-#: builtin/submodule--helper.c:2541
+#: builtin/submodule--helper.c:2780
#, c-format
msgid "could not get a repository handle for submodule '%s'"
msgstr "не може да се получи връзка към хранилище за подмодула „%s“"
-#: builtin/submodule--helper.c:2574
+#: builtin/submodule--helper.c:2813
msgid "recurse into submodules"
msgstr "рекурсивно обхождане подмодулите"
-#: builtin/submodule--helper.c:2580
+#: builtin/submodule--helper.c:2819
msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
msgstr "git submodule--helper absorb-git-dirs [ОПЦИЯ…] [ПЪТ…]"
-#: builtin/submodule--helper.c:2636
+#: builtin/submodule--helper.c:2875
msgid "check if it is safe to write to the .gitmodules file"
msgstr "проверка дали писането във файла „.gitmodules“ е безопасно"
-#: builtin/submodule--helper.c:2639
+#: builtin/submodule--helper.c:2878
msgid "unset the config in the .gitmodules file"
msgstr "изтриване на настройка във файла „.gitmodules“"
-#: builtin/submodule--helper.c:2644
+#: builtin/submodule--helper.c:2883
msgid "git submodule--helper config <name> [<value>]"
msgstr "git submodule--helper config ИМЕ [СТОЙНОСТ]"
-#: builtin/submodule--helper.c:2645
+#: builtin/submodule--helper.c:2884
msgid "git submodule--helper config --unset <name>"
msgstr "git submodule--helper config --unset ИМЕ"
-#: builtin/submodule--helper.c:2646
+#: builtin/submodule--helper.c:2885
msgid "git submodule--helper config --check-writeable"
msgstr "git submodule--helper config --check-writeable"
-#: builtin/submodule--helper.c:2665 git-submodule.sh:150
-#, sh-format
+#: builtin/submodule--helper.c:2904 builtin/submodule--helper.c:3120
+#: builtin/submodule--helper.c:3276
msgid "please make sure that the .gitmodules file is in the working tree"
msgstr "файлът „.gitmodules“ трябва да е в работното дърво"
-#: builtin/submodule--helper.c:2681
+#: builtin/submodule--helper.c:2920
msgid "suppress output for setting url of a submodule"
msgstr "без извеждане на информация при задаването на адреса на подмодул"
-#: builtin/submodule--helper.c:2685
+#: builtin/submodule--helper.c:2924
msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
msgstr "git submodule--helper set-url [--quiet] [ПЪТ] [НОВ_ПЪТ]"
-#: builtin/submodule--helper.c:2718
+#: builtin/submodule--helper.c:2957
msgid "set the default tracking branch to master"
msgstr "задаване на стандартния следящ клон да е „master“"
-#: builtin/submodule--helper.c:2720
+#: builtin/submodule--helper.c:2959
msgid "set the default tracking branch"
msgstr "задаване на стандартния следящ клон"
-#: builtin/submodule--helper.c:2724
+#: builtin/submodule--helper.c:2963
msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
msgstr "git submodule--helper set-branch [-q|--quiet] (-d|--default) ПЪТ"
-#: builtin/submodule--helper.c:2725
+#: builtin/submodule--helper.c:2964
msgid ""
"git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
msgstr "git submodule--helper set-branch [-q|--quiet] (-b|--branch) КЛОН ПЪТ"
-#: builtin/submodule--helper.c:2732
+#: builtin/submodule--helper.c:2971
msgid "--branch or --default required"
msgstr "необходимо е една от опциите „--branch“ и „--default“"
-#: builtin/submodule--helper.c:2735
+#: builtin/submodule--helper.c:2974
msgid "--branch and --default are mutually exclusive"
msgstr "опциите „--branch“ и „--default“ са несъвместими"
-#: builtin/submodule--helper.c:2792 git.c:449 git.c:724
+#: builtin/submodule--helper.c:3037
+#, c-format
+msgid "Adding existing repo at '%s' to the index\n"
+msgstr "Добавяне на съществуващото хранилище в „%s“ към индекса\n"
+
+#: builtin/submodule--helper.c:3040
+#, c-format
+msgid "'%s' already exists and is not a valid git repo"
+msgstr "„%s“ съществува, а не е хранилище на Git"
+
+#: builtin/submodule--helper.c:3053
+#, c-format
+msgid "A git directory for '%s' is found locally with remote(s):\n"
+msgstr ""
+"Открита е локална директория на Git — „%s“, която сочи към отдалечените "
+"хранилища:\n"
+
+#: builtin/submodule--helper.c:3060
+#, c-format
+msgid ""
+"If you want to reuse this local git directory instead of cloning again from\n"
+" %s\n"
+"use the '--force' option. If the local git directory is not the correct "
+"repo\n"
+"or you are unsure what this means choose another name with the '--name' "
+"option."
+msgstr ""
+"Ако искате да преизползвате тази локална директория на git, вместо да\n"
+"клонирате отново:\n"
+" %s\n"
+"използвайте опцията „--force“. Ако локалната директория на git не е\n"
+"правилното хранилище или ако не знаете какво означава това, използвайте\n"
+"друго име като аргумент към опцията „--name“."
+
+#: builtin/submodule--helper.c:3072
+#, c-format
+msgid "Reactivating local git directory for submodule '%s'\n"
+msgstr "Активиране на локалното хранилище за подмодула „%s“ наново.\n"
+
+#: builtin/submodule--helper.c:3109
+#, c-format
+msgid "unable to checkout submodule '%s'"
+msgstr "Подмодулът „%s“ не може да бъде изтеглен"
+
+#: builtin/submodule--helper.c:3148
+#, c-format
+msgid "Failed to add submodule '%s'"
+msgstr "Неуспешно добавяне на подмодула „%s“"
+
+#: builtin/submodule--helper.c:3152 builtin/submodule--helper.c:3157
+#: builtin/submodule--helper.c:3165
+#, c-format
+msgid "Failed to register submodule '%s'"
+msgstr "Неуспешно регистриране на подмодула „%s“"
+
+#: builtin/submodule--helper.c:3221
+#, c-format
+msgid "'%s' already exists in the index"
+msgstr "„%s“ вече съществува в индекса"
+
+#: builtin/submodule--helper.c:3224
+#, c-format
+msgid "'%s' already exists in the index and is not a submodule"
+msgstr "„%s“ вече съществува в индекса и не е подмодул"
+
+#: builtin/submodule--helper.c:3253
+msgid "branch of repository to add as submodule"
+msgstr "клон на хранилище, който да се добави като подмодул"
+
+#: builtin/submodule--helper.c:3254
+msgid "allow adding an otherwise ignored submodule path"
+msgstr "позволяване на добавяне и на иначе игнорираните файлове"
+
+#: builtin/submodule--helper.c:3256
+msgid "print only error messages"
+msgstr "извеждане само на съобщенията за грешка"
+
+#: builtin/submodule--helper.c:3260
+msgid "borrow the objects from reference repositories"
+msgstr "заемане на обектите от еталонните хранилища"
+
+#: builtin/submodule--helper.c:3262
+msgid ""
+"sets the submodule’s name to the given string instead of defaulting to its "
+"path"
+msgstr "името на подмодула да е указаното, а не да е същото като пътя"
+
+#: builtin/submodule--helper.c:3269
+msgid "git submodule--helper add [<options>] [--] <repository> [<path>]"
+msgstr "git submodule--helper add [ОПЦИЯ…] [--] ХРАНИЛИЩЕ [ПЪТ]"
+
+#: builtin/submodule--helper.c:3297
+msgid "Relative path can only be used from the toplevel of the working tree"
+msgstr ""
+"Относителен път може да се ползва само от основната директория на работното "
+"дърво"
+
+#: builtin/submodule--helper.c:3305
+#, c-format
+msgid "repo URL: '%s' must be absolute or begin with ./|../"
+msgstr ""
+"адрес на хранилище: „%s“ трябва или да е абсолютен, или да започва с „./“ "
+"или „../“"
+
+#: builtin/submodule--helper.c:3340
+#, c-format
+msgid "'%s' is not a valid submodule name"
+msgstr "„%s“ е неправилно име за подмодул"
+
+#: builtin/submodule--helper.c:3404 git.c:449 git.c:723
#, c-format
msgid "%s doesn't support --super-prefix"
msgstr "„%s“ не поддържа опцията „--super-prefix“"
-#: builtin/submodule--helper.c:2798
+#: builtin/submodule--helper.c:3410
#, c-format
msgid "'%s' is not a valid submodule--helper subcommand"
msgstr "„%s“ не е подкоманда на „submodule--helper“"
@@ -23725,18 +24215,18 @@
msgid "shorten ref output"
msgstr "кратка информация за указателя"
-#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:505
msgid "reason"
msgstr "причина"
-#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:505
msgid "reason of the update"
msgstr "причина за обновяването"
#: builtin/tag.c:25
msgid ""
"git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]\n"
-"\t\t<tagname> [<head>]"
+" <tagname> [<head>]"
msgstr ""
"git tag [-a | -s | -u ИДЕНТИФИКАТОР_НА_КЛЮЧ] [-f] [-m СЪОБЩЕНИЕ | -F ФАЙЛ]\n"
" ЕТИКЕТ [ВРЪХ]"
@@ -23749,7 +24239,7 @@
msgid ""
"git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--"
"points-at <object>]\n"
-"\t\t[--format=<format>] [--merged <commit>] [--no-merged <commit>] "
+" [--format=<format>] [--merged <commit>] [--no-merged <commit>] "
"[<pattern>...]"
msgstr ""
"git tag -l [-n[БРОЙ]] [--contains ПОДАВАНЕ] [--no-contains ПОДАВАНЕ]\n"
@@ -23820,130 +24310,130 @@
msgid "bad object type."
msgstr "неправилен вид обект."
-#: builtin/tag.c:328
+#: builtin/tag.c:326
msgid "no tag message?"
msgstr "липсва съобщение за етикета"
-#: builtin/tag.c:335
+#: builtin/tag.c:333
#, c-format
msgid "The tag message has been left in %s\n"
msgstr "Съобщението за етикета е запазено във файла „%s“\n"
-#: builtin/tag.c:446
+#: builtin/tag.c:444
msgid "list tag names"
msgstr "извеждане на имената на етикетите"
-#: builtin/tag.c:448
+#: builtin/tag.c:446
msgid "print <n> lines of each tag message"
msgstr "извеждане на този БРОЙ редове от всяко съобщение за етикет"
-#: builtin/tag.c:450
+#: builtin/tag.c:448
msgid "delete tags"
msgstr "изтриване на етикети"
-#: builtin/tag.c:451
+#: builtin/tag.c:449
msgid "verify tags"
msgstr "проверка на етикети"
-#: builtin/tag.c:453
+#: builtin/tag.c:451
msgid "Tag creation options"
msgstr "Опции при създаването на етикети"
-#: builtin/tag.c:455
+#: builtin/tag.c:453
msgid "annotated tag, needs a message"
msgstr "анотирането на етикети изисква съобщение"
-#: builtin/tag.c:457
+#: builtin/tag.c:455
msgid "tag message"
msgstr "СЪОБЩЕНИЕ за етикет"
-#: builtin/tag.c:459
+#: builtin/tag.c:457
msgid "force edit of tag message"
msgstr "принудително редактиране на съобщение за етикет"
-#: builtin/tag.c:460
+#: builtin/tag.c:458
msgid "annotated and GPG-signed tag"
msgstr "анотиран етикет с подпис по GPG"
-#: builtin/tag.c:463
+#: builtin/tag.c:461
msgid "use another key to sign the tag"
msgstr "използване на друг ключ за подписването на етикет"
-#: builtin/tag.c:464
+#: builtin/tag.c:462
msgid "replace the tag if exists"
msgstr "замяна на етикета, ако съществува"
-#: builtin/tag.c:465 builtin/update-ref.c:505
+#: builtin/tag.c:463 builtin/update-ref.c:511
msgid "create a reflog"
msgstr "създаване на журнал на указателите"
-#: builtin/tag.c:467
+#: builtin/tag.c:465
msgid "Tag listing options"
msgstr "Опции за извеждането на етикети"
-#: builtin/tag.c:468
+#: builtin/tag.c:466
msgid "show tag list in columns"
msgstr "извеждане на списъка на етикетите по колони"
-#: builtin/tag.c:469 builtin/tag.c:471
+#: builtin/tag.c:467 builtin/tag.c:469
msgid "print only tags that contain the commit"
msgstr "извеждане само на етикетите, които съдържат подаването"
-#: builtin/tag.c:470 builtin/tag.c:472
+#: builtin/tag.c:468 builtin/tag.c:470
msgid "print only tags that don't contain the commit"
msgstr "извеждане само на етикетите, които не съдържат подаването"
-#: builtin/tag.c:473
+#: builtin/tag.c:471
msgid "print only tags that are merged"
msgstr "извеждане само на слетите етикети"
-#: builtin/tag.c:474
+#: builtin/tag.c:472
msgid "print only tags that are not merged"
msgstr "извеждане само на неслетите етикети"
-#: builtin/tag.c:478
+#: builtin/tag.c:476
msgid "print only tags of the object"
msgstr "извеждане само на етикетите на ОБЕКТА"
-#: builtin/tag.c:526
+#: builtin/tag.c:525
msgid "--column and -n are incompatible"
msgstr "опциите „--column“ и „-n“ са несъвместими"
-#: builtin/tag.c:548
+#: builtin/tag.c:546
msgid "-n option is only allowed in list mode"
msgstr "опцията „-n“ изисква режим на списък."
-#: builtin/tag.c:550
+#: builtin/tag.c:548
msgid "--contains option is only allowed in list mode"
-msgstr "опцията „-contains“ изисква режим на списък."
+msgstr "опцията „--contains“ изисква режим на списък."
+
+#: builtin/tag.c:550
+msgid "--no-contains option is only allowed in list mode"
+msgstr "опцията „--no-contains“ изисква режим на списък."
#: builtin/tag.c:552
-msgid "--no-contains option is only allowed in list mode"
-msgstr "опцията „-contains“ изисква режим на списък."
+msgid "--points-at option is only allowed in list mode"
+msgstr "опцията „--points-at“ изисква режим на списък."
#: builtin/tag.c:554
-msgid "--points-at option is only allowed in list mode"
-msgstr "опцията „-points-at“ изисква режим на списък."
-
-#: builtin/tag.c:556
msgid "--merged and --no-merged options are only allowed in list mode"
msgstr "опциите „--merged“ и „--no-merged“ изискват режим на списък."
-#: builtin/tag.c:567
+#: builtin/tag.c:568
msgid "only one -F or -m option is allowed."
msgstr "опциите „-F“ и „-m“ са несъвместими."
-#: builtin/tag.c:592
+#: builtin/tag.c:593
#, c-format
msgid "'%s' is not a valid tag name."
msgstr "„%s“ е неправилно име за етикет."
-#: builtin/tag.c:597
+#: builtin/tag.c:598
#, c-format
msgid "tag '%s' already exists"
msgstr "етикетът „%s“ вече съществува"
-#: builtin/tag.c:628
+#: builtin/tag.c:629
#, c-format
msgid "Updated tag '%s' (was %s)\n"
msgstr "Обновен етикет „%s“ (бе „%s“)\n"
@@ -23957,217 +24447,212 @@
msgid "failed to create directory %s"
msgstr "директорията „%s“ не може да бъде създадена"
-#: builtin/update-index.c:100
-#, c-format
-msgid "failed to create file %s"
-msgstr "файлът „%s“ не може да бъде създаден"
-
-#: builtin/update-index.c:108
+#: builtin/update-index.c:106
#, c-format
msgid "failed to delete file %s"
msgstr "файлът „%s“ не може да бъде изтрит"
-#: builtin/update-index.c:115 builtin/update-index.c:221
+#: builtin/update-index.c:113 builtin/update-index.c:219
#, c-format
msgid "failed to delete directory %s"
msgstr "директорията „%s“ не може да бъде изтрита"
-#: builtin/update-index.c:140
+#: builtin/update-index.c:138
#, c-format
msgid "Testing mtime in '%s' "
msgstr "Проверка на времето на промяна (mtime) на файла „%s“"
-#: builtin/update-index.c:154
+#: builtin/update-index.c:152
msgid "directory stat info does not change after adding a new file"
msgstr ""
"информацията получена чрез „stat“ за директорията не се променя след "
"добавянето на нов файл"
-#: builtin/update-index.c:167
+#: builtin/update-index.c:165
msgid "directory stat info does not change after adding a new directory"
msgstr ""
"информацията получена чрез „stat“ за директорията не се променя след "
"добавянето на нова директория"
-#: builtin/update-index.c:180
+#: builtin/update-index.c:178
msgid "directory stat info changes after updating a file"
msgstr ""
"информацията получена чрез „stat“ за директорията се променя след "
"обновяването на нов файл"
-#: builtin/update-index.c:191
+#: builtin/update-index.c:189
msgid "directory stat info changes after adding a file inside subdirectory"
msgstr ""
"информацията получена чрез „stat“ за директорията се променя след добавянето "
"на файл в поддиректория"
-#: builtin/update-index.c:202
+#: builtin/update-index.c:200
msgid "directory stat info does not change after deleting a file"
msgstr ""
"информацията получена чрез „stat“ за директорията не се променя след "
"изтриването на файл"
-#: builtin/update-index.c:215
+#: builtin/update-index.c:213
msgid "directory stat info does not change after deleting a directory"
msgstr ""
"информацията получена чрез „stat“ за директорията не се променя след "
"изтриването на директория"
-#: builtin/update-index.c:222
+#: builtin/update-index.c:220
msgid " OK"
msgstr " Добре"
-#: builtin/update-index.c:591
+#: builtin/update-index.c:589
msgid "git update-index [<options>] [--] [<file>...]"
msgstr "git update-index [ОПЦИЯ…] [--] [ФАЙЛ…]"
-#: builtin/update-index.c:976
+#: builtin/update-index.c:974
msgid "continue refresh even when index needs update"
msgstr ""
"продължаване с обновяването, дори когато индексът трябва да бъде обновен"
-#: builtin/update-index.c:979
+#: builtin/update-index.c:977
msgid "refresh: ignore submodules"
msgstr "подмодулите да се игнорират при обновяването"
-#: builtin/update-index.c:982
+#: builtin/update-index.c:980
msgid "do not ignore new files"
msgstr "новите файлове да не се игнорират"
-#: builtin/update-index.c:984
+#: builtin/update-index.c:982
msgid "let files replace directories and vice-versa"
msgstr "файлове да може да заменят директории и обратно"
-#: builtin/update-index.c:986
+#: builtin/update-index.c:984
msgid "notice files missing from worktree"
msgstr "предупреждаване при липсващи в работното дърво файлове"
-#: builtin/update-index.c:988
+#: builtin/update-index.c:986
msgid "refresh even if index contains unmerged entries"
msgstr "обновяване дори и индексът да съдържа неслети обекти"
-#: builtin/update-index.c:991
+#: builtin/update-index.c:989
msgid "refresh stat information"
msgstr "обновяване на информацията от функцията „stat“"
-#: builtin/update-index.c:995
+#: builtin/update-index.c:993
msgid "like --refresh, but ignore assume-unchanged setting"
msgstr ""
"като опцията „--refresh“, но да се проверят и обектите, които са били приети "
"за непроменени"
-#: builtin/update-index.c:999
+#: builtin/update-index.c:997
msgid "<mode>,<object>,<path>"
msgstr "РЕЖИМ,ОБЕКТ,ПЪТ"
-#: builtin/update-index.c:1000
+#: builtin/update-index.c:998
msgid "add the specified entry to the index"
msgstr "добавяне на изброените обекти към индекса"
-#: builtin/update-index.c:1010
+#: builtin/update-index.c:1008
msgid "mark files as \"not changing\""
msgstr "задаване на флаг, че файлът не се променя"
-#: builtin/update-index.c:1013
+#: builtin/update-index.c:1011
msgid "clear assumed-unchanged bit"
msgstr "изчистване на флага, че файлът не се променя"
-#: builtin/update-index.c:1016
+#: builtin/update-index.c:1014
msgid "mark files as \"index-only\""
msgstr "задаване на флаг, че файловете са само за индекса"
-#: builtin/update-index.c:1019
+#: builtin/update-index.c:1017
msgid "clear skip-worktree bit"
msgstr "изчистване на флага, че файловете са само за индекса"
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1020
msgid "do not touch index-only entries"
msgstr "без промяна на файловете само за индекса"
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1022
msgid "add to index only; do not add content to object database"
msgstr "добавяне само към индекса без добавяне към базата от данни за обектите"
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1024
msgid "remove named paths even if present in worktree"
msgstr "изтриване на указаните пътища, дори и да съществуват в работното дърво"
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1026
msgid "with --stdin: input lines are terminated by null bytes"
msgstr ""
"при комбиниране с опцията „--stdin“ — входните редове са разделени с нулевия "
"байт"
-#: builtin/update-index.c:1030
+#: builtin/update-index.c:1028
msgid "read list of paths to be updated from standard input"
msgstr "изчитане на списъка с пътища за обновяване от стандартния вход"
-#: builtin/update-index.c:1034
+#: builtin/update-index.c:1032
msgid "add entries from standard input to the index"
msgstr "добавяне на елементите от стандартния вход към индекса"
-#: builtin/update-index.c:1038
+#: builtin/update-index.c:1036
msgid "repopulate stages #2 and #3 for the listed paths"
msgstr ""
"възстановяване на състоянието преди сливане или нужда от обновяване за "
"изброените пътища"
-#: builtin/update-index.c:1042
+#: builtin/update-index.c:1040
msgid "only update entries that differ from HEAD"
msgstr "добавяне само на съдържанието, което се различава от това в „HEAD“"
-#: builtin/update-index.c:1046
+#: builtin/update-index.c:1044
msgid "ignore files missing from worktree"
msgstr "игнориране на файловете, които липсват в работното дърво"
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1047
msgid "report actions to standard output"
msgstr "извеждане на действията на стандартния изход"
-#: builtin/update-index.c:1051
+#: builtin/update-index.c:1049
msgid "(for porcelains) forget saved unresolved conflicts"
msgstr ""
"забравяне на записаната информация за неразрешени конфликти — за командите "
"от потребителско ниво"
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1053
msgid "write index in this format"
msgstr "записване на индекса в този формат"
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1055
msgid "enable or disable split index"
msgstr "включване или изключване на разделянето на индекса"
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1057
msgid "enable/disable untracked cache"
msgstr "включване/изключване на кеша за неследените файлове"
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1059
msgid "test if the filesystem supports untracked cache"
msgstr "проверка дали файловата система поддържа кеш за неследени файлове"
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1061
msgid "enable untracked cache without testing the filesystem"
msgstr ""
"включване на кеша за неследените файлове без проверка на файловата система"
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1063
msgid "write out the index even if is not flagged as changed"
msgstr "запис на индекса, дори да не е отбелязан като променен"
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1065
msgid "enable or disable file system monitor"
msgstr "включване или изключване на наблюдението на файловата система"
-#: builtin/update-index.c:1069
+#: builtin/update-index.c:1067
msgid "mark files as fsmonitor valid"
msgstr "отбелязване на файловете, че може да се следят чрез файловата система"
-#: builtin/update-index.c:1072
+#: builtin/update-index.c:1070
msgid "clear fsmonitor valid bit"
msgstr "изчистване на флага за следенето чрез файловата система"
-#: builtin/update-index.c:1175
+#: builtin/update-index.c:1173
msgid ""
"core.splitIndex is set to false; remove or change it, if you really want to "
"enable split index"
@@ -24175,7 +24660,7 @@
"Настройката „core.splitIndex“ е зададена на „false“ (лъжа̀). Сменете я или я "
"изтрийте, за да включите разделянето на индекса"
-#: builtin/update-index.c:1184
+#: builtin/update-index.c:1182
msgid ""
"core.splitIndex is set to true; remove or change it, if you really want to "
"disable split index"
@@ -24183,7 +24668,7 @@
"Настройката „core.splitIndex“ е зададена на „true“ (истина). Сменете я или "
"я изтрийте, за да изключите разделянето на индекса."
-#: builtin/update-index.c:1196
+#: 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"
@@ -24191,11 +24676,11 @@
"Настройката „core.untrackedCache“ е зададена на „true“ (истина). Сменете я "
"или я изтрийте, за да изключите кеша за неследените файлове"
-#: builtin/update-index.c:1200
+#: builtin/update-index.c:1198
msgid "Untracked cache disabled"
msgstr "Кешът за неследените файлове е изключен"
-#: builtin/update-index.c:1208
+#: builtin/update-index.c:1206
msgid ""
"core.untrackedCache is set to false; remove or change it, if you really want "
"to enable the untracked cache"
@@ -24203,29 +24688,29 @@
"Настройката „core.untrackedCache“ е зададена на „false“ (лъжа̀). Сменете я "
"или я изтрийте, за да включите кеша за неследените файлове"
-#: builtin/update-index.c:1212
+#: builtin/update-index.c:1210
#, c-format
msgid "Untracked cache enabled for '%s'"
msgstr "Кешът за неследените файлове е включен за „%s“"
-#: builtin/update-index.c:1220
+#: builtin/update-index.c:1218
msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
msgstr ""
"Настройката „core.fsmonitor“ не е зададена. Задайте я, за да включите "
"следенето чрез файловата система."
-#: builtin/update-index.c:1224
+#: builtin/update-index.c:1222
msgid "fsmonitor enabled"
msgstr "следенето чрез файловата система е включено"
-#: builtin/update-index.c:1227
+#: builtin/update-index.c:1225
msgid ""
"core.fsmonitor is set; remove it if you really want to disable fsmonitor"
msgstr ""
"Настройката „core.fsmonitor“ е зададена. Изтрийте я, за да изключите "
"следенето чрез файловата система."
-#: builtin/update-index.c:1231
+#: builtin/update-index.c:1229
msgid "fsmonitor disabled"
msgstr "следенето чрез файловата система е изключено"
@@ -24241,21 +24726,21 @@
msgid "git update-ref [<options>] --stdin [-z]"
msgstr "git update-ref [ОПЦИЯ…] --stdin [-z]"
-#: builtin/update-ref.c:500
+#: builtin/update-ref.c:506
msgid "delete the reference"
msgstr "изтриване на указателя"
-#: builtin/update-ref.c:502
+#: builtin/update-ref.c:508
msgid "update <refname> not the one it points to"
msgstr "обновяване на ИМЕто_НА_УКАЗАТЕЛя, а не това, към което сочи"
-#: builtin/update-ref.c:503
+#: builtin/update-ref.c:509
msgid "stdin has NUL-terminated arguments"
msgstr ""
"някои от елементите подадени на стандартния вход завършват с нулевия знак "
"„NUL“"
-#: builtin/update-ref.c:504
+#: builtin/update-ref.c:510
msgid "read updates from stdin"
msgstr "изчитане на указателите от стандартния вход"
@@ -24269,28 +24754,28 @@
#: builtin/upload-pack.c:11
msgid "git upload-pack [<options>] <dir>"
-msgstr "git upload-repack [ОПЦИЯ…] ДИРЕКТОРИЯ"
+msgstr "git upload-pack [ОПЦИЯ…] ДИРЕКТОРИЯ"
-#: builtin/upload-pack.c:23 t/helper/test-serve-v2.c:17
+#: builtin/upload-pack.c:24 t/helper/test-serve-v2.c:17
msgid "quit after a single request/response exchange"
msgstr "изход след първоначалната размяна на заявка и отговор"
-#: builtin/upload-pack.c:25
-msgid "exit immediately after initial ref advertisement"
-msgstr "изход след първоначалната обява на указатели"
+#: builtin/upload-pack.c:26
+msgid "serve up the info/refs for git-http-backend"
+msgstr "доставяне на информацията/указателите за „git-http-backend“"
-#: builtin/upload-pack.c:27
+#: builtin/upload-pack.c:29
msgid "do not try <directory>/.git/ if <directory> is no Git directory"
msgstr ""
"да не се търси „ДИРЕКТОРИЯ/.git/“, ако ДИРЕКТОРИЯта не е под контрола на Git"
-#: builtin/upload-pack.c:29
+#: builtin/upload-pack.c:31
msgid "interrupt transfer after <n> seconds of inactivity"
msgstr "трансферът да се преустанови след този БРОЙ секунди"
#: builtin/verify-commit.c:19
msgid "git verify-commit [-v | --verbose] <commit>..."
-msgstr "git verify-tag [-v | --verbose] ПОДАВАНЕ…"
+msgstr "git verify-commit [-v | --verbose] ПОДАВАНЕ…"
#: builtin/verify-commit.c:68
msgid "print commit contents"
@@ -24320,63 +24805,58 @@
msgid "print tag contents"
msgstr "извеждане на съдържанието на ЕТИКЕТи"
-#: builtin/worktree.c:18
+#: builtin/worktree.c:19
msgid "git worktree add [<options>] <path> [<commit-ish>]"
msgstr "git worktree add [ОПЦИЯ…] ПЪТ [УКАЗАТЕЛ_КЪМ_ПОДАВАНЕ]"
-#: builtin/worktree.c:19
+#: builtin/worktree.c:20
msgid "git worktree list [<options>]"
msgstr "git worktree list [ОПЦИЯ…]"
-#: builtin/worktree.c:20
+#: builtin/worktree.c:21
msgid "git worktree lock [<options>] <path>"
msgstr "git worktree lock [ОПЦИЯ…] [ПЪТ]"
-#: builtin/worktree.c:21
+#: builtin/worktree.c:22
msgid "git worktree move <worktree> <new-path>"
msgstr "git worktree move [ДЪРВО] [НОВ_ПЪТ]"
-#: builtin/worktree.c:22
+#: builtin/worktree.c:23
msgid "git worktree prune [<options>]"
msgstr "git worktree prune [ОПЦИЯ…]"
-#: builtin/worktree.c:23
+#: builtin/worktree.c:24
msgid "git worktree remove [<options>] <worktree>"
msgstr "git worktree remove [ОПЦИЯ…] [ДЪРВО]"
-#: builtin/worktree.c:24
+#: builtin/worktree.c:25
msgid "git worktree unlock <path>"
msgstr "git worktree unlock [ПЪТ]"
-#: builtin/worktree.c:61 builtin/worktree.c:944
-#, c-format
-msgid "failed to delete '%s'"
-msgstr "неуспешно изтриване на „%s“"
-
-#: builtin/worktree.c:74
+#: builtin/worktree.c:75
#, c-format
msgid "Removing %s/%s: %s"
msgstr "Изтриване на „%s/%s“: %s"
-#: builtin/worktree.c:147
+#: builtin/worktree.c:148
msgid "report pruned working trees"
msgstr "докладване на окастрените работни дървета"
-#: builtin/worktree.c:149
+#: builtin/worktree.c:150
msgid "expire working trees older than <time>"
msgstr "обявяване на работните копия по-стари от това ВРЕМЕ за остарели"
-#: builtin/worktree.c:219
+#: builtin/worktree.c:220
#, c-format
msgid "'%s' already exists"
msgstr "„%s“ вече съществува"
-#: builtin/worktree.c:228
+#: builtin/worktree.c:229
#, c-format
msgid "unusable worktree destination '%s'"
msgstr "целта не може да се ползва за работно дърво: „%s“"
-#: builtin/worktree.c:233
+#: builtin/worktree.c:234
#, c-format
msgid ""
"'%s' is a missing but locked worktree;\n"
@@ -24386,7 +24866,7 @@
"За изрично задаване ползвайте „%s -f -f“, а за изчистване —\n"
"„unlock“, „prune“ или „remove“"
-#: builtin/worktree.c:235
+#: builtin/worktree.c:236
#, c-format
msgid ""
"'%s' is a missing but already registered worktree;\n"
@@ -24396,145 +24876,145 @@
"За изрично задаване ползвайте „%s -f“, а за изчистване —\n"
"„prune“ или „remove“"
-#: builtin/worktree.c:286
+#: builtin/worktree.c:287
#, c-format
msgid "could not create directory of '%s'"
msgstr "директорията „%s“ не може да бъде създадена"
-#: builtin/worktree.c:308
+#: builtin/worktree.c:309
msgid "initializing"
msgstr "инициализация"
-#: builtin/worktree.c:420 builtin/worktree.c:426
+#: builtin/worktree.c:421 builtin/worktree.c:427
#, c-format
msgid "Preparing worktree (new branch '%s')"
msgstr "Приготвяне на работното дърво (нов клон „%s“)"
-#: builtin/worktree.c:422
+#: builtin/worktree.c:423
#, c-format
msgid "Preparing worktree (resetting branch '%s'; was at %s)"
msgstr ""
"Приготвяне на работното дърво (зануляване на клона „%s“, който сочеше към "
"„%s“)"
-#: builtin/worktree.c:431
+#: builtin/worktree.c:432
#, c-format
msgid "Preparing worktree (checking out '%s')"
msgstr "Приготвяне на работното дърво (изтегляне на „%s“)"
-#: builtin/worktree.c:437
+#: builtin/worktree.c:438
#, c-format
msgid "Preparing worktree (detached HEAD %s)"
msgstr "Подготвяне на работно дърво (указателят „HEAD“ не свързан: %s)"
-#: builtin/worktree.c:482
+#: builtin/worktree.c:483
msgid "checkout <branch> even if already checked out in other worktree"
msgstr "Изтегляне КЛОНа, дори и да е изтеглен в друго работно дърво"
-#: builtin/worktree.c:485
+#: builtin/worktree.c:486
msgid "create a new branch"
msgstr "създаване на нов клон"
-#: builtin/worktree.c:487
+#: builtin/worktree.c:488
msgid "create or reset a branch"
msgstr "създаване или зануляване на клони"
-#: builtin/worktree.c:489
+#: builtin/worktree.c:490
msgid "populate the new working tree"
msgstr "подготвяне на новото работно дърво"
-#: builtin/worktree.c:490
+#: builtin/worktree.c:491
msgid "keep the new working tree locked"
msgstr "новото работно дърво да остане заключено"
-#: builtin/worktree.c:492 builtin/worktree.c:729
+#: builtin/worktree.c:493 builtin/worktree.c:730
msgid "reason for locking"
msgstr "причина за заключване"
-#: builtin/worktree.c:495
+#: builtin/worktree.c:496
msgid "set up tracking mode (see git-branch(1))"
msgstr "задаване на режима на следене (виж git-branch(1))"
-#: builtin/worktree.c:498
+#: builtin/worktree.c:499
msgid "try to match the new branch name with a remote-tracking branch"
msgstr "опит за напасване на името на новия клон с това на следящ клон"
-#: builtin/worktree.c:506
+#: builtin/worktree.c:507
msgid "-b, -B, and --detach are mutually exclusive"
msgstr "опциите „-b“, „-B“ и „--detach“ са несъвместими една с друга"
-#: builtin/worktree.c:508
+#: builtin/worktree.c:509
msgid "--reason requires --lock"
msgstr "опцията „--reason“ изисква „--lock“"
-#: builtin/worktree.c:512
+#: builtin/worktree.c:513
msgid "added with --lock"
msgstr "добавена с „--lock“"
-#: builtin/worktree.c:574
+#: builtin/worktree.c:575
msgid "--[no-]track can only be used if a new branch is created"
msgstr "„--[no-]track“ може да се използва само при създаването на нов клон"
-#: builtin/worktree.c:691
+#: builtin/worktree.c:692
msgid "show extended annotations and reasons, if available"
msgstr "извеждане на подробни анотации и обяснения, ако такива са налични"
-#: builtin/worktree.c:693
+#: builtin/worktree.c:694
msgid "add 'prunable' annotation to worktrees older than <time>"
msgstr ""
"добавяне на анотация за окастряне на работните копия по-стари от това ВРЕМЕ"
-#: builtin/worktree.c:702
+#: builtin/worktree.c:703
msgid "--verbose and --porcelain are mutually exclusive"
msgstr "опциите „--verbose“ и „--porcelain“ са несъвместими"
-#: builtin/worktree.c:741 builtin/worktree.c:774 builtin/worktree.c:848
-#: builtin/worktree.c:972
+#: builtin/worktree.c:742 builtin/worktree.c:775 builtin/worktree.c:849
+#: builtin/worktree.c:973
#, c-format
msgid "'%s' is not a working tree"
msgstr "„%s“ не е работно дърво"
-#: builtin/worktree.c:743 builtin/worktree.c:776
+#: builtin/worktree.c:744 builtin/worktree.c:777
msgid "The main working tree cannot be locked or unlocked"
msgstr "Основното дърво не може да се отключи или заключи"
-#: builtin/worktree.c:748
+#: builtin/worktree.c:749
#, c-format
msgid "'%s' is already locked, reason: %s"
msgstr "„%s“ вече е заключено, защото „%s“"
-#: builtin/worktree.c:750
+#: builtin/worktree.c:751
#, c-format
msgid "'%s' is already locked"
msgstr "„%s“ вече е заключено"
-#: builtin/worktree.c:778
+#: builtin/worktree.c:779
#, c-format
msgid "'%s' is not locked"
msgstr "„%s“ не е заключено"
-#: builtin/worktree.c:819
+#: builtin/worktree.c:820
msgid "working trees containing submodules cannot be moved or removed"
msgstr ""
"не може да местите или изтривате работни дървета, в които има подмодули"
-#: builtin/worktree.c:827
+#: builtin/worktree.c:828
msgid "force move even if worktree is dirty or locked"
msgstr ""
"принудително преместване, дори работното дърво да не е чисто или да е "
"заключено"
-#: builtin/worktree.c:850 builtin/worktree.c:974
+#: builtin/worktree.c:851 builtin/worktree.c:975
#, c-format
msgid "'%s' is a main working tree"
msgstr "„%s“ е основно работно дърво"
-#: builtin/worktree.c:855
+#: builtin/worktree.c:856
#, c-format
msgid "could not figure out destination name from '%s'"
msgstr "името на целта не може да се определи от „%s“"
-#: builtin/worktree.c:868
+#: builtin/worktree.c:869
#, c-format
msgid ""
"cannot move a locked working tree, lock reason: %s\n"
@@ -24543,7 +25023,7 @@
"не може да преместите заключено работно дърво, причина за заключването: %s\n"
"или го отключете, или го преместете принудително с „move -f -f“"
-#: builtin/worktree.c:870
+#: builtin/worktree.c:871
msgid ""
"cannot move a locked working tree;\n"
"use 'move -f -f' to override or unlock first"
@@ -24551,41 +25031,41 @@
"не може да преместите заключено работно дърво:\n"
"или го отключете, или го преместете принудително с „move -f -f“"
-#: builtin/worktree.c:873
+#: builtin/worktree.c:874
#, c-format
msgid "validation failed, cannot move working tree: %s"
msgstr ""
"проверките са неуспешни, работното дърво не може да бъде преместено: %s"
-#: builtin/worktree.c:878
+#: builtin/worktree.c:879
#, c-format
msgid "failed to move '%s' to '%s'"
msgstr "„%s“ не може да се премести в „%s“"
-#: builtin/worktree.c:924
+#: builtin/worktree.c:925
#, c-format
msgid "failed to run 'git status' on '%s'"
msgstr "неуспешно изпълнение на „git status“ върху „%s“"
-#: builtin/worktree.c:928
+#: builtin/worktree.c:929
#, c-format
msgid "'%s' contains modified or untracked files, use --force to delete it"
msgstr ""
"„%s“ съдържа променени или нови файлове, за принудително изтриване е "
"необходима опцията „--force“"
-#: builtin/worktree.c:933
+#: builtin/worktree.c:934
#, c-format
msgid "failed to run 'git status' on '%s', code %d"
msgstr ""
"командата „git status“ не може да се изпълни за „%s“, код за грешка: %d"
-#: builtin/worktree.c:956
+#: builtin/worktree.c:957
msgid "force removal even if worktree is dirty or locked"
msgstr ""
"принудително изтриване, дори работното дърво да не е чисто или да е заключено"
-#: builtin/worktree.c:979
+#: builtin/worktree.c:980
#, c-format
msgid ""
"cannot remove a locked working tree, lock reason: %s\n"
@@ -24594,7 +25074,7 @@
"не може да изтриете заключено работно дърво, причина за заключването: %s\n"
"или го отключете, или го изтрийте принудително с „remove -f -f“"
-#: builtin/worktree.c:981
+#: builtin/worktree.c:982
msgid ""
"cannot remove a locked working tree;\n"
"use 'remove -f -f' to override or unlock first"
@@ -24602,17 +25082,17 @@
"не може да изтриете заключено работно дърво:\n"
"или го отключете, или го изтрийте принудително с „remove -f -f“"
-#: builtin/worktree.c:984
+#: builtin/worktree.c:985
#, c-format
msgid "validation failed, cannot remove working tree: %s"
msgstr "проверките са неуспешни, работното дърво не може да бъде изтрито: %s"
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:1009
#, c-format
msgid "repair: %s: %s"
msgstr "поправяне: %s: „%s“"
-#: builtin/worktree.c:1011
+#: builtin/worktree.c:1012
#, c-format
msgid "error: %s: %s"
msgstr "грешка: %s: „%s“"
@@ -24741,17 +25221,17 @@
msgid "close failed on standard output"
msgstr "грешка при затваряне на стандартния изход"
-#: git.c:833
+#: git.c:832
#, c-format
msgid "alias loop detected: expansion of '%s' does not terminate:%s"
msgstr "зацикляне в псевдонимите: заместванията на „%s“ не приключват:%s"
-#: git.c:883
+#: git.c:882
#, c-format
msgid "cannot handle %s as a builtin"
msgstr "„%s“ не може да се обработи като вградена команда"
-#: git.c:896
+#: git.c:895
#, c-format
msgid ""
"usage: %s\n"
@@ -24760,14 +25240,14 @@
"употреба: %s\n"
"\n"
-#: git.c:916
+#: git.c:915
#, c-format
msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
msgstr ""
"неуспешно заместване на псевдонима „%s“ — резултатът „%s“ не е команда на "
"git\n"
-#: git.c:928
+#: git.c:927
#, c-format
msgid "failed to run command '%s': %s\n"
msgstr "командата „%s“ не може да се изпълни: %s\n"
@@ -24814,65 +25294,31 @@
msgid "exit immediately after advertising capabilities"
msgstr "изход след първоначалната обява на възможностите"
-#: t/helper/test-simple-ipc.c:262
-#, c-format
-msgid "socket/pipe already in use: '%s'"
-msgstr "гнездото/каналът вече се ползват: „%s“"
-
-#: t/helper/test-simple-ipc.c:264
-#, c-format
-msgid "could not start server on: '%s'"
-msgstr "сървърът не стартира на гнездо/канал „%s“"
-
-#: t/helper/test-simple-ipc.c:295 t/helper/test-simple-ipc.c:331
-msgid "could not spawn daemon in the background"
-msgstr "демонът не може да се стартира във фонов режим"
-
-#: t/helper/test-simple-ipc.c:356
-msgid "waitpid failed"
-msgstr "неуспешно изпълнение на „waitpid“"
-
-#: t/helper/test-simple-ipc.c:376
-msgid "daemon not online yet"
-msgstr "демонът още не отговаря на заявки"
-
-#: t/helper/test-simple-ipc.c:406
-msgid "daemon failed to start"
-msgstr "демонът не е стартирал"
-
-#: t/helper/test-simple-ipc.c:410
-msgid "waitpid is confused"
-msgstr "„waitpid“ върна неочаквана стойност"
-
-#: t/helper/test-simple-ipc.c:541
-msgid "daemon has not shutdown yet"
-msgstr "демонът не е спрял"
-
-#: t/helper/test-simple-ipc.c:682
+#: t/helper/test-simple-ipc.c:581
msgid "test-helper simple-ipc is-active [<name>] [<options>]"
msgstr "test-helper simple-ipc is-active [ИМЕ] [ОПЦИЯ…]"
-#: t/helper/test-simple-ipc.c:683
+#: t/helper/test-simple-ipc.c:582
msgid "test-helper simple-ipc run-daemon [<name>] [<threads>]"
msgstr "test-helper simple-ipc run-daemon [ИМЕ] [НИШКИ]"
-#: t/helper/test-simple-ipc.c:684
+#: t/helper/test-simple-ipc.c:583
msgid "test-helper simple-ipc start-daemon [<name>] [<threads>] [<max-wait>]"
msgstr "test-helper simple-ipc start-daemon [ИМЕ] [НИШКИ] [ИЗЧАКВАНЕ]"
-#: t/helper/test-simple-ipc.c:685
+#: t/helper/test-simple-ipc.c:584
msgid "test-helper simple-ipc stop-daemon [<name>] [<max-wait>]"
msgstr "test-helper simple-ipc stop-daemon [ИМЕ] [ИЗЧАКВАНЕ]"
-#: t/helper/test-simple-ipc.c:686
+#: t/helper/test-simple-ipc.c:585
msgid "test-helper simple-ipc send [<name>] [<token>]"
msgstr "test-helper simple-ipc send [ИМЕ] [ЛЕКСЕМА]"
-#: t/helper/test-simple-ipc.c:687
+#: t/helper/test-simple-ipc.c:586
msgid "test-helper simple-ipc sendbytes [<name>] [<bytecount>] [<byte>]"
msgstr "test-helper simple-ipc sendbytes [ИМЕ] [БРОЙ_БАЙТОВЕ] [РАЗМЕР]"
-#: t/helper/test-simple-ipc.c:688
+#: t/helper/test-simple-ipc.c:587
msgid ""
"test-helper simple-ipc multiple [<name>] [<threads>] [<bytecount>] "
"[<batchsize>]"
@@ -24880,88 +25326,84 @@
"test-helper simple-ipc multiple [ИМЕ] [НИШКИ] [БРОЙ_БАЙТОВЕ] "
"[РАЗМЕР_НА_ПАКЕТА]"
-#: t/helper/test-simple-ipc.c:696
+#: t/helper/test-simple-ipc.c:595
msgid "name or pathname of unix domain socket"
msgstr "име или път за гнездото на Unix"
-#: t/helper/test-simple-ipc.c:698
+#: t/helper/test-simple-ipc.c:597
msgid "named-pipe name"
msgstr "име на именован канал"
-#: t/helper/test-simple-ipc.c:700
+#: t/helper/test-simple-ipc.c:599
msgid "number of threads in server thread pool"
msgstr "брой нишки в запаса нишки"
-#: t/helper/test-simple-ipc.c:701
+#: t/helper/test-simple-ipc.c:600
msgid "seconds to wait for daemon to start or stop"
msgstr "секунди изчакване на демона да стартира или спре"
-#: t/helper/test-simple-ipc.c:703
+#: t/helper/test-simple-ipc.c:602
msgid "number of bytes"
msgstr "брой байтове"
-#: t/helper/test-simple-ipc.c:704
+#: t/helper/test-simple-ipc.c:603
msgid "number of requests per thread"
msgstr "брой заявки на нишка"
-#: t/helper/test-simple-ipc.c:706
+#: t/helper/test-simple-ipc.c:605
msgid "byte"
msgstr "байта"
-#: t/helper/test-simple-ipc.c:706
+#: t/helper/test-simple-ipc.c:605
msgid "ballast character"
msgstr "знаци за пращане"
-#: t/helper/test-simple-ipc.c:707
+#: t/helper/test-simple-ipc.c:606
msgid "token"
msgstr "лексема"
-#: t/helper/test-simple-ipc.c:707
+#: t/helper/test-simple-ipc.c:606
msgid "command token to send to the server"
msgstr "командна лексема за пращане"
-#: http.c:399
+#: http.c:350
#, c-format
msgid "negative value for http.postbuffer; defaulting to %d"
msgstr ""
"отрицателна стойност за „http.postbuffer“. Ще се ползва стандартната: %d"
-#: http.c:420
+#: http.c:371
msgid "Delegation control is not supported with cURL < 7.22.0"
msgstr "Управлението на делегирането не се поддържа от cURL < 7.22.0"
-#: http.c:429
-msgid "Public key pinning not supported with cURL < 7.44.0"
-msgstr "Задаването на постоянен публичен ключ не се поддържа от cURL < 7.44.0"
+#: http.c:380
+msgid "Public key pinning not supported with cURL < 7.39.0"
+msgstr "Задаването на постоянен публичен ключ не се поддържа от cURL < 7.39.0"
-#: http.c:910
+#: http.c:812
msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
msgstr "„CURLSSLOPT_NO_REVOKE“ не се поддържа от cURL < 7.44.0"
-#: http.c:989
-msgid "Protocol restrictions not supported with cURL < 7.19.4"
-msgstr "Ограничаването на протоколите не се поддържа от cURL < 7.44.0"
-
-#: http.c:1132
+#: http.c:1016
#, c-format
msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
msgstr "Неподдържана реализация на SSL „%s“. Поддържат се:"
-#: http.c:1139
+#: http.c:1023
#, c-format
msgid "Could not set SSL backend to '%s': cURL was built without SSL backends"
msgstr ""
"Реализацията на SSL не може да се зададе да е „%s“: cURL е компилиран без "
"поддръжка на SSL"
-#: http.c:1143
+#: http.c:1027
#, c-format
msgid "Could not set SSL backend to '%s': already set"
msgstr ""
"Реализацията на SSL не може да се зададе да е „%s“, защото вече е зададена "
"друга"
-#: http.c:2034
+#: http.c:1876
#, c-format
msgid ""
"unable to update url base from redirection:\n"
@@ -24979,47 +25421,52 @@
"неправилно екраниране или цитиране в стойността към опция за изтласкване: "
"„%s“"
-#: remote-curl.c:307
+#: remote-curl.c:304
#, c-format
msgid "%sinfo/refs not valid: is this a git repository?"
msgstr "„%sinfo/refs“ е неизползваемо, проверете дали е хранилище на git"
-#: remote-curl.c:408
+#: remote-curl.c:405
msgid "invalid server response; expected service, got flush packet"
msgstr ""
"неправилен отговор от сървъра: очакваше се услуга, а бе получен изчистващ "
"пакет „flush“"
-#: remote-curl.c:439
+#: remote-curl.c:436
#, c-format
msgid "invalid server response; got '%s'"
msgstr "неправилен отговор от сървъра, бе получено: „%s“"
-#: remote-curl.c:499
+#: remote-curl.c:496
#, c-format
msgid "repository '%s' not found"
msgstr "хранилището „%s“ липсва"
-#: remote-curl.c:503
+#: remote-curl.c:500
#, c-format
msgid "Authentication failed for '%s'"
msgstr "Неуспешна идентификация към „%s“"
-#: remote-curl.c:507
+#: remote-curl.c:504
+#, c-format
+msgid "unable to access '%s' with http.pinnedPubkey configuration: %s"
+msgstr "няма достъп до „%s“ със следната настройка на „http.pinnedPubkey“: %s"
+
+#: remote-curl.c:508
#, c-format
msgid "unable to access '%s': %s"
msgstr "няма достъп до „%s“: %s"
-#: remote-curl.c:513
+#: remote-curl.c:514
#, c-format
msgid "redirecting to %s"
msgstr "пренасочване към „%s“"
-#: remote-curl.c:644
+#: remote-curl.c:645
msgid "shouldn't have EOF when not gentle on EOF"
msgstr "получен е EOF, в режим без поддръжка за това"
-#: remote-curl.c:656
+#: remote-curl.c:657
msgid "remote server sent unexpected response end packet"
msgstr "отдалеченият сървър прати неочакван пакет за край на отговор"
@@ -25029,86 +25476,86 @@
"данните за POST не може да се прочетат наново, пробвайте да увеличите "
"настройката „http.postBuffer“"
-#: remote-curl.c:756
+#: remote-curl.c:755
#, c-format
msgid "remote-curl: bad line length character: %.4s"
msgstr "remote-curl: неправилeн знак за дължина на ред: %.4s"
-#: remote-curl.c:758
+#: remote-curl.c:757
msgid "remote-curl: unexpected response end packet"
msgstr "remote-curl: неочакван пакет за край на отговор"
-#: remote-curl.c:834
+#: remote-curl.c:833
#, c-format
msgid "RPC failed; %s"
msgstr "Неуспешно отдалечено извикване. %s"
-#: remote-curl.c:874
+#: remote-curl.c:873
msgid "cannot handle pushes this big"
msgstr "толкова големи изтласквания не може да се изпълнят"
-#: remote-curl.c:989
+#: remote-curl.c:986
#, c-format
msgid "cannot deflate request; zlib deflate error %d"
msgstr ""
"заявката не може да бъде декомпресирана, грешка от „zlib“ при "
"декомпресиране: %d"
-#: remote-curl.c:993
+#: remote-curl.c:990
#, c-format
msgid "cannot deflate request; zlib end error %d"
msgstr ""
"заявката не може да бъде декомпресирана; грешка от „zlib“ при завършване: %d<"
-#: remote-curl.c:1043
+#: remote-curl.c:1040
#, c-format
msgid "%d bytes of length header were received"
msgstr "получени са %d байта от заглавна част"
-#: remote-curl.c:1045
+#: remote-curl.c:1042
#, c-format
msgid "%d bytes of body are still expected"
msgstr "очакват се още %d байта от тялото на отговора"
-#: remote-curl.c:1134
+#: remote-curl.c:1131
msgid "dumb http transport does not support shallow capabilities"
msgstr "опростеният транспорт по http не поддържа плитки клиенти"
-#: remote-curl.c:1149
+#: remote-curl.c:1146
msgid "fetch failed."
msgstr "неуспешно доставяне."
-#: remote-curl.c:1195
+#: remote-curl.c:1192
msgid "cannot fetch by sha1 over smart http"
msgstr "умният вариант на http не може да доставя по SHA1"
-#: remote-curl.c:1239 remote-curl.c:1245
+#: remote-curl.c:1236 remote-curl.c:1242
#, c-format
msgid "protocol error: expected sha/ref, got '%s'"
msgstr "протоколна грешка: очаква се SHA1 или указател, а бе получено: „%s“"
-#: remote-curl.c:1257 remote-curl.c:1375
+#: remote-curl.c:1254 remote-curl.c:1372
#, c-format
msgid "http transport does not support %s"
msgstr "транспортът по http не поддържа „%s“"
-#: remote-curl.c:1293
+#: remote-curl.c:1290
msgid "git-http-push failed"
msgstr "неуспешно изпълнение на „git-http-push“"
-#: remote-curl.c:1481
+#: remote-curl.c:1478
msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
msgstr "remote-curl: употреба: git remote-curl ХРАНИЛИЩЕ [АДРЕС]"
-#: remote-curl.c:1513
+#: remote-curl.c:1510
msgid "remote-curl: error reading command stream from git"
msgstr "remote-curl: грешка при изчитането на потока команди от git"
-#: remote-curl.c:1520
+#: remote-curl.c:1517
msgid "remote-curl: fetch attempted without a local repo"
msgstr "remote-curl: опит за доставяне без локално хранилище"
-#: remote-curl.c:1561
+#: remote-curl.c:1558
#, c-format
msgid "remote-curl: unknown command '%s' from git"
msgstr "remote-curl: непозната команда „%s“ от git"
@@ -25129,46 +25576,46 @@
msgid "object filtering"
msgstr "филтриране по вид на обекта"
-#: parse-options.h:184
+#: parse-options.h:183
msgid "expiry-date"
msgstr "период на валидност/запазване"
-#: parse-options.h:198
+#: parse-options.h:197
msgid "no-op (backward compatibility)"
msgstr "нулева операция (за съвместимост с предишни версии)"
-#: parse-options.h:310
+#: parse-options.h:308
msgid "be more verbose"
msgstr "повече подробности"
-#: parse-options.h:312
+#: parse-options.h:310
msgid "be more quiet"
msgstr "по-малко подробности"
-#: parse-options.h:318
+#: parse-options.h:316
msgid "use <n> digits to display object names"
msgstr "да се показват такъв БРОЙ цифри от имената на обектите"
-#: parse-options.h:337
+#: parse-options.h:335
msgid "how to strip spaces and #comments from message"
msgstr "кои празни знаци и #коментари да се махат от съобщенията"
-#: parse-options.h:338
+#: parse-options.h:336
msgid "read pathspec from file"
msgstr "изчитане на пътищата от ФАЙЛ"
-#: parse-options.h:339
+#: parse-options.h:337
msgid ""
"with --pathspec-from-file, pathspec elements are separated with NUL character"
msgstr ""
"при ползването на „--pathspec-from-file“, пътищата са разделени с нулевия "
"знак „NUL“"
-#: ref-filter.h:99
+#: ref-filter.h:101
msgid "key"
msgstr "КЛЮЧ"
-#: ref-filter.h:99
+#: ref-filter.h:101
msgid "field name to sort on"
msgstr "име на полето, по което да е подредбата"
@@ -25871,42 +26318,6 @@
msgid "An overview of recommended workflows with Git"
msgstr "Общ преглед на препоръчваните начини за работа с Git"
-#: git-bisect.sh:68
-msgid "bisect run failed: no command provided."
-msgstr "неуспешно двоично търсене, не е зададена команда."
-
-#: git-bisect.sh:73
-#, sh-format
-msgid "running $command"
-msgstr "изпълнение на командата „${command}“"
-
-#: git-bisect.sh:80
-#, sh-format
-msgid ""
-"bisect run failed:\n"
-"exit code $res from '$command' is < 0 or >= 128"
-msgstr ""
-"неуспешно двоично търсене:\n"
-"изходният код от командата „${command}“ е ${res} — това е извън интервала "
-"[0, 128)"
-
-#: git-bisect.sh:105
-msgid "bisect run cannot continue any more"
-msgstr "двоичното търсене не може да продължи"
-
-#: git-bisect.sh:111
-#, sh-format
-msgid ""
-"bisect run failed:\n"
-"'bisect-state $state' exited with error code $res"
-msgstr ""
-"неуспешно двоично търсене:\n"
-"функцията „bisect-state ${state}“ завърши с код за грешка ${res}"
-
-#: git-bisect.sh:118
-msgid "bisect run success"
-msgstr "успешно двоично търсене"
-
#: git-merge-octopus.sh:46
msgid ""
"Error: Your local changes to the following files would be overwritten by "
@@ -25945,99 +26356,17 @@
msgid "Simple merge did not work, trying automatic merge."
msgstr "Простото сливане не сработи, пробва се автоматично сливане."
-#: git-submodule.sh:179
-msgid "Relative path can only be used from the toplevel of the working tree"
-msgstr ""
-"Относителен път може да се ползва само от основната директория на работното "
-"дърво"
-
-#: git-submodule.sh:189
-#, sh-format
-msgid "repo URL: '$repo' must be absolute or begin with ./|../"
-msgstr ""
-"адрес на хранилище: „${repo}“ трябва или да е абсолютен, или да започва с "
-"„./“ или „../“"
-
-#: git-submodule.sh:208
-#, sh-format
-msgid "'$sm_path' already exists in the index"
-msgstr "„${sm_path}“ вече съществува в индекса"
-
-#: git-submodule.sh:211
-#, sh-format
-msgid "'$sm_path' already exists in the index and is not a submodule"
-msgstr "„${sm_path}“ вече съществува в индекса и не е подмодул"
-
-#: git-submodule.sh:218
-#, sh-format
-msgid "'$sm_path' does not have a commit checked out"
-msgstr "в „${sm_path}“ не е изтеглено подаване"
-
-#: git-submodule.sh:249
-#, sh-format
-msgid "Adding existing repo at '$sm_path' to the index"
-msgstr "Добавяне на съществуващото хранилище в „${sm_path}“ към индекса"
-
-#: git-submodule.sh:251
-#, sh-format
-msgid "'$sm_path' already exists and is not a valid git repo"
-msgstr "„${sm_path}“ съществува, а не е хранилище на Git"
-
-#: git-submodule.sh:259
-#, sh-format
-msgid "A git directory for '$sm_name' is found locally with remote(s):"
-msgstr ""
-"Открита е локална директория на Git — „${sm_name}“, която сочи към "
-"отдалечените хранилища:"
-
-#: git-submodule.sh:261
-#, sh-format
-msgid ""
-"If you want to reuse this local git directory instead of cloning again from\n"
-" $realrepo\n"
-"use the '--force' option. If the local git directory is not the correct "
-"repo\n"
-"or you are unsure what this means choose another name with the '--name' "
-"option."
-msgstr ""
-"Ако искате да преизползвате тази директория на git, вместо да клонирате "
-"отново\n"
-" $realrepo\n"
-"използвайте опцията „--force“. Ако локалната директория на git не е за\n"
-"правилното хранилище или ако не знаете какво означава това, използвайте\n"
-"друго име като аргумент към опцията „--name“."
-
-#: git-submodule.sh:267
-#, sh-format
-msgid "Reactivating local git directory for submodule '$sm_name'."
-msgstr "Активиране на локалното хранилище за подмодула „${sm_name}“ наново."
-
-#: git-submodule.sh:279
-#, sh-format
-msgid "Unable to checkout submodule '$sm_path'"
-msgstr "Подмодулът „${sm_path}“ не може да бъде изтеглен"
-
-#: git-submodule.sh:284
-#, sh-format
-msgid "Failed to add submodule '$sm_path'"
-msgstr "Неуспешно добавяне на подмодула „${sm_path}“"
-
-#: git-submodule.sh:293
-#, sh-format
-msgid "Failed to register submodule '$sm_path'"
-msgstr "Неуспешно регистриране на подмодула „${sm_path}“"
-
-#: git-submodule.sh:568
+#: git-submodule.sh:401
#, sh-format
msgid "Unable to find current revision in submodule path '$displaypath'"
msgstr "Текущата версия за подмодула в „${displaypath}“ липсва"
-#: git-submodule.sh:578
+#: git-submodule.sh:411
#, sh-format
msgid "Unable to fetch in submodule path '$sm_path'"
msgstr "Неуспешно доставяне в пътя към подмодул „${sm_path}“"
-#: git-submodule.sh:583
+#: git-submodule.sh:416
#, sh-format
msgid ""
"Unable to find current ${remote_name}/${branch} revision in submodule path "
@@ -26046,409 +26375,12 @@
"Текущата версия „${remote_name}/${branch}“ в пътя към подмодул „${sm_path}“ "
"липсва"
-#: git-submodule.sh:601
-#, sh-format
-msgid ""
-"Unable to fetch in submodule path '$displaypath'; trying to directly fetch "
-"$sha1:"
-msgstr ""
-"Неуспешно доставяне в пътя към подмодул „${displaypath}“, опит за директно "
-"доставяне на „${sha1}“"
-
-#: git-submodule.sh:607
-#, sh-format
-msgid ""
-"Fetched in submodule path '$displaypath', but it did not contain $sha1. "
-"Direct fetching of that commit failed."
-msgstr ""
-"Подмодулът в пътя „$displaypath“ е доставен, но не съдържа обекта със сума\n"
-"„${sha1}“. Директното доставяне на това подаване е неуспешно."
-
-#: git-submodule.sh:614
-#, sh-format
-msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
-msgstr ""
-"Неуспешно изтегляне на версия „${sha1}“ в пътя към подмодул „${displaypath}“'"
-
-#: git-submodule.sh:615
-#, sh-format
-msgid "Submodule path '$displaypath': checked out '$sha1'"
-msgstr "Път към подмодул „${displaypath}“: изтеглена е версия „${sha1}“"
-
-#: git-submodule.sh:619
-#, sh-format
-msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
-msgstr ""
-"Неуспешно пребазиране на версия „${sha1}“ в пътя към подмодул "
-"„${displaypath}“"
-
-#: git-submodule.sh:620
-#, sh-format
-msgid "Submodule path '$displaypath': rebased into '$sha1'"
-msgstr "Път към подмодул „${displaypath}“: пребазиране върху версия „${sha1}“"
-
-#: git-submodule.sh:625
-#, sh-format
-msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
-msgstr ""
-"Неуспешно сливане на версия „${sha1}“ в пътя към подмодул „${displaypath}“"
-
-#: git-submodule.sh:626
-#, sh-format
-msgid "Submodule path '$displaypath': merged in '$sha1'"
-msgstr "Път към подмодул „${displaypath}“: сливане с версия „${sha1}“"
-
-#: git-submodule.sh:631
-#, sh-format
-msgid "Execution of '$command $sha1' failed in submodule path '$displaypath'"
-msgstr ""
-"Неуспешно изпълнение на командата „${command} ${sha1}“ в пътя към подмодул "
-"„${displaypath}“"
-
-#: git-submodule.sh:632
-#, sh-format
-msgid "Submodule path '$displaypath': '$command $sha1'"
-msgstr "Път към подмодул „${displaypath}“: „${command} ${sha1}“"
-
-#: git-submodule.sh:663
+#: git-submodule.sh:464
#, sh-format
msgid "Failed to recurse into submodule path '$displaypath'"
msgstr ""
"Неуспешна обработка на поддиректориите в пътя към подмодул „${displaypath}“"
-#: git-rebase--preserve-merges.sh:109
-msgid "Applied autostash."
-msgstr "Автоматично скатаното е приложено."
-
-#: git-rebase--preserve-merges.sh:112
-#, sh-format
-msgid "Cannot store $stash_sha1"
-msgstr "„$stash_sha1“ не може да бъде запазен"
-
-#: git-rebase--preserve-merges.sh:113
-msgid ""
-"Applying autostash resulted in conflicts.\n"
-"Your changes are safe in the stash.\n"
-"You can run \"git stash pop\" or \"git stash drop\" at any time.\n"
-msgstr ""
-"Прилагането на автоматично скатаното доведе до конфликти. Промените ви са\n"
-"надеждно скатани. Може да пробвате да ги приложите чрез „git stash pop“\n"
-"или да ги изхвърлите чрез „git stash drop“, когато поискате.\n"
-
-#: git-rebase--preserve-merges.sh:191
-#, sh-format
-msgid "Rebasing ($new_count/$total)"
-msgstr "Пребазиране ($new_count/$total)"
-
-#: git-rebase--preserve-merges.sh:197
-msgid ""
-"\n"
-"Commands:\n"
-"p, pick <commit> = use commit\n"
-"r, reword <commit> = use commit, but edit the commit message\n"
-"e, edit <commit> = use commit, but stop for amending\n"
-"s, squash <commit> = use commit, but meld into previous commit\n"
-"f, fixup <commit> = like \"squash\", but discard this commit's log message\n"
-"x, exec <commit> = run command (the rest of the line) using shell\n"
-"d, drop <commit> = remove commit\n"
-"l, label <label> = label current HEAD with a name\n"
-"t, reset <label> = reset HEAD to a label\n"
-"m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]\n"
-". create a merge commit using the original merge commit's\n"
-". message (or the oneline, if no original merge commit was\n"
-". specified). Use -c <commit> to reword the commit message.\n"
-"\n"
-"These lines can be re-ordered; they are executed from top to bottom.\n"
-msgstr ""
-"\n"
-"Команди:\n"
-" p, pick ПОДАВАНЕ — прилагане на подаването\n"
-" r, reword ПОДАВАНЕ — прилагане на подаването, но промяна на съобщението му\n"
-" e, edit ПОДАВАНЕ — прилагане на подаването и спиране при него за още "
-"промени\n"
-" s, squash ПОДАВАНЕ — вкарване на подаването в предходното му\n"
-" f, fixup ПОДАВАНЕ — вкарване на подаването в предходното му, без смяна на\n"
-" съобщението\n"
-" x, exec ПОДАВАНЕ — изпълнение на команда към обвивката: останалата част "
-"на\n"
-" реда\n"
-" d, drop ПОДАВАНЕ — прескачане на подаването\n"
-" l, label ЕТИКЕТ — задаване на етикет на указаното от HEAD\n"
-" t, reset ЕТИКЕТ — зануляване на HEAD към ЕТИКЕТа\n"
-" m, merge [-C ПОДАВАНЕ | -c ПОДАВАНЕ] ЕТИКЕТ [# ЕДИН_РЕД]\n"
-" — създаване на подаване със сливане със съобщението от\n"
-" първоначалното подаване (или съобщението от ЕДИН_РЕД,\n"
-" ако не е зададено подаване със сливане. С опцията\n"
-" „-c ПОДАВАНЕ“, може да смените съобщението.\n"
-"\n"
-"Може да променяте последователността на редовете — те се изпълняват\n"
-"последователно отгоре-надолу.\n"
-
-#: git-rebase--preserve-merges.sh:260
-#, sh-format
-msgid ""
-"You can amend the commit now, with\n"
-"\n"
-"\tgit commit --amend $gpg_sign_opt_quoted\n"
-"\n"
-"Once you are satisfied with your changes, run\n"
-"\n"
-"\tgit rebase --continue"
-msgstr ""
-"Може да промените подаването с командата:\n"
-"\n"
-" git commit --amend $gpg_sign_opt_quoted\n"
-"\n"
-"След като привършите, продължете с командата:\n"
-"\n"
-" git rebase --continue"
-
-#: git-rebase--preserve-merges.sh:285
-#, sh-format
-msgid "$sha1: not a commit that can be picked"
-msgstr "$sha1: това не е подаване, което може да бъде отбрано"
-
-#: git-rebase--preserve-merges.sh:324
-#, sh-format
-msgid "Invalid commit name: $sha1"
-msgstr "Неправилно име на подаване: „$sha1“"
-
-#: git-rebase--preserve-merges.sh:354
-msgid "Cannot write current commit's replacement sha1"
-msgstr ""
-"Заместващата сума по SHA1 за текущото подаване не може да бъде запазена"
-
-#: git-rebase--preserve-merges.sh:405
-#, sh-format
-msgid "Fast-forward to $sha1"
-msgstr "Превъртане до „$sha1“"
-
-#: git-rebase--preserve-merges.sh:407
-#, sh-format
-msgid "Cannot fast-forward to $sha1"
-msgstr "Не може да се превърти до „$sha1“"
-
-#: git-rebase--preserve-merges.sh:416
-#, sh-format
-msgid "Cannot move HEAD to $first_parent"
-msgstr "Указателят „HEAD“ не може да се насочи към „$first_parent“"
-
-#: git-rebase--preserve-merges.sh:421
-#, sh-format
-msgid "Refusing to squash a merge: $sha1"
-msgstr "Подаването не може да се смачка: „$sha1“"
-
-#: git-rebase--preserve-merges.sh:439
-#, sh-format
-msgid "Error redoing merge $sha1"
-msgstr "Грешка при повтарянето на сливането на „$sha1“"
-
-#: git-rebase--preserve-merges.sh:448
-#, sh-format
-msgid "Could not pick $sha1"
-msgstr "„$sha1“ не може да се отбере."
-
-#: git-rebase--preserve-merges.sh:457
-#, sh-format
-msgid "This is the commit message #${n}:"
-msgstr "Това е съобщение при подаване №${n}:"
-
-#: git-rebase--preserve-merges.sh:462
-#, sh-format
-msgid "The commit message #${n} will be skipped:"
-msgstr "Съобщение при подаване №${n} ще бъде прескочено."
-
-#: git-rebase--preserve-merges.sh:473
-#, sh-format
-msgid "This is a combination of $count commit."
-msgid_plural "This is a combination of $count commits."
-msgstr[0] "Това е обединение от $count подаване."
-msgstr[1] "Това е обединение от $count подавания."
-
-#: git-rebase--preserve-merges.sh:482
-#, sh-format
-msgid "Cannot write $fixup_msg"
-msgstr "Новото съобщение при подаване „$fixup_msg“ не може да бъде запазено"
-
-#: git-rebase--preserve-merges.sh:485
-msgid "This is a combination of 2 commits."
-msgstr "Това е обединение от 2 подавания"
-
-#: git-rebase--preserve-merges.sh:526 git-rebase--preserve-merges.sh:569
-#: git-rebase--preserve-merges.sh:572
-#, sh-format
-msgid "Could not apply $sha1... $rest"
-msgstr "Не може да се подаде $sha1… $rest"
-
-#: git-rebase--preserve-merges.sh:601
-#, sh-format
-msgid ""
-"Could not amend commit after successfully picking $sha1... $rest\n"
-"This is most likely due to an empty commit message, or the pre-commit hook\n"
-"failed. If the pre-commit hook failed, you may need to resolve the issue "
-"before\n"
-"you are able to reword the commit."
-msgstr ""
-"Подаването не може за де промени след успешното отбиране на „$sha1…“ $rest.\n"
-"Най-вероятните причини са празно съобщение при подаване или неуспешно "
-"изпълнение\n"
-"на куката преди подаване. Ако имате проблем с куката, ще трябва да го "
-"коригирате,\n"
-"преди да може да промените съобщението на подаването."
-
-#: git-rebase--preserve-merges.sh:616
-#, sh-format
-msgid "Stopped at $sha1_abbrev... $rest"
-msgstr "Спиране при „$sha1_abbrev…“ $rest"
-
-#: git-rebase--preserve-merges.sh:631
-#, sh-format
-msgid "Cannot '$squash_style' without a previous commit"
-msgstr "Без предходно подаване не може да се изпълни „$squash_style“"
-
-#: git-rebase--preserve-merges.sh:673
-#, sh-format
-msgid "Executing: $rest"
-msgstr "В момента се изпълнява: $rest"
-
-#: git-rebase--preserve-merges.sh:681
-#, sh-format
-msgid "Execution failed: $rest"
-msgstr "Неуспешно изпълнение: $rest"
-
-#: git-rebase--preserve-merges.sh:683
-msgid "and made changes to the index and/or the working tree"
-msgstr "и промени индекса и/или работното дърво"
-
-#: git-rebase--preserve-merges.sh:685
-msgid ""
-"You can fix the problem, and then run\n"
-"\n"
-"\tgit rebase --continue"
-msgstr ""
-"Може да коригирате проблема, след което изпълнете:\n"
-"\n"
-" git rebase --continue"
-
-#. TRANSLATORS: after these lines is a command to be issued by the user
-#: git-rebase--preserve-merges.sh:698
-#, sh-format
-msgid ""
-"Execution succeeded: $rest\n"
-"but left changes to the index and/or the working tree\n"
-"Commit or stash your changes, and then run\n"
-"\n"
-"\tgit rebase --continue"
-msgstr ""
-"Успешно изпълнение: $rest\n"
-"Остават още промени в индекса или работното дърво.\n"
-"Трябва да ги подадете или скатаете и след това изпълнете:\n"
-"\n"
-" git rebase --continue"
-
-#: git-rebase--preserve-merges.sh:709
-#, sh-format
-msgid "Unknown command: $command $sha1 $rest"
-msgstr "Непозната команда: $command $sha1 $rest"
-
-#: git-rebase--preserve-merges.sh:710
-msgid "Please fix this using 'git rebase --edit-todo'."
-msgstr "Коригирайте това чрез „git rebase --edit-todo“."
-
-#: git-rebase--preserve-merges.sh:745
-#, sh-format
-msgid "Successfully rebased and updated $head_name."
-msgstr "Успешно пребазиране и обновяване на „$head_name“."
-
-#: git-rebase--preserve-merges.sh:802
-msgid "Could not remove CHERRY_PICK_HEAD"
-msgstr "Указателят „CHERRY_PICK_HEAD“ не може да бъде изтрит"
-
-#: git-rebase--preserve-merges.sh:807
-#, sh-format
-msgid ""
-"You have staged changes in your working tree.\n"
-"If these changes are meant to be\n"
-"squashed into the previous commit, run:\n"
-"\n"
-" git commit --amend $gpg_sign_opt_quoted\n"
-"\n"
-"If they are meant to go into a new commit, run:\n"
-"\n"
-" git commit $gpg_sign_opt_quoted\n"
-"\n"
-"In both cases, once you're done, continue with:\n"
-"\n"
-" git rebase --continue\n"
-msgstr ""
-"В индекса има промени. Ако искате да ги вкарате в\n"
-"предишното подаване, изпълнете:\n"
-"\n"
-" git commit --amend $gpg_sign_opt_quoted\n"
-"\n"
-"Ако искате да създадете ново подаване, изпълнете:\n"
-"\n"
-" git commit $gpg_sign_opt_quoted\n"
-"\n"
-"И в двата случая след като привършите, продължете с командата:\n"
-"\n"
-" git rebase --continue\n"
-
-#: git-rebase--preserve-merges.sh:824
-msgid "Error trying to find the author identity to amend commit"
-msgstr "Не може да бъде открит автор за поправянето на подаването"
-
-#: git-rebase--preserve-merges.sh:829
-msgid ""
-"You have uncommitted changes in your working tree. Please commit them\n"
-"first and then run 'git rebase --continue' again."
-msgstr ""
-"В работното дърво има неподадени промени. Първо ги подайте, а след това\n"
-"отново изпълнете „git rebase --continue“."
-
-#: git-rebase--preserve-merges.sh:834 git-rebase--preserve-merges.sh:838
-msgid "Could not commit staged changes."
-msgstr "Промените в индекса не може да бъдат подадени."
-
-#: git-rebase--preserve-merges.sh:869 git-rebase--preserve-merges.sh:955
-msgid "Could not execute editor"
-msgstr "Текстовият редактор не може да бъде стартиран"
-
-#: git-rebase--preserve-merges.sh:890
-#, sh-format
-msgid "Could not checkout $switch_to"
-msgstr "„$switch_to“ не може да се изтегли"
-
-#: git-rebase--preserve-merges.sh:897
-msgid "No HEAD?"
-msgstr "Липсва указател „HEAD“"
-
-#: git-rebase--preserve-merges.sh:898
-#, sh-format
-msgid "Could not create temporary $state_dir"
-msgstr "Временната директория „$state_dir“ не може да бъде създадена"
-
-#: git-rebase--preserve-merges.sh:901
-msgid "Could not mark as interactive"
-msgstr "Пребазирането не е интерактивно"
-
-#: git-rebase--preserve-merges.sh:933
-#, sh-format
-msgid "Rebase $shortrevisions onto $shortonto ($todocount command)"
-msgid_plural "Rebase $shortrevisions onto $shortonto ($todocount commands)"
-msgstr[0] ""
-"Пребазиране на $shortrevisions върху $shortonto ($todocount команда)"
-msgstr[1] ""
-"Пребазиране на $shortrevisions върху $shortonto ($todocount команди)"
-
-#: git-rebase--preserve-merges.sh:945
-msgid "Note that empty commits are commented out"
-msgstr "Празните подавания са коментирани"
-
-#: git-rebase--preserve-merges.sh:987 git-rebase--preserve-merges.sh:992
-msgid "Could not init rewritten commits"
-msgstr "Списъкът с презаписаните подавания не може да бъде създаден"
-
#: git-sh-setup.sh:89 git-sh-setup.sh:94
#, sh-format
msgid "usage: $dashless $USAGE"
@@ -26467,52 +26399,32 @@
"ФАТАЛНА ГРЕШКА: „$program_name“ не може да се ползва без работно дърво."
#: git-sh-setup.sh:221
-msgid "Cannot rebase: You have unstaged changes."
-msgstr "Не може да пребазирате, защото има промени, които не са в индекса."
-
-#: git-sh-setup.sh:224
msgid "Cannot rewrite branches: You have unstaged changes."
msgstr ""
"Не може да презапишете клоните, защото има промени, които не са в индекса."
-#: git-sh-setup.sh:227
-msgid "Cannot pull with rebase: You have unstaged changes."
-msgstr ""
-"Не може да издърпвате при това пребазиране, защото има промени, които не са "
-"в индекса."
-
-#: git-sh-setup.sh:230
+#: git-sh-setup.sh:224
#, sh-format
msgid "Cannot $action: You have unstaged changes."
msgstr ""
"Не може да изпълните „$action“, защото има промени, които не са в индекса."
-#: git-sh-setup.sh:243
-msgid "Cannot rebase: Your index contains uncommitted changes."
-msgstr "Не може да пребазирате, защото в индекса има неподадени промени."
-
-#: git-sh-setup.sh:246
-msgid "Cannot pull with rebase: Your index contains uncommitted changes."
-msgstr ""
-"Не може да издърпвате при това пребазиране, защото в индекса има неподадени "
-"промени."
-
-#: git-sh-setup.sh:249
+#: git-sh-setup.sh:235
#, sh-format
msgid "Cannot $action: Your index contains uncommitted changes."
msgstr ""
"Не може да изпълните „$action“, защото в индекса има неподадени промени."
-#: git-sh-setup.sh:253
+#: git-sh-setup.sh:237
msgid "Additionally, your index contains uncommitted changes."
msgstr "Освен това в индекса има неподадени промени."
-#: git-sh-setup.sh:373
+#: git-sh-setup.sh:357
msgid "You need to run this command from the toplevel of the working tree."
msgstr ""
"Тази команда трябва да се изпълни от основната директория на работното дърво"
-#: git-sh-setup.sh:378
+#: git-sh-setup.sh:362
msgid "Unable to determine absolute path of git directory"
msgstr "Абсолютният път на работното дърво не може да се определи"
@@ -26860,7 +26772,7 @@
#: git-add--interactive.perl:1866
#, perl-format
msgid "unknown --patch mode: %s"
-msgstr "неизвестна стратегия за прилагане на кръпка: „%s“"
+msgstr "неизвестна стратегия за прилагане на кръпка към „--patch“: „%s“"
#: git-add--interactive.perl:1872 git-add--interactive.perl:1878
#, perl-format
@@ -27181,7 +27093,7 @@
msgid "Result: OK\n"
msgstr "Резултат: успех\n"
-#: git-send-email.perl:1709
+#: git-send-email.perl:1708
#, perl-format
msgid "can't open file %s"
msgstr "файлът „%s“ не може да бъде отворен"
@@ -27206,30 +27118,30 @@
msgid "(body) Adding cc: %s from line '%s'\n"
msgstr "(тяло) Добавяне на „як: %s“ от ред „%s“\n"
-#: git-send-email.perl:1965
+#: git-send-email.perl:1973
#, perl-format
msgid "(%s) Could not execute '%s'"
msgstr "(%s) Не може да бъде се изпълни „%s“"
-#: git-send-email.perl:1972
+#: git-send-email.perl:1980
#, perl-format
msgid "(%s) Adding %s: %s from: '%s'\n"
msgstr "(%s) Добавяне на „%s: %s“ от: „%s“\n"
-#: git-send-email.perl:1976
+#: git-send-email.perl:1984
#, perl-format
msgid "(%s) failed to close pipe to '%s'"
msgstr "(%s) програмният канал не може да се затвори за изпълнението на „%s“"
-#: git-send-email.perl:2006
+#: git-send-email.perl:2014
msgid "cannot send message as 7bit"
msgstr "съобщението не може да се изпрати чрез 7 битови знаци"
-#: git-send-email.perl:2014
+#: git-send-email.perl:2022
msgid "invalid transfer encoding"
msgstr "неправилно кодиране за пренос"
-#: git-send-email.perl:2051
+#: git-send-email.perl:2059
#, perl-format
msgid ""
"fatal: %s: rejected by sendemail-validate hook\n"
@@ -27240,12 +27152,12 @@
"%s\n"
"ПРЕДУПРЕЖДЕНИЕ: не са пратени никакви кръпки\n"
-#: git-send-email.perl:2061 git-send-email.perl:2114 git-send-email.perl:2124
+#: git-send-email.perl:2069 git-send-email.perl:2122 git-send-email.perl:2132
#, perl-format
msgid "unable to open %s: %s\n"
msgstr "„%s“ не може да се отвори: %s\n"
-#: git-send-email.perl:2064
+#: git-send-email.perl:2072
#, perl-format
msgid ""
"fatal: %s:%d is longer than 998 characters\n"
@@ -27254,13 +27166,13 @@
"ФАТАЛНА ГРЕШКА: %s: %d е повече от 998 знака\n"
"ПРЕДУПРЕЖДЕНИЕ: не са пратени никакви кръпки\n"
-#: git-send-email.perl:2082
+#: git-send-email.perl:2090
#, perl-format
msgid "Skipping %s with backup suffix '%s'.\n"
msgstr "„%s“ се пропуска, защото е с разширение за архивен файл: „%s“.\n"
#. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:2086
+#: git-send-email.perl:2094
#, perl-format
msgid "Do you really want to send %s? [y|N]: "
msgstr "Наистина ли искате да изпратите „%s“? [y|N]: "
diff --git a/po/ca.po b/po/ca.po
index e6e77f3..556b028 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -22,6 +22,7 @@
# hook | lligam
# hunk | tros
# not supported | no està admès
+# push | pujar
# repository | repositori
# setting | paràmetre
# shallow | superficial
@@ -56,9 +57,9 @@
msgstr ""
"Project-Id-Version: Git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2021-05-17 16:02+0800\n"
+"POT-Creation-Date: 2021-10-30 09:36+0800\n"
"PO-Revision-Date: 2021-05-14 10:22-0600\n"
-"Last-Translator: Alex Henrie <alexhenrie24@gmail.com>\n"
+"Last-Translator: Jordi Mas i Hernàndez <jmas@softcatala.org>\n"
"Language-Team: Catalan\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
@@ -67,212 +68,213 @@
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.3.1\n"
-#: add-interactive.c:376
+#: add-interactive.c:380
#, c-format
msgid "Huh (%s)?"
msgstr "Perdó (%s)?"
-#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3493
-#: sequencer.c:3944 sequencer.c:4099 builtin/rebase.c:1528
-#: builtin/rebase.c:1953
+#: add-interactive.c:533 add-interactive.c:834 reset.c:65 sequencer.c:3510
+#: sequencer.c:3977 sequencer.c:4139 builtin/rebase.c:1233
+#: builtin/rebase.c:1642
msgid "could not read index"
msgstr "no s'ha pogut llegir l'índex"
-#: add-interactive.c:584 git-add--interactive.perl:269
+#: add-interactive.c:588 git-add--interactive.perl:269
#: git-add--interactive.perl:294
msgid "binary"
msgstr "binari"
-#: add-interactive.c:642 git-add--interactive.perl:278
+#: add-interactive.c:646 git-add--interactive.perl:278
#: git-add--interactive.perl:332
msgid "nothing"
msgstr "res"
-#: add-interactive.c:643 git-add--interactive.perl:314
+#: add-interactive.c:647 git-add--interactive.perl:314
#: git-add--interactive.perl:329
msgid "unchanged"
msgstr "sense canvis"
-#: add-interactive.c:680 git-add--interactive.perl:641
+#: add-interactive.c:684 git-add--interactive.perl:641
msgid "Update"
msgstr "Actualitza"
-#: add-interactive.c:697 add-interactive.c:885
+#: add-interactive.c:701 add-interactive.c:889
#, c-format
msgid "could not stage '%s'"
msgstr "no s'ha pogut fer «stage» «%s»"
-#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3687
+#: add-interactive.c:707 add-interactive.c:896 reset.c:89 sequencer.c:3716
msgid "could not write index"
msgstr "no s'ha pogut escriure l'índex"
-#: add-interactive.c:706 git-add--interactive.perl:626
+#: add-interactive.c:710 git-add--interactive.perl:626
#, c-format, perl-format
msgid "updated %d path\n"
msgid_plural "updated %d paths\n"
msgstr[0] "actualitzat %d camí\n"
msgstr[1] "actualitzats %d camins\n"
-#: add-interactive.c:724 git-add--interactive.perl:676
+#: add-interactive.c:728 git-add--interactive.perl:676
#, c-format, perl-format
msgid "note: %s is untracked now.\n"
msgstr "nota: %s està ara sense seguiment.\n"
-#: add-interactive.c:729 apply.c:4127 builtin/checkout.c:298
-#: builtin/reset.c:145
+#: add-interactive.c:733 apply.c:4149 builtin/checkout.c:298
+#: builtin/reset.c:151
#, c-format
msgid "make_cache_entry failed for path '%s'"
msgstr "make_cache_entry ha fallat per al camí «%s»"
-#: add-interactive.c:759 git-add--interactive.perl:653
+#: add-interactive.c:763 git-add--interactive.perl:653
msgid "Revert"
msgstr "Reverteix"
-#: add-interactive.c:775
+#: add-interactive.c:779
msgid "Could not parse HEAD^{tree}"
msgstr "No s'ha pogut analitzar HEAD^{tree}"
-#: add-interactive.c:813 git-add--interactive.perl:629
+#: add-interactive.c:817 git-add--interactive.perl:629
#, c-format, perl-format
msgid "reverted %d path\n"
msgid_plural "reverted %d paths\n"
msgstr[0] "revertit %d camí\n"
msgstr[1] "revertits %d camins\n"
-#: add-interactive.c:864 git-add--interactive.perl:693
+#: add-interactive.c:868 git-add--interactive.perl:693
#, c-format
msgid "No untracked files.\n"
msgstr "Sense fitxers no seguits.\n"
-#: add-interactive.c:868 git-add--interactive.perl:687
+#: add-interactive.c:872 git-add--interactive.perl:687
msgid "Add untracked"
msgstr "Afegeix sense seguiment"
-#: add-interactive.c:895 git-add--interactive.perl:623
+#: add-interactive.c:899 git-add--interactive.perl:623
#, c-format, perl-format
msgid "added %d path\n"
msgid_plural "added %d paths\n"
msgstr[0] "afegit %d camí\n"
msgstr[1] "afegits %d camins\n"
-#: add-interactive.c:925
+#: add-interactive.c:929
#, c-format
msgid "ignoring unmerged: %s"
msgstr "s'està ignorant allò no fusionat: %s"
-#: add-interactive.c:937 add-patch.c:1751 git-add--interactive.perl:1369
+#: add-interactive.c:941 add-patch.c:1752 git-add--interactive.perl:1369
#, c-format
msgid "Only binary files changed.\n"
msgstr "Només s'han canviat els fitxers binaris.\n"
-#: add-interactive.c:939 add-patch.c:1749 git-add--interactive.perl:1371
+#: add-interactive.c:943 add-patch.c:1750 git-add--interactive.perl:1371
#, c-format
msgid "No changes.\n"
msgstr "Sense canvis.\n"
-#: add-interactive.c:943 git-add--interactive.perl:1379
+#: add-interactive.c:947 git-add--interactive.perl:1379
msgid "Patch update"
msgstr "Actualització del pedaç"
-#: add-interactive.c:982 git-add--interactive.perl:1792
+#: add-interactive.c:986 git-add--interactive.perl:1792
msgid "Review diff"
msgstr "Reviseu les diferències"
-#: add-interactive.c:1010
+#: add-interactive.c:1014
msgid "show paths with changes"
msgstr "mostra els camins amb canvis"
-#: add-interactive.c:1012
+#: add-interactive.c:1016
msgid "add working tree state to the staged set of changes"
msgstr "afegeix l'estat de l'arbre de treball al conjunt de canvis «staged»"
-#: add-interactive.c:1014
+#: add-interactive.c:1018
msgid "revert staged set of changes back to the HEAD version"
msgstr "reverteix el conjunt de canvis «staged» a la versió HEAD"
-#: add-interactive.c:1016
+#: add-interactive.c:1020
msgid "pick hunks and update selectively"
msgstr "selecciona els trossos i actualitza selectivament"
-#: add-interactive.c:1018
+#: add-interactive.c:1022
msgid "view diff between HEAD and index"
msgstr "visualitza les diferències entre HEAD i l'índex"
-#: add-interactive.c:1020
+#: add-interactive.c:1024
msgid "add contents of untracked files to the staged set of changes"
msgstr "afegeix contingut de fitxers no seguits al conjunt de canvis «staged»"
-#: add-interactive.c:1028 add-interactive.c:1077
+#: add-interactive.c:1032 add-interactive.c:1081
msgid "Prompt help:"
msgstr "Mostra ajuda:"
-#: add-interactive.c:1030
+#: add-interactive.c:1034
msgid "select a single item"
msgstr "seleccioneu un únic ítem"
-#: add-interactive.c:1032
+#: add-interactive.c:1036
msgid "select a range of items"
msgstr "seleccioneu un rang d'ítems"
-#: add-interactive.c:1034
+#: add-interactive.c:1038
msgid "select multiple ranges"
msgstr "seleccioneu rangs múltiples"
-#: add-interactive.c:1036 add-interactive.c:1081
+#: add-interactive.c:1040 add-interactive.c:1085
msgid "select item based on unique prefix"
msgstr "seleccioneu un ítem basant-se en un prefix únic"
-#: add-interactive.c:1038
+#: add-interactive.c:1042
msgid "unselect specified items"
msgstr "desselecciona els ítems especificats"
-#: add-interactive.c:1040
+#: add-interactive.c:1044
msgid "choose all items"
msgstr "trieu tots els ítems"
-#: add-interactive.c:1042
+#: add-interactive.c:1046
msgid "(empty) finish selecting"
msgstr "(buit) finalitza la selecció"
-#: add-interactive.c:1079
+#: add-interactive.c:1083
msgid "select a numbered item"
msgstr "seleccioneu un ítem numerat"
-#: add-interactive.c:1083
+#: add-interactive.c:1087
msgid "(empty) select nothing"
msgstr "(buit) no seleccionis res"
-#: add-interactive.c:1091 builtin/clean.c:816 git-add--interactive.perl:1896
+#: add-interactive.c:1095 builtin/clean.c:813 git-add--interactive.perl:1896
msgid "*** Commands ***"
msgstr "*** Ordres ***"
-#: add-interactive.c:1092 builtin/clean.c:817 git-add--interactive.perl:1893
+#: add-interactive.c:1096 builtin/clean.c:814 git-add--interactive.perl:1893
msgid "What now"
msgstr "I ara què"
-#: add-interactive.c:1144 git-add--interactive.perl:213
+#: add-interactive.c:1148 git-add--interactive.perl:213
msgid "staged"
msgstr "staged"
-#: add-interactive.c:1144 git-add--interactive.perl:213
+#: add-interactive.c:1148 git-add--interactive.perl:213
msgid "unstaged"
msgstr "unstaged"
-#: add-interactive.c:1144 apply.c:4994 apply.c:4997 builtin/am.c:2308
-#: builtin/am.c:2311 builtin/bugreport.c:135 builtin/clone.c:128
-#: builtin/fetch.c:152 builtin/merge.c:285 builtin/pull.c:190
-#: builtin/submodule--helper.c:409 builtin/submodule--helper.c:1819
-#: builtin/submodule--helper.c:1822 builtin/submodule--helper.c:2327
-#: builtin/submodule--helper.c:2330 builtin/submodule--helper.c:2573
+#: add-interactive.c:1148 apply.c:5016 apply.c:5019 builtin/am.c:2311
+#: builtin/am.c:2314 builtin/bugreport.c:107 builtin/clone.c:128
+#: builtin/fetch.c:152 builtin/merge.c:286 builtin/pull.c:190
+#: builtin/submodule--helper.c:404 builtin/submodule--helper.c:1857
+#: builtin/submodule--helper.c:1860 builtin/submodule--helper.c:2503
+#: builtin/submodule--helper.c:2506 builtin/submodule--helper.c:2573
+#: builtin/submodule--helper.c:2578 builtin/submodule--helper.c:2811
#: git-add--interactive.perl:213
msgid "path"
msgstr "camí"
-#: add-interactive.c:1151
+#: add-interactive.c:1155
msgid "could not refresh index"
msgstr "no s'ha pogut actualitzar l'índex"
-#: add-interactive.c:1165 builtin/clean.c:781 git-add--interactive.perl:1803
+#: add-interactive.c:1169 builtin/clean.c:778 git-add--interactive.perl:1803
#, c-format
msgid "Bye.\n"
msgstr "Adeu.\n"
@@ -299,11 +301,11 @@
#: add-patch.c:39
msgid ""
-"If the patch applies cleanly, the edited hunk will immediately be marked for "
-"staging."
+"If the patch applies cleanly, the edited hunk will immediately be marked for"
+" staging."
msgstr ""
-"Si el pedaç s'aplica netament, el tros editat es marcarà immediatament per a "
-"«staging»."
+"Si el pedaç s'aplica netament, el tros editat es marcarà immediatament per a"
+" «staging»."
#: add-patch.c:42
msgid ""
@@ -341,8 +343,8 @@
#: add-patch.c:61
msgid ""
-"If the patch applies cleanly, the edited hunk will immediately be marked for "
-"stashing."
+"If the patch applies cleanly, the edited hunk will immediately be marked for"
+" stashing."
msgstr ""
"Si el pedaç s'aplica de forma neta, el tros editat es marcarà immediatament "
"per a «stashing»."
@@ -383,11 +385,11 @@
#: add-patch.c:85
msgid ""
-"If the patch applies cleanly, the edited hunk will immediately be marked for "
-"unstaging."
+"If the patch applies cleanly, the edited hunk will immediately be marked for"
+" unstaging."
msgstr ""
-"Si el pedaç s'aplica netament, el tros editat es marcarà immediatament per a "
-"«unstaging»."
+"Si el pedaç s'aplica netament, el tros editat es marcarà immediatament per a"
+" «unstaging»."
#: add-patch.c:88
msgid ""
@@ -425,8 +427,8 @@
#: add-patch.c:108 add-patch.c:176 add-patch.c:221
msgid ""
-"If the patch applies cleanly, the edited hunk will immediately be marked for "
-"applying."
+"If the patch applies cleanly, the edited hunk will immediately be marked for"
+" applying."
msgstr ""
"Si el pedaç s'aplica netament, el tros editat es marcarà immediatament per "
"aplicar-lo."
@@ -471,11 +473,11 @@
#: add-patch.c:131 add-patch.c:154 add-patch.c:199
msgid ""
-"If the patch applies cleanly, the edited hunk will immediately be marked for "
-"discarding."
+"If the patch applies cleanly, the edited hunk will immediately be marked for"
+" discarding."
msgstr ""
-"Si el pedaç s'aplica netament, el tros editat es marcarà immediatament per a "
-"ser descartat."
+"Si el pedaç s'aplica netament, el tros editat es marcarà immediatament per a"
+" ser descartat."
#: add-patch.c:134 add-patch.c:202
msgid ""
@@ -495,13 +497,14 @@
#, c-format, perl-format
msgid "Discard mode change from index and worktree [y,n,q,a,d%s,?]? "
msgstr ""
-"Descarta el canvi de mode de l'índex i de l'arbre de treball [y,n,q,a,d"
-"%s,?]? "
+"Descarta el canvi de mode de l'índex i de l'arbre de treball "
+"[y,n,q,a,d%s,?]? "
#: 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 "Descarta suprimir de l'índex i de l'arbre de treball [y,n,q,a,d%s,?]? "
+msgstr ""
+"Descarta suprimir de l'índex i de l'arbre de treball [y,n,q,a,d%s,?]? "
#: add-patch.c:151 add-patch.c:196 git-add--interactive.perl:1463
#, c-format, perl-format
@@ -538,7 +541,8 @@
#: 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 "Aplica la supressió a l'índex i a l'arbre de treball [y,n,q,a,d%s,?]? "
+msgstr ""
+"Aplica la supressió a l'índex i a l'arbre de treball [y,n,q,a,d%s,?]? "
#: add-patch.c:173 add-patch.c:218 git-add--interactive.perl:1469
#, c-format, perl-format
@@ -578,34 +582,34 @@
"a - aplica aquest tros i tots els trossos posteriors en el fitxer\n"
"d - no apliquis aquest tros ni cap dels trossos posteriors en el fitxer\n"
-#: add-patch.c:342
+#: add-patch.c:343
#, c-format
msgid "could not parse hunk header '%.*s'"
msgstr "no s'ha pogut analitzar la capçalera del tros «%.*s»"
-#: add-patch.c:361 add-patch.c:365
+#: add-patch.c:362 add-patch.c:366
#, c-format
msgid "could not parse colored hunk header '%.*s'"
msgstr "no s'ha pogut analitzar la capçalera del tros acolorida «%.*s»"
-#: add-patch.c:419
+#: add-patch.c:420
msgid "could not parse diff"
msgstr "no s'ha pogut analitzar el diff"
-#: add-patch.c:438
+#: add-patch.c:439
msgid "could not parse colored diff"
msgstr "no s'ha pogut analitzar el diff acolorit"
-#: add-patch.c:452
+#: add-patch.c:453
#, c-format
msgid "failed to run '%s'"
msgstr "no s'ha pogut executar «%s»"
-#: add-patch.c:611
+#: add-patch.c:612
msgid "mismatched output from interactive.diffFilter"
msgstr "sortida no coincident des d'interactive.diffFilter"
-#: add-patch.c:612
+#: add-patch.c:613
msgid ""
"Your filter must maintain a one-to-one correspondence\n"
"between its input and output lines."
@@ -613,7 +617,7 @@
"El filtre ha de mantenir una correspondència d'un a un\n"
"entre les línies d'entrada i sortida."
-#: add-patch.c:790
+#: add-patch.c:791
#, c-format
msgid ""
"expected context line #%d in\n"
@@ -622,7 +626,7 @@
"s'esperava la línia amb contingut #%d a\n"
"%.*s"
-#: add-patch.c:805
+#: add-patch.c:806
#, c-format
msgid ""
"hunks do not overlap:\n"
@@ -635,12 +639,12 @@
"\tno acaben amb:\n"
"%.*s"
-#: add-patch.c:1081 git-add--interactive.perl:1115
+#: add-patch.c:1082 git-add--interactive.perl:1115
msgid "Manual hunk edit mode -- see bottom for a quick guide.\n"
msgstr ""
"Mode d'edició de trossos manual - vegeu més avall per una guia ràpida.\n"
-#: add-patch.c:1085
+#: add-patch.c:1086
#, c-format
msgid ""
"---\n"
@@ -654,7 +658,7 @@
"Les línies que comencin per %c s'eliminaran.\n"
#. TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
-#: add-patch.c:1099 git-add--interactive.perl:1129
+#: add-patch.c:1100 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"
@@ -664,11 +668,11 @@
"de nou. Si s'eliminen totes les línies del tros, llavors l'edició s'avorta\n"
"i el tros es deixa sense cap canvi.\n"
-#: add-patch.c:1132
+#: add-patch.c:1133
msgid "could not parse hunk header"
msgstr "no s'ha pogut analitzar la capçalera del tros"
-#: add-patch.c:1177
+#: add-patch.c:1178
msgid "'git apply --cached' failed"
msgstr "«git apply --cached» ha fallat"
@@ -677,33 +681,33 @@
#. Consider translating (saying "no" discards!) as
#. (saying "n" for "no" discards!) if the translation
#. of the word "no" does not start with n.
-#.
#. TRANSLATORS: do not translate [y/n]
#. The program will only accept that input
#. at this point.
#. 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:1246 git-add--interactive.perl:1242
+#: add-patch.c:1247 git-add--interactive.perl:1242
msgid ""
-"Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? "
+"Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]?"
+" "
msgstr ""
"El tros editat no s'aplica. Editeu-lo de nou (si responeu «no» es "
"descartarà) [y/n]? "
-#: add-patch.c:1289
+#: add-patch.c:1290
msgid "The selected hunks do not apply to the index!"
msgstr "Els trossos seleccionats no s'apliquen a l'índex!"
-#: add-patch.c:1290 git-add--interactive.perl:1346
+#: add-patch.c:1291 git-add--interactive.perl:1346
msgid "Apply them to the worktree anyway? "
msgstr "Voleu aplicar-los igualment a l'arbre de treball? "
-#: add-patch.c:1297 git-add--interactive.perl:1349
+#: add-patch.c:1298 git-add--interactive.perl:1349
msgid "Nothing was applied.\n"
msgstr "No s'ha aplicat res.\n"
-#: add-patch.c:1354
+#: add-patch.c:1355
msgid ""
"j - leave this hunk undecided, see next undecided hunk\n"
"J - leave this hunk undecided, see next hunk\n"
@@ -725,73 +729,73 @@
"e - edita manualment el tros actual\n"
"? - mostra l'ajuda\n"
-#: add-patch.c:1516 add-patch.c:1526
+#: add-patch.c:1517 add-patch.c:1527
msgid "No previous hunk"
msgstr "Sense tros previ"
-#: add-patch.c:1521 add-patch.c:1531
+#: add-patch.c:1522 add-patch.c:1532
msgid "No next hunk"
msgstr "No hi ha tros següent"
-#: add-patch.c:1537
+#: add-patch.c:1538
msgid "No other hunks to goto"
msgstr "No hi ha altres trossos on anar-hi"
-#: add-patch.c:1548 git-add--interactive.perl:1606
+#: add-patch.c:1549 git-add--interactive.perl:1606
msgid "go to which hunk (<ret> to see more)? "
msgstr "ves a quin tros (<ret> per a veure'n més)? "
-#: add-patch.c:1549 git-add--interactive.perl:1608
+#: add-patch.c:1550 git-add--interactive.perl:1608
msgid "go to which hunk? "
msgstr "ves a quin tros? "
-#: add-patch.c:1560
+#: add-patch.c:1561
#, c-format
msgid "Invalid number: '%s'"
msgstr "Número no vàlid: «%s»"
-#: add-patch.c:1565
+#: add-patch.c:1566
#, c-format
msgid "Sorry, only %d hunk available."
msgid_plural "Sorry, only %d hunks available."
msgstr[0] "Només %d tros disponible."
msgstr[1] "Només %d trossos disponibles."
-#: add-patch.c:1574
+#: add-patch.c:1575
msgid "No other hunks to search"
msgstr "No hi ha cap altre tros a cercar"
-#: add-patch.c:1580 git-add--interactive.perl:1661
+#: add-patch.c:1581 git-add--interactive.perl:1661
msgid "search for regex? "
msgstr "cerca per expressió regular? "
-#: add-patch.c:1595
+#: add-patch.c:1596
#, c-format
msgid "Malformed search regexp %s: %s"
msgstr "Expressió regular de cerca mal formada %s: %s"
-#: add-patch.c:1612
+#: add-patch.c:1613
msgid "No hunk matches the given pattern"
msgstr "No hi ha trossos que coincideixin amb el patró donat"
-#: add-patch.c:1619
+#: add-patch.c:1620
msgid "Sorry, cannot split this hunk"
msgstr "No es pot dividir aquest tros"
-#: add-patch.c:1623
+#: add-patch.c:1624
#, c-format
msgid "Split into %d hunks."
msgstr "Divideix en %d trossos."
-#: add-patch.c:1627
+#: add-patch.c:1628
msgid "Sorry, cannot edit this hunk"
msgstr "No es pot editar aquest tros"
-#: add-patch.c:1679
+#: add-patch.c:1680
msgid "'git apply' failed"
msgstr "«git apply» ha fallat"
-#: advice.c:145
+#: advice.c:78
#, c-format
msgid ""
"\n"
@@ -800,37 +804,37 @@
"\n"
"Desactiva aquest missatge amb «git config advice.%s false»"
-#: advice.c:161
+#: advice.c:94
#, c-format
msgid "%shint: %.*s%s\n"
msgstr "%sconsell: %.*s%s\n"
-#: advice.c:252
+#: advice.c:178
msgid "Cherry-picking is not possible because you have unmerged files."
msgstr "Fer «cherry pick» no és possible perquè teniu fitxers sense fusionar."
-#: advice.c:254
+#: advice.c:180
msgid "Committing is not possible because you have unmerged files."
msgstr "Cometre no és possible perquè teniu fitxers sense fusionar."
-#: advice.c:256
+#: advice.c:182
msgid "Merging is not possible because you have unmerged files."
msgstr "Fusionar no és possible perquè teniu fitxers sense fusionar."
-#: advice.c:258
+#: advice.c:184
msgid "Pulling is not possible because you have unmerged files."
msgstr "Baixar no és possible perquè teniu fitxers sense fusionar."
-#: advice.c:260
+#: advice.c:186
msgid "Reverting is not possible because you have unmerged files."
msgstr "Revertir no és possible perquè teniu fitxers sense fusionar."
-#: advice.c:262
+#: advice.c:188
#, c-format
msgid "It is not possible to %s because you have unmerged files."
msgstr "No és possible %s perquè teniu fitxers sense fusionar."
-#: advice.c:270
+#: advice.c:196
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."
@@ -839,36 +843,49 @@
"«git add/rm <fitxer>» segons sigui apropiat per a marcar la\n"
"resolució i feu una comissió."
-#: advice.c:278
+#: advice.c:204
msgid "Exiting because of an unresolved conflict."
msgstr "S'està sortint a causa d'un conflicte no resolt."
-#: advice.c:283 builtin/merge.c:1374
+#: advice.c:209 builtin/merge.c:1379
msgid "You have not concluded your merge (MERGE_HEAD exists)."
msgstr "No heu conclòs la vostra fusió (MERGE_HEAD existeix)."
-#: advice.c:285
+#: advice.c:211
msgid "Please, commit your changes before merging."
msgstr "Cometeu els vostres canvis abans de fusionar."
-#: advice.c:286
+#: advice.c:212
msgid "Exiting because of unfinished merge."
msgstr "S'està sortint a causa d'una fusió no terminada."
-#: advice.c:296
-#, c-format
-msgid ""
-"The following pathspecs didn't match any eligible path, but they do match "
-"index\n"
-"entries outside the current sparse checkout:\n"
-msgstr ""
+#: advice.c:217
+msgid "Not possible to fast-forward, aborting."
+msgstr "No és possible avançar ràpidament, s'està avortant."
-#: advice.c:303
+#: advice.c:227
+#, c-format, fuzzy
msgid ""
-"Disable or modify the sparsity rules if you intend to update such entries."
+"The following paths and/or pathspecs matched paths that exist\n"
+"outside of your sparse-checkout definition, so will not be\n"
+"updated in the index:\n"
msgstr ""
+"Els camins següents i/o les especificacions de camí coincideixen amb els camins que existeixen\n"
+"fora de la vostra definició de restricció de proves, no serà\n"
+"actualitzat en l'índex:"
-#: advice.c:310
+#: advice.c:234
+#, fuzzy
+msgid ""
+"If you intend to update such entries, try one of the following:\n"
+"* Use the --sparse option.\n"
+"* Disable or modify the sparsity rules."
+msgstr ""
+"Si té intenció d'actualitzar aquestes entrades, intenti una de les següents:\n"
+"* Utilitzeu l'opció --sparse.\n"
+"* Inhabilita o modifica les regles d'escassetat."
+
+#: advice.c:242
#, c-format
msgid ""
"Note: switching to '%s'.\n"
@@ -886,15 +903,14 @@
"\n"
" git switch -\n"
"\n"
-"Turn off this advice by setting config variable advice.detachedHead to "
-"false\n"
+"Turn off this advice by setting config variable advice.detachedHead to false\n"
"\n"
msgstr ""
"Avís: s'està canviant a «%s».\n"
"\n"
"Esteu en un estat de «HEAD separat». Podeu donar un cop d'ull, fer canvis\n"
-"experimentals i cometre'ls, i podeu descartar qualsevol comissió que feu\n"
-"en aquest estat sense impactar a cap branca tornant a una branca.\n"
+"experimentals i cometre'ls. Podeu descartar qualsevol comissió que feu\n"
+"en aquest estat, sense impactar a cap branca, tornant a una branca.\n"
"\n"
"Si voleu crear una branca nova per a conservar les comissions que creeu,\n"
"poder fer-ho (ara o més tard) usant -c amb l'ordre switch. Exemple:\n"
@@ -905,8 +921,7 @@
"\n"
" git switch -\n"
"\n"
-"Desactiveu aquest consell configurant la variable advice.detachedHead a "
-"«false»\n"
+"Desactiveu aquest consell configurant la variable advice.detachedHead a «false»\n"
"\n"
#: alias.c:50
@@ -997,11 +1012,11 @@
#: apply.c:1371
#, c-format
msgid ""
-"git diff header lacks filename information when removing %d leading pathname "
-"component (line %d)"
+"git diff header lacks filename information when removing %d leading pathname"
+" component (line %d)"
msgid_plural ""
-"git diff header lacks filename information when removing %d leading pathname "
-"components (line %d)"
+"git diff header lacks filename information when removing %d leading pathname"
+" components (line %d)"
msgstr[0] ""
"a la capçalera de git diff li manca informació de nom de fitxer en eliminar "
"%d component de nom de camí inicial (línia %d)"
@@ -1053,49 +1068,49 @@
msgid "** warning: file %s becomes empty but is not deleted"
msgstr "** advertència: el fitxer %s queda buit però no se suprimeix"
-#: apply.c:1977
+#: apply.c:1978
#, c-format
msgid "corrupt binary patch at line %d: %.*s"
msgstr "pedaç binari malmès a la línia %d: %.*s"
-#: apply.c:2014
+#: apply.c:2015
#, c-format
msgid "unrecognized binary patch at line %d"
msgstr "pedaç binari no reconegut a la línia %d"
-#: apply.c:2176
+#: apply.c:2177
#, c-format
msgid "patch with only garbage at line %d"
msgstr "pedaç amb només escombraries a la línia %d"
-#: apply.c:2262
+#: apply.c:2263
#, c-format
msgid "unable to read symlink %s"
msgstr "no s'ha pogut llegir l'enllaç simbòlic %s"
-#: apply.c:2266
+#: apply.c:2267
#, c-format
msgid "unable to open or read %s"
msgstr "no s'ha pogut obrir o llegir %s"
-#: apply.c:2935
+#: apply.c:2936
#, c-format
msgid "invalid start of line: '%c'"
msgstr "inici de línia no vàlid: «%c»"
-#: apply.c:3056
+#: apply.c:3057
#, c-format
msgid "Hunk #%d succeeded at %d (offset %d line)."
msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
msgstr[0] "El tros #%d ha tingut èxit a %d (desplaçament d'%d línia)."
msgstr[1] "El tros #%d ha tingut èxit a %d (desplaçament de %d línies)."
-#: apply.c:3068
+#: apply.c:3069
#, c-format
msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
msgstr "El context s'ha reduït a (%ld/%ld) per a aplicar el fragment a %d"
-#: apply.c:3074
+#: apply.c:3075
#, c-format
msgid ""
"while searching for:\n"
@@ -1104,23 +1119,23 @@
"tot cercant:\n"
"%.*s"
-#: apply.c:3096
+#: apply.c:3097
#, c-format
msgid "missing binary patch data for '%s'"
msgstr "manquen les dades de pedaç binari de «%s»"
-#: apply.c:3104
+#: apply.c:3105
#, c-format
msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
msgstr "no es pot aplicar al revés un pedaç binari sense el tros revés a «%s»"
-#: apply.c:3151
+#: apply.c:3152
#, c-format
msgid "cannot apply binary patch to '%s' without full index line"
msgstr ""
"no es pot aplicar un pedaç binari a «%s» sense la línia d'índex completa"
-#: apply.c:3162
+#: apply.c:3163
#, c-format
msgid ""
"the patch applies to '%s' (%s), which does not match the current contents."
@@ -1128,290 +1143,290 @@
"el pedaç s'aplica a «%s» (%s), el qual no coincideix amb els continguts "
"actuals."
-#: apply.c:3170
+#: apply.c:3171
#, c-format
msgid "the patch applies to an empty '%s' but it is not empty"
msgstr "el pedaç s'aplica a un «%s» buit però no és buit"
-#: apply.c:3188
+#: apply.c:3189
#, c-format
msgid "the necessary postimage %s for '%s' cannot be read"
msgstr "no es pot llegir la postimatge %s necessària per a «%s»"
-#: apply.c:3201
+#: apply.c:3202
#, c-format
msgid "binary patch does not apply to '%s'"
msgstr "el pedaç binari no s'aplica a «%s»"
-#: apply.c:3208
+#: apply.c:3209
#, c-format
msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
msgstr ""
"el pedaç binari a «%s» crea un resultat incorrecte (s'esperava %s, s'ha "
"rebut %s)"
-#: apply.c:3229
+#: apply.c:3230
#, c-format
msgid "patch failed: %s:%ld"
msgstr "el pedaç ha fallat: %s:%ld"
-#: apply.c:3352
+#: apply.c:3353
#, c-format
msgid "cannot checkout %s"
msgstr "no es pot agafar %s"
-#: apply.c:3404 apply.c:3415 apply.c:3461 midx.c:98 pack-revindex.c:214
+#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:102 pack-revindex.c:214
#: setup.c:308
#, c-format
msgid "failed to read %s"
msgstr "s'ha produït un error en llegir %s"
-#: apply.c:3412
+#: apply.c:3413
#, c-format
msgid "reading from '%s' beyond a symbolic link"
msgstr "s'està llegint de «%s» més enllà d'un enllaç simbòlic"
-#: apply.c:3441 apply.c:3687
+#: apply.c:3442 apply.c:3709
#, c-format
msgid "path %s has been renamed/deleted"
msgstr "el camí %s s'ha canviat de nom / s'ha suprimit"
-#: apply.c:3527 apply.c:3702
+#: apply.c:3549 apply.c:3724
#, c-format
msgid "%s: does not exist in index"
msgstr "%s: no existeix en l'índex"
-#: apply.c:3536 apply.c:3710 apply.c:3954
+#: apply.c:3558 apply.c:3732 apply.c:3976
#, c-format
msgid "%s: does not match index"
msgstr "%s: no coincideix amb l'índex"
-#: apply.c:3571
+#: apply.c:3593
msgid "repository lacks the necessary blob to perform 3-way merge."
msgstr ""
"al repositori li manca el blob necessari per a fer a una fusió de 3 vies."
-#: apply.c:3574
+#: apply.c:3596
#, c-format
msgid "Performing three-way merge...\n"
msgstr "S'està fent una fusió de 3 vies...\n"
-#: apply.c:3590 apply.c:3594
+#: apply.c:3612 apply.c:3616
#, c-format
msgid "cannot read the current contents of '%s'"
msgstr "no es poden llegir els continguts actuals de «%s»"
-#: apply.c:3606
+#: apply.c:3628
#, c-format
msgid "Failed to perform three-way merge...\n"
msgstr "S'ha produït un error en fer una fusió de tres vies...\n"
-#: apply.c:3620
+#: apply.c:3642
#, c-format
msgid "Applied patch to '%s' with conflicts.\n"
msgstr "S'ha aplicat el pedaç a «%s» amb conflictes.\n"
-#: apply.c:3625
+#: apply.c:3647
#, c-format
msgid "Applied patch to '%s' cleanly.\n"
msgstr "S'ha aplicat el pedaç a «%s» netament.\n"
-#: apply.c:3642
+#: apply.c:3664
#, c-format
msgid "Falling back to direct application...\n"
msgstr "S'està usant alternativament l'aplicació directa...\n"
-#: apply.c:3654
+#: apply.c:3676
msgid "removal patch leaves file contents"
msgstr "el pedaç d'eliminació deixa els continguts dels fitxers"
-#: apply.c:3727
+#: apply.c:3749
#, c-format
msgid "%s: wrong type"
msgstr "%s: tipus erroni"
-#: apply.c:3729
+#: apply.c:3751
#, c-format
msgid "%s has type %o, expected %o"
msgstr "%s és del tipus %o, s'esperava %o"
-#: apply.c:3894 apply.c:3896 read-cache.c:861 read-cache.c:890
-#: read-cache.c:1351
+#: apply.c:3916 apply.c:3918 read-cache.c:876 read-cache.c:905
+#: read-cache.c:1368
#, c-format
msgid "invalid path '%s'"
msgstr "camí no vàlid: «%s»"
-#: apply.c:3952
+#: apply.c:3974
#, c-format
msgid "%s: already exists in index"
msgstr "%s: ja existeix en l'índex"
-#: apply.c:3956
+#: apply.c:3978
#, c-format
msgid "%s: already exists in working directory"
msgstr "%s: ja existeix en el directori de treball"
-#: apply.c:3976
+#: apply.c:3998
#, c-format
msgid "new mode (%o) of %s does not match old mode (%o)"
msgstr "el mode nou (%o) de %s no coincideix amb el mode antic (%o)"
-#: apply.c:3981
+#: apply.c:4003
#, c-format
msgid "new mode (%o) of %s does not match old mode (%o) of %s"
msgstr "el mode nou (%o) de %s no coincideix amb el mode antic (%o) de %s"
-#: apply.c:4001
+#: apply.c:4023
#, c-format
msgid "affected file '%s' is beyond a symbolic link"
msgstr "el fitxer afectat «%s» és més enllà d'un enllaç simbòlic"
-#: apply.c:4005
+#: apply.c:4027
#, c-format
msgid "%s: patch does not apply"
msgstr "%s: el pedaç no s'aplica"
-#: apply.c:4020
+#: apply.c:4042
#, c-format
msgid "Checking patch %s..."
msgstr "S'està comprovant el pedaç %s..."
-#: apply.c:4112
+#: apply.c:4134
#, c-format
msgid "sha1 information is lacking or useless for submodule %s"
msgstr "falta la informació sha1 o és inútil per al submòdul %s"
-#: apply.c:4119
+#: apply.c:4141
#, c-format
msgid "mode change for %s, which is not in current HEAD"
msgstr "canvi de mode per a %s, el qual no està en la HEAD actual"
-#: apply.c:4122
+#: apply.c:4144
#, c-format
msgid "sha1 information is lacking or useless (%s)."
msgstr "falta informació sha1 o és inútil (%s)."
-#: apply.c:4131
+#: apply.c:4153
#, c-format
msgid "could not add %s to temporary index"
msgstr "no s'ha pogut afegir %s a l'índex temporal"
-#: apply.c:4141
+#: apply.c:4163
#, c-format
msgid "could not write temporary index to %s"
msgstr "no s'ha pogut escriure l'índex temporal a %s"
-#: apply.c:4279
+#: apply.c:4301
#, c-format
msgid "unable to remove %s from index"
msgstr "no s'ha pogut eliminar %s de l'índex"
-#: apply.c:4313
+#: apply.c:4335
#, c-format
msgid "corrupt patch for submodule %s"
msgstr "pedaç malmès per al submòdul %s"
-#: apply.c:4319
+#: apply.c:4341
#, c-format
msgid "unable to stat newly created file '%s'"
msgstr "no s'ha pogut fer stat al fitxer novament creat «%s»"
-#: apply.c:4327
+#: apply.c:4349
#, c-format
msgid "unable to create backing store for newly created file %s"
msgstr ""
-"no s'ha pogut crear un magatzem de suport per al fitxer novament creat "
-"%s"
+"no s'ha pogut crear un magatzem de suport per al fitxer novament creat %s"
-#: apply.c:4333 apply.c:4478
+#: apply.c:4355 apply.c:4500
#, c-format
msgid "unable to add cache entry for %s"
msgstr "no s'ha pogut afegir una entrada de cau per a %s"
-#: apply.c:4376 builtin/bisect--helper.c:523
+#: apply.c:4398 builtin/bisect--helper.c:540 builtin/gc.c:2242
+#: builtin/gc.c:2277
#, c-format
msgid "failed to write to '%s'"
msgstr "no s'ha pogut escriure a «%s»"
-#: apply.c:4380
+#: apply.c:4402
#, c-format
msgid "closing file '%s'"
msgstr "s'està tancant el fitxer «%s»"
-#: apply.c:4450
+#: apply.c:4472
#, c-format
msgid "unable to write file '%s' mode %o"
msgstr "no s'ha pogut escriure el fitxer «%s» mode %o"
-#: apply.c:4548
+#: apply.c:4570
#, c-format
msgid "Applied patch %s cleanly."
msgstr "El pedaç %s s'ha aplicat netament."
-#: apply.c:4556
+#: apply.c:4578
msgid "internal error"
msgstr "error intern"
-#: apply.c:4559
+#: apply.c:4581
#, c-format
msgid "Applying patch %%s with %d reject..."
msgid_plural "Applying patch %%s with %d rejects..."
msgstr[0] "S'està aplicant el pedaç %%s amb %d rebuig..."
msgstr[1] "S'està aplicant el pedaç %%s amb %d rebutjos..."
-#: apply.c:4570
+#: apply.c:4592
#, c-format
msgid "truncating .rej filename to %.*s.rej"
msgstr "s'està truncant el nom del fitxer .rej a %.*s.rej"
-#: apply.c:4578 builtin/fetch.c:993 builtin/fetch.c:1394
+#: apply.c:4600 builtin/fetch.c:998 builtin/fetch.c:1408
#, c-format
msgid "cannot open %s"
msgstr "no es pot obrir %s"
-#: apply.c:4592
+#: apply.c:4614
#, c-format
msgid "Hunk #%d applied cleanly."
msgstr "El tros #%d s'ha aplicat netament."
-#: apply.c:4596
+#: apply.c:4618
#, c-format
msgid "Rejected hunk #%d."
msgstr "S'ha rebutjat el tros #%d."
-#: apply.c:4725
+#: apply.c:4747
#, c-format
msgid "Skipped patch '%s'."
msgstr "S'ha omès el pedaç «%s»."
-#: apply.c:4733
+#: apply.c:4755
msgid "unrecognized input"
msgstr "entrada no reconeguda"
-#: apply.c:4753
+#: apply.c:4775
msgid "unable to read index file"
msgstr "no es pot llegir el fitxer d'índex"
-#: apply.c:4910
+#: apply.c:4932
#, c-format
msgid "can't open patch '%s': %s"
msgstr "no es pot obrir el pedaç «%s»: %s"
-#: apply.c:4937
+#: apply.c:4959
#, c-format
msgid "squelched %d whitespace error"
msgid_plural "squelched %d whitespace errors"
msgstr[0] "s'ha silenciat %d error d'espai en blanc"
msgstr[1] "s'han silenciat %d errors d'espai en blanc"
-#: apply.c:4943 apply.c:4958
+#: apply.c:4965 apply.c:4980
#, c-format
msgid "%d line adds whitespace errors."
msgid_plural "%d lines add whitespace errors."
msgstr[0] "%d línia afegeix errors d'espai en blanc."
msgstr[1] "%d línies afegeixen errors d'espai en blanc."
-#: apply.c:4951
+#: apply.c:4973
#, c-format
msgid "%d line applied after fixing whitespace errors."
msgid_plural "%d lines applied after fixing whitespace errors."
@@ -1420,136 +1435,139 @@
msgstr[1] ""
"S'han aplicat %d línies després d'arreglar els errors d'espai en blanc."
-#: apply.c:4967 builtin/add.c:679 builtin/mv.c:304 builtin/rm.c:423
+#: apply.c:4989 builtin/add.c:707 builtin/mv.c:338 builtin/rm.c:429
msgid "Unable to write new index file"
msgstr "No s'ha pogut escriure un fitxer d'índex nou"
-#: apply.c:4995
+#: apply.c:5017
msgid "don't apply changes matching the given path"
msgstr "no apliquis els canvis que coincideixin amb el camí donat"
-#: apply.c:4998
+#: apply.c:5020
msgid "apply changes matching the given path"
msgstr "aplica els canvis que coincideixin amb el camí donat"
-#: apply.c:5000 builtin/am.c:2317
+#: apply.c:5022 builtin/am.c:2320
msgid "num"
msgstr "número"
-#: apply.c:5001
+#: apply.c:5023
msgid "remove <num> leading slashes from traditional diff paths"
msgstr ""
"elimina <nombre> barres obliqües inicials dels camins de diferència "
"tradicionals"
-#: apply.c:5004
+#: apply.c:5026
msgid "ignore additions made by the patch"
msgstr "ignora afegiments fets pel pedaç"
-#: apply.c:5006
+#: apply.c:5028
msgid "instead of applying the patch, output diffstat for the input"
msgstr ""
-"en lloc d'aplicar el pedaç, emet les estadístiques de diferència de l'entrada"
+"en lloc d'aplicar el pedaç, emet les estadístiques de diferència de "
+"l'entrada"
-#: apply.c:5010
+#: apply.c:5032
msgid "show number of added and deleted lines in decimal notation"
msgstr "mostra el nombre de línies afegides i suprimides en notació decimal"
-#: apply.c:5012
+#: apply.c:5034
msgid "instead of applying the patch, output a summary for the input"
msgstr "en lloc d'aplicar el pedaç, emet un resum de l'entrada"
-#: apply.c:5014
+#: apply.c:5036
msgid "instead of applying the patch, see if the patch is applicable"
msgstr "en lloc d'aplicar el pedaç, veges si el pedaç és aplicable"
-#: apply.c:5016
+#: apply.c:5038
msgid "make sure the patch is applicable to the current index"
msgstr "assegura que el pedaç sigui aplicable a l'índex actual"
-#: apply.c:5018
+#: apply.c:5040
msgid "mark new files with `git add --intent-to-add`"
msgstr "marca els fitxers nous amb «git add --intent-to-add»"
-#: apply.c:5020
+#: apply.c:5042
msgid "apply a patch without touching the working tree"
msgstr "aplica un pedaç sense tocar l'arbre de treball"
-#: apply.c:5022
+#: apply.c:5044
msgid "accept a patch that touches outside the working area"
msgstr "accepta un pedaç que toqui fora de l'àrea de treball"
-#: apply.c:5025
+#: apply.c:5047
msgid "also apply the patch (use with --stat/--summary/--check)"
msgstr "aplica el pedaç també (useu amb --stat/--summary/--check)"
-#: apply.c:5027
+#: apply.c:5049
msgid "attempt three-way merge, fall back on normal patch if that fails"
-msgstr "intenta una fusió de tres vies, si falla intenta llavors un pedaç normal"
+msgstr ""
+"intenta una fusió de tres vies, si falla intenta llavors un pedaç normal"
-#: apply.c:5029
+#: apply.c:5051
msgid "build a temporary index based on embedded index information"
-msgstr "construeix un índex temporal basat en la informació d'índex incrustada"
+msgstr ""
+"construeix un índex temporal basat en la informació d'índex incrustada"
-#: apply.c:5032 builtin/checkout-index.c:196 builtin/ls-files.c:617
+#: apply.c:5054 builtin/checkout-index.c:196
msgid "paths are separated with NUL character"
msgstr "els camins se separen amb el caràcter NUL"
-#: apply.c:5034
+#: apply.c:5056
msgid "ensure at least <n> lines of context match"
msgstr "assegura't que almenys <n> línies de context coincideixin"
-#: apply.c:5035 builtin/am.c:2293 builtin/am.c:2296
+#: apply.c:5057 builtin/am.c:2296 builtin/am.c:2299
#: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
-#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3831
-#: builtin/rebase.c:1347
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3960
+#: builtin/rebase.c:1051
msgid "action"
msgstr "acció"
-#: apply.c:5036
+#: apply.c:5058
msgid "detect new or modified lines that have whitespace errors"
msgstr ""
"detecta les línies noves o modificades que tinguin errors d'espai en blanc"
-#: apply.c:5039 apply.c:5042
+#: apply.c:5061 apply.c:5064
msgid "ignore changes in whitespace when finding context"
msgstr "ignora els canvis d'espai en blanc en cercar context"
-#: apply.c:5045
+#: apply.c:5067
msgid "apply the patch in reverse"
msgstr "aplica el pedaç al revés"
-#: apply.c:5047
+#: apply.c:5069
msgid "don't expect at least one line of context"
msgstr "no esperis almenys una línia de context"
-#: apply.c:5049
+#: apply.c:5071
msgid "leave the rejected hunks in corresponding *.rej files"
msgstr "deixa els trossos rebutjats en fitxers *.rej corresponents"
-#: apply.c:5051
+#: apply.c:5073
msgid "allow overlapping hunks"
msgstr "permet trossos encavalcants"
-#: apply.c:5052 builtin/add.c:364 builtin/check-ignore.c:22
-#: builtin/commit.c:1474 builtin/count-objects.c:98 builtin/fsck.c:755
-#: builtin/log.c:2295 builtin/mv.c:123 builtin/read-tree.c:128
+#: apply.c:5074 builtin/add.c:372 builtin/check-ignore.c:22
+#: builtin/commit.c:1483 builtin/count-objects.c:98 builtin/fsck.c:788
+#: builtin/log.c:2297 builtin/mv.c:123 builtin/read-tree.c:120
msgid "be verbose"
msgstr "sigues detallat"
-#: apply.c:5054
+#: apply.c:5076
msgid "tolerate incorrectly detected missing new-line at the end of file"
msgstr "tolera una línia nova incorrectament detectada al final del fitxer"
-#: apply.c:5057
+#: apply.c:5079
msgid "do not trust the line counts in the hunk headers"
msgstr "no confiïs en els recomptes de línia en les capçaleres dels trossos"
-#: apply.c:5059 builtin/am.c:2305
+#: apply.c:5081 builtin/am.c:2308
msgid "root"
msgstr "arrel"
-#: apply.c:5060
+#: apply.c:5082
msgid "prepend <root> to all filenames"
msgstr "anteposa <arrel> a tots els noms de fitxer"
@@ -1587,7 +1605,7 @@
msgid "path too long (%d chars, SHA1: %s): %s"
msgstr "el camí és massa llarg (%d caràcters, SHA1: %s): %s"
-#: archive-zip.c:469 builtin/pack-objects.c:244 builtin/pack-objects.c:247
+#: archive-zip.c:469 builtin/pack-objects.c:365 builtin/pack-objects.c:368
#, c-format
msgid "deflate error (%d)"
msgstr "error de deflació (%d)"
@@ -1607,7 +1625,8 @@
#: archive.c:16
msgid ""
-"git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"
+"git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> "
+"[<path>...]"
msgstr ""
"git archive --remote <repositori> [--exec <ordre>] [<opcions>] <arbre> "
"[<camí>...]"
@@ -1621,151 +1640,151 @@
msgid "cannot read %s"
msgstr "no es pot llegir «%s»"
-#: archive.c:342 sequencer.c:460 sequencer.c:1915 sequencer.c:3095
-#: sequencer.c:3536 sequencer.c:3645 builtin/am.c:261 builtin/commit.c:833
-#: builtin/merge.c:1143
+#: archive.c:341 sequencer.c:473 sequencer.c:1930 sequencer.c:3112
+#: sequencer.c:3554 sequencer.c:3682 builtin/am.c:263 builtin/commit.c:834
+#: builtin/merge.c:1145
#, c-format
msgid "could not read '%s'"
msgstr "no s'ha pogut llegir «%s»"
-#: archive.c:427 builtin/add.c:205 builtin/add.c:646 builtin/rm.c:328
+#: archive.c:426 builtin/add.c:215 builtin/add.c:674 builtin/rm.c:334
#, c-format
msgid "pathspec '%s' did not match any files"
msgstr "l'especificació de camí «%s» no ha coincidit amb cap fitxer"
-#: archive.c:451
+#: archive.c:450
#, c-format
msgid "no such ref: %.*s"
msgstr "no existeix la referència: %.*s"
-#: archive.c:457
+#: archive.c:456
#, c-format
msgid "not a valid object name: %s"
msgstr "no és un nom d'objecte vàlid: %s"
-#: archive.c:470
+#: archive.c:469
#, c-format
msgid "not a tree object: %s"
msgstr "no és un objecte d'arbre: %s"
-#: archive.c:482
+#: archive.c:481
msgid "current working directory is untracked"
msgstr "no se segueix el directori de treball actual"
-#: archive.c:523
+#: archive.c:522
#, c-format
msgid "File not found: %s"
msgstr "Fitxer no trobat: %s"
-#: archive.c:525
+#: archive.c:524
#, c-format
msgid "Not a regular file: %s"
msgstr "No és un fitxer normal: %s"
-#: archive.c:552
+#: archive.c:551
msgid "fmt"
msgstr "format"
-#: archive.c:552
+#: archive.c:551
msgid "archive format"
msgstr "format d'arxiu"
-#: archive.c:553 builtin/log.c:1772
+#: archive.c:552 builtin/log.c:1775
msgid "prefix"
msgstr "prefix"
-#: archive.c:554
+#: archive.c:553
msgid "prepend prefix to each pathname in the archive"
msgstr "anteposa el prefix a cada nom de camí en l'arxiu"
-#: archive.c:555 archive.c:558 builtin/blame.c:884 builtin/blame.c:888
-#: builtin/blame.c:889 builtin/commit-tree.c:117 builtin/config.c:135
-#: builtin/fast-export.c:1207 builtin/fast-export.c:1209
-#: builtin/fast-export.c:1213 builtin/grep.c:922 builtin/hash-object.c:105
-#: builtin/ls-files.c:653 builtin/ls-files.c:656 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:191
+#: archive.c:554 archive.c:557 builtin/blame.c:880 builtin/blame.c:884
+#: builtin/blame.c:885 builtin/commit-tree.c:115 builtin/config.c:135
+#: builtin/fast-export.c:1208 builtin/fast-export.c:1210
+#: builtin/fast-export.c:1214 builtin/grep.c:935 builtin/hash-object.c:103
+#: builtin/ls-files.c:651 builtin/ls-files.c:654 builtin/notes.c:410
+#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:190
msgid "file"
msgstr "fitxer"
-#: archive.c:556
+#: archive.c:555
msgid "add untracked file to archive"
msgstr "inclou els fitxers no seguits a l'arxiu"
-#: archive.c:559 builtin/archive.c:90
+#: archive.c:558 builtin/archive.c:88
msgid "write the archive to this file"
msgstr "escriu l'arxiu a aquest fitxer"
-#: archive.c:561
+#: archive.c:560
msgid "read .gitattributes in working directory"
msgstr "llegeix .gitattributes en el directori de treball"
-#: archive.c:562
+#: archive.c:561
msgid "report archived files on stderr"
msgstr "informa de fitxers arxivats en stderr"
-#: archive.c:564
+#: archive.c:563
msgid "set compression level"
msgstr "estableix el nivell de compressió"
-#: archive.c:567
+#: archive.c:566
msgid "list supported archive formats"
msgstr "llista els formats d'arxiu admesos"
-#: archive.c:569 builtin/archive.c:91 builtin/clone.c:118 builtin/clone.c:121
-#: builtin/submodule--helper.c:1831 builtin/submodule--helper.c:2336
+#: archive.c:568 builtin/archive.c:89 builtin/clone.c:118 builtin/clone.c:121
+#: builtin/submodule--helper.c:1869 builtin/submodule--helper.c:2512
msgid "repo"
msgstr "repositori"
-#: archive.c:570 builtin/archive.c:92
+#: archive.c:569 builtin/archive.c:90
msgid "retrieve the archive from remote repository <repo>"
msgstr "recupera l'arxiu del repositori remot <repositori>"
-#: archive.c:571 builtin/archive.c:93 builtin/difftool.c:718
-#: builtin/notes.c:498
+#: archive.c:570 builtin/archive.c:91 builtin/difftool.c:714
+#: builtin/notes.c:496
msgid "command"
msgstr "ordre"
-#: archive.c:572 builtin/archive.c:94
+#: archive.c:571 builtin/archive.c:92
msgid "path to the remote git-upload-archive command"
msgstr "camí a l'ordre git-upload-archive remota"
-#: archive.c:579
+#: archive.c:578
msgid "Unexpected option --remote"
msgstr "Opció inesperada --remote"
-#: archive.c:581
+#: archive.c:580
msgid "Option --exec can only be used together with --remote"
msgstr "L'opció --exec només es pot usar juntament amb --remote"
-#: archive.c:583
+#: archive.c:582
msgid "Unexpected option --output"
msgstr "Opció inesperada --output"
-#: archive.c:585
+#: archive.c:584
msgid "Options --add-file and --remote cannot be used together"
msgstr "Les opcions --add-file i --remote no es poden usar juntes"
-#: archive.c:607
+#: archive.c:606
#, c-format
msgid "Unknown archive format '%s'"
msgstr "Format d'arxiu desconegut «%s»"
-#: archive.c:616
+#: archive.c:615
#, c-format
msgid "Argument not supported for format '%s': -%d"
msgstr "Argument no admès per al format «%s»: -%d"
-#: attr.c:202
+#: attr.c:203
#, c-format
msgid "%.*s is not a valid attribute name"
msgstr "%.*s no és un nom d'atribut vàlid"
-#: attr.c:363
+#: attr.c:364
#, c-format
msgid "%s not allowed: %s:%d"
msgstr "%s no està permès: %s:%d"
-#: attr.c:403
+#: attr.c:404
msgid ""
"Negative patterns are ignored in git attributes\n"
"Use '\\!' for literal leading exclamation."
@@ -1773,22 +1792,22 @@
"Els patrons negatius s'ignoren en els atributs de git\n"
"Useu «\\!» per exclamació capdavantera literal."
-#: bisect.c:489
+#: bisect.c:488
#, c-format
msgid "Badly quoted content in file '%s': %s"
msgstr "Comentari amb cometes errònies en el fitxer «%s»: %s"
-#: bisect.c:699
+#: bisect.c:698
#, c-format
msgid "We cannot bisect more!\n"
msgstr "No podem bisecar més!\n"
-#: bisect.c:766
+#: bisect.c:764
#, c-format
msgid "Not a valid commit name %s"
msgstr "No és un nom de comissió vàlid %s"
-#: bisect.c:791
+#: bisect.c:789
#, c-format
msgid ""
"The merge base %s is bad.\n"
@@ -1797,7 +1816,7 @@
"La base de fusió %s és errònia.\n"
"Això vol dir que el defecte s'ha arreglat entre %s i [%s].\n"
-#: bisect.c:796
+#: bisect.c:794
#, c-format
msgid ""
"The merge base %s is new.\n"
@@ -1806,7 +1825,7 @@
"La base de fusió %s és nova.\n"
"La propietat s'ha canviat entre %s i [%s].\n"
-#: bisect.c:801
+#: bisect.c:799
#, c-format
msgid ""
"The merge base %s is %s.\n"
@@ -1815,7 +1834,7 @@
"La base de fusió %s és %s.\n"
"Això vol dir que la primera comissió «%s» és entre %s i [%s].\n"
-#: bisect.c:809
+#: bisect.c:807
#, c-format
msgid ""
"Some %s revs are not ancestors of the %s rev.\n"
@@ -1826,7 +1845,7 @@
"git bisect no pot funcionar correctament en aquest cas.\n"
"Potser heu confós les revisions %s i %s?\n"
-#: bisect.c:822
+#: bisect.c:820
#, c-format
msgid ""
"the merge base between %s and [%s] must be skipped.\n"
@@ -1834,40 +1853,39 @@
"We continue anyway."
msgstr ""
"s'ha d'ometre la base de fusió entre %s i [%s].\n"
-"Llavors, no podem estar segurs que la primera comissió %s sigui entre %s i "
-"%s.\n"
+"Llavors, no podem estar segurs que la primera comissió %s sigui entre %s i %s.\n"
"Continuem de totes maneres."
-#: bisect.c:861
+#: bisect.c:859
#, c-format
msgid "Bisecting: a merge base must be tested\n"
msgstr "Bisecant: s'ha de provar una base de fusió\n"
-#: bisect.c:911
+#: bisect.c:909
#, c-format
msgid "a %s revision is needed"
msgstr "es necessita una revisió %s"
-#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:298
+#: bisect.c:939
#, c-format
msgid "could not create file '%s'"
msgstr "no s'ha pogut crear el fitxer «%s»"
-#: bisect.c:987 builtin/merge.c:153
+#: bisect.c:985 builtin/merge.c:154
#, c-format
msgid "could not read file '%s'"
msgstr "no s'ha pogut llegir el fitxer «%s»"
-#: bisect.c:1027
+#: bisect.c:1025
msgid "reading bisect refs failed"
msgstr "la lectura de les referències de bisecció ha fallat"
-#: bisect.c:1057
+#: bisect.c:1055
#, c-format
msgid "%s was both %s and %s\n"
msgstr "%s era ambdós %s i %s\n"
-#: bisect.c:1066
+#: bisect.c:1064
#, c-format
msgid ""
"No testable commit found.\n"
@@ -1876,7 +1894,7 @@
"No s'ha trobat cap comissió comprovable.\n"
"Potser heu començat amb paràmetres de camí incorrectes?\n"
-#: bisect.c:1095
+#: bisect.c:1093
#, c-format
msgid "(roughly %d step)"
msgid_plural "(roughly %d steps)"
@@ -1885,8 +1903,7 @@
#. TRANSLATORS: the last %s will be replaced with "(roughly %d
#. steps)" translation.
-#.
-#: bisect.c:1101
+#: bisect.c:1099
#, 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"
@@ -1907,11 +1924,12 @@
"--reverse i --first-parent junts requereixen una última comissió "
"especificada"
-#: blame.c:2820 bundle.c:213 ref-filter.c:2207 remote.c:2041 sequencer.c:2333
-#: sequencer.c:4866 submodule.c:857 builtin/commit.c:1106 builtin/log.c:411
-#: builtin/log.c:1018 builtin/log.c:1626 builtin/log.c:2054 builtin/log.c:2344
-#: builtin/merge.c:428 builtin/pack-objects.c:3183 builtin/pack-objects.c:3646
-#: builtin/pack-objects.c:3661 builtin/shortlog.c:255
+#: blame.c:2820 bundle.c:224 midx.c:1039 ref-filter.c:2370 remote.c:2041
+#: sequencer.c:2348 sequencer.c:4900 submodule.c:883 builtin/commit.c:1114
+#: builtin/log.c:414 builtin/log.c:1021 builtin/log.c:1629 builtin/log.c:2056
+#: builtin/log.c:2346 builtin/merge.c:429 builtin/pack-objects.c:3373
+#: builtin/pack-objects.c:3775 builtin/pack-objects.c:3790
+#: builtin/shortlog.c:255
msgid "revision walk setup failed"
msgstr "la configuració del passeig per revisions ha fallat"
@@ -1998,7 +2016,8 @@
#: branch.c:110
#, c-format
msgid "Branch '%s' set up to track local ref '%s'."
-msgstr "La branca «%s» està configurada per a seguir la referència local «%s»."
+msgstr ""
+"La branca «%s» està configurada per a seguir la referència local «%s»."
#: branch.c:119
msgid "Unable to write upstream branch configuration"
@@ -2025,7 +2044,8 @@
#: branch.c:233
#, c-format
-msgid "Cannot setup tracking information; starting point '%s' is not a branch."
+msgid ""
+"Cannot setup tracking information; starting point '%s' is not a branch."
msgstr ""
"No es pot configurar la informació de seguiment; el punt inicial «%s» no és "
"una branca."
@@ -2081,121 +2101,119 @@
msgid "HEAD of working tree %s is not updated"
msgstr "HEAD de l'arbre de treball %s no està actualitzat"
-#: bundle.c:41
+#: bundle.c:44
#, c-format
msgid "unrecognized bundle hash algorithm: %s"
msgstr "Algoritme de hash del farcell desconegut: %s"
-#: bundle.c:45
+#: bundle.c:48
#, c-format
msgid "unknown capability '%s'"
msgstr "funcionalitat «%s» desconeguda"
-#: bundle.c:71
+#: bundle.c:74
#, c-format
msgid "'%s' does not look like a v2 or v3 bundle file"
msgstr "«%s» no sembla un fitxer de farcell v2 o v3"
-#: bundle.c:110
+#: bundle.c:113
#, c-format
msgid "unrecognized header: %s%s (%d)"
msgstr "capçalera no reconeguda: %s%s (%d)"
-#: bundle.c:136 rerere.c:464 rerere.c:674 sequencer.c:2593 sequencer.c:3385
-#: builtin/commit.c:861
+#: bundle.c:140 rerere.c:464 rerere.c:674 sequencer.c:2616 sequencer.c:3402
+#: builtin/commit.c:862
#, c-format
msgid "could not open '%s'"
msgstr "no s'ha pogut obrir «%s»"
-#: bundle.c:189
+#: bundle.c:198
msgid "Repository lacks these prerequisite commits:"
msgstr "Al repositori li manquen aquestes comissions prerequerides:"
-#: bundle.c:192
+#: bundle.c:201
msgid "need a repository to verify a bundle"
msgstr "cal un repositori per verificar un farcell"
-#: bundle.c:243
+#: bundle.c:257
#, c-format
msgid "The bundle contains this ref:"
msgid_plural "The bundle contains these %d refs:"
msgstr[0] "El farcell conté aquesta referència:"
msgstr[1] "El farcell conté aquestes %d referències:"
-#: bundle.c:250
+#: bundle.c:264
msgid "The bundle records a complete history."
msgstr "El farcell registra una història completa."
-#: bundle.c:252
+#: bundle.c:266
#, c-format
msgid "The bundle requires this ref:"
msgid_plural "The bundle requires these %d refs:"
msgstr[0] "El farcell requereix aquesta referència:"
msgstr[1] "El farcell requereix aquestes %d referències:"
-#: bundle.c:319
+#: bundle.c:333
msgid "unable to dup bundle descriptor"
msgstr "no s'ha pogut duplicar el descriptor del farcell"
-#: bundle.c:326
+#: bundle.c:340
msgid "Could not spawn pack-objects"
msgstr "No s'ha pogut generar el pack-objects"
-#: bundle.c:337
+#: bundle.c:351
msgid "pack-objects died"
msgstr "El pack-objects s'ha mort"
-#: bundle.c:386
+#: bundle.c:400
#, c-format
msgid "ref '%s' is excluded by the rev-list options"
msgstr "les opcions de la llista de revisions exclouen la referència «%s»"
-#: bundle.c:490
+#: bundle.c:504
#, c-format
msgid "unsupported bundle version %d"
msgstr "versió del farcell no compatible %d"
-#: bundle.c:492
+#: bundle.c:506
#, c-format
msgid "cannot write bundle version %d with algorithm %s"
msgstr "no es pot escriure la versió %d amb l'algorisme %s"
-#: bundle.c:510 builtin/log.c:210 builtin/log.c:1935 builtin/shortlog.c:396
+#: bundle.c:524 builtin/log.c:210 builtin/log.c:1938 builtin/shortlog.c:399
#, c-format
msgid "unrecognized argument: %s"
msgstr "argument no reconegut: %s"
-#: bundle.c:539
+#: bundle.c:553
msgid "Refusing to create empty bundle."
msgstr "S'està refusant crear un farcell buit."
-#: bundle.c:549
+#: bundle.c:563
#, c-format
msgid "cannot create '%s'"
msgstr "no es pot crear «%s»"
-#: bundle.c:574
+#: bundle.c:588
msgid "index-pack died"
msgstr "L'index-pack s'ha mort"
-#: chunk-format.c:113
+#: chunk-format.c:117
msgid "terminating chunk id appears earlier than expected"
msgstr ""
-"l'identificador de fragment de finalització apareix abans del que "
-"s'esperava"
+"l'identificador de fragment de finalització apareix abans del que s'esperava"
-#: chunk-format.c:122
+#: chunk-format.c:126
#, c-format
msgid "improper chunk offset(s) %<PRIx64> and %<PRIx64>"
-msgstr ""
-"desplaçament incorrecte del fragment %<PRIx64> and %<PRIx64>"
+msgstr "desplaçament incorrecte del fragment %<PRIx64> and %<PRIx64>"
-#: chunk-format.c:129
+#: chunk-format.c:133
#, c-format
msgid "duplicate chunk ID %<PRIx32> found"
msgstr "S'ha trobat un ID del fragment %<PRIx32> duplicat"
-#: chunk-format.c:143
+#: chunk-format.c:147
#, c-format
msgid "final chunk has non-zero id %<PRIx32>"
msgstr "El fragment final té un id %<PRIx32> que no és zero"
@@ -2205,7 +2223,7 @@
msgid "invalid color value: %.*s"
msgstr "valor de color no vàlid: %.*s"
-#: commit-graph.c:204 midx.c:47
+#: commit-graph.c:204 midx.c:51
msgid "invalid hash version"
msgstr "especificació de hash no vàlida"
@@ -2254,242 +2272,251 @@
msgid "unable to find all commit-graph files"
msgstr "no es poden trobar tots els fitxers del graf de comissions"
-#: commit-graph.c:745 commit-graph.c:782
+#: commit-graph.c:746 commit-graph.c:783
msgid "invalid commit position. commit-graph is likely corrupt"
msgstr ""
"posició de la comissió no vàlida. Probablement el graf de comissions està "
"malmès"
-#: commit-graph.c:766
+#: commit-graph.c:767
#, c-format
msgid "could not find commit %s"
msgstr "no s'ha pogut trobar la comissió %s"
-#: commit-graph.c:799
+#: commit-graph.c:800
+#, fuzzy
msgid "commit-graph requires overflow generation data but has none"
msgstr ""
+"el graf de comissions requereix dades de generació de desbordaments però no "
+"en té"
-#: commit-graph.c:1075 builtin/am.c:1340
+#: commit-graph.c:1105 builtin/am.c:1342
#, c-format
msgid "unable to parse commit %s"
msgstr "no s'ha pogut analitzar la comissió %s"
-#: commit-graph.c:1337 builtin/pack-objects.c:2897
+#: commit-graph.c:1367 builtin/pack-objects.c:3070
#, c-format
msgid "unable to get type of object %s"
msgstr "no s'ha pogut obtenir el tipus de l'objecte: %s"
-#: commit-graph.c:1368
+#: commit-graph.c:1398
msgid "Loading known commits in commit graph"
msgstr "S'estan carregant comissions conegudes al graf de comissions"
-#: commit-graph.c:1385
+#: commit-graph.c:1415
msgid "Expanding reachable commits in commit graph"
msgstr "S'estan expandint les comissions abastables al graf de comissions"
-#: commit-graph.c:1405
+#: commit-graph.c:1435
msgid "Clearing commit marks in commit graph"
msgstr "S'estan esborrant les marques de comissions al graf de comissions"
-#: commit-graph.c:1424
+#: commit-graph.c:1454
msgid "Computing commit graph topological levels"
msgstr "S'estan calculant els nivells topològics del graf de comissions"
-#: commit-graph.c:1477
+#: commit-graph.c:1507
msgid "Computing commit graph generation numbers"
msgstr "S'estan calculant els nombres de generació del graf de comissions"
-#: commit-graph.c:1558
+#: commit-graph.c:1588
msgid "Computing commit changed paths Bloom filters"
msgstr ""
"S'estan calculant els canvis les rutes de la comissió en els filtres Bloom"
-#: commit-graph.c:1635
+#: commit-graph.c:1665
msgid "Collecting referenced commits"
msgstr "S'estan recollint els objectes referenciats"
-#: commit-graph.c:1660
+#: commit-graph.c:1690
#, c-format
msgid "Finding commits for commit graph in %d pack"
msgid_plural "Finding commits for commit graph in %d packs"
msgstr[0] "S'estan cercant les comissions pel graf de comissions en %d paquet"
-msgstr[1] "S'estan cercant les comissions pel graf de comissions en %d paquets"
+msgstr[1] ""
+"S'estan cercant les comissions pel graf de comissions en %d paquets"
-#: commit-graph.c:1673
+#: commit-graph.c:1703
#, c-format
msgid "error adding pack %s"
msgstr "error en afegir paquet %s"
-#: commit-graph.c:1677
+#: commit-graph.c:1707
#, c-format
msgid "error opening index for %s"
msgstr "s'ha produït un error en obrir l'índex per «%s»"
-#: commit-graph.c:1714
+#: commit-graph.c:1744
msgid "Finding commits for commit graph among packed objects"
msgstr ""
"S'estan cercant les comissions pel graf de comissions entre els objectes "
"empaquetats"
-#: commit-graph.c:1732
+#: commit-graph.c:1762
msgid "Finding extra edges in commit graph"
msgstr "S'estan cercant les vores addicionals al graf de comissions"
-#: commit-graph.c:1781
+#: commit-graph.c:1811
msgid "failed to write correct number of base graph ids"
msgstr ""
"s'ha produït un error en escriure el nombre correcte d'ids base del graf"
-#: commit-graph.c:1812 midx.c:906
+#: commit-graph.c:1842 midx.c:1146
#, c-format
msgid "unable to create leading directories of %s"
msgstr "no s'han pogut crear els directoris inicials de «%s»"
-#: commit-graph.c:1825
+#: commit-graph.c:1855
msgid "unable to create temporary graph layer"
msgstr "no s'ha pogut crear una capa de graf temporal"
-#: commit-graph.c:1830
+#: commit-graph.c:1860
#, c-format
msgid "unable to adjust shared permissions for '%s'"
msgstr "no s'han pogut ajustar els permisos compartits per a «%s»"
-#: commit-graph.c:1887
+#: commit-graph.c:1917
#, c-format
msgid "Writing out commit graph in %d pass"
msgid_plural "Writing out commit graph in %d passes"
msgstr[0] "S'està escrivint el graf de comissions en %d pas"
msgstr[1] "S'està escrivint el graf de comissions en %d passos"
-#: commit-graph.c:1923
+#: commit-graph.c:1953
msgid "unable to open commit-graph chain file"
msgstr "no s'ha pogut obrir el fitxer d'encadenament del graf de comissions"
-#: commit-graph.c:1939
+#: commit-graph.c:1969
msgid "failed to rename base commit-graph file"
msgstr "no s'ha pogut canviar el nom del fitxer base del graf de comissions"
-#: commit-graph.c:1959
+#: commit-graph.c:1989
msgid "failed to rename temporary commit-graph file"
msgstr ""
"no s'ha pogut canviar el nom del fitxer temporal del graf de comissions"
-#: commit-graph.c:2092
+#: commit-graph.c:2122
msgid "Scanning merged commits"
msgstr "S'estan escanejant les comissions fusionades"
-#: commit-graph.c:2136
+#: commit-graph.c:2166
msgid "Merging commit-graph"
msgstr "S'està fusionant el graf de comissions"
-#: commit-graph.c:2244
+#: commit-graph.c:2274
msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
msgstr ""
"s'està intentant escriure un graf de comissions, però «core.commitGraph» "
"està desactivat"
-#: commit-graph.c:2351
+#: commit-graph.c:2381
msgid "too many commits to write graph"
msgstr "massa comissions per escriure un graf"
-#: commit-graph.c:2450
+#: commit-graph.c:2479
msgid "the commit-graph file has incorrect checksum and is likely corrupt"
msgstr ""
"el fitxer commit-graph (graf de comissions) té una suma de verificació "
"incorrecta i probablement és corrupte"
-#: commit-graph.c:2460
+#: commit-graph.c:2489
#, c-format
msgid "commit-graph has incorrect OID order: %s then %s"
msgstr "el gràfic de comissions té una ordre OID incorrecta; %s llavors %s"
-#: commit-graph.c:2470 commit-graph.c:2485
+#: commit-graph.c:2499 commit-graph.c:2514
#, c-format
msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
msgstr ""
-"el graf de comissions té un valor de «fanout» incorrecte: fanout[%d] = %u != "
-"%u"
+"el graf de comissions té un valor de «fanout» incorrecte: fanout[%d] = %u !="
+" %u"
-#: commit-graph.c:2477
+#: commit-graph.c:2506
#, c-format
msgid "failed to parse commit %s from commit-graph"
msgstr ""
"s'ha produït un error en analitzar la comissió %s del graf de comissions"
-#: commit-graph.c:2495
+#: commit-graph.c:2524
msgid "Verifying commits in commit graph"
msgstr "S'estan verificant les comissions al graf de comissions"
-#: commit-graph.c:2510
+#: commit-graph.c:2539
#, c-format
msgid "failed to parse commit %s from object database for commit-graph"
msgstr ""
"no s'han pogut analitzar la comissió %s de la base de dades d'objectes per "
"al graf de comissions"
-#: commit-graph.c:2517
+#: commit-graph.c:2546
#, c-format
msgid "root tree OID for commit %s in commit-graph is %s != %s"
msgstr ""
-"OID de l'arbre arrel per a comissions %s en el graf de comissions és %s != %s"
+"OID de l'arbre arrel per a comissions %s en el graf de comissions és %s != "
+"%s"
-#: commit-graph.c:2527
+#: commit-graph.c:2556
#, c-format
msgid "commit-graph parent list for commit %s is too long"
msgstr ""
"la llista de pares del graf de comissions per a la comissió %s és massa "
"llarga"
-#: commit-graph.c:2536
+#: commit-graph.c:2565
#, c-format
msgid "commit-graph parent for %s is %s != %s"
msgstr "el pare pel graf de comissions %s és %s != %s"
-#: commit-graph.c:2550
+#: commit-graph.c:2579
#, c-format
msgid "commit-graph parent list for commit %s terminates early"
msgstr "la llista pare del graf de comissions per %s acaba aviat"
-#: commit-graph.c:2555
+#: commit-graph.c:2584
#, c-format
msgid ""
-"commit-graph has generation number zero for commit %s, but non-zero elsewhere"
+"commit-graph has generation number zero for commit %s, but non-zero "
+"elsewhere"
msgstr ""
-"El graf de comissions té nombre de generació zero per a la comissió %s, però "
-"té no zero en altres llocs"
+"El graf de comissions té nombre de generació zero per a la comissió %s, però"
+" té no zero en altres llocs"
-#: commit-graph.c:2559
+#: commit-graph.c:2588
#, c-format
msgid ""
-"commit-graph has non-zero generation number for commit %s, but zero elsewhere"
+"commit-graph has non-zero generation number for commit %s, but zero "
+"elsewhere"
msgstr ""
"El graf de comissions té un nombre de generació diferent de zero per a "
"comissió %s però té zero en altres llocs"
-#: commit-graph.c:2576
+#: commit-graph.c:2605
#, c-format
msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
-msgstr "generació del graf de comissions per a la comissió %s és %<PRIuMAX> < %<PRIuMAX>"
+msgstr ""
+"generació del graf de comissions per a la comissió %s és %<PRIuMAX> < "
+"%<PRIuMAX>"
-#: commit-graph.c:2582
+#: commit-graph.c:2611
#, c-format
msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
msgstr ""
"La data d'enviament per a la comissió %s en el graf de comissions és "
"%<PRIuMAX> != %<PRIuMAX>"
-#: commit.c:52 sequencer.c:3088 builtin/am.c:371 builtin/am.c:416
-#: builtin/am.c:421 builtin/am.c:1419 builtin/am.c:2066 builtin/replace.c:457
+#: commit.c:53 sequencer.c:3105 builtin/am.c:373 builtin/am.c:418
+#: builtin/am.c:423 builtin/am.c:1421 builtin/am.c:2068 builtin/replace.c:457
#, c-format
msgid "could not parse %s"
msgstr "no s'ha pogut analitzar %s"
-#: commit.c:54
+#: commit.c:55
#, c-format
msgid "%s %s is not a commit!"
msgstr "%s %s no és una comissió!"
-#: commit.c:194
+#: commit.c:196
msgid ""
"Support for <GIT_DIR>/info/grafts is deprecated\n"
"and will be removed in a future Git version.\n"
@@ -2504,31 +2531,30 @@
"i s'eliminarà en una futura versió del Git.\n"
"\n"
"Si us plau useu «git replace --convert-graft-file»\n"
-"per convertir els grafs en substitució de referències. Desactiveu aquest "
-"missatge executant\n"
+"per convertir els grafs en substitució de referències. Desactiveu aquest missatge executant\n"
"«git config advice.graftFileDeprecated false»"
-#: commit.c:1237
+#: commit.c:1239
#, c-format
msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
msgstr "La comissió %s té una signatura GPG no fiable, suposadament de %s."
-#: commit.c:1241
+#: commit.c:1243
#, c-format
msgid "Commit %s has a bad GPG signature allegedly by %s."
msgstr "La comissió %s té una signatura GPG incorrecta suposadament de %s."
-#: commit.c:1244
+#: commit.c:1246
#, c-format
msgid "Commit %s does not have a GPG signature."
msgstr "La comissió %s no té signatura GPG."
-#: commit.c:1247
+#: commit.c:1249
#, c-format
msgid "Commit %s has a good GPG signature by %s\n"
msgstr "La comissió %s té una signatura GPG bona de %s\n"
-#: commit.c:1501
+#: commit.c:1503
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"
@@ -2543,7 +2569,7 @@
msgid "memory exhausted"
msgstr "memòria esgotada"
-#: config.c:126
+#: config.c:125
#, c-format
msgid ""
"exceeded maximum include depth (%d) while including\n"
@@ -2558,36 +2584,36 @@
"\t%s\n"
"Això pot ser degut a inclusions circulars."
-#: config.c:142
+#: config.c:141
#, c-format
msgid "could not expand include path '%s'"
msgstr "no s'ha pogut expandir el camí d'inclusió «%s»"
-#: config.c:153
+#: config.c:152
msgid "relative config includes must come from files"
msgstr "les inclusions de configuració relatives han de venir de fitxers"
-#: config.c:199
+#: config.c:201
msgid "relative config include conditionals must come from files"
msgstr ""
"els condicionals d'inclusió de configuració relatius han de venir de fitxers"
-#: config.c:396
+#: config.c:398
#, c-format
msgid "invalid config format: %s"
msgstr "format de configuració no vàlid: %s"
-#: config.c:400
+#: config.c:402
#, c-format
msgid "missing environment variable name for configuration '%.*s'"
-msgstr ""
+msgstr "falta el nom de la variable d'entorn per a la configuració «%.*s»"
-#: config.c:405
+#: config.c:407
#, c-format
msgid "missing environment variable '%s' for configuration '%.*s'"
-msgstr ""
+msgstr "falta la variable d'entorn «%s» per a la configuració «%.*s»"
-#: config.c:442
+#: config.c:443
#, c-format
msgid "key does not contain a section: %s"
msgstr "la clau no conté una secció: «%s»"
@@ -2597,302 +2623,306 @@
msgid "key does not contain variable name: %s"
msgstr "la clau no conté un nom de variable: «%s»"
-#: config.c:472 sequencer.c:2785
+#: config.c:470 sequencer.c:2802
#, c-format
msgid "invalid key: %s"
msgstr "clau no vàlida: %s"
-#: config.c:478
+#: config.c:475
#, c-format
msgid "invalid key (newline): %s"
msgstr "clau no vàlida (línia nova): %s"
-#: config.c:511
+#: config.c:495
msgid "empty config key"
msgstr "clau de configuració buida"
-#: config.c:529 config.c:541
+#: config.c:513 config.c:525
#, c-format
msgid "bogus config parameter: %s"
msgstr "paràmetre de configuració erroni: %s"
-#: config.c:555 config.c:572 config.c:579 config.c:588
+#: config.c:539 config.c:556 config.c:563 config.c:572
#, c-format
msgid "bogus format in %s"
msgstr "format erroni a %s"
-#: config.c:622
+#: config.c:606
#, c-format
msgid "bogus count in %s"
msgstr "comptatge erroni a %s"
-#: config.c:626
+#: config.c:610
#, c-format
msgid "too many entries in %s"
msgstr "hi ha massa arguments a %s"
-#: config.c:636
+#: config.c:620
#, c-format
msgid "missing config key %s"
msgstr "falta la clau de configuració %s"
-#: config.c:644
+#: config.c:628
#, c-format
msgid "missing config value %s"
msgstr "falta el valor de configuració %s"
-#: config.c:995
+#: config.c:979
#, c-format
msgid "bad config line %d in blob %s"
msgstr "línia de configuració %d errònia en el blob %s"
-#: config.c:999
+#: config.c:983
#, c-format
msgid "bad config line %d in file %s"
msgstr "línia de configuració %d errònia en el fitxer %s"
-#: config.c:1003
+#: config.c:987
#, c-format
msgid "bad config line %d in standard input"
msgstr "línia de configuració %d errònia en l'entrada estàndard"
-#: config.c:1007
+#: config.c:991
#, c-format
msgid "bad config line %d in submodule-blob %s"
msgstr "línia de configuració %d errònia en el blob de submòdul %s"
-#: config.c:1011
+#: config.c:995
#, c-format
msgid "bad config line %d in command line %s"
msgstr "línia de configuració %d errònia en la línia d'ordres %s"
-#: config.c:1015
+#: config.c:999
#, c-format
msgid "bad config line %d in %s"
msgstr "línia de configuració %d errònia en %s"
-#: config.c:1152
+#: config.c:1136
msgid "out of range"
msgstr "fora de rang"
-#: config.c:1152
+#: config.c:1136
msgid "invalid unit"
msgstr "unitat no vàlida"
-#: config.c:1153
+#: config.c:1137
#, c-format
msgid "bad numeric config value '%s' for '%s': %s"
msgstr "valor de configuració numèric erroni «%s» per «%s»: %s"
-#: config.c:1163
+#: config.c:1147
#, c-format
msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
msgstr "valor de configuració numèric erroni «%s» per «%s» en el blob %s: %s"
-#: config.c:1166
+#: config.c:1150
#, c-format
msgid "bad numeric config value '%s' for '%s' in file %s: %s"
-msgstr "valor de configuració numèric «%s» erroni per «%s» en el fitxer %s: %s"
+msgstr ""
+"valor de configuració numèric «%s» erroni per «%s» en el fitxer %s: %s"
-#: config.c:1169
+#: config.c:1153
#, c-format
msgid "bad numeric config value '%s' for '%s' in standard input: %s"
msgstr ""
-"valor de configuració numèric «%s» erroni per «%s» en l'entrada estàndard: %s"
+"valor de configuració numèric «%s» erroni per «%s» en l'entrada estàndard: "
+"%s"
-#: config.c:1172
+#: config.c:1156
#, c-format
msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
msgstr ""
"valor de configuració numèric «%s» erroni per «%s» en el blob de submòdul "
"%s: %s"
-#: config.c:1175
+#: config.c:1159
#, c-format
msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
msgstr ""
"valor de configuració numèric «%s» erroni per «%s» en la línia d'ordres %s: "
"%s"
-#: config.c:1178
+#: config.c:1162
#, c-format
msgid "bad numeric config value '%s' for '%s' in %s: %s"
msgstr "valor de configuració numèric incorrecte «%s» per «%s» en %s: %s"
-#: config.c:1257
+#: config.c:1241
#, c-format
msgid "bad boolean config value '%s' for '%s'"
msgstr "valor de configuració booleà erroni «%s» per a «%s»"
-#: config.c:1275
+#: config.c:1259
#, c-format
msgid "failed to expand user dir in: '%s'"
msgstr "s'ha produït un error en expandir el directori d'usuari en: «%s»"
-#: config.c:1284
+#: config.c:1268
#, c-format
msgid "'%s' for '%s' is not a valid timestamp"
msgstr "«%s» per a «%s» no és una marca de temps vàlida"
-#: config.c:1377
+#: config.c:1361
#, c-format
msgid "abbrev length out of range: %d"
msgstr "la longitud d'«abbrev» està fora de rang: %d"
-#: config.c:1391 config.c:1402
+#: config.c:1375 config.c:1386
#, c-format
msgid "bad zlib compression level %d"
msgstr "nivell de compressió de zlib incorrecte %d"
-#: config.c:1494
+#: config.c:1476
msgid "core.commentChar should only be one character"
msgstr "core.commentChar només hauria de ser un caràcter"
-#: config.c:1527
+#: config.c:1509
#, c-format
msgid "invalid mode for object creation: %s"
msgstr "mode de creació d'objecte no vàlid: %s"
-#: config.c:1599
+#: config.c:1581
#, c-format
msgid "malformed value for %s"
msgstr "valor no vàlid per a %s"
-#: config.c:1625
+#: config.c:1607
#, c-format
msgid "malformed value for %s: %s"
msgstr "valor no vàlid per a %s: %s"
-#: config.c:1626
+#: config.c:1608
msgid "must be one of nothing, matching, simple, upstream or current"
msgstr ""
"ha de ser un dels elements següents: nothing, matching, simple, upstream o "
"current"
-#: config.c:1687 builtin/pack-objects.c:3924
+#: config.c:1669 builtin/pack-objects.c:4053
#, c-format
msgid "bad pack compression level %d"
msgstr "nivell de compressió de paquet %d erroni"
-#: config.c:1809
+#: config.c:1792
#, c-format
msgid "unable to load config blob object '%s'"
msgstr "no s'ha pogut carregar l'objecte blob de configuració «%s»"
-#: config.c:1812
+#: config.c:1795
#, c-format
msgid "reference '%s' does not point to a blob"
msgstr "la referència «%s» no assenyala a un blob"
-#: config.c:1829
+#: config.c:1813
#, c-format
msgid "unable to resolve config blob '%s'"
msgstr "no s'ha pogut resoldre el blob de configuració: «%s»"
-#: config.c:1873
+#: config.c:1858
#, c-format
msgid "failed to parse %s"
msgstr "s'ha produït un error en analitzar %s"
-#: config.c:1929
+#: config.c:1914
msgid "unable to parse command-line config"
msgstr "no s'ha pogut analitzar la configuració de la línia d'ordres"
-#: config.c:2293
+#: config.c:2282
msgid "unknown error occurred while reading the configuration files"
-msgstr "un error desconegut ha ocorregut en llegir els fitxers de configuració"
+msgstr ""
+"un error desconegut ha ocorregut en llegir els fitxers de configuració"
-#: config.c:2467
+#: config.c:2456
#, c-format
msgid "Invalid %s: '%s'"
msgstr "%s no vàlid: «%s»"
-#: config.c:2512
+#: config.c:2501
#, c-format
msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
msgstr "valor «%d» a splitIndex.maxPercentChange ha d'estar entre 0 i 100"
-#: config.c:2558
+#: config.c:2547
#, c-format
msgid "unable to parse '%s' from command-line config"
msgstr "no s'ha pogut analitzar «%s» de la configuració de la línia d'ordres"
-#: config.c:2560
+#: config.c:2549
#, c-format
msgid "bad config variable '%s' in file '%s' at line %d"
msgstr "variable de configuració «%s» errònia en el fitxer «%s» a la línia %d"
-#: config.c:2644
+#: config.c:2633
#, c-format
msgid "invalid section name '%s'"
msgstr "nom de secció no vàlid «%s»"
-#: config.c:2676
+#: config.c:2665
#, c-format
msgid "%s has multiple values"
msgstr "%s té múltiples valors"
-#: config.c:2705
+#: config.c:2694
#, c-format
msgid "failed to write new configuration file %s"
msgstr "no es pot escriure un nou fitxer de configuració %s"
-#: config.c:2957 config.c:3283
+#: config.c:2946 config.c:3273
#, c-format
msgid "could not lock config file %s"
msgstr "no s'ha pogut blocar el fitxer de configuració %s"
-#: config.c:2968
+#: config.c:2957
#, c-format
msgid "opening %s"
msgstr "s'està obrint %s"
-#: config.c:3005 builtin/config.c:361
+#: config.c:2994 builtin/config.c:361
#, c-format
msgid "invalid pattern: %s"
msgstr "patró no vàlid: %s"
-#: config.c:3030
+#: config.c:3019
#, c-format
msgid "invalid config file %s"
msgstr "fitxer de configuració no vàlid %s"
-#: config.c:3043 config.c:3296
+#: config.c:3032 config.c:3286
#, c-format
msgid "fstat on %s failed"
msgstr "ha fallat «fstat» a %s"
-#: config.c:3054
+#: config.c:3043
#, c-format
-msgid "unable to mmap '%s'"
-msgstr "no s'ha pogut fer «mmap» «%s»"
+msgid "unable to mmap '%s'%s"
+msgstr "no s'ha pogut fer «mmap» «%s»%s"
-#: config.c:3063 config.c:3301
+#: config.c:3053 config.c:3291
#, c-format
msgid "chmod on %s failed"
msgstr "ha fallat chmod a %s"
-#: config.c:3148 config.c:3398
+#: config.c:3138 config.c:3388
#, c-format
msgid "could not write config file %s"
msgstr "no s'ha pogut escriure el fitxer de configuració «%s»"
-#: config.c:3182
+#: config.c:3172
#, c-format
msgid "could not set '%s' to '%s'"
msgstr "no s'ha pogut establir «%s» a «%s»"
-#: config.c:3184 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
+#: config.c:3174 builtin/remote.c:662 builtin/remote.c:860
+#: builtin/remote.c:868
#, c-format
msgid "could not unset '%s'"
msgstr "no s'ha pogut desassignar «%s»"
-#: config.c:3274
+#: config.c:3264
#, c-format
msgid "invalid section name: %s"
msgstr "nom de secció no vàlida: %s"
-#: config.c:3441
+#: config.c:3431
#, c-format
msgid "missing value for '%s'"
msgstr "falta el valor per «%s»"
@@ -2927,73 +2957,74 @@
msgid "expected flush after capabilities"
msgstr "s'esperava un buidatge després de les capacitats"
-#: connect.c:263
+#: connect.c:265
#, c-format
msgid "ignoring capabilities after first line '%s'"
msgstr "ignora les capacitats després de la primera línia «%s»"
-#: connect.c:284
+#: connect.c:286
msgid "protocol error: unexpected capabilities^{}"
msgstr "error de protocol: unexpected capabilities^{}"
-#: connect.c:306
+#: connect.c:308
#, c-format
msgid "protocol error: expected shallow sha-1, got '%s'"
msgstr ""
"s'ha produït un error de protocol: s'esperava shallow sha-1, s'ha rebut «%s»"
-#: connect.c:308
+#: connect.c:310
msgid "repository on the other end cannot be shallow"
msgstr "el repositori de l'altre extrem no pot ser shallow"
-#: connect.c:347
+#: connect.c:349
msgid "invalid packet"
msgstr "paquet no vàlid"
-#: connect.c:367
+#: connect.c:369
#, c-format
msgid "protocol error: unexpected '%s'"
msgstr "s'ha produït un error de protocol: no s'esperava «%s»"
-#: connect.c:497
+#: connect.c:499
#, c-format
msgid "unknown object format '%s' specified by server"
msgstr "format d'objecte «%s» especificat pel servidor desconegut"
-#: connect.c:526
+#: connect.c:528
#, c-format
msgid "invalid ls-refs response: %s"
msgstr "resposta de ls-refs no vàlida: %s"
-#: connect.c:530
+#: connect.c:532
msgid "expected flush after ref listing"
msgstr "s'esperava una neteja després del llistat de referències"
-#: connect.c:533
+#: connect.c:535
msgid "expected response end packet after ref listing"
-msgstr "s'esperava un final de resposta després del llistat de referències"
+msgstr ""
+"s'esperava un paquet de final de resposta després del llistat de referències"
-#: connect.c:666
+#: connect.c:670
#, c-format
msgid "protocol '%s' is not supported"
msgstr "el protocol «%s» no és compatible"
-#: connect.c:717
+#: connect.c:721
msgid "unable to set SO_KEEPALIVE on socket"
msgstr "no s'ha pogut establir SO_KEEPALIVE al sòcol"
-#: connect.c:757 connect.c:820
+#: connect.c:761 connect.c:824
#, c-format
msgid "Looking up %s ... "
msgstr "S'està cercant %s..."
-#: connect.c:761
+#: connect.c:765
#, c-format
msgid "unable to look up %s (port %s) (%s)"
msgstr "no s'ha pogut trobar %s (port %s) (%s)"
#. TRANSLATORS: this is the end of "Looking up %s ... "
-#: connect.c:765 connect.c:836
+#: connect.c:769 connect.c:840
#, c-format
msgid ""
"done.\n"
@@ -3002,7 +3033,7 @@
"fet.\n"
"S'està connectant a %s (port %s) ... "
-#: connect.c:787 connect.c:864
+#: connect.c:791 connect.c:868
#, c-format
msgid ""
"unable to connect to %s:\n"
@@ -3012,79 +3043,81 @@
"%s"
#. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:793 connect.c:870
+#: connect.c:797 connect.c:874
msgid "done."
msgstr "fet."
-#: connect.c:824
+#: connect.c:828
#, c-format
msgid "unable to look up %s (%s)"
msgstr "no s'ha pogut trobar %s (%s)"
-#: connect.c:830
+#: connect.c:834
#, c-format
msgid "unknown port %s"
msgstr "port desconegut %s"
-#: connect.c:967 connect.c:1299
+#: connect.c:971 connect.c:1303
#, c-format
msgid "strange hostname '%s' blocked"
msgstr "s'ha bloquejat el nom estrany d'amfitrió «%s»"
-#: connect.c:969
+#: connect.c:973
#, c-format
msgid "strange port '%s' blocked"
msgstr "s'ha bloquejat el port estrany «%s»"
-#: connect.c:979
+#: connect.c:983
#, c-format
msgid "cannot start proxy %s"
msgstr "no s'ha pogut iniciar servidor intermediari «%s»"
-#: connect.c:1050
+#: connect.c:1054
msgid "no path specified; see 'git help pull' for valid url syntax"
msgstr ""
-"no s'ha especificat un camí; vegeu «git help pull» per la sintaxi vàlida per "
-"URL"
+"no s'ha especificat un camí; vegeu «git help pull» per la sintaxi vàlida per"
+" URL"
-#: connect.c:1190
+#: connect.c:1194
msgid "newline is forbidden in git:// hosts and repo paths"
msgstr ""
+"la línia nova està prohibida en els servidors git:// i els camins de "
+"repositori"
-#: connect.c:1247
+#: connect.c:1251
msgid "ssh variant 'simple' does not support -4"
msgstr "la variant «simple» de ssh no és compatible amb -4"
-#: connect.c:1259
+#: connect.c:1263
msgid "ssh variant 'simple' does not support -6"
msgstr "la variant «simple» de ssh no és compatible amb -6"
-#: connect.c:1276
+#: connect.c:1280
msgid "ssh variant 'simple' does not support setting port"
msgstr "la variant «simple» de ssh no permet definir el port"
-#: connect.c:1388
+#: connect.c:1392
#, c-format
msgid "strange pathname '%s' blocked"
msgstr "s'ha bloquejat el nom de fitxer estrany «%s»"
-#: connect.c:1436
+#: connect.c:1440
msgid "unable to fork"
msgstr "no s'ha pogut bifurcar"
-#: connected.c:108 builtin/fsck.c:188 builtin/prune.c:45
+#: connected.c:109 builtin/fsck.c:189 builtin/prune.c:45
msgid "Checking connectivity"
msgstr "S'està comprovant la connectivitat"
-#: connected.c:120
+#: connected.c:122
msgid "Could not run 'git rev-list'"
msgstr "No s'ha pogut executar «git rev-list»"
-#: connected.c:144
+#: connected.c:146
msgid "failed write to rev-list"
msgstr "escriptura fallada al rev-list"
-#: connected.c:149
+#: connected.c:151
msgid "failed to close rev-list's stdin"
msgstr "s'ha produït un error en tancar l'stdin del rev-list"
@@ -3105,8 +3138,7 @@
"The file will have its original line endings in your working directory"
msgstr ""
"CRLF serà reemplaçat per LF en %s.\n"
-"El fitxer tindrà els seus terminadors de línia originals en el vostre "
-"directori de treball"
+"El fitxer tindrà els seus terminadors de línia originals en el vostre directori de treball"
#: convert.c:206
#, c-format
@@ -3120,8 +3152,7 @@
"The file will have its original line endings in your working directory"
msgstr ""
"LF serà reemplaçat per CRLF en %s.\n"
-"El fitxer tindrà els seus terminadors de línia originals en el vostre "
-"directori de treball"
+"El fitxer tindrà els seus terminadors de línia originals en el vostre directori de treball"
#: convert.c:273
#, c-format
@@ -3134,8 +3165,8 @@
"The file '%s' contains a byte order mark (BOM). Please use UTF-%.*s as "
"working-tree-encoding."
msgstr ""
-"El fitxer «%s» conté una marca d'ordre de byte (BOM). Utilitzeu UTF-%.*s com "
-"a codificacions d'arbre de treball."
+"El fitxer «%s» conté una marca d'ordre de byte (BOM). Utilitzeu UTF-%.*s com"
+" a codificacions d'arbre de treball."
#: convert.c:293
#, c-format
@@ -3145,11 +3176,12 @@
#: convert.c:295
#, c-format
msgid ""
-"The file '%s' is missing a byte order mark (BOM). Please use UTF-%sBE or UTF-"
-"%sLE (depending on the byte order) as working-tree-encoding."
+"The file '%s' is missing a byte order mark (BOM). Please use UTF-%sBE or "
+"UTF-%sLE (depending on the byte order) as working-tree-encoding."
msgstr ""
-"Falta una marca d'ordre de byte (BOM) al fitxer «%s». Useu UTF-%sBE o UTF-"
-"%sLE (depenent de l'ordre de byte) com a codificacions d'arbre de treball."
+"Falta una marca d'ordre de byte (BOM) al fitxer «%s». Useu UTF-%sBE o "
+"UTF-%sLE (depenent de l'ordre de byte) com a codificacions d'arbre de "
+"treball."
#: convert.c:408 convert.c:479
#, c-format
@@ -3194,25 +3226,25 @@
msgid "path name too long for external filter"
msgstr "el nom del camí és massa gran per al filtre extern"
-#: convert.c:934
+#: convert.c:935
#, c-format
msgid ""
"external filter '%s' is not available anymore although not all paths have "
"been filtered"
msgstr ""
-"el filtre extern «%s» ja no està disponible encara que no s'han filtrat tots "
-"els camins"
+"el filtre extern «%s» ja no està disponible encara que no s'han filtrat tots"
+" els camins"
-#: convert.c:1234
+#: convert.c:1236
msgid "true/false are no valid working-tree-encodings"
msgstr "cert/fals no són codificacions d'arbre de treball vàlides"
-#: convert.c:1414 convert.c:1447
+#: convert.c:1416 convert.c:1449
#, c-format
msgid "%s: clean filter '%s' failed"
msgstr "%s: el filtre de netejat «%s» ha fallat"
-#: convert.c:1490
+#: convert.c:1492
#, c-format
msgid "%s: smudge filter %s failed"
msgstr "%s: ha fallat el filtre smudge %s"
@@ -3232,17 +3264,17 @@
msgstr ""
"s'ha rebutjat treballar amb credencials que no tenen el camp de protocol"
-#: credential.c:394
+#: credential.c:395
#, c-format
msgid "url contains a newline in its %s component: %s"
msgstr "url conté una línia nova en %s component: %s"
-#: credential.c:438
+#: credential.c:439
#, c-format
msgid "url has no scheme: %s"
msgstr "l'url no té esquema: %s"
-#: credential.c:511
+#: credential.c:512
#, c-format
msgid "credential url cannot be parsed: %s"
msgstr "no s'ha pogut analitzar l'URL de credencials: %s"
@@ -3342,36 +3374,36 @@
msgid "Marked %d islands, done.\n"
msgstr "Marcades %d illes, fet.\n"
-#: diff-merges.c:80
+#: diff-merges.c:70
#, c-format
msgid "unknown value for --diff-merges: %s"
msgstr "valor desconegut per a --diff-merges: %s"
-#: diff-lib.c:538
+#: diff-lib.c:561
msgid "--merge-base does not work with ranges"
msgstr "--merge-base no funciona amb intervals"
-#: diff-lib.c:540
+#: diff-lib.c:563
msgid "--merge-base only works with commits"
msgstr "--merge-base només funciona amb comissions"
-#: diff-lib.c:557
+#: diff-lib.c:580
msgid "unable to get HEAD"
msgstr "no s'ha pogut obtenir HEAD"
-#: diff-lib.c:564
+#: diff-lib.c:587
msgid "no merge base found"
msgstr "no s'ha trobat una base de fusió"
-#: diff-lib.c:566
+#: diff-lib.c:589
msgid "multiple merge bases found"
msgstr "s'han trobat múltiples bases de fusió"
-#: diff-no-index.c:238
+#: diff-no-index.c:237
msgid "git diff --no-index [<options>] <path> <path>"
msgstr "git diff --no-index [<opcions>] <camí> <camí>"
-#: diff-no-index.c:263
+#: diff-no-index.c:262
msgid ""
"Not a git repository. Use --no-index to compare two paths outside a working "
"tree"
@@ -3379,19 +3411,19 @@
"No és un repositori Git. Useu --no-index per a comparar dos camins fora del "
"directori de treball"
-#: diff.c:156
+#: diff.c:157
#, c-format
msgid " Failed to parse dirstat cut-off percentage '%s'\n"
msgstr ""
" S'ha produït un error en analitzar el percentatge limitant de dirstat "
"«%s»\n"
-#: diff.c:161
+#: diff.c:162
#, c-format
msgid " Unknown dirstat parameter '%s'\n"
msgstr " Paràmetre de dirstat desconegut «%s»\n"
-#: diff.c:297
+#: diff.c:298
msgid ""
"color moved setting must be one of 'no', 'default', 'blocks', 'zebra', "
"'dimmed-zebra', 'plain'"
@@ -3399,31 +3431,31 @@
"el paràmetre de color en moviment ha de ser «no», «default», «blocks», "
"«zebra», «dimmed-zebra» o «plain»"
-#: diff.c:325
+#: diff.c:326
#, c-format
msgid ""
-"unknown color-moved-ws mode '%s', possible values are 'ignore-space-change', "
-"'ignore-space-at-eol', 'ignore-all-space', 'allow-indentation-change'"
+"unknown color-moved-ws mode '%s', possible values are 'ignore-space-change',"
+" 'ignore-space-at-eol', 'ignore-all-space', 'allow-indentation-change'"
msgstr ""
"el mode «%s» de «color-moved-ws» és desconegut, els valor possibles són "
"«ignore-space-change», «ignore-space-at-eol», «ignore-all-space», «allow-"
"indentation-change»"
-#: diff.c:333
+#: diff.c:334
msgid ""
"color-moved-ws: allow-indentation-change cannot be combined with other "
"whitespace modes"
msgstr ""
-"color-moved-ws: allow-indentation-change no es pot combinar amb altres modes "
-"d'espai en blanc"
+"color-moved-ws: allow-indentation-change no es pot combinar amb altres modes"
+" d'espai en blanc"
-#: diff.c:410
+#: diff.c:411
#, c-format
msgid "Unknown value for 'diff.submodule' config variable: '%s'"
msgstr ""
"Valor desconegut de la variable de configuració de «diff.submodule»: «%s»"
-#: diff.c:470
+#: diff.c:471
#, c-format
msgid ""
"Found errors in 'diff.dirstat' config variable:\n"
@@ -3432,35 +3464,49 @@
"S'han trobat errors en la variable de configuració «diff.dirstat»:\n"
"%s"
-#: diff.c:4278
+#: diff.c:4290
#, c-format
msgid "external diff died, stopping at %s"
msgstr "el diff external s'ha mort, s'està aturant a %s"
-#: diff.c:4630
+#: diff.c:4642
msgid "--name-only, --name-status, --check and -s are mutually exclusive"
msgstr "--name-only, --name-status, --check i -s són mútuament excloents"
-#: diff.c:4633
+#: diff.c:4645
msgid "-G, -S and --find-object are mutually exclusive"
msgstr "-G, -S and --find-object són mútuament excloents"
-#: diff.c:4712
+#: diff.c:4648
+msgid ""
+"-G and --pickaxe-regex are mutually exclusive, use --pickaxe-regex with -S"
+msgstr ""
+"-G i --pickaxe-regex són mútuament excloents, useu --pickaxe-regex amb -S"
+
+#: diff.c:4651
+msgid ""
+"--pickaxe-all and --find-object are mutually exclusive, use --pickaxe-all "
+"with -G and -S"
+msgstr ""
+"--pickaxe-all i --find-object són mútuament excloents, useu --pickaxe-all "
+"amb -G i -S"
+
+#: diff.c:4730
msgid "--follow requires exactly one pathspec"
msgstr "--follow requereix exactament una especificació de camí"
-#: diff.c:4760
+#: diff.c:4778
#, c-format
msgid "invalid --stat value: %s"
msgstr "valor --stat no vàlid: %s"
-#: diff.c:4765 diff.c:4770 diff.c:4775 diff.c:4780 diff.c:5308
-#: parse-options.c:197 parse-options.c:201 builtin/commit-graph.c:180
+#: diff.c:4783 diff.c:4788 diff.c:4793 diff.c:4798 diff.c:5326
+#: parse-options.c:217 parse-options.c:221
#, c-format
msgid "%s expects a numerical value"
msgstr "%s espera un valor numèric"
-#: diff.c:4797
+#: diff.c:4815
#, c-format
msgid ""
"Failed to parse --dirstat/-X option parameter:\n"
@@ -3469,200 +3515,199 @@
"S'ha produït un error en analitzar el paràmetre d'opció de --dirstat/-X:\n"
"%s"
-#: diff.c:4882
+#: diff.c:4900
#, c-format
msgid "unknown change class '%c' in --diff-filter=%s"
msgstr "classe de canvi «%c» desconeguda a --diff-filter=%s"
-#: diff.c:4906
+#: diff.c:4924
#, c-format
msgid "unknown value after ws-error-highlight=%.*s"
msgstr "valor desconegut després de ws-error-highlight=%.*s"
-#: diff.c:4920
+#: diff.c:4938
#, c-format
msgid "unable to resolve '%s'"
msgstr "no s'ha pogut resoldre «%s»"
-#: diff.c:4970 diff.c:4976
+#: diff.c:4988 diff.c:4994
#, c-format
msgid "%s expects <n>/<m> form"
msgstr "%s espera una forma <n>/<m>"
-#: diff.c:4988
+#: diff.c:5006
#, c-format
msgid "%s expects a character, got '%s'"
msgstr "%s esperava un caràcter, s'ha rebut «%s»"
-#: diff.c:5009
+#: diff.c:5027
#, c-format
msgid "bad --color-moved argument: %s"
msgstr "argument --color-moved incorrecte: %s"
-#: diff.c:5028
+#: diff.c:5046
#, c-format
msgid "invalid mode '%s' in --color-moved-ws"
msgstr "mode «%s» no vàlid en --color-moved-ws"
-#: diff.c:5068
-msgid ""
-"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
-"\"histogram\""
+#: diff.c:5086
+msgid "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and \"histogram\""
msgstr ""
"l'opció diff-algorithm accepta «myers», «minimal», «patience» i «histogram»"
-#: diff.c:5104 diff.c:5124
+#: diff.c:5122 diff.c:5142
#, c-format
msgid "invalid argument to %s"
msgstr "argument no vàlid a %s"
-#: diff.c:5228
+#: diff.c:5246
#, c-format
msgid "invalid regex given to -I: '%s'"
msgstr "expressió regular donada a -I: no vàlida: «%s»"
-#: diff.c:5277
+#: diff.c:5295
#, c-format
msgid "failed to parse --submodule option parameter: '%s'"
msgstr ""
"s'ha produït un error en analitzar el paràmetre d'opció de --submodule: «%s»"
-#: diff.c:5333
+#: diff.c:5351
#, c-format
msgid "bad --word-diff argument: %s"
msgstr "argument --word-diff incorrecte: %s"
-#: diff.c:5369
+#: diff.c:5387
msgid "Diff output format options"
msgstr "Opcions del format de sortida del diff"
-#: diff.c:5371 diff.c:5377
+#: diff.c:5389 diff.c:5395
msgid "generate patch"
msgstr "generant pedaç"
-#: diff.c:5374 builtin/log.c:179
+#: diff.c:5392 builtin/log.c:179
msgid "suppress diff output"
msgstr "omet la sortida de diferències"
-#: diff.c:5379 diff.c:5493 diff.c:5500
+#: diff.c:5397 diff.c:5511 diff.c:5518
msgid "<n>"
msgstr "<n>"
-#: diff.c:5380 diff.c:5383
+#: diff.c:5398 diff.c:5401
msgid "generate diffs with <n> lines context"
msgstr "genera diffs amb <n> línies de context"
-#: diff.c:5385
+#: diff.c:5403
msgid "generate the diff in raw format"
msgstr "genera el diff en format cru"
-#: diff.c:5388
+#: diff.c:5406
msgid "synonym for '-p --raw'"
msgstr "sinònim de «-p --raw»"
-#: diff.c:5392
+#: diff.c:5410
msgid "synonym for '-p --stat'"
msgstr "sinònim de «-p --stat»"
-#: diff.c:5396
+#: diff.c:5414
msgid "machine friendly --stat"
msgstr "llegible per màquina --stat"
-#: diff.c:5399
+#: diff.c:5417
msgid "output only the last line of --stat"
msgstr "mostra només l'última línia de --stat"
-#: diff.c:5401 diff.c:5409
+#: diff.c:5419 diff.c:5427
msgid "<param1,param2>..."
msgstr "<param1,param2>..."
-#: diff.c:5402
+#: diff.c:5420
msgid ""
"output the distribution of relative amount of changes for each sub-directory"
msgstr ""
"genera la distribució de la quantitat relativa de canvis per a cada "
"subdirectori"
-#: diff.c:5406
+#: diff.c:5424
msgid "synonym for --dirstat=cumulative"
msgstr "sinònim de --dirstat=cumulative"
-#: diff.c:5410
+#: diff.c:5428
msgid "synonym for --dirstat=files,param1,param2..."
msgstr "sinònim de --dirstat=files,param1,param2..."
-#: diff.c:5414
+#: diff.c:5432
msgid "warn if changes introduce conflict markers or whitespace errors"
msgstr ""
"avisa si els canvis introdueixen marcadors en conflicte o errors d'espai en "
"blanc"
-#: diff.c:5417
+#: diff.c:5435
msgid "condensed summary such as creations, renames and mode changes"
msgstr "resum condensat com ara creacions, canvis de nom i mode"
-#: diff.c:5420
+#: diff.c:5438
msgid "show only names of changed files"
msgstr "mostra només els noms de fitxers canviats"
-#: diff.c:5423
+#: diff.c:5441
msgid "show only names and status of changed files"
msgstr "mostra només els noms i l'estat dels fitxers canviats"
-#: diff.c:5425
+#: diff.c:5443
msgid "<width>[,<name-width>[,<count>]]"
msgstr "<amplada>[<amplada-nom>[,<recompte>]]"
-#: diff.c:5426
+#: diff.c:5444
msgid "generate diffstat"
msgstr "genera diffstat"
-#: diff.c:5428 diff.c:5431 diff.c:5434
+#: diff.c:5446 diff.c:5449 diff.c:5452
msgid "<width>"
msgstr "<amplada>"
-#: diff.c:5429
+#: diff.c:5447
msgid "generate diffstat with a given width"
msgstr "genera diffstat amb una amplada donada"
-#: diff.c:5432
+#: diff.c:5450
msgid "generate diffstat with a given name width"
msgstr "genera diffstat amb un nom d'amplada donat"
-#: diff.c:5435
+#: diff.c:5453
msgid "generate diffstat with a given graph width"
msgstr "genera diffstat amb una amplada de graf donada"
-#: diff.c:5437
+#: diff.c:5455
msgid "<count>"
msgstr "<comptador>"
-#: diff.c:5438
+#: diff.c:5456
msgid "generate diffstat with limited lines"
msgstr "genera diffstat amb línies limitades"
-#: diff.c:5441
+#: diff.c:5459
msgid "generate compact summary in diffstat"
msgstr "genera un resum compacte a diffstat"
-#: diff.c:5444
+#: diff.c:5462
msgid "output a binary diff that can be applied"
msgstr "diff amb sortida binària que pot ser aplicada"
-#: diff.c:5447
+#: diff.c:5465
msgid "show full pre- and post-image object names on the \"index\" lines"
msgstr ""
-"mostra els noms complets dels objectes pre i post-imatge a les línies «index»"
+"mostra els noms complets dels objectes pre i post-imatge a les línies "
+"«index»"
-#: diff.c:5449
+#: diff.c:5467
msgid "show colored diff"
msgstr "mostra un diff amb colors"
-#: diff.c:5450
+#: diff.c:5468
msgid "<kind>"
msgstr "<kind>"
-#: diff.c:5451
+#: diff.c:5469
msgid ""
"highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
"diff"
@@ -3670,7 +3715,7 @@
"ressalta els errors d'espai en blanc a les línies «context», «old» o «new» "
"al diff"
-#: diff.c:5454
+#: diff.c:5472
msgid ""
"do not munge pathnames and use NULs as output field terminators in --raw or "
"--numstat"
@@ -3678,255 +3723,255 @@
"no consolidis els noms de camí i utilitza NULs com a terminadors de camp de "
"sortida en --raw o --numstat"
-#: diff.c:5457 diff.c:5460 diff.c:5463 diff.c:5572
+#: diff.c:5475 diff.c:5478 diff.c:5481 diff.c:5590
msgid "<prefix>"
msgstr "<prefix>"
-#: diff.c:5458
+#: diff.c:5476
msgid "show the given source prefix instead of \"a/\""
msgstr "mostra el prefix d'origen donat en lloc de «a/»"
-#: diff.c:5461
+#: diff.c:5479
msgid "show the given destination prefix instead of \"b/\""
msgstr "mostra el prefix de destinació indicat en lloc de «b/»"
-#: diff.c:5464
+#: diff.c:5482
msgid "prepend an additional prefix to every line of output"
msgstr "afegir un prefix addicional per a cada línia de sortida"
-#: diff.c:5467
+#: diff.c:5485
msgid "do not show any source or destination prefix"
msgstr "no mostris cap prefix d'origen o destí"
-#: diff.c:5470
+#: diff.c:5488
msgid "show context between diff hunks up to the specified number of lines"
msgstr ""
"mostra el context entre trossos de diferència fins al nombre especificat de "
"línies"
-#: diff.c:5474 diff.c:5479 diff.c:5484
+#: diff.c:5492 diff.c:5497 diff.c:5502
msgid "<char>"
msgstr "<char>"
-#: diff.c:5475
+#: diff.c:5493
msgid "specify the character to indicate a new line instead of '+'"
msgstr ""
"especifiqueu el caràcter per a indicar una línia nova en comptes de «+»"
-#: diff.c:5480
+#: diff.c:5498
msgid "specify the character to indicate an old line instead of '-'"
msgstr ""
"especifiqueu el caràcter per a indicar una línia antiga en comptes de «-»"
-#: diff.c:5485
+#: diff.c:5503
msgid "specify the character to indicate a context instead of ' '"
msgstr "especifiqueu el caràcter per a indicar context en comptes de « »"
-#: diff.c:5488
+#: diff.c:5506
msgid "Diff rename options"
msgstr "Opcions de canvi de nom del diff"
-#: diff.c:5489
+#: diff.c:5507
msgid "<n>[/<m>]"
msgstr "<n>[/<m>]"
-#: diff.c:5490
+#: diff.c:5508
msgid "break complete rewrite changes into pairs of delete and create"
msgstr ""
"divideix els canvis de reescriptura completa en parells de suprimir i crear"
-#: diff.c:5494
+#: diff.c:5512
msgid "detect renames"
msgstr "detecta els canvis de noms"
-#: diff.c:5498
+#: diff.c:5516
msgid "omit the preimage for deletes"
msgstr "omet les preimatges per les supressions"
-#: diff.c:5501
+#: diff.c:5519
msgid "detect copies"
msgstr "detecta còpies"
-#: diff.c:5505
+#: diff.c:5523
msgid "use unmodified files as source to find copies"
msgstr "usa els fitxers no modificats com a font per trobar còpies"
-#: diff.c:5507
+#: diff.c:5525
msgid "disable rename detection"
msgstr "inhabilita la detecció de canvis de nom"
-#: diff.c:5510
+#: diff.c:5528
msgid "use empty blobs as rename source"
msgstr "usa els blobs buits com a font de canvi de nom"
-#: diff.c:5512
+#: diff.c:5530
msgid "continue listing the history of a file beyond renames"
msgstr "continua llistant l'històric d'un fitxer més enllà dels canvis de nom"
-#: diff.c:5515
+#: diff.c:5533
msgid ""
"prevent rename/copy detection if the number of rename/copy targets exceeds "
"given limit"
msgstr ""
-"Evita la detecció de canvi de nom/còpia si el nombre d'objectius de canvi de "
-"nom/còpia supera el límit indicat"
+"Evita la detecció de canvi de nom/còpia si el nombre d'objectius de canvi de"
+" nom/còpia supera el límit indicat"
-#: diff.c:5517
+#: diff.c:5535
msgid "Diff algorithm options"
msgstr "Opcions de l'algorisme Diff"
-#: diff.c:5519
+#: diff.c:5537
msgid "produce the smallest possible diff"
msgstr "produeix el diff més petit possible"
-#: diff.c:5522
+#: diff.c:5540
msgid "ignore whitespace when comparing lines"
msgstr "ignora els espais en blanc en comparar línies"
-#: diff.c:5525
+#: diff.c:5543
msgid "ignore changes in amount of whitespace"
msgstr "ignora els canvis en la quantitat d'espai en blanc"
-#: diff.c:5528
+#: diff.c:5546
msgid "ignore changes in whitespace at EOL"
msgstr "ignora els canvis d'espai en blanc al final de la línia"
-#: diff.c:5531
+#: diff.c:5549
msgid "ignore carrier-return at the end of line"
msgstr "ignora els retorns de línia al final de la línia"
-#: diff.c:5534
+#: diff.c:5552
msgid "ignore changes whose lines are all blank"
msgstr "ignora els canvis en línies que estan en blanc"
-#: diff.c:5536 diff.c:5558 diff.c:5561 diff.c:5606
+#: diff.c:5554 diff.c:5576 diff.c:5579 diff.c:5624
msgid "<regex>"
msgstr "<regex>"
-#: diff.c:5537
+#: diff.c:5555
msgid "ignore changes whose all lines match <regex>"
msgstr "ignora els canvis en les línies que coincideixen amb <regex>"
-#: diff.c:5540
+#: diff.c:5558
msgid "heuristic to shift diff hunk boundaries for easy reading"
msgstr ""
"heurística per a desplaçar els límits del tros de diferència per a una "
"lectura fàcil"
-#: diff.c:5543
+#: diff.c:5561
msgid "generate diff using the \"patience diff\" algorithm"
msgstr "genera diff usant l'algorisme «patience diff»"
-#: diff.c:5547
+#: diff.c:5565
msgid "generate diff using the \"histogram diff\" algorithm"
msgstr "genera diff usant l'algorisme «histogram diff»"
-#: diff.c:5549
+#: diff.c:5567
msgid "<algorithm>"
msgstr "<algorisme>"
-#: diff.c:5550
+#: diff.c:5568
msgid "choose a diff algorithm"
msgstr "trieu un algorisme per al diff"
-#: diff.c:5552
+#: diff.c:5570
msgid "<text>"
msgstr "<text>"
-#: diff.c:5553
+#: diff.c:5571
msgid "generate diff using the \"anchored diff\" algorithm"
msgstr "genera diff usant l'algorisme «anchored diff»"
-#: diff.c:5555 diff.c:5564 diff.c:5567
+#: diff.c:5573 diff.c:5582 diff.c:5585
msgid "<mode>"
msgstr "<mode>"
-#: diff.c:5556
+#: diff.c:5574
msgid "show word diff, using <mode> to delimit changed words"
msgstr ""
"mostra el diff de paraules usant <mode> per delimitar les paraules "
"modificades"
-#: diff.c:5559
+#: diff.c:5577
msgid "use <regex> to decide what a word is"
msgstr "utilitza <regex> per a decidir què és una paraula"
-#: diff.c:5562
+#: diff.c:5580
msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
msgstr "equivalent a --word-diff=color --word-diff-regex=<regex>"
-#: diff.c:5565
+#: diff.c:5583
msgid "moved lines of code are colored differently"
msgstr "les línies de codi que s'ha mogut s'acoloreixen diferent"
-#: diff.c:5568
+#: diff.c:5586
msgid "how white spaces are ignored in --color-moved"
msgstr "com s'ignoren els espais en blanc a --color-moved"
-#: diff.c:5571
+#: diff.c:5589
msgid "Other diff options"
msgstr "Altres opcions diff"
-#: diff.c:5573
+#: diff.c:5591
msgid "when run from subdir, exclude changes outside and show relative paths"
msgstr ""
-"quan s'executa des d'un subdirectori, exclou els canvis de fora i mostra els "
-"camins relatius"
+"quan s'executa des d'un subdirectori, exclou els canvis de fora i mostra els"
+" camins relatius"
-#: diff.c:5577
+#: diff.c:5595
msgid "treat all files as text"
msgstr "tracta tots els fitxers com a text"
-#: diff.c:5579
+#: diff.c:5597
msgid "swap two inputs, reverse the diff"
msgstr "intercanvia les dues entrades, inverteix el diff"
-#: diff.c:5581
+#: diff.c:5599
msgid "exit with 1 if there were differences, 0 otherwise"
msgstr "surt amb 1 si hi ha diferències, 0 en cas contrari"
-#: diff.c:5583
+#: diff.c:5601
msgid "disable all output of the program"
msgstr "inhabilita totes les sortides del programa"
-#: diff.c:5585
+#: diff.c:5603
msgid "allow an external diff helper to be executed"
msgstr "permet executar un ajudant de diff extern"
-#: diff.c:5587
+#: diff.c:5605
msgid "run external text conversion filters when comparing binary files"
msgstr ""
"executa els filtres externs de conversió de text en comparar fitxers binaris"
-#: diff.c:5589
+#: diff.c:5607
msgid "<when>"
msgstr "<quan>"
-#: diff.c:5590
+#: diff.c:5608
msgid "ignore changes to submodules in the diff generation"
msgstr "ignora els canvis als submòduls en la generació del diff"
-#: diff.c:5593
+#: diff.c:5611
msgid "<format>"
msgstr "<format>"
-#: diff.c:5594
+#: diff.c:5612
msgid "specify how differences in submodules are shown"
msgstr "especifiqueu com es mostren els canvis als submòduls"
-#: diff.c:5598
+#: diff.c:5616
msgid "hide 'git add -N' entries from the index"
msgstr "amaga les entrades «git add -N» de l'índex"
-#: diff.c:5601
+#: diff.c:5619
msgid "treat 'git add -N' entries as real in the index"
msgstr "tracta les entrades «git add -N» com a reals a l'índex"
-#: diff.c:5603
+#: diff.c:5621
msgid "<string>"
msgstr "<cadena>"
-#: diff.c:5604
+#: diff.c:5622
msgid ""
"look for differences that change the number of occurrences of the specified "
"string"
@@ -3934,7 +3979,7 @@
"cerca les diferències que canvien el nombre d'ocurrències de la cadena "
"especificada"
-#: diff.c:5607
+#: diff.c:5625
msgid ""
"look for differences that change the number of occurrences of the specified "
"regex"
@@ -3942,35 +3987,35 @@
"cerca les diferències que canvien el nombre d'ocurrències de l'expressió "
"regular especificada"
-#: diff.c:5610
+#: diff.c:5628
msgid "show all changes in the changeset with -S or -G"
msgstr "mostra tots els canvis amb el conjunt de canvis amb -S o -G"
-#: diff.c:5613
+#: diff.c:5631
msgid "treat <string> in -S as extended POSIX regular expression"
msgstr "tracta <cadena> a -S com a expressió regular POSIX ampliada"
-#: diff.c:5616
+#: diff.c:5634
msgid "control the order in which files appear in the output"
msgstr "controla l'ordre amb el qual els fitxers apareixen en la sortida"
-#: diff.c:5617 diff.c:5620
+#: diff.c:5635 diff.c:5638
msgid "<path>"
msgstr "<camí>"
-#: diff.c:5618
+#: diff.c:5636
msgid "show the change in the specified path first"
msgstr "mostra el canvi primer al camí especificat"
-#: diff.c:5621
+#: diff.c:5639
msgid "skip the output to the specified path"
msgstr "omet la sortida al camí especificat"
-#: diff.c:5623
+#: diff.c:5641
msgid "<object-id>"
msgstr "<id de l'objecte>"
-#: diff.c:5624
+#: diff.c:5642
msgid ""
"look for differences that change the number of occurrences of the specified "
"object"
@@ -3978,530 +4023,618 @@
"cerca les diferències que canvien el nombre d'ocurrències de l'objecte "
"especificat"
-#: diff.c:5626
+#: diff.c:5644
msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
-#: diff.c:5627
+#: diff.c:5645
msgid "select files by diff type"
msgstr "seleccioneu els fitxers per tipus de diff"
-#: diff.c:5629
+#: diff.c:5647
msgid "<file>"
msgstr "<fitxer>"
-#: diff.c:5630
+#: diff.c:5648
msgid "Output to a specific file"
msgstr "Sortida a un fitxer específic"
-#: diff.c:6287
-msgid "inexact rename detection was skipped due to too many files."
+#: diff.c:6306
+msgid "exhaustive rename detection was skipped due to too many files."
msgstr ""
-"s'ha omès la detecció de canvi de nom inexacta a causa de massa fitxers."
+"s'ha omès la detecció de canvi de nom exhaustiva perquè hi ha massa fitxers."
-#: diff.c:6290
+#: diff.c:6309
msgid "only found copies from modified paths due to too many files."
msgstr ""
-"només s'han trobat còpies des de camins modificats a causa de massa fitxers."
+"només s'han trobat còpies des de camins modificats perquè de massa fitxers."
-#: diff.c:6293
+#: diff.c:6312
#, c-format
msgid ""
"you may want to set your %s variable to at least %d and retry the command."
msgstr ""
-"potser voleu establir la vostra variable %s a almenys %d i tornar a intentar "
-"l'ordre."
+"potser voleu establir la vostra variable %s a almenys %d i tornar a intentar"
+" l'ordre."
#: diffcore-order.c:24
#, c-format
msgid "failed to read orderfile '%s'"
msgstr "s'ha produït un error en llegir el fitxer d'ordres «%s»"
-#: diffcore-rename.c:1418
+#: diffcore-rename.c:1564
msgid "Performing inexact rename detection"
msgstr "S'està realitzant una detecció inexacta de canvis de nom"
#: diffcore-rotate.c:29
-#, c-format
+#, c-format
msgid "No such path '%s' in the diff"
msgstr "No existeix el camí «%s» al diff"
-#: dir.c:578
+#: dir.c:593
#, c-format
msgid "pathspec '%s' did not match any file(s) known to git"
msgstr ""
"l'especificació de camí «%s» no ha coincidit amb cap fitxer que git conegui"
-#: dir.c:718 dir.c:747 dir.c:760
+#: dir.c:733 dir.c:762 dir.c:775
#, c-format
msgid "unrecognized pattern: '%s'"
msgstr "patró no reconegut: «%s»"
-#: dir.c:777 dir.c:791
+#: dir.c:790 dir.c:804
#, c-format
msgid "unrecognized negative pattern: '%s'"
msgstr "patró negatiu no reconegut: «%s»"
-#: dir.c:809
+#: dir.c:820
#, c-format
msgid "your sparse-checkout file may have issues: pattern '%s' is repeated"
msgstr ""
"el vostre fitxer «sparse-checkout» pot tenir problemes el patró «%s» es "
"repeteix"
-#: dir.c:819
+#: dir.c:830
msgid "disabling cone pattern matching"
msgstr "inhabilita la coincidència de patrons «cone»"
-#: dir.c:1206
+#: dir.c:1214
#, c-format
msgid "cannot use %s as an exclude file"
msgstr "no es pot usar %s com a fitxer d'exclusió"
-#: dir.c:2314
+#: dir.c:2464
#, c-format
msgid "could not open directory '%s'"
msgstr "no s'ha pogut obrir el directori «%s»"
-#: dir.c:2614
+#: dir.c:2766
msgid "failed to get kernel name and information"
msgstr "s'ha produït un error en obtenir el nombre i la informació del nucli"
-#: dir.c:2738
+#: dir.c:2890
msgid "untracked cache is disabled on this system or location"
msgstr ""
"la memòria cau no seguida està inhabilitada en aquest sistema o ubicació"
-#: dir.c:3543
+#: dir.c:3158
+msgid ""
+"No directory name could be guessed.\n"
+"Please specify a directory on the command line"
+msgstr ""
+"No s'ha pogut endevinar cap nom de directori.\n"
+"Especifiqueu un directori en la línia d'ordres"
+
+#: dir.c:3837
#, c-format
msgid "index file corrupt in repo %s"
msgstr "el fitxer d'índex al repositori %s és malmès"
-#: dir.c:3590 dir.c:3595
+#: dir.c:3884 dir.c:3889
#, c-format
msgid "could not create directories for %s"
msgstr "no s'han pogut crear directoris per %s"
-#: dir.c:3624
+#: dir.c:3918
#, c-format
msgid "could not migrate git directory from '%s' to '%s'"
msgstr "no s'ha pogut migrar el directori de «%s» a «%s»"
-#: editor.c:74
+#: editor.c:77
#, c-format
msgid "hint: Waiting for your editor to close the file...%c"
msgstr "consell: s'està esperant que el vostre editor tanqui el fitxer...%c"
-#: entry.c:179
+#: entry.c:177
msgid "Filtering content"
msgstr "S'està filtrant el contingut"
-#: entry.c:500
+#: entry.c:498
#, c-format
msgid "could not stat file '%s'"
msgstr "no s'ha pogut fer «stat» sobre el fitxer «%s»"
-#: environment.c:152
+#: environment.c:143
#, c-format
msgid "bad git namespace path \"%s\""
msgstr "camí d'espai de noms git incorrecte «%s»"
-#: environment.c:335
-#, c-format
-msgid "could not set GIT_DIR to '%s'"
-msgstr "no s'ha pogut establir GIT_DIR a «%s»"
-
#: exec-cmd.c:363
#, c-format
msgid "too many args to run %s"
msgstr "hi ha massa arguments per a executar %s"
-#: fetch-pack.c:182
+#: fetch-pack.c:193
msgid "git fetch-pack: expected shallow list"
msgstr "git fetch-pack: llista shallow esperada"
-#: fetch-pack.c:185
+#: fetch-pack.c:196
msgid "git fetch-pack: expected a flush packet after shallow list"
msgstr ""
-"git fetch-pack: s'esperava un paquet de buidatge després d'una llista shallow"
+"git fetch-pack: s'esperava un paquet de buidatge després d'una llista "
+"shallow"
-#: fetch-pack.c:196
+#: fetch-pack.c:207
msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
msgstr "git fetch-pack: s'esperava ACK/NAK, s'ha rebut un paquet de buidatge"
-#: fetch-pack.c:216
+#: fetch-pack.c:227
#, c-format
msgid "git fetch-pack: expected ACK/NAK, got '%s'"
msgstr "git fetch-pack: s'esperava ACK/NAK, s'ha rebut «%s»"
-#: fetch-pack.c:227
+#: fetch-pack.c:238
msgid "unable to write to remote"
msgstr "no s'ha pogut escriure al remot"
-#: fetch-pack.c:288
+#: fetch-pack.c:299
msgid "--stateless-rpc requires multi_ack_detailed"
msgstr "--stateless-rpc requereix multi_ack_detailed"
-#: fetch-pack.c:383 fetch-pack.c:1423
+#: fetch-pack.c:394 fetch-pack.c:1434
#, c-format
msgid "invalid shallow line: %s"
msgstr "línia de shallow no vàlida: %s"
-#: fetch-pack.c:389 fetch-pack.c:1429
+#: fetch-pack.c:400 fetch-pack.c:1440
#, c-format
msgid "invalid unshallow line: %s"
msgstr "línia d'unshallow no vàlida: %s"
-#: fetch-pack.c:391 fetch-pack.c:1431
+#: fetch-pack.c:402 fetch-pack.c:1442
#, c-format
msgid "object not found: %s"
msgstr "objecte no trobat: %s"
-#: fetch-pack.c:394 fetch-pack.c:1434
+#: fetch-pack.c:405 fetch-pack.c:1445
#, c-format
msgid "error in object: %s"
msgstr "error en objecte: %s"
-#: fetch-pack.c:396 fetch-pack.c:1436
+#: fetch-pack.c:407 fetch-pack.c:1447
#, c-format
msgid "no shallow found: %s"
msgstr "no s'ha trobat cap shallow: %s"
-#: fetch-pack.c:399 fetch-pack.c:1440
+#: fetch-pack.c:410 fetch-pack.c:1451
#, c-format
msgid "expected shallow/unshallow, got %s"
msgstr "s'esperava shallow/unshallow, s'ha rebut %s"
-#: fetch-pack.c:439
+#: fetch-pack.c:450
#, c-format
msgid "got %s %d %s"
msgstr "s'ha rebut %s %d %s"
-#: fetch-pack.c:456
+#: fetch-pack.c:467
#, c-format
msgid "invalid commit %s"
msgstr "comissió no vàlida %s"
-#: fetch-pack.c:487
+#: fetch-pack.c:498
msgid "giving up"
msgstr "s'abandona"
-#: fetch-pack.c:500 progress.c:339
+#: fetch-pack.c:511 progress.c:339
msgid "done"
msgstr "fet"
-#: fetch-pack.c:512
+#: fetch-pack.c:523
#, c-format
msgid "got %s (%d) %s"
msgstr "s'ha rebut %s (%d) %s"
-#: fetch-pack.c:548
+#: fetch-pack.c:559
#, c-format
msgid "Marking %s as complete"
msgstr "S'està marcant %s com a complet"
-#: fetch-pack.c:763
+#: fetch-pack.c:774
#, c-format
msgid "already have %s (%s)"
msgstr "ja es té %s (%s)"
-#: fetch-pack.c:849
+#: fetch-pack.c:860
msgid "fetch-pack: unable to fork off sideband demultiplexer"
-msgstr "fetch-pack: no s'ha pogut bifurcar del desmultiplexor de banda lateral"
+msgstr ""
+"fetch-pack: no s'ha pogut bifurcar del desmultiplexor de banda lateral"
-#: fetch-pack.c:857
+#: fetch-pack.c:868
msgid "protocol error: bad pack header"
msgstr "error de protocol: capçalera de paquet errònia"
-#: fetch-pack.c:951
+#: fetch-pack.c:962
#, c-format
msgid "fetch-pack: unable to fork off %s"
msgstr "fetch-pack: no es pot bifurcar de %s"
-#: fetch-pack.c:957
+#: fetch-pack.c:968
msgid "fetch-pack: invalid index-pack output"
-msgstr ""
+msgstr "fetch-pack: sortida d'index-pack no vàlida"
-#: fetch-pack.c:974
+#: fetch-pack.c:985
#, c-format
msgid "%s failed"
msgstr "%s ha fallat"
-#: fetch-pack.c:976
+#: fetch-pack.c:987
msgid "error in sideband demultiplexer"
msgstr "error en desmultiplexor de banda lateral"
-#: fetch-pack.c:1019
+#: fetch-pack.c:1030
#, c-format
msgid "Server version is %.*s"
msgstr "La versió del servidor és %.*s"
-#: fetch-pack.c:1027 fetch-pack.c:1033 fetch-pack.c:1036 fetch-pack.c:1042
-#: fetch-pack.c:1046 fetch-pack.c:1050 fetch-pack.c:1054 fetch-pack.c:1058
-#: fetch-pack.c:1062 fetch-pack.c:1066 fetch-pack.c:1070 fetch-pack.c:1074
-#: fetch-pack.c:1080 fetch-pack.c:1086 fetch-pack.c:1091 fetch-pack.c:1096
+#: fetch-pack.c:1038 fetch-pack.c:1044 fetch-pack.c:1047 fetch-pack.c:1053
+#: fetch-pack.c:1057 fetch-pack.c:1061 fetch-pack.c:1065 fetch-pack.c:1069
+#: fetch-pack.c:1073 fetch-pack.c:1077 fetch-pack.c:1081 fetch-pack.c:1085
+#: fetch-pack.c:1091 fetch-pack.c:1097 fetch-pack.c:1102 fetch-pack.c:1107
#, c-format
msgid "Server supports %s"
msgstr "El servidor accepta %s"
-#: fetch-pack.c:1029
+#: fetch-pack.c:1040
msgid "Server does not support shallow clients"
msgstr "El servidor no permet clients superficials"
-#: fetch-pack.c:1089
+#: fetch-pack.c:1100
msgid "Server does not support --shallow-since"
msgstr "El servidor no admet --shallow-since"
-#: fetch-pack.c:1094
+#: fetch-pack.c:1105
msgid "Server does not support --shallow-exclude"
msgstr "El servidor no admet --shallow-exclude"
-#: fetch-pack.c:1098
+#: fetch-pack.c:1109
msgid "Server does not support --deepen"
msgstr "El servidor no admet --deepen"
-#: fetch-pack.c:1100
+#: fetch-pack.c:1111
msgid "Server does not support this repository's object format"
-msgstr "El servidor no és compatible amb el format d'objecte d'aquest repositori"
+msgstr ""
+"El servidor no és compatible amb el format d'objecte d'aquest repositori"
-#: fetch-pack.c:1113
+#: fetch-pack.c:1124
msgid "no common commits"
msgstr "cap comissió en comú"
-#: fetch-pack.c:1122 fetch-pack.c:1469 builtin/clone.c:1238
+#: fetch-pack.c:1133 fetch-pack.c:1480 builtin/clone.c:1130
msgid "source repository is shallow, reject to clone."
msgstr "el repositori font és superficial, es rebutja clonar-ho."
-#: fetch-pack.c:1128 fetch-pack.c:1651
+#: fetch-pack.c:1139 fetch-pack.c:1671
msgid "git fetch-pack: fetch failed."
msgstr "git fetch-pack: l'obtenció ha fallat."
-#: fetch-pack.c:1242
+#: fetch-pack.c:1253
#, c-format
msgid "mismatched algorithms: client %s; server %s"
msgstr "algoritmes no coincidents: client %s; servidor %s"
-#: fetch-pack.c:1246
+#: fetch-pack.c:1257
#, c-format
msgid "the server does not support algorithm '%s'"
msgstr "el servidor no és compatible amb l'algorisme «%s»"
-#: fetch-pack.c:1279
+#: fetch-pack.c:1290
msgid "Server does not support shallow requests"
msgstr "El servidor no permet sol·licituds superficials"
-#: fetch-pack.c:1286
+#: fetch-pack.c:1297
msgid "Server supports filter"
msgstr "El servidor accepta filtratge"
-#: fetch-pack.c:1329 fetch-pack.c:2034
+#: fetch-pack.c:1340 fetch-pack.c:2053
msgid "unable to write request to remote"
msgstr "no s'ha pogut escriure la sol·licitud al remot"
-#: fetch-pack.c:1347
+#: fetch-pack.c:1358
#, c-format
msgid "error reading section header '%s'"
msgstr "error en llegir la capçalera de la secció «%s»"
-#: fetch-pack.c:1353
+#: fetch-pack.c:1364
#, c-format
msgid "expected '%s', received '%s'"
msgstr "s'esperava «%s», s'ha rebut «%s»"
-#: fetch-pack.c:1387
+#: fetch-pack.c:1398
#, c-format
msgid "unexpected acknowledgment line: '%s'"
msgstr "línia de confirmació inesperada: «%s»"
-#: fetch-pack.c:1392
+#: fetch-pack.c:1403
#, c-format
msgid "error processing acks: %d"
msgstr "s'ha produït un error en processar els acks: %d"
-#: fetch-pack.c:1402
+#: fetch-pack.c:1413
msgid "expected packfile to be sent after 'ready'"
msgstr "s'esperava l'enviament del fitxer de paquet després de «ready»"
-#: fetch-pack.c:1404
+#: fetch-pack.c:1415
msgid "expected no other sections to be sent after no 'ready'"
msgstr "s'esperava que no s'enviés cap altra secció després de no «ready»"
-#: fetch-pack.c:1445
+#: fetch-pack.c:1456
#, c-format
msgid "error processing shallow info: %d"
msgstr "s'ha produït un error en processar la informació superficial: %d"
-#: fetch-pack.c:1494
+#: fetch-pack.c:1505
#, c-format
msgid "expected wanted-ref, got '%s'"
msgstr "s'esperava wanted-ref, s'ha rebut «%s»"
-#: fetch-pack.c:1499
+#: fetch-pack.c:1510
#, c-format
msgid "unexpected wanted-ref: '%s'"
msgstr "wanted-ref inesperat: «%s»"
-#: fetch-pack.c:1504
+#: fetch-pack.c:1515
#, c-format
msgid "error processing wanted refs: %d"
msgstr "s'ha produït un error en processar les referències desitjades: %d"
-#: fetch-pack.c:1534
+#: fetch-pack.c:1545
msgid "git fetch-pack: expected response end packet"
msgstr "git fetch-pack: s'esperava un paquet de final de resposta"
-#: fetch-pack.c:1930
+#: fetch-pack.c:1949
msgid "no matching remote head"
msgstr "no hi ha cap HEAD remot coincident"
-#: fetch-pack.c:1953 builtin/clone.c:697
+#: fetch-pack.c:1972 builtin/clone.c:581
msgid "remote did not send all necessary objects"
msgstr "el remot no ha enviat tots els objectes necessaris"
-#: fetch-pack.c:2056
+#: fetch-pack.c:2075
msgid "unexpected 'ready' from remote"
msgstr "«ready» no esperat des del remot"
-#: fetch-pack.c:2079
+#: fetch-pack.c:2098
#, c-format
msgid "no such remote ref %s"
msgstr "no existeix la referència remota %s"
-#: fetch-pack.c:2082
+#: fetch-pack.c:2101
#, c-format
msgid "Server does not allow request for unadvertised object %s"
msgstr "El servidor no permet sol·licitar objectes no anunciats %s"
-#: gpg-interface.c:273
+#: gpg-interface.c:329 gpg-interface.c:449 gpg-interface.c:900
+#: gpg-interface.c:916
msgid "could not create temporary file"
msgstr "no s'ha pogut crear el fitxer temporal"
-#: gpg-interface.c:276
+#: gpg-interface.c:332 gpg-interface.c:452
#, c-format
msgid "failed writing detached signature to '%s'"
msgstr "s'ha produït un error en escriure la signatura separada a «%s»"
-#: gpg-interface.c:470
+#: gpg-interface.c:443
+#, fuzzy
+msgid ""
+"gpg.ssh.allowedSignersFile needs to be configured and exist for ssh "
+"signature verification"
+msgstr ""
+"gpg.ssh.allowedSignersFile s'ha de configurar i existeix per a la "
+"verificació de la signatura ssh"
+
+#: gpg-interface.c:467
+#, fuzzy
+msgid ""
+"ssh-keygen -Y find-principals/verify is needed for ssh signature "
+"verification (available in openssh version 8.2p1+)"
+msgstr ""
+"ssh-keygen -Y find-principals/verify és necessari per a la verificació de la"
+" signatura ssh (disponible a opensh versió 8.2p1+)"
+
+#: gpg-interface.c:521
+#, c-format, fuzzy
+msgid "ssh signing revocation file configured but not found: %s"
+msgstr ""
+"ssh signatura fitxer de revocació configurat però no trobat: percentatges"
+
+#: gpg-interface.c:574
+#, fuzzy, c-format
+msgid "bad/incompatible signature '%s'"
+msgstr "%s és incompatible amb %s"
+
+#: gpg-interface.c:733 gpg-interface.c:738
+#, fuzzy, c-format
+msgid "failed to get the ssh fingerprint for key '%s'"
+msgstr ""
+"s'ha produït un error en obtenir el remot per defecte pel submòdul «%s»"
+
+#: gpg-interface.c:760
+#, fuzzy
+msgid ""
+"either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured"
+msgstr "usuari.signingkey o gpg.ssh.defaultKeyCommand ha de ser configurat"
+
+#: gpg-interface.c:778
+#, c-format, fuzzy
+msgid "gpg.ssh.defaultKeycommand succeeded but returned no keys: %s %s"
+msgstr ""
+"gpg.ssh.defaultKeycommand ha tingut èxit però no ha retornat cap clau: "
+"percentatge"
+
+#: gpg-interface.c:784
+#, c-format, fuzzy
+msgid "gpg.ssh.defaultKeyCommand failed: %s %s"
+msgstr "gpg.ssh.defaultKeyCommand ha fallat: percentatge"
+
+#: gpg-interface.c:872
msgid "gpg failed to sign the data"
msgstr "gpg ha fallat en signar les dades"
+#: gpg-interface.c:893
+#, fuzzy
+msgid "user.signingkey needs to be set for ssh signing"
+msgstr "usuari.signingkey s'ha d'establir per signar ssh"
+
+#: gpg-interface.c:904
+#, fuzzy, c-format
+msgid "failed writing ssh signing key to '%s'"
+msgstr "s'ha produït un error en escriure la signatura separada a «%s»"
+
+#: gpg-interface.c:922
+#, fuzzy, c-format
+msgid "failed writing ssh signing key buffer to '%s'"
+msgstr "s'ha produït un error en escriure la signatura separada a «%s»"
+
+#: gpg-interface.c:940
+#, fuzzy
+msgid ""
+"ssh-keygen -Y sign is needed for ssh signing (available in openssh version "
+"8.2p1+)"
+msgstr ""
+"ssh-keygen el signe -Y és necessari per signar ssh (disponible a opensh "
+"versió 8.2p1+)"
+
+#: gpg-interface.c:952
+#, fuzzy, c-format
+msgid "failed reading ssh signing data buffer from '%s'"
+msgstr "s'ha produït un error en escriure la signatura separada a «%s»"
+
#: graph.c:98
#, c-format
-msgid "ignore invalid color '%.*s' in log.graphColors"
-msgstr "ignora el color no vàlid «%.*s» en log.graphColors"
+msgid "ignored invalid color '%.*s' in log.graphColors"
+msgstr "ignora el color no vàlid «%.*s» a log.graphColors"
#: grep.c:531
msgid ""
"given pattern contains NULL byte (via -f <file>). This is only supported "
"with -P under PCRE v2"
msgstr ""
-"el patró indicat conté byte NULL (via -f <fitxer>). Això només és compatible "
-"amb -P sota PCRE v2"
+"el patró indicat conté byte NULL (via -f <fitxer>). Això només és compatible"
+" amb -P sota PCRE v2"
-#: grep.c:1893
+#: grep.c:1907
#, c-format
msgid "'%s': unable to read %s"
msgstr "«%s»: no s'ha pogut llegir %s"
-#: grep.c:1910 setup.c:176 builtin/clone.c:416 builtin/diff.c:90
+#: grep.c:1924 setup.c:176 builtin/clone.c:302 builtin/diff.c:90
#: builtin/rm.c:136
#, c-format
msgid "failed to stat '%s'"
msgstr "s'ha produït un error en fer stat a «%s»"
-#: grep.c:1921
+#: grep.c:1935
#, c-format
msgid "'%s': short read"
msgstr "«%s»: lectura curta"
-#: help.c:23
+#: help.c:24
msgid "start a working area (see also: git help tutorial)"
msgstr "començar una àrea de treball (vegeu també: git help tutorial)"
-#: help.c:24
+#: help.c:25
msgid "work on the current change (see also: git help everyday)"
msgstr "treballar en el canvi actual (vegeu també: git help everyday)"
-#: help.c:25
+#: help.c:26
msgid "examine the history and state (see also: git help revisions)"
msgstr "examinar la història i l'estat (vegeu també: git help revisions)"
-#: help.c:26
+#: help.c:27
msgid "grow, mark and tweak your common history"
msgstr "fer créixer, marcar i ajustar la vostra història comuna"
-#: help.c:27
+#: help.c:28
msgid "collaborate (see also: git help workflows)"
msgstr "col·laborar (vegeu també: git help workflow)"
-#: help.c:31
+#: help.c:32
msgid "Main Porcelain Commands"
msgstr "Ordres principals de porcellana"
-#: help.c:32
+#: help.c:33
msgid "Ancillary Commands / Manipulators"
msgstr "Ordres auxiliars / manipuladors"
-#: help.c:33
+#: help.c:34
msgid "Ancillary Commands / Interrogators"
msgstr "Ordres auxiliars / interrogadors"
-#: help.c:34
+#: help.c:35
msgid "Interacting with Others"
msgstr "Interaccionar amb altres"
-#: help.c:35
+#: help.c:36
msgid "Low-level Commands / Manipulators"
msgstr "Ordres de baix nivell / Manipuladors"
-#: help.c:36
+#: help.c:37
msgid "Low-level Commands / Interrogators"
msgstr "Ordres de baix nivell / Interrogadors"
-#: help.c:37
+#: help.c:38
msgid "Low-level Commands / Syncing Repositories"
msgstr "Ordres de baix nivell / Sincronització de repositoris"
-#: help.c:38
+#: help.c:39
msgid "Low-level Commands / Internal Helpers"
msgstr "Ordres de baix nivell / Ajudants interns"
-#: help.c:300
+#: help.c:313
#, c-format
msgid "available git commands in '%s'"
msgstr "ordres de git disponibles en «%s»"
-#: help.c:307
+#: help.c:320
msgid "git commands available from elsewhere on your $PATH"
msgstr "ordres de git disponibles d'altres llocs en el vostre $PATH"
-#: help.c:316
+#: help.c:329
msgid "These are common Git commands used in various situations:"
-msgstr ""
-"Aquestes són ordres habituals del Git usades en diverses situacions:"
+msgstr "Aquestes són ordres habituals del Git usades en diverses situacions:"
-#: help.c:365 git.c:100
+#: help.c:378 git.c:100
#, c-format
msgid "unsupported command listing type '%s'"
msgstr "tipus de llistat de l'ordre no compatible «%s»"
-#: help.c:405
+#: help.c:418
msgid "The Git concept guides are:"
msgstr "Les guies de Git de conceptes són:"
-#: help.c:429
+#: help.c:442
msgid "See 'git help <command>' to read about a specific subcommand"
msgstr "Vegeu «git help <ordre>» per llegir sobre una subordre específica"
-#: help.c:434
+#: help.c:447
msgid "External commands"
msgstr "Ordres externes"
-#: help.c:449
+#: help.c:462
msgid "Command aliases"
msgstr "Àlies d'ordres"
-#: help.c:527
+#: help.c:543
#, c-format
msgid ""
"'%s' appears to be a git command, but we were not\n"
@@ -4510,33 +4643,38 @@
"«%s» sembla una ordre de git, però no hem pogut\n"
"executar-la. Pot ser que git-%s estigui malmès?"
-#: help.c:543 help.c:631
+#: help.c:565 help.c:662
#, c-format
msgid "git: '%s' is not a git command. See 'git --help'."
msgstr "git: «%s» no és una ordre de git. Vegeu «git --help»."
-#: help.c:591
+#: help.c:613
msgid "Uh oh. Your system reports no Git commands at all."
msgstr "Ai. El vostre sistema no informa de cap ordre de Git."
-#: help.c:613
+#: help.c:635
#, c-format
msgid "WARNING: You called a Git command named '%s', which does not exist."
msgstr ""
"ADVERTÈNCIA: Heu invocat una ordre de Git amb nom «%s», la qual no existeix."
-#: help.c:618
+#: help.c:640
#, c-format
msgid "Continuing under the assumption that you meant '%s'."
msgstr "El procés continuarà, pressuposant que volíeu dir «%s»."
-#: help.c:623
+#: help.c:646
+#, c-format, fuzzy
+msgid "Run '%s' instead? (y/N)"
+msgstr "Voleu executar «%s»? (s/N)"
+
+#: help.c:654
#, c-format
msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
msgstr ""
"El procés continuarà en %0.1f segons, pressuposant que volíeu dir «%s»."
-#: help.c:635
+#: help.c:666
msgid ""
"\n"
"The most similar command is"
@@ -4550,16 +4688,16 @@
"\n"
"Les ordres més similars són"
-#: help.c:675
+#: help.c:706
msgid "git version [<options>]"
msgstr "git version [<opcions>]"
-#: help.c:730
+#: help.c:761
#, c-format
msgid "%s: %s - %s"
msgstr "%s: %s - %s"
-#: help.c:734
+#: help.c:765
msgid ""
"\n"
"Did you mean this?"
@@ -4573,6 +4711,15 @@
"\n"
"Volíeu dir un d'aquests?"
+#: hook.c:27
+#, c-format
+msgid ""
+"The '%s' hook was ignored because it's not set as executable.\n"
+"You can disable this warning with `git config advice.ignoredHook false`."
+msgstr ""
+"El lligam «%s» s'ha ignorat perquè no s'ha establert com a executable.\n"
+"Podeu desactivar aquest avís amb «git config advice.ignoredHook false»."
+
#: ident.c:353
msgid "Author identity unknown\n"
msgstr "Identitat de l'autor desconeguda\n"
@@ -4639,7 +4786,7 @@
msgid "name consists only of disallowed characters: %s"
msgstr "el nom conté només caràcters no permesos: %s"
-#: ident.c:454 builtin/commit.c:647
+#: ident.c:454 builtin/commit.c:648
#, c-format
msgid "invalid date format: %s"
msgstr "format de data no vàlid: %s"
@@ -4654,7 +4801,7 @@
#: list-objects-filter-options.c:105
#, c-format
-msgid "'%s' for 'object:type=<type>' isnot a valid object type"
+msgid "'%s' for 'object:type=<type>' is not a valid object type"
msgstr "«%s» per a «object:type=<type>» no és un tipus d'objecte vàlid"
#: list-objects-filter-options.c:124
@@ -4678,8 +4825,8 @@
#: list-objects-filter-options.c:376
msgid "unable to upgrade repository format to support partial clone"
msgstr ""
-"no s'ha pogut actualitzar el format del repositori perquè sigui compatible amb "
-"un clonatge parcial"
+"no s'ha pogut actualitzar el format del repositori perquè sigui compatible "
+"amb un clonatge parcial"
#: list-objects-filter.c:532
#, c-format
@@ -4701,7 +4848,7 @@
msgid "entry '%s' in tree %s has blob mode, but is not a blob"
msgstr "l'entrada «%s» a l'arbre %s té mode blob, però no és un blob"
-#: list-objects.c:395
+#: list-objects.c:398
#, c-format
msgid "unable to load root tree for commit %s"
msgstr "no s'ha pogut carregar l'arrel de l'arbre per la comissió %s"
@@ -4722,8 +4869,8 @@
"Sembla que un altre procés de git s'està executant en aquest\n"
"repositori, per exemple, un editor obert per «git commit». \n"
"Assegureu-vos que tots els processos s'hagin acabat i\n"
-"llavors proveu de nou. Si encara falla, pot ser que un procés de\n"
-"git ha tingut un error:\n"
+"llavors proveu de nou. Si encara falla, pot ser un procés git\n"
+"ha fallat en aquest repositori abans:\n"
"elimineu el fitxer manualment per a continuar."
#: lockfile.c:160
@@ -4736,7 +4883,12 @@
msgid "invalid value '%s' for lsrefs.unborn"
msgstr "valor «%s» no vàlid per a «lsrefs.unborn»"
-#: ls-refs.c:167
+#: ls-refs.c:174
+#, fuzzy, c-format
+msgid "unexpected line: '%s'"
+msgstr "wanted-ref inesperat: «%s»"
+
+#: ls-refs.c:178
msgid "expected flush after ls-refs arguments"
msgstr "s'esperava una neteja després dels arguments ls-refs"
@@ -4744,39 +4896,40 @@
msgid "quoted CRLF detected"
msgstr "CRLF citat detectat"
-#: mailinfo.c:1254 builtin/am.c:176 builtin/mailinfo.c:46
+#: mailinfo.c:1254 builtin/am.c:177 builtin/mailinfo.c:46
#, c-format
msgid "bad action '%s' for '%s'"
msgstr "acció «%s» incorrecta per a «%s»"
-#: merge-ort.c:1116 merge-recursive.c:1205
+#: merge-ort.c:1584 merge-recursive.c:1211
#, c-format
msgid "Failed to merge submodule %s (not checked out)"
msgstr "S'ha produït un error en fusionar el submòdul %s (no està agafat)"
-#: merge-ort.c:1125 merge-recursive.c:1212
+#: merge-ort.c:1593 merge-recursive.c:1218
#, c-format
msgid "Failed to merge submodule %s (commits not present)"
-msgstr "S'ha produït un error en fusionar el submòdul %s (no hi ha comissions)"
+msgstr ""
+"S'ha produït un error en fusionar el submòdul %s (no hi ha comissions)"
-#: merge-ort.c:1134 merge-recursive.c:1219
+#: merge-ort.c:1602 merge-recursive.c:1225
#, c-format
msgid "Failed to merge submodule %s (commits don't follow merge-base)"
msgstr ""
"S'ha produït un error en fusionar el submòdul %s (les comissions no "
"segueixen merge-base)"
-#: merge-ort.c:1144 merge-ort.c:1151
+#: merge-ort.c:1612 merge-ort.c:1620
#, c-format
msgid "Note: Fast-forwarding submodule %s to %s"
msgstr "Nota: avançament ràpid del submòdul %s a %s"
-#: merge-ort.c:1172
+#: merge-ort.c:1642
#, c-format
msgid "Failed to merge submodule %s"
msgstr "s'ha produït un error en fusionar recursivament el submòdul «%s»"
-#: merge-ort.c:1179
+#: merge-ort.c:1649
#, c-format
msgid ""
"Failed to merge submodule %s, but a possible merge resolution exists:\n"
@@ -4785,7 +4938,7 @@
"S'ha produït un error en fusionar el submòdul %s, però existeix una solució possible:\n"
"%s\n"
-#: merge-ort.c:1183 merge-recursive.c:1273
+#: merge-ort.c:1653 merge-recursive.c:1281
#, c-format
msgid ""
"If this is correct simply add it to the index for example\n"
@@ -4802,7 +4955,7 @@
"\n"
"que acceptarà aquest suggeriment.\n"
-#: merge-ort.c:1196
+#: merge-ort.c:1666
#, c-format
msgid ""
"Failed to merge submodule %s, but multiple possible merges exist:\n"
@@ -4811,21 +4964,21 @@
"S'ha produït un error en fusionar el submòdul %s, però existeixen múltiples solucions possibles:\n"
"%s"
-#: merge-ort.c:1415 merge-recursive.c:1362
+#: merge-ort.c:1887 merge-recursive.c:1372
msgid "Failed to execute internal merge"
msgstr "S'ha produït un error en executar la fusió interna"
-#: merge-ort.c:1420 merge-recursive.c:1367
+#: merge-ort.c:1892 merge-recursive.c:1377
#, c-format
msgid "Unable to add %s to database"
msgstr "No s'ha pogut afegir %s a la base de dades"
-#: merge-ort.c:1427 merge-recursive.c:1400
+#: merge-ort.c:1899 merge-recursive.c:1410
#, c-format
msgid "Auto-merging %s"
msgstr "S'està autofusionant %s"
-#: merge-ort.c:1566 merge-recursive.c:2122
+#: merge-ort.c:2038 merge-recursive.c:2132
#, c-format
msgid ""
"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -4835,7 +4988,7 @@
"existent a %s en forma de canvi del nom del directori implícit, posant-hi "
"els camins següents a: %s."
-#: merge-ort.c:1576 merge-recursive.c:2132
+#: merge-ort.c:2048 merge-recursive.c:2142
#, c-format
msgid ""
"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -4845,7 +4998,7 @@
"camí a %s; els canvis del nom del directori implícits han intentat posar "
"aquests camins a: %s segons"
-#: merge-ort.c:1634
+#: merge-ort.c:2106
#, c-format
msgid ""
"CONFLICT (directory rename split): Unclear where to rename %s to; it was "
@@ -4853,10 +5006,10 @@
"majority of the files."
msgstr ""
"CONFLICTE (divisió de canvi de nom de directori): no està clar on col·locar "
-"%s; s'han canviat de nom a múltiples altres "
-"directoris, sense una destinació per a la majoria dels fitxers."
+"%s; s'han canviat de nom a múltiples altres directoris, sense una destinació"
+" per a la majoria dels fitxers."
-#: merge-ort.c:1788 merge-recursive.c:2468
+#: merge-ort.c:2260 merge-recursive.c:2478
#, c-format
msgid ""
"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
@@ -4865,137 +5018,149 @@
"AVÍS: S'està evitant aplicar el canvi de nom %s -> %s a %s, perquè %s ell "
"mateix ja havia canviat de nom."
-#: merge-ort.c:1932 merge-recursive.c:3244
+#: merge-ort.c:2400 merge-recursive.c:3261
#, c-format
msgid ""
"Path updated: %s added in %s inside a directory that was renamed in %s; "
"moving it to %s."
msgstr ""
-"Pedaç actualitzat: %s afegit a %s dins d'un directori que va canviar de nom a %s; "
-"movent-lo a %s."
+"Pedaç actualitzat: %s afegit a %s dins d'un directori que va canviar de nom "
+"a %s; movent-lo a %s."
-#: merge-ort.c:1939 merge-recursive.c:3251
+#: merge-ort.c:2407 merge-recursive.c:3268
#, c-format
msgid ""
-"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
-"%s; moving it to %s."
+"Path updated: %s renamed to %s in %s, inside a directory that was renamed in"
+" %s; moving it to %s."
msgstr ""
-"Pedaç actualitzat: %s canviat al nom %s a %s, dins d'un directori que va canviar de nom a %s; "
-"movent-lo a %s."
+"Pedaç actualitzat: %s canviat al nom %s a %s, dins d'un directori que va "
+"canviar de nom a %s; movent-lo a %s."
-#: merge-ort.c:1952 merge-recursive.c:3247
+#: merge-ort.c:2420 merge-recursive.c:3264
#, 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."
+"CONFLICT (file location): %s added in %s inside a directory that was renamed"
+" in %s, suggesting it should perhaps be moved to %s."
msgstr ""
-"CONFLICTE (ubicació del fitxer): %s afegit a %s dins d'un directori "
-"que va canviar de nom a %s suggerint que potser hauria de moure's "
-"a %s."
+"CONFLICTE (ubicació del fitxer): %s afegit a %s dins d'un directori que va "
+"canviar de nom a %s suggerint que potser hauria de moure's a %s."
-#: merge-ort.c:1960 merge-recursive.c:3254
+#: merge-ort.c:2428 merge-recursive.c:3271
#, 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 ""
"CONFLICTE (ubicació del fitxer): %s canviat al nom %s a %s, dins d'un "
-"directori que va canviar de nom a %s, suggerint que potser hauria de moure's "
-"a %s."
+"directori que va canviar de nom a %s, suggerint que potser hauria de moure's"
+" a %s."
-#: merge-ort.c:2103
+#: merge-ort.c:2584
#, c-format
msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
-msgstr "CONFLICTE (canvi de nom/canvi de nom): %s ara té el nom %s a %s i %s a %s."
+msgstr ""
+"CONFLICTE (canvi de nom/canvi de nom): %s ara té el nom %s a %s i %s a %s."
-#: merge-ort.c:2198
+#: merge-ort.c:2679
#, 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."
+"conflicts AND collides with another path; this may result in nested conflict"
+" markers."
msgstr ""
+"CONFLICTE (canvi de nom implicat en la col·lisió): el canvi de nom de %s -> "
+"%s té conflictes de contingut i col·lisiona amb un altre camí; això pot "
+"donar lloc a marcadors de conflicte imbricats."
-#: merge-ort.c:2217 merge-ort.c:2241
+#: merge-ort.c:2698 merge-ort.c:2722
#, c-format
msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
msgstr ""
-"CONFLICTE (canvi de nom/supressió): %s ara té el nom %s a %s, però s'ha suprimit "
-"a %s."
+"CONFLICTE (canvi de nom/supressió): %s ara té el nom %s a %s, però s'ha "
+"suprimit a %s."
-#: merge-ort.c:2550 merge-recursive.c:3002
+#: merge-ort.c:3212 merge-recursive.c:3022
#, c-format
msgid "cannot read object %s"
msgstr "no es pot llegir l'objecte %s"
-#: merge-ort.c:2553 merge-recursive.c:3005
+#: merge-ort.c:3215 merge-recursive.c:3025
#, c-format
msgid "object %s is not a blob"
msgstr "l'objecte %s no és un blob"
-#: merge-ort.c:2981
+#: merge-ort.c:3644
#, c-format
msgid ""
"CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
"%s instead."
msgstr ""
+"CONFLICTE (fitxer/directori): directori en el camí de %s des de %s; en "
+"comptes es mou a %s."
-#: merge-ort.c:3055
+#: merge-ort.c:3721
#, c-format
msgid ""
-"CONFLICT (distinct types): %s had different types on each side; renamed both "
-"of them so each can be recorded somewhere."
+"CONFLICT (distinct types): %s had different types on each side; renamed both"
+" of them so each can be recorded somewhere."
msgstr ""
+"CONFLICTE (tipus diferents): %s tenia diferents tipus a cada costat; se'ls "
+"ha canviat el nom per tal que cadascun pugui ser registrat en algun lloc."
-#: merge-ort.c:3062
+#: merge-ort.c:3728
#, c-format
msgid ""
"CONFLICT (distinct types): %s had different types on each side; renamed one "
"of them so each can be recorded somewhere."
msgstr ""
+"CONFLICTE (tipus diferents): %s té diferents tipus a cada costat; s'ha "
+"canviat el nom d'un d'ells per tal que cadascun pugui ser registrat en algun"
+" lloc."
-#: merge-ort.c:3162 merge-recursive.c:3081
+#: merge-ort.c:3819 merge-recursive.c:3101
msgid "content"
msgstr "contingut"
-#: merge-ort.c:3164 merge-recursive.c:3085
+#: merge-ort.c:3821 merge-recursive.c:3105
msgid "add/add"
msgstr "afegiment/afegiment"
-#: merge-ort.c:3166 merge-recursive.c:3130
+#: merge-ort.c:3823 merge-recursive.c:3150
msgid "submodule"
msgstr "submòdul"
-#: merge-ort.c:3168 merge-recursive.c:3131
+#: merge-ort.c:3825 merge-recursive.c:3151
#, c-format
msgid "CONFLICT (%s): Merge conflict in %s"
msgstr "CONFLICTE (%s): Conflicte de fusió en %s"
-#: merge-ort.c:3198
+#: merge-ort.c:3856
#, c-format
msgid ""
"CONFLICT (modify/delete): %s deleted in %s and modified in %s. Version %s "
"of %s left in tree."
msgstr ""
-"CONFLICTE: (modificació/supressió): %s suprimit a %s i modificat a %s. La versió %s de %s "
-"s'ha deixat en l'arbre."
+"CONFLICTE: (modificació/supressió): %s suprimit a %s i modificat a %s. La "
+"versió %s de %s s'ha deixat en l'arbre."
-#: merge-ort.c:3433
-#, c-format
+#: merge-ort.c:4152
+#, fuzzy, c-format
msgid ""
"Note: %s not up to date and in way of checking out conflicted version; old "
"copy renamed to %s"
msgstr ""
+"Nota: %s no està actualitzat i en forma de comprovar la versió en conflicte;"
+" còpia antiga reanomenada a %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:3730
+#: merge-ort.c:4521
#, c-format
msgid "collecting merge info failed for trees %s, %s, %s"
-msgstr "ha fallat la recollida de la informació de fusió per als arbres %s, %s, %s"
+msgstr ""
+"ha fallat la recollida de la informació de fusió per als arbres %s, %s, %s"
-#: merge-ort-wrappers.c:13 merge-recursive.c:3699
+#: merge-ort-wrappers.c:13 merge-recursive.c:3716
#, c-format
msgid ""
"Your local changes to the following files would be overwritten by merge:\n"
@@ -5004,110 +5169,111 @@
"Els canvis locals als fitxers següents se sobreescriuran per la fusió:\n"
" %s"
-#: merge-ort-wrappers.c:33 merge-recursive.c:3465 builtin/merge.c:402
+#: merge-ort-wrappers.c:33 merge-recursive.c:3482 builtin/merge.c:403
msgid "Already up to date."
msgstr "Ja està al dia."
-#: merge-recursive.c:356
+#: merge-recursive.c:353
msgid "(bad commit)\n"
msgstr "(comissió errònia)\n"
-#: merge-recursive.c:379
+#: merge-recursive.c:381
#, c-format
msgid "add_cacheinfo failed for path '%s'; merge aborting."
msgstr "add_cacheinfo ha fallat per al camí «%s»; interrompent la fusió."
-#: merge-recursive.c:388
+#: merge-recursive.c:390
#, c-format
msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
msgstr ""
"add_cacheinfo ha fallat al refrescar el camí «%s»; interrompent la fusió."
-#: merge-recursive.c:876
+#: merge-recursive.c:881
#, c-format
msgid "failed to create path '%s'%s"
msgstr "s'ha produït un error en crear el camí «%s»%s"
-#: merge-recursive.c:887
+#: merge-recursive.c:892
#, c-format
msgid "Removing %s to make room for subdirectory\n"
msgstr "S'està eliminant %s per a fer espai per al subdirectori\n"
-#: merge-recursive.c:901 merge-recursive.c:920
+#: merge-recursive.c:906 merge-recursive.c:925
msgid ": perhaps a D/F conflict?"
msgstr ": potser un conflicte D/F?"
-#: merge-recursive.c:910
+#: merge-recursive.c:915
#, c-format
msgid "refusing to lose untracked file at '%s'"
msgstr "s'està refusant perdre el fitxer no seguit a «%s»"
-#: merge-recursive.c:951 builtin/cat-file.c:41
+#: merge-recursive.c:956 builtin/cat-file.c:41
#, c-format
msgid "cannot read object %s '%s'"
msgstr "no es pot llegir l'objecte %s «%s»"
-#: merge-recursive.c:956
+#: merge-recursive.c:961
#, c-format
msgid "blob expected for %s '%s'"
msgstr "blob esperat per a %s «%s»"
-#: merge-recursive.c:981
+#: merge-recursive.c:986
#, c-format
msgid "failed to open '%s': %s"
msgstr "s'ha produït un error en obrir «%s»: %s"
-#: merge-recursive.c:992
+#: merge-recursive.c:997
#, c-format
msgid "failed to symlink '%s': %s"
msgstr "s'ha produït un error en fer l'enllaç simbòlic «%s»: %s"
-#: merge-recursive.c:997
+#: merge-recursive.c:1002
#, c-format
msgid "do not know what to do with %06o %s '%s'"
msgstr "no se sap què fer amb %06o %s «%s»"
-#: merge-recursive.c:1227 merge-recursive.c:1239
+#: merge-recursive.c:1233 merge-recursive.c:1246
#, c-format
msgid "Fast-forwarding submodule %s to the following commit:"
msgstr "Avançament ràpid del submòdul %s a la següent comissió:"
-#: merge-recursive.c:1230 merge-recursive.c:1242
+#: merge-recursive.c:1236 merge-recursive.c:1249
#, c-format
msgid "Fast-forwarding submodule %s"
msgstr "Avançament ràpid al submòdul %s"
-#: merge-recursive.c:1265
+#: merge-recursive.c:1273
#, c-format
msgid "Failed to merge submodule %s (merge following commits not found)"
msgstr ""
-"Ha fallat en fusionar el submòdul %s (no s'ha trobat les comissions següents)"
+"Ha fallat en fusionar el submòdul %s (no s'ha trobat les comissions "
+"següents)"
-#: merge-recursive.c:1269
+#: merge-recursive.c:1277
#, c-format
msgid "Failed to merge submodule %s (not fast-forward)"
msgstr ""
"S'ha produït un error en fusionar el submòdul %s (sense avançament ràpid)"
-#: merge-recursive.c:1270
+#: merge-recursive.c:1278
msgid "Found a possible merge resolution for the submodule:\n"
msgstr "S'ha trobat una possible resolució de fusió pel submòdul:\n"
-#: merge-recursive.c:1282
+#: merge-recursive.c:1290
#, c-format
msgid "Failed to merge submodule %s (multiple merges found)"
msgstr ""
"S'ha produït un error en fusionar el submòdul %s (s'han trobat múltiples "
"fusions)"
-#: merge-recursive.c:1424
+#: merge-recursive.c:1434
#, c-format
msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
msgstr ""
"Error: s'està refusant perdre el fitxer no seguit a %s; en comptes s'ha "
"escrit a %s."
-#: merge-recursive.c:1496
+#: merge-recursive.c:1506
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5116,7 +5282,7 @@
"CONFLICTE: (%s/supressió): %s suprimit en %s i %s en %s. La versió %s de %s "
"s'ha deixat en l'arbre."
-#: merge-recursive.c:1501
+#: merge-recursive.c:1511
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5125,7 +5291,7 @@
"CONFLICTE: (%s/supressió): %s suprimit en %s i %s a %s en %s. La versió %s "
"de %s s'ha deixat en l'arbre."
-#: merge-recursive.c:1508
+#: merge-recursive.c:1518
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5134,7 +5300,7 @@
"CONFLICTE: (%s/supressió): %s suprimit en %s i %s en %s. La versió %s de %s "
"s'ha deixat en l'arbre a %s."
-#: merge-recursive.c:1513
+#: merge-recursive.c:1523
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5143,66 +5309,66 @@
"CONFLICTE: (%s/supressió): %s suprimit en %s i %s a %s en %s. La versió %s "
"de %s s'ha deixat en l'arbre a %s."
-#: merge-recursive.c:1548
+#: merge-recursive.c:1558
msgid "rename"
msgstr "canvi de nom"
-#: merge-recursive.c:1548
+#: merge-recursive.c:1558
msgid "renamed"
msgstr "canviat de nom"
-#: merge-recursive.c:1599 merge-recursive.c:2505 merge-recursive.c:3158
+#: merge-recursive.c:1609 merge-recursive.c:2515 merge-recursive.c:3178
#, c-format
msgid "Refusing to lose dirty file at %s"
msgstr "S'està refusant a perdre el fitxer brut a %s"
-#: merge-recursive.c:1609
+#: merge-recursive.c:1619
#, c-format
msgid "Refusing to lose untracked file at %s, even though it's in the way."
msgstr ""
"S'està refusant perdre el fitxer no seguit a «%s», malgrat que està en mig "
"de l'operació."
-#: merge-recursive.c:1667
+#: merge-recursive.c:1677
#, c-format
msgid "CONFLICT (rename/add): Rename %s->%s in %s. Added %s in %s"
msgstr ""
"CONFLICTE (canvi de nom/afegiment): Canvi de nom %s->%s a %s. S'ha afegit "
"%s a %s"
-#: merge-recursive.c:1698
+#: merge-recursive.c:1708
#, c-format
msgid "%s is a directory in %s adding as %s instead"
msgstr "%s és un directori en %s; s'està afegint com a %s en lloc d'això"
-#: merge-recursive.c:1703
+#: merge-recursive.c:1713
#, c-format
msgid "Refusing to lose untracked file at %s; adding as %s instead"
msgstr ""
"S'està refusant perdre el fitxer no seguit a %s; en comptes, s'està afegint "
"com a %s"
-#: merge-recursive.c:1730
+#: merge-recursive.c:1740
#, c-format
msgid ""
-"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
-"\"->\"%s\" in \"%s\"%s"
+"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename "
+"\"%s\"->\"%s\" in \"%s\"%s"
msgstr ""
"CONFLICTE (canvi de nom/canvi de nom): Canvi de nom «%s»->«%s» en la branca "
"«%s» canvi de nom «%s»->«%s» en «%s»%s"
-#: merge-recursive.c:1735
+#: merge-recursive.c:1745
msgid " (left unresolved)"
msgstr " (deixat sense resolució)"
-#: merge-recursive.c:1827
+#: merge-recursive.c:1837
#, c-format
msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
msgstr ""
"CONFLICTE (canvi de nom/canvi de nom): Canvi de nom %s->%s en %s. Canvi de "
"nom %s->%s en %s"
-#: merge-recursive.c:2090
+#: merge-recursive.c:2100
#, c-format
msgid ""
"CONFLICT (directory rename split): Unclear where to place %s because "
@@ -5213,90 +5379,91 @@
"%s perquè el directori %s s'han canviat de nom a múltiples altres "
"directoris, sense una destinació per a la majoria dels fitxers."
-#: merge-recursive.c:2224
+#: merge-recursive.c:2234
#, c-format
msgid ""
-"CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
-">%s in %s"
+"CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory "
+"%s->%s in %s"
msgstr ""
"CONFLICTE (canvi de nom/canvi de nom): canvi de nom %s->%s en %s. Canvi de "
"nom de directori %s->%s en %s"
-#: merge-recursive.c:3069
+#: merge-recursive.c:3089
msgid "modify"
msgstr "modificació"
-#: merge-recursive.c:3069
+#: merge-recursive.c:3089
msgid "modified"
msgstr "modificat"
-#: merge-recursive.c:3108
+#: merge-recursive.c:3128
#, c-format
msgid "Skipped %s (merged same as existing)"
msgstr "S'ha omès %s (el fusionat és igual a l'existent)"
-#: merge-recursive.c:3161
+#: merge-recursive.c:3181
#, c-format
msgid "Adding as %s instead"
msgstr "S'està afegint com a %s en lloc d'això"
-#: merge-recursive.c:3368
+#: merge-recursive.c:3385
#, c-format
msgid "Removing %s"
msgstr "S'està eliminant %s"
-#: merge-recursive.c:3391
+#: merge-recursive.c:3408
msgid "file/directory"
msgstr "fitxer/directori"
-#: merge-recursive.c:3396
+#: merge-recursive.c:3413
msgid "directory/file"
msgstr "directori/fitxer"
-#: merge-recursive.c:3403
+#: merge-recursive.c:3420
#, c-format
-msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
+msgid ""
+"CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
msgstr ""
-"CONFLICTE (%s): Hi ha un directori amb nom %s en %s. S'està afegint %s com a "
-"%s"
+"CONFLICTE (%s): Hi ha un directori amb nom %s en %s. S'està afegint %s com a"
+" %s"
-#: merge-recursive.c:3412
+#: merge-recursive.c:3429
#, c-format
msgid "Adding %s"
msgstr "S'està afegint %s"
-#: merge-recursive.c:3421
+#: merge-recursive.c:3438
#, c-format
msgid "CONFLICT (add/add): Merge conflict in %s"
msgstr "CONFLICTE (afegiment/afegiment): Conflicte de fusió en %s"
-#: merge-recursive.c:3474
+#: merge-recursive.c:3491
#, c-format
msgid "merging of trees %s and %s failed"
msgstr "la fusió dels arbres %s i %s ha fallat"
-#: merge-recursive.c:3568
+#: merge-recursive.c:3585
msgid "Merging:"
msgstr "S'està fusionant:"
-#: merge-recursive.c:3581
+#: merge-recursive.c:3598
#, c-format
msgid "found %u common ancestor:"
msgid_plural "found %u common ancestors:"
msgstr[0] "s'ha trobat %u avantpassat en comú:"
msgstr[1] "s'han trobat %u avantpassats en comú:"
-#: merge-recursive.c:3631
+#: merge-recursive.c:3648
msgid "merge returned no commit"
msgstr "la fusió no ha retornat cap comissió"
-#: merge-recursive.c:3796
+#: merge-recursive.c:3816
#, c-format
msgid "Could not parse object '%s'"
msgstr "No s'ha pogut analitzar l'objecte «%s»"
-#: merge-recursive.c:3814 builtin/merge.c:716 builtin/merge.c:900
-#: builtin/stash.c:473
+#: merge-recursive.c:3834 builtin/merge.c:718 builtin/merge.c:904
+#: builtin/stash.c:489
msgid "Unable to write index."
msgstr "No s'ha pogut escriure l'índex."
@@ -5304,187 +5471,237 @@
msgid "failed to read the cache"
msgstr "s'ha produït un error en llegir la memòria cau"
-#: merge.c:109 rerere.c:704 builtin/am.c:1931 builtin/am.c:1965
-#: builtin/checkout.c:595 builtin/checkout.c:849 builtin/clone.c:821
-#: builtin/stash.c:267
+#: merge.c:102 rerere.c:704 builtin/am.c:1933 builtin/am.c:1967
+#: builtin/checkout.c:590 builtin/checkout.c:842 builtin/clone.c:706
+#: builtin/stash.c:269
msgid "unable to write new index file"
msgstr "no s'ha pogut escriure un fitxer d'índex nou"
-#: midx.c:74
+#: midx.c:78
msgid "multi-pack-index OID fanout is of the wrong size"
msgstr "l'OID de l'índex multipaquet és d'una mida incorrecta"
-#: midx.c:105
+#: midx.c:109
#, c-format
msgid "multi-pack-index file %s is too small"
msgstr "el fitxer de l'índex multipaquet %s és massa petit"
-#: midx.c:121
+#: midx.c:125
#, c-format
msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
msgstr ""
-"la signatura de l'índex multipaquet 0x%08x no coincideix amb la signatura 0x%08x"
+"la signatura de l'índex multipaquet 0x%08x no coincideix amb la signatura "
+"0x%08x"
-#: midx.c:126
+#: midx.c:130
#, c-format
msgid "multi-pack-index version %d not recognized"
msgstr "no es reconeix la versió %d de l'índex multipaquet"
-#: midx.c:131
+#: midx.c:135
#, c-format
msgid "multi-pack-index hash version %u does not match version %u"
msgstr ""
"la versió del hash índex multipaquet %u no coincideix amb la versió %u"
-#: midx.c:148
+#: midx.c:152
msgid "multi-pack-index missing required pack-name chunk"
msgstr "falta un fragment de nom de paquet necessari al multi-index"
-#: midx.c:150
+#: midx.c:154
msgid "multi-pack-index missing required OID fanout chunk"
msgstr "falta un fragment «fanout» OID necessari al multi-pack-index"
-#: midx.c:152
+#: midx.c:156
msgid "multi-pack-index missing required OID lookup chunk"
msgstr "falta un fragment de cerca «fanout» OID necessari al multi-pack-index"
-#: midx.c:154
+#: midx.c:158
msgid "multi-pack-index missing required object offsets chunk"
msgstr "falta un fragment necessari dels desplaçaments al multi-pack-index"
-#: midx.c:170
+#: midx.c:174
#, c-format
msgid "multi-pack-index pack names out of order: '%s' before '%s'"
-msgstr "els noms de paquet de l'índex multipaquet estan desordenats «%s» abans de «%s»"
+msgstr ""
+"els noms de paquet de l'índex multipaquet estan desordenats «%s» abans de "
+"«%s»"
-#: midx.c:214
+#: midx.c:221
#, c-format
msgid "bad pack-int-id: %u (%u total packs)"
msgstr "pack-int-id: %u incorrecte (%u paquets en total)"
-#: midx.c:264
+#: midx.c:271
msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
msgstr ""
-"l'índex multipaquet emmagatzema un desplaçament de 64 bits, però off_t és massa petit"
+"l'índex multipaquet emmagatzema un desplaçament de 64 bits, però off_t és "
+"massa petit"
-#: midx.c:490
+#: midx.c:502
#, c-format
msgid "failed to add packfile '%s'"
msgstr "no s'ha pogut afegir el fitxer de paquet «%s»"
-#: midx.c:496
+#: midx.c:508
#, c-format
msgid "failed to open pack-index '%s'"
msgstr "no s'ha pogut obrir l'índex del paquet «%s»"
-#: midx.c:564
+#: midx.c:576
#, c-format
msgid "failed to locate object %d in packfile"
msgstr "no s'ha pogut localitzar l'objecte %d en el fitxer de paquet"
-#: midx.c:880 builtin/index-pack.c:1535
+#: midx.c:892
msgid "cannot store reverse index file"
msgstr "no es pot emmagatzemar el fitxer d'índex invers"
-#: midx.c:933
+#: midx.c:990
+#, fuzzy, c-format
+msgid "could not parse line: %s"
+msgstr "no s'ha pogut analitzar %s"
+
+#: midx.c:992
+#, fuzzy, c-format
+msgid "malformed line: %s"
+msgstr "línia d'entrada mal formada: «%s»."
+
+#: midx.c:1159
+msgid "ignoring existing multi-pack-index; checksum mismatch"
+msgstr ""
+"s'està ignorant l'índex multipaquet existent; la suma de verificació no "
+"coincideix"
+
+#: midx.c:1184
+#, fuzzy
+msgid "could not load pack"
+msgstr "no s'ha pogut finalitzar «%s»"
+
+#: midx.c:1190
+#, fuzzy, c-format
+msgid "could not open index for %s"
+msgstr "s'ha produït un error en obrir l'índex per «%s»"
+
+#: midx.c:1201
msgid "Adding packfiles to multi-pack-index"
msgstr "S'estan afegint fitxers empaquetats a l'índex multipaquet"
-#: midx.c:979
-#, c-format
-msgid "did not see pack-file %s to drop"
-msgstr "no s'ha vist caure el fitxer empaquetat %s"
-
-#: midx.c:1024
+#: midx.c:1244
#, c-format
msgid "unknown preferred pack: '%s'"
msgstr "paquet preferit desconegut: «%s»"
-#: midx.c:1029
+#: midx.c:1289
+#, fuzzy, c-format
+msgid "cannot select preferred pack %s with no objects"
+msgstr "no es poden suprimir paquets en un repositori d'objectes preciosos"
+
+#: midx.c:1321
+#, c-format
+msgid "did not see pack-file %s to drop"
+msgstr "no s'ha vist caure el fitxer empaquetat %s"
+
+#: midx.c:1367
#, c-format
msgid "preferred pack '%s' is expired"
msgstr "el paquet preferit «%s» ha caducat"
-#: midx.c:1045
+#: midx.c:1380
msgid "no pack files to index."
msgstr "no hi ha fitxers empaquetats a indexar."
-#: midx.c:1125 builtin/clean.c:37
+#: midx.c:1417
+#, fuzzy
+msgid "could not write multi-pack bitmap"
+msgstr "no s'ha pogut escriure la plantilla de comissió"
+
+#: midx.c:1427
+#, fuzzy
+msgid "could not write multi-pack-index"
+msgstr "no s'han pogut netejar els percentatges multi-paquet"
+
+#: midx.c:1486 builtin/clean.c:37
#, c-format
msgid "failed to remove %s"
msgstr "s'ha produït un error en eliminar %s"
-#: midx.c:1156
+#: midx.c:1517
#, c-format
msgid "failed to clear multi-pack-index at %s"
msgstr "no s'ha pogut netejar l'índex multipaquet a %s"
-#: midx.c:1214
+#: midx.c:1577
msgid "multi-pack-index file exists, but failed to parse"
-msgstr "el fitxer de l'índex multipaquet existeix, però no s'ha pogut analitzar"
+msgstr ""
+"el fitxer de l'índex multipaquet existeix, però no s'ha pogut analitzar"
-#: midx.c:1222
+#: midx.c:1585
+msgid "incorrect checksum"
+msgstr "suma de verificació incorrecta"
+
+#: midx.c:1588
msgid "Looking for referenced packfiles"
msgstr "S'estan cercant fitxers empaquetats referenciats"
-#: midx.c:1237
+#: midx.c:1603
#, c-format
msgid ""
"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
msgstr ""
"oid fanout desordenat: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
-#: midx.c:1242
+#: midx.c:1608
msgid "the midx contains no oid"
msgstr "el midx no conté cap oid"
-#: midx.c:1251
+#: midx.c:1617
msgid "Verifying OID order in multi-pack-index"
msgstr "S'està verificant l'ordre OID a l'índex multipaquet"
-#: midx.c:1260
+#: midx.c:1626
#, c-format
msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
msgstr "oid lookup desordenat: oid[%d] = %s >= %s = oid[%d]"
-#: midx.c:1280
+#: midx.c:1646
msgid "Sorting objects by packfile"
msgstr "S'estan ordenant els objectes per fitxer empaquetats"
-#: midx.c:1287
+#: midx.c:1653
msgid "Verifying object offsets"
msgstr "S'estan verificant els desplaçaments dels objectes"
-#: midx.c:1303
+#: midx.c:1669
#, c-format
msgid "failed to load pack entry for oid[%d] = %s"
-msgstr ""
-"no s'ha pogut carregar l'entrada del paquet per a oid[%d] = %s"
+msgstr "no s'ha pogut carregar l'entrada del paquet per a oid[%d] = %s"
-#: midx.c:1309
+#: midx.c:1675
#, c-format
msgid "failed to load pack-index for packfile %s"
msgstr "no s'ha pogut carregar l'índex del paquet per al fitxer empaquetat %s"
-#: midx.c:1318
+#: midx.c:1684
#, c-format
msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
msgstr ""
-"desplaçament incorrecte de l'objecte per a oid[%d] = %s: %<PRIx64> != %<PRIx64>"
+"desplaçament incorrecte de l'objecte per a oid[%d] = %s: %<PRIx64> != "
+"%<PRIx64>"
-#: midx.c:1343
+#: midx.c:1709
msgid "Counting referenced objects"
msgstr "S'estan comptant els objectes referenciats"
-#: midx.c:1353
+#: midx.c:1719
msgid "Finding and deleting unreferenced packfiles"
msgstr "S'estan cercant i suprimint els fitxers de paquets no referenciats"
-#: midx.c:1544
+#: midx.c:1911
msgid "could not start pack-objects"
msgstr "no s'ha pogut iniciar el pack-objects"
-#: midx.c:1564
+#: midx.c:1931
msgid "could not finish pack-objects"
msgstr "no s'ha pogut finalitzar el pack-objects"
@@ -5507,12 +5724,10 @@
#, c-format
msgid ""
"You have not concluded your previous notes merge (%s exists).\n"
-"Please, use 'git notes merge --commit' or 'git notes merge --abort' to "
-"commit/abort the previous merge before you start a new notes merge."
+"Please, use 'git notes merge --commit' or 'git notes merge --abort' to commit/abort the previous merge before you start a new notes merge."
msgstr ""
"No heu acabat la vostra fusió de notes prèvia (%s existeix).\n"
-"Useu «git notes merge --commit» o «git notes merge --abort» per a cometre/"
-"avortar la fusió prèvia abans de començar una fusió de notes nova."
+"Useu «git notes merge --commit» o «git notes merge --abort» per a cometre/avortar la fusió prèvia abans de començar una fusió de notes nova."
#: notes-merge.c:284
#, c-format
@@ -5536,283 +5751,284 @@
#. TRANSLATORS: The first %s is the name of
#. the environment variable, the second %s is
#. its value.
-#.
#: notes-utils.c:145
#, c-format
msgid "Bad %s value: '%s'"
msgstr "Valor erroni de %s: «%s»"
-#: object-file.c:526
+#: object-file.c:459
#, c-format
msgid "object directory %s does not exist; check .git/objects/info/alternates"
msgstr ""
-"no existeix el directori d'objecte %s; comproveu .git/objects/info/alternates"
+"no existeix el directori d'objecte %s; comproveu "
+".git/objects/info/alternates"
-#: object-file.c:577
+#: object-file.c:517
#, c-format
msgid "unable to normalize alternate object path: %s"
msgstr "no s'ha pogut normalitzar el camí a l'objecte alternatiu: %s"
-#: object-file.c:649
+#: object-file.c:591
#, c-format
msgid "%s: ignoring alternate object stores, nesting too deep"
msgstr ""
-"%s: s'estan ignorant els emmagatzematges alternatius d'objectes, imbricació massa "
-"profunda"
+"%s: s'estan ignorant els emmagatzematges alternatius d'objectes, imbricació "
+"massa profunda"
-#: object-file.c:656
+#: object-file.c:598
#, c-format
msgid "unable to normalize object directory: %s"
msgstr "no s'ha pogut normalitzar el directori de l'objecte: %s"
-#: object-file.c:699
+#: object-file.c:641
msgid "unable to fdopen alternates lockfile"
msgstr "no s'ha pogut fer «fdopen» al fitxer de bloqueig alternatiu"
-#: object-file.c:717
+#: object-file.c:659
msgid "unable to read alternates file"
msgstr "no es pot llegir el fitxer «alternates»"
-#: object-file.c:724
+#: object-file.c:666
msgid "unable to move new alternates file into place"
msgstr "no s'ha pogut moure el nou fitxer «alternates» al lloc"
-#: object-file.c:759
+#: object-file.c:701
#, c-format
msgid "path '%s' does not exist"
msgstr "el camí «%s» no existeix"
-#: object-file.c:780
+#: object-file.c:722
#, c-format
msgid "reference repository '%s' as a linked checkout is not supported yet."
msgstr ""
"encara no s'admet el repositori de referència «%s» com a agafament enllaçat."
-#: object-file.c:786
+#: object-file.c:728
#, c-format
msgid "reference repository '%s' is not a local repository."
msgstr "el repositori de referència «%s» no és un repositori local."
-#: object-file.c:792
+#: object-file.c:734
#, c-format
msgid "reference repository '%s' is shallow"
msgstr "el repositori de referència «%s» és superficial"
-#: object-file.c:800
+#: object-file.c:742
#, c-format
msgid "reference repository '%s' is grafted"
msgstr "el repositori de referència «%s» és empeltat"
-#: object-file.c:860
+#: object-file.c:773
+#, c-format
+msgid "could not find object directory matching %s"
+msgstr "no s'ha pogut trobar el directori de l'objecte que coincideixi amb %s"
+
+#: object-file.c:823
#, c-format
msgid "invalid line while parsing alternate refs: %s"
msgstr ""
"línia no vàlida quan s'analitzaven les referències de l'«alternate»: %s"
-#: object-file.c:1010
+#: object-file.c:973
#, c-format
msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
msgstr "s'està intentant fer mmap %<PRIuMAX> per sobre del límit %<PRIuMAX>"
-#: object-file.c:1031
-msgid "mmap failed"
-msgstr "mmap ha fallat"
+#: object-file.c:1008
+#, c-format
+msgid "mmap failed%s"
+msgstr "mmap ha fallat%s"
-#: object-file.c:1195
+#: object-file.c:1174
#, c-format
msgid "object file %s is empty"
msgstr "el tipus d'objecte %s és buit"
-#: object-file.c:1330 object-file.c:2524
+#: object-file.c:1293 object-file.c:2499
#, c-format
msgid "corrupt loose object '%s'"
msgstr "objecte solt corrupte «%s»"
-#: object-file.c:1332 object-file.c:2528
+#: object-file.c:1295 object-file.c:2503
#, c-format
msgid "garbage at end of loose object '%s'"
msgstr "brossa al final de l'objecte solt «%s»"
-#: object-file.c:1374
-msgid "invalid object type"
-msgstr "tipus d'objecte és incorrecte"
-
-#: object-file.c:1458
-#, c-format
-msgid "unable to unpack %s header with --allow-unknown-type"
-msgstr "no s'ha pogut desempaquetar la capçalera %s amb --allow-unknown-type"
-
-#: object-file.c:1461
-#, c-format
-msgid "unable to unpack %s header"
-msgstr "no s'ha pogut desempaquetar la capçalera %s"
-
-#: object-file.c:1467
-#, c-format
-msgid "unable to parse %s header with --allow-unknown-type"
-msgstr "no s'ha pogut analitzar la capçalera %s amb --allow-unknown-type"
-
-#: object-file.c:1470
+#: object-file.c:1417
#, c-format
msgid "unable to parse %s header"
msgstr "no s'ha pogut analitzar la capçalera %s"
-#: object-file.c:1697
+#: object-file.c:1419
+msgid "invalid object type"
+msgstr "tipus d'objecte és incorrecte"
+
+#: object-file.c:1430
+#, c-format
+msgid "unable to unpack %s header"
+msgstr "no s'ha pogut desempaquetar la capçalera %s"
+
+#: object-file.c:1434
+#, c-format, fuzzy
+msgid "header for %s too long, exceeds %d bytes"
+msgstr "la capçalera per a percentatges és massa llarga, supera els bytes"
+
+#: object-file.c:1664
#, c-format
msgid "failed to read object %s"
msgstr "s'ha produït un error en llegir l'objecte %s"
-#: object-file.c:1701
+#: object-file.c:1668
#, c-format
msgid "replacement %s not found for %s"
msgstr "no s'ha trobat el reemplaçament %s per a %s"
-#: object-file.c:1705
+#: object-file.c:1672
#, c-format
msgid "loose object %s (stored in %s) is corrupt"
msgstr "l'objecte solt %s (emmagatzemat a %s) és corrupte"
-#: object-file.c:1709
+#: object-file.c:1676
#, c-format
msgid "packed object %s (stored in %s) is corrupt"
msgstr "l'objecte empaquetat %s (emmagatzemat a %s) és corrupte"
-#: object-file.c:1814
+#: object-file.c:1781
#, c-format
msgid "unable to write file %s"
msgstr "no s'ha pogut escriure al fitxer %s"
-#: object-file.c:1821
+#: object-file.c:1788
#, c-format
msgid "unable to set permission to '%s'"
msgstr "no s'ha pogut establir el permís a «%s»"
-#: object-file.c:1828
+#: object-file.c:1795
msgid "file write error"
msgstr "s'ha produït un error en escriure al fitxer"
-#: object-file.c:1848
+#: object-file.c:1815
msgid "error when closing loose object file"
msgstr "error en tancar el fitxer d'objecte solt"
-#: object-file.c:1913
+#: object-file.c:1882
#, c-format
msgid "insufficient permission for adding an object to repository database %s"
msgstr ""
-"permisos insuficients per a afegir un objecte a la base de dades del repositori "
-"%s"
+"permisos insuficients per a afegir un objecte a la base de dades del "
+"repositori %s"
-#: object-file.c:1915
+#: object-file.c:1884
msgid "unable to create temporary file"
msgstr "no s'ha pogut crear un fitxer temporal"
-#: object-file.c:1939
+#: object-file.c:1908
msgid "unable to write loose object file"
msgstr "no s'ha pogut escriure el fitxer d'objecte solt"
-#: object-file.c:1945
+#: object-file.c:1914
#, c-format
msgid "unable to deflate new object %s (%d)"
msgstr "no s'ha pogut desinflar l'object nou %s (%d)"
-#: object-file.c:1949
+#: object-file.c:1918
#, c-format
msgid "deflateEnd on object %s failed (%d)"
msgstr "ha fallat deflateEnd a l'objecte %s(%d)"
-#: object-file.c:1953
+#: object-file.c:1922
#, c-format
msgid "confused by unstable object source data for %s"
msgstr "confós per la font de dades inestable de l'objecte per a %s"
-#: object-file.c:1963 builtin/pack-objects.c:1097
+#: object-file.c:1933 builtin/pack-objects.c:1243
#, c-format
msgid "failed utime() on %s"
msgstr "ha fallat utime() a %s"
-#: object-file.c:2040
+#: object-file.c:2011
#, c-format
msgid "cannot read object for %s"
msgstr "no es pot llegir l'objecte per a %s"
-#: object-file.c:2091
+#: object-file.c:2062
msgid "corrupt commit"
msgstr "comissió corrupta"
-#: object-file.c:2099
+#: object-file.c:2070
msgid "corrupt tag"
msgstr "etiqueta corrupta"
-#: object-file.c:2199
+#: object-file.c:2170
#, c-format
msgid "read error while indexing %s"
msgstr "error de lectura mentre s'indexava %s"
-#: object-file.c:2202
+#: object-file.c:2173
#, c-format
msgid "short read while indexing %s"
msgstr "lectura curta mentre s'indexa %s"
-#: object-file.c:2275 object-file.c:2285
+#: object-file.c:2246 object-file.c:2256
#, c-format
msgid "%s: failed to insert into database"
msgstr "%s: no s'han pogut inserir a la base de dades"
-#: object-file.c:2291
+#: object-file.c:2262
#, c-format
msgid "%s: unsupported file type"
msgstr "%s: tipus de fitxer no suportat"
-#: object-file.c:2315
+#: object-file.c:2286 builtin/fetch.c:1445
#, c-format
msgid "%s is not a valid object"
msgstr "%s no és un objecte vàlid"
-#: object-file.c:2317
+#: object-file.c:2288
#, c-format
msgid "%s is not a valid '%s' object"
msgstr "%s no és un objecte de «%s» vàlid"
-#: object-file.c:2344 builtin/index-pack.c:192
+#: object-file.c:2315
#, c-format
msgid "unable to open %s"
msgstr "no s'ha pogut obrir %s"
-#: object-file.c:2535 object-file.c:2588
+#: object-file.c:2510
#, c-format
msgid "hash mismatch for %s (expected %s)"
msgstr "no coincideix la suma per a %s (s'esperava %s)"
-#: object-file.c:2559
+#: object-file.c:2533
#, c-format
msgid "unable to mmap %s"
msgstr "no s'ha pogut fer «mmap» %s"
-#: object-file.c:2564
+#: object-file.c:2539
#, c-format
msgid "unable to unpack header of %s"
msgstr "no s'ha pogut desempaquetar la capçalera de %s"
-#: object-file.c:2570
+#: object-file.c:2544
#, c-format
msgid "unable to parse header of %s"
msgstr "no s'ha pogut analitzar la capçalera de %s"
-#: object-file.c:2581
+#: object-file.c:2555
#, c-format
msgid "unable to unpack contents of %s"
msgstr "no s'han pogut desempaquetar els continguts de %s"
-#: object-name.c:486
+#: object-name.c:480
#, c-format
msgid "short object ID %s is ambiguous"
msgstr "l'id d'objecte curt %s és ambigu"
-#: object-name.c:497
+#: object-name.c:491
msgid "The candidates are:"
msgstr "Els candidats són:"
-#: object-name.c:796
+#: object-name.c:790
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"
@@ -5836,22 +6052,22 @@
"suprimiu-les. Desactiveu aquest missatge executant\n"
"«git config advice.objectNameWarning false»"
-#: object-name.c:916
+#: object-name.c:910
#, c-format
msgid "log for '%.*s' only goes back to %s"
msgstr "registre per a «%.*s» només retorna a %s"
-#: object-name.c:924
+#: object-name.c:918
#, c-format
msgid "log for '%.*s' only has %d entries"
msgstr "registre per a «%.*s» només té %d entrades"
-#: object-name.c:1702
+#: object-name.c:1696
#, c-format
msgid "path '%s' exists on disk, but not in '%.*s'"
msgstr "el camí «%s» existeix al disc, però no a «%.*s»"
-#: object-name.c:1708
+#: object-name.c:1702
#, c-format
msgid ""
"path '%s' exists, but not '%s'\n"
@@ -5860,45 +6076,45 @@
"el camí «%s» existeix, però no «%s»\n"
"consell: volíeu dir «%.*s:%s» conegut com a «%.*s:./%s»?"
-#: object-name.c:1717
+#: object-name.c:1711
#, c-format
msgid "path '%s' does not exist in '%.*s'"
msgstr "el camí «%s» no existeix en «%.*s»"
-#: object-name.c:1745
+#: object-name.c:1739
#, c-format
msgid ""
"path '%s' is in the index, but not at stage %d\n"
"hint: Did you mean ':%d:%s'?"
msgstr ""
-"el camí «%s» està a l'índex, però no a «stage» %d\n."
-"consell: volíeu dir «:%d:%s»?"
+"el camí «%s» està a l'índex, però no a «stage» %d\n"
+".consell: volíeu dir «:%d:%s»?"
-#: object-name.c:1761
+#: object-name.c:1755
#, c-format
msgid ""
"path '%s' is in the index, but not '%s'\n"
"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
msgstr ""
-"el camí «%s» està a l'índex, però no a «%s»\n."
-"consell: volíeu dir «:%d:%s» conegut com a «:%d:./%s»?"
+"el camí «%s» està a l'índex, però no a «%s»\n"
+".consell: volíeu dir «:%d:%s» conegut com a «:%d:./%s»?"
-#: object-name.c:1769
+#: object-name.c:1763
#, c-format
msgid "path '%s' exists on disk, but not in the index"
msgstr "el camí «%s» existeix al disc, però no a l'índex"
-#: object-name.c:1771
-#, c-format
+#: object-name.c:1765
+#, c-format
msgid "path '%s' does not exist (neither on disk nor in the index)"
msgstr "el camí «%s» no existeix (ni al disc ni a l'índex)"
-#: object-name.c:1784
+#: object-name.c:1778
msgid "relative path syntax can't be used outside working tree"
msgstr ""
"la sintaxi de camí relatiu no es pot utilitzar fora de l'arbre de treball"
-#: object-name.c:1922
+#: object-name.c:1916
#, c-format
msgid "invalid object name '%.*s'."
msgstr "nom d'objecte no vàlid «%.*s»."
@@ -5913,27 +6129,42 @@
msgid "object %s is a %s, not a %s"
msgstr "l'objecte %s és %s, no pas %s"
-#: object.c:232
+#: object.c:250
#, c-format
msgid "object %s has unknown type id %d"
msgstr "l'objecte %s té un identificador de tipus %d desconegut"
-#: object.c:245
+#: object.c:263
#, c-format
msgid "unable to parse object: %s"
msgstr "no s'ha pogut analitzar l'objecte: %s"
-#: object.c:265 object.c:277
+#: object.c:283 object.c:295
#, c-format
msgid "hash mismatch %s"
msgstr "el resum no coincideix %s"
-#: pack-bitmap.c:844 pack-bitmap.c:850 builtin/pack-objects.c:2251
+#: pack-bitmap.c:348
+#, fuzzy
+msgid "multi-pack bitmap is missing required reverse index"
+msgstr "falta un fragment necessari dels desplaçaments al multi-pack-index"
+
+#: pack-bitmap.c:424
+#, fuzzy
+msgid "load_reverse_index: could not open pack"
+msgstr "Loadreverseindex: no s'ha pogut obrir el paquet"
+
+#: pack-bitmap.c:1064 pack-bitmap.c:1070 builtin/pack-objects.c:2424
#, c-format
msgid "unable to get size of %s"
msgstr "no s'ha pogut obtenir la mida de %s"
-#: pack-bitmap.c:1547 builtin/rev-list.c:92
+#: pack-bitmap.c:1916
+#, fuzzy, c-format
+msgid "could not find %s in pack %s at offset %<PRIuMAX>"
+msgstr "no s'ha pogut finalitzar «%s»"
+
+#: pack-bitmap.c:1952 builtin/rev-list.c:92
#, c-format
msgid "unable to get disk usage of %s"
msgstr "no s'ha pogut obtenir l'ús del disc de %s"
@@ -5956,49 +6187,54 @@
#: pack-revindex.c:238
#, c-format
msgid "reverse-index file %s has unsupported version %<PRIu32>"
-msgstr ""
+msgstr "el fitxer d'índex invers %s té la versió %<PRIu32> no admesa"
#: pack-revindex.c:243
#, c-format
msgid "reverse-index file %s has unsupported hash id %<PRIu32>"
-msgstr ""
+msgstr "el fitxer d'índex invers %s té un ID de resum %<PRIu32> no admès"
-#: pack-write.c:250
+#: pack-write.c:251
msgid "cannot both write and verify reverse index"
msgstr "no es pot escriure i verificar l'índex invers"
-#: pack-write.c:271
+#: pack-write.c:270
#, c-format
msgid "could not stat: %s"
msgstr "no s'ha pogut fer stat a: %s"
-#: pack-write.c:283
+#: pack-write.c:282
#, c-format
msgid "failed to make %s readable"
msgstr "s'ha produït un error en fer %s llegible"
-#: pack-write.c:522
+#: pack-write.c:520
#, c-format
msgid "could not write '%s' promisor file"
msgstr "no s'ha pogut escriure «%s» al fitxer «promisor»"
-#: packfile.c:625
+#: packfile.c:626
msgid "offset before end of packfile (broken .idx?)"
msgstr "desplaçament abans de la fi del fitxer de paquet (.idx trencat?)"
-#: packfile.c:1937
+#: packfile.c:656
+#, c-format
+msgid "packfile %s cannot be mapped%s"
+msgstr "el fitxer de paquet %s no es pot mapar%s"
+
+#: packfile.c:1923
#, c-format
msgid "offset before start of pack index for %s (corrupt index?)"
msgstr ""
"desplaçament abans d'inici d'índex de paquet per a %s (índex corromput?)"
-#: packfile.c:1941
+#: packfile.c:1927
#, c-format
msgid "offset beyond end of pack index for %s (truncated index?)"
msgstr ""
"desplaçament més enllà de la fi d'índex de paquet per a %s (índex truncat?)"
-#: parse-options-cb.c:20 parse-options-cb.c:24
+#: parse-options-cb.c:20 parse-options-cb.c:24 builtin/commit-graph.c:175
#, c-format
msgid "option `%s' expects a numerical value"
msgstr "l'opció «%s» espera un valor numèric"
@@ -6018,123 +6254,145 @@
msgid "malformed object name '%s'"
msgstr "nom d'objecte «%s» mal format"
-#: parse-options.c:38
+#: parse-options.c:58
#, c-format
msgid "%s requires a value"
msgstr "%s requereix un valor"
-#: parse-options.c:73
+#: parse-options.c:93
#, c-format
msgid "%s is incompatible with %s"
msgstr "%s és incompatible amb %s"
-#: parse-options.c:78
+#: parse-options.c:98
#, c-format
msgid "%s : incompatible with something else"
msgstr "%s: és incompatible amb alguna altra cosa"
-#: parse-options.c:92 parse-options.c:96 parse-options.c:317
+#: parse-options.c:112 parse-options.c:116
#, c-format
msgid "%s takes no value"
msgstr "%s no accepta cap valor"
-#: parse-options.c:94
+#: parse-options.c:114
#, c-format
msgid "%s isn't available"
msgstr "%s no és disponible"
-#: parse-options.c:217
+#: parse-options.c:237
#, c-format
msgid "%s expects a non-negative integer value with an optional k/m/g suffix"
msgstr "%s espera un valor enter no negatiu amb un sufix opcional k/m/g"
-#: parse-options.c:386
+#: parse-options.c:393
#, c-format
msgid "ambiguous option: %s (could be --%s%s or --%s%s)"
msgstr "opció ambigua: %s (pot ser --%s%s o --%s%s)"
-#: parse-options.c:420 parse-options.c:428
+#: parse-options.c:427 parse-options.c:435
#, c-format
msgid "did you mean `--%s` (with two dashes)?"
-msgstr "voleu dir «--%s» (amb dos traços)?"
+msgstr "voleu dir «--%s» (amb dos guionets)?"
-#: parse-options.c:668 parse-options.c:988
+#: parse-options.c:677 parse-options.c:1053
#, c-format
msgid "alias of --%s"
msgstr "àlies de --%s"
-#: parse-options.c:879
+#: parse-options.c:891
#, c-format
msgid "unknown option `%s'"
msgstr "opció desconeguda «%s»"
-#: parse-options.c:881
+#: parse-options.c:893
#, c-format
msgid "unknown switch `%c'"
msgstr "«switch» «%c» desconegut"
-#: parse-options.c:883
+#: parse-options.c:895
#, c-format
msgid "unknown non-ascii option in string: `%s'"
msgstr "opció no ascii desconeguda en la cadena: «%s»"
-#: parse-options.c:907
+#: parse-options.c:919
msgid "..."
msgstr "..."
-#: parse-options.c:926
+#: parse-options.c:933
#, c-format
msgid "usage: %s"
msgstr "ús: %s"
#. TRANSLATORS: the colon here should align with the
#. one in "usage: %s" translation.
-#.
-#: parse-options.c:932
+#: parse-options.c:948
#, c-format
msgid " or: %s"
msgstr " o: %s"
-#: parse-options.c:935
+#. TRANSLATORS: You should only need to translate this format
+#. string if your language is a RTL language (e.g. Arabic,
+#. Hebrew etc.), not if it's a LTR language (e.g. German,
+#. Russian, Chinese etc.).
+#. *
+#. When a translated usage string has an embedded "\n" it's
+#. because options have wrapped to the next line. The line
+#. after the "\n" will then be padded to align with the
+#. command name, such as N_("git cmd [opt]\n<8
+#. spaces>[opt2]"), where the 8 spaces are the same length as
+#. "git cmd ".
+#. *
+#. This format string prints out that already-translated
+#. line. The "%*s" is whitespace padding to account for the
+#. padding at the start of the line that we add in this
+#. function. The "%s" is a line in the (hopefully already
+#. translated) N_() usage string, which contained embedded
+#. newlines before we split it up.
+#: parse-options.c:969
+#, c-format, fuzzy
+msgid "%*s%s"
+msgstr "%*s%"
+
+#: parse-options.c:992
#, c-format
msgid " %s"
msgstr " %s"
-#: parse-options.c:974
+#: parse-options.c:1039
msgid "-NUM"
msgstr "-NUM"
-#: path.c:915
+#: path.c:922
#, c-format
msgid "Could not make %s writable by group"
msgstr "No s'ha pogut fer %s escrivible pel grup"
-#: pathspec.c:151
+#: pathspec.c:150
msgid "Escape character '\\' not allowed as last character in attr value"
msgstr ""
"El caràcter d'escapament «\\» no està permès com a últim caràcter en un "
"valor d'un atribut"
-#: pathspec.c:169
+#: pathspec.c:168
msgid "Only one 'attr:' specification is allowed."
msgstr "Només es permet una especificació «attr:»."
-#: pathspec.c:172
+#: pathspec.c:171
msgid "attr spec must not be empty"
msgstr "una especificació d'atribut no pot estar buida"
-#: pathspec.c:215
+#: pathspec.c:214
#, c-format
msgid "invalid attribute name %s"
msgstr "nom d'atribut no vàlid %s"
-#: pathspec.c:280
+#: pathspec.c:279
msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
msgstr ""
"els paràmetres d'especificació de camí «glob» i «noglob» globals són "
"incompatibles"
-#: pathspec.c:287
+#: pathspec.c:286
msgid ""
"global 'literal' pathspec setting is incompatible with all other global "
"pathspec settings"
@@ -6142,52 +6400,52 @@
"el paràmetre d'especificació de camí «literal» global és incompatible amb "
"tots els altres paràmetres d'especificació de camí globals"
-#: pathspec.c:327
+#: pathspec.c:326
msgid "invalid parameter for pathspec magic 'prefix'"
msgstr "paràmetre no vàlid per a la màgia d'especificació de camí «prefix»"
-#: pathspec.c:348
+#: pathspec.c:347
#, c-format
msgid "Invalid pathspec magic '%.*s' in '%s'"
msgstr "Màgia d'especificació de camí no vàlida «%.*s» en «%s»"
-#: pathspec.c:353
+#: pathspec.c:352
#, c-format
msgid "Missing ')' at the end of pathspec magic in '%s'"
msgstr "«)» mancant al final de la màgia d'especificació de camí en «%s»"
-#: pathspec.c:391
+#: pathspec.c:390
#, c-format
msgid "Unimplemented pathspec magic '%c' in '%s'"
msgstr "Màgia d'especificació de camí no implementada «%c» en «%s»"
-#: pathspec.c:450
+#: pathspec.c:449
#, c-format
msgid "%s: 'literal' and 'glob' are incompatible"
msgstr "%s: «literal» i «glob» són incompatibles"
-#: pathspec.c:466
+#: pathspec.c:465
#, c-format
msgid "%s: '%s' is outside repository at '%s'"
msgstr "%s: «%s» està fora del repositori en «%s»"
-#: pathspec.c:542
+#: pathspec.c:541
#, c-format
msgid "'%s' (mnemonic: '%c')"
msgstr "«%s» (mnemònic: «%c»)"
-#: pathspec.c:552
+#: pathspec.c:551
#, c-format
msgid "%s: pathspec magic not supported by this command: %s"
msgstr ""
"%s: aquesta ordre no està admesa amb la màgia d'especificació de camí: %s"
-#: pathspec.c:619
+#: pathspec.c:618
#, c-format
msgid "pathspec '%s' is beyond a symbolic link"
msgstr "l'especificació de camí «%s» és més enllà d'un enllaç simbòlic"
-#: pathspec.c:664
+#: pathspec.c:663
#, c-format
msgid "line is badly quoted: %s"
msgstr "la línia està mal citada: %s"
@@ -6201,14 +6459,14 @@
msgstr "no s'ha pogut escriure el paquet delim"
#: pkt-line.c:106
-msgid "unable to write stateless separator packet"
-msgstr "no s'ha pogut escriure el paquet de separació sense estat"
+msgid "unable to write response end packet"
+msgstr "no s'ha pogut escriure el paquet de final de resposta"
#: pkt-line.c:113
msgid "flush packet write failed"
msgstr "s'ha produït un error en escriure el paquet de buidatge"
-#: pkt-line.c:153 pkt-line.c:265
+#: pkt-line.c:153
msgid "protocol error: impossibly long line"
msgstr "error de protocol: longitud de línia impossible"
@@ -6216,7 +6474,7 @@
msgid "packet write with format failed"
msgstr "ha fallat l'escriptura del paquet amb format"
-#: pkt-line.c:204
+#: pkt-line.c:204 pkt-line.c:252
msgid "packet write failed - data exceeds max packet size"
msgstr ""
"no s'ha pogut escriure el paquet - les dades excedeixen la mida màxima del "
@@ -6227,25 +6485,25 @@
msgid "packet write failed: %s"
msgstr "no s'ha pogut escriure el paquet: %s"
-#: pkt-line.c:328 pkt-line.c:329
+#: pkt-line.c:349 pkt-line.c:350
msgid "read error"
msgstr "error de lectura"
-#: pkt-line.c:339 pkt-line.c:340
+#: pkt-line.c:360 pkt-line.c:361
msgid "the remote end hung up unexpectedly"
msgstr "el remot ha penjat inesperadament"
-#: pkt-line.c:369 pkt-line.c:371
+#: pkt-line.c:390 pkt-line.c:392
#, c-format
msgid "protocol error: bad line length character: %.4s"
msgstr "error de protocol: caràcter de longitud de línia erroni: %.4s"
-#: pkt-line.c:386 pkt-line.c:388 pkt-line.c:394 pkt-line.c:396
+#: pkt-line.c:407 pkt-line.c:409 pkt-line.c:415 pkt-line.c:417
#, c-format
msgid "protocol error: bad line length %d"
msgstr "error de protocol: longitud de línia errònia %d"
-#: pkt-line.c:413 sideband.c:165
+#: pkt-line.c:434 sideband.c:165
#, c-format
msgid "remote error: %s"
msgstr "error remot: %s"
@@ -6263,19 +6521,19 @@
msgid "unable to parse --pretty format"
msgstr "no s'ha pogut analitzar el format --pretty"
-#: promisor-remote.c:30
+#: promisor-remote.c:31
msgid "promisor-remote: unable to fork off fetch subprocess"
msgstr "promisor-remote no es pot bifurcar obtenint el subprocés"
-#: promisor-remote.c:35 promisor-remote.c:37
+#: promisor-remote.c:38 promisor-remote.c:40
msgid "promisor-remote: could not write to fetch subprocess"
msgstr "promisor-remote no s'ha pogut escriure per obtenir el subprocés"
-#: promisor-remote.c:41
+#: promisor-remote.c:44
msgid "promisor-remote: could not close stdin to fetch subprocess"
msgstr "promisor-remote no s'ha pogut tancar stdin per obtenir el subprocés"
-#: promisor-remote.c:53
+#: promisor-remote.c:54
#, c-format
msgid "promisor remote name cannot begin with '/': %s"
msgstr "el nom remot «promisor» no pot començar amb «/»: %s"
@@ -6286,22 +6544,22 @@
#: prune-packed.c:35
msgid "Removing duplicate objects"
-msgstr "S'estan eliminant objectes duplicats"
+msgstr "S'estan eliminant els objectes duplicats"
-#: range-diff.c:78
+#: range-diff.c:67
msgid "could not start `log`"
msgstr "no s'ha pogut iniciar «log»"
-#: range-diff.c:80
+#: range-diff.c:69
msgid "could not read `log` output"
msgstr "no s'ha pogut llegir la sortida de «log»"
-#: range-diff.c:101 sequencer.c:5551
+#: range-diff.c:97 sequencer.c:5603
#, c-format
msgid "could not parse commit '%s'"
msgstr "no s'ha pogut analitzar la comissió «%s»"
-#: range-diff.c:115
+#: range-diff.c:111
#, c-format
msgid ""
"could not parse first line of `log` output: did not start with 'commit ': "
@@ -6310,70 +6568,69 @@
"no s'ha pogut analitzar la primera línia de la sortida «log»: no començava "
"amb «commit»: «%s»"
-#: range-diff.c:140
+#: range-diff.c:137
#, c-format
msgid "could not parse git header '%.*s'"
msgstr "no s'ha pogut llegir la capçalera de la gif «%.*s»"
-#: range-diff.c:306
+#: range-diff.c:304
msgid "failed to generate diff"
msgstr "s'ha produït un error en generar el diff"
-#: range-diff.c:558
-#
+#: range-diff.c:559
msgid "--left-only and --right-only are mutually exclusive"
msgstr "--left-only i --right-only són mútuament excloents"
-#: range-diff.c:561 range-diff.c:563
+#: range-diff.c:562 range-diff.c:564
#, c-format
msgid "could not parse log for '%s'"
msgstr "no s'ha pogut llegir el fitxer de registre per a «%s»"
-#: read-cache.c:708
+#: read-cache.c:710
#, c-format
msgid "will not add file alias '%s' ('%s' already exists in index)"
msgstr "no s'afegirà l'àlies «%s»: («%s» ja existeix en l'índex)"
-#: read-cache.c:724
+#: read-cache.c:726
msgid "cannot create an empty blob in the object database"
msgstr "no es pot crear un blob buit a la base de dades d'objectes"
-#: read-cache.c:746
+#: read-cache.c:748
#, c-format
msgid "%s: can only add regular files, symbolic links or git-directories"
msgstr ""
"%s: només pot afegir fitxers normals, enllaços simbòlics o directoris git"
-#: read-cache.c:751
+#: read-cache.c:753 builtin/submodule--helper.c:3241
#, c-format
msgid "'%s' does not have a commit checked out"
msgstr "«%s» no té una comissió comprovada"
-#: read-cache.c:803
+#: read-cache.c:805
#, c-format
msgid "unable to index file '%s'"
msgstr "no es pot llegir indexar el fitxer «%s»"
-#: read-cache.c:822
+#: read-cache.c:824
#, c-format
msgid "unable to add '%s' to index"
msgstr "no s'ha pogut afegir «%s» a l'índex"
-#: read-cache.c:833
+#: read-cache.c:835
#, c-format
msgid "unable to stat '%s'"
msgstr "no s'ha pogut fer «stat» a «%s»"
-#: read-cache.c:1356
+#: read-cache.c:1373
#, c-format
msgid "'%s' appears as both a file and as a directory"
msgstr "«%s» apareix com a fitxer i com a directori"
-#: read-cache.c:1571
+#: read-cache.c:1588
msgid "Refresh index"
msgstr "Actualitza l'índex"
-#: read-cache.c:1700
+#: read-cache.c:1720
#, c-format
msgid ""
"index.version set, but the value is invalid.\n"
@@ -6382,7 +6639,7 @@
"index.version està establerta, però el valor no és vàlid.\n"
"S'està usant la versió %i"
-#: read-cache.c:1710
+#: read-cache.c:1730
#, c-format
msgid ""
"GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -6391,155 +6648,153 @@
"GIT_INDEX_VERSION està establerta, però el valor no és vàlid.\n"
"S'està usant la versió %i"
-#: read-cache.c:1766
+#: read-cache.c:1786
#, c-format
msgid "bad signature 0x%08x"
msgstr "signatura malmesa 0x%08x"
-#: read-cache.c:1769
+#: read-cache.c:1789
#, c-format
msgid "bad index version %d"
msgstr "versió d'índex incorrecta %d"
-#: read-cache.c:1778
+#: read-cache.c:1798
msgid "bad index file sha1 signature"
msgstr "signatura sha1 malmesa al fitxer d'índex"
-#: read-cache.c:1812
+#: read-cache.c:1832
#, c-format
msgid "index uses %.4s extension, which we do not understand"
msgstr "l'índex usa l'extensió %.4s, que no es pot entendre"
-#: read-cache.c:1814
+#: read-cache.c:1834
#, c-format
msgid "ignoring %.4s extension"
msgstr "s'està ignorant l'extensió %.4s"
-#: read-cache.c:1851
+#: read-cache.c:1871
#, c-format
msgid "unknown index entry format 0x%08x"
msgstr "format d'entrada d'índex desconeguda «0x%08x»"
-#: read-cache.c:1867
+#: read-cache.c:1887
#, c-format
msgid "malformed name field in the index, near path '%s'"
msgstr "camp del nom mal formatat l'índex, camí a prop «%s»"
-#: read-cache.c:1924
+#: read-cache.c:1944
msgid "unordered stage entries in index"
msgstr "entrades «stage» no ordenades en l'índex"
-#: read-cache.c:1927
+#: read-cache.c:1947
#, c-format
msgid "multiple stage entries for merged file '%s'"
msgstr "múltiples entrades «stage» per al fitxer fusionat «%s»"
-#: read-cache.c:1930
+#: read-cache.c:1950
#, c-format
msgid "unordered stage entries for '%s'"
msgstr "entrades «stage» no ordenades per a «%s»"
-#: read-cache.c:2036 read-cache.c:2333 rerere.c:549 rerere.c:583 rerere.c:1095
-#: submodule.c:1635 builtin/add.c:575 builtin/check-ignore.c:183
-#: builtin/checkout.c:522 builtin/checkout.c:711 builtin/clean.c:991
-#: builtin/commit.c:377 builtin/diff-tree.c:122 builtin/grep.c:505
-#: builtin/mv.c:146 builtin/reset.c:247 builtin/rm.c:291
-#: builtin/submodule--helper.c:332
+#: read-cache.c:2065 read-cache.c:2363 rerere.c:549 rerere.c:583 rerere.c:1095
+#: submodule.c:1662 builtin/add.c:603 builtin/check-ignore.c:183
+#: builtin/checkout.c:519 builtin/checkout.c:708 builtin/clean.c:987
+#: builtin/commit.c:378 builtin/diff-tree.c:122 builtin/grep.c:519
+#: builtin/mv.c:148 builtin/reset.c:253 builtin/rm.c:293
+#: builtin/submodule--helper.c:327 builtin/submodule--helper.c:3201
msgid "index file corrupt"
msgstr "fitxer d'índex malmès"
-#: read-cache.c:2180
+#: read-cache.c:2209
#, c-format
msgid "unable to create load_cache_entries thread: %s"
msgstr "no s'ha pogut crear fil «load_cache_entries»: %s"
-#: read-cache.c:2193
+#: read-cache.c:2222
#, c-format
msgid "unable to join load_cache_entries thread: %s"
msgstr "no s'ha pogut unir al fil «load_cache_entries»: %s"
-#: read-cache.c:2226
+#: read-cache.c:2255
#, c-format
msgid "%s: index file open failed"
msgstr "%s: ha fallat l'obertura del fitxer d'índex"
-#: read-cache.c:2230
+#: read-cache.c:2259
#, c-format
msgid "%s: cannot stat the open index"
msgstr "%s: no es pot fer «stat» a l'índex obert"
-#: read-cache.c:2234
+#: read-cache.c:2263
#, c-format
msgid "%s: index file smaller than expected"
msgstr "%s: fitxer d'índex més petit que s'esperava"
-#: read-cache.c:2238
+#: read-cache.c:2267
#, c-format
-msgid "%s: unable to map index file"
-msgstr "%s: no es pot mapar el fitxer d'índex"
+msgid "%s: unable to map index file%s"
+msgstr "%s: no es pot mapar el fitxer d'índex%s"
-#: read-cache.c:2280
+#: read-cache.c:2310
#, c-format
msgid "unable to create load_index_extensions thread: %s"
msgstr "no s'ha pogut crear un fil «load_index_extensions»: %s"
-#: read-cache.c:2307
+#: read-cache.c:2337
#, c-format
msgid "unable to join load_index_extensions thread: %s"
msgstr "no s'ha pogut unir un fil «load_index_extensions»: %s"
-#: read-cache.c:2345
+#: read-cache.c:2375
#, c-format
msgid "could not freshen shared index '%s'"
msgstr "no s'ha pogut refrescar l'índex compartit «%s»"
-#: read-cache.c:2392
+#: read-cache.c:2434
#, c-format
msgid "broken index, expect %s in %s, got %s"
msgstr "índex malmès, s'esperava %s a %s, s'ha rebut %s"
-#: read-cache.c:3095 strbuf.c:1173 wrapper.c:633 builtin/merge.c:1145
+#: read-cache.c:3065 strbuf.c:1179 wrapper.c:641 builtin/merge.c:1147
#, c-format
msgid "could not close '%s'"
msgstr "no s'ha pogut tancar «%s»"
-#: read-cache.c:3138
+#: read-cache.c:3108
msgid "failed to convert to a sparse-index"
msgstr "s'ha produït un error en convertir a un índex dispers"
-#: read-cache.c:3209 sequencer.c:2684 sequencer.c:4441
+#: read-cache.c:3179
#, c-format
msgid "could not stat '%s'"
msgstr "no s'ha pogut fer stat a «%s»"
-#: read-cache.c:3222
+#: read-cache.c:3192
#, c-format
msgid "unable to open git dir: %s"
msgstr "no s'ha pogut obrir el directori git: %s"
-#: read-cache.c:3234
+#: read-cache.c:3204
#, c-format
msgid "unable to unlink: %s"
msgstr "no s'ha pogut desenllaçar: %s"
-#: read-cache.c:3263
+#: read-cache.c:3233
#, c-format
msgid "cannot fix permission bits on '%s'"
msgstr "no s'han pogut corregir els bits de permisos en «%s»"
-#: read-cache.c:3412
+#: read-cache.c:3390
#, c-format
msgid "%s: cannot drop to stage #0"
msgstr "%s: no es pot baixar fins al «stage» #0"
#: rebase-interactive.c:11
msgid ""
-"You can fix this with 'git rebase --edit-todo' and then run 'git rebase --"
-"continue'.\n"
+"You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.\n"
"Or you can abort the rebase with 'git rebase --abort'.\n"
msgstr ""
-"Podeu arreglar-ho amb «git rebase --edit-todo» i després «git rebase --"
-"continue».\n"
+"Podeu arreglar-ho amb «git rebase --edit-todo» i després «git rebase --continue».\n"
"O bé, podeu avortar el «rebase» amb «git rebase --abort».\n"
#: rebase-interactive.c:33
@@ -6579,25 +6834,20 @@
"p, pick <comissió> = usa la comissió\n"
"r, reword <comissió> = usa la comissió, però edita el missatge de comissió\n"
"e, edit <comissió> = usa la comissió, però atura't per a esmenar-la\n"
-"s, squash <comissió> = usa la comissió, però fusiona-la a la comissió "
-"prèvia\n"
+"s, squash <comissió> = usa la comissió, però fusiona-la a la comissió prèvia\n"
"f, fixup [-C | -c] <commit> = com a «squash», però manté només el missatge\n"
" de comissió previ, a menys que s'usi -C, en aquest cas\n"
" manté només el missatge d'aquesta comissió; -c és el mateix\n"
" que -C, però obre l'editor\n"
-"x, exec <ordre> = executa l'ordre (la resta de la línia) usant "
-"l'intèrpret d'ordres\n"
-"b, break = atura't aquí (continua fent «rebase» després amb «git rebase --"
-"continue»)\n"
+"x, exec <ordre> = executa l'ordre (la resta de la línia) usant l'intèrpret d'ordres\n"
+"b, break = atura't aquí (continua fent «rebase» després amb «git rebase --continue»)\n"
"d, drop <comissió> = elimina la comissió\n"
"l, label <etiqueta> = etiqueta la HEAD actual amb un nom\n"
"t, reset <etiqueta> = reinicia HEAD a una etiqueta\n"
"m, merge [-C <comissió> | -c <comissió>] <etiqueta> [# <oneline>]\n"
". crea una comissió de fusió usant el missatge de la comissió\n"
-". de fusió original (o línia única, si no hi ha cap comissió de fusió "
-"original\n"
-". especificada). Useu -c <comissió> per a reescriure el missatge de la "
-"comissió.\n"
+". de fusió original (o línia única, si no hi ha cap comissió de fusió original\n"
+". especificada). Useu -c <comissió> per a reescriure el missatge de la comissió.\n"
"\n"
"Es pot canviar l'ordre d'aquestes línies; s'executen de dalt a baix.\n"
@@ -6608,16 +6858,15 @@
msgstr[0] "Fes «rebase» de %s a %s (%d ordre)"
msgstr[1] "Fes «rebase» de %s a %s (%d ordres)"
-#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:218
+#: rebase-interactive.c:75
msgid ""
"\n"
"Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
msgstr ""
"\n"
-"No elimineu cap línia. Useu «drop» explícitament per a eliminar una "
-"comissió.\n"
+"No elimineu cap línia. Useu «drop» explícitament per a eliminar una comissió.\n"
-#: rebase-interactive.c:78 git-rebase--preserve-merges.sh:222
+#: rebase-interactive.c:78
msgid ""
"\n"
"If you remove a line here THAT COMMIT WILL BE LOST.\n"
@@ -6625,7 +6874,7 @@
"\n"
"Si elimineu una línia aquí, ES PERDRÀ AQUELLA COMISSIÓ.\n"
-#: rebase-interactive.c:84 git-rebase--preserve-merges.sh:861
+#: rebase-interactive.c:84
msgid ""
"\n"
"You are editing the todo file of an ongoing interactive rebase.\n"
@@ -6639,7 +6888,7 @@
" git rebase --continue\n"
"\n"
-#: rebase-interactive.c:89 git-rebase--preserve-merges.sh:938
+#: rebase-interactive.c:89
msgid ""
"\n"
"However, if you remove everything, the rebase will be aborted.\n"
@@ -6649,14 +6898,14 @@
"No obstant, si elimineu tot, s'avortarà el «rebase».\n"
"\n"
-#: rebase-interactive.c:113 rerere.c:469 rerere.c:676 sequencer.c:3816
-#: sequencer.c:3842 sequencer.c:5657 builtin/fsck.c:327 builtin/rebase.c:271
+#: rebase-interactive.c:113 rerere.c:469 rerere.c:676 sequencer.c:3886
+#: sequencer.c:3912 sequencer.c:5709 builtin/fsck.c:328 builtin/gc.c:1790
+#: builtin/rebase.c:190
#, c-format
msgid "could not write '%s'"
msgstr "no s'ha pogut escriure «%s»"
-#: rebase-interactive.c:119 builtin/rebase.c:203 builtin/rebase.c:229
-#: builtin/rebase.c:253
+#: rebase-interactive.c:119
#, c-format
msgid "could not write '%s'."
msgstr "no s'ha pogut escriure a «%s»."
@@ -6667,8 +6916,7 @@
"Warning: some commits may have been dropped accidentally.\n"
"Dropped commits (newer to older):\n"
msgstr ""
-"Advertència: pot ser que algunes comissions s'hagin descartat "
-"accidentalment.\n"
+"Advertència: pot ser que algunes comissions s'hagin descartat accidentalment.\n"
"Les comissions descartades (més nova a més vella):\n"
#: rebase-interactive.c:203
@@ -6676,26 +6924,21 @@
msgid ""
"To avoid this message, use \"drop\" to explicitly remove a commit.\n"
"\n"
-"Use 'git config rebase.missingCommitsCheck' to change the level of "
-"warnings.\n"
+"Use 'git config rebase.missingCommitsCheck' to change the level of warnings.\n"
"The possible behaviours are: ignore, warn, error.\n"
"\n"
msgstr ""
-"Per a evitar aquest missatge, useu «drop» per a eliminar explícitament una "
-"comissió.\n"
+"Per a evitar aquest missatge, useu «drop» per a eliminar explícitament una comissió.\n"
"\n"
-"Useu «git config rebase.missingCommitsCheck» per a canviar el nivell "
-"d'advertències.\n"
+"Useu «git config rebase.missingCommitsCheck» per a canviar el nivell d'advertències.\n"
"Els comportaments possibles són: ignore, warn, error.\n"
-#: rebase-interactive.c:236 rebase-interactive.c:241 sequencer.c:2597
-#: builtin/rebase.c:189 builtin/rebase.c:214 builtin/rebase.c:240
-#: builtin/rebase.c:265
-#, c-format
-msgid "could not read '%s'."
-msgstr "no s'ha pogut llegir «%s»."
+#: rebase.c:29
+#, c-format, fuzzy
+msgid "%s: 'preserve' superseded by 'merges'"
+msgstr "percentatges: \"preservei\" substituït per \"merges\""
-#: ref-filter.c:42 wt-status.c:1978
+#: ref-filter.c:42 wt-status.c:2036
msgid "gone"
msgstr "no hi és"
@@ -6714,132 +6957,142 @@
msgid "ahead %d, behind %d"
msgstr "davant per %d, darrere per %d"
-#: ref-filter.c:175
+#: ref-filter.c:235
#, c-format
msgid "expected format: %%(color:<color>)"
msgstr "format esperat: %%(color:<color>)"
-#: ref-filter.c:177
+#: ref-filter.c:237
#, c-format
msgid "unrecognized color: %%(color:%s)"
msgstr "color no reconegut: %%(color:%s)"
-#: ref-filter.c:199
+#: ref-filter.c:259
#, c-format
msgid "Integer value expected refname:lstrip=%s"
msgstr "Valor enter esperat pel nom de referència:lstrip=%s"
-#: ref-filter.c:203
+#: ref-filter.c:263
#, c-format
msgid "Integer value expected refname:rstrip=%s"
msgstr "Valor enter esperat pel nom de referència:rstrip=%s"
-#: ref-filter.c:205
+#: ref-filter.c:265
#, c-format
msgid "unrecognized %%(%s) argument: %s"
msgstr "argument %%(%s) desconegut: %s"
-#: ref-filter.c:260
+#: ref-filter.c:320
#, c-format
msgid "%%(objecttype) does not take arguments"
msgstr "%%(objecttype) no accepta arguments"
-#: ref-filter.c:282
+#: ref-filter.c:344
#, c-format
msgid "unrecognized %%(objectsize) argument: %s"
msgstr "argument %%(objectsize) no reconegut: %s"
-#: ref-filter.c:290
+#: ref-filter.c:352
#, c-format
msgid "%%(deltabase) does not take arguments"
msgstr "%%(deltabase) no accepta arguments"
-#: ref-filter.c:302
+#: ref-filter.c:364
#, c-format
msgid "%%(body) does not take arguments"
msgstr "%%(body) no accepta arguments"
-#: ref-filter.c:315
+#: ref-filter.c:377
#, c-format
msgid "unrecognized %%(subject) argument: %s"
msgstr "argument %%(subject) no reconegut: %s"
-#: ref-filter.c:334
+#: ref-filter.c:396
#, c-format
msgid "expected %%(trailers:key=<value>)"
-msgstr ""
+msgstr "s'esperava %%(trailers:key=<value>)"
-#: ref-filter.c:336
+#: ref-filter.c:398
#, c-format
msgid "unknown %%(trailers) argument: %s"
msgstr "argument %%(trailers) desconegut: %s"
-#: ref-filter.c:367
+#: ref-filter.c:429
#, c-format
msgid "positive value expected contents:lines=%s"
msgstr "valor positiu esperat conté:lines=%s"
-#: ref-filter.c:369
+#: ref-filter.c:431
#, c-format
msgid "unrecognized %%(contents) argument: %s"
msgstr "argument %%(contents) no reconegut: %s"
-#: ref-filter.c:384
+#: ref-filter.c:443
+#, fuzzy, c-format
+msgid "unrecognized %%(raw) argument: %s"
+msgstr "argument %%(%s) desconegut: %s"
+
+#: ref-filter.c:458
#, c-format
msgid "positive value expected '%s' in %%(%s)"
msgstr "valor positiu esperat «%s» a %%(%s)"
-#: ref-filter.c:388
+#: ref-filter.c:462
#, c-format
msgid "unrecognized argument '%s' in %%(%s)"
msgstr "argument no reconegut «%s» a %%(%s)"
-#: ref-filter.c:402
+#: ref-filter.c:476
#, c-format
msgid "unrecognized email option: %s"
msgstr "opció del correu electrònic no reconeguda: «%s»"
-#: ref-filter.c:432
+#: ref-filter.c:506
#, c-format
msgid "expected format: %%(align:<width>,<position>)"
msgstr "format esperat: %%(align:<amplada>,<posició>)"
-#: ref-filter.c:444
+#: ref-filter.c:518
#, c-format
msgid "unrecognized position:%s"
msgstr "posició no reconeguda:%s"
-#: ref-filter.c:451
+#: ref-filter.c:525
#, c-format
msgid "unrecognized width:%s"
msgstr "amplada no reconeguda:%s"
-#: ref-filter.c:460
+#: ref-filter.c:534
#, c-format
msgid "unrecognized %%(align) argument: %s"
msgstr "argument %%(align) no reconegut: %s"
-#: ref-filter.c:468
+#: ref-filter.c:542
#, c-format
msgid "positive width expected with the %%(align) atom"
msgstr "amplada positiva esperada amb l'àtom %%(align)"
-#: ref-filter.c:486
+#: ref-filter.c:560
#, c-format
msgid "unrecognized %%(if) argument: %s"
msgstr "argument %%(if) no reconegut: %s"
-#: ref-filter.c:588
+#: ref-filter.c:568
+#, fuzzy, c-format
+msgid "%%(rest) does not take arguments"
+msgstr "%%(body) no accepta arguments"
+
+#: ref-filter.c:680
#, c-format
msgid "malformed field name: %.*s"
msgstr "nom de camp mal format: %.*s"
-#: ref-filter.c:615
+#: ref-filter.c:707
#, c-format
msgid "unknown field name: %.*s"
msgstr "nom de camp desconegut: %.*s"
-#: ref-filter.c:619
+#: ref-filter.c:711
#, c-format
msgid ""
"not a git repository, but the field '%.*s' requires access to object data"
@@ -6847,127 +7100,137 @@
"no és un repositori, git però el camp «%.*s» requereix accés a les dades de "
"l'objecte"
-#: ref-filter.c:743
+#: ref-filter.c:844
#, c-format
msgid "format: %%(if) atom used without a %%(then) atom"
msgstr "format: s'ha usat l'àtom %%(if) sense un àtom %%(then)"
-#: ref-filter.c:807
+#: ref-filter.c:910
#, c-format
msgid "format: %%(then) atom used without an %%(if) atom"
msgstr "format: s'ha usat l'àtom %%(then) sense un àtom %%(if)"
-#: ref-filter.c:809
+#: ref-filter.c:912
#, c-format
msgid "format: %%(then) atom used more than once"
msgstr "format: s'ha usat l'àtom %%(then) més d'un cop"
-#: ref-filter.c:811
+#: ref-filter.c:914
#, c-format
msgid "format: %%(then) atom used after %%(else)"
msgstr "format: s'ha usat l'àtom %%(then) després de %%(else)"
-#: ref-filter.c:839
+#: ref-filter.c:946
#, c-format
msgid "format: %%(else) atom used without an %%(if) atom"
msgstr "format: s'ha usat l'àtom %%(else) sense un àtom %%(if)"
-#: ref-filter.c:841
+#: ref-filter.c:948
#, c-format
msgid "format: %%(else) atom used without a %%(then) atom"
msgstr "format: s'ha usat l'àtom %%(else) sense un àtom %%(then)"
-#: ref-filter.c:843
+#: ref-filter.c:950
#, c-format
msgid "format: %%(else) atom used more than once"
msgstr "format: s'ha usat l'àtom %%(else) més d'un cop"
-#: ref-filter.c:858
+#: ref-filter.c:965
#, c-format
msgid "format: %%(end) atom used without corresponding atom"
msgstr "format: s'ha usat l'àtom %%(end) sense l'àtom corresponent"
-#: ref-filter.c:915
+#: ref-filter.c:1027
#, c-format
msgid "malformed format string %s"
msgstr "cadena de format mal format %s"
-#: ref-filter.c:1556
+#: ref-filter.c:1033
+#, c-format, fuzzy
+msgid "this command reject atom %%(%.*s)"
+msgstr "aquesta ordre rebutja l'àtom%(%.*s)"
+
+#: ref-filter.c:1040
+#, fuzzy, c-format
+msgid "--format=%.*s cannot be used with--python, --shell, --tcl"
+msgstr "--object-format no es pot usar sense --stdin"
+
+#: ref-filter.c:1706
#, c-format
msgid "(no branch, rebasing %s)"
msgstr "(sense branca, s'està fent «rebase» %s)"
-#: ref-filter.c:1559
-#, c-format
+#: ref-filter.c:1709
+#, c-format
msgid "(no branch, rebasing detached HEAD %s)"
msgstr "(sense branca, s'està fent «rebase» d'un «HEAD» separat %s)"
-#: ref-filter.c:1562
+#: ref-filter.c:1712
#, c-format
msgid "(no branch, bisect started on %s)"
msgstr "(sense branca, bisecció començada en %s)"
-#: ref-filter.c:1566
+#: ref-filter.c:1716
#, c-format
msgid "(HEAD detached at %s)"
msgstr "(HEAD separat a %s)"
-#: ref-filter.c:1569
+#: ref-filter.c:1719
#, c-format
msgid "(HEAD detached from %s)"
msgstr "(HEAD separat des de %s)"
-#: ref-filter.c:1572
+#: ref-filter.c:1722
msgid "(no branch)"
msgstr "(sense branca)"
-#: ref-filter.c:1604 ref-filter.c:1813
+#: ref-filter.c:1754 ref-filter.c:1972
#, c-format
msgid "missing object %s for %s"
msgstr "manca l'objecte %s per a %s"
-#: ref-filter.c:1614
+#: ref-filter.c:1764
#, c-format
msgid "parse_object_buffer failed on %s for %s"
msgstr "parse_object_buffer ha fallat en %s per a %s"
-#: ref-filter.c:1997
+#: ref-filter.c:2155
#, c-format
msgid "malformed object at '%s'"
msgstr "objecte mal format a «%s»"
-#: ref-filter.c:2086
+#: ref-filter.c:2245
#, c-format
msgid "ignoring ref with broken name %s"
msgstr "s'està ignorant la referència amb nom malmès %s"
-#: ref-filter.c:2091 refs.c:676
+#: ref-filter.c:2250 refs.c:673
#, c-format
msgid "ignoring broken ref %s"
msgstr "s'està ignorant la referència trencada %s"
-#: ref-filter.c:2431
+#: ref-filter.c:2623
#, c-format
msgid "format: %%(end) atom missing"
msgstr "format: manca l'àtom %%(end)"
-#: ref-filter.c:2525
+#: ref-filter.c:2726
#, c-format
msgid "malformed object name %s"
msgstr "nom d'objecte %s mal format"
-#: ref-filter.c:2530
+#: ref-filter.c:2731
#, c-format
msgid "option `%s' must point to a commit"
msgstr "l'opció «%s» ha d'apuntar a una comissió"
-#: refs.c:264
+#: refs.c:261
#, c-format
msgid "%s does not point to a valid object!"
msgstr "%s no apunta a un objecte vàlid"
-#: refs.c:566
-#, c-format
+#: refs.c:563
+#, fuzzy, 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"
@@ -6980,82 +7243,92 @@
"\n"
"\tgit branch -m <name>\n"
msgstr ""
+"S'està utilitzant «%s» com a nom de la branca inicial. Aquest nom de branca per defecte\n"
+"està subjecte a canvis. Per a configurar el nom inicial de la branca que s'utilitzarà en tots\n"
+"els repositoris nous, i que suprimirà aquest avís, useu:\n"
+"\n"
+"\tgit config --global init.defaultBranch <nom>\n"
+"\n"
+"Els noms escollits habitualment en lloc de «master» són «main», «trunk» i «development»\n"
+"La branca acabada de crear es pot canviar de nom amb aquesta ordre:\n"
+"\n"
+"\tgit branch -m <nom>"
-#: refs.c:588
+#: refs.c:585
#, c-format
msgid "could not retrieve `%s`"
msgstr "no s'ha pogut recuperar «%s»"
-#: refs.c:598
+#: refs.c:595
#, c-format
msgid "invalid branch name: %s = %s"
msgstr "nom de branca no vàlida: %s = %s"
-#: refs.c:674
+#: refs.c:671
#, c-format
msgid "ignoring dangling symref %s"
msgstr "s'està ignorant symref penjant %s"
-#: refs.c:922
+#: refs.c:920
#, c-format
msgid "log for ref %s has gap after %s"
msgstr "registre per a ref %s té un buit després de %s"
-#: refs.c:929
-#, , c-format
+#: refs.c:927
+#, c-format
msgid "log for ref %s unexpectedly ended on %s"
msgstr "registre per als ref %s ha acabat inesperadament a %s"
-#: refs.c:994
+#: refs.c:992
#, c-format
msgid "log for %s is empty"
msgstr "el registre per a %s és buit"
-#: refs.c:1086
+#: refs.c:1084
#, c-format
msgid "refusing to update ref with bad name '%s'"
msgstr "s'està refusant la referència amb nom malmès «%s»"
-#: refs.c:1157
+#: refs.c:1155
#, c-format
msgid "update_ref failed for ref '%s': %s"
msgstr "ha fallat update_ref per a la ref «%s»: %s"
-#: refs.c:2051
+#: refs.c:2062
#, c-format
msgid "multiple updates for ref '%s' not allowed"
msgstr "no es permeten múltiples actualitzacions per a la referència «%s»"
-#: refs.c:2131
+#: refs.c:2142
msgid "ref updates forbidden inside quarantine environment"
msgstr "no està permès actualitzar les referències en un entorn de quarantena"
-#: refs.c:2142
+#: refs.c:2153
msgid "ref updates aborted by hook"
msgstr "les actualitzacions de referències s'han avortat per un lligam"
-#: refs.c:2242 refs.c:2272
+#: refs.c:2253 refs.c:2283
#, c-format
msgid "'%s' exists; cannot create '%s'"
msgstr "«%s» existeix; no es pot crear «%s»"
-#: refs.c:2248 refs.c:2283
+#: refs.c:2259 refs.c:2294
#, c-format
msgid "cannot process '%s' and '%s' at the same time"
msgstr "no es poden processar «%s» i «%s» a la vegada"
-#: refs/files-backend.c:1228
+#: refs/files-backend.c:1271
#, c-format
msgid "could not remove reference %s"
msgstr "no s'ha pogut eliminar la referència %s"
-#: refs/files-backend.c:1242 refs/packed-backend.c:1542
-#: refs/packed-backend.c:1552
+#: refs/files-backend.c:1285 refs/packed-backend.c:1549
+#: refs/packed-backend.c:1559
#, c-format
msgid "could not delete reference %s: %s"
msgstr "no s'ha pogut suprimir la referència %s: %s"
-#: refs/files-backend.c:1245 refs/packed-backend.c:1555
+#: refs/files-backend.c:1288 refs/packed-backend.c:1562
#, c-format
msgid "could not delete references: %s"
msgstr "no s'han pogut suprimir les referències: %s"
@@ -7066,9 +7339,10 @@
msgstr "refspec no vàlida: «%s»"
#: remote.c:351
-#, fuzzy, c-format
+#, c-format
msgid "config remote shorthand cannot begin with '/': %s"
-msgstr "config remote abreviation no pot començar amb «/»: %s"
+msgstr ""
+"l'abreviatura del fitxer de configuració remot no pot començar amb «/»: %s"
#: remote.c:399
msgid "more than one receivepack given, using the first"
@@ -7111,12 +7385,12 @@
#: remote.c:1088
#, c-format
msgid "src refspec %s matches more than one"
-msgstr "l'especificació de referència de src %s coincideix amb més d'una referència"
+msgstr ""
+"l'especificació de referència de src %s coincideix amb més d'una referència"
#. TRANSLATORS: "matches '%s'%" is the <dst> part of "git push
#. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
#. the <src>.
-#.
#: remote.c:1103
#, fuzzy, c-format
msgid ""
@@ -7132,9 +7406,9 @@
msgstr ""
"La destinació que heu proporcionat no és un nom de referència complet (és a "
"dir començant per \"refs/\"). Hem intentat endevinar el que voleu dir amb - "
-"Buscant una referència que coincideixi amb '%s' al costat remot. - Comprovar "
-"si el <src> ser empès ('%s') és una referència a \"refs/{headtags}/\". Si és "
-"així afegirem un refs/{headstags que no ha funcionat completament."
+"Buscant una referència que coincideixi amb '%s' al costat remot. - Comprovar"
+" si el <src> ser empès ('%s') és una referència a \"refs/{headtags}/\". Si "
+"és així afegirem un refs/{headstags que no ha funcionat completament."
#: remote.c:1123
#, c-format
@@ -7175,8 +7449,8 @@
"'%s:refs/tags/%s'?"
msgstr ""
"La part <src> de l'especificació de la referència és un objecte blob.\n"
-"Voleu posar una etiqueta al blob nou mitjançant la pujada a\n?"
-"«%s:refs/tags/%s»?"
+"Voleu posar una etiqueta al blob nou mitjançant la pujada a\n"
+"?«%s:refs/tags/%s»?"
#: remote.c:1174
#, c-format
@@ -7191,7 +7465,9 @@
#: remote.c:1197
#, c-format
msgid "dst refspec %s matches more than one"
-msgstr "l'especificació de la referència dst %s coincideixen amb més d'una referència"
+msgstr ""
+"l'especificació de la referència dst %s coincideixen amb més d'una "
+"referència"
#: remote.c:1204
#, c-format
@@ -7221,7 +7497,8 @@
#, c-format
msgid "push destination '%s' on remote '%s' has no local tracking branch"
msgstr ""
-"el destí de pujada «%s» en el remot «%s» no té cap branca amb seguiment remot"
+"el destí de pujada «%s» en el remot «%s» no té cap branca amb seguiment "
+"remot"
#: remote.c:1769
#, c-format
@@ -7354,7 +7631,7 @@
msgid "there were errors while writing '%s' (%s)"
msgstr "s'han produït errors en escriure «%s» (%s)"
-#: rerere.c:482
+#: rerere.c:482 builtin/gc.c:2247 builtin/gc.c:2282
#, c-format
msgid "failed to flush '%s'"
msgstr "no s'ha pogut buidar «%s»"
@@ -7399,8 +7676,8 @@
msgid "Recorded preimage for '%s'"
msgstr "Imatge prèvia registrada per a «%s»"
-#: rerere.c:865 submodule.c:2089 builtin/log.c:2000
-#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:1891
+#: rerere.c:865 submodule.c:2121 builtin/log.c:2002
+#: builtin/submodule--helper.c:1776 builtin/submodule--helper.c:1819
#, c-format
msgid "could not create directory '%s'"
msgstr "no s'ha pogut crear el directori «%s»"
@@ -7438,46 +7715,43 @@
msgid "could not determine HEAD revision"
msgstr "no s'ha pogut determinar la revisió de HEAD"
-#: reset.c:70 reset.c:76 sequencer.c:3669
+#: reset.c:70 reset.c:76 sequencer.c:3703
#, c-format
msgid "failed to find tree of %s"
msgstr "s'ha produït un error en cercar l'arbre de %s"
-#: revision.c:2343
-msgid "--unpacked=<packfile> no longer supported"
-msgstr "--unpacked=<packfile> ja no s'ha admet"
+#: revision.c:2259
+#, fuzzy
+msgid "--unsorted-input is incompatible with --no-walk"
+msgstr "--dir-diff és incompatible amb --no-index"
-#: revision.c:2683
+#: revision.c:2346
+msgid "--unpacked=<packfile> no longer supported"
+msgstr "--unpacked=<packfile> ja no s'admet"
+
+#: revision.c:2655 revision.c:2659
+#, fuzzy
+msgid "--no-walk is incompatible with --unsorted-input"
+msgstr "--dir-diff és incompatible amb --no-index"
+
+#: revision.c:2690
msgid "your current branch appears to be broken"
msgstr "la vostra branca actual sembla malmesa"
-#: revision.c:2686
+#: revision.c:2693
#, c-format
msgid "your current branch '%s' does not have any commits yet"
msgstr "la branca actual «%s» encara no té cap comissió"
-#: revision.c:2892
+#: revision.c:2895
msgid "-L does not yet support diff formats besides -p and -s"
msgstr "-L no és encara compatible amb formats que no siguin «-p» o «-s»"
-#: run-command.c:767
-msgid "open /dev/null failed"
-msgstr "s'ha produït un error en obrir /dev/null"
-
-#: run-command.c:1275
+#: run-command.c:1278
#, c-format
msgid "cannot create async thread: %s"
msgstr "no s'ha pogut crear fil «async»: %s"
-#: run-command.c:1345
-#, c-format
-msgid ""
-"The '%s' hook was ignored because it's not set as executable.\n"
-"You can disable this warning with `git config advice.ignoredHook false`."
-msgstr ""
-"El lligam «%s» s'ha ignorat perquè no s'ha establert com a executable.\n"
-"Podeu desactivar aquest avís amb «git config advice.ignoredHook false»."
-
#: send-pack.c:150
msgid "unexpected flush packet while reading remote unpack status"
msgstr ""
@@ -7498,71 +7772,75 @@
msgid "failed to sign the push certificate"
msgstr "s'ha produït un error en signar el certificat de pujada"
-#: send-pack.c:433
+#: send-pack.c:435
msgid "send-pack: unable to fork off fetch subprocess"
msgstr "send-pack: no es pot bifurcar obtenint un subprocés"
-#: send-pack.c:455
+#: send-pack.c:457
+#, fuzzy
msgid "push negotiation failed; proceeding anyway with push"
msgstr ""
+"ha fallat la negociació de l'empenta; s'està procedint igualment amb "
+"l'empenta"
-#: send-pack.c:52
+#: send-pack.c:528
msgid "the receiving end does not support this repository's hash algorithm"
-msgstr "el receptor de destí no admet l'algorisme d'hash del repositori"
+msgstr "el receptor de destí no admet l'algorisme de hash del repositori"
-#: send-pack.c:529
+#: send-pack.c:537
msgid "the receiving end does not support --signed push"
msgstr "el destí receptor no admet pujar --signed"
-#: send-pack.c:531
+#: send-pack.c:539
msgid ""
-"not sending a push certificate since the receiving end does not support --"
-"signed push"
+"not sending a push certificate since the receiving end does not support "
+"--signed push"
msgstr ""
"no s'està enviant una certificació de pujada perquè el destí receptor no "
"admet pujar --signed"
-#: send-pack.c:543
+#: send-pack.c:546
msgid "the receiving end does not support --atomic push"
msgstr "el destí receptor no admet pujar --atomic"
-#: send-pack.c:548
+#: send-pack.c:551
msgid "the receiving end does not support push options"
msgstr "el destí receptor no admet opcions de pujada"
-#: sequencer.c:196
+#: sequencer.c:197
#, c-format
msgid "invalid commit message cleanup mode '%s'"
msgstr "mode de neteja «%s» no vàlid en la comissió del missatge"
-#: sequencer.c:324
+#: sequencer.c:325
#, c-format
msgid "could not delete '%s'"
msgstr "no s'ha pogut suprimir «%s»"
-#: sequencer.c:344 builtin/rebase.c:757 builtin/rebase.c:1592 builtin/rm.c:402
+#: sequencer.c:345 sequencer.c:4752 builtin/rebase.c:563 builtin/rebase.c:1297
+#: builtin/rm.c:408
#, c-format
msgid "could not remove '%s'"
msgstr "no s'ha pogut eliminar «%s»"
-#: sequencer.c:354
+#: sequencer.c:355
msgid "revert"
msgstr "revertir"
-#: sequencer.c:356
+#: sequencer.c:357
msgid "cherry-pick"
msgstr "cherry-pick"
-#: sequencer.c:358
+#: sequencer.c:359
msgid "rebase"
msgstr "rebase"
-#: sequencer.c:360
+#: sequencer.c:361
#, c-format
msgid "unknown action: %d"
msgstr "acció desconeguda: %d"
-#: sequencer.c:419
+#: sequencer.c:420
msgid ""
"after resolving the conflicts, mark the corrected paths\n"
"with 'git add <paths>' or 'git rm <paths>'"
@@ -7570,119 +7848,138 @@
"després de resoldre els conflictes, marqueu els camins\n"
"corregits amb «git add <camins>» o «git rm <camins>»"
-#: sequencer.c:422
+#: sequencer.c:423
+#, fuzzy
msgid ""
-"after resolving the conflicts, mark the corrected paths\n"
-"with 'git add <paths>' or 'git rm <paths>'\n"
-"and commit the result with 'git commit'"
+"After resolving the conflicts, mark them with\n"
+"\"git add/rm <pathspec>\", then run\n"
+"\"git cherry-pick --continue\".\n"
+"You can instead skip this commit with \"git cherry-pick --skip\".\n"
+"To abort and get back to the state before \"git cherry-pick\",\n"
+"run \"git cherry-pick --abort\"."
msgstr ""
-"després de resoldre els conflictes, marqueu els camins\n"
-"corregits amb «git add <camins>» o «git rm <camins>»\n"
-"i cometeu el resultat amb «git commit»"
+"Resoleu tots els conflictes manualment, marqueu-los com a resolts amb\n"
+"«git add/rm <fitxers_amb_conflicte>», llavors executeu «git rebase --continue».\n"
+"Alternativament podeu ometre aquesta comissió: executeu «git rebase --skip».\n"
+"Per a avortar i tornar a l'estat anterior abans de l'ordre «git rebase», executeu «git rebase --abort»."
-#: sequencer.c:435 sequencer.c:3271
+#: sequencer.c:430
+#, fuzzy
+msgid ""
+"After resolving the conflicts, mark them with\n"
+"\"git add/rm <pathspec>\", then run\n"
+"\"git revert --continue\".\n"
+"You can instead skip this commit with \"git revert --skip\".\n"
+"To abort and get back to the state before \"git revert\",\n"
+"run \"git revert --abort\"."
+msgstr ""
+"Resoleu tots els conflictes manualment, marqueu-los com a resolts amb\n"
+"«git add/rm <fitxers_amb_conflicte>», llavors executeu «git rebase --continue».\n"
+"Alternativament podeu ometre aquesta comissió: executeu «git rebase --skip».\n"
+"Per a avortar i tornar a l'estat anterior abans de l'ordre «git rebase», executeu «git rebase --abort»."
+
+#: sequencer.c:448 sequencer.c:3288
#, c-format
msgid "could not lock '%s'"
msgstr "no s'ha pogut bloquejar «%s»"
-#: sequencer.c:437 sequencer.c:3070 sequencer.c:3275 sequencer.c:3289
-#: sequencer.c:3546 sequencer.c:5567 strbuf.c:1170 wrapper.c:631
+#: sequencer.c:450 sequencer.c:3087 sequencer.c:3292 sequencer.c:3306
+#: sequencer.c:3564 sequencer.c:5619 strbuf.c:1176 wrapper.c:639
#, c-format
msgid "could not write to '%s'"
msgstr "no s'ha pogut escriure a «%s»"
-#: sequencer.c:442
+#: sequencer.c:455
#, c-format
msgid "could not write eol to '%s'"
msgstr "no s'ha pogut escriure el terminador de línia a «%s»"
-#: sequencer.c:447 sequencer.c:3075 sequencer.c:3277 sequencer.c:3291
-#: sequencer.c:3554
+#: sequencer.c:460 sequencer.c:3092 sequencer.c:3294 sequencer.c:3308
+#: sequencer.c:3572
#, c-format
msgid "failed to finalize '%s'"
msgstr "s'ha produït un error en finalitzar «%s»"
-#: sequencer.c:486
+#: sequencer.c:499
#, c-format
msgid "your local changes would be overwritten by %s."
msgstr "els vostres canvis locals se sobreescriurien per %s."
-#: sequencer.c:490
+#: sequencer.c:503
msgid "commit your changes or stash them to proceed."
msgstr "cometeu els vostres canvis o feu un «stash» per a procedir."
-#: sequencer.c:522
+#: sequencer.c:535
#, c-format
msgid "%s: fast-forward"
msgstr "%s: avanç ràpid"
-#: sequencer.c:561 builtin/tag.c:609
+#: sequencer.c:574 builtin/tag.c:610
#, c-format
msgid "Invalid cleanup mode %s"
msgstr "Mode de neteja no vàlid %s"
#. TRANSLATORS: %s will be "revert", "cherry-pick" or
#. "rebase".
-#.
-#: sequencer.c:671
+#: sequencer.c:685
#, c-format
msgid "%s: Unable to write new index file"
msgstr "%s: No s'ha pogut escriure un fitxer d'índex nou"
-#: sequencer.c:685
+#: sequencer.c:699
msgid "unable to update cache tree"
msgstr "no s'ha pogut actualitzar l'arbre cau"
-#: sequencer.c:699
+#: sequencer.c:713
msgid "could not resolve HEAD commit"
msgstr "no s'ha pogut resoldre la comissió HEAD"
-#: sequencer.c:779
+#: sequencer.c:793
#, c-format
msgid "no key present in '%.*s'"
msgstr "no hi ha una clau a «%.*s»"
-#: sequencer.c:790
+#: sequencer.c:804
#, c-format
msgid "unable to dequote value of '%s'"
msgstr "no s'han pogut treure les cometes del valor de «%s»"
-#: sequencer.c:827 wrapper.c:201 wrapper.c:371 builtin/am.c:728
-#: builtin/am.c:820 builtin/merge.c:1140 builtin/rebase.c:910
+#: sequencer.c:841 wrapper.c:209 wrapper.c:379 builtin/am.c:730
+#: builtin/am.c:822 builtin/rebase.c:694
#, c-format
msgid "could not open '%s' for reading"
msgstr "no s'ha pogut obrir «%s» per a lectura"
-#: sequencer.c:837
+#: sequencer.c:851
msgid "'GIT_AUTHOR_NAME' already given"
msgstr "Ja s'ha donat «GIT_AUTHOR_NAME»"
-#: sequencer.c:842
+#: sequencer.c:856
msgid "'GIT_AUTHOR_EMAIL' already given"
msgstr "Ja s'ha donat «GIT_AUTHOR_EMAIL»"
-#: sequencer.c:847
+#: sequencer.c:861
msgid "'GIT_AUTHOR_DATE' already given"
msgstr "Ja s'ha donat «GIT_AUTHOR_DATE»"
-#: sequencer.c:851
+#: sequencer.c:865
#, c-format
msgid "unknown variable '%s'"
msgstr "variable «%s» desconeguda"
-#: sequencer.c:856
+#: sequencer.c:870
msgid "missing 'GIT_AUTHOR_NAME'"
msgstr "falta «GIT_AUTHOR_NAME»"
-#: sequencer.c:858
+#: sequencer.c:872
msgid "missing 'GIT_AUTHOR_EMAIL'"
msgstr "falta «GIT_AUTHOR_EMAIL»"
-#: sequencer.c:860
+#: sequencer.c:874
msgid "missing 'GIT_AUTHOR_DATE'"
msgstr "falta «GIT_AUTHOR_DATE»"
-#: sequencer.c:925
+#: sequencer.c:939
#, c-format
msgid ""
"you have staged changes in your working tree\n"
@@ -7699,8 +7996,7 @@
" git rebase --continue\n"
msgstr ""
"teniu canvis «staged» en el vostre arbre de treball\n"
-"Si aquests canvis estan pensats per fer «squash» a la comissió prèvia, "
-"executeu:\n"
+"Si aquests canvis estan pensats per fer «squash» a la comissió prèvia, executeu:\n"
"\n"
" git commit --amend %s\n"
"\n"
@@ -7712,11 +8008,11 @@
"\n"
" git rebase --continue\n"
-#: sequencer.c:1212
+#: sequencer.c:1227
msgid "'prepare-commit-msg' hook failed"
msgstr "el lligam «prepare-commit-msg» ha fallat"
-#: sequencer.c:1218
+#: sequencer.c:1233
msgid ""
"Your name and email address were configured automatically based\n"
"on your username and hostname. Please check that they are accurate.\n"
@@ -7743,7 +8039,7 @@
"\n"
" git commit --amend --reset-author\n"
-#: sequencer.c:1231
+#: sequencer.c:1246
msgid ""
"Your name and email address were configured automatically based\n"
"on your username and hostname. Please check that they are accurate.\n"
@@ -7769,343 +8065,348 @@
"\n"
" git commit --amend --reset-author\n"
-#: sequencer.c:1273
+#: sequencer.c:1288
msgid "couldn't look up newly created commit"
msgstr "no s'ha pogut trobar la comissió novament creada"
-#: sequencer.c:1275
+#: sequencer.c:1290
msgid "could not parse newly created commit"
msgstr "no s'ha pogut analitzar la comissió novament creada"
-#: sequencer.c:1321
+#: sequencer.c:1336
msgid "unable to resolve HEAD after creating commit"
msgstr "no s'ha pogut resoldre HEAD després de crear la comissió"
-#: sequencer.c:1323
+#: sequencer.c:1338
msgid "detached HEAD"
msgstr "HEAD separat"
-#: sequencer.c:1327
+#: sequencer.c:1342
msgid " (root-commit)"
msgstr " (comissió arrel)"
-#: sequencer.c:1348
+#: sequencer.c:1363
msgid "could not parse HEAD"
msgstr "no s'ha pogut analitzar HEAD"
-#: sequencer.c:1350
+#: sequencer.c:1365
#, c-format
msgid "HEAD %s is not a commit!"
msgstr "HEAD %s no és una comissió!"
-#: sequencer.c:1354 sequencer.c:1432 builtin/commit.c:1692
+#: sequencer.c:1369 sequencer.c:1447 builtin/commit.c:1707
msgid "could not parse HEAD commit"
msgstr "no s'ha pogut analitzar la comissió HEAD"
-#: sequencer.c:1410 sequencer.c:2295
+#: sequencer.c:1425 sequencer.c:2310
msgid "unable to parse commit author"
msgstr "no s'ha pogut analitzar l'autor de la comissió"
-#: sequencer.c:1421 builtin/am.c:1614 builtin/merge.c:706
+#: sequencer.c:1436 builtin/am.c:1616 builtin/merge.c:708
msgid "git write-tree failed to write a tree"
msgstr "git write-tree ha fallat en escriure un arbre"
-#: sequencer.c:1454 sequencer.c:1574
+#: sequencer.c:1469 sequencer.c:1589
#, c-format
msgid "unable to read commit message from '%s'"
msgstr "no s'ha pogut llegir el missatge de comissió des de «%s»"
-#: sequencer.c:1485 sequencer.c:1517
+#: sequencer.c:1500 sequencer.c:1532
#, c-format
msgid "invalid author identity '%s'"
msgstr "identitat d'autor no vàlida: «%s»"
-#: sequencer.c:1491
+#: sequencer.c:1506
msgid "corrupt author: missing date information"
msgstr "autor malmès: falta la informació de la data"
-#: sequencer.c:1530 builtin/am.c:1641 builtin/commit.c:1806 builtin/merge.c:909
-#: builtin/merge.c:934 t/helper/test-fast-rebase.c:78
+#: sequencer.c:1545 builtin/am.c:1643 builtin/commit.c:1821
+#: builtin/merge.c:913 builtin/merge.c:938 t/helper/test-fast-rebase.c:78
msgid "failed to write commit object"
msgstr "s'ha produït un error en escriure l'objecte de comissió"
-#: sequencer.c:1557 sequencer.c:4493 t/helper/test-fast-rebase.c:198
+#: sequencer.c:1572 sequencer.c:4524 t/helper/test-fast-rebase.c:199
+#: t/helper/test-fast-rebase.c:217
#, c-format
msgid "could not update %s"
msgstr "no s'ha pogut actualitzar %s"
-#: sequencer.c:1606
+#: sequencer.c:1621
#, c-format
msgid "could not parse commit %s"
msgstr "no s'ha pogut analitzar la comissió %s"
-#: sequencer.c:1611
+#: sequencer.c:1626
#, c-format
msgid "could not parse parent commit %s"
msgstr "no s'ha pogut analitzar la comissió pare %s"
-#: sequencer.c:1694 sequencer.c:1975
+#: sequencer.c:1709 sequencer.c:1990
#, c-format
msgid "unknown command: %d"
msgstr "ordre desconeguda: %d"
-#: sequencer.c:1736 git-rebase--preserve-merges.sh:486
+#: sequencer.c:1751
msgid "This is the 1st commit message:"
msgstr "Aquest és el 1r missatge de comissió:"
-#: sequencer.c:1737
+#: sequencer.c:1752
#, c-format
msgid "This is the commit message #%d:"
msgstr "Aquest és el missatge de comissió #%d:"
-#: sequencer.c:1738
+#: sequencer.c:1753
msgid "The 1st commit message will be skipped:"
msgstr "El primer missatge de comissió s'ometrà:"
-#: sequencer.c:1739
+#: sequencer.c:1754
#, c-format
msgid "The commit message #%d will be skipped:"
msgstr "El missatge de comissió núm. #%d s'ometrà:"
-#: sequencer.c:1740
+#: sequencer.c:1755
#, c-format
msgid "This is a combination of %d commits."
msgstr "Això és una combinació de %d comissions."
-#: sequencer.c:1887 sequencer.c:1944
+#: sequencer.c:1902 sequencer.c:1959
#, c-format
msgid "cannot write '%s'"
msgstr "no es pot escriure «%s»"
-#: sequencer.c:1934
+#: sequencer.c:1949
msgid "need a HEAD to fixup"
msgstr "cal un HEAD per reparar-ho"
-#: sequencer.c:1936 sequencer.c:3581
+#: sequencer.c:1951 sequencer.c:3599
msgid "could not read HEAD"
msgstr "no s'ha pogut llegir HEAD"
-#: sequencer.c:1938
+#: sequencer.c:1953
msgid "could not read HEAD's commit message"
msgstr "no s'ha pogut llegir el missatge de comissió de HEAD"
-#: sequencer.c:1962
+#: sequencer.c:1977
#, c-format
msgid "could not read commit message of %s"
msgstr "no s'ha pogut llegir el missatge de comissió: %s"
-#: sequencer.c:2072
+#: sequencer.c:2087
msgid "your index file is unmerged."
msgstr "el vostre fitxer d'índex està sense fusionar."
-#: sequencer.c:2079
+#: sequencer.c:2094
msgid "cannot fixup root commit"
msgstr "no es pot arreglar la comissió arrel"
-#: sequencer.c:2098
+#: sequencer.c:2113
#, c-format
msgid "commit %s is a merge but no -m option was given."
msgstr "la comissió %s és una fusió però no s'ha donat cap opció -m."
-#: sequencer.c:2106 sequencer.c:2114
+#: sequencer.c:2121 sequencer.c:2129
#, c-format
msgid "commit %s does not have parent %d"
msgstr "la comissió %s no té pare %d"
-#: sequencer.c:2120
+#: sequencer.c:2135
#, c-format
msgid "cannot get commit message for %s"
msgstr "no es pot obtenir el missatge de comissió de %s"
#. TRANSLATORS: The first %s will be a "todo" command like
#. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:2139
+#: sequencer.c:2154
#, c-format
msgid "%s: cannot parse parent commit %s"
msgstr "%s: no es pot analitzar la comissió pare %s"
-#: sequencer.c:2205
+#: sequencer.c:2220
#, c-format
msgid "could not rename '%s' to '%s'"
msgstr "no s'ha pogut canviar el nom «%s» a «%s»"
-#: sequencer.c:2265
+#: sequencer.c:2280
#, c-format
msgid "could not revert %s... %s"
msgstr "no s'ha pogut revertir %s... %s"
-#: sequencer.c:2266
+#: sequencer.c:2281
#, c-format
msgid "could not apply %s... %s"
msgstr "no s'ha pogut aplicar %s... %s"
-#: sequencer.c:2287
-#, fuzzy, c-format
+#: sequencer.c:2302
+#, c-format
msgid "dropping %s %s -- patch contents already upstream\n"
-msgstr ""
-"deixant anar per cents per cents -- el contingut del pedaç ja s'ha avançat"
+msgstr "descartant %s %s -- el contingut del pedaç ja està a la font\n"
-#: sequencer.c:2345
+#: sequencer.c:2360
#, c-format
msgid "git %s: failed to read the index"
msgstr "git %s: s'ha produït un error en llegir l'índex"
-#: sequencer.c:2352
+#: sequencer.c:2368
#, c-format
msgid "git %s: failed to refresh the index"
msgstr "git %s: s'ha produït un error en actualitzar l'índex"
-#: sequencer.c:2425
+#: sequencer.c:2448
#, c-format
msgid "%s does not accept arguments: '%s'"
msgstr "%s no accepta arguments: «%s»"
-#: sequencer.c:2434
+#: sequencer.c:2457
#, c-format
msgid "missing arguments for %s"
msgstr "falten els arguments per a %s"
-#: sequencer.c:2477
+#: sequencer.c:2500
#, c-format
msgid "could not parse '%s'"
msgstr "no s'ha pogut analitzar «%s»"
-#: sequencer.c:2538
+#: sequencer.c:2561
#, c-format
msgid "invalid line %d: %.*s"
msgstr "línia no vàlida %d: %.*s"
-#: sequencer.c:2549
+#: sequencer.c:2572
#, c-format
msgid "cannot '%s' without a previous commit"
msgstr "no es pot «%s» sense una comissió prèvia"
-#: sequencer.c:2635
+#: sequencer.c:2620 builtin/rebase.c:184
+#, c-format
+msgid "could not read '%s'."
+msgstr "no s'ha pogut llegir «%s»."
+
+#: sequencer.c:2658
msgid "cancelling a cherry picking in progress"
msgstr "s'està cancel·lant un «cherry pick» en curs"
-#: sequencer.c:2644
+#: sequencer.c:2667
msgid "cancelling a revert in progress"
msgstr "s'està cancel·lant la reversió en curs"
-#: sequencer.c:2690
+#: sequencer.c:2707
msgid "please fix this using 'git rebase --edit-todo'."
msgstr "corregiu-ho usant «git rebase --edit-todo»."
-#: sequencer.c:2692
+#: sequencer.c:2709
#, c-format
msgid "unusable instruction sheet: '%s'"
msgstr "full d'instruccions inusable: «%s»"
-#: sequencer.c:2697
+#: sequencer.c:2714
msgid "no commits parsed."
msgstr "no s'ha analitzat cap comissió."
-#: sequencer.c:2708
+#: sequencer.c:2725
msgid "cannot cherry-pick during a revert."
msgstr "no es pot fer «cherry pick» durant una reversió."
-#: sequencer.c:2710
+#: sequencer.c:2727
msgid "cannot revert during a cherry-pick."
msgstr "no es pot revertir durant un «cherry pick»."
-#: sequencer.c:2788
+#: sequencer.c:2805
#, c-format
msgid "invalid value for %s: %s"
msgstr "valor no vàlid per a %s: %s"
-#: sequencer.c:2897
+#: sequencer.c:2914
msgid "unusable squash-onto"
msgstr "«squash-onto» no usable"
-#: sequencer.c:2917
+#: sequencer.c:2934
#, c-format
msgid "malformed options sheet: '%s'"
msgstr "full d'opcions mal format: «%s»"
-#: sequencer.c:3012 sequencer.c:4869
+#: sequencer.c:3029 sequencer.c:4903
msgid "empty commit set passed"
msgstr "conjunt de comissions buit passat"
-#: sequencer.c:3029
+#: sequencer.c:3046
msgid "revert is already in progress"
msgstr "una reversió ja està en curs"
-#: sequencer.c:3031
+#: sequencer.c:3048
#, c-format
msgid "try \"git revert (--continue | %s--abort | --quit)\""
msgstr "intenteu «git revert (--continue | %s--abort | --quit)»"
-#: sequencer.c:3034
+#: sequencer.c:3051
msgid "cherry-pick is already in progress"
msgstr "un «cherry pick» ja està en curs"
-#: sequencer.c:3036
+#: sequencer.c:3053
#, c-format
msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
msgstr "intenteu «git cherry-pick (--continue | %s--abort | --quit)»"
-#: sequencer.c:3050
+#: sequencer.c:3067
#, c-format
msgid "could not create sequencer directory '%s'"
msgstr "no s'ha pogut crear el directori de seqüenciador «%s»"
-#: sequencer.c:3065
+#: sequencer.c:3082
msgid "could not lock HEAD"
msgstr "no s'ha pogut bloquejar HEAD"
-#: sequencer.c:3125 sequencer.c:4582
+#: sequencer.c:3142 sequencer.c:4613
msgid "no cherry-pick or revert in progress"
msgstr "ni hi ha cap «cherry pick» ni cap reversió en curs"
-#: sequencer.c:3127 sequencer.c:3138
+#: sequencer.c:3144 sequencer.c:3155
msgid "cannot resolve HEAD"
msgstr "no es pot resoldre HEAD"
-#: sequencer.c:3129 sequencer.c:3173
+#: sequencer.c:3146 sequencer.c:3190
msgid "cannot abort from a branch yet to be born"
msgstr "no es pot avortar des d'una branca que encara ha de nàixer"
-#: sequencer.c:3159 builtin/grep.c:759
+#: sequencer.c:3176 builtin/grep.c:772
#, c-format
msgid "cannot open '%s'"
msgstr "no es pot obrir «%s»"
-#: sequencer.c:3161
+#: sequencer.c:3178
#, c-format
msgid "cannot read '%s': %s"
msgstr "no es pot llegir «%s»: %s"
-#: sequencer.c:3162
+#: sequencer.c:3179
msgid "unexpected end of file"
msgstr "final de fitxer inesperat"
-#: sequencer.c:3168
+#: sequencer.c:3185
#, c-format
msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
msgstr "el fitxer HEAD emmagatzemat abans de fer «cherry pick» «%s» és malmès"
-#: sequencer.c:3179
+#: sequencer.c:3196
msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
msgstr "Sembla que heu mogut HEAD sense rebobinar, comproveu-ho HEAD"
-#: sequencer.c:3220
+#: sequencer.c:3237
msgid "no revert in progress"
msgstr "no hi ha cap reversió en curs"
-#: sequencer.c:3229
+#: sequencer.c:3246
msgid "no cherry-pick in progress"
msgstr "ni hi ha cap «cherry pick» en curs"
-#: sequencer.c:3239
+#: sequencer.c:3256
msgid "failed to skip the commit"
msgstr "s'ha produït un error en ometre la comissió"
-#: sequencer.c:3246
+#: sequencer.c:3263
msgid "there is nothing to skip"
msgstr "no hi ha res a ometre"
-#: sequencer.c:3249
+#: sequencer.c:3266
#, c-format
msgid ""
"have you committed already?\n"
@@ -8114,16 +8415,16 @@
"heu fet ja una comissió?\n"
"proveu «git %s --continue»"
-#: sequencer.c:3411 sequencer.c:4473
+#: sequencer.c:3428 sequencer.c:4504
msgid "cannot read HEAD"
msgstr "no es pot llegir HEAD"
-#: sequencer.c:3428
+#: sequencer.c:3445
#, c-format
msgid "unable to copy '%s' to '%s'"
msgstr "no s'ha pogut copiar «%s» a «%s»"
-#: sequencer.c:3436
+#: sequencer.c:3453
#, c-format
msgid ""
"You can amend the commit now, with\n"
@@ -8142,27 +8443,27 @@
"\n"
" git rebase --continue\n"
-#: sequencer.c:3446
+#: sequencer.c:3463
#, c-format
msgid "Could not apply %s... %.*s"
msgstr "No s'ha pogut aplicar %s... %.*s"
-#: sequencer.c:3453
+#: sequencer.c:3470
#, c-format
msgid "Could not merge %.*s"
msgstr "No s'ha pogut fusionar %.*s"
-#: sequencer.c:3467 sequencer.c:3471 builtin/difftool.c:644
+#: sequencer.c:3484 sequencer.c:3488 builtin/difftool.c:639
#, c-format
msgid "could not copy '%s' to '%s'"
msgstr "no s'ha pogut copiar «%s» a «%s»"
-#: sequencer.c:3483
+#: sequencer.c:3500
#, c-format
msgid "Executing: %s\n"
msgstr "S'està executant: %s\n"
-#: sequencer.c:3498
+#: sequencer.c:3515
#, c-format
msgid ""
"execution failed: %s\n"
@@ -8177,11 +8478,11 @@
" git rebase --continue\n"
"\n"
-#: sequencer.c:3504
+#: sequencer.c:3521
msgid "and made changes to the index and/or the working tree\n"
msgstr "i ha fet canvis a l'índex i/o l'arbre de treball\n"
-#: sequencer.c:3510
+#: sequencer.c:3527
#, c-format
msgid ""
"execution succeeded: %s\n"
@@ -8197,92 +8498,92 @@
"\n"
" git rebase --continue\n"
-#: sequencer.c:3571
+#: sequencer.c:3589
#, c-format
msgid "illegal label name: '%.*s'"
msgstr "nom d'etiqueta no permès: «%.*s»"
-#: sequencer.c:3625
+#: sequencer.c:3662
msgid "writing fake root commit"
msgstr "s'està escrivint una comissió arrel falsa"
-#: sequencer.c:3630
+#: sequencer.c:3667
msgid "writing squash-onto"
msgstr "s'està escrivint «squash-onto»"
-#: sequencer.c:3714
+#: sequencer.c:3746
#, c-format
msgid "could not resolve '%s'"
msgstr "no s'ha pogut resoldre «%s»"
-#: sequencer.c:3747
+#: sequencer.c:3778
msgid "cannot merge without a current revision"
msgstr "no es pot fusionar sense una revisió actual"
-#: sequencer.c:3769
+#: sequencer.c:3800
#, c-format
msgid "unable to parse '%.*s'"
msgstr "no s'ha pogut analitzar «%.*s»"
-#: sequencer.c:3778
+#: sequencer.c:3809
#, c-format
msgid "nothing to merge: '%.*s'"
msgstr "no hi ha res per fusionar «%.*s»"
-#: sequencer.c:3790
+#: sequencer.c:3821
#, fuzzy
msgid "octopus merge cannot be executed on top of a [new root]"
msgstr ""
"no es pot executar la fusió del pop a la part superior d'una [arrel nova]"
-#: sequencer.c:3806
+#: sequencer.c:3876
#, c-format
msgid "could not get commit message of '%s'"
msgstr "no s'ha pogut llegir el missatge de comissió de «%s»"
-#: sequencer.c:3989
+#: sequencer.c:4022
#, c-format
msgid "could not even attempt to merge '%.*s'"
msgstr "no s'ha pogut fusionar «%.*s»"
-#: sequencer.c:4005
+#: sequencer.c:4038
msgid "merge: Unable to write new index file"
msgstr "fusió: no s'ha pogut escriure un fitxer d'índex nou"
-#: sequencer.c:4079
+#: sequencer.c:4119
msgid "Cannot autostash"
msgstr "no es pot fer un «stash» automàticament"
-#: sequencer.c:4082
+#: sequencer.c:4122
#, c-format
msgid "Unexpected stash response: '%s'"
msgstr "Resposta de «stash» inesperada: «%s»"
-#: sequencer.c:4088
+#: sequencer.c:4128
#, c-format
msgid "Could not create directory for '%s'"
msgstr "No s'ha pogut crear el directori per a «%s»"
-#: sequencer.c:4091
+#: sequencer.c:4131
#, c-format
msgid "Created autostash: %s\n"
msgstr "S'ha creat un «stash» automàticament: %s\n"
-#: sequencer.c:4095
+#: sequencer.c:4135
msgid "could not reset --hard"
msgstr "no s'ha pogut fer reset --hard"
-#: sequencer.c:4120
+#: sequencer.c:4160
#, c-format
msgid "Applied autostash.\n"
msgstr "S'ha aplicat el «stash» automàticament.\n"
-#: sequencer.c:4132
+#: sequencer.c:4172
#, c-format
msgid "cannot store %s"
msgstr "no es pot emmagatzemar %s"
-#: sequencer.c:4135
+#: sequencer.c:4175
#, c-format
msgid ""
"%s\n"
@@ -8293,30 +8594,30 @@
"Els vostres canvis estan segurs en el «stash».\n"
"Podeu executar «git stash pop» o «git stash drop» en qualsevol moment.\n"
-#: sequencer.c:4140
+#: sequencer.c:4180
msgid "Applying autostash resulted in conflicts."
msgstr "L'aplicació del «stash» automàticament ha donat conflictes."
-#: sequencer.c:4141
+#: sequencer.c:4181
msgid "Autostash exists; creating a new stash entry."
msgstr ""
"El «stash» automàtic ja existeix; s'està creant una entrada «stash» nova."
-#: sequencer.c:4234 git-rebase--preserve-merges.sh:769
+#: sequencer.c:4253
msgid "could not detach HEAD"
msgstr "no s'ha pogut separar HEAD"
-#: sequencer.c:4249
+#: sequencer.c:4268
#, c-format
msgid "Stopped at HEAD\n"
msgstr "Aturat a HEAD\n"
-#: sequencer.c:4251
+#: sequencer.c:4270
#, c-format
msgid "Stopped at %s\n"
msgstr "Aturat a %s\n"
-#: sequencer.c:4259
+#: sequencer.c:4302
#, c-format
msgid ""
"Could not execute the todo command\n"
@@ -8337,58 +8638,58 @@
" git rebase --edit-todo\n"
" git rebase --continue\n"
-#: sequencer.c:4305
+#: sequencer.c:4348
#, c-format
msgid "Rebasing (%d/%d)%s"
msgstr "S'està fent «rebase» (%d/%d)%s"
-#: sequencer.c:4351
+#: sequencer.c:4394
#, c-format
msgid "Stopped at %s... %.*s\n"
msgstr "Aturat a %s... %.*s\n"
-#: sequencer.c:4422
+#: sequencer.c:4464
#, c-format
msgid "unknown command %d"
msgstr "ordre %d desconeguda"
-#: sequencer.c:4481
+#: sequencer.c:4512
msgid "could not read orig-head"
msgstr "no s'ha pogut llegir orig-head"
-#: sequencer.c:4486
+#: sequencer.c:4517
msgid "could not read 'onto'"
msgstr "no s'ha pogut llegir «onto»"
-#: sequencer.c:4500
+#: sequencer.c:4531
#, c-format
msgid "could not update HEAD to %s"
msgstr "no s'ha pogut actualitzar HEAD a %s"
-#: sequencer.c:4560
+#: sequencer.c:4591
#, c-format
msgid "Successfully rebased and updated %s.\n"
msgstr "S'ha fet «rebase» i actualitzat %s amb èxit.\n"
-#: sequencer.c:4612
+#: sequencer.c:4643
msgid "cannot rebase: You have unstaged changes."
msgstr "No es pot fer «rebase»: teniu canvis «unstaged»."
-#: sequencer.c:4621
+#: sequencer.c:4652
msgid "cannot amend non-existing commit"
msgstr "no es pot esmenar una comissió no existent"
-#: sequencer.c:4623
+#: sequencer.c:4654
#, c-format
msgid "invalid file: '%s'"
msgstr "fitxer no vàlid: «%s»"
-#: sequencer.c:4625
+#: sequencer.c:4656
#, c-format
msgid "invalid contents: '%s'"
msgstr "contingut no vàlid: «%s»"
-#: sequencer.c:4628
+#: sequencer.c:4659
msgid ""
"\n"
"You have uncommitted changes in your working tree. Please, commit them\n"
@@ -8398,50 +8699,60 @@
"Teniu canvis no comesos en el vostre arbre de treball. \n"
"Cometeu-los primer i després executeu «git rebase --continue» de nou."
-#: sequencer.c:4664 sequencer.c:4703
+#: sequencer.c:4695 sequencer.c:4734
#, c-format
msgid "could not write file: '%s'"
msgstr "no s'ha pogut escriure el fitxer: «%s»"
-#: sequencer.c:4719
+#: sequencer.c:4750
msgid "could not remove CHERRY_PICK_HEAD"
msgstr "No s'ha pogut eliminar CHERRY_PICK_HEAD"
-#: sequencer.c:4726
+#: sequencer.c:4760
msgid "could not commit staged changes."
msgstr "no s'han pogut cometre els canvis «staged»."
-#: sequencer.c:4846
+#: sequencer.c:4880
#, c-format
msgid "%s: can't cherry-pick a %s"
msgstr "%s: no es pot fer «cherry pick» a %s"
-#: sequencer.c:4850
+#: sequencer.c:4884
#, c-format
msgid "%s: bad revision"
msgstr "%s: revisió incorrecta"
-#: sequencer.c:4885
+#: sequencer.c:4919
msgid "can't revert as initial commit"
msgstr "no es pot revertir com a comissió inicial"
-#: sequencer.c:5362
+#: sequencer.c:5190 sequencer.c:5419
+#, fuzzy, c-format
+msgid "skipped previously applied commit %s"
+msgstr "esmena la comissió anterior"
+
+#: sequencer.c:5260 sequencer.c:5435
+#, fuzzy
+msgid "use --reapply-cherry-picks to include skipped commits"
+msgstr "useu --reapply-cherry-picks per incloure les comissions omeses"
+
+#: sequencer.c:5406
msgid "make_script: unhandled options"
msgstr "make_script: opcions no gestionades"
-#: sequencer.c:5365
+#: sequencer.c:5409
msgid "make_script: error preparing revisions"
msgstr "make_script: s'ha produït un error en preparar les revisions"
-#: sequencer.c:5615 sequencer.c:5632
+#: sequencer.c:5667 sequencer.c:5684
msgid "nothing to do"
msgstr "res a fer"
-#: sequencer.c:5651
+#: sequencer.c:5703
msgid "could not skip unnecessary pick commands"
msgstr "no s'han pogut ometre les ordres «picks» no necessàries"
-#: sequencer.c:5751
+#: sequencer.c:5803
msgid "the script was already rearranged."
msgstr "l'script ja estava endreçat."
@@ -8457,8 +8768,7 @@
"Use 'git <command> -- <path>...' to specify paths that do not exist locally."
msgstr ""
"%s: no hi ha tal camí en l'arbre de treball.\n"
-"Useu «git <ordre> -- <camí>...» per a especificar camins que no existeixin "
-"localment."
+"Useu «git <ordre> -- <camí>...» per a especificar camins que no existeixin localment."
#: setup.c:198
#, c-format
@@ -8467,8 +8777,7 @@
"Use '--' to separate paths from revisions, like this:\n"
"'git <command> [<revision>...] -- [<file>...]'"
msgstr ""
-"argument ambigu «%s»: revisió no coneguda o el camí no és en l'arbre de "
-"treball.\n"
+"argument ambigu «%s»: revisió no coneguda o el camí no és en l'arbre de treball.\n"
"Useu «--» per a separar els camins de les revisions:\n"
"«git <ordre> [<revisió>...] -- [<fitxer>...]»"
@@ -8494,137 +8803,126 @@
"no s'ha pogut configurar un arbre de treball utilitzant una configuració no "
"vàlida"
-#: setup.c:423
+#: setup.c:423 builtin/rev-parse.c:895
msgid "this operation must be run in a work tree"
msgstr "aquesta operació s'ha d'executar en un arbre de treball"
-#: setup.c:661
+#: setup.c:658
#, c-format
msgid "Expected git repo version <= %d, found %d"
msgstr "S'esperava una versió de repositori de git <= %d, s'ha trobat %d"
-#: setup.c:669
-msgid "unknown repository extensions found:"
-msgstr "s'han trobat extensions de repositori desconegudes:"
+#: setup.c:666
+msgid "unknown repository extension found:"
+msgid_plural "unknown repository extensions found:"
+msgstr[0] "s'ha trobat una extensió de repositori desconeguda:"
+msgstr[1] "s'han trobat extensions de repositori desconegudes:"
-#: setup.c:681
-msgid "repo version is 0, but v1-only extensions found:"
-msgstr "el repositori és versió 0, però només s'han trobat extensions v1:"
+#: setup.c:680
+msgid "repo version is 0, but v1-only extension found:"
+msgid_plural "repo version is 0, but v1-only extensions found:"
+msgstr[0] ""
+"el repositori és versió 0, però només s'han trobat una extensió v1:"
+msgstr[1] "el repositori és versió 0, però només s'han trobat extensions v1:"
-#: setup.c:700
+#: setup.c:701
#, c-format
msgid "error opening '%s'"
msgstr "s'ha produït un error en obrir «%s»"
-#: setup.c:702
+#: setup.c:703
#, c-format
msgid "too large to be a .git file: '%s'"
msgstr "massa gran per a ser un fitxer .git: «%s»"
-#: setup.c:704
+#: setup.c:705
#, c-format
msgid "error reading %s"
msgstr "error en llegir %s"
-#: setup.c:706
+#: setup.c:707
#, c-format
msgid "invalid gitfile format: %s"
msgstr "format gitfile no vàlid: %s"
-#: setup.c:708
+#: setup.c:709
#, c-format
msgid "no path in gitfile: %s"
msgstr "sense camí al gitfile: %s"
-#: setup.c:710
+#: setup.c:711
#, c-format
msgid "not a git repository: %s"
msgstr "no és un repositori de git: %s"
-#: setup.c:812
+#: setup.c:813
#, c-format
msgid "'$%s' too big"
msgstr "«$%s» massa gran"
-#: setup.c:826
+#: setup.c:827
#, c-format
msgid "not a git repository: '%s'"
msgstr "no és un repositori de git: «%s»"
-#: setup.c:855 setup.c:857 setup.c:888
+#: setup.c:856 setup.c:858 setup.c:889
#, c-format
msgid "cannot chdir to '%s'"
msgstr "no es pot canviar de directori a «%s»"
-#: setup.c:860 setup.c:916 setup.c:926 setup.c:965 setup.c:973
+#: setup.c:861 setup.c:917 setup.c:927 setup.c:966 setup.c:974
msgid "cannot come back to cwd"
msgstr "no es pot tornar al directori de treball actual"
-#: setup.c:987
+#: setup.c:988
#, c-format
msgid "failed to stat '%*s%s%s'"
msgstr "s'ha produït un error en fer stat a «%*s%s%s»"
-#: setup.c:1225
+#: setup.c:1231
msgid "Unable to read current working directory"
msgstr "No s'ha pogut llegir el directori de treball actual"
-#: setup.c:1234 setup.c:1240
+#: setup.c:1240 setup.c:1246
#, c-format
msgid "cannot change to '%s'"
msgstr "no es pot canviar a «%s»"
-#: setup.c:1245
+#: setup.c:1251
#, c-format
msgid "not a git repository (or any of the parent directories): %s"
msgstr "no és un repositori de git (ni cap dels directoris pares): %s"
-#: setup.c:1251
+#: setup.c:1257
#, c-format
msgid ""
"not a git repository (or any parent up to mount point %s)\n"
"Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."
msgstr ""
"no és un repositori de git (ni cap pare fins al punt de muntatge %s)\n"
-"S'atura a la frontera de sistema de fitxers (GIT_DISCOVERY_ACROSS_FILESYSTEM "
-"no està establert)."
+"S'atura a la frontera de sistema de fitxers (GIT_DISCOVERY_ACROSS_FILESYSTEM no està establert)."
-#: setup.c:1370
+#: setup.c:1381
#, c-format
msgid ""
"problem with core.sharedRepository filemode value (0%.3o).\n"
"The owner of files must always have read and write permissions."
msgstr ""
-"hi ha un problema amb el valor de mode de fitxer core.sharedRepository "
-"(0%.3o).\n"
-"El propietari dels fitxers sempre ha de tenir permisos de lectura i "
-"escriptura."
+"hi ha un problema amb el valor de mode de fitxer core.sharedRepository (0%.3o).\n"
+"El propietari dels fitxers sempre ha de tenir permisos de lectura i escriptura."
-#: setup.c:1417
-msgid "open /dev/null or dup failed"
-msgstr "s'ha produït un error en obrir /dev/null o dup"
-
-#: setup.c:1432
+#: setup.c:1443
msgid "fork failed"
msgstr "el «fork» ha fallat"
-#: setup.c:1437 t/helper/test-simple-ipc.c:285
+#: setup.c:1448
msgid "setsid failed"
msgstr "«setsid» ha fallat"
-#: sparse-index.c:151
-msgid "attempting to use sparse-index without cone mode"
-msgstr ""
-
-#: sparse-index.c:156
-#, fuzzy
-msgid "unable to update cache-tree, staying full"
-msgstr "no s'ha pogut actualitzar l'arbre cau"
-
-#: sparse-index.c:239
-#, c-format
+#: sparse-index.c:273
+#, fuzzy, c-format
msgid "index entry is a directory, but not sparse (%08x)"
-msgstr ""
+msgstr "l'entrada d'índex és un directori, però no dispers (%08x)"
#. TRANSLATORS: IEC 80000-13:2008 gibibyte
#: strbuf.c:850
@@ -8678,13 +8976,13 @@
msgstr[0] "%u byte/s"
msgstr[1] "%u bytes/s"
-#: strbuf.c:1168 wrapper.c:199 wrapper.c:369 builtin/am.c:737
-#: builtin/rebase.c:866
+#: strbuf.c:1174 wrapper.c:207 wrapper.c:377 builtin/am.c:739
+#: builtin/rebase.c:650
#, c-format
msgid "could not open '%s' for writing"
msgstr "no s'ha pogut obrir «%s» per a escriptura"
-#: strbuf.c:1177
+#: strbuf.c:1183
#, c-format
msgid "could not edit '%s'"
msgstr "no s'ha pogut editar «%s»"
@@ -8702,14 +9000,15 @@
#, c-format
msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
msgstr ""
-"s'està ignorant «%s» que pot interpretar-se com a una opció de línia d'ordres: %s"
+"s'està ignorant «%s» que pot interpretar-se com a una opció de línia "
+"d'ordres: %s"
#: submodule-config.c:499
#, c-format
msgid "invalid value for %s"
msgstr "valor no vàlid per a %s"
-#: submodule-config.c:766
+#: submodule-config.c:767
#, c-format
msgid "Could not update .gitmodules entry %s"
msgstr "No s'ha pogut actualitzar l'entrada de .gitmodules %s"
@@ -8734,22 +9033,22 @@
msgid "staging updated .gitmodules failed"
msgstr "l'allistament del .gitmodules actualitzat ha fallat"
-#: submodule.c:328
+#: submodule.c:358
#, c-format
msgid "in unpopulated submodule '%s'"
msgstr "al submòdul sense popular «%s»"
-#: submodule.c:359
+#: submodule.c:389
#, c-format
msgid "Pathspec '%s' is in submodule '%.*s'"
msgstr "L'especificació «%s» és en el submòdul «%.*s»"
-#: submodule.c:436
+#: submodule.c:466
#, c-format
msgid "bad --ignore-submodules argument: %s"
msgstr "argument incorrecte --ignore-submodules: %s"
-#: submodule.c:818
+#: submodule.c:844
#, c-format
msgid ""
"Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -8758,50 +9057,50 @@
"El submòdul en la comissió %s al camí: «%s» col·lideix amb un submòdul amb "
"el mateix nom. Ometent-lo."
-#: submodule.c:921
+#: submodule.c:954
#, c-format
msgid "submodule entry '%s' (%s) is a %s, not a commit"
msgstr "l'entrada del submòdul «%s» (%s) és a %s, no és una comissió"
-#: submodule.c:1006
+#: submodule.c:1042
#, c-format
msgid ""
"Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
"submodule %s"
msgstr ""
-"No s'ha pogut executar l'ordre «git rev-list <commits> --not --remotes -n 1» "
-"en el submòdul %s"
+"No s'ha pogut executar l'ordre «git rev-list <commits> --not --remotes -n 1»"
+" en el submòdul %s"
-#: submodule.c:1129
+#: submodule.c:1165
#, c-format
msgid "process for submodule '%s' failed"
msgstr "ha fallat el procés per al submòdul «%s»"
-#: submodule.c:1158 builtin/branch.c:691 builtin/submodule--helper.c:2470
+#: submodule.c:1194 builtin/branch.c:692 builtin/submodule--helper.c:2713
msgid "Failed to resolve HEAD as a valid ref."
msgstr "S'ha produït un error en resoldre HEAD com a referència vàlida."
-#: submodule.c:1169
+#: submodule.c:1205
#, c-format
msgid "Pushing submodule '%s'\n"
msgstr "S'està pujant el submòdul «%s»\n"
-#: submodule.c:1172
+#: submodule.c:1208
#, c-format
msgid "Unable to push submodule '%s'\n"
msgstr "No s'ha pogut pujar el submòdul «%s»\n"
-#: submodule.c:1464
+#: submodule.c:1491
#, c-format
msgid "Fetching submodule %s%s\n"
msgstr "S'està obtenint el submòdul %s%s\n"
-#: submodule.c:1498
+#: submodule.c:1525
#, c-format
msgid "Could not access submodule '%s'\n"
msgstr "No s'ha pogut accedir al submòdul «%s»\n"
-#: submodule.c:1653
+#: submodule.c:1680
#, c-format
msgid ""
"Errors during submodule fetch:\n"
@@ -8810,61 +9109,63 @@
"Errors durant l'obtenció de submòduls:\n"
"%s"
-#: submodule.c:1678
+#: submodule.c:1705
#, c-format
msgid "'%s' not recognized as a git repository"
msgstr "«%s» no reconegut com un repositori git"
-#: submodule.c:1695
+#: submodule.c:1722
#, c-format
msgid "Could not run 'git status --porcelain=2' in submodule %s"
msgstr "No s'ha pogut executar «git status --porcelain=2» en el submòdul %s"
-#: submodule.c:1736
+#: submodule.c:1763
#, c-format
msgid "'git status --porcelain=2' failed in submodule %s"
msgstr "«git status --porcelain=2» ha fallat en el submòdul %s"
-#: submodule.c:1811
+#: submodule.c:1838
#, c-format
msgid "could not start 'git status' in submodule '%s'"
msgstr "no s'ha pogut iniciar «git status» al submòdul «%s»"
-#: submodule.c:1824
+#: submodule.c:1851
#, c-format
msgid "could not run 'git status' in submodule '%s'"
msgstr "no s'ha pogut executar «git status» al submòdul «%s»"
-#: submodule.c:1839
+#: submodule.c:1868
#, c-format
msgid "Could not unset core.worktree setting in submodule '%s'"
-msgstr "No s'ha pogut desassignar el paràmetre «core.worktree» al submòdul «%s»"
+msgstr ""
+"No s'ha pogut desassignar el paràmetre «core.worktree» al submòdul «%s»"
-#: submodule.c:1866 submodule.c:2176
+#: submodule.c:1895 submodule.c:2210
#, c-format
msgid "could not recurse into submodule '%s'"
-msgstr "s'ha produït un error en cercar recursivament al camí del submòdul «%s»"
+msgstr ""
+"s'ha produït un error en cercar recursivament al camí del submòdul «%s»"
-#: submodule.c:1887
+#: submodule.c:1917
msgid "could not reset submodule index"
msgstr "no s'ha pogut restablir l'índex del submòdul"
-#: submodule.c:1929
+#: submodule.c:1959
#, c-format
msgid "submodule '%s' has dirty index"
msgstr "el submòdul «%s» té l'índex brut"
-#: submodule.c:1981
+#: submodule.c:2013
#, c-format
msgid "Submodule '%s' could not be updated."
msgstr "No s'ha pogut actualitzar el submòdul «%s»."
-#: submodule.c:2049
+#: submodule.c:2081
#, c-format
msgid "submodule git dir '%s' is inside git dir '%.*s'"
msgstr "submodule git dir «%s» està dins git dir «%.*s»"
-#: submodule.c:2070
+#: submodule.c:2102
#, c-format
msgid ""
"relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -8872,17 +9173,17 @@
"no està admès relocate_gitdir per al submòdul «%s» amb més d'un arbre de "
"treball"
-#: submodule.c:2082 submodule.c:2141
+#: submodule.c:2114 submodule.c:2174
#, c-format
msgid "could not lookup name for submodule '%s'"
msgstr "no s'ha trobat el nom pel submòdul «%s»"
-#: submodule.c:2086
+#: submodule.c:2118
#, c-format
msgid "refusing to move '%s' into an existing git dir"
msgstr "s'ha refusat moure «%s» a un directori git existent"
-#: submodule.c:2093
+#: submodule.c:2124
#, c-format
msgid ""
"Migrating git directory of '%s%s' from\n"
@@ -8893,11 +9194,11 @@
"«%s» a\n"
"«%s»\n"
-#: submodule.c:2221
+#: submodule.c:2255
msgid "could not start ls-files in .."
msgstr "no s'ha pogut iniciar ls-files a .."
-#: submodule.c:2261
+#: submodule.c:2295
#, c-format
msgid "ls-tree returned unexpected return code %d"
msgstr "ls-tree ha retornat un codi de retorn %d no esperat"
@@ -8919,7 +9220,7 @@
msgstr "valor desconegut «%s» per a la clau «%s»"
#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
-#: builtin/remote.c:324
+#: builtin/remote.c:327
#, c-format
msgid "more than one %s"
msgstr "més d'un %s"
@@ -8934,11 +9235,11 @@
msgid "could not read input file '%s'"
msgstr "no s'ha pogut llegir el fitxer d'entrada «%s»"
-#: trailer.c:766 builtin/mktag.c:88
+#: trailer.c:766 builtin/mktag.c:89 imap-send.c:1573
msgid "could not read from stdin"
msgstr "no s'ha pogut llegir des de stdin"
-#: trailer.c:1024 wrapper.c:676
+#: trailer.c:1024 wrapper.c:684
#, c-format
msgid "could not stat %s"
msgstr "no s'ha pogut fer stat a %s"
@@ -9006,7 +9307,7 @@
msgid "error while running fast-import"
msgstr "error en executar la importació ràpida"
-#: transport-helper.c:549 transport-helper.c:1247
+#: transport-helper.c:549 transport-helper.c:1251
#, c-format
msgid "could not read ref %s"
msgstr "no s'ha pogut llegir la referència %s"
@@ -9024,7 +9325,7 @@
msgid "invalid remote service path"
msgstr "el camí del servei remot no és vàlid"
-#: transport-helper.c:661 transport.c:1471
+#: transport-helper.c:661 transport.c:1475
msgid "operation not supported by protocol"
msgstr "opció no admesa pel protocol"
@@ -9033,77 +9334,75 @@
msgid "can't connect to subservice %s"
msgstr "no es pot connectar al subservei %s"
-#: transport-helper.c:693 transport.c:397
+#: transport-helper.c:693 transport.c:404
+#, fuzzy
msgid "--negotiate-only requires protocol v2"
-msgstr ""
+msgstr "--negotiate-only requereix el protocol v2"
#: transport-helper.c:755
-#, fuzzy
msgid "'option' without a matching 'ok/error' directive"
-msgstr "'option' sense una directiva 'ok/error' coincident"
+msgstr "«option» sense una directiva «ok/error» coincident"
#: transport-helper.c:798
#, fuzzy, c-format
msgid "expected ok/error, helper said '%s'"
msgstr "s'esperava un ajudant d'error/OK ha dit \"%s\""
-#: transport-helper.c:855
+#: transport-helper.c:859
#, fuzzy, c-format
msgid "helper reported unexpected status of %s"
msgstr "l'ajudant ha informat d'un estat inesperat dels percentatges"
-#: transport-helper.c:938
+#: transport-helper.c:942
#, fuzzy, c-format
msgid "helper %s does not support dry-run"
msgstr "els ajudants no donen suport a l'execució seca"
-#: transport-helper.c:941
+#: transport-helper.c:945
#, fuzzy, c-format
msgid "helper %s does not support --signed"
msgstr "els ajudants per cents no són compatibles --signed"
-#: transport-helper.c:944
+#: transport-helper.c:948
#, fuzzy, c-format
msgid "helper %s does not support --signed=if-asked"
msgstr "l'ajudant per cents no admet --signed=if-asked"
-#: transport-helper.c:949
+#: transport-helper.c:953
#, fuzzy, c-format
msgid "helper %s does not support --atomic"
msgstr "els ajudants no admeten --atomic"
-#: transport-helper.c:953
+#: transport-helper.c:957
#, fuzzy, c-format
msgid "helper %s does not support --%s"
msgstr "els ajudants per cents no són compatibles --signed"
-#: transport-helper.c:960
+#: transport-helper.c:964
#, fuzzy, c-format
msgid "helper %s does not support 'push-option'"
msgstr "els ajudants no donen suport a «push-option»"
-#: transport-helper.c:1060
+#: transport-helper.c:1064
#, fuzzy
msgid "remote-helper doesn't support push; refspec needed"
msgstr ""
"remot-helper no permet prémer; es necessiten especificacions de referència"
-#: transport-helper.c:1065
+#: transport-helper.c:1069
#, fuzzy, c-format
msgid "helper %s does not support 'force'"
msgstr "els ajudants no donen suport a «force»"
-#: transport-helper.c:1112
-#, fuzzy
+#: transport-helper.c:1116
msgid "couldn't run fast-export"
-msgstr "no s'ha pogut executar «fast-export»"
+msgstr "no s'ha pogut executar l'exportació ràpida"
-#: transport-helper.c:1117
-#, fuzzy
+#: transport-helper.c:1121
msgid "error while running fast-export"
msgstr "error en executar l'exportació ràpida"
-#: transport-helper.c:1142
+#: transport-helper.c:1146
#, fuzzy, c-format
msgid ""
"No refs in common and none specified; doing nothing.\n"
@@ -9112,52 +9411,52 @@
"No hi ha referències en comú i no n'hi ha cap especificat. Potser hauríeu "
"d'especificar una branca com ara «master»."
-#: transport-helper.c:1224
+#: transport-helper.c:1228
#, fuzzy, c-format
msgid "unsupported object format '%s'"
msgstr "objecte mal format a «%s»"
-#: transport-helper.c:1233
+#: transport-helper.c:1237
#, fuzzy, c-format
msgid "malformed response in ref list: %s"
msgstr "resposta mal formada en la llista de referències"
-#: transport-helper.c:1385
+#: transport-helper.c:1389
#, fuzzy, c-format
msgid "read(%s) failed"
msgstr "ha fallat read(%)"
-#: transport-helper.c:1412
+#: transport-helper.c:1416
#, fuzzy, c-format
msgid "write(%s) failed"
msgstr "ha fallat l(%)"
-#: transport-helper.c:1461
+#: transport-helper.c:1465
#, c-format
msgid "%s thread failed"
msgstr "%s ha fallat el fil"
-#: transport-helper.c:1465
+#: transport-helper.c:1469
#, fuzzy, c-format
msgid "%s thread failed to join: %s"
msgstr "el fil per cents no s'ha pogut unir als percentatges"
-#: transport-helper.c:1484 transport-helper.c:1488
+#: transport-helper.c:1488 transport-helper.c:1492
#, c-format
msgid "can't start thread for copying data: %s"
msgstr "no es pot iniciar el fil per copiar les dades: %s"
-#: transport-helper.c:1525
+#: transport-helper.c:1529
#, c-format
msgid "%s process failed to wait"
msgstr "el procés %s no ha pogut esperar"
-#: transport-helper.c:1529
+#: transport-helper.c:1533
#, c-format
msgid "%s process failed"
msgstr "el procés %s ha fallat"
-#: transport-helper.c:1547 transport-helper.c:1556
+#: transport-helper.c:1551 transport-helper.c:1560
msgid "can't start thread for copying data"
msgstr "no es pot iniciar el fil per copiar dades"
@@ -9171,51 +9470,47 @@
msgid "could not read bundle '%s'"
msgstr "no s'ha pogut llegir el paquet «%s»"
-#: transport.c:220
+#: transport.c:227
#, c-format
msgid "transport: invalid depth option '%s'"
msgstr "transport: opció de profunditat no vàlida «%s»"
-#: transport.c:272
-#, fuzzy
+#: transport.c:279
msgid "see protocol.version in 'git help config' for more details"
-msgstr "vegeu protocol.version a «git help config» per a més detalls"
+msgstr "vegeu «protocol.version» a «git help config» per a més detalls"
-#: transport.c:273
-#, fuzzy
+#: transport.c:280
msgid "server options require protocol version 2 or later"
msgstr "les opcions del servidor requereixen el protocol versió 2 o posterior"
-#: transport.c:400
-#, fuzzy
+#: transport.c:407
msgid "server does not support wait-for-done"
-msgstr "El servidor no admet --deepen"
+msgstr "el servidor no admet «wait-for-done»"
-#: transport.c:751
-#, fuzzy
+#: transport.c:759
msgid "could not parse transport.color.* config"
msgstr "no s'ha pogut analitzar la configuració de transport.color.*"
-#: transport.c:826
-#, fuzzy
+#: transport.c:834
msgid "support for protocol v2 not implemented yet"
-msgstr "encara no s'ha implementat la implementació del protocol v2"
+msgstr ""
+"encara no s'ha implementat la compatibilitat amb la versió v2 del protocol"
-#: transport.c:960
-#, fuzzy, c-format
+#: transport.c:967
+#, c-format
msgid "unknown value for config '%s': %s"
-msgstr "valor desconegut per config «%s»%s"
+msgstr "valor desconegut per al config «%s»': %s"
-#: transport.c:1026
+#: transport.c:1033
#, c-format
msgid "transport '%s' not allowed"
msgstr "no es permet el transport «%s»"
-#: transport.c:1079
+#: transport.c:1082
msgid "git-over-rsync is no longer supported"
msgstr "git-over-rsync ja no s'admet"
-#: transport.c:1181
+#: transport.c:1185
#, c-format
msgid ""
"The following submodule paths contain changes that can\n"
@@ -9224,7 +9519,7 @@
"Els camins de submòdul següents contenen canvis que no\n"
"es poden trobar en cap remot:\n"
-#: transport.c:1185
+#: transport.c:1189
#, c-format
msgid ""
"\n"
@@ -9250,11 +9545,11 @@
"\n"
"per a pujar-los a un remot.\n"
-#: transport.c:1193
+#: transport.c:1197
msgid "Aborting."
msgstr "S'està avortant."
-#: transport.c:1340
+#: transport.c:1344
#, fuzzy
msgid "failed to push all needed submodules"
msgstr "no s'ha pogut prémer tots els submòduls necessaris"
@@ -9281,8 +9576,7 @@
"Your local changes to the following files would be overwritten by checkout:\n"
"%%sPlease commit your changes or stash them before you switch branches."
msgstr ""
-"Els vostres canvis locals als fitxers següents se sobreescriurien per "
-"agafar:\n"
+"Els vostres canvis locals als fitxers següents se sobreescriurien per agafar:\n"
"%%sCometeu els vostres canvis o feu «stash» abans de canviar de branca."
#: unpack-trees.c:117
@@ -9291,8 +9585,7 @@
"Your local changes to the following files would be overwritten by checkout:\n"
"%%s"
msgstr ""
-"Els vostres canvis locals als fitxers següents se sobreescriurien per "
-"agafar:\n"
+"Els vostres canvis locals als fitxers següents se sobreescriurien per agafar:\n"
"%%s"
#: unpack-trees.c:120
@@ -9301,8 +9594,7 @@
"Your local changes to the following files would be overwritten by merge:\n"
"%%sPlease commit your changes or stash them before you merge."
msgstr ""
-"Els vostres canvis locals als fitxers següents se sobreescriurien per "
-"fusionar:\n"
+"Els vostres canvis locals als fitxers següents se sobreescriurien per fusionar:\n"
"%%sCometeu els vostres canvis o feu «stash» abans de fusionar."
#: unpack-trees.c:122
@@ -9311,8 +9603,7 @@
"Your local changes to the following files would be overwritten by merge:\n"
"%%s"
msgstr ""
-"Els vostres canvis locals als fitxers següents se sobreescriurien per "
-"fusionar:\n"
+"Els vostres canvis locals als fitxers següents se sobreescriurien per fusionar:\n"
"%%s"
#: unpack-trees.c:125
@@ -9348,8 +9639,7 @@
"The following untracked working tree files would be removed by checkout:\n"
"%%sPlease move or remove them before you switch branches."
msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per "
-"agafar:\n"
+"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per agafar:\n"
"%%sMoveu-los o elimineu-los abans de canviar de branca."
#: unpack-trees.c:138
@@ -9358,8 +9648,7 @@
"The following untracked working tree files would be removed by checkout:\n"
"%%s"
msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per "
-"agafar:\n"
+"Els següents fitxers no seguits en l'arbre de treball s'eliminarien en agafar:\n"
"%%s"
#: unpack-trees.c:141
@@ -9368,8 +9657,7 @@
"The following untracked working tree files would be removed by merge:\n"
"%%sPlease move or remove them before you merge."
msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per "
-"fusionar:\n"
+"Els següents fitxers no seguits en l'arbre de treball s'eliminarien en fusionar:\n"
"%%sMoveu-los o elimineu-los abans de fusionar."
#: unpack-trees.c:143
@@ -9378,8 +9666,7 @@
"The following untracked working tree files would be removed by merge:\n"
"%%s"
msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per "
-"fusionar:\n"
+"Els següents fitxers no seguits en l'arbre de treball s'eliminarien en fusionar:\n"
"%%s"
#: unpack-trees.c:146
@@ -9403,23 +9690,19 @@
#: unpack-trees.c:154
#, c-format
msgid ""
-"The following untracked working tree files would be overwritten by "
-"checkout:\n"
+"The following untracked working tree files would be overwritten by checkout:\n"
"%%sPlease move or remove them before you switch branches."
msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
-"agafar:\n"
+"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per agafar:\n"
"%%sMoveu-los o elimineu-los abans de canviar de branca."
#: unpack-trees.c:156
#, c-format
msgid ""
-"The following untracked working tree files would be overwritten by "
-"checkout:\n"
+"The following untracked working tree files would be overwritten by checkout:\n"
"%%s"
msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
-"agafar:\n"
+"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per agafar:\n"
"%%s"
#: unpack-trees.c:159
@@ -9428,8 +9711,7 @@
"The following untracked working tree files would be overwritten by merge:\n"
"%%sPlease move or remove them before you merge."
msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
-"fusionar:\n"
+"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per fusionar:\n"
"%%sMoveu-los o elimineu-los abans de fusionar."
#: unpack-trees.c:161
@@ -9438,8 +9720,7 @@
"The following untracked working tree files would be overwritten by merge:\n"
"%%s"
msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
-"fusionar:\n"
+"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per fusionar:\n"
"%%s"
#: unpack-trees.c:164
@@ -9448,8 +9729,7 @@
"The following untracked working tree files would be overwritten by %s:\n"
"%%sPlease move or remove them before you %s."
msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
-"%s:\n"
+"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per %s:\n"
"%%sMoveu-los o elimineu-los abans de %s."
#: unpack-trees.c:166
@@ -9458,8 +9738,7 @@
"The following untracked working tree files would be overwritten by %s:\n"
"%%s"
msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
-"%s:\n"
+"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per %s:\n"
"%%s"
#: unpack-trees.c:174
@@ -9479,8 +9758,7 @@
#: unpack-trees.c:180
#, fuzzy, c-format
msgid ""
-"The following paths are not up to date and were left despite sparse "
-"patterns:\n"
+"The following paths are not up to date and were left despite sparse patterns:\n"
"%s"
msgstr ""
"Els camins següents no estan actualitzats i es van deixar a pesar que s'han "
@@ -9491,14 +9769,12 @@
msgid ""
"The following paths are unmerged and were left despite sparse patterns:\n"
"%s"
-msgstr ""
-"Els camins següents s'ignoren per un dels vostres fitxers .gitignore:\n"
+msgstr "Els camins següents s'ignoren per un dels vostres fitxers .gitignore:\n"
#: unpack-trees.c:184
#, fuzzy, c-format
msgid ""
-"The following paths were already present and thus not updated despite sparse "
-"patterns:\n"
+"The following paths were already present and thus not updated despite sparse patterns:\n"
"%s"
msgstr ""
"Els camins següents ja estaven presents i, per tant, no s'han actualitzat "
@@ -9534,17 +9810,18 @@
"minúscules) i només un del mateix grup de col·lisió es troba a l'arbre de "
"treball"
-#: unpack-trees.c:1519
+#: unpack-trees.c:1620
#, fuzzy
msgid "Updating index flags"
msgstr "Actualitzant els indicadors d’índex"
-#: unpack-trees.c:2608
-#, c-format
+#: unpack-trees.c:2772
+#, fuzzy, c-format
msgid "worktree and untracked commit have duplicate entries: %s"
msgstr ""
+"l'arbre de treball i la comissió no seguida tenen entrades duplicades: %s"
-#: upload-pack.c:1548
+#: upload-pack.c:1561
#, fuzzy
msgid "expected flush after fetch arguments"
msgstr "s'esperava una neteja després de les capacitats"
@@ -9582,114 +9859,126 @@
msgid "Fetching objects"
msgstr "S'estan obtenint objectes"
-#: worktree.c:238 builtin/am.c:2151
+#: worktree.c:236 builtin/am.c:2154 builtin/bisect--helper.c:156
#, c-format
msgid "failed to read '%s'"
msgstr "s'ha produït un error en llegir «%s»"
-#: worktree.c:304
+#: worktree.c:303
#, c-format
msgid "'%s' at main working tree is not the repository directory"
msgstr "«%s» a l'arbre de treball principal no és al directori del repositori"
-#: worktree.c:315
+#: worktree.c:314
#, c-format
msgid "'%s' file does not contain absolute path to the working tree location"
msgstr ""
"El fitxer «%s» no conté el camí absolut a la ubicació de l'arbre de treball"
-#: worktree.c:327
+#: worktree.c:326
#, c-format
msgid "'%s' does not exist"
msgstr "«%s» no existeix"
-#: worktree.c:333
+#: worktree.c:332
#, c-format
msgid "'%s' is not a .git file, error code %d"
msgstr "«%s» no és un fitxer .git, codi d'error %d"
-#: worktree.c:342
+#: worktree.c:341
#, c-format
msgid "'%s' does not point back to '%s'"
msgstr "«%s» no assenyala de tornada a «%s»"
-#: worktree.c:608
+#: worktree.c:603
msgid "not a directory"
msgstr "no és en un directori"
-#: worktree.c:617
+#: worktree.c:612
msgid ".git is not a file"
msgstr ".git no és un fitxer"
-#: worktree.c:619
+#: worktree.c:614
msgid ".git file broken"
msgstr "fitxer .git malmès"
-#: worktree.c:621
+#: worktree.c:616
msgid ".git file incorrect"
msgstr "fitxer .git malmès"
-#: worktree.c:727
+#: worktree.c:722
msgid "not a valid path"
msgstr "no és un camí vàlid"
-#: worktree.c:733
+#: worktree.c:728
msgid "unable to locate repository; .git is not a file"
msgstr "no s'ha pogut trobar el repositori; .git no és un fitxer"
-#: worktree.c:737
+#: worktree.c:732
msgid "unable to locate repository; .git file does not reference a repository"
-msgstr "no s'ha pogut trobar el repositori; el fitxer .git no fa referència a un repositori"
+msgstr ""
+"no s'ha pogut trobar el repositori; el fitxer .git no fa referència a un "
+"repositori"
-#: worktree.c:741
+#: worktree.c:736
msgid "unable to locate repository; .git file broken"
msgstr "no s'ha pogut trobar el repositori; el fitxer .git està malmès"
-#: worktree.c:747
+#: worktree.c:742
msgid "gitdir unreadable"
msgstr "gitdir illegible"
-#: worktree.c:751
+#: worktree.c:746
msgid "gitdir incorrect"
msgstr "gitdir incorrecte"
-#: worktree.c:776
+#: worktree.c:771
msgid "not a valid directory"
msgstr "no és en un directori vàlid"
-#: worktree.c:782
+#: worktree.c:777
msgid "gitdir file does not exist"
msgstr "el fitxer gitdir no existeix"
-#: worktree.c:787 worktree.c:796
+#: worktree.c:782 worktree.c:791
#, c-format
msgid "unable to read gitdir file (%s)"
msgstr "no s'ha pogut llegir el fitxer gitdir (%s)"
-#: worktree.c:806
+#: worktree.c:801
#, c-format
msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
msgstr "lectura curta (s'esperaven %<PRIuMAX> bytes, llegits %<PRIuMAX>)"
-#: worktree.c:814
+#: worktree.c:809
msgid "invalid gitdir file"
msgstr "fitxer gitdir no vàlid"
-#: worktree.c:822
+#: worktree.c:817
msgid "gitdir file points to non-existent location"
msgstr "el fitxer gitdir indica una ubicació no existent"
-#: wrapper.c:197 wrapper.c:367
+#: wrapper.c:151
+#, fuzzy, c-format
+msgid "could not setenv '%s'"
+msgstr "no s'ha pogut establir «%s»"
+
+#: wrapper.c:203
+#, c-format
+msgid "unable to create '%s'"
+msgstr "no s'ha pogut crear «%s»"
+
+#: wrapper.c:205 wrapper.c:375
#, c-format
msgid "could not open '%s' for reading and writing"
msgstr "no s'ha pogut obrir «%s» per a lectura i escriptura"
-#: wrapper.c:398 wrapper.c:599
+#: wrapper.c:406 wrapper.c:607
#, c-format
msgid "unable to access '%s'"
msgstr "no s'ha pogut accedir a «%s»"
-#: wrapper.c:607
+#: wrapper.c:615
msgid "unable to get current working directory"
msgstr "no s'ha pogut obtenir el directori de treball actual"
@@ -9704,7 +9993,8 @@
#: wt-status.c:190 wt-status.c:222
#, c-format
msgid " (use \"git restore --source=%s --staged <file>...\" to unstage)"
-msgstr " (useu «git restore --source=%s --staged <fitxer>...» per a fer «unstage»)"
+msgstr ""
+" (useu «git restore --source=%s --staged <fitxer>...» per a fer «unstage»)"
#: wt-status.c:193 wt-status.c:225
msgid " (use \"git rm --cached <file>...\" to unstage)"
@@ -9724,11 +10014,11 @@
msgid " (use \"git rm <file>...\" to mark resolution)"
msgstr " (useu «git rm <fitxer>...» per a senyalar resolució)"
-#: wt-status.c:211 wt-status.c:1075
+#: wt-status.c:211 wt-status.c:1125
msgid "Changes to be committed:"
msgstr "Canvis a cometre:"
-#: wt-status.c:234 wt-status.c:1084
+#: wt-status.c:234 wt-status.c:1134
msgid "Changes not staged for commit:"
msgstr "Canvis no «staged» per a cometre:"
@@ -9741,10 +10031,10 @@
msgstr " (useu «git add/rm <fitxer>...» per a actualitzar què es cometrà)"
#: wt-status.c:241
-msgid ""
-" (use \"git restore <file>...\" to discard changes in working directory)"
+msgid " (use \"git restore <file>...\" to discard changes in working directory)"
msgstr ""
-" (useu «git restore <file>...» per a descartar els canvis en el directori de treball)"
+" (useu «git restore <file>...» per a descartar canvis en el directori "
+"de treball)"
#: wt-status.c:243
msgid " (commit or discard the untracked or modified content in submodules)"
@@ -9828,22 +10118,22 @@
msgid "untracked content, "
msgstr "contingut no seguit, "
-#: wt-status.c:908
+#: wt-status.c:958
#, c-format
msgid "Your stash currently has %d entry"
msgid_plural "Your stash currently has %d entries"
msgstr[0] "L'«stash» té actualment %d entrada"
msgstr[1] "L'«stash» té actualment %d entrades"
-#: wt-status.c:939
+#: wt-status.c:989
msgid "Submodules changed but not updated:"
msgstr "Submòduls canviats però no actualitzats:"
-#: wt-status.c:941
+#: wt-status.c:991
msgid "Submodule changes to be committed:"
msgstr "Canvis de submòdul a cometre:"
-#: wt-status.c:1023
+#: wt-status.c:1073
msgid ""
"Do not modify or remove the line above.\n"
"Everything below it will be ignored."
@@ -9851,7 +10141,7 @@
"No modifiqueu ni elimineu la línia de dalt.\n"
"Tot el que hi ha a sota s'ignorarà."
-#: wt-status.c:1115
+#: wt-status.c:1165
#, c-format
msgid ""
"\n"
@@ -9862,108 +10152,109 @@
"S'ha trigat un %.2f segons a calcular els valors de la branca d'endavant i darrere.\n"
"Podeu utilitzar «--no-ahead-behind» per a evitar-ho.\n"
-#: wt-status.c:1145
+#: wt-status.c:1195
msgid "You have unmerged paths."
msgstr "Teniu camins sense fusionar."
-#: wt-status.c:1148
+#: wt-status.c:1198
msgid " (fix conflicts and run \"git commit\")"
msgstr " (arregleu els conflictes i executeu «git commit»)"
-#: wt-status.c:1150
+#: wt-status.c:1200
msgid " (use \"git merge --abort\" to abort the merge)"
msgstr " (useu «git merge --abort» per a avortar la fusió)"
-#: wt-status.c:1154
+#: wt-status.c:1204
msgid "All conflicts fixed but you are still merging."
msgstr "Tots els conflictes estan arreglats però encara esteu fusionant."
-#: wt-status.c:1157
+#: wt-status.c:1207
msgid " (use \"git commit\" to conclude merge)"
msgstr " (useu «git commit» per a concloure la fusió)"
-#: wt-status.c:1166
+#: wt-status.c:1216
msgid "You are in the middle of an am session."
msgstr "Esteu enmig d'una sessió am."
-#: wt-status.c:1169
+#: wt-status.c:1219
msgid "The current patch is empty."
msgstr "El pedaç actual està buit."
-#: wt-status.c:1173
+#: wt-status.c:1223
msgid " (fix conflicts and then run \"git am --continue\")"
msgstr " (arregleu els conflictes i després executeu «git am --continue»)"
-#: wt-status.c:1175
+#: wt-status.c:1225
msgid " (use \"git am --skip\" to skip this patch)"
msgstr " (useu «git am --skip» per a ometre aquest pedaç)"
-#: wt-status.c:1177
+#: wt-status.c:1227
msgid " (use \"git am --abort\" to restore the original branch)"
msgstr " (useu «git am --abort» per a restaurar la branca original)"
-#: wt-status.c:1310
+#: wt-status.c:1360
msgid "git-rebase-todo is missing."
msgstr "Manca git-rebase-todo."
-#: wt-status.c:1312
+#: wt-status.c:1362
msgid "No commands done."
msgstr "No s'ha fet cap ordre."
-#: wt-status.c:1315
+#: wt-status.c:1365
#, c-format
msgid "Last command done (%d command done):"
msgid_plural "Last commands done (%d commands done):"
msgstr[0] "Última ordre feta (%d ordre feta):"
msgstr[1] "Últimes ordres fetes (%d ordres fetes):"
-#: wt-status.c:1326
+#: wt-status.c:1376
#, c-format
msgid " (see more in file %s)"
msgstr " (vegeu més en el fitxer %s)"
-#: wt-status.c:1331
+#: wt-status.c:1381
msgid "No commands remaining."
msgstr "No manca cap ordre."
-#: wt-status.c:1334
+#: wt-status.c:1384
#, c-format
msgid "Next command to do (%d remaining command):"
msgid_plural "Next commands to do (%d remaining commands):"
msgstr[0] "Ordre següent a fer (manca %d ordre):"
msgstr[1] "Ordres següents a fer (manquen %d ordres):"
-#: wt-status.c:1342
+#: wt-status.c:1392
msgid " (use \"git rebase --edit-todo\" to view and edit)"
msgstr " (useu «git rebase --edit-todo» per a veure i editar)"
-#: wt-status.c:1354
+#: wt-status.c:1404
#, c-format
msgid "You are currently rebasing branch '%s' on '%s'."
msgstr "Actualment esteu fent «rebase» de la branca «%s» en «%s»."
-#: wt-status.c:1359
+#: wt-status.c:1409
msgid "You are currently rebasing."
msgstr "Actualment esteu fent «rebase»."
-#: wt-status.c:1372
+#: wt-status.c:1422
msgid " (fix conflicts and then run \"git rebase --continue\")"
-msgstr " (arregleu els conflictes i després executeu «git rebase --continue»)"
+msgstr ""
+" (arregleu els conflictes i després executeu «git rebase --continue»)"
-#: wt-status.c:1374
+#: wt-status.c:1424
msgid " (use \"git rebase --skip\" to skip this patch)"
msgstr " (useu «git rebase --skip» per a ometre aquest pedaç)"
-#: wt-status.c:1376
+#: wt-status.c:1426
msgid " (use \"git rebase --abort\" to check out the original branch)"
msgstr " (useu «git rebase --abort» per a agafar la branca original)"
-#: wt-status.c:1383
+#: wt-status.c:1433
msgid " (all conflicts fixed: run \"git rebase --continue\")"
msgstr ""
" (tots els conflictes estan arreglats: executeu «git rebase --continue»)"
-#: wt-status.c:1387
+#: wt-status.c:1437
#, c-format
msgid ""
"You are currently splitting a commit while rebasing branch '%s' on '%s'."
@@ -9971,160 +10262,165 @@
"Actualment esteu dividint una comissió mentre es fa «rebase» de la branca "
"«%s» en «%s»."
-#: wt-status.c:1392
+#: wt-status.c:1442
msgid "You are currently splitting a commit during a rebase."
msgstr "Actualment esteu dividint una comissió durant un «rebase»."
-#: wt-status.c:1395
+#: wt-status.c:1445
msgid " (Once your working directory is clean, run \"git rebase --continue\")"
msgstr ""
" (Una vegada que el vostre directori de treball sigui net, executeu «git "
"rebase --continue»)"
-#: wt-status.c:1399
+#: wt-status.c:1449
#, c-format
msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
msgstr ""
"Actualment esteu editant una comissió mentre es fa «rebase» de la branca "
"«%s» en «%s»."
-#: wt-status.c:1404
+#: wt-status.c:1454
msgid "You are currently editing a commit during a rebase."
msgstr "Actualment esteu editant una comissió durant un «rebase»."
-#: wt-status.c:1407
+#: wt-status.c:1457
msgid " (use \"git commit --amend\" to amend the current commit)"
msgstr " (useu «git commit --amend» per a esmenar la comissió actual)"
-#: wt-status.c:1409
-msgid ""
-" (use \"git rebase --continue\" once you are satisfied with your changes)"
+#: wt-status.c:1459
+msgid " (use \"git rebase --continue\" once you are satisfied with your changes)"
msgstr ""
" (useu «git rebase --continue» una vegada que estigueu satisfet amb els "
"vostres canvis)"
-#: wt-status.c:1420
+#: wt-status.c:1470
msgid "Cherry-pick currently in progress."
msgstr "Hi ha «cherry pick» actualment en curs."
-#: wt-status.c:1423
+#: wt-status.c:1473
#, c-format
msgid "You are currently cherry-picking commit %s."
msgstr "Actualment esteu fent «cherry pick» a la comissió %s."
-#: wt-status.c:1430
+#: wt-status.c:1480
msgid " (fix conflicts and run \"git cherry-pick --continue\")"
msgstr " (arregleu els conflictes i executeu «git cherry-pick --continue»)"
-#: wt-status.c:1433
+#: wt-status.c:1483
msgid " (run \"git cherry-pick --continue\" to continue)"
msgstr " (executeu «git cherry-pick --continue» per a continuar)"
-#: wt-status.c:1436
+#: wt-status.c:1486
msgid " (all conflicts fixed: run \"git cherry-pick --continue\")"
msgstr ""
-" (tots els conflictes estan arreglats: executeu «git cherry-pick --"
-"continue»)"
+" (tots els conflictes estan arreglats: executeu «git cherry-pick "
+"--continue»)"
-#: wt-status.c:1438
+#: wt-status.c:1488
msgid " (use \"git cherry-pick --skip\" to skip this patch)"
msgstr " (useu «git cherry-pick --skip» per a ometre aquest pedaç)"
-#: wt-status.c:1440
+#: wt-status.c:1490
msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
msgstr ""
" (useu «git cherry-pick --abort» per a cancel·lar l'operació de «cherry "
"pick»)"
-#: wt-status.c:1450
+#: wt-status.c:1500
msgid "Revert currently in progress."
msgstr "Una reversió està actualment en curs."
-#: wt-status.c:1453
+#: wt-status.c:1503
#, c-format
msgid "You are currently reverting commit %s."
msgstr "Actualment esteu revertint la comissió %s."
-#: wt-status.c:1459
+#: wt-status.c:1509
msgid " (fix conflicts and run \"git revert --continue\")"
msgstr " (arregleu els conflictes i executeu «git revert --continue»)"
-#: wt-status.c:1462
+#: wt-status.c:1512
msgid " (run \"git revert --continue\" to continue)"
msgstr " (executeu «git revert --continue» per a continuar)"
-#: wt-status.c:1465
+#: wt-status.c:1515
msgid " (all conflicts fixed: run \"git revert --continue\")"
msgstr ""
" (tots els conflictes estan arreglats: executeu «git revert --continue»)"
-#: wt-status.c:1467
+#: wt-status.c:1517
msgid " (use \"git revert --skip\" to skip this patch)"
msgstr " (useu «git revert --skip» per a ometre aquest pedaç)"
-#: wt-status.c:1469
+#: wt-status.c:1519
msgid " (use \"git revert --abort\" to cancel the revert operation)"
msgstr " (useu «git revert --abort» per a cancel·lar l'operació de reversió)"
-#: wt-status.c:1479
+#: wt-status.c:1529
#, c-format
msgid "You are currently bisecting, started from branch '%s'."
msgstr "Actualment esteu bisecant, heu començat des de la branca «%s»."
-#: wt-status.c:1483
+#: wt-status.c:1533
msgid "You are currently bisecting."
msgstr "Actualment esteu bisecant."
-#: wt-status.c:1486
+#: wt-status.c:1536
msgid " (use \"git bisect reset\" to get back to the original branch)"
msgstr " (useu «git bisect reset» per a tornar a la branca original)"
-#: wt-status.c:1497
+#: wt-status.c:1547
+#, fuzzy
+msgid "You are in a sparse checkout."
+msgstr "no s'ha pogut inicialitzar «sparse-checkout»"
+
+#: wt-status.c:1550
#, fuzzy, c-format
msgid "You are in a sparse checkout with %d%% of tracked files present."
-msgstr "Esteu en una baixada del pagament amb un 1% d'arxius seguits presents."
+msgstr ""
+"Esteu en una baixada del pagament amb un 1% d'arxius seguits presents."
-#: wt-status.c:1736
+#: wt-status.c:1794
msgid "On branch "
msgstr "En la branca "
-#: wt-status.c:1743
+#: wt-status.c:1801
msgid "interactive rebase in progress; onto "
msgstr "«rebase» interactiu en curs; sobre "
-#: wt-status.c:1745
+#: wt-status.c:1803
msgid "rebase in progress; onto "
msgstr "«rebase» en curs; sobre "
-#: wt-status.c:1750
+#: wt-status.c:1808
msgid "HEAD detached at "
msgstr "HEAD separat a "
-#: wt-status.c:1752
+#: wt-status.c:1810
msgid "HEAD detached from "
msgstr "HEAD separat des de "
-#: wt-status.c:1755
+#: wt-status.c:1813
msgid "Not currently on any branch."
msgstr "Actualment no s'és en cap branca."
-#: wt-status.c:1772
+#: wt-status.c:1830
msgid "Initial commit"
msgstr "Comissió inicial"
-#: wt-status.c:1773
+#: wt-status.c:1831
msgid "No commits yet"
msgstr "No s'ha fet cap comissió encara"
-#: wt-status.c:1787
+#: wt-status.c:1845
msgid "Untracked files"
msgstr "Fitxers no seguits"
-#: wt-status.c:1789
+#: wt-status.c:1847
msgid "Ignored files"
msgstr "Fitxers ignorats"
-#: wt-status.c:1793
+#: wt-status.c:1851
#, c-format
msgid ""
"It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -10136,30 +10432,30 @@
"oblidar-vos d'afegir fitxers nous vosaltres mateixos (vegeu\n"
"«git help status»)."
-#: wt-status.c:1799
+#: wt-status.c:1857
#, c-format
msgid "Untracked files not listed%s"
msgstr "Els fitxers no seguits no estan llistats%s"
-#: wt-status.c:1801
+#: wt-status.c:1859
msgid " (use -u option to show untracked files)"
msgstr " (useu l'opció -u per a mostrar els fitxers no seguits)"
-#: wt-status.c:1807
+#: wt-status.c:1865
msgid "No changes"
msgstr "Sense canvis"
-#: wt-status.c:1812
+#: wt-status.c:1870
#, c-format
msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
msgstr "no hi ha canvis afegits a cometre (useu «git add» o «git commit -a»)\n"
-#: wt-status.c:1816
+#: wt-status.c:1874
#, c-format
msgid "no changes added to commit\n"
msgstr "no hi ha canvis afegits a cometre\n"
-#: wt-status.c:1820
+#: wt-status.c:1878
#, c-format
msgid ""
"nothing added to commit but untracked files present (use \"git add\" to "
@@ -10168,88 +10464,87 @@
"no hi ha res afegit a cometre però hi ha fitxers no seguits (useu «git add» "
"per a seguir-los)\n"
-#: wt-status.c:1824
+#: wt-status.c:1882
#, c-format
msgid "nothing added to commit but untracked files present\n"
msgstr "no hi ha res afegit a cometre però hi ha fitxers no seguits\n"
-#: wt-status.c:1828
+#: wt-status.c:1886
#, c-format
msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
msgstr ""
"no hi ha res a cometre (creeu/copieu fitxers i useu «git add» per a seguir-"
"los)\n"
-#: wt-status.c:1832 wt-status.c:1838
+#: wt-status.c:1890 wt-status.c:1896
#, c-format
msgid "nothing to commit\n"
msgstr "no hi ha res a cometre\n"
-#: wt-status.c:1835
+#: wt-status.c:1893
#, c-format
msgid "nothing to commit (use -u to show untracked files)\n"
-msgstr ""
-"no hi ha res a cometre (useu -u per a mostrar els fitxers no seguits)\n"
+msgstr "no hi ha res a cometre (useu -u per a mostrar els fitxers no seguits)\n"
-#: wt-status.c:1840
+#: wt-status.c:1898
#, c-format
msgid "nothing to commit, working tree clean\n"
msgstr "no hi ha res a cometre, l'arbre de treball està net\n"
-#: wt-status.c:1945
+#: wt-status.c:2003
msgid "No commits yet on "
msgstr "No s'ha fet cap comissió encara a "
-#: wt-status.c:1949
+#: wt-status.c:2007
msgid "HEAD (no branch)"
msgstr "HEAD (sense branca)"
-#: wt-status.c:1980
+#: wt-status.c:2038
msgid "different"
msgstr "diferent"
-#: wt-status.c:1982 wt-status.c:1990
+#: wt-status.c:2040 wt-status.c:2048
msgid "behind "
msgstr "darrere "
-#: wt-status.c:1985 wt-status.c:1988
+#: wt-status.c:2043 wt-status.c:2046
msgid "ahead "
msgstr "davant per "
#. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2511
+#: wt-status.c:2569
#, c-format
msgid "cannot %s: You have unstaged changes."
msgstr "no es pot %s: Teniu canvis «unstaged»."
-#: wt-status.c:2517
+#: wt-status.c:2575
msgid "additionally, your index contains uncommitted changes."
msgstr "addicionalment, el vostre índex conté canvis sense cometre."
-#: wt-status.c:2519
+#: wt-status.c:2577
#, c-format
msgid "cannot %s: Your index contains uncommitted changes."
msgstr "no es pot %s: El vostre índex conté canvis sense cometre."
-#: compat/simple-ipc/ipc-unix-socket.c:178
+#: compat/simple-ipc/ipc-unix-socket.c:183
msgid "could not send IPC command"
msgstr "no s'ha pogut enviar l'ordre IPC"
-#: compat/simple-ipc/ipc-unix-socket.c:185
+#: compat/simple-ipc/ipc-unix-socket.c:190
msgid "could not read IPC response"
msgstr "no s'ha pogut llegir la resposta IPC"
-#: compat/simple-ipc/ipc-unix-socket.c:862
+#: compat/simple-ipc/ipc-unix-socket.c:870
#, c-format
msgid "could not start accept_thread '%s'"
msgstr "no s'ha pogut començar un fil «accept_thread» «%s»"
-#: compat/simple-ipc/ipc-unix-socket.c:874
+#: compat/simple-ipc/ipc-unix-socket.c:882
#, fuzzy, c-format
msgid "could not start worker[0] for '%s'"
msgstr "no s'ha pogut llegir el fitxer de registre per a «%s»"
-#: compat/precompose_utf8.c:58 builtin/clone.c:461
+#: compat/precompose_utf8.c:58 builtin/clone.c:347
#, c-format
msgid "failed to unlink '%s'"
msgstr "s'ha produït un error en desenllaçar «%s»"
@@ -10258,137 +10553,133 @@
msgid "git add [<options>] [--] <pathspec>..."
msgstr "git add [<opcions>] [--] <especificació-de-camí>..."
-#: builtin/add.c:61
-#, fuzzy, c-format
+#: builtin/add.c:64
+#, c-format
msgid "cannot chmod %cx '%s'"
-msgstr "no es pot canviar de directori a «%s»"
+msgstr "no es pot fer chmod %cx «%s»"
-#: builtin/add.c:99
+#: builtin/add.c:106
#, c-format
msgid "unexpected diff status %c"
msgstr "estat de diff inesperat %c"
-#: builtin/add.c:104 builtin/commit.c:297
+#: builtin/add.c:111 builtin/commit.c:298
msgid "updating files failed"
msgstr "s'ha produït un error en actualitzar els fitxers"
-#: builtin/add.c:114
+#: builtin/add.c:121
#, c-format
msgid "remove '%s'\n"
msgstr "elimina «%s»\n"
-#: builtin/add.c:198
+#: builtin/add.c:205
msgid "Unstaged changes after refreshing the index:"
msgstr "Canvis «unstaged» després d'actualitzar l'índex:"
-#: builtin/add.c:307 builtin/rev-parse.c:991
+#: builtin/add.c:317 builtin/rev-parse.c:993
msgid "Could not read the index"
msgstr "No s'ha pogut llegir l'índex"
-#: builtin/add.c:318
-#, c-format
-msgid "Could not open '%s' for writing."
-msgstr "No s'ha pogut obrir «%s» per a escriptura."
-
-#: builtin/add.c:322
+#: builtin/add.c:330
msgid "Could not write patch"
msgstr "No s'ha pogut escriure el pedaç"
-#: builtin/add.c:325
+#: builtin/add.c:333
msgid "editing patch failed"
msgstr "l'edició del pedaç ha fallat"
-#: builtin/add.c:328
+#: builtin/add.c:336
#, c-format
msgid "Could not stat '%s'"
msgstr "No s'ha pogut fer stat a «%s»"
-#: builtin/add.c:330
+#: builtin/add.c:338
msgid "Empty patch. Aborted."
msgstr "El pedaç és buit. S'ha avortat."
-#: builtin/add.c:335
+#: builtin/add.c:343
#, c-format
msgid "Could not apply '%s'"
msgstr "No s'ha pogut aplicar «%s»"
-#: builtin/add.c:343
+#: builtin/add.c:351
msgid "The following paths are ignored by one of your .gitignore files:\n"
-msgstr ""
-"Els camins següents s'ignoren per un dels vostres fitxers .gitignore:\n"
+msgstr "Els camins següents s'ignoren per un dels vostres fitxers .gitignore:\n"
-#: builtin/add.c:363 builtin/clean.c:904 builtin/fetch.c:173 builtin/mv.c:124
-#: builtin/prune-packed.c:14 builtin/pull.c:204 builtin/push.c:559
-#: builtin/remote.c:1427 builtin/rm.c:243 builtin/send-pack.c:190
+#: builtin/add.c:371 builtin/clean.c:901 builtin/fetch.c:173 builtin/mv.c:124
+#: builtin/prune-packed.c:14 builtin/pull.c:204 builtin/push.c:550
+#: builtin/remote.c:1429 builtin/rm.c:244 builtin/send-pack.c:194
msgid "dry run"
msgstr "fer una prova"
-#: builtin/add.c:366
+#: builtin/add.c:374
msgid "interactive picking"
msgstr "recull interactiu"
-#: builtin/add.c:367 builtin/checkout.c:1567 builtin/reset.c:308
+#: builtin/add.c:375 builtin/checkout.c:1560 builtin/reset.c:314
msgid "select hunks interactively"
msgstr "selecciona els trossos interactivament"
-#: builtin/add.c:368
+#: builtin/add.c:376
msgid "edit current diff and apply"
msgstr "edita la diferència actual i aplica-la"
-#: builtin/add.c:369
+#: builtin/add.c:377
msgid "allow adding otherwise ignored files"
msgstr "permet afegir fitxers que d'altra manera s'ignoren"
-#: builtin/add.c:370
+#: builtin/add.c:378
msgid "update tracked files"
msgstr "actualitza els fitxers seguits"
-#: builtin/add.c:371
-#, fuzzy
+#: builtin/add.c:379
msgid "renormalize EOL of tracked files (implies -u)"
msgstr "torna a normalitzar EOL dels fitxers seguits (implica -u)"
-#: builtin/add.c:372
+#: builtin/add.c:380
msgid "record only the fact that the path will be added later"
msgstr "registra només el fet que el camí s'afegirà més tard"
-#: builtin/add.c:373
+#: builtin/add.c:381
msgid "add changes from all tracked and untracked files"
msgstr "afegeix els canvis de tots els fitxers seguits i no seguits"
-#: builtin/add.c:376
+#: builtin/add.c:384
msgid "ignore paths removed in the working tree (same as --no-all)"
msgstr ""
"ignora els camins eliminats en l'arbre de treball (el mateix que --no-all)"
-#: builtin/add.c:378
+#: builtin/add.c:386
msgid "don't add, only refresh the index"
msgstr "no afegeixis, només actualitza l'índex"
-#: builtin/add.c:379
+#: builtin/add.c:387
msgid "just skip files which cannot be added because of errors"
msgstr "només omet els fitxers que no es poden afegir a causa d'errors"
-#: builtin/add.c:380
+#: builtin/add.c:388
msgid "check if - even missing - files are ignored in dry run"
msgstr ""
-"comproveu si els fitxers, fins i tot els absents, s'ignoren en fer una "
-"prova"
+"comproveu si els fitxers, fins i tot els absents, s'ignoren en fer una prova"
-#: builtin/add.c:382 builtin/update-index.c:1006
+#: builtin/add.c:389 builtin/mv.c:128 builtin/rm.c:251
+#, fuzzy
+msgid "allow updating entries outside of the sparse-checkout cone"
+msgstr "inicialitza el «sparse-checkout» en mode con"
+
+#: builtin/add.c:391 builtin/update-index.c:1004
msgid "override the executable bit of the listed files"
msgstr "passa per alt el bit executable dels fitxers llistats"
-#: builtin/add.c:384
+#: builtin/add.c:393
msgid "warn when adding an embedded repository"
msgstr "avisa'm quan s'afegeixi un repositori incrustat"
-#: builtin/add.c:386
-#, fuzzy
+#: builtin/add.c:395
msgid "backend for `git stash -p`"
-msgstr "backend per a «git stash -p»"
+msgstr "rerefons per a «git stash -p»"
-#: builtin/add.c:404
+#: builtin/add.c:413
#, c-format
msgid ""
"You've added another git repository inside your current repository.\n"
@@ -10419,12 +10710,12 @@
"\n"
"Vegeu «git help submodule» per a més informació."
-#: builtin/add.c:432
+#: builtin/add.c:442
#, c-format
msgid "adding embedded git repository: %s"
msgstr "s'està afegint un repositori incrustat: %s"
-#: builtin/add.c:451
+#: builtin/add.c:462
msgid ""
"Use -f if you really want to add them.\n"
"Turn this message off by running\n"
@@ -10434,51 +10725,51 @@
"Desactiveu aquest missatge executant\n"
"«git config advice.addIgnoredFile false»"
-#: builtin/add.c:460
+#: builtin/add.c:477
msgid "adding files failed"
msgstr "l'afegiment de fitxers ha fallat"
-#: builtin/add.c:488
+#: builtin/add.c:513
msgid "--dry-run is incompatible with --interactive/--patch"
msgstr "--dry-run és incompatible amb --interactive/--patch"
-#: builtin/add.c:490 builtin/commit.c:357
+#: builtin/add.c:515 builtin/commit.c:358
msgid "--pathspec-from-file is incompatible with --interactive/--patch"
msgstr "--pathspec-from-file és incompatible amb --interactive/--patch"
-#: builtin/add.c:507
+#: builtin/add.c:532
msgid "--pathspec-from-file is incompatible with --edit"
msgstr "--pathspec-from-file és incompatible amb --edit"
-#: builtin/add.c:519
+#: builtin/add.c:544
msgid "-A and -u are mutually incompatible"
msgstr "-A i -u són mútuament incompatibles"
-#: builtin/add.c:522
+#: builtin/add.c:547
msgid "Option --ignore-missing can only be used together with --dry-run"
msgstr "L'opció --ignore-missing només es pot usar juntament amb --dry-run"
-#: builtin/add.c:526
+#: builtin/add.c:551
#, c-format
msgid "--chmod param '%s' must be either -x or +x"
msgstr "el paràmetre --chmod «%s» ha de ser o -x o +x"
-#: builtin/add.c:544 builtin/checkout.c:1735 builtin/commit.c:363
-#: builtin/reset.c:328 builtin/rm.c:273 builtin/stash.c:1637
+#: builtin/add.c:572 builtin/checkout.c:1731 builtin/commit.c:364
+#: builtin/reset.c:334 builtin/rm.c:275 builtin/stash.c:1650
msgid "--pathspec-from-file is incompatible with pathspec arguments"
msgstr "--pathspec-from-file és incompatible amb els arguments de «pathspec»"
-#: builtin/add.c:551 builtin/checkout.c:1747 builtin/commit.c:369
-#: builtin/reset.c:334 builtin/rm.c:279 builtin/stash.c:1643
+#: builtin/add.c:579 builtin/checkout.c:1743 builtin/commit.c:370
+#: builtin/reset.c:340 builtin/rm.c:281 builtin/stash.c:1656
msgid "--pathspec-file-nul requires --pathspec-from-file"
msgstr "--pathspec-file-nul requereix --pathspec-from-file"
-#: builtin/add.c:555
+#: builtin/add.c:583
#, c-format
msgid "Nothing specified, nothing added.\n"
msgstr "No s'ha especificat res, no s'ha afegit res.\n"
-#: builtin/add.c:557
+#: builtin/add.c:585
msgid ""
"Maybe you wanted to say 'git add .'?\n"
"Turn this message off by running\n"
@@ -10488,111 +10779,111 @@
"Desactiveu aquest missatge executant\n"
"«git config advice.addEmptyPathspec false»"
-#: builtin/am.c:364
+#: builtin/am.c:366
msgid "could not parse author script"
msgstr "no s'ha pogut analitzar l'script d'autor"
-#: builtin/am.c:454
+#: builtin/am.c:456
#, c-format
msgid "'%s' was deleted by the applypatch-msg hook"
msgstr "s'ha suprimit «%s» pel lligam applypatch-msg"
-#: builtin/am.c:496
+#: builtin/am.c:498
#, c-format
msgid "Malformed input line: '%s'."
msgstr "Línia d'entrada mal formada: «%s»."
-#: builtin/am.c:534
+#: builtin/am.c:536
#, c-format
msgid "Failed to copy notes from '%s' to '%s'"
msgstr "S'ha produït un error en copiar les notes de «%s» a «%s»"
-#: builtin/am.c:560
+#: builtin/am.c:562
msgid "fseek failed"
msgstr "fseek ha fallat"
-#: builtin/am.c:748
+#: builtin/am.c:750
#, c-format
msgid "could not parse patch '%s'"
msgstr "no s'ha pogut analitzar el pedaç «%s»"
-#: builtin/am.c:813
+#: builtin/am.c:815
msgid "Only one StGIT patch series can be applied at once"
msgstr "Només una sèrie de pedaços StGIT es pot aplicar a la vegada"
-#: builtin/am.c:861
+#: builtin/am.c:863
msgid "invalid timestamp"
msgstr "marca de temps no vàlida"
-#: builtin/am.c:866 builtin/am.c:878
+#: builtin/am.c:868 builtin/am.c:880
msgid "invalid Date line"
msgstr "línia Date no vàlida"
-#: builtin/am.c:873
+#: builtin/am.c:875
msgid "invalid timezone offset"
msgstr "desplaçament del fus horari no vàlid"
-#: builtin/am.c:966
+#: builtin/am.c:968
msgid "Patch format detection failed."
msgstr "La detecció de format de pedaç ha fallat."
-#: builtin/am.c:971 builtin/clone.c:414
+#: builtin/am.c:973 builtin/clone.c:300
#, c-format
msgid "failed to create directory '%s'"
msgstr "s'ha produït un error en crear el directori «%s»"
-#: builtin/am.c:976
+#: builtin/am.c:978
msgid "Failed to split patches."
msgstr "S'ha produït un error en dividir els pedaços."
-#: builtin/am.c:1125
+#: builtin/am.c:1127
#, c-format
msgid "When you have resolved this problem, run \"%s --continue\"."
msgstr "Quan hàgiu resolt aquest problema, executeu «%s --continue»."
-#: builtin/am.c:1126
+#: builtin/am.c:1128
#, c-format
msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
msgstr "Si preferiu ometre aquest pedaç, executeu «%s --skip» en lloc d'això."
-#: builtin/am.c:1127
+#: builtin/am.c:1129
#, c-format
msgid "To restore the original branch and stop patching, run \"%s --abort\"."
msgstr ""
-"Per a restaurar la branca original i deixar d'apedaçar, executeu «%s --"
-"abort»."
+"Per a restaurar la branca original i deixar d'apedaçar, executeu «%s "
+"--abort»."
-#: builtin/am.c:1222
-#, fuzzy
-msgid "Patch sent with format=flowed; space at the end of lines might be lost."
+#: builtin/am.c:1224
+msgid ""
+"Patch sent with format=flowed; space at the end of lines might be lost."
msgstr ""
-"Pedaç enviat amb format=flux; es pot perdre espai al final de les línies."
+"Pedaç enviat amb format=flowed; es pot perdre l'espai al final de les línies."
-#: builtin/am.c:1250
+#: builtin/am.c:1252
msgid "Patch is empty."
msgstr "El pedaç està buit."
-#: builtin/am.c:1315
+#: builtin/am.c:1317
#, c-format
msgid "missing author line in commit %s"
msgstr "manca la línia d'autor en la comissió %s"
-#: builtin/am.c:1318
+#: builtin/am.c:1320
#, c-format
msgid "invalid ident line: %.*s"
msgstr "línia d'identitat no vàlida: %.*s"
-#: builtin/am.c:1537
+#: builtin/am.c:1539
msgid "Repository lacks necessary blobs to fall back on 3-way merge."
msgstr ""
-"Al repositori li manquen els blobs necessaris per a retrocedir a una fusió de 3 "
-"vies."
+"Al repositori li manquen els blobs necessaris per a retrocedir a una fusió "
+"de 3 vies."
-#: builtin/am.c:1539
+#: builtin/am.c:1541
msgid "Using index info to reconstruct a base tree..."
msgstr "S'està usant la informació d'índex per a reconstruir un arbre base..."
-#: builtin/am.c:1558
+#: builtin/am.c:1560
msgid ""
"Did you hand edit your patch?\n"
"It does not apply to blobs recorded in its index."
@@ -10600,67 +10891,65 @@
"Heu editat el vostre pedaç a mà?\n"
"No s'aplica als blobs recordats en el seu índex."
-#: builtin/am.c:1564
+#: builtin/am.c:1566
msgid "Falling back to patching base and 3-way merge..."
msgstr "S'està retrocedint a apedaçar la base i una fusió de 3 vies..."
-#: builtin/am.c:1590
+#: builtin/am.c:1592
msgid "Failed to merge in the changes."
msgstr "S'ha produït un error en fusionar els canvis."
-#: builtin/am.c:1622
+#: builtin/am.c:1624
msgid "applying to an empty history"
msgstr "s'està aplicant a una història buida"
-#: builtin/am.c:1674 builtin/am.c:1678
+#: builtin/am.c:1676 builtin/am.c:1680
#, c-format
msgid "cannot resume: %s does not exist."
msgstr "no es pot reprendre: %s no existeix."
-#: builtin/am.c:1696
+#: builtin/am.c:1698
msgid "Commit Body is:"
msgstr "El cos de la comissió és:"
#. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a]
#. in your translation. The program will only accept English
#. input at this point.
-#.
-#: builtin/am.c:1706
+#: builtin/am.c:1708
#, c-format
msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
msgstr ""
"Voleu aplicar-lo? [y]es/[n]o/[e]dita/[v]isualitza el pedaç/[a]ccepta'ls "
"tots: "
-#: builtin/am.c:1752 builtin/commit.c:408
+#: builtin/am.c:1754 builtin/commit.c:409
msgid "unable to write index file"
msgstr "no s'ha pogut escriure el fitxer d'índex"
-#: builtin/am.c:1756
+#: builtin/am.c:1758
#, c-format
msgid "Dirty index: cannot apply patches (dirty: %s)"
msgstr "Índex brut: no es poden aplicar pedaços (bruts: %s)"
-#: builtin/am.c:1796 builtin/am.c:1864
+#: builtin/am.c:1798 builtin/am.c:1865
#, c-format
msgid "Applying: %.*s"
msgstr "S'està aplicant: %.*s"
-#: builtin/am.c:1813
+#: builtin/am.c:1815
msgid "No changes -- Patch already applied."
msgstr "Sense canvis -- El pedaç ja s'ha aplicat."
-#: builtin/am.c:1819
+#: builtin/am.c:1821
#, c-format
msgid "Patch failed at %s %.*s"
msgstr "El pedaç ha fallat a %s %.*s"
-#: builtin/am.c:1823
-#, fuzzy
+#: builtin/am.c:1825
msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
-msgstr "Utilitzeu 'git am --show-current-patch=diff' per veure el pedaç fallit"
+msgstr "Useu «git am --show-current-patch=diff» per veure el pedaç que ha fallat"
-#: builtin/am.c:1867
+#: builtin/am.c:1868
msgid ""
"No changes - did you forget to use 'git add'?\n"
"If there is nothing left to stage, chances are that something else\n"
@@ -10670,30 +10959,27 @@
"Si no hi ha res per fer «stage», probablement alguna altra cosa ja ha\n"
"introduït els mateixos canvis; potser voleu ometre aquest pedaç."
-#: builtin/am.c:1874
+#: builtin/am.c:1875
msgid ""
"You still have unmerged paths in your index.\n"
-"You should 'git add' each file with resolved conflicts to mark them as "
-"such.\n"
+"You should 'git add' each file with resolved conflicts to mark them as such.\n"
"You might run `git rm` on a file to accept \"deleted by them\" for it."
msgstr ""
"Encara teniu camins sense fusionar a l'índex.\n"
-"Heu de fer «git add» a cada fitxer amb conflictes resolts per a marcar-los "
-"com a tal.\n"
-"Podeu executar «git rm» en un fitxer per a acceptar «suprimit per ells» pel "
-"fitxer."
+"Heu de fer «git add» a cada fitxer amb conflictes resolts per a marcar-los com a tal.\n"
+"Podeu executar «git rm» en un fitxer per a acceptar «suprimit per ells» pel fitxer."
-#: builtin/am.c:1981 builtin/am.c:1985 builtin/am.c:1997 builtin/reset.c:347
-#: builtin/reset.c:355
+#: builtin/am.c:1983 builtin/am.c:1987 builtin/am.c:1999 builtin/reset.c:353
+#: builtin/reset.c:361
#, c-format
msgid "Could not parse object '%s'."
msgstr "No s'ha pogut analitzar l'objecte «%s»."
-#: builtin/am.c:2033
+#: builtin/am.c:2035 builtin/am.c:2111
msgid "failed to clean index"
msgstr "s'ha produït un error en netejar l'índex"
-#: builtin/am.c:2077
+#: builtin/am.c:2079
msgid ""
"You seem to have moved HEAD since the last 'am' failure.\n"
"Not rewinding to ORIG_HEAD"
@@ -10701,165 +10987,160 @@
"Sembla que heu mogut HEAD després de l'última fallada de «am».\n"
"No s'està rebobinant a ORIG_HEAD"
-#: builtin/am.c:2184
+#: builtin/am.c:2187
#, c-format
msgid "Invalid value for --patch-format: %s"
msgstr "Valor no vàlid per a --patch-format: %s"
-#: builtin/am.c:2226
-#, fuzzy, c-format
+#: builtin/am.c:2229
+#, c-format
msgid "Invalid value for --show-current-patch: %s"
-msgstr "Valor no vàlid per --show-current-patch%s"
+msgstr "Valor no vàlid per --show-current-patch: %s"
-#: builtin/am.c:2230
-#, fuzzy, c-format
+#: builtin/am.c:2233
+#, c-format
msgid "--show-current-patch=%s is incompatible with --show-current-patch=%s"
msgstr "--show-current-patch=%s és incompatible amb --show-current-patch=%s"
-#: builtin/am.c:2261
+#: builtin/am.c:2264
msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
msgstr "git am [<opcions>] [(<bústia> | <directori-de-correu>)...]"
-#: builtin/am.c:2262
+#: builtin/am.c:2265
msgid "git am [<options>] (--continue | --skip | --abort)"
msgstr "git am [<opcions>] (--continue | --skip | --abort)"
-#: builtin/am.c:2268
+#: builtin/am.c:2271
msgid "run interactively"
msgstr "executa interactivament"
-#: builtin/am.c:2270
+#: builtin/am.c:2273
msgid "historical option -- no-op"
msgstr "opció històrica -- no-op"
-#: builtin/am.c:2272
+#: builtin/am.c:2275
msgid "allow fall back on 3way merging if needed"
msgstr "permet retrocedir a una fusió de 3 vies si és necessari"
-#: builtin/am.c:2273 builtin/init-db.c:546 builtin/prune-packed.c:16
-#: builtin/repack.c:472 builtin/stash.c:948
+#: builtin/am.c:2276 builtin/init-db.c:547 builtin/prune-packed.c:16
+#: builtin/repack.c:640 builtin/stash.c:961
msgid "be quiet"
msgstr "silenciós"
-#: builtin/am.c:2275
-#, fuzzy
+#: builtin/am.c:2278
msgid "add a Signed-off-by trailer to the commit message"
msgstr "afegeix una línia «Signed-off-by» al missatge de comissió"
-#: builtin/am.c:2278
+#: builtin/am.c:2281
msgid "recode into utf8 (default)"
msgstr "recodifica en utf8 (per defecte)"
-#: builtin/am.c:2280
+#: builtin/am.c:2283
msgid "pass -k flag to git-mailinfo"
msgstr "passa l'indicador -k a git-mailinfo"
-#: builtin/am.c:2282
+#: builtin/am.c:2285
msgid "pass -b flag to git-mailinfo"
msgstr "passa l'indicador -b a git-mailinfo"
-#: builtin/am.c:2284
+#: builtin/am.c:2287
msgid "pass -m flag to git-mailinfo"
msgstr "passa l'indicador -m a git-mailinfo"
-#: builtin/am.c:2286
+#: builtin/am.c:2289
msgid "pass --keep-cr flag to git-mailsplit for mbox format"
msgstr "passa l'indicador --keep-cr a git-mailsplit per al format mbox"
-#: builtin/am.c:2289
+#: builtin/am.c:2292
msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
msgstr ""
"no passis l'indicador --keep-cr a git-mailsplit independent d'am.keepcr"
-#: builtin/am.c:2292
+#: builtin/am.c:2295
msgid "strip everything before a scissors line"
msgstr "elimina tot abans d'una línia de tisores"
-#: builtin/am.c:2294
-#, fuzzy
+#: builtin/am.c:2297
msgid "pass it through git-mailinfo"
-msgstr "passa-ho a través de git-apply"
+msgstr "passa-ho a través del git-mailinfo"
-#: builtin/am.c:2297 builtin/am.c:2300 builtin/am.c:2303 builtin/am.c:2306
-#: builtin/am.c:2309 builtin/am.c:2312 builtin/am.c:2315 builtin/am.c:2318
-#: builtin/am.c:2324
+#: builtin/am.c:2300 builtin/am.c:2303 builtin/am.c:2306 builtin/am.c:2309
+#: builtin/am.c:2312 builtin/am.c:2315 builtin/am.c:2318 builtin/am.c:2321
+#: builtin/am.c:2327
msgid "pass it through git-apply"
msgstr "passa-ho a través de git-apply"
-#: builtin/am.c:2314 builtin/commit.c:1505 builtin/fmt-merge-msg.c:17
-#: builtin/fmt-merge-msg.c:20 builtin/grep.c:906 builtin/merge.c:261
+#: builtin/am.c:2317 builtin/commit.c:1514 builtin/fmt-merge-msg.c:17
+#: builtin/fmt-merge-msg.c:20 builtin/grep.c:919 builtin/merge.c:262
#: builtin/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
-#: builtin/rebase.c:1342 builtin/repack.c:483 builtin/repack.c:487
-#: builtin/repack.c:489 builtin/show-branch.c:650 builtin/show-ref.c:172
-#: builtin/tag.c:447 parse-options.h:155 parse-options.h:176
-#: parse-options.h:317
+#: builtin/rebase.c:1046 builtin/repack.c:651 builtin/repack.c:655
+#: builtin/repack.c:657 builtin/show-branch.c:649 builtin/show-ref.c:172
+#: builtin/tag.c:445 parse-options.h:154 parse-options.h:175
+#: parse-options.h:316
msgid "n"
msgstr "n"
-#: builtin/am.c:2320 builtin/branch.c:672 builtin/bugreport.c:137
-#: builtin/for-each-ref.c:40 builtin/replace.c:556 builtin/tag.c:481
+#: builtin/am.c:2323 builtin/branch.c:673 builtin/bugreport.c:109
+#: builtin/for-each-ref.c:40 builtin/replace.c:556 builtin/tag.c:479
#: builtin/verify-tag.c:38
msgid "format"
msgstr "format"
-#: builtin/am.c:2321
+#: builtin/am.c:2324
msgid "format the patch(es) are in"
msgstr "el format en el qual estan els pedaços"
-#: builtin/am.c:2327
+#: builtin/am.c:2330
msgid "override error message when patch failure occurs"
msgstr "passa per alt el missatge d'error si falla l'aplicació del pedaç"
-#: builtin/am.c:2329
+#: builtin/am.c:2332
msgid "continue applying patches after resolving a conflict"
msgstr "segueix aplicant pedaços després de resoldre un conflicte"
-#: builtin/am.c:2332
+#: builtin/am.c:2335
msgid "synonyms for --continue"
msgstr "sinònims de --continue"
-#: builtin/am.c:2335
+#: builtin/am.c:2338
msgid "skip the current patch"
msgstr "omet el pedaç actual"
-#: builtin/am.c:2338
-#, fuzzy
-msgid "restore the original branch and abort the patching operation"
-msgstr "restaura la branca original i avorta l'operació d'apedaçament."
-
#: builtin/am.c:2341
-#, fuzzy
-msgid "abort the patching operation but keep HEAD where it is"
-msgstr "avorta l'operació de pedaç però manté HEAD on és."
+msgid "restore the original branch and abort the patching operation"
+msgstr "restaura la branca original i interromp l'operació d'apedaçament"
-#: builtin/am.c:2345
-#, fuzzy
+#: builtin/am.c:2344
+msgid "abort the patching operation but keep HEAD where it is"
+msgstr "interromp l'operació d'apedaçament però manté HEAD on és"
+
+#: builtin/am.c:2348
msgid "show the patch being applied"
msgstr "mostra el pedaç que s'està aplicant"
-#: builtin/am.c:2350
+#: builtin/am.c:2353
msgid "lie about committer date"
msgstr "menteix sobre la data del comitent"
-#: builtin/am.c:2352
+#: builtin/am.c:2355
msgid "use current timestamp for author date"
msgstr "usa el marc de temps actual per la data d'autor"
-#: builtin/am.c:2354 builtin/commit-tree.c:120 builtin/commit.c:1630
-#: builtin/merge.c:298 builtin/pull.c:175 builtin/rebase.c:537
-#: builtin/rebase.c:1395 builtin/revert.c:117 builtin/tag.c:462
+#: builtin/am.c:2357 builtin/commit-tree.c:118 builtin/commit.c:1642
+#: builtin/merge.c:299 builtin/pull.c:175 builtin/rebase.c:1099
+#: builtin/revert.c:117 builtin/tag.c:460
msgid "key-id"
msgstr "ID de clau"
-#: builtin/am.c:2355 builtin/rebase.c:538 builtin/rebase.c:1396
+#: builtin/am.c:2358 builtin/rebase.c:1100
msgid "GPG-sign commits"
msgstr "signa les comissions amb GPG"
-#: builtin/am.c:2358
+#: builtin/am.c:2361
msgid "(internal use for git-rebase)"
msgstr "(ús intern per a git-rebase)"
-#: builtin/am.c:2376
+#: builtin/am.c:2379
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."
@@ -10867,18 +11148,18 @@
"Fa molt que l'opció -b/--binary no ha fet res, i\n"
"s'eliminarà. No l'useu més."
-#: builtin/am.c:2383
+#: builtin/am.c:2386
msgid "failed to read the index"
msgstr "S'ha produït un error en llegir l'índex"
-#: builtin/am.c:2398
+#: builtin/am.c:2401
#, c-format
msgid "previous rebase directory %s still exists but mbox given."
msgstr ""
"un directori de «rebase» anterior %s encara existeix però s'ha donat una "
"bústia."
-#: builtin/am.c:2422
+#: builtin/am.c:2425
#, c-format
msgid ""
"Stray %s directory found.\n"
@@ -10887,12 +11168,11 @@
"S'ha trobat un directori %s extraviat.\n"
"Useu «git am --abort» per a eliminar-lo."
-#: builtin/am.c:2428
+#: builtin/am.c:2431
msgid "Resolve operation not in progress, we are not resuming."
msgstr "Una operació de resolució no està en curs; no reprenem."
-#: builtin/am.c:2438
-#, fuzzy
+#: builtin/am.c:2441
msgid "interactive mode requires patches on the command line"
msgstr "el mode interactiu requereix pedaços a la línia d'ordres"
@@ -10900,129 +11180,126 @@
msgid "git apply [<options>] [<patch>...]"
msgstr "git apply [<opcions>] [<pedaç>...]"
-#: builtin/archive.c:17
-#, c-format
-msgid "could not create archive file '%s'"
-msgstr "no s'ha pogut crear el fitxer d'arxiu «%s»"
-
-#: builtin/archive.c:20
+#: builtin/archive.c:18
msgid "could not redirect output"
msgstr "no s'ha pogut redirigir la sortida"
-#: builtin/archive.c:37
+#: builtin/archive.c:35
msgid "git archive: Remote with no URL"
msgstr "git archive: Remot sense URL"
-#: builtin/archive.c:61
+#: builtin/archive.c:59
msgid "git archive: expected ACK/NAK, got a flush packet"
msgstr "git archive: s'esperava ACK/NAK, s'ha rebut un paquet de buidatge"
-#: builtin/archive.c:64
+#: builtin/archive.c:62
#, c-format
msgid "git archive: NACK %s"
msgstr "git archive: %s NACK"
-#: builtin/archive.c:65
+#: builtin/archive.c:63
msgid "git archive: protocol error"
msgstr "git archive: error de protocol"
-#: builtin/archive.c:69
+#: builtin/archive.c:67
msgid "git archive: expected a flush"
msgstr "git archive: s'esperava una neteja"
-#: builtin/bisect--helper.c:23
+#: builtin/bisect--helper.c:24
msgid "git bisect--helper --bisect-reset [<commit>]"
msgstr "git bisect--helper --bisect-reset [<comissió>]"
-#: builtin/bisect--helper.c:24
-#, fuzzy
-msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
-msgstr "git bisect--helper --bisect-next-check <goodterm> <badterm> [<term>]"
-
#: builtin/bisect--helper.c:25
-#, fuzzy
msgid ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
+"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | "
+"--term-new]"
msgstr ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-bad | --term-new]"
+"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | "
+"--term-new]"
#: builtin/bisect--helper.c:26
-#, fuzzy
msgid ""
-"git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
-"=<term>] [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] "
-"[<paths>...]"
+"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-{oldgood}=<term> --term-{newbad}"
-"=<term>][--no-checkout] [<bad> [<good>]] [-] [<paths>]"
+"git bisect--helper --bisect-start [--term-{new,bad}=<term> "
+"--term-{old,good}=<term>] [--no-checkout] [--first-parent] [<bad> "
+"[<good>...]] [--] [<paths>...]"
#: builtin/bisect--helper.c:28
-#, fuzzy
msgid "git bisect--helper --bisect-next"
-msgstr "git bisect--helper --bisect-clean-state"
+msgstr "git bisect--helper --bisect-next"
#: builtin/bisect--helper.c:29
-#, fuzzy
msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
-msgstr "git bisect--helper --bisect-reset [<comissió>]"
+msgstr "git bisect--helper --bisect-state (bad|new) [<rev>]"
#: builtin/bisect--helper.c:30
-#, fuzzy
msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
-msgstr "git bisect--helper --bisect-reset [<comissió>]"
+msgstr "git bisect--helper --bisect-state (good|old) [<rev>...]"
#: builtin/bisect--helper.c:31
-#, fuzzy
msgid "git bisect--helper --bisect-replay <filename>"
-msgstr "git bisect--helper --bisect-clean-state"
+msgstr "git bisect--helper --bisect-replay <filename>"
#: builtin/bisect--helper.c:32
-#, fuzzy
msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
-msgstr "git bisect--helper --bisect-reset [<comissió>]"
+msgstr "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
-#: builtin/bisect--helper.c:107
-#, fuzzy, c-format
+#: builtin/bisect--helper.c:33
+msgid "git bisect--helper --bisect-visualize"
+msgstr "git bisect--helper --bisect-visualize"
+
+#: builtin/bisect--helper.c:34
+msgid "git bisect--helper --bisect-run <cmd>..."
+msgstr "git bisect--helper --bisect-run <ordre>..."
+
+#: builtin/bisect--helper.c:109
+#, c-format
msgid "cannot open file '%s' in mode '%s'"
-msgstr "no es pot copiar «%s» a «%s»"
+msgstr "no es pot obrir el fitxer «%s» en mode «%s»"
-#: builtin/bisect--helper.c:114
-#, fuzzy, c-format
+#: builtin/bisect--helper.c:116
+#, c-format
msgid "could not write to file '%s'"
-msgstr "no s'ha pogut escriure el fitxer: «%s»"
+msgstr "no s'ha pogut escriure el fitxer «%s»"
-#: builtin/bisect--helper.c:153
+#: builtin/bisect--helper.c:154
+#, c-format
+msgid "cannot open file '%s' for reading"
+msgstr "no es pot obrir «%s» per a lectura"
+
+#: builtin/bisect--helper.c:170
#, c-format
msgid "'%s' is not a valid term"
msgstr "«%s» no és un terme vàlid"
-#: builtin/bisect--helper.c:157
+#: builtin/bisect--helper.c:174
#, c-format
msgid "can't use the builtin command '%s' as a term"
msgstr "no es pot usar l'ordre interna «%s» com a terme"
-#: builtin/bisect--helper.c:167
+#: builtin/bisect--helper.c:184
#, c-format
msgid "can't change the meaning of the term '%s'"
msgstr "no es pot canviar el significat del terme «%s»"
-#: builtin/bisect--helper.c:177
+#: builtin/bisect--helper.c:194
msgid "please use two different terms"
-msgstr "useu dos termes distintes"
+msgstr "useu dos termes diferents"
-#: builtin/bisect--helper.c:193
+#: builtin/bisect--helper.c:210
#, fuzzy, c-format
msgid "We are not bisecting.\n"
msgstr "No estem bisecant."
-#: builtin/bisect--helper.c:201
+#: builtin/bisect--helper.c:218
#, c-format
msgid "'%s' is not a valid commit"
msgstr "«%s» no és una comissió vàlida"
-#: builtin/bisect--helper.c:210
+#: builtin/bisect--helper.c:227
#, fuzzy, c-format
msgid ""
"could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
@@ -11030,27 +11307,27 @@
"no s'ha pogut comprovar l'original HEAD «%s». Proveu «git bisect reset "
"<commit>»."
-#: builtin/bisect--helper.c:254
+#: builtin/bisect--helper.c:271
#, fuzzy, c-format
msgid "Bad bisect_write argument: %s"
msgstr "Arguments de bisectriu incorrectes"
-#: builtin/bisect--helper.c:259
+#: builtin/bisect--helper.c:276
#, c-format
msgid "couldn't get the oid of the rev '%s'"
msgstr "no s'ha pogut obtenir l'oid de la revisió «%s»"
-#: builtin/bisect--helper.c:271
-#, fuzzy, c-format
+#: builtin/bisect--helper.c:288
+#, c-format
msgid "couldn't open the file '%s'"
msgstr "no s'ha pogut obrir el fitxer «%s»"
-#: builtin/bisect--helper.c:297
+#: builtin/bisect--helper.c:314
#, fuzzy, c-format
msgid "Invalid command: you're currently in a %s/%s bisect"
msgstr "Ordre no vàlida esteu actualment en un percentatge/%s bisect"
-#: builtin/bisect--helper.c:324
+#: builtin/bisect--helper.c:341
#, fuzzy, c-format
msgid ""
"You need to give me at least one %s and %s revision.\n"
@@ -11059,7 +11336,7 @@
"Heu de donar-me com a mínim un per cents i un per cents de revisió. Podeu "
"utilitzar «git bisectrius» i «git bisectris» per a això."
-#: builtin/bisect--helper.c:328
+#: builtin/bisect--helper.c:345
#, fuzzy, c-format
msgid ""
"You need to start by \"git bisect start\".\n"
@@ -11067,10 +11344,9 @@
"You can use \"git bisect %s\" and \"git bisect %s\" for that."
msgstr ""
"Heu de començar per «git bisect start». \n"
-"Després heu de donar-me com a mínim un per cents i per cents revisió. Podeu "
-"utilitzar «git bisect %s» i «git bisect %s» per a això."
+"Després heu de donar-me com a mínim un per cents i per cents revisió. Podeu utilitzar «git bisect %s» i «git bisect %s» per a això."
-#: builtin/bisect--helper.c:348
+#: builtin/bisect--helper.c:365
#, c-format
msgid "bisecting only with a %s commit"
msgstr "bisecant amb només una comissió %s"
@@ -11078,16 +11354,15 @@
#. 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:356
+#: builtin/bisect--helper.c:373
msgid "Are you sure [Y/n]? "
msgstr "N'esteu segur [Y/n]? "
-#: builtin/bisect--helper.c:417
+#: builtin/bisect--helper.c:434
msgid "no terms defined"
msgstr "cap terme definit"
-#: builtin/bisect--helper.c:420
+#: builtin/bisect--helper.c:437
#, fuzzy, c-format
msgid ""
"Your current terms are %s for the old state\n"
@@ -11096,7 +11371,7 @@
"Els seus actuals termes són percentatges per al vell Estat i percentatges "
"per al nou Estat."
-#: builtin/bisect--helper.c:430
+#: builtin/bisect--helper.c:447
#, c-format
msgid ""
"invalid argument %s for 'git bisect terms'.\n"
@@ -11105,174 +11380,219 @@
"argument no vàlid %s per a «git bisect terms».\n"
"Les opcions admeses són: --term-good|--term-old i --term-bad|--term-new."
-#: builtin/bisect--helper.c:497 builtin/bisect--helper.c:1021
+#: builtin/bisect--helper.c:514 builtin/bisect--helper.c:1038
#, fuzzy
msgid "revision walk setup failed\n"
msgstr "la configuració del passeig per revisions ha fallat"
-#: builtin/bisect--helper.c:519
-#, fuzzy, c-format
+#: builtin/bisect--helper.c:536
+#, c-format
msgid "could not open '%s' for appending"
-msgstr "no s'ha pogut obrir «%s» per a lectura"
+msgstr "no s'ha pogut obrir «%s» per a afegir-hi"
-#: builtin/bisect--helper.c:638 builtin/bisect--helper.c:651
-#, fuzzy
+#: builtin/bisect--helper.c:655 builtin/bisect--helper.c:668
msgid "'' is not a valid term"
msgstr "«%s» no és un terme vàlid"
-#: builtin/bisect--helper.c:661
+#: builtin/bisect--helper.c:678
#, c-format
msgid "unrecognized option: '%s'"
msgstr "opció no reconeguda: «%s»"
-#: builtin/bisect--helper.c:665
+#: builtin/bisect--helper.c:682
#, c-format
msgid "'%s' does not appear to be a valid revision"
msgstr "«%s» no sembla ser una revisió vàlida"
-#: builtin/bisect--helper.c:696
+#: builtin/bisect--helper.c:713
msgid "bad HEAD - I need a HEAD"
msgstr "HEAD incorrecte - Cal un HEAD"
-#: builtin/bisect--helper.c:711
+#: builtin/bisect--helper.c:728
#, c-format
msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
msgstr ""
"l'agafament de «%s» ha fallat. Proveu «git bisect start <branca-vàlida>»."
-#: builtin/bisect--helper.c:732
+#: builtin/bisect--helper.c:749
msgid "won't bisect on cg-seek'ed tree"
msgstr "no es bisecarà en un arbre en el qual s'ha fet cg-seek"
-#: builtin/bisect--helper.c:735
-#, fuzzy
+#: builtin/bisect--helper.c:752
msgid "bad HEAD - strange symbolic ref"
msgstr "HEAD incorrecte - referència simbòlica estranya"
-#: builtin/bisect--helper.c:755
-#, fuzzy, c-format
+#: builtin/bisect--helper.c:772
+#, c-format
msgid "invalid ref: '%s'"
-msgstr "ref '%s' no és vàlid"
+msgstr "referència no és vàlida: «%s»"
-#: builtin/bisect--helper.c:813
-#, fuzzy
+#: builtin/bisect--helper.c:830
msgid "You need to start by \"git bisect start\"\n"
-msgstr "Cal començar per «git bisect start»"
+msgstr "Cal començar per «git bisect start»\n"
#. 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
+#: builtin/bisect--helper.c:841
msgid "Do you want me to do it for you [Y/n]? "
msgstr "Voleu que ho faci per vostè [Y/n]? "
-#: builtin/bisect--helper.c:842
-#, fuzzy
+#: builtin/bisect--helper.c:859
msgid "Please call `--bisect-state` with at least one argument"
-msgstr "Si us plau crideu `--bisect-state` amb almenys un argument"
+msgstr "Executeu «--bisect-state» amb almenys un argument"
-#: builtin/bisect--helper.c:855
-#, fuzzy, c-format
+#: builtin/bisect--helper.c:872
+#, c-format
msgid "'git bisect %s' can take only one argument."
-msgstr "«git bisect $TERM_BAD» pot acceptar només un argument."
+msgstr "«git bisect %s» només pot acceptar un argument."
-#: builtin/bisect--helper.c:867 builtin/bisect--helper.c:880
-#, fuzzy, c-format
+#: builtin/bisect--helper.c:884 builtin/bisect--helper.c:897
+#, c-format
msgid "Bad rev input: %s"
-msgstr "Introducció de revisió errònia: $arg"
+msgstr "Entrada amb revisió errònia: %s"
-#: builtin/bisect--helper.c:887
+#: builtin/bisect--helper.c:904
#, fuzzy, c-format
msgid "Bad rev input (not a commit): %s"
msgstr "Introducció de revisió errònia: $arg"
-#: builtin/bisect--helper.c:919
+#: builtin/bisect--helper.c:936
msgid "We are not bisecting."
msgstr "No estem bisecant."
-#: builtin/bisect--helper.c:969
-#, fuzzy, c-format
+#: builtin/bisect--helper.c:986
+#, c-format
msgid "'%s'?? what are you talking about?"
-msgstr "?? de què parleu?"
+msgstr "«%s»? Què voleu dir?"
-#: builtin/bisect--helper.c:981
-#, fuzzy, c-format
+#: builtin/bisect--helper.c:998
+#, c-format
msgid "cannot read file '%s' for replaying"
-msgstr "no es pot llegir $file per a reproducció"
+msgstr "no es pot llegir «%s» per a reproducció"
-#: builtin/bisect--helper.c:1054
+#: builtin/bisect--helper.c:1107 builtin/bisect--helper.c:1274
+msgid "bisect run failed: no command provided."
+msgstr "ha fallat l'execució de bisect: no s'ha proporcionat cap ordre."
+
+#: builtin/bisect--helper.c:1116
+#, c-format
+msgid "running %s\n"
+msgstr "s'està executant %s\n"
+
+#: builtin/bisect--helper.c:1120
+#, fuzzy, c-format
+msgid "bisect run failed: exit code %d from '%s' is < 0 or >= 128"
+msgstr ""
+"el pas de bisecció ha fallat:\n"
+"el codi de sortida $res de «$command» és < 0 o bé >= 128"
+
+#: builtin/bisect--helper.c:1136
+#, c-format
+msgid "cannot open file '%s' for writing"
+msgstr "no es pot obrir «%s» per a escriptura"
+
+#: builtin/bisect--helper.c:1152
+msgid "bisect run cannot continue any more"
+msgstr "el pas de bisecció no pot continuar més"
+
+#: builtin/bisect--helper.c:1154
+#, c-format
+msgid "bisect run success"
+msgstr "pas de bisecció reeixit"
+
+#: builtin/bisect--helper.c:1157
+#, fuzzy, c-format
+msgid "bisect found first bad commit"
+msgstr "bisecant amb només una comissió %s"
+
+#: builtin/bisect--helper.c:1160
+#, fuzzy, c-format
+msgid ""
+"bisect run failed: 'git bisect--helper --bisect-state %s' exited with error "
+"code %d"
+msgstr ""
+"el pas de bisecció ha fallat:\n"
+"«bisect_state $state» ha sortit amb el codi d'error $res"
+
+#: builtin/bisect--helper.c:1192
#, fuzzy
msgid "reset the bisection state"
msgstr "restableix l'estat de la bisecció"
-#: builtin/bisect--helper.c:1056
+#: builtin/bisect--helper.c:1194
#, fuzzy
msgid "check whether bad or good terms exist"
msgstr "comprova si existeixen termes incorrectes o bons"
-#: builtin/bisect--helper.c:1058
+#: builtin/bisect--helper.c:1196
#, fuzzy
msgid "print out the bisect terms"
msgstr "imprimeix els termes de la bisectriu"
-#: builtin/bisect--helper.c:1060
+#: builtin/bisect--helper.c:1198
#, fuzzy
msgid "start the bisect session"
msgstr "inicia la sessió bisect"
-#: builtin/bisect--helper.c:1062
+#: builtin/bisect--helper.c:1200
#, fuzzy
msgid "find the next bisection commit"
msgstr "no es pot esmenar una comissió no existent"
-#: builtin/bisect--helper.c:1064
+#: builtin/bisect--helper.c:1202
#, fuzzy
msgid "mark the state of ref (or refs)"
msgstr "marca l'estat de ref (o refs)"
-#: builtin/bisect--helper.c:1066
+#: builtin/bisect--helper.c:1204
#, fuzzy
msgid "list the bisection steps so far"
msgstr "restableix l'estat de la bisecció"
-#: builtin/bisect--helper.c:1068
+#: builtin/bisect--helper.c:1206
+#, fuzzy
msgid "replay the bisection process from the given file"
-msgstr ""
+msgstr "torna a reproduir el procés de bisecció des del fitxer donat"
-#: builtin/bisect--helper.c:1070
+#: builtin/bisect--helper.c:1208
#, fuzzy
msgid "skip some commits for checkout"
msgstr "la branca o entrega a agafar"
-#: builtin/bisect--helper.c:1072
+#: builtin/bisect--helper.c:1210
+#, fuzzy
+msgid "visualize the bisection"
+msgstr "inicia la sessió bisect"
+
+#: builtin/bisect--helper.c:1212
+#, fuzzy
+msgid "use <cmd>... to automatically bisect."
+msgstr "no cometis automàticament"
+
+#: builtin/bisect--helper.c:1214
msgid "no log for BISECT_WRITE"
msgstr "no hi ha registre per a BISECT_WRITE"
-#: builtin/bisect--helper.c:1087
+#: builtin/bisect--helper.c:1229
#, fuzzy
msgid "--bisect-reset requires either no argument or a commit"
msgstr "--bisect-reset no requereix cap argument ni una comissió"
-#: builtin/bisect--helper.c:1092
-#, fuzzy
-msgid "--bisect-next-check requires 2 or 3 arguments"
-msgstr "--bisect-next-check requereix 2 o 3 arguments"
-
-#: builtin/bisect--helper.c:1098
+#: builtin/bisect--helper.c:1234
msgid "--bisect-terms requires 0 or 1 argument"
msgstr "--bisect-terms requereix 0 o 1 argument"
-#: builtin/bisect--helper.c:1107
+#: builtin/bisect--helper.c:1243
msgid "--bisect-next requires 0 arguments"
msgstr "--bisect-next no requereix cap argument"
-#: builtin/bisect--helper.c:1118
+#: builtin/bisect--helper.c:1254
#, fuzzy
msgid "--bisect-log requires 0 arguments"
msgstr "--bisect-next no requereix cap argument"
-#: builtin/bisect--helper.c:1123
+#: builtin/bisect--helper.c:1259
#, fuzzy
msgid "no logfile given"
msgstr "Cap fitxer de registre donat"
@@ -11285,180 +11605,174 @@
msgid "<rev-opts> are documented in git-rev-list(1)"
msgstr "es documenten les <opcions-de-revisió> en git-rev-list(1)"
-#: builtin/blame.c:410
+#: builtin/blame.c:406
#, c-format
msgid "expecting a color: %s"
msgstr "s'esperava un color: %s"
-#: builtin/blame.c:417
+#: builtin/blame.c:413
msgid "must end with a color"
msgstr "ha d'acabar amb un color"
-#: builtin/blame.c:728
+#: builtin/blame.c:724
#, c-format
msgid "invalid color '%s' in color.blame.repeatedLines"
msgstr "color «%s» no vàlid en «color.blame.repeatedLines»"
-#: builtin/blame.c:746
+#: builtin/blame.c:742
msgid "invalid value for blame.coloring"
msgstr "valor no vàlid per a «blame.coloring»"
-#: builtin/blame.c:845
+#: builtin/blame.c:841
#, c-format
msgid "cannot find revision %s to ignore"
msgstr "no s'ha pogut trobar la revisió %s per ignorar"
-#: builtin/blame.c:867
+#: builtin/blame.c:863
#, fuzzy
msgid "show blame entries as we find them, incrementally"
msgstr "Mostra les entrades «blame» mentre les trobem, incrementalment"
-#: builtin/blame.c:868
+#: builtin/blame.c:864
#, fuzzy
msgid "do not show object names of boundary commits (Default: off)"
msgstr ""
"Mostra un SHA-1 en blanc per les comissions de frontera (Per defecte: "
"desactivat)"
-#: builtin/blame.c:869
+#: builtin/blame.c:865
#, fuzzy
msgid "do not treat root commits as boundaries (Default: off)"
msgstr ""
"No tractis les comissions d'arrel com a límits (Per defecte: desactivat)"
-#: builtin/blame.c:870
-#, fuzzy
+#: builtin/blame.c:866
msgid "show work cost statistics"
-msgstr "Mostra les estadístiques de preu de treball"
+msgstr "mostra les estadístiques de preu de treball"
-#: builtin/blame.c:871 builtin/checkout.c:1524 builtin/clone.c:94
-#: builtin/commit-graph.c:84 builtin/commit-graph.c:222 builtin/fetch.c:179
-#: builtin/merge.c:297 builtin/multi-pack-index.c:55 builtin/pull.c:119
-#: builtin/push.c:575 builtin/send-pack.c:198
+#: builtin/blame.c:867 builtin/checkout.c:1517 builtin/clone.c:94
+#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:179
+#: builtin/merge.c:298 builtin/multi-pack-index.c:103
+#: builtin/multi-pack-index.c:154 builtin/multi-pack-index.c:178
+#: builtin/multi-pack-index.c:204 builtin/pull.c:119 builtin/push.c:566
+#: builtin/send-pack.c:202
msgid "force progress reporting"
msgstr "força l'informe de progrés"
-#: builtin/blame.c:872
+#: builtin/blame.c:868
#, fuzzy
msgid "show output score for blame entries"
msgstr "Mostra la puntuació de sortida de les entrades «blame»"
-#: builtin/blame.c:873
+#: builtin/blame.c:869
#, fuzzy
msgid "show original filename (Default: auto)"
msgstr "Mostra el nom de fitxer original (Per defecte: automàtic)"
-#: builtin/blame.c:874
+#: builtin/blame.c:870
#, fuzzy
msgid "show original linenumber (Default: off)"
msgstr "Mostra el número de línia original (Per defecte: desactivat)"
-#: builtin/blame.c:875
+#: builtin/blame.c:871
#, fuzzy
msgid "show in a format designed for machine consumption"
msgstr "Presenta en un format dissenyat per consumpció per màquina"
-#: builtin/blame.c:876
+#: builtin/blame.c:872
#, fuzzy
msgid "show porcelain format with per-line commit information"
msgstr "Mostra el format de porcellana amb informació de comissió per línia"
-#: builtin/blame.c:877
+#: builtin/blame.c:873
#, fuzzy
msgid "use the same output mode as git-annotate (Default: off)"
msgstr ""
"Usa el mateix mode de sortida que git-annotate (Per defecte: desactivat)"
-#: builtin/blame.c:878
+#: builtin/blame.c:874
#, fuzzy
msgid "show raw timestamp (Default: off)"
msgstr "Mostra la marca de temps crua (Per defecte: desactivat)"
-#: builtin/blame.c:879
+#: builtin/blame.c:875
#, fuzzy
msgid "show long commit SHA1 (Default: off)"
msgstr "Mostra l'SHA1 de comissió llarg (Per defecte: desactivat)"
-#: builtin/blame.c:880
+#: builtin/blame.c:876
#, fuzzy
msgid "suppress author name and timestamp (Default: off)"
msgstr "Omet el nom d'autor i la marca de temps (Per defecte: desactivat)"
-#: builtin/blame.c:881
+#: builtin/blame.c:877
#, fuzzy
msgid "show author email instead of name (Default: off)"
msgstr ""
"Mostra l'adreça electrònica de l'autor en lloc del nom (Per defecte: "
"desactivat)"
-#: builtin/blame.c:882
-#, fuzzy
+#: builtin/blame.c:878
msgid "ignore whitespace differences"
msgstr "Ignora les diferències d'espai en blanc"
-#: builtin/blame.c:883 builtin/log.c:1820
+#: builtin/blame.c:879 builtin/log.c:1823
msgid "rev"
msgstr "rev"
-#: builtin/blame.c:883
+#: builtin/blame.c:879
#, fuzzy
msgid "ignore <rev> when blaming"
msgstr "Ignora <rev> en culpar"
-#: builtin/blame.c:884
-#, fuzzy
+#: builtin/blame.c:880
msgid "ignore revisions from <file>"
-msgstr "Ignora les revisions de <file>"
+msgstr "Ignora les revisions de <fitxer>"
-#: builtin/blame.c:885
+#: builtin/blame.c:881
#, fuzzy
msgid "color redundant metadata from previous line differently"
-msgstr "color les metadades redundants de la línia anterior de manera diferent"
+msgstr ""
+"color les metadades redundants de la línia anterior de manera diferent"
-#: builtin/blame.c:886
-#, fuzzy
+#: builtin/blame.c:882
msgid "color lines by age"
-msgstr "coloreja les línies per edat"
+msgstr "acoloreix les línies per antiguitat"
-#: builtin/blame.c:887
-#, fuzzy
+#: builtin/blame.c:883
msgid "spend extra cycles to find better match"
-msgstr "Gasta cicles extres per a trobar una coincidència millor"
+msgstr "gasta cicles extres per a trobar una coincidència millor"
-#: builtin/blame.c:888
-#, fuzzy
+#: builtin/blame.c:884
msgid "use revisions from <file> instead of calling git-rev-list"
-msgstr "Usa les revisions de <fitxer> en lloc d'invocar git-rev-list"
+msgstr "usa les revisions de <fitxer> en lloc d'invocar git-rev-list"
-#: builtin/blame.c:889
-#, fuzzy
+#: builtin/blame.c:885
msgid "use <file>'s contents as the final image"
-msgstr "Usa els continguts de <fitxer> com a la imatge final"
+msgstr "usa els continguts de <fitxer> com a la imatge final"
-#: builtin/blame.c:890 builtin/blame.c:891
+#: builtin/blame.c:886 builtin/blame.c:887
msgid "score"
msgstr "puntuació"
-#: builtin/blame.c:890
-#, fuzzy
+#: builtin/blame.c:886
msgid "find line copies within and across files"
-msgstr "Troba còpies de línia dins i a través dels fitxers"
+msgstr "troba còpies delínia dins i a través dels fitxers"
-#: builtin/blame.c:891
-#, fuzzy
+#: builtin/blame.c:887
msgid "find line movements within and across files"
-msgstr "Troba moviments de línia dins i a través dels fitxers"
+msgstr "troba moviments de línia dins i a través dels fitxers"
-#: builtin/blame.c:892
+#: builtin/blame.c:888
msgid "range"
msgstr "rang"
-#: builtin/blame.c:893
+#: builtin/blame.c:889
#, fuzzy
msgid "process only line range <start>,<end> or function :<funcname>"
msgstr "Processa només el rang de línies n,m, comptant des d'1"
-#: builtin/blame.c:945
+#: builtin/blame.c:944
msgid "--progress can't be used with --incremental or porcelain formats"
msgstr ""
"no es pot usar --progress amb els formats --incremental o de porcellana"
@@ -11470,19 +11784,18 @@
#. among various forms of relative timestamps, but
#. your language may need more or fewer display
#. columns.
-#.
-#: builtin/blame.c:996
+#: builtin/blame.c:995
msgid "4 years, 11 months ago"
msgstr "fa 4 anys i 11 mesos"
-#: builtin/blame.c:1112
+#: builtin/blame.c:1111
#, c-format
msgid "file %s has only %lu line"
msgid_plural "file %s has only %lu lines"
msgstr[0] "el fitxer %s té només %lu línia"
msgstr[1] "el fitxer %s té només %lu línies"
-#: builtin/blame.c:1157
+#: builtin/blame.c:1156
msgid "Blaming lines"
msgstr "S'està fent un «blame»"
@@ -11585,78 +11898,78 @@
msgid "Deleted branch %s (was %s).\n"
msgstr "S'ha suprimit la branca %s (era %s).\n"
-#: builtin/branch.c:440 builtin/tag.c:63
+#: builtin/branch.c:441 builtin/tag.c:63
msgid "unable to parse format string"
msgstr "no s'ha pogut analitzar la cadena de format"
-#: builtin/branch.c:471
+#: builtin/branch.c:472
msgid "could not resolve HEAD"
msgstr "no s'ha pogut resoldre HEAD"
-#: builtin/branch.c:477
+#: builtin/branch.c:478
#, c-format
msgid "HEAD (%s) points outside of refs/heads/"
msgstr "HEAD (%s) apunta fora de refs/heads/"
-#: builtin/branch.c:492
+#: builtin/branch.c:493
#, c-format
msgid "Branch %s is being rebased at %s"
msgstr "S'està fent «rebase» en la branca %s a %s"
-#: builtin/branch.c:496
+#: builtin/branch.c:497
#, c-format
msgid "Branch %s is being bisected at %s"
msgstr "La branca %s s'està bisecant a %s"
-#: builtin/branch.c:513
+#: builtin/branch.c:514
msgid "cannot copy the current branch while not on any."
msgstr "no es pot copiar branca actual mentre no s'és a cap."
-#: builtin/branch.c:515
+#: builtin/branch.c:516
msgid "cannot rename the current branch while not on any."
msgstr "no es pot canviar el nom de la branca actual mentre no s'és a cap."
-#: builtin/branch.c:526
+#: builtin/branch.c:527
#, c-format
msgid "Invalid branch name: '%s'"
msgstr "Nom de branca no vàlid: «%s»"
-#: builtin/branch.c:555
+#: builtin/branch.c:556
msgid "Branch rename failed"
msgstr "El canvi de nom de branca ha fallat"
-#: builtin/branch.c:557
+#: builtin/branch.c:558
msgid "Branch copy failed"
msgstr "La còpia de la branca ha fallat"
-#: builtin/branch.c:561
+#: builtin/branch.c:562
#, c-format
msgid "Created a copy of a misnamed branch '%s'"
msgstr "S'ha creat una còpia d'una branca mal anomenada «%s»"
-#: builtin/branch.c:564
+#: builtin/branch.c:565
#, c-format
msgid "Renamed a misnamed branch '%s' away"
msgstr "S'ha canviat el nom de la branca mal anomenada «%s»"
-#: builtin/branch.c:570
+#: builtin/branch.c:571
#, c-format
msgid "Branch renamed to %s, but HEAD is not updated!"
msgstr "S'ha canviat el nom de la branca a %s, però HEAD no està actualitzat!"
-#: builtin/branch.c:579
+#: builtin/branch.c:580
msgid "Branch is renamed, but update of config-file failed"
msgstr ""
"La branca està canviada de nom, però l'actualització del fitxer de "
"configuració ha fallat"
-#: builtin/branch.c:581
+#: builtin/branch.c:582
msgid "Branch is copied, but update of config-file failed"
msgstr ""
"La branca està copiada, però l'actualització del fitxer de configuració ha "
"fallat"
-#: builtin/branch.c:597
+#: builtin/branch.c:598
#, c-format
msgid ""
"Please edit the description for the branch\n"
@@ -11667,221 +11980,221 @@
" %s\n"
"S'eliminaran les línies que comencin amb «%c».\n"
-#: builtin/branch.c:631
+#: builtin/branch.c:632
msgid "Generic options"
msgstr "Opcions genèriques"
-#: builtin/branch.c:633
-msgid "show hash and subject, give twice for upstream branch"
-msgstr "mostra el hash i l'assumpte, doneu dues vegades per la branca font"
-
#: builtin/branch.c:634
+msgid "show hash and subject, give twice for upstream branch"
+msgstr "mostra el hash i l'assumpte, doneu dues vegades per a la branca font"
+
+#: builtin/branch.c:635
msgid "suppress informational messages"
msgstr "omet els missatges informatius"
-#: builtin/branch.c:635
+#: builtin/branch.c:636
msgid "set up tracking mode (see git-pull(1))"
msgstr "configura el mode de seguiment (vegeu git-pull(1))"
-#: builtin/branch.c:637
+#: builtin/branch.c:638
msgid "do not use"
msgstr "no usar"
-#: builtin/branch.c:639 builtin/rebase.c:533
+#: builtin/branch.c:640
msgid "upstream"
msgstr "font"
-#: builtin/branch.c:639
+#: builtin/branch.c:640
msgid "change the upstream info"
msgstr "canvia la informació de font"
-#: builtin/branch.c:640
-#, fuzzy
+#: builtin/branch.c:641
msgid "unset the upstream info"
msgstr "treu la informació de la font"
-#: builtin/branch.c:641
-msgid "use colored output"
-msgstr "usa sortida colorada"
-
#: builtin/branch.c:642
+msgid "use colored output"
+msgstr "usa sortida amb colors"
+
+#: builtin/branch.c:643
msgid "act on remote-tracking branches"
msgstr "actua en branques amb seguiment remot"
-#: builtin/branch.c:644 builtin/branch.c:646
+#: builtin/branch.c:645 builtin/branch.c:647
msgid "print only branches that contain the commit"
msgstr "imprimeix només les branques que continguin la comissió"
-#: builtin/branch.c:645 builtin/branch.c:647
+#: builtin/branch.c:646 builtin/branch.c:648
msgid "print only branches that don't contain the commit"
msgstr "imprimeix només les branques que no continguin la comissió"
-#: builtin/branch.c:650
+#: builtin/branch.c:651
msgid "Specific git-branch actions:"
msgstr "Accions de git-branch específiques:"
-#: builtin/branch.c:651
+#: builtin/branch.c:652
msgid "list both remote-tracking and local branches"
msgstr "llista les branques amb seguiment remot i les locals"
-#: builtin/branch.c:653
+#: builtin/branch.c:654
msgid "delete fully merged branch"
msgstr "suprimeix la branca si està completament fusionada"
-#: builtin/branch.c:654
+#: builtin/branch.c:655
msgid "delete branch (even if not merged)"
msgstr "suprimeix la branca (encara que no estigui fusionada)"
-#: builtin/branch.c:655
+#: builtin/branch.c:656
msgid "move/rename a branch and its reflog"
msgstr "mou/canvia de nom una branca i el seu registre de referència"
-#: builtin/branch.c:656
+#: builtin/branch.c:657
msgid "move/rename a branch, even if target exists"
msgstr "mou/canvia de nom una branca, encara que el destí existeixi"
-#: builtin/branch.c:657
+#: builtin/branch.c:658
msgid "copy a branch and its reflog"
msgstr "copia una branca i el seu registre de referència"
-#: builtin/branch.c:658
+#: builtin/branch.c:659
msgid "copy a branch, even if target exists"
msgstr "copia una branca, encara que el destí existeixi"
-#: builtin/branch.c:659
+#: builtin/branch.c:660
msgid "list branch names"
msgstr "llista els noms de branca"
-#: builtin/branch.c:660
+#: builtin/branch.c:661
msgid "show current branch name"
msgstr "mostra el nom de la branca actual"
-#: builtin/branch.c:661
+#: builtin/branch.c:662
msgid "create the branch's reflog"
msgstr "crea el registre de referència de la branca"
-#: builtin/branch.c:663
+#: builtin/branch.c:664
msgid "edit the description for the branch"
msgstr "edita la descripció de la branca"
-#: builtin/branch.c:664
+#: builtin/branch.c:665
msgid "force creation, move/rename, deletion"
msgstr "força creació, moviment/canvi de nom, supressió"
-#: builtin/branch.c:665
+#: builtin/branch.c:666
msgid "print only branches that are merged"
msgstr "imprimeix només les branques que s'han fusionat"
-#: builtin/branch.c:666
+#: builtin/branch.c:667
msgid "print only branches that are not merged"
msgstr "imprimeix només les branques que no s'han fusionat"
-#: builtin/branch.c:667
+#: builtin/branch.c:668
msgid "list branches in columns"
msgstr "llista les branques en columnes"
-#: builtin/branch.c:669 builtin/for-each-ref.c:44 builtin/notes.c:415
-#: builtin/notes.c:418 builtin/notes.c:581 builtin/notes.c:584
-#: builtin/tag.c:477
+#: builtin/branch.c:670 builtin/for-each-ref.c:44 builtin/notes.c:413
+#: builtin/notes.c:416 builtin/notes.c:579 builtin/notes.c:582
+#: builtin/tag.c:475
msgid "object"
msgstr "objecte"
-#: builtin/branch.c:670
+#: builtin/branch.c:671
msgid "print only branches of the object"
msgstr "imprimeix només les branques de l'objecte"
-#: builtin/branch.c:671 builtin/for-each-ref.c:50 builtin/tag.c:484
+#: builtin/branch.c:672 builtin/for-each-ref.c:50 builtin/tag.c:482
msgid "sorting and filtering are case insensitive"
msgstr "l'ordenació i el filtratge distingeixen entre majúscules i minúscules"
-#: builtin/branch.c:672 builtin/for-each-ref.c:40 builtin/tag.c:482
+#: builtin/branch.c:673 builtin/for-each-ref.c:40 builtin/tag.c:480
#: builtin/verify-tag.c:38
msgid "format to use for the output"
msgstr "format a usar en la sortida"
-#: builtin/branch.c:695 builtin/clone.c:794
+#: builtin/branch.c:696 builtin/clone.c:678
msgid "HEAD not found below refs/heads!"
msgstr "HEAD no trobat sota refs/heads!"
-#: builtin/branch.c:719
+#: builtin/branch.c:720
msgid "--column and --verbose are incompatible"
msgstr "--column i --verbose són incompatibles"
-#: builtin/branch.c:734 builtin/branch.c:790 builtin/branch.c:799
+#: builtin/branch.c:735 builtin/branch.c:792 builtin/branch.c:801
msgid "branch name required"
msgstr "cal el nom de branca"
-#: builtin/branch.c:766
+#: builtin/branch.c:768
msgid "Cannot give description to detached HEAD"
msgstr "No es pot donar descripció a un HEAD separat"
-#: builtin/branch.c:771
+#: builtin/branch.c:773
msgid "cannot edit description of more than one branch"
msgstr "no es pot editar la descripció de més d'una branca"
-#: builtin/branch.c:778
+#: builtin/branch.c:780
#, c-format
msgid "No commit on branch '%s' yet."
msgstr "Encara no hi ha cap comissió en la branca «%s»."
-#: builtin/branch.c:781
+#: builtin/branch.c:783
#, c-format
msgid "No branch named '%s'."
msgstr "No hi ha cap branca amb nom «%s»."
-#: builtin/branch.c:796
+#: builtin/branch.c:798
msgid "too many branches for a copy operation"
msgstr "hi ha massa branques per a una operació de còpia"
-#: builtin/branch.c:805
+#: builtin/branch.c:807
msgid "too many arguments for a rename operation"
msgstr "hi ha massa arguments per a una operació de canvi de nom"
-#: builtin/branch.c:810
+#: builtin/branch.c:812
msgid "too many arguments to set new upstream"
msgstr "hi ha massa arguments per a establir una nova font"
-#: builtin/branch.c:814
+#: builtin/branch.c:816
#, c-format
msgid ""
"could not set upstream of HEAD to %s when it does not point to any branch."
msgstr ""
-"no s'ha pogut establir la font de HEAD com a %s quan no assenyala cap branca."
+"no s'ha pogut establir la font de HEAD com a %s quan no assenyala cap "
+"branca."
-#: builtin/branch.c:817 builtin/branch.c:840
+#: builtin/branch.c:819 builtin/branch.c:842
#, c-format
msgid "no such branch '%s'"
msgstr "no existeix la branca «%s»"
-#: builtin/branch.c:821
+#: builtin/branch.c:823
#, c-format
msgid "branch '%s' does not exist"
msgstr "la branca «%s» no existeix"
-#: builtin/branch.c:834
+#: builtin/branch.c:836
msgid "too many arguments to unset upstream"
msgstr "hi ha massa arguments per a desassignar la font"
-#: builtin/branch.c:838
+#: builtin/branch.c:840
msgid "could not unset upstream of HEAD when it does not point to any branch."
msgstr ""
"no s'ha pogut desassignar la font de HEAD perquè no assenyala cap branca."
-#: builtin/branch.c:844
+#: builtin/branch.c:846
#, c-format
msgid "Branch '%s' has no upstream information"
msgstr "La branca «%s» no té informació de font"
-#: builtin/branch.c:854
+#: builtin/branch.c:856
#, fuzzy
msgid ""
"The -a, and -r, options to 'git branch' do not take a branch name.\n"
"Did you mean to use: -a|-r --list <pattern>?"
msgstr ""
-"Les opcions -a i -r a «git branch» no prenen un nom de branca. Voleu usar -"
-"a|-r --list <pattern>?"
+"Les opcions -a i -r a «git branch» no prenen un nom de branca. Voleu usar "
+"-a|-r --list <pattern>?"
-#: builtin/branch.c:858
+#: builtin/branch.c:860
msgid ""
"the '--set-upstream' option is no longer supported. Please use '--track' or "
"'--set-upstream-to' instead."
@@ -11889,33 +12202,33 @@
"L'opció --set-upstream ja no s'admet. En lloc seu, useu «--track» o «--set-"
"upstream-to»."
-#: builtin/bugreport.c:15
+#: builtin/bugreport.c:16
msgid "git version:\n"
msgstr "versió de git:\n"
-#: builtin/bugreport.c:21
+#: builtin/bugreport.c:22
#, c-format
msgid "uname() failed with error '%s' (%d)\n"
msgstr "uname() ha fallat amb l'error «%s» (%d)\n"
-#: builtin/bugreport.c:31
+#: builtin/bugreport.c:32
msgid "compiler info: "
msgstr "informació del compilador: "
-#: builtin/bugreport.c:34
+#: builtin/bugreport.c:35
msgid "libc info: "
msgstr "Informació de la libc: "
-#: builtin/bugreport.c:80
+#: builtin/bugreport.c:49
#, fuzzy
msgid "not run from a git repository - no hooks to show\n"
msgstr "no és un repositori de git: %s"
-#: builtin/bugreport.c:90
+#: builtin/bugreport.c:62
msgid "git bugreport [-o|--output-directory <file>] [-s|--suffix <format>]"
msgstr "git bugreport [-o|--output-directory <file>] [-s|--suffix <format>]"
-#: builtin/bugreport.c:97
+#: builtin/bugreport.c:69
#, fuzzy
msgid ""
"Thank you for filling out a Git bug report!\n"
@@ -11939,204 +12252,193 @@
"que passés l'error? (Pas per reproduir el vostre problema) Què espereu que "
"passi? (Comportament explotat) Què ha passat? (Comportament real) Què és "
"diferent entre el que s'esperava i què ha passat? Qualsevol altra cosa que "
-"vulgueu afegir Reviseu la resta de l'informe d'error de sota. Podeu eliminar "
-"qualsevol línia que vulgueu."
+"vulgueu afegir Reviseu la resta de l'informe d'error de sota. Podeu eliminar"
+" qualsevol línia que vulgueu."
-#: builtin/bugreport.c:136
+#: builtin/bugreport.c:108
msgid "specify a destination for the bugreport file"
msgstr "especifiqueu una destinació per al fitxer d'informe d'error"
-#: builtin/bugreport.c:138
+#: builtin/bugreport.c:110
#, fuzzy
msgid "specify a strftime format suffix for the filename"
msgstr "especifiqueu un sufix de format strftime per al nom de fitxer"
-#: builtin/bugreport.c:160
+#: builtin/bugreport.c:132
#, fuzzy, c-format
msgid "could not create leading directories for '%s'"
msgstr "no s'han pogut crear els directoris inicials de «%s»"
-#: builtin/bugreport.c:167
+#: builtin/bugreport.c:139
msgid "System Info"
msgstr "Informació del sistema"
-#: builtin/bugreport.c:170
+#: builtin/bugreport.c:142
#, fuzzy
msgid "Enabled Hooks"
msgstr "no s'ha pogut bifurcar"
-#: builtin/bugreport.c:177
-#, fuzzy, c-format
-msgid "couldn't create a new file at '%s'"
-msgstr "no s'ha pogut crear el fitxer «%s»"
-
-#: builtin/bugreport.c:180
+#: builtin/bugreport.c:149
#, c-format
msgid "unable to write to %s"
msgstr "no s'ha pogut escriure a %s"
-#: builtin/bugreport.c:190
-#, fuzzy, c-format
+#: builtin/bugreport.c:159
+#, c-format
msgid "Created new report at '%s'.\n"
-msgstr "S'ha netejat el directori «%s»\n"
+msgstr "S'ha creat un nou informe a «%s».\n"
#: builtin/bundle.c:15 builtin/bundle.c:23
-#, fuzzy
msgid "git bundle create [<options>] <file> <git-rev-list args>"
-msgstr "git pack create [<opcions>] <file> <git-rev-list args>"
+msgstr "git bundle create [<opcions>] <fitxer> <git-rev-list args>"
#: builtin/bundle.c:16 builtin/bundle.c:28
-#, fuzzy
msgid "git bundle verify [<options>] <file>"
-msgstr "git pack verify [<opcions>] <file>"
+msgstr "git bundle verify [<opcions>] <fitxer>"
#: builtin/bundle.c:17 builtin/bundle.c:33
-#, fuzzy
msgid "git bundle list-heads <file> [<refname>...]"
-msgstr "git pack list-heads <file> [<refname>]"
+msgstr "git bundle list-heads <fitxer> [<refname>...]"
#: builtin/bundle.c:18 builtin/bundle.c:38
-#, fuzzy
msgid "git bundle unbundle <file> [<refname>...]"
-msgstr "git bundle <file> [<refname>]"
+msgstr "git bundle unbundle <fitxer> [<refname>...]"
-#: builtin/bundle.c:67 builtin/pack-objects.c:3747
+#: builtin/bundle.c:65 builtin/pack-objects.c:3876
msgid "do not show progress meter"
msgstr "no mostris l'indicador de progrés"
-#: builtin/bundle.c:69 builtin/pack-objects.c:3749
+#: builtin/bundle.c:67 builtin/bundle.c:167 builtin/pack-objects.c:3878
msgid "show progress meter"
msgstr "mostra l'indicador de progrés"
-#: builtin/bundle.c:71 builtin/pack-objects.c:3751
+#: builtin/bundle.c:69 builtin/pack-objects.c:3880
msgid "show progress meter during object writing phase"
msgstr "mostra l'indicador de progrés durant la fase d'escriptura d'objectes"
-#: builtin/bundle.c:74 builtin/pack-objects.c:3754
+#: builtin/bundle.c:72 builtin/pack-objects.c:3883
msgid "similar to --all-progress when progress meter is shown"
msgstr "similar a --all-progress quan l'indicador de progrés es mostra"
-#: builtin/bundle.c:76
-#, fuzzy
+#: builtin/bundle.c:74
msgid "specify bundle format version"
-msgstr "especifica la versió del format del paquet"
+msgstr "especifica la versió del format del farcell"
-#: builtin/bundle.c:96
+#: builtin/bundle.c:94
msgid "Need a repository to create a bundle."
-msgstr "Cal un repositori per a fer un farcell."
+msgstr "Cal un repositori per a crear un farcell."
#: builtin/bundle.c:107
-#, fuzzy
msgid "do not show bundle details"
-msgstr "no mostris els detalls del paquet"
+msgstr "no mostris els detalls del farcell"
-#: builtin/bundle.c:122
+#: builtin/bundle.c:126
#, c-format
msgid "%s is okay\n"
msgstr "%s està bé\n"
-#: builtin/bundle.c:163
+#: builtin/bundle.c:182
msgid "Need a repository to unbundle."
msgstr "Cal un repositori per a desfer un farcell."
-#: builtin/bundle.c:171 builtin/remote.c:1700
-msgid "be verbose; must be placed before a subcommand"
-msgstr "sigues detallat; s'ha de col·locar abans d'una subordre"
+#: builtin/bundle.c:185
+#, fuzzy
+msgid "Unbundling objects"
+msgstr "S'estan indexant objectes"
-#: builtin/bundle.c:193 builtin/remote.c:1731
+#: builtin/bundle.c:219 builtin/remote.c:1733
#, c-format
msgid "Unknown subcommand: %s"
msgstr "Subordre desconeguda: %s"
-#: builtin/cat-file.c:598
+#: builtin/cat-file.c:622
msgid ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <type> | --textconv | --filters) [--path=<path>] <object>"
+"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | "
+"-p | <type> | --textconv | --filters) [--path=<path>] <object>"
msgstr ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <tipus> | --textconv | --filters [--path=<camí>]) <objecte>"
+"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | "
+"-p | <tipus> | --textconv | --filters [--path=<camí>]) <objecte>"
-#: builtin/cat-file.c:599
-#, fuzzy
+#: builtin/cat-file.c:623
msgid ""
"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
"symlinks] [--textconv | --filters]"
msgstr ""
-"git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
-"filters]"
+"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
+"symlinks] [--textconv | --filters]"
-#: builtin/cat-file.c:620
-#, fuzzy
+#: builtin/cat-file.c:644
msgid "only one batch option may be specified"
msgstr "només es pot especificar una opció per lots"
-#: builtin/cat-file.c:638
+#: builtin/cat-file.c:662
msgid "<type> can be one of: blob, tree, commit, tag"
msgstr "<tipus> pot ser un de: blob, tree, commit, tag"
-#: builtin/cat-file.c:639
+#: builtin/cat-file.c:663
msgid "show object type"
msgstr "mostra el tipus de l'objecte"
-#: builtin/cat-file.c:640
+#: builtin/cat-file.c:664
msgid "show object size"
msgstr "mostra la mida de l'objecte"
-#: builtin/cat-file.c:642
+#: builtin/cat-file.c:666
msgid "exit with zero when there's no error"
msgstr "surt amb zero quan no hi ha error"
-#: builtin/cat-file.c:643
+#: builtin/cat-file.c:667
msgid "pretty-print object's content"
msgstr "imprimeix bellament el contingut de l'objecte"
-#: builtin/cat-file.c:645
+#: builtin/cat-file.c:669
msgid "for blob objects, run textconv on object's content"
-msgstr "en els objectes de blob, executa textconv en el contingut de l'objecte"
+msgstr ""
+"en els objectes de blob, executa textconv en el contingut de l'objecte"
-#: builtin/cat-file.c:647
+#: builtin/cat-file.c:671
msgid "for blob objects, run filters on object's content"
msgstr ""
"en els objectes de blob, executa els filtres en el contingut de l'objecte"
-#: builtin/cat-file.c:648
+#: builtin/cat-file.c:672
msgid "blob"
msgstr "blob"
-#: builtin/cat-file.c:649
+#: builtin/cat-file.c:673
msgid "use a specific path for --textconv/--filters"
msgstr "usa un camí específic per a --textconv/--filters"
-#: builtin/cat-file.c:651
+#: builtin/cat-file.c:675
msgid "allow -s and -t to work with broken/corrupt objects"
msgstr "permet que -s i -t funcionin amb objectes trencats/malmesos"
-#: builtin/cat-file.c:652
+#: builtin/cat-file.c:676
msgid "buffer --batch output"
msgstr "posa la sortida de --batch en memòria intermèdia"
-#: builtin/cat-file.c:654
+#: builtin/cat-file.c:678
msgid "show info and content of objects fed from the standard input"
msgstr ""
"mostra la informació i contingut dels objectes rebuts de l'entrada estàndard"
-#: builtin/cat-file.c:658
+#: builtin/cat-file.c:682
msgid "show info about objects fed from the standard input"
msgstr "mostra informació sobre els objectes rebuts de l'entrada estàndard"
-#: builtin/cat-file.c:662
+#: builtin/cat-file.c:686
msgid "follow in-tree symlinks (used with --batch or --batch-check)"
msgstr ""
-"segueix els enllaços simbòlics en l'arbre (s'usa amb --batch o --batch-check)"
+"segueix els enllaços simbòlics en l'arbre (s'usa amb --batch o --batch-"
+"check)"
-#: builtin/cat-file.c:664
+#: builtin/cat-file.c:688
msgid "show all objects with --batch or --batch-check"
msgstr "mostra tots els objectes amb --batch o --batch-check"
-#: builtin/cat-file.c:666
-#, fuzzy
+#: builtin/cat-file.c:690
msgid "do not order --batch-all-objects output"
-msgstr "no ordenar la sortida --batch-all-objects"
+msgstr "no ordenar la sortida de --batch-all-objects"
#: builtin/check-attr.c:13
msgid "git check-attr [-a | --all | <attr>...] [--] <pathname>..."
@@ -12154,7 +12456,7 @@
msgid "use .gitattributes only from the index"
msgstr "usa .gitattributes només des de l'índex"
-#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:102
+#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:100
msgid "read file names from stdin"
msgstr "llegeix els noms de fitxer de stdin"
@@ -12162,8 +12464,8 @@
msgid "terminate input and output records by a NUL character"
msgstr "acaba els registres d'entrada i de sortida amb un caràcter NUL"
-#: builtin/check-ignore.c:21 builtin/checkout.c:1520 builtin/gc.c:549
-#: builtin/worktree.c:491
+#: builtin/check-ignore.c:21 builtin/checkout.c:1513 builtin/gc.c:549
+#: builtin/worktree.c:494
msgid "suppress progress reporting"
msgstr "omet els informes de progrés"
@@ -12217,14 +12519,14 @@
msgstr "no hi ha contactes especificats"
#: builtin/checkout--worker.c:110
-#, fuzzy
msgid "git checkout--worker [<options>]"
-msgstr "git checkout [<opcions>] <branca>"
+msgstr "git checkout--worker [<opcions>]"
#: builtin/checkout--worker.c:118 builtin/checkout-index.c:201
-#: builtin/column.c:31 builtin/submodule--helper.c:1825
-#: builtin/submodule--helper.c:1828 builtin/submodule--helper.c:1836
-#: builtin/submodule--helper.c:2334 builtin/worktree.c:719
+#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1863
+#: builtin/submodule--helper.c:1866 builtin/submodule--helper.c:1874
+#: builtin/submodule--helper.c:2510 builtin/submodule--helper.c:2576
+#: builtin/worktree.c:492 builtin/worktree.c:729
msgid "string"
msgstr "cadena"
@@ -12319,121 +12621,121 @@
msgid "Unable to add merge result for '%s'"
msgstr "No s'ha pogut afegir el resultat de fusió per a «%s»"
-#: builtin/checkout.c:414
-#, fuzzy, c-format
+#: builtin/checkout.c:411
+#, c-format
msgid "Recreated %d merge conflict"
msgid_plural "Recreated %d merge conflicts"
-msgstr[0] "Conflicte de fusió recreat en un 1%"
-msgstr[1] "Conflictes de fusió recreats en un 1%"
+msgstr[0] "Recreat un conflicte de fusió"
+msgstr[1] "Recreats %d conflictes de fusió"
-#: builtin/checkout.c:419
-#, fuzzy, c-format
+#: builtin/checkout.c:416
+#, c-format
msgid "Updated %d path from %s"
msgid_plural "Updated %d paths from %s"
-msgstr[0] "Camí actualitzat d'un 1% des d'un 1%"
-msgstr[1] "Camins actualitzats a un 1% des d'un 1%"
+msgstr[0] "S'ha actualitzat %d camí des de %s"
+msgstr[1] "S'han actualitzat %d camins des de %s"
-#: builtin/checkout.c:426
+#: builtin/checkout.c:423
#, c-format
msgid "Updated %d path from the index"
msgid_plural "Updated %d paths from the index"
msgstr[0] "S'ha actualitzat un camí des de l'índex"
msgstr[1] "S'ha actualitzat %d camins des de l'índex"
-#: builtin/checkout.c:449 builtin/checkout.c:452 builtin/checkout.c:455
-#: builtin/checkout.c:459
+#: builtin/checkout.c:446 builtin/checkout.c:449 builtin/checkout.c:452
+#: builtin/checkout.c:456
#, c-format
msgid "'%s' cannot be used with updating paths"
msgstr "«%s» no es pot usar amb actualització de camins"
-#: builtin/checkout.c:462 builtin/checkout.c:465
+#: builtin/checkout.c:459 builtin/checkout.c:462
#, c-format
msgid "'%s' cannot be used with %s"
msgstr "«%s» no es pot usar amb %s"
-#: builtin/checkout.c:469
+#: builtin/checkout.c:466
#, c-format
msgid "Cannot update paths and switch to branch '%s' at the same time."
msgstr ""
"No es poden actualitzar els camins i canviar a la branca «%s» a la vegada."
-#: builtin/checkout.c:473
+#: builtin/checkout.c:470
#, c-format
msgid "neither '%s' or '%s' is specified"
msgstr "no s'ha especificat ni «%s» ni «%s»"
-#: builtin/checkout.c:477
-#, fuzzy, c-format
+#: builtin/checkout.c:474
+#, c-format
msgid "'%s' must be used when '%s' is not specified"
msgstr "«%s» s'ha d'utilitzar quan no s'especifica «%s»"
-#: builtin/checkout.c:482 builtin/checkout.c:487
+#: builtin/checkout.c:479 builtin/checkout.c:484
#, c-format
msgid "'%s' or '%s' cannot be used with %s"
msgstr "«%s» o «%s» no poden utilitzar-se amb %s"
-#: builtin/checkout.c:563 builtin/checkout.c:570
+#: builtin/checkout.c:558 builtin/checkout.c:565
#, c-format
msgid "path '%s' is unmerged"
msgstr "el camí «%s» està sense fusionar"
-#: builtin/checkout.c:739
+#: builtin/checkout.c:736
msgid "you need to resolve your current index first"
msgstr "heu de primer resoldre el vostre índex actual"
-#: builtin/checkout.c:793
-#, fuzzy, c-format
+#: builtin/checkout.c:786
+#, c-format
msgid ""
"cannot continue with staged changes in the following files:\n"
"%s"
msgstr ""
-"no es poden continuar amb els canvis «staged» als fitxers següents "
-"percentatges"
+"no es pot continuar amb els canvis «staged» als fitxers següents:\n"
+"%s"
-#: builtin/checkout.c:886
+#: builtin/checkout.c:879
#, c-format
msgid "Can not do reflog for '%s': %s\n"
msgstr "No es pot fer reflog per a «%s»: %s\n"
-#: builtin/checkout.c:928
+#: builtin/checkout.c:921
msgid "HEAD is now at"
msgstr "HEAD ara és a"
-#: builtin/checkout.c:932 builtin/clone.c:725 t/helper/test-fast-rebase.c:202
+#: builtin/checkout.c:925 builtin/clone.c:609 t/helper/test-fast-rebase.c:203
msgid "unable to update HEAD"
msgstr "no s'ha pogut actualitzar HEAD"
-#: builtin/checkout.c:936
+#: builtin/checkout.c:929
#, c-format
msgid "Reset branch '%s'\n"
msgstr "Restableix la branca «%s»\n"
-#: builtin/checkout.c:939
+#: builtin/checkout.c:932
#, c-format
msgid "Already on '%s'\n"
msgstr "Ja esteu en «%s»\n"
-#: builtin/checkout.c:943
+#: builtin/checkout.c:936
#, c-format
msgid "Switched to and reset branch '%s'\n"
msgstr "S'ha canviat i restablert a la branca «%s»\n"
-#: builtin/checkout.c:945 builtin/checkout.c:1376
+#: builtin/checkout.c:938 builtin/checkout.c:1369
#, c-format
msgid "Switched to a new branch '%s'\n"
msgstr "S'ha canviat a la branca nova «%s»\n"
-#: builtin/checkout.c:947
+#: builtin/checkout.c:940
#, c-format
msgid "Switched to branch '%s'\n"
msgstr "S'ha canviat a la branca «%s»\n"
-#: builtin/checkout.c:998
+#: builtin/checkout.c:991
#, c-format
msgid " ... and %d more.\n"
msgstr " ... i %d més.\n"
-#: builtin/checkout.c:1004
+#: builtin/checkout.c:997
#, c-format
msgid ""
"Warning: you are leaving %d commit behind, not connected to\n"
@@ -12456,7 +12758,7 @@
"\n"
"%s\n"
-#: builtin/checkout.c:1023
+#: builtin/checkout.c:1016
#, c-format
msgid ""
"If you want to keep it by creating a new branch, this may be a good time\n"
@@ -12483,19 +12785,19 @@
" git branch <nom-de-branca-nova> %s\n"
"\n"
-#: builtin/checkout.c:1058
+#: builtin/checkout.c:1051
msgid "internal error in revision walk"
msgstr "error intern en el passeig per revisions"
-#: builtin/checkout.c:1062
+#: builtin/checkout.c:1055
msgid "Previous HEAD position was"
msgstr "La posició de HEAD anterior era"
-#: builtin/checkout.c:1102 builtin/checkout.c:1371
+#: builtin/checkout.c:1095 builtin/checkout.c:1364
msgid "You are on a branch yet to be born"
msgstr "Sou en una branca que encara ha de néixer"
-#: builtin/checkout.c:1184
+#: builtin/checkout.c:1177
#, fuzzy, c-format
msgid ""
"'%s' could be both a local file and a tracking branch.\n"
@@ -12504,7 +12806,7 @@
"\"%s\" podria ser tant un fitxer local com una branca de seguiment. Si us "
"plau useu -- (i opcionalment --no-gues) per a desambiguar"
-#: builtin/checkout.c:1191
+#: builtin/checkout.c:1184
#, fuzzy
msgid ""
"If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
@@ -12517,83 +12819,82 @@
"checkout.defaultRemote=origin in your config."
msgstr ""
"Si voleu comprovar una branca de seguiment remota p. ex. «origen» podeu fer-"
-"ho classificant completament el nom amb l'opció --track git checkout --track "
-"origin/<name> Si voleu tenir sempre agafades d'un ambigu <name> preferiu un "
-"remot p. ex. el paràmetre remot 'origin' considereu agafar."
-"defaultRemote=origin a la vostra configuració."
+"ho classificant completament el nom amb l'opció --track git checkout --track"
+" origin/<name> Si voleu tenir sempre agafades d'un ambigu <name> preferiu un"
+" remot p. ex. el paràmetre remot 'origin' considereu "
+"agafar.defaultRemote=origin a la vostra configuració."
-#: builtin/checkout.c:1201
+#: builtin/checkout.c:1194
#, c-format
msgid "'%s' matched multiple (%d) remote tracking branches"
msgstr "«%s» coincideixen múltiples (%d) branques de seguiment remotes"
-#: builtin/checkout.c:1267
+#: builtin/checkout.c:1260
msgid "only one reference expected"
msgstr "només s'esperava una referència"
-#: builtin/checkout.c:1284
+#: builtin/checkout.c:1277
#, c-format
msgid "only one reference expected, %d given."
msgstr "s'esperava només una referència, s'han donat %d."
-#: builtin/checkout.c:1330 builtin/worktree.c:270 builtin/worktree.c:438
+#: builtin/checkout.c:1323 builtin/worktree.c:269 builtin/worktree.c:437
#, c-format
msgid "invalid reference: %s"
msgstr "referència no vàlida: %s"
-#: builtin/checkout.c:1343 builtin/checkout.c:1709
+#: builtin/checkout.c:1336 builtin/checkout.c:1705
#, c-format
msgid "reference is not a tree: %s"
msgstr "la referència no és un arbre: %s"
-#: builtin/checkout.c:1390
+#: builtin/checkout.c:1383
#, c-format
msgid "a branch is expected, got tag '%s'"
msgstr "s'espera una branca, s'ha obtingut l'etiqueta «%s»"
-#: builtin/checkout.c:1392
+#: builtin/checkout.c:1385
#, c-format
msgid "a branch is expected, got remote branch '%s'"
msgstr "s'espera una branca, s'ha obtingut la branca remota «%s»"
-#: builtin/checkout.c:1393 builtin/checkout.c:1401
+#: builtin/checkout.c:1386 builtin/checkout.c:1394
#, c-format
msgid "a branch is expected, got '%s'"
msgstr "s'espera una branca, s'ha obtingut «%s»"
-#: builtin/checkout.c:1396
+#: builtin/checkout.c:1389
#, c-format
msgid "a branch is expected, got commit '%s'"
msgstr "s'espera una branca, s'ha obtingut la comissió «%s»"
-#: builtin/checkout.c:1412
-#, fuzzy
+#: builtin/checkout.c:1405
msgid ""
"cannot switch branch while merging\n"
"Consider \"git merge --quit\" or \"git worktree add\"."
msgstr ""
-"no es pot canviar de branca mentre es fusiona «git merge --quit» o «git "
-"worktree add»."
+"no es pot canviar de branca mentre es fusiona\n"
+"Considereu usar «git merge --quit» o «git worktree add»."
-#: builtin/checkout.c:1416
+#: builtin/checkout.c:1409
#, fuzzy
msgid ""
"cannot switch branch in the middle of an am session\n"
"Consider \"git am --quit\" or \"git worktree add\"."
msgstr ""
-"no es pot canviar de branca al mig d'una sessió am Considereu \"git am --quit"
-"\" o \"git worktree add\"."
+"no es pot canviar de branca al mig d'una sessió am Considereu \"git am "
+"--quit\" o \"git worktree add\"."
-#: builtin/checkout.c:1420
+#: builtin/checkout.c:1413
#, fuzzy
msgid ""
"cannot switch branch while rebasing\n"
"Consider \"git rebase --quit\" or \"git worktree add\"."
msgstr ""
-"no es pot canviar de branca mentre es rebase considera «git rebase --quit» o "
-"«git worktree add»."
+"no es pot canviar de branca mentre es rebase considera «git rebase --quit» o"
+" «git worktree add»."
-#: builtin/checkout.c:1424
+#: builtin/checkout.c:1417
#, fuzzy
msgid ""
"cannot switch branch while cherry-picking\n"
@@ -12602,7 +12903,7 @@
"no es pot canviar de branca mentre «cherry pick» considera «git cherry-pick "
"--quit» o «git worktree add»."
-#: builtin/checkout.c:1428
+#: builtin/checkout.c:1421
msgid ""
"cannot switch branch while reverting\n"
"Consider \"git revert --quit\" or \"git worktree add\"."
@@ -12610,140 +12911,140 @@
"no es pot canviar de branca mentre s'està revertint\n"
"Considereu «git revert --quit» o «git worktree add»."
-#: builtin/checkout.c:1432
+#: builtin/checkout.c:1425
#, fuzzy
msgid "you are switching branch while bisecting"
msgstr "s'està canviant la branca mentre es bisect"
-#: builtin/checkout.c:1439
+#: builtin/checkout.c:1432
msgid "paths cannot be used with switching branches"
msgstr "els camins no es poden usar amb canvi de branca"
-#: builtin/checkout.c:1442 builtin/checkout.c:1446 builtin/checkout.c:1450
+#: builtin/checkout.c:1435 builtin/checkout.c:1439 builtin/checkout.c:1443
#, c-format
msgid "'%s' cannot be used with switching branches"
msgstr "«%s» no es pot usar amb canvi de branca"
-#: builtin/checkout.c:1454 builtin/checkout.c:1457 builtin/checkout.c:1460
-#: builtin/checkout.c:1465 builtin/checkout.c:1470
+#: builtin/checkout.c:1447 builtin/checkout.c:1450 builtin/checkout.c:1453
+#: builtin/checkout.c:1458 builtin/checkout.c:1463
#, c-format
msgid "'%s' cannot be used with '%s'"
msgstr "«%s» no es pot usar amb «%s»"
-#: builtin/checkout.c:1467
+#: builtin/checkout.c:1460
#, c-format
msgid "'%s' cannot take <start-point>"
msgstr "«%s» no pot prendre <start-point>"
-#: builtin/checkout.c:1475
+#: builtin/checkout.c:1468
#, c-format
msgid "Cannot switch branch to a non-commit '%s'"
msgstr "No es pot canviar la branca a la no comissió «%s»"
-#: builtin/checkout.c:1482
+#: builtin/checkout.c:1475
msgid "missing branch or commit argument"
msgstr "manca branca o argument de comissió"
-#: builtin/checkout.c:1525
+#: builtin/checkout.c:1518
msgid "perform a 3-way merge with the new branch"
msgstr "realitza una fusió de 3 vies amb la branca nova"
-#: builtin/checkout.c:1526 builtin/log.c:1807 parse-options.h:323
+#: builtin/checkout.c:1519 builtin/log.c:1810 parse-options.h:322
msgid "style"
msgstr "estil"
-#: builtin/checkout.c:1527
+#: builtin/checkout.c:1520
msgid "conflict style (merge or diff3)"
msgstr "estil de conflicte (fusió o diff3)"
-#: builtin/checkout.c:1539 builtin/worktree.c:488
+#: builtin/checkout.c:1532 builtin/worktree.c:489
msgid "detach HEAD at named commit"
msgstr "separa HEAD a la comissió anomenada"
-#: builtin/checkout.c:1540
+#: builtin/checkout.c:1533
msgid "set upstream info for new branch"
msgstr "estableix la informació de font de la branca nova"
-#: builtin/checkout.c:1542
+#: builtin/checkout.c:1535
msgid "force checkout (throw away local modifications)"
msgstr "agafa a la força (descarta qualsevol modificació local)"
-#: builtin/checkout.c:1544
+#: builtin/checkout.c:1537
msgid "new-branch"
msgstr "branca-nova"
-#: builtin/checkout.c:1544
+#: builtin/checkout.c:1537
msgid "new unparented branch"
msgstr "branca òrfena nova"
-#: builtin/checkout.c:1546 builtin/merge.c:301
+#: builtin/checkout.c:1539 builtin/merge.c:302
msgid "update ignored files (default)"
msgstr "actualitza els fitxers ignorats (per defecte)"
-#: builtin/checkout.c:1549
+#: builtin/checkout.c:1542
msgid "do not check if another worktree is holding the given ref"
msgstr "no comprovis si altre arbre de treball té la referència donada"
-#: builtin/checkout.c:1562
+#: builtin/checkout.c:1555
msgid "checkout our version for unmerged files"
msgstr "agafa la versió nostra dels fitxers sense fusionar"
-#: builtin/checkout.c:1565
+#: builtin/checkout.c:1558
msgid "checkout their version for unmerged files"
msgstr "agafa la versió seva dels fitxers sense fusionar"
-#: builtin/checkout.c:1569
+#: builtin/checkout.c:1562
msgid "do not limit pathspecs to sparse entries only"
msgstr "no limitis les especificacions de camí només a entrades disperses"
-#: builtin/checkout.c:1624
+#: builtin/checkout.c:1620
#, c-format
msgid "-%c, -%c and --orphan are mutually exclusive"
msgstr "-%c, -%c i --orphan són mútuament excloents"
-#: builtin/checkout.c:1628
+#: builtin/checkout.c:1624
msgid "-p and --overlay are mutually exclusive"
msgstr "-p i --overlay són mútuament excloents"
-#: builtin/checkout.c:1665
+#: builtin/checkout.c:1661
msgid "--track needs a branch name"
msgstr "--track necessita un nom de branca"
-#: builtin/checkout.c:1670
+#: builtin/checkout.c:1666
#, c-format
msgid "missing branch name; try -%c"
msgstr "falta el nom de la branca; proveu -%c"
-#: builtin/checkout.c:1702
+#: builtin/checkout.c:1698
#, c-format
msgid "could not resolve %s"
msgstr "no es pot resoldre %s"
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1714
msgid "invalid path specification"
msgstr "especificació de camí no vàlida"
-#: builtin/checkout.c:1725
+#: builtin/checkout.c:1721
#, c-format
msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
msgstr ""
"«%s» no és una comissió i la branca «%s» no es pot crear a partir d'aquesta "
"comissió"
-#: builtin/checkout.c:1729
+#: builtin/checkout.c:1725
#, c-format
msgid "git checkout: --detach does not take a path argument '%s'"
msgstr "git checkout: --detach no accepta un argument de camí «%s»"
-#: builtin/checkout.c:1738
+#: builtin/checkout.c:1734
msgid "--pathspec-from-file is incompatible with --detach"
msgstr "--pathspec-from-file és incompatible amb --detach"
-#: builtin/checkout.c:1741 builtin/reset.c:325 builtin/stash.c:1634
+#: builtin/checkout.c:1737 builtin/reset.c:331 builtin/stash.c:1647
msgid "--pathspec-from-file is incompatible with --patch"
msgstr "--pathspec-from-file és incompatible amb --patch"
-#: builtin/checkout.c:1754
+#: builtin/checkout.c:1750
msgid ""
"git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
"checking out of the index."
@@ -12751,73 +13052,74 @@
"git checkout: --ours/--theirs, --force i --merge són incompatibles en\n"
"agafar de l'índex."
-#: builtin/checkout.c:1759
+#: builtin/checkout.c:1755
msgid "you must specify path(s) to restore"
msgstr "heu d'especificar el camí o camins a restaurar"
-#: builtin/checkout.c:1785 builtin/checkout.c:1787 builtin/checkout.c:1836
-#: builtin/checkout.c:1838 builtin/clone.c:126 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2720 builtin/worktree.c:484
-#: builtin/worktree.c:486
+#: builtin/checkout.c:1781 builtin/checkout.c:1783 builtin/checkout.c:1832
+#: builtin/checkout.c:1834 builtin/clone.c:126 builtin/remote.c:170
+#: builtin/remote.c:172 builtin/submodule--helper.c:2958
+#: builtin/submodule--helper.c:3252 builtin/worktree.c:485
+#: builtin/worktree.c:487
msgid "branch"
msgstr "branca"
-#: builtin/checkout.c:1786
+#: builtin/checkout.c:1782
msgid "create and checkout a new branch"
msgstr "crea i agafa una branca nova"
-#: builtin/checkout.c:1788
+#: builtin/checkout.c:1784
msgid "create/reset and checkout a branch"
msgstr "crea/restableix i agafa una branca"
-#: builtin/checkout.c:1789
+#: builtin/checkout.c:1785
msgid "create reflog for new branch"
msgstr "crea un registre de referència per a la branca nova"
-#: builtin/checkout.c:1791
+#: builtin/checkout.c:1787
#, fuzzy
msgid "second guess 'git checkout <no-such-branch>' (default)"
msgstr "segon conjectura «git checkout <no-such-branch>» (per defecte)"
-#: builtin/checkout.c:1792
+#: builtin/checkout.c:1788
msgid "use overlay mode (default)"
msgstr "utilitza el mode de superposició (per defecte)"
-#: builtin/checkout.c:1837
+#: builtin/checkout.c:1833
msgid "create and switch to a new branch"
msgstr "crea i canvia a una branca nova"
-#: builtin/checkout.c:1839
+#: builtin/checkout.c:1835
msgid "create/reset and switch to a branch"
msgstr "crea/restableix i canvia a una branca"
-#: builtin/checkout.c:1841
+#: builtin/checkout.c:1837
#, fuzzy
msgid "second guess 'git switch <no-such-branch>'"
msgstr "segon conjectura «git switch <no-such-branch>»"
-#: builtin/checkout.c:1843
+#: builtin/checkout.c:1839
msgid "throw away local modifications"
msgstr "descarta les modificacions locals"
-#: builtin/checkout.c:1877
+#: builtin/checkout.c:1873
#, fuzzy
msgid "which tree-ish to checkout from"
msgstr "de quin arbre agafar"
-#: builtin/checkout.c:1879
+#: builtin/checkout.c:1875
msgid "restore the index"
msgstr "restaura l'índex"
-#: builtin/checkout.c:1881
+#: builtin/checkout.c:1877
msgid "restore the working tree (default)"
msgstr "restaura l'arbre de treball (per defecte)"
-#: builtin/checkout.c:1883
+#: builtin/checkout.c:1879
msgid "ignore unmerged entries"
msgstr "ignora les entrades sense fusionar"
-#: builtin/checkout.c:1884
+#: builtin/checkout.c:1880
msgid "use overlay mode"
msgstr "utilitza el mode de superposició"
@@ -12852,7 +13154,7 @@
msgid "could not lstat %s\n"
msgstr "no s'ha pogut fer lstat %s\n"
-#: builtin/clean.c:302 git-add--interactive.perl:593
+#: builtin/clean.c:300 git-add--interactive.perl:593
#, c-format
msgid ""
"Prompt help:\n"
@@ -12865,7 +13167,7 @@
"foo - selecciona un ítem basat en un prefix únic\n"
" - (buit) no seleccionis res\n"
-#: builtin/clean.c:306 git-add--interactive.perl:602
+#: builtin/clean.c:304 git-add--interactive.perl:602
#, c-format
msgid ""
"Prompt help:\n"
@@ -12886,33 +13188,33 @@
"* - tria tots els ítems\n"
" - (buit) finalitza la selecció\n"
-#: builtin/clean.c:521 git-add--interactive.perl:568
+#: builtin/clean.c:519 git-add--interactive.perl:568
#: git-add--interactive.perl:573
#, c-format, perl-format
msgid "Huh (%s)?\n"
msgstr "Perdó (%s)?\n"
-#: builtin/clean.c:661
+#: builtin/clean.c:659
#, c-format
msgid "Input ignore patterns>> "
msgstr "Introduïu els patrons a ignorar>> "
-#: builtin/clean.c:696
+#: builtin/clean.c:693
#, c-format
msgid "WARNING: Cannot find items matched by: %s"
msgstr "ADVERTÈNCIA: No es poden trobar ítems que coincideixin amb: %s"
-#: builtin/clean.c:717
+#: builtin/clean.c:714
msgid "Select items to delete"
msgstr "Selecciona els ítems a suprimir"
#. TRANSLATORS: Make sure to keep [y/N] as is
-#: builtin/clean.c:758
+#: builtin/clean.c:755
#, c-format
msgid "Remove %s [y/N]? "
msgstr "Voleu eliminar %s [y/N]? "
-#: builtin/clean.c:789
+#: builtin/clean.c:786
msgid ""
"clean - start cleaning\n"
"filter by pattern - exclude items from deletion\n"
@@ -12930,60 +13232,60 @@
"help - aquesta pantalla\n"
"? - ajuda de selecció de l'avís"
-#: builtin/clean.c:825
+#: builtin/clean.c:822
msgid "Would remove the following item:"
msgid_plural "Would remove the following items:"
msgstr[0] "Eliminaria l'ítem següent:"
msgstr[1] "Eliminaria els ítems següents:"
-#: builtin/clean.c:841
+#: builtin/clean.c:838
msgid "No more files to clean, exiting."
msgstr "No hi ha més fitxers a netejar; s'està sortint."
-#: builtin/clean.c:903
+#: builtin/clean.c:900
msgid "do not print names of files removed"
msgstr "no imprimeixis els noms dels fitxers eliminats"
-#: builtin/clean.c:905
+#: builtin/clean.c:902
msgid "force"
msgstr "força"
-#: builtin/clean.c:906
+#: builtin/clean.c:903
msgid "interactive cleaning"
msgstr "neteja interactiva"
-#: builtin/clean.c:908
+#: builtin/clean.c:905
msgid "remove whole directories"
msgstr "elimina directoris sencers"
-#: builtin/clean.c:909 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:924 builtin/log.c:184 builtin/log.c:186
-#: builtin/ls-files.c:650 builtin/name-rev.c:526 builtin/name-rev.c:528
+#: builtin/clean.c:906 builtin/describe.c:565 builtin/describe.c:567
+#: builtin/grep.c:937 builtin/log.c:184 builtin/log.c:186
+#: builtin/ls-files.c:648 builtin/name-rev.c:526 builtin/name-rev.c:528
#: builtin/show-ref.c:179
msgid "pattern"
msgstr "patró"
-#: builtin/clean.c:910
+#: builtin/clean.c:907
msgid "add <pattern> to ignore rules"
msgstr "afegiu <patró> per a ignorar les regles"
-#: builtin/clean.c:911
+#: builtin/clean.c:908
msgid "remove ignored files, too"
msgstr "elimina els fitxers ignorats, també"
-#: builtin/clean.c:913
+#: builtin/clean.c:910
msgid "remove only ignored files"
msgstr "elimina només els fitxers ignorats"
-#: builtin/clean.c:929
+#: builtin/clean.c:925
msgid ""
-"clean.requireForce set to true and neither -i, -n, nor -f given; refusing to "
-"clean"
+"clean.requireForce set to true and neither -i, -n, nor -f given; refusing to"
+" clean"
msgstr ""
"clean.requireForce està establerta en cert i ni -i, -n ni -f s'han indicat; "
"refusant netejar"
-#: builtin/clean.c:932
+#: builtin/clean.c:928
msgid ""
"clean.requireForce defaults to true and neither -i, -n, nor -f given; "
"refusing to clean"
@@ -12991,7 +13293,7 @@
"clean.requireForce és per defecte cert i ni -i, -n ni -f s'han indicat; "
"refusant netejar"
-#: builtin/clean.c:944
+#: builtin/clean.c:940
msgid "-x and -X cannot be used together"
msgstr "-x i -X no es poden usar junts"
@@ -13008,7 +13310,7 @@
msgid "don't create a checkout"
msgstr "no facis cap agafament"
-#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:541
+#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:542
msgid "create a bare repository"
msgstr "crea un repositori nu"
@@ -13040,27 +13342,28 @@
msgid "number of submodules cloned in parallel"
msgstr "nombre de submòduls clonats en paral·lel"
-#: builtin/clone.c:116 builtin/init-db.c:538
+#: builtin/clone.c:116 builtin/init-db.c:539
msgid "template-directory"
msgstr "directori-de-plantilla"
-#: builtin/clone.c:117 builtin/init-db.c:539
+#: builtin/clone.c:117 builtin/init-db.c:540
msgid "directory from which templates will be used"
msgstr "directori des del qual s'usaran les plantilles"
-#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1832
-#: builtin/submodule--helper.c:2337
+#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1870
+#: builtin/submodule--helper.c:2513 builtin/submodule--helper.c:3259
msgid "reference repository"
msgstr "repositori de referència"
-#: builtin/clone.c:123 builtin/submodule--helper.c:1834
-#: builtin/submodule--helper.c:2339
+#: builtin/clone.c:123 builtin/submodule--helper.c:1872
+#: builtin/submodule--helper.c:2515
msgid "use --reference only while cloning"
msgstr "usa --reference només en clonar"
-#: builtin/clone.c:124 builtin/column.c:27 builtin/init-db.c:549
-#: builtin/merge-file.c:46 builtin/pack-objects.c:3815 builtin/repack.c:495
-#: t/helper/test-simple-ipc.c:696 t/helper/test-simple-ipc.c:698
+#: builtin/clone.c:124 builtin/column.c:27 builtin/init-db.c:550
+#: builtin/merge-file.c:46 builtin/pack-objects.c:3944 builtin/repack.c:663
+#: builtin/submodule--helper.c:3261 t/helper/test-simple-ipc.c:595
+#: t/helper/test-simple-ipc.c:597
msgid "name"
msgstr "nom"
@@ -13076,7 +13379,7 @@
msgid "path to git-upload-pack on the remote"
msgstr "camí a git-upload-pack en el remot"
-#: builtin/clone.c:130 builtin/fetch.c:180 builtin/grep.c:863
+#: builtin/clone.c:130 builtin/fetch.c:180 builtin/grep.c:876
#: builtin/pull.c:208
msgid "depth"
msgstr "profunditat"
@@ -13085,17 +13388,17 @@
msgid "create a shallow clone of that depth"
msgstr "crea un clon superficial de tal profunditat"
-#: builtin/clone.c:132 builtin/fetch.c:182 builtin/pack-objects.c:3804
+#: builtin/clone.c:132 builtin/fetch.c:182 builtin/pack-objects.c:3933
#: builtin/pull.c:211
msgid "time"
-msgstr "hora"
+msgstr "data"
#: builtin/clone.c:133
msgid "create a shallow clone since a specific time"
-msgstr "crea un clon superficial des d'una hora específica"
+msgstr "crea un clon superficial des d'una data específica"
#: builtin/clone.c:134 builtin/fetch.c:184 builtin/fetch.c:207
-#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1318
+#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1022
msgid "revision"
msgstr "revisió"
@@ -13103,8 +13406,8 @@
msgid "deepen history of shallow clone, excluding rev"
msgstr "aprofundeix la història d'un clon superficial, excloent una revisió"
-#: builtin/clone.c:137 builtin/submodule--helper.c:1844
-#: builtin/submodule--helper.c:2353
+#: builtin/clone.c:137 builtin/submodule--helper.c:1882
+#: builtin/submodule--helper.c:2529
msgid "clone only one branch, HEAD or --branch"
msgstr "clona només una branca, HEAD o --branch"
@@ -13117,11 +13420,11 @@
msgid "any cloned submodules will be shallow"
msgstr "qualsevol submòdul clonat serà superficial"
-#: builtin/clone.c:142 builtin/init-db.c:547
+#: builtin/clone.c:142 builtin/init-db.c:548
msgid "gitdir"
msgstr "directori de git"
-#: builtin/clone.c:143 builtin/init-db.c:548
+#: builtin/clone.c:143 builtin/init-db.c:549
msgid "separate git dir from working tree"
msgstr "separa el directori de git de l'arbre de treball"
@@ -13134,28 +13437,29 @@
msgstr "estableix la configuració dins del repositori nou"
#: builtin/clone.c:147 builtin/fetch.c:202 builtin/ls-remote.c:77
-#: builtin/pull.c:230 builtin/push.c:584 builtin/send-pack.c:196
+#: builtin/pull.c:230 builtin/push.c:575 builtin/send-pack.c:200
msgid "server-specific"
msgstr "específic al servidor"
#: builtin/clone.c:147 builtin/fetch.c:202 builtin/ls-remote.c:77
-#: builtin/pull.c:231 builtin/push.c:584 builtin/send-pack.c:197
+#: builtin/pull.c:231 builtin/push.c:575 builtin/send-pack.c:201
msgid "option to transmit"
msgstr "opció a transmetre"
#: builtin/clone.c:148 builtin/fetch.c:203 builtin/pull.c:234
-#: builtin/push.c:585
+#: builtin/push.c:576
msgid "use IPv4 addresses only"
msgstr "usa només adreces IPv4"
#: builtin/clone.c:150 builtin/fetch.c:205 builtin/pull.c:237
-#: builtin/push.c:587
+#: builtin/push.c:578
msgid "use IPv6 addresses only"
msgstr "usa només adreces IPv6"
#: builtin/clone.c:154
msgid "any cloned submodules will use their remote-tracking branch"
-msgstr "qualsevol submòdul clonat utilitzarà la seva branca de seguiment remot"
+msgstr ""
+"qualsevol submòdul clonat utilitzarà la seva branca de seguiment remot"
#: builtin/clone.c:156
msgid "initialize sparse-checkout file to include only files at root"
@@ -13163,50 +13467,42 @@
"inicialitza el fitxer «sparse-checkout» per a incloure només els fitxers a "
"l'arrel"
-#: builtin/clone.c:292
-msgid ""
-"No directory name could be guessed.\n"
-"Please specify a directory on the command line"
-msgstr ""
-"No s'ha pogut endevinar cap nom de directori.\n"
-"Especifiqueu un directori en la línia d'ordres"
-
-#: builtin/clone.c:345
+#: builtin/clone.c:231
#, c-format
msgid "info: Could not add alternate for '%s': %s\n"
msgstr "info: No s'ha pogut afegir un alternatiu per a «%s»: %s\n"
-#: builtin/clone.c:418
+#: builtin/clone.c:304
#, c-format
msgid "%s exists and is not a directory"
msgstr "%s existeix i no és directori"
-#: builtin/clone.c:436
+#: builtin/clone.c:322
#, fuzzy, c-format
msgid "failed to start iterator over '%s'"
msgstr "no s'ha pogut iniciar l'iterador per sobre de «%s»"
-#: builtin/clone.c:467
+#: builtin/clone.c:353
#, c-format
msgid "failed to create link '%s'"
msgstr "s'ha produït un error en crear l'enllaç «%s»"
-#: builtin/clone.c:471
+#: builtin/clone.c:357
#, c-format
msgid "failed to copy file to '%s'"
msgstr "s'ha produït un error en copiar el fitxer a «%s»"
-#: builtin/clone.c:476
+#: builtin/clone.c:362
#, c-format
msgid "failed to iterate over '%s'"
msgstr "no s'ha pogut iterar sobre «%s»"
-#: builtin/clone.c:503
+#: builtin/clone.c:389
#, c-format
msgid "done.\n"
msgstr "fet.\n"
-#: builtin/clone.c:517
+#: builtin/clone.c:403
#, fuzzy
msgid ""
"Clone succeeded, but checkout failed.\n"
@@ -13214,153 +13510,157 @@
"and retry with 'git restore --source=HEAD :/'\n"
msgstr ""
"El clonatge ha tingut èxit però ha fallat. Podeu inspeccionar el que s'ha "
-"comprovat amb «git status» i tornar-ho a provar amb «git restore --"
-"source=HEAD /»"
+"comprovat amb «git status» i tornar-ho a provar amb «git restore "
+"--source=HEAD /»"
-#: builtin/clone.c:594
+#: builtin/clone.c:480
#, c-format
msgid "Could not find remote branch %s to clone."
msgstr "No s'ha pogut trobar la branca remota %s per a clonar."
-#: builtin/clone.c:713
+#: builtin/clone.c:597
#, c-format
msgid "unable to update %s"
msgstr "no s'ha pogut actualitzar %s"
-#: builtin/clone.c:761
+#: builtin/clone.c:645
msgid "failed to initialize sparse-checkout"
msgstr "no s'ha pogut inicialitzar «sparse-checkout»"
-#: builtin/clone.c:784
+#: builtin/clone.c:668
msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
msgstr ""
"la HEAD remot es refereix a una referència que no existeix; no s'ha pogut "
"agafar.\n"
-#: builtin/clone.c:816
+#: builtin/clone.c:701
msgid "unable to checkout working tree"
msgstr "no s'ha pogut agafar l'arbre de treball"
-#: builtin/clone.c:894
+#: builtin/clone.c:779
msgid "unable to write parameters to config file"
msgstr "no s'han pogut escriure els paràmetres al fitxer de configuració"
-#: builtin/clone.c:957
+#: builtin/clone.c:842
msgid "cannot repack to clean up"
msgstr "no es pot reempaquetar per a netejar"
-#: builtin/clone.c:959
+#: builtin/clone.c:844
msgid "cannot unlink temporary alternates file"
msgstr "no es pot desenllaçar el fitxer d'alternatives temporal"
-#: builtin/clone.c:1001 builtin/receive-pack.c:2491
+#: builtin/clone.c:886 builtin/receive-pack.c:2493
msgid "Too many arguments."
msgstr "Hi ha massa arguments."
-#: builtin/clone.c:1005
+#: builtin/clone.c:890
msgid "You must specify a repository to clone."
msgstr "Heu d'especificar un repositori per a clonar."
-#: builtin/clone.c:1018
+#: builtin/clone.c:903
#, c-format
msgid "--bare and --origin %s options are incompatible."
msgstr "les opcions --bare i --origin %s són incompatibles."
-#: builtin/clone.c:1021
+#: builtin/clone.c:906
msgid "--bare and --separate-git-dir are incompatible."
msgstr "--bare i --separate-git-dir són incompatibles."
-#: builtin/clone.c:1035
+#: builtin/clone.c:920
#, c-format
msgid "repository '%s' does not exist"
msgstr "el repositori «%s» no existeix"
-#: builtin/clone.c:1039 builtin/fetch.c:2011
+#: builtin/clone.c:924 builtin/fetch.c:2029
#, c-format
msgid "depth %s is not a positive number"
msgstr "la profunditat %s no és un nombre positiu"
-#: builtin/clone.c:1049
+#: builtin/clone.c:934
#, c-format
msgid "destination path '%s' already exists and is not an empty directory."
msgstr "el camí destí «%s» ja existeix i no és un directori buit."
-#: builtin/clone.c:1055
+#: builtin/clone.c:940
#, c-format
msgid "repository path '%s' already exists and is not an empty directory."
msgstr "el camí destí «%s» ja existeix i no és un directori buit."
-#: builtin/clone.c:1069
+#: builtin/clone.c:954
#, c-format
msgid "working tree '%s' already exists."
msgstr "l'arbre de treball «%s» ja existeix."
-#: builtin/clone.c:1084 builtin/clone.c:1105 builtin/difftool.c:272
-#: builtin/log.c:1995 builtin/worktree.c:282 builtin/worktree.c:314
+#: builtin/clone.c:969 builtin/clone.c:990 builtin/difftool.c:262
+#: builtin/log.c:1997 builtin/worktree.c:281 builtin/worktree.c:313
#, c-format
msgid "could not create leading directories of '%s'"
msgstr "no s'han pogut crear els directoris inicials de «%s»"
-#: builtin/clone.c:1089
+#: builtin/clone.c:974
#, c-format
msgid "could not create work tree dir '%s'"
msgstr "no s'ha pogut crear el directori d'arbre de treball «%s»"
-#: builtin/clone.c:1109
+#: builtin/clone.c:994
#, c-format
msgid "Cloning into bare repository '%s'...\n"
msgstr "S'està clonant al repositori nu «%s»...\n"
-#: builtin/clone.c:1111
+#: builtin/clone.c:996
#, c-format
msgid "Cloning into '%s'...\n"
msgstr "S'està clonant a «%s»...\n"
-#: builtin/clone.c:1135
+#: builtin/clone.c:1025
msgid ""
-"clone --recursive is not compatible with both --reference and --reference-if-"
-"able"
+"clone --recursive is not compatible with both --reference and --reference-"
+"if-able"
msgstr ""
"clone --recursive no és compatible amb ambdós --reference i --reference-if-"
"able"
-#: builtin/clone.c:1188 builtin/remote.c:200 builtin/remote.c:705
+#: builtin/clone.c:1080 builtin/remote.c:200 builtin/remote.c:710
#, c-format
msgid "'%s' is not a valid remote name"
msgstr "«%s» no és un nom de remot vàlid"
-#: builtin/clone.c:1229
+#: builtin/clone.c:1121
msgid "--depth is ignored in local clones; use file:// instead."
msgstr "--depth s'ignora en els clons locals; useu file:// en lloc d'això."
-#: builtin/clone.c:1231
+#: builtin/clone.c:1123
msgid "--shallow-since is ignored in local clones; use file:// instead."
msgstr ""
"--shallow-since s'ignora en els clons locals; useu file:// en lloc d'això."
-#: builtin/clone.c:1233
+#: builtin/clone.c:1125
msgid "--shallow-exclude is ignored in local clones; use file:// instead."
msgstr ""
"--shallow-exclude s'ignora en els clons locals; useu file:// en lloc d'això."
-#: builtin/clone.c:1235
+#: builtin/clone.c:1127
msgid "--filter is ignored in local clones; use file:// instead."
msgstr "--filter s'ignora en els clons locals; useu file:// en lloc d'això."
-#: builtin/clone.c:1240
+#: builtin/clone.c:1132
msgid "source repository is shallow, ignoring --local"
msgstr "el repositori font és superficial, s'està ignorant --local"
-#: builtin/clone.c:1245
+#: builtin/clone.c:1137
msgid "--local is ignored"
msgstr "--local s'ignora"
-#: builtin/clone.c:1337 builtin/clone.c:1345
+#: builtin/clone.c:1216 builtin/clone.c:1276
+msgid "remote transport reported error"
+msgstr "el transport remot ha informat d'un error"
+
+#: builtin/clone.c:1228 builtin/clone.c:1239
#, c-format
msgid "Remote branch %s not found in upstream %s"
msgstr "La branca remota %s no es troba en la font %s"
-#: builtin/clone.c:1348
+#: builtin/clone.c:1242
msgid "You appear to have cloned an empty repository."
msgstr "Sembla que heu clonat un repositori buit."
@@ -13377,141 +13677,138 @@
msgstr "disposició a usar"
#: builtin/column.c:30
-#, fuzzy
msgid "maximum width"
-msgstr "Amplada màxima"
+msgstr "amplada màxima"
#: builtin/column.c:31
-#, fuzzy
msgid "padding space on left border"
-msgstr "Espai d'encoixinada en el marge esquerre"
+msgstr "espai de farciment al marge esquerre"
#: builtin/column.c:32
-#, fuzzy
msgid "padding space on right border"
-msgstr "Espai d'encoixinada en el marge dret"
+msgstr "espai de farciment al marge dret"
#: builtin/column.c:33
-#, fuzzy
msgid "padding space between columns"
-msgstr "Espai d'encoixinada entre columnes"
+msgstr "espai de farciment entre columnes"
#: builtin/column.c:51
msgid "--command must be the first argument"
msgstr "--command ha de ser el primer argument"
-#: builtin/commit-graph.c:13 builtin/commit-graph.c:22
+#: builtin/commit-graph.c:13
msgid ""
-"git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
+"git commit-graph verify [--object-dir <objdir>] [--shallow] "
+"[--[no-]progress]"
msgstr ""
-"git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
+"git commit-graph verify [--object-dir <objdir>] [--shallow] "
+"[--[no-]progress]"
-#: builtin/commit-graph.c:14 builtin/commit-graph.c:27
+#: builtin/commit-graph.c:16
msgid ""
-"git commit-graph write [--object-dir <objdir>] [--append] [--"
-"split[=<strategy>]] [--reachable|--stdin-packs|--stdin-commits] [--changed-"
-"paths] [--[no-]max-new-filters <n>] [--[no-]progress] <split options>"
+"git commit-graph write [--object-dir <objdir>] [--append] "
+"[--split[=<strategy>]] [--reachable|--stdin-packs|--stdin-commits] "
+"[--changed-paths] [--[no-]max-new-filters <n>] [--[no-]progress] <split "
+"options>"
msgstr ""
-"git commit-graph write [--object-dir <objdir>] [--append] [--"
-"split[=<strategy>]] [--reachable|--stdin-packs|--stdin-commits] [--changed-"
-"paths] [--[no-]max-new-filters <n>] [--[no-]progress] <split options>"
+"git commit-graph write [--object-dir <objdir>] [--append] "
+"[--split[=<strategy>]] [--reachable|--stdin-packs|--stdin-commits] "
+"[--changed-paths] [--[no-]max-new-filters <n>] [--[no-]progress] <split "
+"options>"
-#: builtin/commit-graph.c:64
-#, c-format
-msgid "could not find object directory matching %s"
-msgstr "no s'ha pogut trobar el directori de l'objecte que coincideixi amb %s"
-
-#: builtin/commit-graph.c:80 builtin/commit-graph.c:210
-#: builtin/commit-graph.c:316 builtin/fetch.c:191 builtin/log.c:1776
+#: builtin/commit-graph.c:51 builtin/fetch.c:191 builtin/log.c:1779
msgid "dir"
msgstr "directori"
-#: builtin/commit-graph.c:81 builtin/commit-graph.c:211
-#: builtin/commit-graph.c:317
-#, fuzzy
+#: builtin/commit-graph.c:52
msgid "the object directory to store the graph"
-msgstr "El directori d'objectes per a emmagatzemar el gràfic"
+msgstr "el directori d'objectes a emmagatzemar al graf"
-#: builtin/commit-graph.c:83
+#: builtin/commit-graph.c:73
msgid "if the commit-graph is split, only verify the tip file"
msgstr ""
"si el graf de comissions està dividit només, verifica el fitxer de consell"
-#: builtin/commit-graph.c:106
+#: builtin/commit-graph.c:100
#, c-format
msgid "Could not open commit-graph '%s'"
msgstr "No s'ha pogut obrir el graf de comissions «%s»"
-#: builtin/commit-graph.c:142
+#: builtin/commit-graph.c:137
#, c-format
msgid "unrecognized --split argument, %s"
msgstr "argument --split no reconegut, %s"
-#: builtin/commit-graph.c:155
+#: builtin/commit-graph.c:150
#, fuzzy, c-format
msgid "unexpected non-hex object ID: %s"
msgstr ""
"s'esperava un identificador d'objecte de vora amb brossa s'han obtingut "
"percentatges d'escombraries"
-#: builtin/commit-graph.c:160
+#: builtin/commit-graph.c:155
#, c-format
msgid "invalid object: %s"
msgstr "no és un objecte vàlid: %s"
-#: builtin/commit-graph.c:213
+#: builtin/commit-graph.c:205
msgid "start walk at all refs"
msgstr "comença a caminar en totes les referències"
-#: builtin/commit-graph.c:215
+#: builtin/commit-graph.c:207
msgid "scan pack-indexes listed by stdin for commits"
msgstr "explora els índexs del paquet llistats per a stdin per a comissions"
-#: builtin/commit-graph.c:217
+#: builtin/commit-graph.c:209
#, fuzzy
msgid "start walk at commits listed by stdin"
msgstr "comença a caminar a les comissions llistades per a stdin"
-#: builtin/commit-graph.c:219
+#: builtin/commit-graph.c:211
msgid "include all commits already in the commit-graph file"
msgstr "inclou ja totes les comissions al fitxer del graf de comissions"
-#: builtin/commit-graph.c:221
+#: builtin/commit-graph.c:213
msgid "enable computation for changed paths"
msgstr "habilita la computació per als camins canviats"
-#: builtin/commit-graph.c:224
+#: builtin/commit-graph.c:215
msgid "allow writing an incremental commit-graph file"
msgstr "permet escriure un fitxer de graf de comissions incrementals"
-#: builtin/commit-graph.c:228
+#: builtin/commit-graph.c:219
#, fuzzy
msgid "maximum number of commits in a non-base split commit-graph"
msgstr "nombre màxim de comissions en un graf de comissions no basat"
-#: builtin/commit-graph.c:230
+#: builtin/commit-graph.c:221
msgid "maximum ratio between two levels of a split commit-graph"
msgstr "ràtio màxima entre dos nivells d'un graf de comissions dividit"
-#: builtin/commit-graph.c:232
+#: builtin/commit-graph.c:223
msgid "only expire files older than a given date-time"
msgstr "fes caducar els objectes més antics que l'hora i data donades"
-#: builtin/commit-graph.c:234
+#: builtin/commit-graph.c:225
#, fuzzy
msgid "maximum number of changed-path Bloom filters to compute"
msgstr ""
"S'estan calculant els canvis les rutes de la comissió en els filtres Bloom"
-#: builtin/commit-graph.c:255
+#: builtin/commit-graph.c:251
#, fuzzy
msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs"
msgstr "usa com a màxim un dels --reachable --stdin-commits o --stdin-packs"
-#: builtin/commit-graph.c:287
+#: builtin/commit-graph.c:283
msgid "Collecting commits from input"
msgstr "S'estan recollint les comissions de l'entrada"
+#: builtin/commit-graph.c:328 builtin/multi-pack-index.c:255
+#, fuzzy, c-format
+msgid "unrecognized subcommand: %s"
+msgstr "subcomandes no reconeguts"
+
#: builtin/commit-tree.c:18
msgid ""
"git commit-tree [(-p <parent>)...] [-S[<keyid>]] [(-m <message>)...] [(-F "
@@ -13525,70 +13822,65 @@
msgid "duplicate parent %s ignored"
msgstr "s'han ignorat el pare %s duplicat"
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:559
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:562
#, c-format
msgid "not a valid object name %s"
msgstr "no és un nom d'objecte vàlid %s"
-#: builtin/commit-tree.c:93
-#, c-format
-msgid "git commit-tree: failed to open '%s'"
-msgstr "git commit-tree: ha fallat en obrir «%s»"
-
-#: builtin/commit-tree.c:96
+#: builtin/commit-tree.c:94
#, c-format
msgid "git commit-tree: failed to read '%s'"
msgstr "git commit-tree: ha fallat en llegir «%s»"
-#: builtin/commit-tree.c:98
+#: builtin/commit-tree.c:96
#, c-format
msgid "git commit-tree: failed to close '%s'"
msgstr "git commit-tree: ha fallat en tancar «%s»"
-#: builtin/commit-tree.c:111
+#: builtin/commit-tree.c:109
msgid "parent"
msgstr "pare"
-#: builtin/commit-tree.c:112
+#: builtin/commit-tree.c:110
msgid "id of a parent commit object"
msgstr "id d'un objecte de comissió pare"
-#: builtin/commit-tree.c:114 builtin/commit.c:1614 builtin/merge.c:282
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1605
-#: builtin/tag.c:456
+#: builtin/commit-tree.c:112 builtin/commit.c:1626 builtin/merge.c:283
+#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1618
+#: builtin/tag.c:454
msgid "message"
msgstr "missatge"
-#: builtin/commit-tree.c:115 builtin/commit.c:1614
+#: builtin/commit-tree.c:113 builtin/commit.c:1626
msgid "commit message"
msgstr "missatge de comissió"
-#: builtin/commit-tree.c:118
+#: builtin/commit-tree.c:116
msgid "read commit log message from file"
msgstr "llegeix el missatge de registre de comissió des d'un fitxer"
-#: builtin/commit-tree.c:121 builtin/commit.c:1631 builtin/merge.c:299
+#: builtin/commit-tree.c:119 builtin/commit.c:1643 builtin/merge.c:300
#: builtin/pull.c:176 builtin/revert.c:118
msgid "GPG sign commit"
msgstr "signa la comissió amb GPG"
-#: builtin/commit-tree.c:133
+#: builtin/commit-tree.c:131
msgid "must give exactly one tree"
msgstr "ha de donar exactament un arbre"
-#: builtin/commit-tree.c:140
+#: builtin/commit-tree.c:138
msgid "git commit-tree: failed to read"
msgstr "git commit-tree: ha fallat en llegir"
-#: builtin/commit.c:41
+#: builtin/commit.c:42
msgid "git commit [<options>] [--] <pathspec>..."
msgstr "git commit [<opcions>] [--] <especificació-de-camí>..."
-#: builtin/commit.c:46
+#: builtin/commit.c:47
msgid "git status [<options>] [--] <pathspec>..."
msgstr "git status [<opcions>] [--] <especificació-de-camí>..."
-#: builtin/commit.c:51
+#: builtin/commit.c:52
msgid ""
"You asked to amend the most recent commit, but doing so would make\n"
"it empty. You can repeat your command with --allow-empty, or you can\n"
@@ -13598,7 +13890,7 @@
"deixaria buida. Podeu repetir la vostra ordre amb --allow-empty, o\n"
"podeu eliminar la comissió per complet amb «git reset HEAD^».\n"
-#: builtin/commit.c:56
+#: builtin/commit.c:57
msgid ""
"The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
"If you wish to commit it anyway, use:\n"
@@ -13606,23 +13898,21 @@
" git commit --allow-empty\n"
"\n"
msgstr ""
-"El «cherry pick» previ està ara buit, possiblement a causa de resolució de "
-"conflictes.\n"
+"El «cherry pick» previ està ara buit, possiblement a causa de resolució de conflictes.\n"
"Si el voleu cometre de totes maneres, useu:\n"
"\n"
" git commit --allow-empty\n"
"\n"
-#: builtin/commit.c:63
+#: builtin/commit.c:64
msgid "Otherwise, please use 'git rebase --skip'\n"
-msgstr "Altrament si us plau useu «git rebase --skip»\n"
+msgstr "Altrament, si us plau useu «git rebase --skip»\n"
-#: builtin/commit.c:66
+#: builtin/commit.c:67
msgid "Otherwise, please use 'git cherry-pick --skip'\n"
-msgstr "Altrament si us plau useu «git cherry-pick --skip»\n"
+msgstr "Altrament, si us plau useu «git cherry-pick --skip»\n"
-#: builtin/commit.c:69
-#, fuzzy
+#: builtin/commit.c:70
msgid ""
"and then use:\n"
"\n"
@@ -13634,77 +13924,83 @@
" git cherry-pick --skip\n"
"\n"
msgstr ""
-"i després utilitzeu git cherry-pick --continue per tornar a seleccionar les "
-"comissions restants. Si voleu ometre aquesta publicació utilitzeu git cherry-"
-"pick --skip"
+"i després utilitzeu:\n"
+"\n"
+" git cherry-pick --continue\n"
+"\n"
+"per continuar seleccionant les comissions restants.\n"
+"Si voleu ometre aquesta comissió, useu:\n"
+"\n"
+" git cherry-pick --skip\n"
+"\n"
-#: builtin/commit.c:324
+#: builtin/commit.c:325
msgid "failed to unpack HEAD tree object"
msgstr "s'ha produït un error en desempaquetar l'objecte d'arbre HEAD"
-#: builtin/commit.c:360
+#: builtin/commit.c:361
msgid "--pathspec-from-file with -a does not make sense"
msgstr "--pathspec-from-file amb -a no té sentit"
-#: builtin/commit.c:374
+#: builtin/commit.c:375
msgid "No paths with --include/--only does not make sense."
msgstr "--include/--only no té sentit sense camí."
-#: builtin/commit.c:386
+#: builtin/commit.c:387
msgid "unable to create temporary index"
msgstr "no s'ha pogut crear un índex temporal"
-#: builtin/commit.c:395
+#: builtin/commit.c:396
msgid "interactive add failed"
msgstr "l'afegiment interactiu ha fallat"
-#: builtin/commit.c:410
+#: builtin/commit.c:411
msgid "unable to update temporary index"
msgstr "no s'ha pogut actualitzar l'índex temporal"
-#: builtin/commit.c:412
+#: builtin/commit.c:413
msgid "Failed to update main cache tree"
msgstr "S'ha produït un error en actualitzar l'arbre principal de memòria cau"
-#: builtin/commit.c:437 builtin/commit.c:460 builtin/commit.c:508
+#: builtin/commit.c:438 builtin/commit.c:461 builtin/commit.c:509
msgid "unable to write new_index file"
msgstr "no s'ha pogut escriure el fitxer new_index"
-#: builtin/commit.c:489
+#: builtin/commit.c:490
msgid "cannot do a partial commit during a merge."
msgstr "no es pot fer una comissió parcial durant una fusió."
-#: builtin/commit.c:491
+#: builtin/commit.c:492
msgid "cannot do a partial commit during a cherry-pick."
msgstr "no es pot fer una comissió parcial durant un «cherry pick»."
-#: builtin/commit.c:493
+#: builtin/commit.c:494
msgid "cannot do a partial commit during a rebase."
msgstr "no es pot fer una comissió parcial durant un «rebase»."
-#: builtin/commit.c:501
+#: builtin/commit.c:502
msgid "cannot read the index"
msgstr "no es pot llegir l'índex"
-#: builtin/commit.c:520
+#: builtin/commit.c:521
msgid "unable to write temporary index file"
msgstr "no s'ha pogut escriure un fitxer d'índex temporal"
-#: builtin/commit.c:618
+#: builtin/commit.c:619
#, c-format
msgid "commit '%s' lacks author header"
msgstr "a la comissió «%s» li manca la capçalera d'autor"
-#: builtin/commit.c:620
+#: builtin/commit.c:621
#, c-format
msgid "commit '%s' has malformed author line"
msgstr "la comissió «%s» té una línia d'autor mal formada"
-#: builtin/commit.c:639
+#: builtin/commit.c:640
msgid "malformed --author parameter"
msgstr "paràmetre --author mal format"
-#: builtin/commit.c:692
+#: builtin/commit.c:693
msgid ""
"unable to select a comment character that is not used\n"
"in the current commit message"
@@ -13712,43 +14008,83 @@
"no es pot seleccionar un caràcter de comentari que\n"
"no sigui usat en el missatge de comissió actual"
-#: builtin/commit.c:746 builtin/commit.c:780 builtin/commit.c:1158
+#: builtin/commit.c:747 builtin/commit.c:781 builtin/commit.c:1166
#, c-format
msgid "could not lookup commit %s"
msgstr "no s'ha pogut cercar la comissió %s"
-#: builtin/commit.c:758 builtin/shortlog.c:413
+#: builtin/commit.c:759 builtin/shortlog.c:416
#, c-format
msgid "(reading log message from standard input)\n"
msgstr "(s'està llegint el missatge de registre des de l'entrada estàndard)\n"
-#: builtin/commit.c:760
+#: builtin/commit.c:761
msgid "could not read log from standard input"
msgstr "no s'ha pogut llegir el registre des de l'entrada estàndard"
-#: builtin/commit.c:764
+#: builtin/commit.c:765
#, c-format
msgid "could not read log file '%s'"
msgstr "no s'ha pogut llegir el fitxer de registre «%s»"
-#: builtin/commit.c:801
-#, fuzzy, c-format
+#: builtin/commit.c:802
+#, c-format
msgid "cannot combine -m with --fixup:%s"
-msgstr "no es pot combinar «--keep-base» amb «--root»"
+msgstr "no es pot combinar -m amb --fixup:%s"
-#: builtin/commit.c:813 builtin/commit.c:829
+#: builtin/commit.c:814 builtin/commit.c:830
msgid "could not read SQUASH_MSG"
msgstr "no s'ha pogut llegir SQUASH_MSG"
-#: builtin/commit.c:820
+#: builtin/commit.c:821
msgid "could not read MERGE_MSG"
msgstr "no s'ha pogut llegir MERGE_MSG"
-#: builtin/commit.c:880
+#: builtin/commit.c:881
msgid "could not write commit template"
msgstr "no s'ha pogut escriure la plantilla de comissió"
+#: builtin/commit.c:894
+#, fuzzy, c-format
+msgid ""
+"Please enter the commit message for your changes. Lines starting\n"
+"with '%c' will be ignored.\n"
+msgstr ""
+"Introduïu el missatge de comissió dels vostres canvis.\n"
+"S'ignoraran les línies que comencin amb «%c». Un missatge de\n"
+"comissió buit avorta la comissió.\n"
+
+#: builtin/commit.c:896
+#, c-format
+msgid ""
+"Please enter the commit message for your changes. Lines starting\n"
+"with '%c' will be ignored, and an empty message aborts the commit.\n"
+msgstr ""
+"Introduïu el missatge de comissió dels vostres canvis.\n"
+"S'ignoraran les línies que comencin amb «%c». Un missatge de\n"
+"comissió buit avorta la comissió.\n"
+
#: builtin/commit.c:900
+#, c-format
+msgid ""
+"Please enter the commit message for your changes. Lines starting\n"
+"with '%c' will be kept; you may remove them yourself if you want to.\n"
+msgstr ""
+"Introduïu el missatge de comissió pels vostres canvis. Es mantindran\n"
+"les línies que comencin amb «%c»; podeu eliminar-les si voleu.\n"
+
+#: builtin/commit.c:904
+#, c-format
+msgid ""
+"Please enter the commit message for your changes. Lines starting\n"
+"with '%c' will be kept; you may remove them yourself if you want to.\n"
+"An empty message aborts the commit.\n"
+msgstr ""
+"Introduïu el missatge de comissió dels vostres canvis.\n"
+"Es mantindran les línies que comencin amb «%c»; podeu eliminar-les vosaltres\n"
+"mateixos si voleu. Un missatge buit avorta la comissió.\n"
+
+#: builtin/commit.c:916
msgid ""
"\n"
"It looks like you may be committing a merge.\n"
@@ -13762,7 +14098,7 @@
"\tgit update-ref -d MERGE_HEAD\n"
"i intenteu-ho de nou.\n"
-#: builtin/commit.c:905
+#: builtin/commit.c:921
msgid ""
"\n"
"It looks like you may be committing a cherry-pick.\n"
@@ -13776,200 +14112,181 @@
"\tgit update-ref -d CHERRY_PICK_HEAD\n"
"i intenteu-ho de nou.\n"
-#: builtin/commit.c:915
-#, c-format
-msgid ""
-"Please enter the commit message for your changes. Lines starting\n"
-"with '%c' will be ignored, and an empty message aborts the commit.\n"
-msgstr ""
-"Introduïu el missatge de comissió dels vostres canvis.\n"
-"S'ignoraran les línies que comencin amb «%c». Un missatge de\n"
-"comissió buit avorta la comissió.\n"
-
-#: builtin/commit.c:923
-#, c-format
-msgid ""
-"Please enter the commit message for your changes. Lines starting\n"
-"with '%c' will be kept; you may remove them yourself if you want to.\n"
-"An empty message aborts the commit.\n"
-msgstr ""
-"Introduïu el missatge de comissió dels vostres canvis.\n"
-"Es mantindran les línies que comencin amb «%c»; podeu eliminar-les "
-"vosaltres\n"
-"mateixos si voleu. Un missatge buit avorta la comissió.\n"
-
-#: builtin/commit.c:940
+#: builtin/commit.c:948
#, c-format
msgid "%sAuthor: %.*s <%.*s>"
msgstr "%sAutor: %.*s <%.*s>"
-#: builtin/commit.c:948
+#: builtin/commit.c:956
#, c-format
msgid "%sDate: %s"
msgstr "%sData: %s"
-#: builtin/commit.c:955
+#: builtin/commit.c:963
#, c-format
msgid "%sCommitter: %.*s <%.*s>"
msgstr "%sComitent: %.*s <%.*s>"
-#: builtin/commit.c:973
+#: builtin/commit.c:981
msgid "Cannot read index"
msgstr "No es pot llegir l'índex"
-#: builtin/commit.c:1018
+#: builtin/commit.c:1026
#, fuzzy
msgid "unable to pass trailers to --trailers"
msgstr "no s'ha pogut analitzar la capçalera de %s"
-#: builtin/commit.c:1058
+#: builtin/commit.c:1066
msgid "Error building trees"
msgstr "Error en construir arbres"
-#: builtin/commit.c:1072 builtin/tag.c:319
+#: builtin/commit.c:1080 builtin/tag.c:317
#, c-format
msgid "Please supply the message using either -m or -F option.\n"
msgstr "Especifiqueu el missatge usant l'opció -m o l'opció -F.\n"
-#: builtin/commit.c:1116
+#: builtin/commit.c:1124
#, c-format
msgid "--author '%s' is not 'Name <email>' and matches no existing author"
msgstr ""
"--author «%s» no és «Nom <adreça-electrònica>» i no coincideix amb\n"
"cap autor existent"
-#: builtin/commit.c:1130
+#: builtin/commit.c:1138
#, c-format
msgid "Invalid ignored mode '%s'"
msgstr "Mode d'ignorància no vàlid «%s»"
-#: builtin/commit.c:1148 builtin/commit.c:1441
+#: builtin/commit.c:1156 builtin/commit.c:1450
#, c-format
msgid "Invalid untracked files mode '%s'"
msgstr "Mode de fitxers no seguits no vàlid «%s»"
-#: builtin/commit.c:1188
+#: builtin/commit.c:1196
msgid "--long and -z are incompatible"
msgstr "--long i -z són incompatibles"
-#: builtin/commit.c:1219
+#: builtin/commit.c:1227
#, fuzzy
msgid "You are in the middle of a merge -- cannot reword."
msgstr "Esteu enmig d'una fusió -- no es pot esmenar."
-#: builtin/commit.c:1221
+#: builtin/commit.c:1229
#, fuzzy
msgid "You are in the middle of a cherry-pick -- cannot reword."
msgstr "Esteu enmig d'un «cherry pick» -- no es pot esmenar."
-#: builtin/commit.c:1224
+#: builtin/commit.c:1232
#, fuzzy, c-format
msgid "cannot combine reword option of --fixup with path '%s'"
msgstr "no es poden combinar les opcions d'aplicació amb les opcions de fusió"
-#: builtin/commit.c:1226
+#: builtin/commit.c:1234
+#, fuzzy
msgid ""
-"reword option of --fixup is mutually exclusive with --patch/--interactive/--"
-"all/--include/--only"
+"reword option of --fixup is mutually exclusive with "
+"--patch/--interactive/--all/--include/--only"
msgstr ""
+"l'opció de reparaula de --fixup és mútuament excloent amb "
+"--patch/--interactive/--all/--include/--only"
-#: builtin/commit.c:1245
+#: builtin/commit.c:1253
msgid "Using both --reset-author and --author does not make sense"
msgstr "Usar ambdós --reset-author i --author no té sentit"
-#: builtin/commit.c:1254
+#: builtin/commit.c:1260
msgid "You have nothing to amend."
msgstr "No teniu res a esmenar."
-#: builtin/commit.c:1257
+#: builtin/commit.c:1263
msgid "You are in the middle of a merge -- cannot amend."
msgstr "Esteu enmig d'una fusió -- no es pot esmenar."
-#: builtin/commit.c:1259
+#: builtin/commit.c:1265
msgid "You are in the middle of a cherry-pick -- cannot amend."
msgstr "Esteu enmig d'un «cherry pick» -- no es pot esmenar."
-#: builtin/commit.c:1261
+#: builtin/commit.c:1267
msgid "You are in the middle of a rebase -- cannot amend."
msgstr "Esteu enmig d'un «rebase» -- no es pot esmenar."
-#: builtin/commit.c:1264
+#: builtin/commit.c:1270
msgid "Options --squash and --fixup cannot be used together"
msgstr "Les opcions --squash i --fixup no es poden usar juntes"
-#: builtin/commit.c:1274
+#: builtin/commit.c:1280
msgid "Only one of -c/-C/-F/--fixup can be used."
msgstr "Només un de -c/-C/-F/--fixup es pot usar."
-#: builtin/commit.c:1276
+#: builtin/commit.c:1282
msgid "Option -m cannot be combined with -c/-C/-F."
msgstr "L'opció -m no es pot combinar amb -c/-C/-F/."
-#: builtin/commit.c:1285
+#: builtin/commit.c:1291
msgid "--reset-author can be used only with -C, -c or --amend."
msgstr "--reset-author només es pot usar amb -C, -c o --amend."
-#: builtin/commit.c:1303
+#: builtin/commit.c:1309
msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
msgstr "Només un de --include/--only/--all/--interactive/--patch es pot usar."
-#: builtin/commit.c:1331
-#, fuzzy, c-format
+#: builtin/commit.c:1337
+#, c-format
msgid "unknown option: --fixup=%s:%s"
-msgstr "opció desconeguda: %s\n"
+msgstr "opció desconeguda: --fixup=%s:%s"
-#: builtin/commit.c:1345
+#: builtin/commit.c:1354
#, c-format
msgid "paths '%s ...' with -a does not make sense"
msgstr "els camins «%s ...» amb -a no tenen sentit"
-#: builtin/commit.c:1476 builtin/commit.c:1642
+#: builtin/commit.c:1485 builtin/commit.c:1654
msgid "show status concisely"
msgstr "mostra l'estat concisament"
-#: builtin/commit.c:1478 builtin/commit.c:1644
+#: builtin/commit.c:1487 builtin/commit.c:1656
msgid "show branch information"
msgstr "mostra la informació de branca"
-#: builtin/commit.c:1480
+#: builtin/commit.c:1489
msgid "show stash information"
msgstr "mostra la informació de «stash»"
-#: builtin/commit.c:1482 builtin/commit.c:1646
+#: builtin/commit.c:1491 builtin/commit.c:1658
#, fuzzy
msgid "compute full ahead/behind values"
msgstr "calcula els valors complets endavant/darrere"
-#: builtin/commit.c:1484
+#: builtin/commit.c:1493
msgid "version"
msgstr "versió"
-#: builtin/commit.c:1484 builtin/commit.c:1648 builtin/push.c:560
-#: builtin/worktree.c:681
+#: builtin/commit.c:1493 builtin/commit.c:1660 builtin/push.c:551
+#: builtin/worktree.c:691
msgid "machine-readable output"
-msgstr "sortida llegible per màquina"
+msgstr "sortida llegible per una màquina"
-#: builtin/commit.c:1487 builtin/commit.c:1650
+#: builtin/commit.c:1496 builtin/commit.c:1662
msgid "show status in long format (default)"
msgstr "mostra l'estat en format llarg (per defecte)"
-#: builtin/commit.c:1490 builtin/commit.c:1653
+#: builtin/commit.c:1499 builtin/commit.c:1665
msgid "terminate entries with NUL"
msgstr "acaba les entrades amb NUL"
-#: builtin/commit.c:1492 builtin/commit.c:1496 builtin/commit.c:1656
-#: builtin/fast-export.c:1198 builtin/fast-export.c:1201
-#: builtin/fast-export.c:1204 builtin/rebase.c:1407 parse-options.h:337
+#: builtin/commit.c:1501 builtin/commit.c:1505 builtin/commit.c:1668
+#: builtin/fast-export.c:1199 builtin/fast-export.c:1202
+#: builtin/fast-export.c:1205 builtin/rebase.c:1111 parse-options.h:336
msgid "mode"
msgstr "mode"
-#: builtin/commit.c:1493 builtin/commit.c:1656
+#: builtin/commit.c:1502 builtin/commit.c:1668
msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
msgstr ""
"mostra els fitxers no seguits, modes opcionals: all, normal, no. (Per "
"defecte: all)"
-#: builtin/commit.c:1497
+#: builtin/commit.c:1506
msgid ""
"show ignored files, optional modes: traditional, matching, no. (Default: "
"traditional)"
@@ -13977,11 +14294,11 @@
"mostra els fitxers ignorats, modes opcionals: traditional, matching, no. "
"(Per defecte: traditional, matching, no.)"
-#: builtin/commit.c:1499 parse-options.h:193
+#: builtin/commit.c:1508 parse-options.h:192
msgid "when"
msgstr "quan"
-#: builtin/commit.c:1500
+#: builtin/commit.c:1509
msgid ""
"ignore changes to submodules, optional when: all, dirty, untracked. "
"(Default: all)"
@@ -13989,77 +14306,77 @@
"ignora els canvis als submòduls, opcional quan: all, dirty, untracked. (Per "
"defecte: all)"
-#: builtin/commit.c:1502
+#: builtin/commit.c:1511
msgid "list untracked files in columns"
msgstr "mostra els fitxers no seguits en columnes"
-#: builtin/commit.c:1503
+#: builtin/commit.c:1512
msgid "do not detect renames"
msgstr "no detectis canvis de noms"
-#: builtin/commit.c:1505
+#: builtin/commit.c:1514
msgid "detect renames, optionally set similarity index"
-msgstr "detecta canvis de noms, i opcionalment estableix un índex de semblança"
+msgstr ""
+"detecta canvis de noms, i opcionalment estableix un índex de semblança"
-#: builtin/commit.c:1525
+#: builtin/commit.c:1537
msgid "Unsupported combination of ignored and untracked-files arguments"
msgstr ""
"No s'admet la combinació d'arguments d'ignorància i de fitxers no seguits"
-#: builtin/commit.c:1607
+#: builtin/commit.c:1619
msgid "suppress summary after successful commit"
msgstr "omet el resum després d'una comissió reeixida"
-#: builtin/commit.c:1608
+#: builtin/commit.c:1620
msgid "show diff in commit message template"
msgstr "mostra la diferència en la plantilla de missatge de comissió"
-#: builtin/commit.c:1610
+#: builtin/commit.c:1622
msgid "Commit message options"
msgstr "Opcions de missatge de comissió"
-#: builtin/commit.c:1611 builtin/merge.c:286 builtin/tag.c:458
+#: builtin/commit.c:1623 builtin/merge.c:287 builtin/tag.c:456
msgid "read message from file"
msgstr "llegiu el missatge des d'un fitxer"
-#: builtin/commit.c:1612
+#: builtin/commit.c:1624
msgid "author"
msgstr "autor"
-#: builtin/commit.c:1612
+#: builtin/commit.c:1624
msgid "override author for commit"
msgstr "autor corregit de la comissió"
-#: builtin/commit.c:1613 builtin/gc.c:550
+#: builtin/commit.c:1625 builtin/gc.c:550
msgid "date"
msgstr "data"
-#: builtin/commit.c:1613
+#: builtin/commit.c:1625
msgid "override date for commit"
msgstr "data corregida de la comissió"
-#: builtin/commit.c:1615 builtin/commit.c:1616 builtin/commit.c:1622
-#: parse-options.h:329 ref-filter.h:90
+#: builtin/commit.c:1627 builtin/commit.c:1628 builtin/commit.c:1634
+#: parse-options.h:328 ref-filter.h:92
msgid "commit"
msgstr "comissió"
-#: builtin/commit.c:1615
+#: builtin/commit.c:1627
msgid "reuse and edit message from specified commit"
msgstr "reusa i edita el missatge de la comissió especificada"
-#: builtin/commit.c:1616
+#: builtin/commit.c:1628
msgid "reuse message from specified commit"
msgstr "reusa el missatge de la comissió especificada"
#. TRANSLATORS: Leave "[(amend|reword):]" as-is,
#. and only translate <commit>.
-#.
-#: builtin/commit.c:1621
+#: builtin/commit.c:1633
#, fuzzy
msgid "[(amend|reword):]commit"
msgstr "esmena la comissió anterior"
-#: builtin/commit.c:1621
+#: builtin/commit.c:1633
#, fuzzy
msgid ""
"use autosquash formatted message to fixup or amend/reword specified commit"
@@ -14067,120 +14384,121 @@
"usa el missatge formatat de «squash» automàtic per a corregir la comissió "
"especificada"
-#: builtin/commit.c:1622
+#: builtin/commit.c:1634
msgid "use autosquash formatted message to squash specified commit"
msgstr ""
"usa el missatge formatat de «squash» automàtic per a «squash» a la comissió "
"especificada"
-#: builtin/commit.c:1623
+#: builtin/commit.c:1635
msgid "the commit is authored by me now (used with -C/-c/--amend)"
msgstr "l'autor de la comissió soc jo ara (s'usa amb -C/-c/--amend)"
-#: builtin/commit.c:1624 builtin/interpret-trailers.c:111
+#: builtin/commit.c:1636 builtin/interpret-trailers.c:111
msgid "trailer"
msgstr "remolc"
-#: builtin/commit.c:1624
+#: builtin/commit.c:1636
+#, fuzzy
msgid "add custom trailer(s)"
-msgstr ""
+msgstr "afegeix un(s) tràiler(s) personalitzat(s)"
-#: builtin/commit.c:1625 builtin/log.c:1751 builtin/merge.c:302
+#: builtin/commit.c:1637 builtin/log.c:1754 builtin/merge.c:303
#: builtin/pull.c:145 builtin/revert.c:110
#, fuzzy
msgid "add a Signed-off-by trailer"
msgstr "afegeix Signed-off-by:"
-#: builtin/commit.c:1626
+#: builtin/commit.c:1638
msgid "use specified template file"
msgstr "usa el fitxer de plantilla especificat"
-#: builtin/commit.c:1627
+#: builtin/commit.c:1639
msgid "force edit of commit"
msgstr "força l'edició de la comissió"
-#: builtin/commit.c:1629
+#: builtin/commit.c:1641
msgid "include status in commit message template"
msgstr "inclou l'estat en la plantilla de missatge de comissió"
-#: builtin/commit.c:1634
+#: builtin/commit.c:1646
msgid "Commit contents options"
msgstr "Opcions dels continguts de les comissions"
-#: builtin/commit.c:1635
+#: builtin/commit.c:1647
msgid "commit all changed files"
msgstr "comet tots els fitxers canviats"
-#: builtin/commit.c:1636
+#: builtin/commit.c:1648
msgid "add specified files to index for commit"
msgstr "afegeix els fitxers especificats a l'índex per a cometre"
-#: builtin/commit.c:1637
+#: builtin/commit.c:1649
msgid "interactively add files"
msgstr "afegeix els fitxers interactivament"
-#: builtin/commit.c:1638
+#: builtin/commit.c:1650
msgid "interactively add changes"
msgstr "afegeix els canvis interactivament"
-#: builtin/commit.c:1639
+#: builtin/commit.c:1651
msgid "commit only specified files"
msgstr "comet només els fitxers especificats"
-#: builtin/commit.c:1640
+#: builtin/commit.c:1652
msgid "bypass pre-commit and commit-msg hooks"
msgstr "evita els lligams de precomissió i missatge de comissió"
-#: builtin/commit.c:1641
+#: builtin/commit.c:1653
msgid "show what would be committed"
msgstr "mostra què es cometria"
-#: builtin/commit.c:1654
+#: builtin/commit.c:1666
msgid "amend previous commit"
msgstr "esmena la comissió anterior"
-#: builtin/commit.c:1655
+#: builtin/commit.c:1667
msgid "bypass post-rewrite hook"
msgstr "evita el lligam de post escriptura"
-#: builtin/commit.c:1662
+#: builtin/commit.c:1674
msgid "ok to record an empty change"
msgstr "està bé registrar un canvi buit"
-#: builtin/commit.c:1664
+#: builtin/commit.c:1676
msgid "ok to record a change with an empty message"
msgstr "està bé registrar un canvi amb missatge buit"
-#: builtin/commit.c:1737
+#: builtin/commit.c:1752
#, c-format
msgid "Corrupt MERGE_HEAD file (%s)"
msgstr "Fitxer MERGE_HEAD malmès (%s)"
-#: builtin/commit.c:1744
+#: builtin/commit.c:1759
msgid "could not read MERGE_MODE"
msgstr "no s'ha pogut llegir MERGE_MODE"
-#: builtin/commit.c:1765
+#: builtin/commit.c:1780
#, c-format
msgid "could not read commit message: %s"
msgstr "no s'ha pogut llegir el missatge de comissió: %s"
-#: builtin/commit.c:1772
+#: builtin/commit.c:1787
#, c-format
msgid "Aborting commit due to empty commit message.\n"
msgstr "S'està avortant la comissió a causa d'un missatge de comissió buit.\n"
-#: builtin/commit.c:1777
+#: builtin/commit.c:1792
#, c-format
msgid "Aborting commit; you did not edit the message.\n"
msgstr "S'està avortant la comissió; no heu editat el missatge.\n"
-#: builtin/commit.c:1788
+#: builtin/commit.c:1803
#, fuzzy, c-format
msgid "Aborting commit due to empty commit message body.\n"
msgstr "S'està avortant la comissió a causa d'un missatge de comissió buit.\n"
-#: builtin/commit.c:1824
+#: builtin/commit.c:1839
#, fuzzy
msgid ""
"repository has been updated, but unable to write\n"
@@ -14188,8 +14506,8 @@
"not exceeded, and then \"git restore --staged :/\" to recover."
msgstr ""
"s'ha actualitzat el repositori però no s'ha pogut escriure el fitxer "
-"newindex. Comproveu que el disc no està ple i que la quota no s'ha excedit i "
-"després «git restitueix --staged /» per recuperar-se."
+"newindex. Comproveu que el disc no està ple i que la quota no s'ha excedit i"
+" després «git restitueix --staged /» per recuperar-se."
#: builtin/config.c:11
msgid "git config [<options>]"
@@ -14369,19 +14687,18 @@
msgstr "valor"
#: builtin/config.c:167
-#, fuzzy
msgid "with --get, use default value when missing entry"
-msgstr "amb --get utilitza el valor per defecte quan falta una entrada"
+msgstr "amb --get utilitza el valor per defecte quan falti una entrada"
#: builtin/config.c:181
-#, fuzzy, c-format
+#, c-format
msgid "wrong number of arguments, should be %d"
-msgstr "el nombre d'arguments és erroni"
+msgstr "nombre d'arguments erroni, ha de ser %d"
#: builtin/config.c:183
-#, fuzzy, c-format
+#, c-format
msgid "wrong number of arguments, should be from %d to %d"
-msgstr "el nombre d'arguments hauria de passar d'un percentatge a un altre."
+msgstr "nombre d'arguments erroni, ha de ser %d a %d"
#: builtin/config.c:339
#, c-format
@@ -14392,7 +14709,8 @@
#, c-format
msgid "failed to format default config value: %s"
msgstr ""
-"s'ha produït un error en formatar el valor per defecte de la configuració: %s"
+"s'ha produït un error en formatar el valor per defecte de la configuració: "
+"%s"
#: builtin/config.c:441
#, c-format
@@ -14444,9 +14762,8 @@
msgstr "--blob només es pot usar dins d'un repositori git"
#: builtin/config.c:662
-#, fuzzy
msgid "--worktree can only be used inside a git repository"
-msgstr "--blob només es pot usar dins d'un repositori git"
+msgstr "--worktree només es pot usar dins d'un repositori git"
#: builtin/config.c:684
msgid "$HOME not set"
@@ -14477,8 +14794,8 @@
#: builtin/config.c:767
msgid ""
-"--show-origin is only applicable to --get, --get-all, --get-regexp, and --"
-"list"
+"--show-origin is only applicable to --get, --get-all, --get-regexp, and "
+"--list"
msgstr ""
"--show-origin només és aplicable a --get, --get-all, --get-regexp, i --list"
@@ -14487,9 +14804,8 @@
msgstr "--default només és aplicable a --get"
#: builtin/config.c:806
-#, fuzzy
msgid "--fixed-value only applies with 'value-pattern'"
-msgstr "--fixed-value només s'aplica amb 'value-pattern'"
+msgstr "--fixed-value només s'aplica amb «value-pattern»"
#: builtin/config.c:822
#, c-format
@@ -14554,16 +14870,16 @@
msgstr "imprimeix els missatges de depuració a stderr"
#: builtin/credential-cache--daemon.c:316
-#, fuzzy
msgid "credential-cache--daemon unavailable; no unix socket support"
msgstr ""
-"credencial-cache-daemon no disponible; no hi ha compatibilitat amb sòcols "
-"unix"
+"credential-cache--daemon no disponible; no hi ha compatibilitat amb sòcols "
+"d'unix"
-#: builtin/credential-cache.c:154
+#: builtin/credential-cache.c:180
msgid "credential-cache unavailable; no unix socket support"
msgstr ""
-"credencial-cache no disponible; no hi ha compatibilitat amb els sòcols d'unix"
+"credencial-cache no disponible; no hi ha compatibilitat amb els sòcols "
+"d'unix"
#: builtin/credential-store.c:66
#, fuzzy, c-format
@@ -14737,12 +15053,10 @@
msgstr "--broken és incompatible amb les comissions"
#: builtin/diff-tree.c:155
-#, fuzzy
msgid "--stdin and --merge-base are mutually exclusive"
-msgstr "-p i --overlay són mútuament excloents"
+msgstr "--stdin i --merge-base són mútuament excloents"
#: builtin/diff-tree.c:157
-#, fuzzy
msgid "--merge-base only works with two commits"
msgstr "--merge-base només funciona amb dues comissions"
@@ -14765,7 +15079,7 @@
msgid "Not a git repository"
msgstr "No és un repositori de git"
-#: builtin/diff.c:532 builtin/grep.c:684
+#: builtin/diff.c:532 builtin/grep.c:698
#, c-format
msgid "invalid object '%s' given."
msgstr "s'ha donat un objecte no vàlid «%s»."
@@ -14789,114 +15103,116 @@
msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
msgstr "git difftool [<opcions>] [<commit> [<commit>]] [--] [<camí>...]"
-#: builtin/difftool.c:261
-#, c-format
-msgid "failed: %d"
-msgstr "ha fallat: %d"
-
-#: builtin/difftool.c:303
+#: builtin/difftool.c:293
#, c-format
msgid "could not read symlink %s"
msgstr "no s'ha pogut llegir l'enllaç simbòlic %s"
-#: builtin/difftool.c:305
+#: builtin/difftool.c:295
#, c-format
msgid "could not read symlink file %s"
msgstr "no s'ha pogut llegir el fitxer d'enllaç simbòlic %s"
-#: builtin/difftool.c:313
+#: builtin/difftool.c:303
#, c-format
msgid "could not read object %s for symlink %s"
msgstr "no es pot llegir l'objecte %s per l'enllaç simbòlic %s"
-#: builtin/difftool.c:413
+#: builtin/difftool.c:427
+#, fuzzy
msgid ""
-"combined diff formats('-c' and '--cc') are not supported in\n"
-"directory diff mode('-d' and '--dir-diff')."
+"combined diff formats ('-c' and '--cc') are not supported in\n"
+"directory diff mode ('-d' and '--dir-diff')."
msgstr ""
"els formats de diff combinats («-c» i «--cc») no s'admeten\n"
"en el mode diff per directoris («-d» i «--dir-diff»)."
-#: builtin/difftool.c:637
+#: builtin/difftool.c:632
#, c-format
msgid "both files modified: '%s' and '%s'."
msgstr "s'han modificat ambdós fitxers: «%s» i «%s»."
-#: builtin/difftool.c:639
+#: builtin/difftool.c:634
msgid "working tree file has been left."
msgstr "s'ha deixat un fitxer de l'arbre de treball."
-#: builtin/difftool.c:650
+#: builtin/difftool.c:645
#, c-format
msgid "temporary files exist in '%s'."
msgstr "existeix un fitxer temporal a «%s»."
-#: builtin/difftool.c:651
+#: builtin/difftool.c:646
msgid "you may want to cleanup or recover these."
msgstr "podeu netejar o recuperar-los."
-#: builtin/difftool.c:700
+#: builtin/difftool.c:651
+#, c-format
+msgid "failed: %d"
+msgstr "ha fallat: %d"
+
+#: builtin/difftool.c:696
msgid "use `diff.guitool` instead of `diff.tool`"
msgstr "usa «diff.guitool» en lloc de «diff.tool»"
-#: builtin/difftool.c:702
+#: builtin/difftool.c:698
msgid "perform a full-directory diff"
msgstr "fes un diff de tot el directori"
-#: builtin/difftool.c:704
+#: builtin/difftool.c:700
msgid "do not prompt before launching a diff tool"
msgstr "no preguntis abans d'executar l'eina diff"
-#: builtin/difftool.c:709
+#: builtin/difftool.c:705
msgid "use symlinks in dir-diff mode"
msgstr "utilitza enllaços simbòlics en mode dir-diff"
-#: builtin/difftool.c:710
+#: builtin/difftool.c:706
msgid "tool"
msgstr "eina"
-#: builtin/difftool.c:711
+#: builtin/difftool.c:707
msgid "use the specified diff tool"
msgstr "utilitza l'eina de diff especificada"
-#: builtin/difftool.c:713
+#: builtin/difftool.c:709
msgid "print a list of diff tools that may be used with `--tool`"
msgstr ""
"imprimeix una llista de totes les eines diff que podeu usar amb «--tool»"
-#: builtin/difftool.c:716
+#: builtin/difftool.c:712
+#, fuzzy
msgid ""
-"make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
+"make 'git-difftool' exit when an invoked diff tool returns a non-zero exit "
"code"
msgstr ""
"fes que «git-difftool» surti quan l'eina de diff invocada torna un codi de "
"sortida diferent de zero"
-#: builtin/difftool.c:719
+#: builtin/difftool.c:715
msgid "specify a custom command for viewing diffs"
msgstr "especifiqueu una ordre personalitzada per veure diffs"
-#: builtin/difftool.c:720
+#: builtin/difftool.c:716
msgid "passed to `diff`"
msgstr "passa-ho a «diff»"
-#: builtin/difftool.c:735
+#: builtin/difftool.c:732
msgid "difftool requires worktree or --no-index"
msgstr "difftool requereix worktree o --no-index"
-#: builtin/difftool.c:742
+#: builtin/difftool.c:739
msgid "--dir-diff is incompatible with --no-index"
msgstr "--dir-diff és incompatible amb --no-index"
-#: builtin/difftool.c:745
+#: builtin/difftool.c:742
msgid "--gui, --tool and --extcmd are mutually exclusive"
msgstr "--gui, --tool and --extcmd són mútuament excloents"
-#: builtin/difftool.c:753
+#: builtin/difftool.c:750
msgid "no <tool> given for --tool=<tool>"
msgstr "no s'ha proporcionat l'<eina> per a --tool=<eina>"
-#: builtin/difftool.c:760
+#: builtin/difftool.c:757
msgid "no <cmd> given for --extcmd=<cmd>"
msgstr "no s'ha proporcionat l'<ordre> per a --extcmd=<ordre>"
@@ -14904,7 +15220,7 @@
msgid "git env--helper --type=[bool|ulong] <options> <env-var>"
msgstr "git env--helper --type=[bool|ulong] <opcions> <env-var>"
-#: builtin/env--helper.c:42 builtin/hash-object.c:98
+#: builtin/env--helper.c:42 builtin/hash-object.c:96
msgid "type"
msgstr "tipus"
@@ -14920,14 +15236,15 @@
#: builtin/env--helper.c:67
#, fuzzy, c-format
-msgid "option `--default' expects a boolean value with `--type=bool`, not `%s`"
+msgid ""
+"option `--default' expects a boolean value with `--type=bool`, not `%s`"
msgstr "`--default' espera un valor booleà amb `-type=bool` no `%s`"
#: builtin/env--helper.c:82
#, fuzzy, c-format
msgid ""
-"option `--default' expects an unsigned long value with `--type=ulong`, not `"
-"%s`"
+"option `--default' expects an unsigned long value with `--type=ulong`, not "
+"`%s`"
msgstr ""
"`--default' espera un valor llarg sense signe amb `-type=ulong` no `%s`"
@@ -14935,130 +15252,120 @@
msgid "git fast-export [rev-list-opts]"
msgstr "git fast-export [opcions-de-llista-de-revisions]"
-#: builtin/fast-export.c:868
-#, fuzzy
+#: builtin/fast-export.c:869
msgid "Error: Cannot export nested tags unless --mark-tags is specified."
msgstr ""
-"Error no es poden exportar les etiquetes niades a menys que s'especifiqui --"
-"mark-tags."
+"Error: no es poden exportar les etiquetes imbricades a menys que "
+"s'especifiqui --mark-tags."
-#: builtin/fast-export.c:1177
-#, fuzzy
+#: builtin/fast-export.c:1178
msgid "--anonymize-map token cannot be empty"
-msgstr "--anonymize-map token no pot estar buit"
+msgstr "el testimoni de --anonymize-map no pot estar buit"
-#: builtin/fast-export.c:1197
+#: builtin/fast-export.c:1198
msgid "show progress after <n> objects"
msgstr "mostra el progrés després de <n> objectes"
-#: builtin/fast-export.c:1199
+#: builtin/fast-export.c:1200
msgid "select handling of signed tags"
msgstr "selecciona la gestió de les etiquetes signades"
-#: builtin/fast-export.c:1202
+#: builtin/fast-export.c:1203
msgid "select handling of tags that tag filtered objects"
msgstr "selecciona la gestió de les etiquetes que etiquetin objectes filtrats"
-#: builtin/fast-export.c:1205
-#, fuzzy
+#: builtin/fast-export.c:1206
msgid "select handling of commit messages in an alternate encoding"
msgstr ""
"selecciona la gestió dels missatges de publicació en una codificació "
"alternativa"
-#: builtin/fast-export.c:1208
-#, fuzzy
+#: builtin/fast-export.c:1209
msgid "dump marks to this file"
-msgstr "Bolca les marques a aquest fitxer"
+msgstr "bolca les marques a aquest fitxer"
-#: builtin/fast-export.c:1210
-#, fuzzy
+#: builtin/fast-export.c:1211
msgid "import marks from this file"
-msgstr "Importa les marques d'aquest fitxer"
+msgstr "importa les marques d'aquest fitxer"
-#: builtin/fast-export.c:1214
-#, fuzzy
+#: builtin/fast-export.c:1215
msgid "import marks from this file if it exists"
-msgstr "Importa marques d'aquest fitxer si existeix"
+msgstr "importa marques d'aquest fitxer si existeix"
-#: builtin/fast-export.c:1216
+#: builtin/fast-export.c:1217
#, fuzzy
msgid "fake a tagger when tags lack one"
msgstr "Fingeix un etiquetador quan els en manca un a les etiquetes"
-#: builtin/fast-export.c:1218
-#, fuzzy
+#: builtin/fast-export.c:1219
msgid "output full tree for each commit"
-msgstr "Imprimeix l'arbre complet de cada comissió"
+msgstr "imprimeix l'arbre complet de per a cada comissió"
-#: builtin/fast-export.c:1220
+#: builtin/fast-export.c:1221
#, fuzzy
msgid "use the done feature to terminate the stream"
msgstr "Usa la característica done per a acabar el corrent"
-#: builtin/fast-export.c:1221
+#: builtin/fast-export.c:1222
#, fuzzy
msgid "skip output of blob data"
msgstr "Omet l'emissió de dades de blob"
-#: builtin/fast-export.c:1222 builtin/log.c:1823
+#: builtin/fast-export.c:1223 builtin/log.c:1826
msgid "refspec"
msgstr "especificació de referència"
-#: builtin/fast-export.c:1223
-#, fuzzy
-msgid "apply refspec to exported refs"
-msgstr "Aplica l'especificació de referència a les referències exportades"
-
#: builtin/fast-export.c:1224
+msgid "apply refspec to exported refs"
+msgstr "aplica l'especificació de referència a les referències exportades"
+
+#: builtin/fast-export.c:1225
msgid "anonymize output"
msgstr "anonimitza la sortida"
-#: builtin/fast-export.c:1225
+#: builtin/fast-export.c:1226
#, fuzzy
msgid "from:to"
msgstr "des de"
-#: builtin/fast-export.c:1226
+#: builtin/fast-export.c:1227
msgid "convert <from> to <to> in anonymized output"
msgstr "converteix <from> a <to> en una sortida anònima"
-#: builtin/fast-export.c:1229
+#: builtin/fast-export.c:1230
#, fuzzy
msgid "reference parents which are not in fast-export stream by object id"
msgstr ""
"Referència pares que no estan en flux d'exportació ràpida per identificador "
"d'objecte"
-#: builtin/fast-export.c:1231
+#: builtin/fast-export.c:1232
#, fuzzy
msgid "show original object ids of blobs/commits"
msgstr "Mostra els ID dels objectes originals dels blobs/commits"
-#: builtin/fast-export.c:1233
+#: builtin/fast-export.c:1234
#, fuzzy
msgid "label tags with mark ids"
-msgstr "Etiquetes amb els identificadors de marca"
+msgstr "etiquetes amb els identificadors de marca"
-#: builtin/fast-export.c:1256
-#, fuzzy
+#: builtin/fast-export.c:1257
msgid "--anonymize-map without --anonymize does not make sense"
-msgstr "--trailer amb --only-input no té sentit"
+msgstr "--anonymize-map sense --anonymize no té sentit"
-#: builtin/fast-export.c:1271
-#, fuzzy
+#: builtin/fast-export.c:1272
msgid "Cannot pass both --import-marks and --import-marks-if-exists"
-msgstr "No es poden passar tant --import-marks com --import-marks-if-exists"
+msgstr "No es poden passar alhora --import-marks i --import-marks-if-exists"
#: builtin/fast-import.c:3088
-#, fuzzy, c-format
+#, c-format
msgid "Missing from marks for submodule '%s'"
-msgstr "Subjecting submodule '%s'"
+msgstr "Falten les marques «from» per al submòdul «%s»"
#: builtin/fast-import.c:3090
-#, fuzzy, c-format
+#, c-format
msgid "Missing to marks for submodule '%s'"
-msgstr "s'ha produït un error en actualitzar el remot pel submòdul «%s»"
+msgstr "Falten les marques per al submòdul «%s»"
#: builtin/fast-import.c:3225
#, c-format
@@ -15090,7 +15397,8 @@
#: builtin/fetch.c:35
msgid "git fetch [<options>] [<repository> [<refspec>...]]"
-msgstr "git fetch [<opcions>] [<repositori> [<especificació-de-referència>...]]"
+msgstr ""
+"git fetch [<opcions>] [<repositori> [<especificació-de-referència>...]]"
#: builtin/fetch.c:36
msgid "git fetch [<options>] <group>"
@@ -15113,7 +15421,6 @@
msgstr "obtén de tots els remots"
#: builtin/fetch.c:147 builtin/pull.c:245
-#, fuzzy
msgid "set upstream for git pull/fetch"
msgstr "estableix la font per a git pull/fetch"
@@ -15151,8 +15458,11 @@
msgstr "nombre de submòduls obtinguts en paral·lel"
#: builtin/fetch.c:164
+#, fuzzy
msgid "modify the refspec to place all refs within refs/prefetch/"
msgstr ""
+"modifica l'especificació de referència per col·locar totes les referències "
+"dins de refs/prefetch/"
#: builtin/fetch.c:166 builtin/pull.c:198
msgid "prune remote-tracking branches no longer on remote"
@@ -15193,7 +15503,7 @@
#: builtin/fetch.c:183 builtin/pull.c:212
msgid "deepen history of shallow repository based on time"
-msgstr "aprofundeix la història d'un clon superficial basat en temps"
+msgstr "aprofundeix la història d'un clon superficial basat en una data"
#: builtin/fetch.c:189 builtin/pull.c:221
msgid "convert to a complete repository"
@@ -15208,8 +15518,8 @@
"default for recursive fetching of submodules (lower priority than config "
"files)"
msgstr ""
-"per defecte per a l'obtenció recursiva de submòduls (prioritat més baixa que "
-"els fitxers de configuració)"
+"per defecte per a l'obtenció recursiva de submòduls (prioritat més baixa que"
+" els fitxers de configuració)"
#: builtin/fetch.c:199 builtin/pull.c:224
msgid "accept refs that update .git/shallow"
@@ -15224,23 +15534,25 @@
msgstr "específica l'obtenció del mapa de referències"
#: builtin/fetch.c:208 builtin/pull.c:240
-#, fuzzy
msgid "report that we have only objects reachable from this object"
msgstr "informa que només hi ha objectes abastables des d'aquest objecte"
#: builtin/fetch.c:210
+#, fuzzy
msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
msgstr ""
+"no obtinguis un fitxer de paquet; en canvi, imprimeix els avantpassats dels "
+"consells de negociació"
#: builtin/fetch.c:213 builtin/fetch.c:215
-#, fuzzy
msgid "run 'maintenance --auto' after fetching"
-msgstr "executa «gc --auto» després d'obtenir"
+msgstr "executa «maintenance --auto» després d'obtenir"
#: builtin/fetch.c:217 builtin/pull.c:243
msgid "check for forced-updates on all updated branches"
msgstr ""
-"comprova si hi ha actualitzacions forçades a totes les branques actualitzades"
+"comprova si hi ha actualitzacions forçades a totes les branques "
+"actualitzades"
#: builtin/fetch.c:219
msgid "write the commit-graph after fetching"
@@ -15255,103 +15567,100 @@
msgid "Couldn't find remote ref HEAD"
msgstr "No s'ha pogut trobar la referència HEAD remota"
-#: builtin/fetch.c:757
+#: builtin/fetch.c:760
#, c-format
msgid "configuration fetch.output contains invalid value %s"
msgstr "la configuració fetch.output conté un valor no vàlid %s"
-#: builtin/fetch.c:856
+#: builtin/fetch.c:862
#, c-format
msgid "object %s not found"
msgstr "objecte %s no trobat"
-#: builtin/fetch.c:860
+#: builtin/fetch.c:866
msgid "[up to date]"
msgstr "[al dia]"
-#: builtin/fetch.c:873 builtin/fetch.c:889 builtin/fetch.c:961
+#: builtin/fetch.c:879 builtin/fetch.c:895 builtin/fetch.c:967
msgid "[rejected]"
msgstr "[rebutjat]"
-#: builtin/fetch.c:874
+#: builtin/fetch.c:880
msgid "can't fetch in current branch"
msgstr "no es pot obtenir en la branca actual"
-#: builtin/fetch.c:884
+#: builtin/fetch.c:890
msgid "[tag update]"
msgstr "[actualització d'etiqueta]"
-#: builtin/fetch.c:885 builtin/fetch.c:922 builtin/fetch.c:944
-#: builtin/fetch.c:956
+#: builtin/fetch.c:891 builtin/fetch.c:928 builtin/fetch.c:950
+#: builtin/fetch.c:962
msgid "unable to update local ref"
msgstr "no s'ha pogut actualitzar la referència local"
-#: builtin/fetch.c:889
+#: builtin/fetch.c:895
#, fuzzy
msgid "would clobber existing tag"
msgstr "es tancaria l'etiqueta existent"
-#: builtin/fetch.c:911
+#: builtin/fetch.c:917
msgid "[new tag]"
msgstr "[etiqueta nova]"
-#: builtin/fetch.c:914
+#: builtin/fetch.c:920
msgid "[new branch]"
msgstr "[branca nova]"
-#: builtin/fetch.c:917
+#: builtin/fetch.c:923
msgid "[new ref]"
msgstr "[referència nova]"
-#: builtin/fetch.c:956
+#: builtin/fetch.c:962
msgid "forced update"
msgstr "actualització forçada"
-#: builtin/fetch.c:961
+#: builtin/fetch.c:967
msgid "non-fast-forward"
msgstr "sense avanç ràpid"
-#: builtin/fetch.c:1065
-#, fuzzy
+#: builtin/fetch.c:1070
msgid ""
"Fetch normally indicates which branches had a forced update,\n"
"but that check has been disabled. To re-enable, use '--show-forced-updates'\n"
"flag or run 'git config fetch.showForcedUpdates true'."
msgstr ""
-"L'obtenció normalment indica quines branques tenien una actualització "
-"forçada però aquesta comprovació s'ha desactivat. Per tornar a habilitar "
-"utilitzeu l'indicador «--show-forced-updates» o executeu «git config fetch."
-"showForcedUpdates true»."
+"L'obtenció normalment indica quines branques tenien una actualització forçada,\n"
+"però aquesta comprovació s'ha desactivat. Per tornar a habilitar-la, utilitzeu\n"
+"«--show-forced-updates» o executeu «git config fetch.showForcedUpdates true»."
-#: builtin/fetch.c:1069
-#, fuzzy, c-format
+#: builtin/fetch.c:1074
+#, c-format
msgid ""
"It took %.2f seconds to check forced updates. You can use\n"
-"'--no-show-forced-updates' or run 'git config fetch.showForcedUpdates "
-"false'\n"
+"'--no-show-forced-updates' or run 'git config fetch.showForcedUpdates false'\n"
" to avoid this check.\n"
msgstr ""
-"S'ha trigat segons de 9% a comprovar les actualitzacions forçoses. Podeu "
-"utilitzar «--no-show-forced-updates» o executar «git config fetch."
-"showForcedUpdates false» per evitar aquesta comprovació."
+"S'ha trigat %.2f segons a comprovar les actualitzacions forçades. Podeu\n"
+"utilitzar «--no-show-forced-updates» o executar «git config \n"
+"fetch.showForcedUpdates false» per evitar aquesta comprovació.\n"
-#: builtin/fetch.c:1101
+#: builtin/fetch.c:1105
#, c-format
msgid "%s did not send all necessary objects\n"
msgstr "%s no ha enviat tots els objectes necessaris\n"
-#: builtin/fetch.c:1129
-#, c-format
-msgid "reject %s because shallow roots are not allowed to be updated"
+#: builtin/fetch.c:1134
+#, fuzzy, c-format
+msgid "rejected %s because shallow roots are not allowed to be updated"
msgstr ""
"rebutja %s perquè no es permet que les arrels superficials s'actualitzin"
-#: builtin/fetch.c:1206 builtin/fetch.c:1357
+#: builtin/fetch.c:1223 builtin/fetch.c:1371
#, c-format
msgid "From %.*s\n"
msgstr "De %.*s\n"
-#: builtin/fetch.c:1228
+#: builtin/fetch.c:1244
#, c-format
msgid ""
"some local refs could not be updated; try running\n"
@@ -15361,57 +15670,62 @@
" intenteu executar «git remote prune %s» per a eliminar\n"
" qualsevol branca antiga o conflictiva"
-#: builtin/fetch.c:1327
+#: builtin/fetch.c:1341
#, c-format
msgid " (%s will become dangling)"
msgstr " (%s es tornarà penjant)"
-#: builtin/fetch.c:1328
+#: builtin/fetch.c:1342
#, c-format
msgid " (%s has become dangling)"
msgstr " (%s s'ha tornat penjant)"
-#: builtin/fetch.c:1360
+#: builtin/fetch.c:1374
msgid "[deleted]"
msgstr "[suprimit]"
-#: builtin/fetch.c:1361 builtin/remote.c:1118
+#: builtin/fetch.c:1375 builtin/remote.c:1128
msgid "(none)"
msgstr "(cap)"
-#: builtin/fetch.c:1384
+#: builtin/fetch.c:1398
#, c-format
msgid "Refusing to fetch into current branch %s of non-bare repository"
msgstr "S'està refusant obtenir en la branca actual %s d'un repositori no nu"
-#: builtin/fetch.c:1403
+#: builtin/fetch.c:1417
#, c-format
msgid "Option \"%s\" value \"%s\" is not valid for %s"
msgstr "L'opció «%s» amb valor «%s» no és vàlida per a %s"
-#: builtin/fetch.c:1406
+#: builtin/fetch.c:1420
#, c-format
msgid "Option \"%s\" is ignored for %s\n"
msgstr "S'ignora l'opció «%s» per a %s\n"
-#: builtin/fetch.c:1618
+#: builtin/fetch.c:1447
+#, fuzzy, c-format
+msgid "the object %s does not exist"
+msgstr "el camí «%s» no existeix"
+
+#: builtin/fetch.c:1633
msgid "multiple branches detected, incompatible with --set-upstream"
msgstr "s'han detectat múltiples branques, incompatible amb --set-upstream"
-#: builtin/fetch.c:1633
+#: builtin/fetch.c:1648
msgid "not setting upstream for a remote remote-tracking branch"
msgstr ""
"no s'està configurant la font per a una branca remota amb seguiment remot"
-#: builtin/fetch.c:1635
+#: builtin/fetch.c:1650
msgid "not setting upstream for a remote tag"
msgstr "no s'està configurant la font d'una etiqueta remota"
-#: builtin/fetch.c:1637
+#: builtin/fetch.c:1652
msgid "unknown branch type"
msgstr "tipus de branca desconegut"
-#: builtin/fetch.c:1639
+#: builtin/fetch.c:1654
msgid ""
"no source branch found.\n"
"you need to specify exactly one branch with the --set-upstream option."
@@ -15419,22 +15733,22 @@
"no s'ha trobat cap branca d'origen.\n"
"Heu d'especificar exactament una branca amb l'opció --set-upstream."
-#: builtin/fetch.c:1768 builtin/fetch.c:1831
+#: builtin/fetch.c:1783 builtin/fetch.c:1846
#, c-format
msgid "Fetching %s\n"
msgstr "S'està obtenint %s\n"
-#: builtin/fetch.c:1778 builtin/fetch.c:1833 builtin/remote.c:101
+#: builtin/fetch.c:1793 builtin/fetch.c:1848 builtin/remote.c:101
#, c-format
msgid "Could not fetch %s"
msgstr "No s'ha pogut obtenir %s"
-#: builtin/fetch.c:1790
+#: builtin/fetch.c:1805
#, c-format
msgid "could not fetch '%s' (exit code: %d)\n"
msgstr "no s'ha pogut obtenir «%s» (codi de sortida: %d)\n"
-#: builtin/fetch.c:1894
+#: builtin/fetch.c:1909
msgid ""
"No remote repository specified. Please, specify either a URL or a\n"
"remote name from which new revisions should be fetched."
@@ -15442,65 +15756,69 @@
"Cap repositori remot especificat. Especifiqueu un URL o\n"
"un nom remot del qual es deuen obtenir les revisions noves."
-#: builtin/fetch.c:1930
+#: builtin/fetch.c:1945
msgid "You need to specify a tag name."
msgstr "Necessiteu especificar un nom d'etiqueta."
-#: builtin/fetch.c:1995
+#: builtin/fetch.c:2009
+msgid "--negotiate-only needs one or more --negotiate-tip=*"
+msgstr "--negotiate-only necessita un o més --negotiate-tip=*"
+
+#: builtin/fetch.c:2013
msgid "Negative depth in --deepen is not supported"
msgstr "No s'admet una profunditat negativa en --deepen"
-#: builtin/fetch.c:1997
+#: builtin/fetch.c:2015
msgid "--deepen and --depth are mutually exclusive"
msgstr "--deepen i --depth són mútuament excloents"
-#: builtin/fetch.c:2002
+#: builtin/fetch.c:2020
msgid "--depth and --unshallow cannot be used together"
msgstr "--depth i --unshallow no es poden usar junts"
-#: builtin/fetch.c:2004
+#: builtin/fetch.c:2022
msgid "--unshallow on a complete repository does not make sense"
msgstr "--unshallow en un repositori complet no té sentit"
-#: builtin/fetch.c:2021
+#: builtin/fetch.c:2039
msgid "fetch --all does not take a repository argument"
msgstr "fetch --all no accepta un argument de repositori"
-#: builtin/fetch.c:2023
+#: builtin/fetch.c:2041
msgid "fetch --all does not make sense with refspecs"
msgstr "fetch --all no té sentit amb especificacions de referència"
-#: builtin/fetch.c:2032
+#: builtin/fetch.c:2050
#, c-format
msgid "No such remote or remote group: %s"
msgstr "No existeix un remot ni un grup remot: %s"
-#: builtin/fetch.c:2039
+#: builtin/fetch.c:2057
msgid "Fetching a group and specifying refspecs does not make sense"
msgstr "Obtenir un grup i especificar referències no té sentit"
-#: builtin/fetch.c:2055
+#: builtin/fetch.c:2073
msgid "must supply remote when using --negotiate-only"
-msgstr ""
+msgstr "s'ha de subministrar el remot en usar --negotiate-only"
-#: builtin/fetch.c:2060
+#: builtin/fetch.c:2078
msgid "Protocol does not support --negotiate-only, exiting."
-msgstr ""
+msgstr "El protocol no admet --negotiate-only, se surt."
-#: builtin/fetch.c:2079
+#: builtin/fetch.c:2097
msgid ""
-"--filter can only be used with the remote configured in extensions."
-"partialclone"
+"--filter can only be used with the remote configured in "
+"extensions.partialclone"
msgstr ""
-"--filter només es pot utilitzar amb el remot configurat en extensions."
-"partialclone"
+"--filter només es pot utilitzar amb el remot configurat en "
+"extensions.partialclone"
-#: builtin/fetch.c:2083
+#: builtin/fetch.c:2101
#, fuzzy
msgid "--atomic can only be used when fetching from one remote"
msgstr "L'opció --exec només es pot usar juntament amb --remote"
-#: builtin/fetch.c:2087
+#: builtin/fetch.c:2105
#, fuzzy
msgid "--stdin can only be used when fetching from one remote"
msgstr "L'opció --exec només es pot usar juntament amb --remote"
@@ -15570,7 +15888,7 @@
msgid "show only <n> matched refs"
msgstr "mostra només <n> referències coincidents"
-#: builtin/for-each-ref.c:41 builtin/tag.c:483
+#: builtin/for-each-ref.c:41 builtin/tag.c:481
msgid "respect format colors"
msgstr "respecta els colors del format"
@@ -15598,20 +15916,20 @@
msgid "git for-each-repo --config=<config> <command-args>"
msgstr "git for-each-repo --config=<config> <command-args>"
-#: builtin/for-each-repo.c:37
+#: builtin/for-each-repo.c:34
msgid "config"
msgstr "config"
-#: builtin/for-each-repo.c:38
+#: builtin/for-each-repo.c:35
#, fuzzy
msgid "config key storing a list of repository paths"
msgstr "clau de configuració emmagatzemant una llista de camins de repositori"
-#: builtin/for-each-repo.c:46
+#: builtin/for-each-repo.c:43
msgid "missing --config=<config>"
msgstr "falta --config=<config>"
-#: builtin/fsck.c:69 builtin/fsck.c:127 builtin/fsck.c:128
+#: builtin/fsck.c:69 builtin/fsck.c:128 builtin/fsck.c:129
msgid "unknown"
msgstr "desconegut"
@@ -15627,229 +15945,240 @@
msgid "warning in %s %s: %s"
msgstr "avís en %s %s: %s"
-#: builtin/fsck.c:123 builtin/fsck.c:126
+#: builtin/fsck.c:124 builtin/fsck.c:127
#, c-format
msgid "broken link from %7s %s"
msgstr "enllaç trencat de %7s %s"
-#: builtin/fsck.c:135
+#: builtin/fsck.c:136
msgid "wrong object type in link"
msgstr "tipus d'objecte incorrecte en l'enllaç"
-#: builtin/fsck.c:151
+#: builtin/fsck.c:152
#, fuzzy, c-format
msgid ""
"broken link from %7s %s\n"
" to %7s %s"
msgstr "enllaç trencat del 7% al 7%"
-#: builtin/fsck.c:263
+#: builtin/fsck.c:264
#, c-format
msgid "missing %s %s"
msgstr "manca %s %s"
-#: builtin/fsck.c:290
+#: builtin/fsck.c:291
#, c-format
msgid "unreachable %s %s"
msgstr "inabastable %s %s"
-#: builtin/fsck.c:310
+#: builtin/fsck.c:311
#, fuzzy, c-format
msgid "dangling %s %s"
msgstr "per cent"
-#: builtin/fsck.c:320
+#: builtin/fsck.c:321
#, fuzzy
msgid "could not create lost-found"
msgstr "no s'ha pogut crear el trobat perdut"
-#: builtin/fsck.c:331
+#: builtin/fsck.c:332
#, c-format
msgid "could not finish '%s'"
msgstr "no s'ha pogut finalitzar «%s»"
-#: builtin/fsck.c:348
+#: builtin/fsck.c:349
#, c-format
msgid "Checking %s"
msgstr "S'està comprovant %s"
-#: builtin/fsck.c:386
+#: builtin/fsck.c:387
#, c-format
msgid "Checking connectivity (%d objects)"
msgstr "S'està comprovant la connectivitat (%d objectes)"
-#: builtin/fsck.c:405
+#: builtin/fsck.c:406
#, c-format
msgid "Checking %s %s"
msgstr "S'està comprovant %s %s"
-#: builtin/fsck.c:410
+#: builtin/fsck.c:411
msgid "broken links"
msgstr "enllaços trencats"
-#: builtin/fsck.c:419
+#: builtin/fsck.c:420
#, c-format
msgid "root %s"
msgstr "arrel %s"
-#: builtin/fsck.c:427
+#: builtin/fsck.c:428
#, fuzzy, c-format
msgid "tagged %s %s (%s) in %s"
msgstr "percentatges marcats"
-#: builtin/fsck.c:456
+#: builtin/fsck.c:457
#, c-format
msgid "%s: object corrupt or missing"
msgstr "%s: objecte corrupte o no trobat"
-#: builtin/fsck.c:481
+#: builtin/fsck.c:482
#, c-format
msgid "%s: invalid reflog entry %s"
msgstr "%s: entrada de referència no vàlida %s"
-#: builtin/fsck.c:495
+#: builtin/fsck.c:496
#, c-format
msgid "Checking reflog %s->%s"
msgstr "S'està comprovant reflog %s->%s"
-#: builtin/fsck.c:529
+#: builtin/fsck.c:530
#, c-format
msgid "%s: invalid sha1 pointer %s"
msgstr "%s: punter %s sha1 no vàlid"
-#: builtin/fsck.c:536
+#: builtin/fsck.c:537
#, c-format
msgid "%s: not a commit"
msgstr "%s: no és una comissió"
-#: builtin/fsck.c:590
+#: builtin/fsck.c:591
msgid "notice: No default references"
msgstr "avís: no hi ha referències per defecte"
-#: builtin/fsck.c:605
+#: builtin/fsck.c:621
+#, fuzzy, c-format
+msgid "%s: hash-path mismatch, found at: %s"
+msgstr "el resum no coincideix %s"
+
+#: builtin/fsck.c:624
#, c-format
msgid "%s: object corrupt or missing: %s"
msgstr "%s: objecte corrupte o no trobat: %s"
-#: builtin/fsck.c:618
+#: builtin/fsck.c:628
+#, fuzzy, c-format
+msgid "%s: object is of unknown type '%s': %s"
+msgstr "l'objecte %s té un identificador de tipus %d desconegut"
+
+#: builtin/fsck.c:644
#, c-format
msgid "%s: object could not be parsed: %s"
msgstr "%s: no s'ha pogut analitzar l'objecte: %s"
-#: builtin/fsck.c:638
+#: builtin/fsck.c:664
#, c-format
msgid "bad sha1 file: %s"
msgstr "fitxer sha1 malmès: %s"
-#: builtin/fsck.c:653
+#: builtin/fsck.c:685
msgid "Checking object directory"
msgstr "S'està comprovant el directori d'objecte"
-#: builtin/fsck.c:656
+#: builtin/fsck.c:688
msgid "Checking object directories"
msgstr "S'estan comprovant els directoris d'objecte"
-#: builtin/fsck.c:671
+#: builtin/fsck.c:704
#, c-format
msgid "Checking %s link"
msgstr "S'està comprovant l'enllaç %s"
-#: builtin/fsck.c:676 builtin/index-pack.c:866
+#: builtin/fsck.c:709 builtin/index-pack.c:859
#, c-format
msgid "invalid %s"
msgstr "%s no vàlid"
-#: builtin/fsck.c:683
+#: builtin/fsck.c:716
#, c-format
msgid "%s points to something strange (%s)"
msgstr "%s apunta a una cosa estranya (%s)"
-#: builtin/fsck.c:689
+#: builtin/fsck.c:722
#, c-format
msgid "%s: detached HEAD points at nothing"
msgstr "%s: el HEAD separat no apunta a res"
-#: builtin/fsck.c:693
+#: builtin/fsck.c:726
#, c-format
msgid "notice: %s points to an unborn branch (%s)"
msgstr "avís: %s apunta a una branca no nascuda (%s)"
-#: builtin/fsck.c:705
+#: builtin/fsck.c:738
msgid "Checking cache tree"
msgstr "S'està comprovant l'arbre de la memòria cau"
-#: builtin/fsck.c:710
+#: builtin/fsck.c:743
#, fuzzy, c-format
msgid "%s: invalid sha1 pointer in cache-tree"
msgstr "percentatges d'apuntador sha1 no vàlid a l'arbre de la memòria cau"
-#: builtin/fsck.c:719
+#: builtin/fsck.c:752
#, fuzzy
msgid "non-tree in cache-tree"
msgstr "no arbre en l'arbre de la memòria cau"
-#: builtin/fsck.c:750
+#: builtin/fsck.c:783
msgid "git fsck [<options>] [<object>...]"
msgstr "git fsck [<opcions>] [<objecte>...]"
-#: builtin/fsck.c:756
+#: builtin/fsck.c:789
msgid "show unreachable objects"
msgstr "mostra els objectes inabastables"
-#: builtin/fsck.c:757
+#: builtin/fsck.c:790
msgid "show dangling objects"
msgstr "mostra els objectes penjants"
-#: builtin/fsck.c:758
+#: builtin/fsck.c:791
msgid "report tags"
msgstr "informa de les etiquetes"
-#: builtin/fsck.c:759
+#: builtin/fsck.c:792
msgid "report root nodes"
msgstr "informa dels nodes d'arrel"
-#: builtin/fsck.c:760
+#: builtin/fsck.c:793
msgid "make index objects head nodes"
msgstr "fes els objectes d'índex nodes de cap"
-#: builtin/fsck.c:761
+#: builtin/fsck.c:794
msgid "make reflogs head nodes (default)"
-msgstr "fes que els registres de referències siguin nodes de cap (per defecte)"
+msgstr ""
+"fes que els registres de referències siguin nodes de cap (per defecte)"
-#: builtin/fsck.c:762
+#: builtin/fsck.c:795
msgid "also consider packs and alternate objects"
msgstr "també considera els paquets i els objectes alternatius"
-#: builtin/fsck.c:763
+#: builtin/fsck.c:796
msgid "check only connectivity"
msgstr "comprova només la connectivitat"
-#: builtin/fsck.c:764 builtin/mktag.c:75
+#: builtin/fsck.c:797 builtin/mktag.c:76
msgid "enable more strict checking"
msgstr "habilita la comprovació més estricta"
-#: builtin/fsck.c:766
+#: builtin/fsck.c:799
msgid "write dangling objects in .git/lost-found"
msgstr "escriu objectes penjants a .git/lost-found"
-#: builtin/fsck.c:767 builtin/prune.c:134
+#: builtin/fsck.c:800 builtin/prune.c:134
msgid "show progress"
msgstr "mostra el progrés"
-#: builtin/fsck.c:768
+#: builtin/fsck.c:801
msgid "show verbose names for reachable objects"
msgstr "mostra els noms detallats dels objectes abastables"
-#: builtin/fsck.c:827 builtin/index-pack.c:262
+#: builtin/fsck.c:860 builtin/index-pack.c:261
msgid "Checking objects"
msgstr "S'estan comprovant els objectes"
-#: builtin/fsck.c:855
+#: builtin/fsck.c:888
#, c-format
msgid "%s: object missing"
msgstr "%s: falta l'objecte"
-#: builtin/fsck.c:866
+#: builtin/fsck.c:899
#, c-format
msgid "invalid parameter: expected sha1, got '%s'"
msgstr "paràmetre no vàlid: s'esperava sha1, s'ha obtingut «%s»"
@@ -15873,16 +16202,16 @@
msgid "cannot stat '%s'"
msgstr "no es pot fer stat en «%s»"
-#: builtin/gc.c:496 builtin/notes.c:240 builtin/tag.c:573
+#: builtin/gc.c:496 builtin/notes.c:238 builtin/tag.c:574
#, c-format
msgid "cannot read '%s'"
msgstr "no es pot llegir «%s»"
#: builtin/gc.c:503
-#, c-format
+#, fuzzy, c-format
msgid ""
"The last gc run reported the following. Please correct the root cause\n"
-"and remove %s.\n"
+"and remove %s\n"
"Automatic cleanup will not be performed until the file is removed.\n"
"\n"
"%s"
@@ -15907,17 +16236,17 @@
#: builtin/gc.c:557
msgid "force running gc even if there may be another gc running"
-msgstr "força l'execució de gc encara que hi pugui haver un altre gc executant"
+msgstr ""
+"força l'execució de gc encara que hi pugui haver un altre gc executant"
#: builtin/gc.c:560
-#, fuzzy
msgid "repack all other packs except the largest pack"
msgstr "reempaqueta tots els altres paquets excepte el paquet més gran"
#: builtin/gc.c:576
-#, fuzzy, c-format
+#, c-format
msgid "failed to parse gc.logexpiry value %s"
-msgstr "no s'ha pogut analitzar el valor de gc.logexpiry dels percentatges"
+msgstr "no s'ha pogut analitzar el valor %s de gc.logexpiry"
#: builtin/gc.c:587
#, fuzzy, c-format
@@ -15947,14 +16276,16 @@
msgid ""
"gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
msgstr ""
-"gc ja s'està executant en la màquina «%s» pid %<PRIuMAX> (useu --force si no)"
+"gc ja s'està executant en la màquina «%s» pid %<PRIuMAX> (useu --force si "
+"no)"
#: builtin/gc.c:705
msgid ""
-"There are too many unreachable loose objects; run 'git prune' to remove them."
+"There are too many unreachable loose objects; run 'git prune' to remove "
+"them."
msgstr ""
-"Hi ha massa objectes solts inabastables; executeu «git prune» per a eliminar-"
-"los."
+"Hi ha massa objectes solts inabastables; executeu «git prune» per a "
+"eliminar-los."
#: builtin/gc.c:715
msgid ""
@@ -15971,172 +16302,217 @@
msgid "unrecognized --schedule argument '%s'"
msgstr "argument --schedule no reconegut, «%s»"
-#: builtin/gc.c:869
-#, fuzzy
+#: builtin/gc.c:868
msgid "failed to write commit-graph"
-msgstr "s'ha produït un error en escriure l'objecte de comissió"
+msgstr "s'ha produït un error en escriure el graf de comissions"
-#: builtin/gc.c:905
+#: builtin/gc.c:904
#, fuzzy
msgid "failed to prefetch remotes"
msgstr "s'ha produït un error en omplir els remots"
-#: builtin/gc.c:1022
+#: builtin/gc.c:1020
#, fuzzy
msgid "failed to start 'git pack-objects' process"
msgstr "no s'ha pogut iniciar el pack-objects"
-#: builtin/gc.c:1039
+#: builtin/gc.c:1037
#, fuzzy
msgid "failed to finish 'git pack-objects' process"
msgstr "no s'ha pogut finalitzar el pack-objects"
-#: builtin/gc.c:1091
+#: builtin/gc.c:1089
#, fuzzy
msgid "failed to write multi-pack-index"
msgstr "no s'han pogut netejar els percentatges multi-paquet"
-#: builtin/gc.c:1109
+#: builtin/gc.c:1105
#, fuzzy
msgid "'git multi-pack-index expire' failed"
msgstr "l'índex múltiple és massa petit"
-#: builtin/gc.c:1170
+#: builtin/gc.c:1164
#, fuzzy
msgid "'git multi-pack-index repack' failed"
msgstr "no s'ha pogut carregar l'índex del paquet per al fitxer de paquet %s"
-#: builtin/gc.c:1179
+#: builtin/gc.c:1173
#, fuzzy
msgid ""
"skipping incremental-repack task because core.multiPackIndex is disabled"
msgstr ""
-"s'està ometent la tasca de reempaquetar incremental perquè core."
-"multiPackIndex està desactivat"
+"s'està ometent la tasca de reempaquetar incremental perquè "
+"core.multiPackIndex està desactivat"
-#: builtin/gc.c:1283
+#: builtin/gc.c:1277
#, fuzzy, c-format
msgid "lock file '%s' exists, skipping maintenance"
msgstr "el fitxer de bloqueig «%s» existeix s'omet el manteniment"
-#: builtin/gc.c:1313
+#: builtin/gc.c:1307
#, c-format
msgid "task '%s' failed"
msgstr "la tasca «%s» ha fallat"
-#: builtin/gc.c:1395
+#: builtin/gc.c:1389
#, fuzzy, c-format
msgid "'%s' is not a valid task"
msgstr "«%s» no és un terme vàlid"
-#: builtin/gc.c:1400
+#: builtin/gc.c:1394
#, fuzzy, c-format
msgid "task '%s' cannot be selected multiple times"
msgstr "«%s» no es pot usar amb %s"
-#: builtin/gc.c:1415
+#: builtin/gc.c:1409
#, fuzzy
msgid "run tasks based on the state of the repository"
msgstr "executa les tasques basades en l'estat del repositori"
-#: builtin/gc.c:1416
+#: builtin/gc.c:1410
msgid "frequency"
msgstr "freqüència"
-#: builtin/gc.c:1417
+#: builtin/gc.c:1411
msgid "run tasks based on frequency"
msgstr "executa les tasques basant-se en freqüència"
-#: builtin/gc.c:1420
+#: builtin/gc.c:1414
#, fuzzy
msgid "do not report progress or other information over stderr"
msgstr "no informeu sobre el progrés o altra informació sobre stderr"
-#: builtin/gc.c:1421
+#: builtin/gc.c:1415
msgid "task"
msgstr "tasca"
-#: builtin/gc.c:1422
+#: builtin/gc.c:1416
msgid "run a specific task"
msgstr "executa una tasca específica"
-#: builtin/gc.c:1439
+#: builtin/gc.c:1433
#, fuzzy
msgid "use at most one of --auto and --schedule=<frequency>"
msgstr "usa com a màxim un de --auto i --schedule=<frequency>"
-#: builtin/gc.c:1482
+#: builtin/gc.c:1476
#, fuzzy
msgid "failed to run 'git config'"
msgstr "no s'ha pogut executar «git status» a «%s»"
-#: builtin/gc.c:1547
+#: builtin/gc.c:1628
#, fuzzy, c-format
msgid "failed to expand path '%s'"
msgstr "s'ha produït un error en crear el camí «%s»%s"
-#: builtin/gc.c:1576
+#: builtin/gc.c:1655 builtin/gc.c:1693
#, fuzzy
msgid "failed to start launchctl"
msgstr "S'ha produït un error'ha produït un error en iniciar emacsclient."
-#: builtin/gc.c:1613
+#: builtin/gc.c:1768 builtin/gc.c:2221
#, fuzzy, c-format
msgid "failed to create directories for '%s'"
msgstr "s'ha produït un error en crear el directori «%s»"
-#: builtin/gc.c:1674
+#: builtin/gc.c:1795
#, fuzzy, c-format
msgid "failed to bootstrap service %s"
msgstr "s'ha produït un error en eliminar %s"
-#: builtin/gc.c:1745
+#: builtin/gc.c:1888
#, fuzzy
msgid "failed to create temp xml file"
msgstr "no s'han pogut crear els fitxers de sortida"
-#: builtin/gc.c:1835
+#: builtin/gc.c:1978
#, fuzzy
msgid "failed to start schtasks"
msgstr "s'ha produït un error en fer stat a %s"
-#: builtin/gc.c:1879
+#: builtin/gc.c:2047
#, fuzzy
msgid "failed to run 'crontab -l'; your system might not support 'cron'"
msgstr ""
"no s'ha pogut executar «crontab -l»; el vostre sistema podria no admetre "
"«cron»"
-#: builtin/gc.c:1896
+#: builtin/gc.c:2064
#, fuzzy
msgid "failed to run 'crontab'; your system might not support 'cron'"
msgstr ""
"no s'ha pogut executar «crontab»; el vostre sistema podria no admetre «cron»"
-#: builtin/gc.c:1900
+#: builtin/gc.c:2068
#, fuzzy
msgid "failed to open stdin of 'crontab'"
msgstr "s'ha produït un error en obrir «%s»"
-#: builtin/gc.c:1942
+#: builtin/gc.c:2110
msgid "'crontab' died"
msgstr "«crontab» ha mort"
-#: builtin/gc.c:1976
+#: builtin/gc.c:2175
+#, fuzzy
+msgid "failed to start systemctl"
+msgstr "s'ha produït un error en fer stat a %s"
+
+#: builtin/gc.c:2185
+#, fuzzy
+msgid "failed to run systemctl"
+msgstr "no s'ha pogut executar «%s»"
+
+#: builtin/gc.c:2194 builtin/gc.c:2199 builtin/worktree.c:62
+#: builtin/worktree.c:945
+#, c-format
+msgid "failed to delete '%s'"
+msgstr "s'ha produït un error en suprimir «%s»"
+
+#: builtin/gc.c:2379
+#, fuzzy, c-format
+msgid "unrecognized --scheduler argument '%s'"
+msgstr "argument --schedule no reconegut, «%s»"
+
+#: builtin/gc.c:2404
+#, fuzzy
+msgid "neither systemd timers nor crontab are available"
+msgstr "ni els temporitzadors de systemd ni el crontab estan disponibles"
+
+#: builtin/gc.c:2419
+#, fuzzy, c-format
+msgid "%s scheduler is not available"
+msgstr "%s no és disponible"
+
+#: builtin/gc.c:2433
#, fuzzy
msgid "another process is scheduling background maintenance"
msgstr "un altre procés és planificar el manteniment en segon pla"
-#: builtin/gc.c:2000
+#: builtin/gc.c:2455
+#, fuzzy
+msgid "git maintenance start [--scheduler=<scheduler>]"
+msgstr "git manteniment start ---scheduler=<scheduler>]"
+
+#: builtin/gc.c:2464
+#, fuzzy
+msgid "scheduler"
+msgstr "planificador"
+
+#: builtin/gc.c:2465
+#, fuzzy
+msgid "scheduler to trigger git maintenance run"
+msgstr "planificador per activar l'execució de manteniment del git"
+
+#: builtin/gc.c:2479
#, fuzzy
msgid "failed to add repo to global config"
msgstr "no s'ha pogut afegir el fitxer de paquet «%s»"
-#: builtin/gc.c:2010
+#: builtin/gc.c:2488
msgid "git maintenance <subcommand> [<options>]"
msgstr "git maintenance <subcommand> [<options>]"
-#: builtin/gc.c:2029
+#: builtin/gc.c:2507
#, fuzzy, c-format
msgid "invalid subcommand: %s"
msgstr "comissió no vàlida %s"
@@ -16145,12 +16521,12 @@
msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
msgstr "git grep [<opcions>] [-e] <patró> [<revisió>...] [[--] <camí>...]"
-#: builtin/grep.c:223
+#: builtin/grep.c:239
#, c-format
msgid "grep: failed to create thread: %s"
msgstr "grep: s'ha produït un error en crear fil: %s"
-#: builtin/grep.c:277
+#: builtin/grep.c:293
#, c-format
msgid "invalid number of threads specified (%d) for %s"
msgstr "s'ha especificat un nombre de fils no vàlid (%d) per a %s"
@@ -16158,368 +16534,379 @@
#. TRANSLATORS: %s is the configuration
#. variable for tweaking threads, currently
#. grep.threads
-#.
-#: builtin/grep.c:285 builtin/index-pack.c:1590 builtin/index-pack.c:1793
-#: builtin/pack-objects.c:2969
+#: builtin/grep.c:301 builtin/index-pack.c:1582 builtin/index-pack.c:1785
+#: builtin/pack-objects.c:3142
#, c-format
msgid "no threads support, ignoring %s"
msgstr "no s'admeten fils, s'ignorarà %s"
-#: builtin/grep.c:473 builtin/grep.c:603 builtin/grep.c:643
+#: builtin/grep.c:488 builtin/grep.c:617 builtin/grep.c:657
#, c-format
msgid "unable to read tree (%s)"
msgstr "no s'ha pogut llegir l'arbre (%s)"
-#: builtin/grep.c:658
+#: builtin/grep.c:672
#, c-format
msgid "unable to grep from object of type %s"
msgstr "no es pot fer grep des d'un objecte de tipus %s"
-#: builtin/grep.c:739
+#: builtin/grep.c:752
#, c-format
msgid "switch `%c' expects a numerical value"
msgstr "l'opció «%c» espera un valor numèric"
-#: builtin/grep.c:838
+#: builtin/grep.c:851
msgid "search in index instead of in the work tree"
msgstr "cerca en l'índex en lloc de l'arbre de treball"
-#: builtin/grep.c:840
+#: builtin/grep.c:853
msgid "find in contents not managed by git"
msgstr "cerca en continguts no gestionats per git"
-#: builtin/grep.c:842
+#: builtin/grep.c:855
msgid "search in both tracked and untracked files"
msgstr "cerca tant en fitxers seguits com en no seguits"
-#: builtin/grep.c:844
+#: builtin/grep.c:857
msgid "ignore files specified via '.gitignore'"
msgstr "ignora els fitxers especificats mitjançant «.gitignore»"
-#: builtin/grep.c:846
+#: builtin/grep.c:859
msgid "recursively search in each submodule"
msgstr "cerca recursivament a cada submòdul"
-#: builtin/grep.c:849
+#: builtin/grep.c:862
msgid "show non-matching lines"
msgstr "mostra les línies no coincidents"
-#: builtin/grep.c:851
+#: builtin/grep.c:864
msgid "case insensitive matching"
-msgstr "coincidència insensible a majúscula i minúscula"
+msgstr "coincidència no distingeix entre majúscules i minúscules"
-#: builtin/grep.c:853
+#: builtin/grep.c:866
msgid "match patterns only at word boundaries"
msgstr "coincideix amb els patrons només als límits de paraula"
-#: builtin/grep.c:855
+#: builtin/grep.c:868
msgid "process binary files as text"
msgstr "processa els fitxers binaris com a text"
-#: builtin/grep.c:857
+#: builtin/grep.c:870
msgid "don't match patterns in binary files"
msgstr "no coincideixis amb els patrons en els fitxers binaris"
-#: builtin/grep.c:860
+#: builtin/grep.c:873
msgid "process binary files with textconv filters"
msgstr "processa els fitxers binaris amb filtres de textconv"
-#: builtin/grep.c:862
+#: builtin/grep.c:875
msgid "search in subdirectories (default)"
msgstr "cerca als subdirectoris (per defecte)"
-#: builtin/grep.c:864
+#: builtin/grep.c:877
msgid "descend at most <depth> levels"
msgstr "descendeix com a màxim <profunditat> nivells"
-#: builtin/grep.c:868
+#: builtin/grep.c:881
msgid "use extended POSIX regular expressions"
msgstr "usa les expressions regulars POSIX ampliades"
-#: builtin/grep.c:871
+#: builtin/grep.c:884
msgid "use basic POSIX regular expressions (default)"
msgstr "usa les expressions regulars POSIX bàsiques (per defecte)"
-#: builtin/grep.c:874
+#: builtin/grep.c:887
msgid "interpret patterns as fixed strings"
msgstr "interpreta els patrons com a cadenes fixes"
-#: builtin/grep.c:877
+#: builtin/grep.c:890
msgid "use Perl-compatible regular expressions"
msgstr "usa les expressions regulars compatibles amb Perl"
-#: builtin/grep.c:880
+#: builtin/grep.c:893
msgid "show line numbers"
msgstr "mostra els números de línia"
-#: builtin/grep.c:881
+#: builtin/grep.c:894
msgid "show column number of first match"
msgstr "mostra el nombre de columna de la primera coincidència"
-#: builtin/grep.c:882
+#: builtin/grep.c:895
msgid "don't show filenames"
msgstr "no mostris els noms de fitxer"
-#: builtin/grep.c:883
+#: builtin/grep.c:896
msgid "show filenames"
msgstr "mostra els noms de fitxer"
-#: builtin/grep.c:885
+#: builtin/grep.c:898
msgid "show filenames relative to top directory"
msgstr "mostra els noms de fitxer relatius al directori superior"
-#: builtin/grep.c:887
+#: builtin/grep.c:900
msgid "show only filenames instead of matching lines"
msgstr "mostra només els noms de fitxer en lloc de les línies coincidents"
-#: builtin/grep.c:889
+#: builtin/grep.c:902
msgid "synonym for --files-with-matches"
msgstr "sinònim de --files-with-matches"
-#: builtin/grep.c:892
+#: builtin/grep.c:905
msgid "show only the names of files without match"
msgstr "mostra només els noms dels fitxers sense coincidència"
-#: builtin/grep.c:894
+#: builtin/grep.c:907
msgid "print NUL after filenames"
msgstr "imprimeix NUL després dels noms de fitxer"
-#: builtin/grep.c:897
+#: builtin/grep.c:910
msgid "show only matching parts of a line"
msgstr "mostra només les parts de coincidents de la línia"
-#: builtin/grep.c:899
+#: builtin/grep.c:912
msgid "show the number of matches instead of matching lines"
msgstr "mostra el nombre de coincidències en lloc de les línies coincidents"
-#: builtin/grep.c:900
+#: builtin/grep.c:913
msgid "highlight matches"
msgstr "ressalta les coincidències"
-#: builtin/grep.c:902
+#: builtin/grep.c:915
msgid "print empty line between matches from different files"
msgstr "imprimeix una línia buida entre coincidències de fitxers distints"
-#: builtin/grep.c:904
+#: builtin/grep.c:917
msgid "show filename only once above matches from same file"
msgstr ""
"mostra el nom de fitxer només una vegada a dalt de les coincidències del "
"mateix fitxer"
-#: builtin/grep.c:907
+#: builtin/grep.c:920
msgid "show <n> context lines before and after matches"
msgstr "mostra <n> línies de context abans i després d'una coincidència"
-#: builtin/grep.c:910
+#: builtin/grep.c:923
msgid "show <n> context lines before matches"
msgstr "mostra <n> línies de context abans d'una coincidència"
-#: builtin/grep.c:912
+#: builtin/grep.c:925
msgid "show <n> context lines after matches"
msgstr "mostra <n> línies de context després d'una coincidència"
-#: builtin/grep.c:914
+#: builtin/grep.c:927
msgid "use <n> worker threads"
msgstr "usa <n> fils de treball"
-#: builtin/grep.c:915
+#: builtin/grep.c:928
msgid "shortcut for -C NUM"
msgstr "drecera per -C NUM"
-#: builtin/grep.c:918
+#: builtin/grep.c:931
msgid "show a line with the function name before matches"
msgstr "mostra una línia amb el nom de funció abans de les coincidències"
-#: builtin/grep.c:920
+#: builtin/grep.c:933
msgid "show the surrounding function"
msgstr "mostra la funció circumdant"
-#: builtin/grep.c:923
+#: builtin/grep.c:936
msgid "read patterns from file"
msgstr "llegeix els patrons des d'un fitxer"
-#: builtin/grep.c:925
+#: builtin/grep.c:938
msgid "match <pattern>"
msgstr "coincideix amb <patró>"
-#: builtin/grep.c:927
+#: builtin/grep.c:940
msgid "combine patterns specified with -e"
msgstr "combina els patrons especificats amb -e"
-#: builtin/grep.c:939
+#: builtin/grep.c:952
msgid "indicate hit with exit status without output"
msgstr "indica coincidència amb estat de sortida sense sortida textual"
-#: builtin/grep.c:941
+#: builtin/grep.c:954
msgid "show only matches from files that match all patterns"
msgstr ""
"mostra només les coincidències dels fitxers que coincideixin amb tots els "
"patrons"
-#: builtin/grep.c:944
+#: builtin/grep.c:957
msgid "pager"
msgstr "paginador"
-#: builtin/grep.c:944
+#: builtin/grep.c:957
msgid "show matching files in the pager"
msgstr "mostra els fitxers coincidents en el paginador"
-#: builtin/grep.c:948
+#: builtin/grep.c:961
msgid "allow calling of grep(1) (ignored by this build)"
msgstr "permet la invocació de grep(1) (ignorat per aquesta compilació)"
-#: builtin/grep.c:1014
+#: builtin/grep.c:1027
msgid "no pattern given"
msgstr "no s'ha donat cap patró"
-#: builtin/grep.c:1050
+#: builtin/grep.c:1063
msgid "--no-index or --untracked cannot be used with revs"
msgstr "--no-index o --untracked no es pot usar amb revisions"
-#: builtin/grep.c:1058
+#: builtin/grep.c:1071
#, c-format
msgid "unable to resolve revision: %s"
msgstr "no s'ha pogut resoldre la revisió: %s"
-#: builtin/grep.c:1088
+#: builtin/grep.c:1101
msgid "--untracked not supported with --recurse-submodules"
msgstr "--untracked no s'admet amb --recurse-submodules"
-#: builtin/grep.c:1092
+#: builtin/grep.c:1105
msgid "invalid option combination, ignoring --threads"
msgstr "combinació d'opcions no vàlida, s'està ignorant --threads"
-#: builtin/grep.c:1095 builtin/pack-objects.c:3930
+#: builtin/grep.c:1108 builtin/pack-objects.c:4059
msgid "no threads support, ignoring --threads"
msgstr "no s'admeten fils, s'ignorarà --threads"
-#: builtin/grep.c:1098 builtin/index-pack.c:1587 builtin/pack-objects.c:2966
+#: builtin/grep.c:1111 builtin/index-pack.c:1579 builtin/pack-objects.c:3139
#, c-format
msgid "invalid number of threads specified (%d)"
msgstr "s'ha especificat un nombre de fils no vàlid (%d)"
-#: builtin/grep.c:1132
+#: builtin/grep.c:1145
msgid "--open-files-in-pager only works on the worktree"
msgstr "--open-files-in-pager només funciona en l'arbre de treball"
-#: builtin/grep.c:1158
+#: builtin/grep.c:1171
msgid "--cached or --untracked cannot be used with --no-index"
msgstr "--cached o --untracked no es pot usar amb --no-index"
-#: builtin/grep.c:1161
-#, fuzzy
+#: builtin/grep.c:1174
msgid "--untracked cannot be used with --cached"
-msgstr "--cached o --untracked no es pot usar amb --no-index"
+msgstr "--untracked no es pot usar amb --cached"
-#: builtin/grep.c:1167
-#, fuzzy
+#: builtin/grep.c:1180
msgid "--[no-]exclude-standard cannot be used for tracked contents"
-msgstr "--[no-]exclude-standard no es pot utilitzar per als continguts seguits"
+msgstr ""
+"--[no-]exclude-standard no es pot utilitzar per als continguts seguits"
-#: builtin/grep.c:1175
+#: builtin/grep.c:1188
#, fuzzy
msgid "both --cached and trees are given"
msgstr "es donen ambdós --cached i arbres"
-#: builtin/hash-object.c:85
+#: builtin/hash-object.c:83
msgid ""
"git hash-object [-t <type>] [-w] [--path=<file> | --no-filters] [--stdin] "
"[--] <file>..."
msgstr ""
-"git hash-object [-t <tipus>] [-w] [--path=<fitxer> | --no-filters] [--stdin] "
-"[--] <fitxer>..."
+"git hash-object [-t <tipus>] [-w] [--path=<fitxer> | --no-filters] [--stdin]"
+" [--] <fitxer>..."
-#: builtin/hash-object.c:86
+#: builtin/hash-object.c:84
msgid "git hash-object --stdin-paths"
msgstr "git hash-object --stdin-paths"
-#: builtin/hash-object.c:98
+#: builtin/hash-object.c:96
msgid "object type"
msgstr "tipus d'objecte"
-#: builtin/hash-object.c:99
+#: builtin/hash-object.c:97
msgid "write the object into the object database"
msgstr "escriu l'objecte a la base de dades d'objectes"
-#: builtin/hash-object.c:101
+#: builtin/hash-object.c:99
msgid "read the object from stdin"
msgstr "llegeix l'objecte des de stdin"
-#: builtin/hash-object.c:103
+#: builtin/hash-object.c:101
msgid "store file as is without filters"
msgstr "emmagatzema el fitxer tal com és sense filtres"
-#: builtin/hash-object.c:104
+#: builtin/hash-object.c:102
msgid ""
"just hash any random garbage to create corrupt objects for debugging Git"
msgstr ""
"només suma qualsevol brossa aleatòria per a crear objectes malmesos per a "
"depurar al Git"
-#: builtin/hash-object.c:105
+#: builtin/hash-object.c:103
msgid "process file as it were from this path"
msgstr "processa el fitxer com si fos d'aquest camí"
-#: builtin/help.c:47
+#: builtin/help.c:55
msgid "print all available commands"
msgstr "imprimeix totes les ordres disponibles"
-#: builtin/help.c:48
+#: builtin/help.c:57
msgid "exclude guides"
msgstr "exclou guies"
-#: builtin/help.c:49
-msgid "print list of useful guides"
-msgstr "imprimeix la llista de guies útils"
-
-#: builtin/help.c:50
-msgid "print all configuration variable names"
-msgstr "imprimeix tots els noms de les variables de configuració"
-
-#: builtin/help.c:52
+#: builtin/help.c:58
msgid "show man page"
msgstr "mostra la pàgina de manual"
-#: builtin/help.c:53
+#: builtin/help.c:59
msgid "show manual in web browser"
msgstr "mostra la pàgina de manual en el navegador web"
-#: builtin/help.c:55
+#: builtin/help.c:61
msgid "show info page"
msgstr "mostra la pàgina d'informació"
-#: builtin/help.c:57
+#: builtin/help.c:63
msgid "print command description"
msgstr "imprimeix la descripció de l'ordre"
-#: builtin/help.c:62
-msgid "git help [--all] [--guides] [--man | --web | --info] [<command>]"
+#: builtin/help.c:65
+msgid "print list of useful guides"
+msgstr "imprimeix la llista de guies útils"
+
+#: builtin/help.c:67
+msgid "print all configuration variable names"
+msgstr "imprimeix tots els noms de les variables de configuració"
+
+#: builtin/help.c:78
+#, fuzzy
+msgid ""
+"git help [-a|--all] [--[no-]verbose]]\n"
+" [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
msgstr "git help [--all] [--guides] [--man | --web | --info] [<ordre>]"
-#: builtin/help.c:163
+#: builtin/help.c:80
+#, fuzzy
+msgid "git help [-g|--guides]"
+msgstr "git help --g|--guides]"
+
+#: builtin/help.c:81
+#, fuzzy
+msgid "git help [-c|--config]"
+msgstr "git help --c|--config]"
+
+#: builtin/help.c:196
#, c-format
msgid "unrecognized help format '%s'"
msgstr "format d'ajuda no reconegut «%s»"
-#: builtin/help.c:190
+#: builtin/help.c:223
msgid "Failed to start emacsclient."
-msgstr "S'ha produït un error'ha produït un error en iniciar emacsclient."
+msgstr "S'ha produït un error en iniciar emacsclient."
-#: builtin/help.c:203
+#: builtin/help.c:236
msgid "Failed to parse emacsclient version."
msgstr "S'ha produït un error en analitzar la versió d'emacsclient."
-#: builtin/help.c:211
+#: builtin/help.c:244
#, c-format
msgid "emacsclient version '%d' too old (< 22)."
msgstr "la versió d'emacsclient «%d» és massa vella (< 22)."
-#: builtin/help.c:229 builtin/help.c:251 builtin/help.c:261 builtin/help.c:269
+#: builtin/help.c:262 builtin/help.c:284 builtin/help.c:294 builtin/help.c:302
#, c-format
msgid "failed to exec '%s'"
msgstr "s'ha produït un error en executar «%s»"
-#: builtin/help.c:307
+#: builtin/help.c:340
#, c-format
msgid ""
"'%s': path for unsupported man viewer.\n"
@@ -16528,7 +16915,7 @@
"«%s»: camí a un visualitzador de manuals no compatible.\n"
"Considereu usar «man.<eina>.cmd» en lloc d'això."
-#: builtin/help.c:319
+#: builtin/help.c:352
#, c-format
msgid ""
"'%s': cmd for supported man viewer.\n"
@@ -16537,129 +16924,124 @@
"«%s»: ordre per a un visualitzador de manuals compatible.\n"
"Considereu usar «man.<eina>.path» en lloc d'això."
-#: builtin/help.c:436
+#: builtin/help.c:467
#, c-format
msgid "'%s': unknown man viewer."
msgstr "«%s»: visualitzador de manuals desconegut."
-#: builtin/help.c:453
+#: builtin/help.c:483
msgid "no man viewer handled the request"
msgstr "cap visualitzador de manuals ha gestionat la sol·licitud"
-#: builtin/help.c:461
+#: builtin/help.c:490
msgid "no info viewer handled the request"
msgstr "cap visualitzador d'informació ha gestionat la sol·licitud"
-#: builtin/help.c:520 builtin/help.c:531 git.c:348
+#: builtin/help.c:551 builtin/help.c:562 git.c:348
#, c-format
msgid "'%s' is aliased to '%s'"
msgstr "«%s» és un àlies de «%s»"
-#: builtin/help.c:534 git.c:380
+#: builtin/help.c:565 git.c:380
#, fuzzy, c-format
msgid "bad alias.%s string: %s"
msgstr "àlies incorrecte.%s string%s"
-#: builtin/help.c:563 builtin/help.c:593
+#: builtin/help.c:581
+#, fuzzy
+msgid "this option doesn't take any other arguments"
+msgstr "fetch --all no accepta un argument de repositori"
+
+#: builtin/help.c:602 builtin/help.c:629
#, c-format
msgid "usage: %s%s"
msgstr "ús: %s%s"
-#: builtin/help.c:577
+#: builtin/help.c:624
#, fuzzy
msgid "'git help config' for more information"
msgstr "'git help config' per a més informació"
-#: builtin/index-pack.c:222
+#: builtin/index-pack.c:221
#, c-format
msgid "object type mismatch at %s"
msgstr "hi ha una discordança de tipus d'objecte a %s"
-#: builtin/index-pack.c:242
+#: builtin/index-pack.c:241
#, c-format
msgid "did not receive expected object %s"
msgstr "no s'ha rebut l'objecte esperat %s"
-#: builtin/index-pack.c:245
+#: builtin/index-pack.c:244
#, c-format
msgid "object %s: expected type %s, found %s"
msgstr "objecte %s: s'esperava el tipus %s, s'ha trobat %s"
-#: builtin/index-pack.c:295
+#: builtin/index-pack.c:294
#, c-format
msgid "cannot fill %d byte"
msgid_plural "cannot fill %d bytes"
msgstr[0] "no es pot omplir %d octet"
-msgstr[1] "no es pot omplir %d octets"
+msgstr[1] "no es poden omplir %d octets"
-#: builtin/index-pack.c:305
+#: builtin/index-pack.c:304
msgid "early EOF"
msgstr "EOF prematur"
-#: builtin/index-pack.c:306
+#: builtin/index-pack.c:305
msgid "read error on input"
msgstr "error de lectura d'entrada"
-#: builtin/index-pack.c:318
+#: builtin/index-pack.c:317
msgid "used more bytes than were available"
msgstr "s'han usat més octets que hi havia disponibles"
-#: builtin/index-pack.c:325 builtin/pack-objects.c:624
+#: builtin/index-pack.c:324 builtin/pack-objects.c:756
msgid "pack too large for current definition of off_t"
msgstr "paquet massa gran per a la definició actual d'off_t"
-#: builtin/index-pack.c:328 builtin/unpack-objects.c:95
+#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
msgid "pack exceeds maximum allowed size"
msgstr "el paquet supera la mida màxima permesa"
-#: builtin/index-pack.c:343
-#, c-format
-msgid "unable to create '%s'"
-msgstr "no s'ha pogut crear «%s»"
-
-#: builtin/index-pack.c:349
-#, c-format
-msgid "cannot open packfile '%s'"
-msgstr "no es pot obrir el fitxer de paquet «%s»"
-
-#: builtin/index-pack.c:363
+#: builtin/index-pack.c:358
msgid "pack signature mismatch"
msgstr "hi ha una discordança de signatura de paquet"
-#: builtin/index-pack.c:365
+#: builtin/index-pack.c:360
#, c-format
msgid "pack version %<PRIu32> unsupported"
msgstr "la versió de paquet %<PRIu32> no és compatible"
-#: builtin/index-pack.c:383
+#: builtin/index-pack.c:376
#, c-format
msgid "pack has bad object at offset %<PRIuMAX>: %s"
msgstr "el paquet té un objecte incorrecte a la posició %<PRIuMAX>: %s"
-#: builtin/index-pack.c:489
+#: builtin/index-pack.c:482
#, c-format
msgid "inflate returned %d"
msgstr "la inflació ha retornat %d"
-#: builtin/index-pack.c:538
+#: builtin/index-pack.c:531
msgid "offset value overflow for delta base object"
msgstr ""
"desbordament de valor de desplaçament per a l'objecte base de diferències"
-#: builtin/index-pack.c:546
+#: builtin/index-pack.c:539
msgid "delta base offset is out of bound"
msgstr "el desplaçament de base de diferències està fora de límits"
-#: builtin/index-pack.c:554
+#: builtin/index-pack.c:547
#, c-format
msgid "unknown object type %d"
msgstr "tipus d'objecte desconegut %d"
-#: builtin/index-pack.c:585
+#: builtin/index-pack.c:578
msgid "cannot pread pack file"
msgstr "no es pot fer pread en el fitxer empaquetat"
-#: builtin/index-pack.c:587
+#: builtin/index-pack.c:580
#, c-format
msgid "premature end of pack file, %<PRIuMAX> byte missing"
msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
@@ -16667,204 +17049,201 @@
msgstr[1] ""
"el final del fitxer empaquetat és prematur, manquen %<PRIuMAX> octets"
-#: builtin/index-pack.c:613
+#: builtin/index-pack.c:606
msgid "serious inflate inconsistency"
msgstr "hi ha una inconsistència seriosa d'inflació"
-#: builtin/index-pack.c:758 builtin/index-pack.c:764 builtin/index-pack.c:788
-#: builtin/index-pack.c:827 builtin/index-pack.c:836
+#: builtin/index-pack.c:751 builtin/index-pack.c:757 builtin/index-pack.c:781
+#: builtin/index-pack.c:820 builtin/index-pack.c:829
#, c-format
msgid "SHA1 COLLISION FOUND WITH %s !"
msgstr "S'HA TROBAT UNA COL·LISIÓ SHA1 AMB %s !"
-#: builtin/index-pack.c:761 builtin/pack-objects.c:171
-#: builtin/pack-objects.c:231 builtin/pack-objects.c:326
+#: builtin/index-pack.c:754 builtin/pack-objects.c:292
+#: builtin/pack-objects.c:352 builtin/pack-objects.c:458
#, c-format
msgid "unable to read %s"
msgstr "no s'ha pogut llegir %s"
-#: builtin/index-pack.c:825
+#: builtin/index-pack.c:818
#, c-format
msgid "cannot read existing object info %s"
msgstr "no es pot llegir la informació d'objecte existent %s"
-#: builtin/index-pack.c:833
+#: builtin/index-pack.c:826
#, c-format
msgid "cannot read existing object %s"
msgstr "no es pot llegir l'objecte existent %s"
-#: builtin/index-pack.c:847
+#: builtin/index-pack.c:840
#, c-format
msgid "invalid blob object %s"
msgstr "objecte de blob no vàlid %s"
-#: builtin/index-pack.c:850 builtin/index-pack.c:869
+#: builtin/index-pack.c:843 builtin/index-pack.c:862
msgid "fsck error in packed object"
msgstr "fsck error en un objecte empaquetat"
-#: builtin/index-pack.c:871
+#: builtin/index-pack.c:864
#, c-format
msgid "Not all child objects of %s are reachable"
msgstr "No tots els objectes fills de %s són abastables"
-#: builtin/index-pack.c:932 builtin/index-pack.c:979
+#: builtin/index-pack.c:925 builtin/index-pack.c:972
msgid "failed to apply delta"
msgstr "s'ha produït un error en aplicar la diferència"
-#: builtin/index-pack.c:1162
+#: builtin/index-pack.c:1156
msgid "Receiving objects"
msgstr "S'estan rebent objectes"
-#: builtin/index-pack.c:1162
+#: builtin/index-pack.c:1156
msgid "Indexing objects"
msgstr "S'estan indexant objectes"
-#: builtin/index-pack.c:1196
+#: builtin/index-pack.c:1190
msgid "pack is corrupted (SHA1 mismatch)"
msgstr "el paquet és malmès (discordança SHA1)"
-#: builtin/index-pack.c:1201
+#: builtin/index-pack.c:1195
msgid "cannot fstat packfile"
msgstr "no es pot fer fstat en el fitxer de paquet"
-#: builtin/index-pack.c:1204
+#: builtin/index-pack.c:1198
msgid "pack has junk at the end"
msgstr "el paquet té brossa al seu final"
-#: builtin/index-pack.c:1216
+#: builtin/index-pack.c:1210
msgid "confusion beyond insanity in parse_pack_objects()"
msgstr "confusió més enllà de la bogeria en parse_pack_objects()"
-#: builtin/index-pack.c:1239
+#: builtin/index-pack.c:1233
msgid "Resolving deltas"
msgstr "S'estan resolent les diferències"
-#: builtin/index-pack.c:1250 builtin/pack-objects.c:2732
+#: builtin/index-pack.c:1244 builtin/pack-objects.c:2905
#, c-format
msgid "unable to create thread: %s"
msgstr "no s'ha pogut crear fil: %s"
-#: builtin/index-pack.c:1283
+#: builtin/index-pack.c:1277
msgid "confusion beyond insanity"
msgstr "confusió més enllà de la bogeria"
-#: builtin/index-pack.c:1289
+#: builtin/index-pack.c:1283
#, c-format
msgid "completed with %d local object"
msgid_plural "completed with %d local objects"
msgstr[0] "s'ha completat amb %d objecte local"
msgstr[1] "s'ha completat amb %d objectes locals"
-#: builtin/index-pack.c:1301
+#: builtin/index-pack.c:1295
#, c-format
msgid "Unexpected tail checksum for %s (disk corruption?)"
msgstr "Suma de verificació final no esperada per a %s (corrupció de disc?)"
-#: builtin/index-pack.c:1305
+#: builtin/index-pack.c:1299
#, c-format
msgid "pack has %d unresolved delta"
msgid_plural "pack has %d unresolved deltas"
msgstr[0] "El paquet té %d diferència no resolta"
msgstr[1] "El paquet té %d diferències no resoltes"
-#: builtin/index-pack.c:1329
+#: builtin/index-pack.c:1323
#, c-format
msgid "unable to deflate appended object (%d)"
msgstr "no s'ha pogut desinflar l'objecte annexat (%d)"
-#: builtin/index-pack.c:1425
+#: builtin/index-pack.c:1419
#, c-format
msgid "local object %s is corrupt"
msgstr "l'objecte local %s és malmès"
-#: builtin/index-pack.c:1446
+#: builtin/index-pack.c:1440
#, fuzzy, c-format
msgid "packfile name '%s' does not end with '.%s'"
msgstr "el nom del fitxer de paquet «%s» no acaba amb «.pack»"
-#: builtin/index-pack.c:1470
+#: builtin/index-pack.c:1464
#, c-format
msgid "cannot write %s file '%s'"
msgstr "no es pot escriure «%s» al fitxer «%s»"
-#: builtin/index-pack.c:1478
+#: builtin/index-pack.c:1472
#, fuzzy, c-format
msgid "cannot close written %s file '%s'"
msgstr "no s'ha pogut tancar l'arxiu «%s» per escrit"
-#: builtin/index-pack.c:1504
+#: builtin/index-pack.c:1489
+#, fuzzy, c-format
+msgid "unable to rename temporary '*.%s' file to '%s"
+msgstr "no s'ha pogut canviar el nom del fitxer temporal a %s"
+
+#: builtin/index-pack.c:1514
msgid "error while closing pack file"
msgstr "error en tancar el fitxer empaquetat"
-#: builtin/index-pack.c:1518
-msgid "cannot store pack file"
-msgstr "no es pot emmagatzemar el fitxer empaquetat"
-
-#: builtin/index-pack.c:1526
-msgid "cannot store index file"
-msgstr "no es pot emmagatzemar el fitxer d'índex"
-
-#: builtin/index-pack.c:1581 builtin/pack-objects.c:2977
+#: builtin/index-pack.c:1573 builtin/pack-objects.c:3150
#, c-format
msgid "bad pack.indexversion=%<PRIu32>"
msgstr "pack.indexversion=%<PRIu32> incorrecte"
-#: builtin/index-pack.c:1651
+#: builtin/index-pack.c:1643
#, c-format
msgid "Cannot open existing pack file '%s'"
msgstr "No es pot obrir el fitxer empaquetat existent «%s»"
-#: builtin/index-pack.c:1653
+#: builtin/index-pack.c:1645
#, c-format
msgid "Cannot open existing pack idx file for '%s'"
msgstr "No es pot obrir el fitxer d'índex de paquets existent de «%s»"
-#: builtin/index-pack.c:1701
+#: builtin/index-pack.c:1693
#, c-format
msgid "non delta: %d object"
msgid_plural "non delta: %d objects"
msgstr[0] "sense diferències: %d objecte"
msgstr[1] "sense diferències: %d objectes"
-#: builtin/index-pack.c:1708
+#: builtin/index-pack.c:1700
#, c-format
msgid "chain length = %d: %lu object"
msgid_plural "chain length = %d: %lu objects"
msgstr[0] "longitud de cadena = %d: %lu objecte"
msgstr[1] "longitud de cadena = %d: %lu objectes"
-#: builtin/index-pack.c:1750
+#: builtin/index-pack.c:1742
msgid "Cannot come back to cwd"
msgstr "No es pot tornar al directori de treball actual"
-#: builtin/index-pack.c:1804 builtin/index-pack.c:1807
-#: builtin/index-pack.c:1823 builtin/index-pack.c:1827
+#: builtin/index-pack.c:1796 builtin/index-pack.c:1799
+#: builtin/index-pack.c:1819 builtin/index-pack.c:1823
#, c-format
msgid "bad %s"
msgstr "%s incorrecte"
-#: builtin/index-pack.c:1833 builtin/init-db.c:378 builtin/init-db.c:613
+#: builtin/index-pack.c:1829 builtin/init-db.c:379 builtin/init-db.c:614
#, c-format
msgid "unknown hash algorithm '%s'"
msgstr "algorisme hash desconegut «%s»"
-#: builtin/index-pack.c:1852
+#: builtin/index-pack.c:1848
msgid "--fix-thin cannot be used without --stdin"
msgstr "--fix-thin no es pot usar sense --stdin"
-#: builtin/index-pack.c:1854
+#: builtin/index-pack.c:1850
msgid "--stdin requires a git repository"
msgstr "--stdin requereix un repositori git"
-#: builtin/index-pack.c:1856
+#: builtin/index-pack.c:1852
msgid "--object-format cannot be used with --stdin"
msgstr "--object-format no es pot usar sense --stdin"
-#: builtin/index-pack.c:1871
+#: builtin/index-pack.c:1867
msgid "--verify with no packfile name given"
msgstr "s'ha donat --verify sense nom de fitxer de paquet"
-#: builtin/index-pack.c:1937 builtin/unpack-objects.c:584
+#: builtin/index-pack.c:1933 builtin/unpack-objects.c:584
msgid "fsck error in pack objects"
msgstr "error fsck als objectes del paquet"
@@ -16908,100 +17287,99 @@
msgid "not copying templates from '%s': %s"
msgstr "no s'estan copiant plantilles de «%s»: %s"
-#: builtin/init-db.c:262
+#: builtin/init-db.c:263
#, c-format
msgid "invalid initial branch name: '%s'"
msgstr "nom de branca inicial no vàlid: «%s»"
-#: builtin/init-db.c:353
+#: builtin/init-db.c:354
#, c-format
msgid "unable to handle file type %d"
msgstr "no s'ha pogut gestionar el tipus de fitxer %d"
-#: builtin/init-db.c:356
+#: builtin/init-db.c:357
#, c-format
msgid "unable to move %s to %s"
msgstr "no s'ha pogut moure %s a %s"
-#: builtin/init-db.c:372
-#, fuzzy
+#: builtin/init-db.c:373
msgid "attempt to reinitialize repository with different hash"
msgstr "s'ha intentat reinicialitzar el repositori amb un hash diferent"
-#: builtin/init-db.c:396 builtin/init-db.c:399
+#: builtin/init-db.c:397 builtin/init-db.c:400
#, c-format
msgid "%s already exists"
msgstr "%s ja existeix"
-#: builtin/init-db.c:431
-#, fuzzy, c-format
+#: builtin/init-db.c:432
+#, c-format
msgid "re-init: ignored --initial-branch=%s"
-msgstr "reinicialització ignorada --initial-branch=%"
+msgstr "reinicialització: s'ha ignorat --initial-branch=%s"
-#: builtin/init-db.c:462
+#: builtin/init-db.c:463
#, c-format
msgid "Reinitialized existing shared Git repository in %s%s\n"
msgstr "S'ha reinicialitzat el repositori compartit existent del Git en %s%s\n"
-#: builtin/init-db.c:463
+#: builtin/init-db.c:464
#, c-format
msgid "Reinitialized existing Git repository in %s%s\n"
msgstr "S'ha reinicialitzat el repositori existent del Git en %s%s\n"
-#: builtin/init-db.c:467
+#: builtin/init-db.c:468
#, c-format
msgid "Initialized empty shared Git repository in %s%s\n"
msgstr "S'ha inicialitzat un repositori compartit buit del Git en %s%s\n"
-#: builtin/init-db.c:468
+#: builtin/init-db.c:469
#, c-format
msgid "Initialized empty Git repository in %s%s\n"
msgstr "S'ha inicialitzat un repositori buit del Git en %s%s\n"
-#: builtin/init-db.c:517
+#: builtin/init-db.c:518
msgid ""
-"git init [-q | --quiet] [--bare] [--template=<template-directory>] [--"
-"shared[=<permissions>]] [<directory>]"
+"git init [-q | --quiet] [--bare] [--template=<template-directory>] "
+"[--shared[=<permissions>]] [<directory>]"
msgstr ""
-"git init [-q | --quiet] [--bare] [--template=<directori-de-plantilla>] [--"
-"shared[=<permisos>]] [<directori>]"
+"git init [-q | --quiet] [--bare] [--template=<directori-de-plantilla>] "
+"[--shared[=<permisos>]] [<directori>]"
-#: builtin/init-db.c:543
+#: builtin/init-db.c:544
msgid "permissions"
msgstr "permisos"
-#: builtin/init-db.c:544
+#: builtin/init-db.c:545
msgid "specify that the git repository is to be shared amongst several users"
-msgstr "especifica que el repositori de git es compartirà entre diversos usuaris"
+msgstr ""
+"especifica que el repositori de git es compartirà entre diversos usuaris"
-#: builtin/init-db.c:550
-#, fuzzy
+#: builtin/init-db.c:551
msgid "override the name of the initial branch"
-msgstr "passa per alt el bit executable dels fitxers llistats"
+msgstr "sobreescriu el nom de la branca inicial"
-#: builtin/init-db.c:551 builtin/verify-pack.c:74
+#: builtin/init-db.c:552 builtin/verify-pack.c:74
msgid "hash"
msgstr "hash"
-#: builtin/init-db.c:552 builtin/show-index.c:22 builtin/verify-pack.c:75
+#: builtin/init-db.c:553 builtin/show-index.c:22 builtin/verify-pack.c:75
msgid "specify the hash algorithm to use"
msgstr "especifiqueu l'algorisme de resum a usar"
-#: builtin/init-db.c:559
+#: builtin/init-db.c:560
msgid "--separate-git-dir and --bare are mutually exclusive"
msgstr "--separate-git-dir i --bare són mútuament excloents"
-#: builtin/init-db.c:590 builtin/init-db.c:595
+#: builtin/init-db.c:591 builtin/init-db.c:596
#, c-format
msgid "cannot mkdir %s"
msgstr "no es pot mkdir %s"
-#: builtin/init-db.c:599 builtin/init-db.c:654
+#: builtin/init-db.c:600 builtin/init-db.c:655
#, c-format
msgid "cannot chdir to %s"
msgstr "no es pot canviar de directori a %s"
-#: builtin/init-db.c:626
+#: builtin/init-db.c:627
#, c-format
msgid ""
"%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
@@ -17010,15 +17388,14 @@
"no es permet %s (o --work-tree=<directori>) sense especificar %s (o --git-"
"dir=<directori>)"
-#: builtin/init-db.c:678
+#: builtin/init-db.c:679
#, c-format
msgid "Cannot access work tree '%s'"
msgstr "No es pot accedir a l'arbre de treball «%s»"
-#: builtin/init-db.c:683
-#, fuzzy
+#: builtin/init-db.c:684
msgid "--separate-git-dir incompatible with bare repository"
-msgstr "--separate-git-dir és incompatible amb --bisect"
+msgstr "--separate-git-dir és incompatible amb un repositori nu"
#: builtin/interpret-trailers.c:16
msgid ""
@@ -17098,9 +17475,8 @@
msgstr "mostra la font"
#: builtin/log.c:181
-#, fuzzy
msgid "use mail map file"
-msgstr "Usa el fitxer de mapa de correu"
+msgstr "usa el fitxer de mapa de correu"
#: builtin/log.c:184
msgid "only decorate refs that match <pattern>"
@@ -17128,87 +17504,87 @@
msgid "-L<range>:<file> cannot be used with pathspec"
msgstr "%s: %s no es pot usar amb %s"
-#: builtin/log.c:303
+#: builtin/log.c:306
#, c-format
msgid "Final output: %d %s\n"
msgstr "Sortida final: %d %s\n"
-#: builtin/log.c:568
+#: builtin/log.c:571
#, c-format
msgid "git show %s: bad file"
msgstr "git show %s: fitxer incorrecte"
-#: builtin/log.c:583 builtin/log.c:673
+#: builtin/log.c:586 builtin/log.c:676
#, c-format
msgid "could not read object %s"
msgstr "no s'ha pogut llegir l'objecte %s"
-#: builtin/log.c:698
+#: builtin/log.c:701
#, c-format
msgid "unknown type: %d"
msgstr "tipus desconegut: %d"
-#: builtin/log.c:843
+#: builtin/log.c:846
#, c-format
msgid "%s: invalid cover from description mode"
msgstr "%s: cobertura no vàlida des del mode descripció"
-#: builtin/log.c:850
+#: builtin/log.c:853
msgid "format.headers without value"
msgstr "format.headers sense valor"
-#: builtin/log.c:979
+#: builtin/log.c:982
#, c-format
msgid "cannot open patch file %s"
msgstr "no s'ha pogut obrir el fitxer de pedaç %s"
-#: builtin/log.c:996
+#: builtin/log.c:999
msgid "need exactly one range"
msgstr "necessita exactament un interval"
-#: builtin/log.c:1006
+#: builtin/log.c:1009
msgid "not a range"
msgstr "no és un interval"
-#: builtin/log.c:1170
+#: builtin/log.c:1173
#, fuzzy
msgid "cover letter needs email format"
msgstr "la lletra de la portada necessita un format de correu electrònic"
-#: builtin/log.c:1176
+#: builtin/log.c:1179
#, fuzzy
msgid "failed to create cover-letter file"
msgstr "no s'ha pogut crear el fitxer de portada"
-#: builtin/log.c:1263
+#: builtin/log.c:1266
#, c-format
msgid "insane in-reply-to: %s"
msgstr "in-reply-to boig: %s"
-#: builtin/log.c:1290
+#: builtin/log.c:1293
msgid "git format-patch [<options>] [<since> | <revision-range>]"
msgstr "git format-patch [<opcions>] [<des-de> | <rang-de-revisions>]"
-#: builtin/log.c:1348
+#: builtin/log.c:1351
msgid "two output directories?"
msgstr "dos directoris de sortida?"
-#: builtin/log.c:1499 builtin/log.c:2326 builtin/log.c:2328 builtin/log.c:2340
+#: builtin/log.c:1502 builtin/log.c:2328 builtin/log.c:2330 builtin/log.c:2342
#, c-format
msgid "unknown commit %s"
msgstr "comissió desconeguda %s"
-#: builtin/log.c:1510 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1513 builtin/replace.c:58 builtin/replace.c:207
#: builtin/replace.c:210
#, c-format
msgid "failed to resolve '%s' as a valid ref"
msgstr "s'ha produït un error en resoldre «%s» com a referència vàlida"
-#: builtin/log.c:1519
+#: builtin/log.c:1522
msgid "could not find exact merge base"
msgstr "no s'ha pogut trobar la base exacta de la fusió"
-#: builtin/log.c:1529
+#: builtin/log.c:1532
#, fuzzy
msgid ""
"failed to get upstream, if you want to record base commit automatically,\n"
@@ -17217,423 +17593,431 @@
msgstr ""
"no s'ha pogut obtenir la font si voleu registrar la comissió base "
"automàticament si us plau useu la branca git --set-upstream-to per al "
-"seguiment d'una branca remota. O podeu especificar la comissió base per --"
-"base=<base-commit-id> manualment"
+"seguiment d'una branca remota. O podeu especificar la comissió base per "
+"--base=<base-commit-id> manualment"
-#: builtin/log.c:1552
+#: builtin/log.c:1555
msgid "failed to find exact merge base"
msgstr "no s'ha pogut trobar la base exacta de la fusió"
-#: builtin/log.c:1569
+#: builtin/log.c:1572
msgid "base commit should be the ancestor of revision list"
msgstr "la comissió base ha de ser l'avantpassat de la llista de revisions"
-#: builtin/log.c:1579
+#: builtin/log.c:1582
msgid "base commit shouldn't be in revision list"
msgstr "la comissió base no ha de ser en la llista de revisions"
-#: builtin/log.c:1637
+#: builtin/log.c:1640
msgid "cannot get patch id"
msgstr "no es pot obtenir l'id del pedaç"
-#: builtin/log.c:1700
+#: builtin/log.c:1703
#, fuzzy
msgid "failed to infer range-diff origin of current series"
msgstr "no s'ha pogut inferir l'interval-diferències"
-#: builtin/log.c:1702
+#: builtin/log.c:1705
#, fuzzy, c-format
msgid "using '%s' as range-diff origin of current series"
msgstr "utilitzant «%s» com a origen de rang-diferencia de la sèrie actual"
-#: builtin/log.c:1746
+#: builtin/log.c:1749
msgid "use [PATCH n/m] even with a single patch"
msgstr "usa [PATCH n/m] fins i tot amb un sol pedaç"
-#: builtin/log.c:1749
+#: builtin/log.c:1752
msgid "use [PATCH] even with multiple patches"
msgstr "usa [PATCH] fins i tot amb múltiples pedaços"
-#: builtin/log.c:1753
+#: builtin/log.c:1756
msgid "print patches to standard out"
msgstr "imprimeix els pedaços a la sortida estàndard"
-#: builtin/log.c:1755
+#: builtin/log.c:1758
msgid "generate a cover letter"
msgstr "genera una carta de presentació"
-#: builtin/log.c:1757
+#: builtin/log.c:1760
msgid "use simple number sequence for output file names"
msgstr "usa una seqüència de números per als noms dels fitxers de sortida"
-#: builtin/log.c:1758
+#: builtin/log.c:1761
msgid "sfx"
msgstr "sufix"
-#: builtin/log.c:1759
+#: builtin/log.c:1762
msgid "use <sfx> instead of '.patch'"
msgstr "usa <sufix> en lloc de «.patch»"
-#: builtin/log.c:1761
+#: builtin/log.c:1764
msgid "start numbering patches at <n> instead of 1"
msgstr "comença numerant els pedaços a <n> en lloc d'1"
-#: builtin/log.c:1762
+#: builtin/log.c:1765
+#, fuzzy
msgid "reroll-count"
-msgstr ""
+msgstr "reroll-count"
-#: builtin/log.c:1763
+#: builtin/log.c:1766
msgid "mark the series as Nth re-roll"
msgstr "marca la sèrie com a l'enèsima llançada"
-#: builtin/log.c:1765
+#: builtin/log.c:1768
msgid "max length of output filename"
msgstr "mida màxima del nom del fitxer de sortida"
-#: builtin/log.c:1767
+#: builtin/log.c:1770
msgid "use [RFC PATCH] instead of [PATCH]"
msgstr "useu [RFC PATCH] en comptes de [PATCH]"
-#: builtin/log.c:1770
+#: builtin/log.c:1773
msgid "cover-from-description-mode"
msgstr "cover-from-description-mode"
-#: builtin/log.c:1771
+#: builtin/log.c:1774
msgid "generate parts of a cover letter based on a branch's description"
msgstr ""
-"genera parts d'una carta de presentació basant-se en la descripció d'una branca"
+"genera parts d'una carta de presentació basant-se en la descripció d'una "
+"branca"
-#: builtin/log.c:1773
+#: builtin/log.c:1776
msgid "use [<prefix>] instead of [PATCH]"
msgstr "useu [<prefix>] en comptes de [PATCH]"
-#: builtin/log.c:1776
+#: builtin/log.c:1779
msgid "store resulting files in <dir>"
msgstr "emmagatzema els fitxers resultants a <directori>"
-#: builtin/log.c:1779
+#: builtin/log.c:1782
msgid "don't strip/add [PATCH]"
msgstr "no despullis/afegeixis [PATCH]"
-#: builtin/log.c:1782
+#: builtin/log.c:1785
msgid "don't output binary diffs"
msgstr "no emetis diferències binàries"
-#: builtin/log.c:1784
+#: builtin/log.c:1787
msgid "output all-zero hash in From header"
msgstr "emet un hash de tots zeros en la capçalera From"
-#: builtin/log.c:1786
+#: builtin/log.c:1789
msgid "don't include a patch matching a commit upstream"
msgstr "no incloguis pedaços que coincideixin amb comissions a la font"
-#: builtin/log.c:1788
+#: builtin/log.c:1791
msgid "show patch format instead of default (patch + stat)"
msgstr ""
"mostra el format de pedaç en lloc del per defecte (pedaç + estadístiques)"
-#: builtin/log.c:1790
+#: builtin/log.c:1793
msgid "Messaging"
msgstr "Missatgeria"
-#: builtin/log.c:1791
+#: builtin/log.c:1794
msgid "header"
msgstr "capçalera"
-#: builtin/log.c:1792
+#: builtin/log.c:1795
msgid "add email header"
msgstr "afegeix una capçalera de correu electrònic"
-#: builtin/log.c:1793 builtin/log.c:1794
+#: builtin/log.c:1796 builtin/log.c:1797
msgid "email"
msgstr "correu electrònic"
-#: builtin/log.c:1793
+#: builtin/log.c:1796
msgid "add To: header"
msgstr "afegeix la capçalera To:"
-#: builtin/log.c:1794
+#: builtin/log.c:1797
msgid "add Cc: header"
msgstr "afegeix la capçalera Cc:"
-#: builtin/log.c:1795
+#: builtin/log.c:1798
msgid "ident"
msgstr "identitat"
-#: builtin/log.c:1796
+#: builtin/log.c:1799
msgid "set From address to <ident> (or committer ident if absent)"
msgstr ""
"estableix l'adreça From a <identitat> (o la identitat del comitent si manca)"
-#: builtin/log.c:1798
+#: builtin/log.c:1801
msgid "message-id"
msgstr "ID de missatge"
-#: builtin/log.c:1799
+#: builtin/log.c:1802
msgid "make first mail a reply to <message-id>"
msgstr "fes que el primer missatge sigui una resposta a <ID de missatge>"
-#: builtin/log.c:1800 builtin/log.c:1803
+#: builtin/log.c:1803 builtin/log.c:1806
msgid "boundary"
msgstr "límit"
-#: builtin/log.c:1801
+#: builtin/log.c:1804
msgid "attach the patch"
msgstr "adjunta el pedaç"
-#: builtin/log.c:1804
+#: builtin/log.c:1807
msgid "inline the patch"
msgstr "posa el pedaç en el cos"
-#: builtin/log.c:1808
+#: builtin/log.c:1811
msgid "enable message threading, styles: shallow, deep"
msgstr "habilita l'enfilada de missatges, estils: shallow, deep"
-#: builtin/log.c:1810
+#: builtin/log.c:1813
msgid "signature"
msgstr "signatura"
-#: builtin/log.c:1811
+#: builtin/log.c:1814
msgid "add a signature"
msgstr "afegeix una signatura"
-#: builtin/log.c:1812
+#: builtin/log.c:1815
msgid "base-commit"
msgstr "comissió base"
-#: builtin/log.c:1813
+#: builtin/log.c:1816
msgid "add prerequisite tree info to the patch series"
msgstr "afegeix la informació d'arbre requerida a la sèrie de pedaços"
-#: builtin/log.c:1816
+#: builtin/log.c:1819
msgid "add a signature from a file"
msgstr "afegeix una signatura des d'un fitxer"
-#: builtin/log.c:1817
+#: builtin/log.c:1820
msgid "don't print the patch filenames"
msgstr "no imprimeixis els noms de fitxer del pedaç"
-#: builtin/log.c:1819
+#: builtin/log.c:1822
msgid "show progress while generating patches"
msgstr "mostra el progrés durant la generació de pedaços"
-#: builtin/log.c:1821
+#: builtin/log.c:1824
msgid "show changes against <rev> in cover letter or single patch"
msgstr ""
"mostra els canvis contra <rev> a la carta de presentació o a un sol pedaç"
-#: builtin/log.c:1824
+#: builtin/log.c:1827
#, fuzzy
msgid "show changes against <refspec> in cover letter or single patch"
msgstr ""
-"mostra els canvis contra <refspec> a la lletra de la portada o a un sol pedaç"
+"mostra els canvis contra <refspec> a la lletra de la portada o a un sol "
+"pedaç"
-#: builtin/log.c:1826 builtin/range-diff.c:28
+#: builtin/log.c:1829 builtin/range-diff.c:28
msgid "percentage by which creation is weighted"
msgstr "percentatge pel qual la creació és ponderada"
-#: builtin/log.c:1913
+#: builtin/log.c:1916
#, c-format
msgid "invalid ident line: %s"
msgstr "línia d'identitat no vàlida: %s"
-#: builtin/log.c:1928
+#: builtin/log.c:1931
msgid "-n and -k are mutually exclusive"
msgstr "-n i -k són mútuament excloents"
-#: builtin/log.c:1930
+#: builtin/log.c:1933
msgid "--subject-prefix/--rfc and -k are mutually exclusive"
msgstr "--subject-prefix/--rfc i -k són mútuament excloents"
-#: builtin/log.c:1938
+#: builtin/log.c:1941
msgid "--name-only does not make sense"
msgstr "--name-only no té sentit"
-#: builtin/log.c:1940
+#: builtin/log.c:1943
msgid "--name-status does not make sense"
msgstr "--name-status no té sentit"
-#: builtin/log.c:1942
+#: builtin/log.c:1945
msgid "--check does not make sense"
msgstr "--check no té sentit"
-#: builtin/log.c:1964
-#, fuzzy
+#: builtin/log.c:1967
msgid "--stdout, --output, and --output-directory are mutually exclusive"
-msgstr "-b, -B i --detach són mútuament excloents"
+msgstr "--stdout, --output, i --output-directory són mútuament excloents"
-#: builtin/log.c:2087
+#: builtin/log.c:2089
msgid "--interdiff requires --cover-letter or single patch"
msgstr "--interdiff requereix --cover-letter o un sol pedaç"
-#: builtin/log.c:2091
+#: builtin/log.c:2093
msgid "Interdiff:"
msgstr "Interdiff:"
-#: builtin/log.c:2092
+#: builtin/log.c:2094
#, c-format
msgid "Interdiff against v%d:"
msgstr "Interdiff contra v%d:"
-#: builtin/log.c:2098
+#: builtin/log.c:2100
msgid "--creation-factor requires --range-diff"
msgstr "--creation-factor requereix --range-diff"
-#: builtin/log.c:2102
+#: builtin/log.c:2104
msgid "--range-diff requires --cover-letter or single patch"
msgstr "--range-diff requereix --cover-letter o un sol pedaç"
-#: builtin/log.c:2110
+#: builtin/log.c:2112
#, fuzzy
msgid "Range-diff:"
msgstr "Diferència-interval"
-#: builtin/log.c:2111
+#: builtin/log.c:2113
#, fuzzy, c-format
msgid "Range-diff against v%d:"
msgstr "Diferència de l'interval contra el v%d"
-#: builtin/log.c:2122
+#: builtin/log.c:2124
#, c-format
msgid "unable to read signature file '%s'"
msgstr "no s'ha pogut llegir el fitxer de signatura «%s»"
-#: builtin/log.c:2158
+#: builtin/log.c:2160
msgid "Generating patches"
msgstr "S'estan generant els pedaços"
-#: builtin/log.c:2202
-#, fuzzy
+#: builtin/log.c:2204
msgid "failed to create output files"
msgstr "no s'han pogut crear els fitxers de sortida"
-#: builtin/log.c:2261
+#: builtin/log.c:2263
msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
msgstr "git cherry [-v] [<font> [<cap> [<límit>]]]"
-#: builtin/log.c:2315
+#: builtin/log.c:2317
#, c-format
msgid ""
-"Could not find a tracked remote branch, please specify <upstream> manually.\n"
+"Could not find a tracked remote branch, please specify <upstream> "
+"manually.\n"
msgstr ""
"No s'ha pogut trobar una branca remota seguida. Especifiqueu <font> "
"manualment.\n"
-#: builtin/ls-files.c:563
+#: builtin/ls-files.c:561
msgid "git ls-files [<options>] [<file>...]"
msgstr "git ls-files [<opcions>] [<fitxer>...]"
-#: builtin/ls-files.c:619
+#: builtin/ls-files.c:615
+msgid "separate paths with the NUL character"
+msgstr "separa els camins amb el caràcter NUL"
+
+#: builtin/ls-files.c:617
msgid "identify the file status with tags"
msgstr "identifica l'estat de fitxer amb etiquetes"
-#: builtin/ls-files.c:621
+#: builtin/ls-files.c:619
msgid "use lowercase letters for 'assume unchanged' files"
msgstr "usa lletres minúscules per als fitxers «assume unchanged»"
-#: builtin/ls-files.c:623
+#: builtin/ls-files.c:621
msgid "use lowercase letters for 'fsmonitor clean' files"
msgstr "usa lletres minúscules per als fitxers «fsmonitor clean»"
-#: builtin/ls-files.c:625
+#: builtin/ls-files.c:623
msgid "show cached files in the output (default)"
msgstr ""
"mostra en la sortida els fitxers desats en la memòria cau (per defecte)"
-#: builtin/ls-files.c:627
+#: builtin/ls-files.c:625
msgid "show deleted files in the output"
msgstr "mostra en la sortida els fitxers suprimits"
-#: builtin/ls-files.c:629
+#: builtin/ls-files.c:627
msgid "show modified files in the output"
msgstr "mostra en la sortida els fitxers modificats"
-#: builtin/ls-files.c:631
+#: builtin/ls-files.c:629
msgid "show other files in the output"
msgstr "mostra en la sortida els altres fitxers"
-#: builtin/ls-files.c:633
+#: builtin/ls-files.c:631
msgid "show ignored files in the output"
msgstr "mostra en la sortida els fitxers ignorats"
-#: builtin/ls-files.c:636
+#: builtin/ls-files.c:634
msgid "show staged contents' object name in the output"
msgstr "mostra en la sortida el nom d'objecte dels continguts «stage»"
-#: builtin/ls-files.c:638
+#: builtin/ls-files.c:636
msgid "show files on the filesystem that need to be removed"
msgstr "mostra els fitxers en el sistema de fitxers que s'han d'eliminar"
-#: builtin/ls-files.c:640
+#: builtin/ls-files.c:638
msgid "show 'other' directories' names only"
msgstr "mostra només els noms dels directoris «other»"
-#: builtin/ls-files.c:642
+#: builtin/ls-files.c:640
msgid "show line endings of files"
msgstr "mostra els terminadors de línia dels fitxers"
-#: builtin/ls-files.c:644
+#: builtin/ls-files.c:642
msgid "don't show empty directories"
msgstr "no mostris els directoris buits"
-#: builtin/ls-files.c:647
+#: builtin/ls-files.c:645
msgid "show unmerged files in the output"
msgstr "mostra en la sortida els fitxers sense fusionar"
-#: builtin/ls-files.c:649
+#: builtin/ls-files.c:647
msgid "show resolve-undo information"
msgstr "mostra la informació de resolució de desfet"
-#: builtin/ls-files.c:651
+#: builtin/ls-files.c:649
msgid "skip files matching pattern"
msgstr "omet els fitxers coincidents amb el patró"
-#: builtin/ls-files.c:654
-msgid "exclude patterns are read from <file>"
-msgstr "els patrons d'exclusió es llegeixen de <fitxer>"
+#: builtin/ls-files.c:652
-#: builtin/ls-files.c:657
+msgid "read exclude patterns from <file>"
+msgstr "llegeix els patrons des de <file>"
+
+#: builtin/ls-files.c:655
msgid "read additional per-directory exclude patterns in <file>"
msgstr "llegeix els patrons addicionals d'exclusió per directori en <fitxer>"
-#: builtin/ls-files.c:659
+#: builtin/ls-files.c:657
msgid "add the standard git exclusions"
msgstr "afegeix les exclusions estàndards de git"
-#: builtin/ls-files.c:663
+#: builtin/ls-files.c:661
msgid "make the output relative to the project top directory"
msgstr "fes que la sortida sigui relativa al directori superior del projecte"
-#: builtin/ls-files.c:666
+#: builtin/ls-files.c:664
msgid "recurse through submodules"
msgstr "inclou recursivament als submòduls"
-#: builtin/ls-files.c:668
+#: builtin/ls-files.c:666
msgid "if any <file> is not in the index, treat this as an error"
msgstr "si qualsevol <fitxer> no és en l'índex, tracta-ho com a error"
-#: builtin/ls-files.c:669
+#: builtin/ls-files.c:667
msgid "tree-ish"
msgstr "arbre"
-#: builtin/ls-files.c:670
+#: builtin/ls-files.c:668
msgid "pretend that paths removed since <tree-ish> are still present"
msgstr ""
"pretén que els camins eliminats després de <arbre> encara siguin presents"
-#: builtin/ls-files.c:672
+#: builtin/ls-files.c:670
msgid "show debugging data"
msgstr "mostra les dades de depuració"
-#: builtin/ls-files.c:674
+#: builtin/ls-files.c:672
msgid "suppress duplicate entries"
msgstr "suprimeix les entrades duplicades"
#: builtin/ls-remote.c:9
+#, fuzzy
msgid ""
"git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
-" [-q | --quiet] [--exit-code] [--get-url]\n"
-" [--symref] [<repository> [<refs>...]]"
+" [-q | --quiet] [--exit-code] [--get-url]\n"
+" [--symref] [<repository> [<refs>...]]"
msgstr ""
"git ls-remote [--heads] [--tags] [--refs]\n"
" [--upload-pack=<executable>] [-q | --quiet]\n"
@@ -17644,7 +18028,7 @@
msgid "do not print remote URL"
msgstr "no imprimeixis l'URL remot"
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1399
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1103
msgid "exec"
msgstr "executable"
@@ -17725,8 +18109,9 @@
msgstr "retén els objectes inabastables"
#: builtin/mailinfo.c:60
+#, fuzzy
msgid "keep non patch brackets in subject"
-msgstr ""
+msgstr "mantén els parèntesis sense pedaços en el tema"
#: builtin/mailinfo.c:62
#, fuzzy
@@ -17734,39 +18119,44 @@
msgstr "edita el missatge de comissió"
#: builtin/mailinfo.c:64
+#, fuzzy
msgid "re-code metadata to i18n.commitEncoding"
-msgstr ""
+msgstr "torna a codificar les metadades a i18n.commitEncoding"
#: builtin/mailinfo.c:67
+#, fuzzy
msgid "disable charset re-coding of metadata"
-msgstr ""
+msgstr "inhabilita la codificació del joc de caràcters de les metadades"
#: builtin/mailinfo.c:69
+#, fuzzy
msgid "encoding"
-msgstr ""
+msgstr "codificació"
#: builtin/mailinfo.c:70
+#, fuzzy
msgid "re-code metadata to this encoding"
-msgstr ""
+msgstr "torna a codificar les metadades a aquesta codificació"
#: builtin/mailinfo.c:72
msgid "use scissors"
-msgstr ""
+msgstr "usa les tisores"
#: builtin/mailinfo.c:73
-#, fuzzy
msgid "<action>"
-msgstr "acció"
+msgstr "<acció>"
#: builtin/mailinfo.c:74
+#, fuzzy
msgid "action when quoted CR is found"
-msgstr ""
+msgstr "acció quan es troba la CR citada"
#: builtin/mailinfo.c:77
+#, fuzzy
msgid "use headers in message's body"
-msgstr ""
+msgstr "utilitza les capçaleres en el cos del missatge"
-#: builtin/mailsplit.c:241
+#: builtin/mailsplit.c:239
#, c-format
msgid "empty mbox: '%s'"
msgstr "mbox buit: «%s»"
@@ -17810,15 +18200,16 @@
#: builtin/merge-base.c:151
msgid "find where <commit> forked from reflog of <ref>"
msgstr ""
-"troba on <comissió> s'ha bifurcat del registre de referències de <referència>"
+"troba on <comissió> s'ha bifurcat del registre de referències de "
+"<referència>"
#: builtin/merge-file.c:9
msgid ""
"git merge-file [<options>] [-L <name1> [-L <orig> [-L <name2>]]] <file1> "
"<orig-file> <file2>"
msgstr ""
-"git merge-file [<opcions>] [-L <nom1> [-L <original> [-L <nom2>]]] <fitxer1> "
-"<fitxer-original> <fitxer2>"
+"git merge-file [<opcions>] [-L <nom1> [-L <original> [-L <nom2>]]] <fitxer1>"
+" <fitxer-original> <fitxer2>"
#: builtin/merge-file.c:35
msgid "send results to standard output"
@@ -17883,154 +18274,145 @@
msgid "Merging %s with %s\n"
msgstr "S'està fusionant %s amb %s\n"
-#: builtin/merge.c:58
+#: builtin/merge.c:59
msgid "git merge [<options>] [<commit>...]"
msgstr "git merge [<opcions>] [<comissió>...]"
-#: builtin/merge.c:59
-msgid "git merge --abort"
-msgstr "git merge --abort"
-
-#: builtin/merge.c:60
-msgid "git merge --continue"
-msgstr "git merge --continue"
-
-#: builtin/merge.c:123
+#: builtin/merge.c:124
msgid "switch `m' requires a value"
msgstr "l'opció «m» requereix un valor"
-#: builtin/merge.c:146
+#: builtin/merge.c:147
#, c-format
msgid "option `%s' requires a value"
msgstr "l'opció «%s» requereix un valor"
-#: builtin/merge.c:199
+#: builtin/merge.c:200
#, c-format
msgid "Could not find merge strategy '%s'.\n"
msgstr "No s'ha pogut trobar l'estratègia de fusió «%s».\n"
-#: builtin/merge.c:200
+#: builtin/merge.c:201
#, c-format
msgid "Available strategies are:"
msgstr "Les estratègies disponibles són:"
-#: builtin/merge.c:205
+#: builtin/merge.c:206
#, c-format
msgid "Available custom strategies are:"
msgstr "Les estratègies personalitzades disponibles són:"
-#: builtin/merge.c:256 builtin/pull.c:133
+#: builtin/merge.c:257 builtin/pull.c:133
msgid "do not show a diffstat at the end of the merge"
msgstr "no mostris les estadístiques de diferència al final de la fusió"
-#: builtin/merge.c:259 builtin/pull.c:136
+#: builtin/merge.c:260 builtin/pull.c:136
msgid "show a diffstat at the end of the merge"
msgstr "mostra les estadístiques de diferència al final de la fusió"
-#: builtin/merge.c:260 builtin/pull.c:139
+#: builtin/merge.c:261 builtin/pull.c:139
msgid "(synonym to --stat)"
msgstr "(sinònim de --stat)"
-#: builtin/merge.c:262 builtin/pull.c:142
+#: builtin/merge.c:263 builtin/pull.c:142
msgid "add (at most <n>) entries from shortlog to merge commit message"
msgstr ""
-"afegeix (com a màxim <n>) entrades del registre curt al missatge de comissió "
-"de fusió"
+"afegeix (com a màxim <n>) entrades del registre curt al missatge de comissió"
+" de fusió"
-#: builtin/merge.c:265 builtin/pull.c:148
+#: builtin/merge.c:266 builtin/pull.c:148
msgid "create a single commit instead of doing a merge"
msgstr "crea una única comissió en lloc de fusionar"
-#: builtin/merge.c:267 builtin/pull.c:151
+#: builtin/merge.c:268 builtin/pull.c:151
msgid "perform a commit if the merge succeeds (default)"
msgstr "realitza una comissió si la fusió té èxit (per defecte)"
-#: builtin/merge.c:269 builtin/pull.c:154
+#: builtin/merge.c:270 builtin/pull.c:154
msgid "edit message before committing"
msgstr "edita el missatge abans de cometre"
-#: builtin/merge.c:271
+#: builtin/merge.c:272
msgid "allow fast-forward (default)"
msgstr "permet l'avanç ràpid (per defecte)"
-#: builtin/merge.c:273 builtin/pull.c:161
+#: builtin/merge.c:274 builtin/pull.c:161
msgid "abort if fast-forward is not possible"
msgstr "avorta si l'avanç ràpid no és possible"
-#: builtin/merge.c:277 builtin/pull.c:164
+#: builtin/merge.c:278 builtin/pull.c:164
msgid "verify that the named commit has a valid GPG signature"
msgstr "verifica que la comissió anomenada tingui una signatura GPG vàlida"
-#: builtin/merge.c:278 builtin/notes.c:787 builtin/pull.c:168
-#: builtin/rebase.c:540 builtin/rebase.c:1413 builtin/revert.c:114
+#: builtin/merge.c:279 builtin/notes.c:785 builtin/pull.c:168
+#: builtin/rebase.c:1117 builtin/revert.c:114
msgid "strategy"
msgstr "estratègia"
-#: builtin/merge.c:279 builtin/pull.c:169
+#: builtin/merge.c:280 builtin/pull.c:169
msgid "merge strategy to use"
msgstr "estratègia de fusió a usar"
-#: builtin/merge.c:280 builtin/pull.c:172
+#: builtin/merge.c:281 builtin/pull.c:172
msgid "option=value"
msgstr "opció=valor"
-#: builtin/merge.c:281 builtin/pull.c:173
+#: builtin/merge.c:282 builtin/pull.c:173
msgid "option for selected merge strategy"
msgstr "opció per a l'estratègia de fusió seleccionada"
-#: builtin/merge.c:283
+#: builtin/merge.c:284
msgid "merge commit message (for a non-fast-forward merge)"
msgstr "missatge de comissió de fusió (per a una fusió no d'avanç ràpid)"
-#: builtin/merge.c:290
+#: builtin/merge.c:291
msgid "abort the current in-progress merge"
msgstr "avorta la fusió en curs actual"
-#: builtin/merge.c:292
+#: builtin/merge.c:293
msgid "--abort but leave index and working tree alone"
msgstr "--abort però deixa l'índex i l'arbre de treball intactes"
-#: builtin/merge.c:294
+#: builtin/merge.c:295
msgid "continue the current in-progress merge"
msgstr "continua la fusió en curs actual"
-#: builtin/merge.c:296 builtin/pull.c:180
+#: builtin/merge.c:297 builtin/pull.c:180
msgid "allow merging unrelated histories"
msgstr "permet fusionar històries no relacionades"
-#: builtin/merge.c:303
+#: builtin/merge.c:304
#, fuzzy
msgid "bypass pre-merge-commit and commit-msg hooks"
msgstr "evita els ganxos pre-combinació i missatge de comissió"
-#: builtin/merge.c:320
+#: builtin/merge.c:321
msgid "could not run stash."
msgstr "no s'ha pogut executar «stash»."
-#: builtin/merge.c:325
+#: builtin/merge.c:326
msgid "stash failed"
msgstr "l'«stash» ha fallat"
-#: builtin/merge.c:330
+#: builtin/merge.c:331
#, c-format
msgid "not a valid object: %s"
msgstr "no és un objecte vàlid: %s"
-#: builtin/merge.c:352 builtin/merge.c:369
+#: builtin/merge.c:353 builtin/merge.c:370
msgid "read-tree failed"
msgstr "read-tree ha fallat"
-#: builtin/merge.c:400
-#, fuzzy
+#: builtin/merge.c:401
msgid "Already up to date. (nothing to squash)"
-msgstr " (res a fer «squash»)"
+msgstr "Ja està actualitzat. (res a fer «squash»)"
-#: builtin/merge.c:414
+#: builtin/merge.c:415
#, c-format
msgid "Squash commit -- not updating HEAD\n"
msgstr "Comissió «squash» -- no s'està actualitzant HEAD\n"
-#: builtin/merge.c:464
+#: builtin/merge.c:465
#, c-format
msgid "No merge message -- not updating HEAD\n"
msgstr "Cap missatge de fusió -- no s'està actualitzant HEAD\n"
@@ -18040,52 +18422,51 @@
msgid "'%s' does not point to a commit"
msgstr "«%s» no assenyala una comissió"
-#: builtin/merge.c:602
+#: builtin/merge.c:603
#, c-format
msgid "Bad branch.%s.mergeoptions string: %s"
msgstr "Cadena branch.%s.mergeoptions incorrecta: %s"
-#: builtin/merge.c:728
+#: builtin/merge.c:730
msgid "Not handling anything other than two heads merge."
msgstr "No s'està gestionant res a part de la fusió de dos caps."
-#: builtin/merge.c:741
-#, c-format
-msgid "Unknown option for merge-recursive: -X%s"
-msgstr "Opció desconeguda de merge-recursive: -X%s"
+#: builtin/merge.c:743
+#, fuzzy, c-format
+msgid "unknown strategy option: -X%s"
+msgstr "opció desconeguda: %s\n"
-#: builtin/merge.c:760 t/helper/test-fast-rebase.c:209
+#: builtin/merge.c:762 t/helper/test-fast-rebase.c:223
#, c-format
msgid "unable to write %s"
msgstr "no s'ha pogut escriure %s"
-#: builtin/merge.c:812
+#: builtin/merge.c:814
#, c-format
msgid "Could not read from '%s'"
msgstr "No s'ha pogut llegir de «%s»"
-#: builtin/merge.c:821
+#: builtin/merge.c:823
#, c-format
msgid "Not committing merge; use 'git commit' to complete the merge.\n"
msgstr ""
"No s'està cometent la fusió; useu «git commit» per a completar la fusió.\n"
-#: builtin/merge.c:827
-#, fuzzy
+#: builtin/merge.c:829
msgid ""
"Please enter a commit message to explain why this merge is necessary,\n"
"especially if it merges an updated upstream into a topic branch.\n"
"\n"
msgstr ""
-"Introduïu un missatge de comissió per explicar per què aquesta fusió és "
-"necessària especialment si fusiona una font actualitzada en una branca de "
-"tema."
+"Introduïu un missatge de comissió per explicar per què aquesta fusió és\n"
+"necessària, especialment si es fusiona una branca amb funcionalitat\n"
+"nova.\n"
-#: builtin/merge.c:832
+#: builtin/merge.c:834
msgid "An empty message aborts the commit.\n"
msgstr "Un missatge buit interromp la comissió.\n"
-#: builtin/merge.c:835
+#: builtin/merge.c:837
#, c-format
msgid ""
"Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -18094,74 +18475,74 @@
"Les línies que comencen amb «%c» seran ignorades i un missatge buit "
"interromp la comissió.\n"
-#: builtin/merge.c:888
+#: builtin/merge.c:892
msgid "Empty commit message."
msgstr "El missatge de comissió és buit."
-#: builtin/merge.c:903
+#: builtin/merge.c:907
#, c-format
msgid "Wonderful.\n"
msgstr "Meravellós.\n"
-#: builtin/merge.c:964
+#: builtin/merge.c:968
#, c-format
msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
msgstr ""
"La fusió automàtica ha fallat; arregleu els conflictes i després cometeu el "
"resultat.\n"
-#: builtin/merge.c:1003
+#: builtin/merge.c:1007
msgid "No current branch."
msgstr "No hi ha cap branca actual."
-#: builtin/merge.c:1005
+#: builtin/merge.c:1009
msgid "No remote for the current branch."
msgstr "No hi ha cap remot per a la branca actual."
-#: builtin/merge.c:1007
+#: builtin/merge.c:1011
msgid "No default upstream defined for the current branch."
msgstr "No hi ha cap font per defecte definida per a la branca actual."
-#: builtin/merge.c:1012
+#: builtin/merge.c:1016
#, c-format
msgid "No remote-tracking branch for %s from %s"
msgstr "No hi ha cap branca amb seguiment remot per a %s de %s"
-#: builtin/merge.c:1069
+#: builtin/merge.c:1073
#, c-format
msgid "Bad value '%s' in environment '%s'"
msgstr "Valor incorrecte «%s» en l'entorn «%s»"
-#: builtin/merge.c:1172
+#: builtin/merge.c:1174
#, c-format
msgid "not something we can merge in %s: %s"
msgstr "no és quelcom que puguem fusionar en %s: %s"
-#: builtin/merge.c:1206
+#: builtin/merge.c:1208
msgid "not something we can merge"
msgstr "no és quelcom que puguem fusionar"
-#: builtin/merge.c:1316
+#: builtin/merge.c:1321
msgid "--abort expects no arguments"
msgstr "--abort no espera cap argument"
-#: builtin/merge.c:1320
+#: builtin/merge.c:1325
msgid "There is no merge to abort (MERGE_HEAD missing)."
msgstr "No hi ha fusió a avortar (manca MERGE_HEAD)."
-#: builtin/merge.c:1338
+#: builtin/merge.c:1343
msgid "--quit expects no arguments"
msgstr "--quit no espera cap argument"
-#: builtin/merge.c:1351
+#: builtin/merge.c:1356
msgid "--continue expects no arguments"
msgstr "--continue no espera cap argument"
-#: builtin/merge.c:1355
+#: builtin/merge.c:1360
msgid "There is no merge in progress (MERGE_HEAD missing)."
msgstr "No hi ha cap fusió en curs (manca MERGE_HEAD)."
-#: builtin/merge.c:1371
+#: builtin/merge.c:1376
msgid ""
"You have not concluded your merge (MERGE_HEAD exists).\n"
"Please, commit your changes before you merge."
@@ -18169,7 +18550,7 @@
"No heu conclòs la vostra fusió (MERGE_HEAD existeix).\n"
"Cometeu els vostres canvis abans de fusionar."
-#: builtin/merge.c:1378
+#: builtin/merge.c:1383
msgid ""
"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
"Please, commit your changes before you merge."
@@ -18177,99 +18558,96 @@
"No heu conclòs el vostre «cherry pick» (CHERRY_PICK_HEAD existeix).\n"
"Cometeu els vostres canvis abans de fusionar."
-#: builtin/merge.c:1381
+#: builtin/merge.c:1386
msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
msgstr "No heu conclòs el vostre «cherry pick» (CHERRY_PICK_HEAD existeix)."
-#: builtin/merge.c:1395
+#: builtin/merge.c:1400
msgid "You cannot combine --squash with --no-ff."
msgstr "No podeu combinar --squash amb --no-ff."
-#: builtin/merge.c:1397
+#: builtin/merge.c:1402
msgid "You cannot combine --squash with --commit."
msgstr "No podeu combinar --squash amb --commit."
-#: builtin/merge.c:1413
+#: builtin/merge.c:1418
msgid "No commit specified and merge.defaultToUpstream not set."
msgstr ""
"No hi ha una comissió especificada i merge.defaultToUpstream no està "
"establert."
-#: builtin/merge.c:1430
+#: builtin/merge.c:1435
msgid "Squash commit into empty head not supported yet"
msgstr "Una comissió «squash» a un HEAD buit encara no es permet"
-#: builtin/merge.c:1432
+#: builtin/merge.c:1437
msgid "Non-fast-forward commit does not make sense into an empty head"
msgstr "Una comissió no d'avanç ràpid no té sentit a un HEAD buit"
-#: builtin/merge.c:1437
+#: builtin/merge.c:1442
#, c-format
msgid "%s - not something we can merge"
msgstr "%s - no és una cosa que puguem fusionar"
-#: builtin/merge.c:1439
+#: builtin/merge.c:1444
msgid "Can merge only exactly one commit into empty head"
msgstr "Es pot fusionar només una comissió a un HEAD buit"
-#: builtin/merge.c:1520
+#: builtin/merge.c:1531
msgid "refusing to merge unrelated histories"
msgstr "s'està refusant fusionar històries no relacionades"
-#: builtin/merge.c:1539
+#: builtin/merge.c:1550
#, c-format
msgid "Updating %s..%s\n"
msgstr "S'estan actualitzant %s..%s\n"
-#: builtin/merge.c:1585
+#: builtin/merge.c:1598
#, c-format
msgid "Trying really trivial in-index merge...\n"
msgstr "S'està intentant una fusió molt trivial en l'índex...\n"
-#: builtin/merge.c:1592
+#: builtin/merge.c:1605
#, c-format
msgid "Nope.\n"
msgstr "No.\n"
-#: builtin/merge.c:1623
-msgid "Not possible to fast-forward, aborting."
-msgstr "No és possible avançar ràpidament, s'està avortant."
-
-#: builtin/merge.c:1651 builtin/merge.c:1716
+#: builtin/merge.c:1664 builtin/merge.c:1730
#, c-format
msgid "Rewinding the tree to pristine...\n"
msgstr "S'està rebobinant l'arbre a la pristina...\n"
-#: builtin/merge.c:1655
+#: builtin/merge.c:1668
#, c-format
msgid "Trying merge strategy %s...\n"
msgstr "S'està intentant l'estratègia de fusió %s...\n"
-#: builtin/merge.c:1707
+#: builtin/merge.c:1720
#, c-format
msgid "No merge strategy handled the merge.\n"
msgstr "Cap estratègia de fusió ha gestionat la fusió.\n"
-#: builtin/merge.c:1709
+#: builtin/merge.c:1722
#, c-format
msgid "Merge with strategy %s failed.\n"
msgstr "L'estratègia de fusió %s ha fallat.\n"
-#: builtin/merge.c:1718
-#, c-format
-msgid "Using the %s to prepare resolving by hand.\n"
-msgstr "S'està usant el %s per a preparar la resolució a mà.\n"
-
#: builtin/merge.c:1732
#, c-format
+msgid "Using the %s strategy to prepare resolving by hand.\n"
+msgstr "S'està usant l'estratègia %s per a preparar la resolució a mà.\n"
+
+#: builtin/merge.c:1746
+#, c-format
msgid "Automatic merge went well; stopped before committing as requested\n"
msgstr ""
"La fusió automàtica ha sortit bé; s'ha aturat abans de cometre com s'havia "
"demanat\n"
#: builtin/mktag.c:10
+#, fuzzy
msgid "git mktag"
-msgstr ""
+msgstr "tag mktag"
#: builtin/mktag.c:27
#, fuzzy, c-format
@@ -18277,14 +18655,14 @@
msgstr "avís: «:include:» no s'admet: %s\n"
#: builtin/mktag.c:38
-#, c-format
+#, fuzzy, c-format
msgid "error: tag input does not pass fsck: %s"
-msgstr ""
+msgstr "error: l'entrada d'etiqueta no passa fsck: %s"
#: builtin/mktag.c:41
-#, c-format
+#, fuzzy, c-format
msgid "%d (FSCK_IGNORE?) should never trigger this callback"
-msgstr ""
+msgstr "%d (FSCKIGNORE?) no hauria d'activar aquesta crida de retorn"
#: builtin/mktag.c:56
#, fuzzy, c-format
@@ -18296,16 +18674,19 @@
msgid "object '%s' tagged as '%s', but is a '%s' type"
msgstr "l'objecte %s és %s, no pas %s"
-#: builtin/mktag.c:97
+#: builtin/mktag.c:98
+#, fuzzy
msgid "tag on stdin did not pass our strict fsck check"
msgstr ""
+"l'etiqueta a l'entrada estàndard no ha passat la comprovació estricta del "
+"fsck"
-#: builtin/mktag.c:100
+#: builtin/mktag.c:101
#, fuzzy
msgid "tag on stdin did not refer to a valid object"
msgstr "%s no apunta a un objecte vàlid"
-#: builtin/mktag.c:103 builtin/tag.c:243
+#: builtin/mktag.c:104 builtin/tag.c:243
msgid "unable to write tag file"
msgstr "no s'ha pogut escriure el fitxer d'etiqueta"
@@ -18327,43 +18708,58 @@
#: builtin/multi-pack-index.c:10
#, fuzzy
-msgid "git multi-pack-index [<options>] write [--preferred-pack=<pack>]"
+msgid ""
+"git multi-pack-index [<options>] write [--preferred-pack=<pack>][--refs-"
+"snapshot=<path>]"
msgstr ""
"git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
"size=<size>)"
-#: builtin/multi-pack-index.c:13
-#, fuzzy
+#: builtin/multi-pack-index.c:14
msgid "git multi-pack-index [<options>] verify"
-msgstr "git upload-pack [<opcions>] <directori>"
+msgstr "git multi-pack-index [<opcions>] verify"
-#: builtin/multi-pack-index.c:16
-#, fuzzy
+#: builtin/multi-pack-index.c:17
msgid "git multi-pack-index [<options>] expire"
-msgstr "git upload-pack [<opcions>] <directori>"
+msgstr "git multi-pack-index [<opcions>] expire"
-#: builtin/multi-pack-index.c:19
-#, fuzzy
+#: builtin/multi-pack-index.c:20
msgid "git multi-pack-index [<options>] repack [--batch-size=<size>]"
-msgstr ""
-"git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
-"size=<size>)"
+msgstr "git multi-pack-index [<opcions>] repack [--batch-size=<mida>]"
-#: builtin/multi-pack-index.c:54
+#: builtin/multi-pack-index.c:57
#, fuzzy
msgid "object directory containing set of packfile and pack-index pairs"
msgstr ""
"directori de l'objecte que conté el conjunt de parells packfile i pack-index"
-#: builtin/multi-pack-index.c:69
+#: builtin/multi-pack-index.c:98
+#, fuzzy
msgid "preferred-pack"
-msgstr ""
+msgstr "paquet preferit"
-#: builtin/multi-pack-index.c:70
+#: builtin/multi-pack-index.c:99
+#, fuzzy
msgid "pack for reuse when computing a multi-pack bitmap"
msgstr ""
+"empaqueta per a reutilitzar quan es calcula un mapa de bits multi-paquet"
-#: builtin/multi-pack-index.c:128
+#: builtin/multi-pack-index.c:100
+#, fuzzy
+msgid "write multi-pack bitmap"
+msgstr "no s'han pogut netejar els percentatges multi-paquet"
+
+#: builtin/multi-pack-index.c:105
+#, fuzzy
+msgid "write multi-pack index containing only given indexes"
+msgstr "git multi-pack-index [<opcions>] verify"
+
+#: builtin/multi-pack-index.c:107
+#, fuzzy
+msgid "refs snapshot for selecting bitmap commits"
+msgstr "instantània de refs per seleccionar entregues de mapa de bits"
+
+#: builtin/multi-pack-index.c:202
#, fuzzy
msgid ""
"during repack, collect pack-files of smaller size into a batch that is "
@@ -18372,11 +18768,6 @@
"durant el reempaquetament dels fitxers de recollida de paquets de mida més "
"petita en un lot que és més gran que aquesta mida"
-#: builtin/multi-pack-index.c:180
-#, fuzzy, c-format
-msgid "unrecognized subcommand: %s"
-msgstr "subcomandes no reconeguts"
-
#: builtin/mv.c:18
msgid "git mv [<options>] <source>... <destination>"
msgstr "git mv [<opcions>] <origen>... <destí>"
@@ -18405,72 +18796,72 @@
msgid "skip move/rename errors"
msgstr "omet els errors de moviment / canvi de nom"
-#: builtin/mv.c:170
+#: builtin/mv.c:172
#, c-format
msgid "destination '%s' is not a directory"
msgstr "el destí «%s» no és un directori"
-#: builtin/mv.c:181
+#: builtin/mv.c:184
#, c-format
msgid "Checking rename of '%s' to '%s'\n"
msgstr "S'està comprovant el canvi de nom de «%s» a «%s»\n"
-#: builtin/mv.c:185
+#: builtin/mv.c:190
msgid "bad source"
msgstr "origen incorrecte"
-#: builtin/mv.c:188
+#: builtin/mv.c:193
msgid "can not move directory into itself"
msgstr "no es pot moure un directori a dins d'ell mateix"
-#: builtin/mv.c:191
+#: builtin/mv.c:196
msgid "cannot move directory over file"
msgstr "no es pot moure un directori sobre un fitxer"
-#: builtin/mv.c:200
+#: builtin/mv.c:205
msgid "source directory is empty"
msgstr "el directori d'origen està buit"
-#: builtin/mv.c:225
+#: builtin/mv.c:231
msgid "not under version control"
msgstr "no està sota control de versions"
-#: builtin/mv.c:227
+#: builtin/mv.c:233
msgid "conflicted"
msgstr "en conflicte"
-#: builtin/mv.c:230
+#: builtin/mv.c:236
msgid "destination exists"
msgstr "el destí existeix"
-#: builtin/mv.c:238
+#: builtin/mv.c:244
#, c-format
msgid "overwriting '%s'"
msgstr "s'està sobreescrivint «%s»"
-#: builtin/mv.c:241
+#: builtin/mv.c:247
msgid "Cannot overwrite"
msgstr "No es pot sobreescriure"
-#: builtin/mv.c:244
+#: builtin/mv.c:250
msgid "multiple sources for the same target"
msgstr "múltiples orígens per al mateix destí"
-#: builtin/mv.c:246
+#: builtin/mv.c:252
msgid "destination directory does not exist"
msgstr "el directori destí no existeix"
-#: builtin/mv.c:253
+#: builtin/mv.c:280
#, c-format
msgid "%s, source=%s, destination=%s"
msgstr "%s, origen=%s, destí=%s"
-#: builtin/mv.c:274
+#: builtin/mv.c:308
#, c-format
msgid "Renaming %s to %s\n"
msgstr "S'està canviant el nom de %s a %s\n"
-#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:667
+#: builtin/mv.c:314 builtin/remote.c:790 builtin/repack.c:853
#, c-format
msgid "renaming '%s' failed"
msgstr "el canvi del nom de «%s» ha fallat"
@@ -18526,8 +18917,8 @@
#: builtin/notes.c:29
msgid ""
-"git notes [--ref <notes-ref>] add [-f] [--allow-empty] [-m <msg> | -F <file> "
-"| (-c | -C) <object>] [<object>]"
+"git notes [--ref <notes-ref>] add [-f] [--allow-empty] [-m <msg> | -F <file>"
+" | (-c | -C) <object>] [<object>]"
msgstr ""
"git notes [--ref <referència-de-notes>] add [-f] [--allow-empty] [-m "
"<missatge> | -F <fitxer> | (-c | -C) <objecte>] [<objecte>]"
@@ -18539,8 +18930,8 @@
#: builtin/notes.c:31
msgid ""
-"git notes [--ref <notes-ref>] append [--allow-empty] [-m <msg> | -F <file> | "
-"(-c | -C) <object>] [<object>]"
+"git notes [--ref <notes-ref>] append [--allow-empty] [-m <msg> | -F <file> |"
+" (-c | -C) <object>] [<object>]"
msgstr ""
"git notes [--ref <referència-de-notes>] append [--allow-empty] [-m "
"<missatge> | -F <fitxer> | (-c | -C) <objecte>] [<objecte>]"
@@ -18651,97 +19042,96 @@
msgid "failed to finish 'show' for object '%s'"
msgstr "S'ha produït un error en finalitzar «show» per a l'objecte «%s»"
-#: builtin/notes.c:197
+#: builtin/notes.c:195
msgid "please supply the note contents using either -m or -F option"
msgstr ""
"especifiqueu el contingut de la nota fent servir l'opció -m o l'opció -F"
-#: builtin/notes.c:206
+#: builtin/notes.c:204
msgid "unable to write note object"
msgstr "no s'ha pogut escriure l'objecte de nota"
-#: builtin/notes.c:208
+#: builtin/notes.c:206
#, c-format
msgid "the note contents have been left in %s"
msgstr "s'han deixat els continguts de la nota en %s"
-#: builtin/notes.c:242 builtin/tag.c:576
+#: builtin/notes.c:240 builtin/tag.c:577
#, c-format
msgid "could not open or read '%s'"
msgstr "no s'ha pogut obrir o llegir «%s»"
-#: builtin/notes.c:263 builtin/notes.c:313 builtin/notes.c:315
-#: builtin/notes.c:383 builtin/notes.c:438 builtin/notes.c:526
-#: builtin/notes.c:531 builtin/notes.c:610 builtin/notes.c:672
+#: builtin/notes.c:261 builtin/notes.c:311 builtin/notes.c:313
+#: builtin/notes.c:381 builtin/notes.c:436 builtin/notes.c:524
+#: builtin/notes.c:529 builtin/notes.c:608 builtin/notes.c:670
#, c-format
msgid "failed to resolve '%s' as a valid ref."
msgstr "s'ha produït un error en resoldre «%s» com a referència vàlida."
-#: builtin/notes.c:265
+#: builtin/notes.c:263
#, c-format
msgid "failed to read object '%s'."
msgstr "s'ha produït un error en llegir l'objecte «%s»."
-#: builtin/notes.c:268
+#: builtin/notes.c:266
#, c-format
msgid "cannot read note data from non-blob object '%s'."
msgstr "no es poden llegir les dades de node de l'objecte no de blob «%s»."
-#: builtin/notes.c:309
+#: builtin/notes.c:307
#, c-format
msgid "malformed input line: '%s'."
msgstr "línia d'entrada mal formada: «%s»."
-#: builtin/notes.c:324
+#: builtin/notes.c:322
#, c-format
msgid "failed to copy notes from '%s' to '%s'"
msgstr "s'ha produït un error en copiar les notes de «%s» a «%s»"
#. TRANSLATORS: the first %s will be replaced by a git
#. notes command: 'add', 'merge', 'remove', etc.
-#.
-#: builtin/notes.c:356
+#: builtin/notes.c:354
#, c-format
msgid "refusing to %s notes in %s (outside of refs/notes/)"
msgstr "s'està refusant %s les notes en %s (fora de refs/notes/)"
-#: builtin/notes.c:376 builtin/notes.c:431 builtin/notes.c:509
-#: builtin/notes.c:521 builtin/notes.c:598 builtin/notes.c:665
-#: builtin/notes.c:815 builtin/notes.c:963 builtin/notes.c:985
-#: builtin/prune-packed.c:25 builtin/tag.c:586
+#: builtin/notes.c:374 builtin/notes.c:429 builtin/notes.c:507
+#: builtin/notes.c:519 builtin/notes.c:596 builtin/notes.c:663
+#: builtin/notes.c:813 builtin/notes.c:961 builtin/notes.c:983
+#: builtin/prune-packed.c:25 builtin/tag.c:587
msgid "too many arguments"
msgstr "hi ha massa arguments"
-#: builtin/notes.c:389 builtin/notes.c:678
+#: builtin/notes.c:387 builtin/notes.c:676
#, c-format
msgid "no note found for object %s."
msgstr "no s'ha trobat cap nota per a l'objecte %s."
-#: builtin/notes.c:410 builtin/notes.c:576
+#: builtin/notes.c:408 builtin/notes.c:574
msgid "note contents as a string"
msgstr "anota els continguts com a cadena"
-#: builtin/notes.c:413 builtin/notes.c:579
+#: builtin/notes.c:411 builtin/notes.c:577
msgid "note contents in a file"
msgstr "anota els continguts en un fitxer"
-#: builtin/notes.c:416 builtin/notes.c:582
+#: builtin/notes.c:414 builtin/notes.c:580
msgid "reuse and edit specified note object"
msgstr "reusa i edita l'objecte de nota especificat"
-#: builtin/notes.c:419 builtin/notes.c:585
+#: builtin/notes.c:417 builtin/notes.c:583
msgid "reuse specified note object"
msgstr "reusa l'objecte de nota especificat"
-#: builtin/notes.c:422 builtin/notes.c:588
+#: builtin/notes.c:420 builtin/notes.c:586
msgid "allow storing empty note"
msgstr "permet l'emmagatzematge d'una nota buida"
-#: builtin/notes.c:423 builtin/notes.c:496
+#: builtin/notes.c:421 builtin/notes.c:494
msgid "replace existing notes"
msgstr "reemplaça les notes existents"
-#: builtin/notes.c:448
+#: builtin/notes.c:446
#, c-format
msgid ""
"Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite "
@@ -18750,45 +19140,44 @@
"No es poden afegir les notes. S'han trobat notes existents de l'objecte %s. "
"Useu «-f» per a sobreescriure les notes existents"
-#: builtin/notes.c:463 builtin/notes.c:544
+#: builtin/notes.c:461 builtin/notes.c:542
#, c-format
msgid "Overwriting existing notes for object %s\n"
msgstr "S'estan sobreescrivint les notes existents de l'objecte %s\n"
-#: builtin/notes.c:475 builtin/notes.c:637 builtin/notes.c:902
+#: builtin/notes.c:473 builtin/notes.c:635 builtin/notes.c:900
#, c-format
msgid "Removing note for object %s\n"
msgstr "S'està eliminant la nota de l'objecte %s\n"
-#: builtin/notes.c:497
+#: builtin/notes.c:495
msgid "read objects from stdin"
msgstr "llegeix els objectes des de stdin"
-#: builtin/notes.c:499
+#: builtin/notes.c:497
msgid "load rewriting config for <command> (implies --stdin)"
msgstr ""
"carrega la configuració de reescriptura per a <ordre> (implica --stdin)"
-#: builtin/notes.c:517
-#, fuzzy
+#: builtin/notes.c:515
msgid "too few arguments"
-msgstr "hi ha massa arguments"
+msgstr "massa pocs arguments"
-#: builtin/notes.c:538
+#: builtin/notes.c:536
#, c-format
msgid ""
-"Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite "
-"existing notes"
+"Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite"
+" existing notes"
msgstr ""
"No es poden copiar les notes. S'han trobat notes existents de l'objecte %s. "
"Useu «-f» per a sobreescriure les notes existents"
-#: builtin/notes.c:550
+#: builtin/notes.c:548
#, c-format
msgid "missing notes on source object %s. Cannot copy."
msgstr "manquen notes a l'objecte font %s. No es pot copiar."
-#: builtin/notes.c:603
+#: builtin/notes.c:601
#, c-format
msgid ""
"The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n"
@@ -18797,287 +19186,294 @@
"Es desaconsellen les opcions -m/-F/-c/-C en favor de la subordre «edit».\n"
"Useu «git notes add -f -m/-F/-c/-C» en lloc d'això.\n"
-#: builtin/notes.c:698
+#: builtin/notes.c:696
msgid "failed to delete ref NOTES_MERGE_PARTIAL"
msgstr "s'ha produït un error en suprimir la referència NOTES_MERGE_PARTIAL"
-#: builtin/notes.c:700
+#: builtin/notes.c:698
msgid "failed to delete ref NOTES_MERGE_REF"
msgstr "s'ha produït un error en suprimir la referència NOTES_MERGE_REF"
-#: builtin/notes.c:702
+#: builtin/notes.c:700
msgid "failed to remove 'git notes merge' worktree"
msgstr ""
"s'ha produït un error en eliminar l'arbre de treball de «git notes merge»"
-#: builtin/notes.c:722
+#: builtin/notes.c:720
msgid "failed to read ref NOTES_MERGE_PARTIAL"
msgstr "s'ha produït un error en llegir la referència NOTES_MERGE_PARTIAL"
-#: builtin/notes.c:724
+#: builtin/notes.c:722
msgid "could not find commit from NOTES_MERGE_PARTIAL."
msgstr "no s'ha pogut trobar cap comissió de NOTES_MERGE_PARTIAL."
-#: builtin/notes.c:726
+#: builtin/notes.c:724
msgid "could not parse commit from NOTES_MERGE_PARTIAL."
msgstr "no s'ha pogut analitzar la comissió de NOTES_MERGE_PARTIAL."
-#: builtin/notes.c:739
+#: builtin/notes.c:737
msgid "failed to resolve NOTES_MERGE_REF"
msgstr "s'ha produït un error en resoldre NOTES_MERGE_REF"
-#: builtin/notes.c:742
+#: builtin/notes.c:740
msgid "failed to finalize notes merge"
msgstr "s'ha produït un error en finalitzar la fusió de notes"
-#: builtin/notes.c:768
+#: builtin/notes.c:766
#, c-format
msgid "unknown notes merge strategy %s"
msgstr "estratègia de fusió de notes desconeguda %s"
-#: builtin/notes.c:784
+#: builtin/notes.c:782
msgid "General options"
msgstr "Opcions generals"
-#: builtin/notes.c:786
+#: builtin/notes.c:784
msgid "Merge options"
msgstr "Opcions de fusió"
-#: builtin/notes.c:788
+#: builtin/notes.c:786
msgid ""
-"resolve notes conflicts using the given strategy (manual/ours/theirs/union/"
-"cat_sort_uniq)"
+"resolve notes conflicts using the given strategy "
+"(manual/ours/theirs/union/cat_sort_uniq)"
msgstr ""
-"resol els conflictes de nota usant l'estratègia donada (manual/ours/theirs/"
-"union/cat_sort_uniq)"
+"resol els conflictes de nota usant l'estratègia donada "
+"(manual/ours/theirs/union/cat_sort_uniq)"
-#: builtin/notes.c:790
+#: builtin/notes.c:788
msgid "Committing unmerged notes"
msgstr "S'estan cometent les notes sense fusionar"
-#: builtin/notes.c:792
+#: builtin/notes.c:790
msgid "finalize notes merge by committing unmerged notes"
msgstr "finalitza la fusió de notes cometent les notes sense fusionar"
-#: builtin/notes.c:794
+#: builtin/notes.c:792
msgid "Aborting notes merge resolution"
msgstr "S'està avortant la resolució de fusió de notes"
-#: builtin/notes.c:796
+#: builtin/notes.c:794
msgid "abort notes merge"
msgstr "avorta la fusió de notes"
-#: builtin/notes.c:807
+#: builtin/notes.c:805
msgid "cannot mix --commit, --abort or -s/--strategy"
msgstr "no es pot combinar --commit, --abort i -s/--strategy"
-#: builtin/notes.c:812
+#: builtin/notes.c:810
msgid "must specify a notes ref to merge"
msgstr "cal especificar una referència de notes a fusionar"
-#: builtin/notes.c:836
+#: builtin/notes.c:834
#, c-format
msgid "unknown -s/--strategy: %s"
msgstr "-s/--strategy desconeguda: %s"
-#: builtin/notes.c:873
+#: builtin/notes.c:871
#, c-format
msgid "a notes merge into %s is already in-progress at %s"
msgstr "una fusió de notes a %s ja està en curs a %s"
-#: builtin/notes.c:876
+#: builtin/notes.c:874
#, c-format
msgid "failed to store link to current notes ref (%s)"
msgstr ""
"s'ha produït un error en emmagatzemar l'enllaç a la referència de notes "
"actual (%s)"
-#: builtin/notes.c:878
+#: builtin/notes.c:876
#, c-format
msgid ""
-"Automatic notes merge failed. Fix conflicts in %s and commit the result with "
-"'git notes merge --commit', or abort the merge with 'git notes merge --"
-"abort'.\n"
+"Automatic notes merge failed. Fix conflicts in %s and commit the result with"
+" 'git notes merge --commit', or abort the merge with 'git notes merge "
+"--abort'.\n"
msgstr ""
"La fusió de notes automàtica ha fallat. Arregleu els conflictes en %s i "
"cometeu el resultat amb «git notes merge --commit», o avorteu la fusió amb "
"«git notes merge --abort».\n"
-#: builtin/notes.c:897 builtin/tag.c:589
+#: builtin/notes.c:895 builtin/tag.c:590
#, c-format
msgid "Failed to resolve '%s' as a valid ref."
msgstr "S'ha produït un error en resoldre «%s» com a referència vàlida."
-#: builtin/notes.c:900
+#: builtin/notes.c:898
#, c-format
msgid "Object %s has no note\n"
msgstr "L'objecte %s no té cap nota\n"
-#: builtin/notes.c:912
+#: builtin/notes.c:910
msgid "attempt to remove non-existent note is not an error"
msgstr "l'intent d'eliminar una nota no existent no és un error"
-#: builtin/notes.c:915
+#: builtin/notes.c:913
msgid "read object names from the standard input"
msgstr "llegeix els noms d'objecte des de l'entrada estàndard"
-#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:148
+#: builtin/notes.c:952 builtin/prune.c:132 builtin/worktree.c:147
msgid "do not remove, show only"
msgstr "no eliminis, només mostra"
-#: builtin/notes.c:955
+#: builtin/notes.c:953
msgid "report pruned notes"
msgstr "informa de notes podades"
-#: builtin/notes.c:998
+#: builtin/notes.c:996
msgid "notes-ref"
msgstr "referència de notes"
-#: builtin/notes.c:999
+#: builtin/notes.c:997
msgid "use notes from <notes-ref>"
msgstr "usa les notes de <referència-de-notes>"
-#: builtin/notes.c:1034 builtin/stash.c:1739
+#: builtin/notes.c:1032 builtin/stash.c:1752
#, c-format
msgid "unknown subcommand: %s"
msgstr "subordre desconeguda: %s"
-#: builtin/pack-objects.c:54
+#: builtin/pack-objects.c:182
msgid ""
"git pack-objects --stdout [<options>...] [< <ref-list> | < <object-list>]"
msgstr ""
"git pack-objects --stdout [<opcions>...] [< <llista-de-referències> | < "
"<llista-de-objectes>]"
-#: builtin/pack-objects.c:55
+#: builtin/pack-objects.c:183
msgid ""
"git pack-objects [<options>...] <base-name> [< <ref-list> | < <object-list>]"
msgstr ""
"git pack-objects [<opcions>...] <nom-base> [< <llista-de-referències> | < "
"<llista-de-objectes>]"
-#: builtin/pack-objects.c:440
-#, c-format
+#: builtin/pack-objects.c:572
+#, fuzzy, c-format
msgid ""
"write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
"pack %s"
msgstr ""
+"Writereuseobject: no s'ha pogut localitzar %s, s'esperava a la posició "
+"%<PRIuMAX> al paquet %s"
-#: builtin/pack-objects.c:448
+#: builtin/pack-objects.c:580
#, fuzzy, c-format
msgid "bad packed object CRC for %s"
msgstr "objecte CRC mal empaquetat per a percentatges"
-#: builtin/pack-objects.c:459
-#, fuzzy, c-format
+#: builtin/pack-objects.c:591
+#, c-format
msgid "corrupt packed object for %s"
-msgstr "objecte empaquetat corrupte durant els percentatges"
+msgstr "objecte empaquetat corrupte per a %s"
-#: builtin/pack-objects.c:590
-#, fuzzy, c-format
+#: builtin/pack-objects.c:722
+#, c-format
msgid "recursive delta detected for object %s"
-msgstr "delta recursiu detectat per a objectes percentuals"
+msgstr "diferència recursiva detectada per a l'objecte %s"
-#: builtin/pack-objects.c:801
-#, fuzzy, c-format
+#: builtin/pack-objects.c:941
+#, c-format
msgid "ordered %u objects, expected %<PRIu32>"
-msgstr "s'esperava un objecte d'un 1% <PRIu32>"
+msgstr "ordenats %u objectes, s'esperaven %<PRIu32>"
-#: builtin/pack-objects.c:896
+#: builtin/pack-objects.c:1036
#, fuzzy, c-format
msgid "expected object at offset %<PRIuMAX> in pack %s"
msgstr "el paquet té un objecte incorrecte a la posició %<PRIuMAX>: %s"
-#: builtin/pack-objects.c:1015
+#: builtin/pack-objects.c:1160
msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
msgstr ""
-"s'està inhabilitant l'escriptura de mapes de bits, es divideixen els paquets "
-"a causa de pack.packSizeLimit"
+"s'està inhabilitant l'escriptura de mapes de bits, es divideixen els paquets"
+" a causa de pack.packSizeLimit"
-#: builtin/pack-objects.c:1028
+#: builtin/pack-objects.c:1173
msgid "Writing objects"
msgstr "S'estan escrivint els objectes"
-#: builtin/pack-objects.c:1089 builtin/update-index.c:90
+#: builtin/pack-objects.c:1235 builtin/update-index.c:90
#, c-format
msgid "failed to stat %s"
msgstr "s'ha produït un error en fer stat a %s"
-#: builtin/pack-objects.c:1141
-#, fuzzy, c-format
-msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
-msgstr "va escriure%<PRIu32> objectes mentre s'esperava un percentatge<PRIu32>"
+#: builtin/pack-objects.c:1268
+#, fuzzy
+msgid "failed to write bitmap index"
+msgstr "escriu índex de mapa de bits"
-#: builtin/pack-objects.c:1383
+#: builtin/pack-objects.c:1294
+#, c-format
+msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
+msgstr "escrits %<PRIu32> objectes mentre s'esperaven %<PRIu32>"
+
+#: builtin/pack-objects.c:1536
msgid "disabling bitmap writing, as some objects are not being packed"
msgstr ""
-"s'està inhabilitant l'escriptura de mapes de bits, perquè alguns objectes no "
-"s'empaqueten"
+"s'està inhabilitant l'escriptura de mapes de bits, perquè alguns objectes no"
+" s'empaqueten"
-#: builtin/pack-objects.c:1831
+#: builtin/pack-objects.c:1984
#, fuzzy, c-format
msgid "delta base offset overflow in pack for %s"
msgstr "desplaçament de base delta desbordament en paquet de percentatges"
-#: builtin/pack-objects.c:1840
+#: builtin/pack-objects.c:1993
#, fuzzy, c-format
msgid "delta base offset out of bound for %s"
msgstr "decalatge de base de delta fora d'enllaç per un percentatge"
-#: builtin/pack-objects.c:2121
+#: builtin/pack-objects.c:2274
msgid "Counting objects"
msgstr "S'estan comptant els objectes"
-#: builtin/pack-objects.c:2266
+#: builtin/pack-objects.c:2439
#, fuzzy, c-format
msgid "unable to parse object header of %s"
msgstr "no s'ha pogut analitzar la capçalera de l'objecte dels percentatges"
-#: builtin/pack-objects.c:2336 builtin/pack-objects.c:2352
-#: builtin/pack-objects.c:2362
+#: builtin/pack-objects.c:2509 builtin/pack-objects.c:2525
+#: builtin/pack-objects.c:2535
#, fuzzy, c-format
msgid "object %s cannot be read"
msgstr "no es poden llegir els objectes percentuals"
-#: builtin/pack-objects.c:2339 builtin/pack-objects.c:2366
+#: builtin/pack-objects.c:2512 builtin/pack-objects.c:2539
#, fuzzy, c-format
msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
msgstr "objecte%s longitud d'objecte inconsistent (%<PRIuMAX> vs%<PRIuMAX>)"
-#: builtin/pack-objects.c:2376
+#: builtin/pack-objects.c:2549
#, fuzzy
msgid "suboptimal pack - out of memory"
msgstr "paquet subòptim - sense memòria"
-#: builtin/pack-objects.c:2691
+#: builtin/pack-objects.c:2864
#, c-format
msgid "Delta compression using up to %d threads"
msgstr "Compressió de diferències usant fins a %d fils"
-#: builtin/pack-objects.c:2830
+#: builtin/pack-objects.c:3003
#, c-format
msgid "unable to pack objects reachable from tag %s"
-msgstr "no s'han pogut empaquetar els objectes abastables des de l'etiqueta %s"
+msgstr ""
+"no s'han pogut empaquetar els objectes abastables des de l'etiqueta %s"
-#: builtin/pack-objects.c:2916
+#: builtin/pack-objects.c:3089
msgid "Compressing objects"
msgstr "S'estan comprimint els objectes"
-#: builtin/pack-objects.c:2922
-#, fuzzy
+#: builtin/pack-objects.c:3095
msgid "inconsistency with delta count"
msgstr "inconsistència amb el comptador de diferències"
-#: builtin/pack-objects.c:3001
+#: builtin/pack-objects.c:3174
#, fuzzy, c-format
msgid ""
-"value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
-"hash> <uri>' (got '%s')"
+"value of uploadpack.blobpackfileuri must be of the form '<object-hash> "
+"<pack-hash> <uri>' (got '%s')"
msgstr ""
"el valor de uppack.blobpackfileuri ha de ser de la forma '<object-hash> "
"<pack-hash> <uri>' (gotat '%s')"
-#: builtin/pack-objects.c:3004
+#: builtin/pack-objects.c:3177
#, fuzzy, c-format
msgid ""
"object already configured in another uploadpack.blobpackfileuri (got '%s')"
@@ -19085,17 +19481,18 @@
"l'objecte ja està configurat en un altre uploadpack.blobpackfileuri (gotat "
"'%')"
-#: builtin/pack-objects.c:3039
+#: builtin/pack-objects.c:3212
#, fuzzy, c-format
msgid "could not get type of object %s in pack %s"
msgstr "no s'ha pogut obtenir el tipus de l'objecte: %s"
-#: builtin/pack-objects.c:3161 builtin/pack-objects.c:3175
+#: builtin/pack-objects.c:3340 builtin/pack-objects.c:3351
+#: builtin/pack-objects.c:3365
#, fuzzy, c-format
msgid "could not find pack '%s'"
msgstr "no s'ha pogut finalitzar «%s»"
-#: builtin/pack-objects.c:3218
+#: builtin/pack-objects.c:3408
#, fuzzy, c-format
msgid ""
"expected edge object ID, got garbage:\n"
@@ -19104,7 +19501,7 @@
"s'esperava un identificador d'objecte de vora amb brossa s'han obtingut "
"percentatges d'escombraries"
-#: builtin/pack-objects.c:3224
+#: builtin/pack-objects.c:3414
#, c-format
msgid ""
"expected object ID, got garbage:\n"
@@ -19113,284 +19510,288 @@
"s'esperava un ID d'objecte, s'ha rebut brossa:\n"
" %s"
-#: builtin/pack-objects.c:3322
+#: builtin/pack-objects.c:3507
msgid "invalid value for --missing"
msgstr "valor no vàlid per a --missing"
-#: builtin/pack-objects.c:3381 builtin/pack-objects.c:3490
+#: builtin/pack-objects.c:3532 builtin/pack-objects.c:3619
#, fuzzy
msgid "cannot open pack index"
msgstr "no s'ha pogut obrir l'índex del paquet"
-#: builtin/pack-objects.c:3412
+#: builtin/pack-objects.c:3541
#, fuzzy, c-format
msgid "loose object at %s could not be examined"
msgstr "no s'han pogut examinar els objectes solts"
-#: builtin/pack-objects.c:3498
+#: builtin/pack-objects.c:3627
#, fuzzy
msgid "unable to force loose object"
msgstr "no s'ha pogut forçar l'objecte solt"
-#: builtin/pack-objects.c:3628
+#: builtin/pack-objects.c:3757
#, fuzzy, c-format
msgid "not a rev '%s'"
msgstr "no és una revisió \"%s\""
-#: builtin/pack-objects.c:3631
+#: builtin/pack-objects.c:3760 builtin/rev-parse.c:1061
#, c-format
msgid "bad revision '%s'"
msgstr "revisió incorrecte «%s»"
-#: builtin/pack-objects.c:3659
+#: builtin/pack-objects.c:3788
msgid "unable to add recent objects"
msgstr "no s'han pogut afegir els objectes recents"
-#: builtin/pack-objects.c:3712
+#: builtin/pack-objects.c:3841
#, c-format
msgid "unsupported index version %s"
msgstr "versió d'índex no compatible %s"
-#: builtin/pack-objects.c:3716
+#: builtin/pack-objects.c:3845
#, c-format
msgid "bad index version '%s'"
msgstr "versió d'índex incorrecta «%s»"
-#: builtin/pack-objects.c:3755
+#: builtin/pack-objects.c:3884
msgid "<version>[,<offset>]"
msgstr "<versió>[,<desplaçament>]"
-#: builtin/pack-objects.c:3756
+#: builtin/pack-objects.c:3885
msgid "write the pack index file in the specified idx format version"
msgstr ""
"escriu el fitxer d'índex de paquet en la versió de format d'índex "
"especificada"
-#: builtin/pack-objects.c:3759
+#: builtin/pack-objects.c:3888
msgid "maximum size of each output pack file"
msgstr "mida màxima de cada fitxer empaquetat de sortida"
-#: builtin/pack-objects.c:3761
+#: builtin/pack-objects.c:3890
msgid "ignore borrowed objects from alternate object store"
-msgstr "ignora els objectes prestats d'un emmagatzematge d'objectes alternatiu"
+msgstr ""
+"ignora els objectes prestats d'un emmagatzematge d'objectes alternatiu"
-#: builtin/pack-objects.c:3763
+#: builtin/pack-objects.c:3892
msgid "ignore packed objects"
msgstr "ignora els objectes empaquetats"
-#: builtin/pack-objects.c:3765
+#: builtin/pack-objects.c:3894
msgid "limit pack window by objects"
msgstr "limita la finestra d'empaquetament per objectes"
-#: builtin/pack-objects.c:3767
+#: builtin/pack-objects.c:3896
msgid "limit pack window by memory in addition to object limit"
msgstr ""
"limita la finestra d'empaquetament per memòria a més del límit d'objectes"
-#: builtin/pack-objects.c:3769
+#: builtin/pack-objects.c:3898
msgid "maximum length of delta chain allowed in the resulting pack"
msgstr ""
"longitud màxima de la cadena de diferències permesa en el paquet resultant"
-#: builtin/pack-objects.c:3771
+#: builtin/pack-objects.c:3900
msgid "reuse existing deltas"
msgstr "reusa les diferències existents"
-#: builtin/pack-objects.c:3773
+#: builtin/pack-objects.c:3902
msgid "reuse existing objects"
msgstr "reusa els objectes existents"
-#: builtin/pack-objects.c:3775
+#: builtin/pack-objects.c:3904
msgid "use OFS_DELTA objects"
msgstr "usa objectes OFS_DELTA"
-#: builtin/pack-objects.c:3777
+#: builtin/pack-objects.c:3906
msgid "use threads when searching for best delta matches"
msgstr "usa fils en cercar les millores coincidències de diferències"
-#: builtin/pack-objects.c:3779
+#: builtin/pack-objects.c:3908
msgid "do not create an empty pack output"
msgstr "no creïs una emissió de paquet buida"
-#: builtin/pack-objects.c:3781
+#: builtin/pack-objects.c:3910
msgid "read revision arguments from standard input"
msgstr "llegeix els arguments de revisió des de l'entrada estàndard"
-#: builtin/pack-objects.c:3783
+#: builtin/pack-objects.c:3912
msgid "limit the objects to those that are not yet packed"
msgstr "limita els objectes als quals encara no s'hagin empaquetat"
-#: builtin/pack-objects.c:3786
+#: builtin/pack-objects.c:3915
msgid "include objects reachable from any reference"
msgstr "inclou els objectes abastables de qualsevol referència"
-#: builtin/pack-objects.c:3789
+#: builtin/pack-objects.c:3918
msgid "include objects referred by reflog entries"
msgstr ""
"inclou els objectes als quals facin referència les entrades del registre de "
"referències"
-#: builtin/pack-objects.c:3792
+#: builtin/pack-objects.c:3921
msgid "include objects referred to by the index"
msgstr "inclou els objectes als quals faci referència l'índex"
-#: builtin/pack-objects.c:3795
+#: builtin/pack-objects.c:3924
#, fuzzy
msgid "read packs from stdin"
msgstr "llegeix les actualitzacions des de stdin"
-#: builtin/pack-objects.c:3797
+#: builtin/pack-objects.c:3926
msgid "output pack to stdout"
msgstr "emet el paquet a stdout"
-#: builtin/pack-objects.c:3799
+#: builtin/pack-objects.c:3928
msgid "include tag objects that refer to objects to be packed"
msgstr ""
-"inclou els objectes d'etiqueta que facin referència als objectes a empaquetar"
+"inclou els objectes d'etiqueta que facin referència als objectes a "
+"empaquetar"
-#: builtin/pack-objects.c:3801
+#: builtin/pack-objects.c:3930
msgid "keep unreachable objects"
msgstr "retén els objectes inabastables"
-#: builtin/pack-objects.c:3803
+#: builtin/pack-objects.c:3932
msgid "pack loose unreachable objects"
msgstr "empaqueta els objectes inabastables solts"
-#: builtin/pack-objects.c:3805
+#: builtin/pack-objects.c:3934
msgid "unpack unreachable objects newer than <time>"
msgstr "desempaqueta els objectes inabastables més nous que <hora>"
-#: builtin/pack-objects.c:3808
+#: builtin/pack-objects.c:3937
#, fuzzy
msgid "use the sparse reachability algorithm"
msgstr "utilitza l'algorisme d'accessibilitat dispers"
-#: builtin/pack-objects.c:3810
+#: builtin/pack-objects.c:3939
msgid "create thin packs"
msgstr "crea paquets prims"
-#: builtin/pack-objects.c:3812
+#: builtin/pack-objects.c:3941
msgid "create packs suitable for shallow fetches"
msgstr "crea paquets adequats per a les obtencions superficials"
-#: builtin/pack-objects.c:3814
+#: builtin/pack-objects.c:3943
msgid "ignore packs that have companion .keep file"
msgstr "ignora els paquets que tinguin un fitxer .keep corresponent"
-#: builtin/pack-objects.c:3816
+#: builtin/pack-objects.c:3945
#, fuzzy
msgid "ignore this pack"
msgstr "ignora aquest paquet"
-#: builtin/pack-objects.c:3818
+#: builtin/pack-objects.c:3947
msgid "pack compression level"
msgstr "nivell de compressió de paquet"
-#: builtin/pack-objects.c:3820
+#: builtin/pack-objects.c:3949
msgid "do not hide commits by grafts"
msgstr "no amaguis les comissions per empelt"
-#: builtin/pack-objects.c:3822
+#: builtin/pack-objects.c:3951
msgid "use a bitmap index if available to speed up counting objects"
msgstr ""
"usa un índex de mapa de bits, si està disponible, per a accelerar el "
"recompte d'objectes"
-#: builtin/pack-objects.c:3824
+#: builtin/pack-objects.c:3953
msgid "write a bitmap index together with the pack index"
msgstr "escriu un índex de mapa de bits juntament amb l'índex de paquet"
-#: builtin/pack-objects.c:3828
+#: builtin/pack-objects.c:3957
#, fuzzy
msgid "write a bitmap index if possible"
msgstr "escriu un índex de mapa de bits si és possible"
-#: builtin/pack-objects.c:3832
+#: builtin/pack-objects.c:3961
msgid "handling for missing objects"
msgstr "gestió dels objectes absents"
-#: builtin/pack-objects.c:3835
+#: builtin/pack-objects.c:3964
#, fuzzy
msgid "do not pack objects in promisor packfiles"
msgstr "no empaqueta els objectes als fitxers del paquet promisor"
-#: builtin/pack-objects.c:3837
+#: builtin/pack-objects.c:3966
#, fuzzy
msgid "respect islands during delta compression"
msgstr "respecta les illes durant la compressió delta"
-#: builtin/pack-objects.c:3839
+#: builtin/pack-objects.c:3968
#, fuzzy
msgid "protocol"
msgstr "protocol"
-#: builtin/pack-objects.c:3840
+#: builtin/pack-objects.c:3969
#, fuzzy
msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
-msgstr "exclou qualsevol uppack.blobpackfileuri configurat amb aquest protocol"
+msgstr ""
+"exclou qualsevol uppack.blobpackfileuri configurat amb aquest protocol"
-#: builtin/pack-objects.c:3873
+#: builtin/pack-objects.c:4002
#, fuzzy, c-format
msgid "delta chain depth %d is too deep, forcing %d"
msgstr ""
"la profunditat de la cadena delta és massa profunda forçant un percentatge"
-#: builtin/pack-objects.c:3878
+#: builtin/pack-objects.c:4007
#, fuzzy, c-format
msgid "pack.deltaCacheLimit is too high, forcing %d"
msgstr "pack.deltaCacheLimit és massa alt forçant un percentatge"
-#: builtin/pack-objects.c:3934
+#: builtin/pack-objects.c:4063
#, fuzzy
msgid "--max-pack-size cannot be used to build a pack for transfer"
msgstr ""
"--max-pack-size no es pot utilitzar per construir un paquet per a la "
"transferència"
-#: builtin/pack-objects.c:3936
+#: builtin/pack-objects.c:4065
#, fuzzy
msgid "minimum pack size limit is 1 MiB"
msgstr "el límit mínim de mida del paquet és 1 MiB"
-#: builtin/pack-objects.c:3941
+#: builtin/pack-objects.c:4070
#, fuzzy
msgid "--thin cannot be used to build an indexable pack"
msgstr "--thin no es pot utilitzar per construir un paquet indexable"
-#: builtin/pack-objects.c:3944
+#: builtin/pack-objects.c:4073
#, fuzzy
msgid "--keep-unreachable and --unpack-unreachable are incompatible"
msgstr "--keep-unreachable i --unpack-unreachable són incompatibles"
-#: builtin/pack-objects.c:3950
+#: builtin/pack-objects.c:4079
#, fuzzy
msgid "cannot use --filter without --stdout"
msgstr "no es pot utilitzar --filter sense --stdout"
-#: builtin/pack-objects.c:3952
+#: builtin/pack-objects.c:4081
#, fuzzy
msgid "cannot use --filter with --stdin-packs"
msgstr "no es pot utilitzar --filter sense --stdout"
-#: builtin/pack-objects.c:3956
+#: builtin/pack-objects.c:4085
#, fuzzy
msgid "cannot use internal rev list with --stdin-packs"
msgstr "no es poden especificar noms de camí amb --stdin"
-#: builtin/pack-objects.c:4015
+#: builtin/pack-objects.c:4144
msgid "Enumerating objects"
msgstr "S'estan enumerant els objectes"
-#: builtin/pack-objects.c:4052
+#: builtin/pack-objects.c:4181
#, c-format
msgid ""
"Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
"reused %<PRIu32>"
msgstr ""
-"Total %<PRIu32> (%<PRIu32> diferències), reusats %<PRIu32> (%<PRIu32> diferències), paquets "
-"reusats %<PRIu32>"
+"Total %<PRIu32> (%<PRIu32> diferències), reusats %<PRIu32> (%<PRIu32> "
+"diferències), paquets reusats %<PRIu32>"
#: builtin/pack-redundant.c:601
+#, fuzzy
msgid ""
"'git pack-redundant' is nominated for removal.\n"
"If you still use this command, please add an extra\n"
@@ -19398,6 +19799,11 @@
"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' és nominat per a la seva supressió.\n"
+"Si encara feu servir aquesta ordre, afegiu-hi un extra\n"
+"opció, «--i-still-use-this», a la línia d'ordres\n"
+"i fem-nos saber que encara l'useu enviant un correu electrònic\n"
+"a <git@vger.kernel.org>to Gràcies."
#: builtin/pack-refs.c:8
msgid "git pack-refs [<options>]"
@@ -19432,7 +19838,7 @@
msgid "limit traversal to objects outside promisor packfiles"
msgstr "limita el trànsit d'objectes fora dels fitxers del paquet promisor"
-#: builtin/prune.c:152
+#: builtin/prune.c:151
msgid "cannot prune in a precious-objects repo"
msgstr "no es pot podar en un repositori d'objectes preciosos"
@@ -19443,7 +19849,8 @@
#: builtin/pull.c:67
msgid "git pull [<options>] [<repository> [<refspec>...]]"
-msgstr "git pull [<opcions>] [<repositori> [<especificació-de-referència>...]]"
+msgstr ""
+"git pull [<opcions>] [<repositori> [<especificació-de-referència>...]]"
#: builtin/pull.c:123
msgid "control for recursive fetching of submodules"
@@ -19457,14 +19864,13 @@
msgid "incorporate changes by rebasing rather than merging"
msgstr "incorpora els canvis fent «rebase» en lloc de fusionar"
-#: builtin/pull.c:158 builtin/rebase.c:491 builtin/revert.c:126
+#: builtin/pull.c:158 builtin/revert.c:126
msgid "allow fast-forward"
msgstr "permet l'avanç ràpid"
-#: builtin/pull.c:167 parse-options.h:340
-#, fuzzy
+#: builtin/pull.c:167 parse-options.h:339
msgid "automatically stash/stash pop before and after"
-msgstr "«stash»/«stash» automàticament abans i després"
+msgstr "fes «stash» i «stash pop» automàticament abans i després"
#: builtin/pull.c:183
msgid "Options related to fetching"
@@ -19495,7 +19901,8 @@
msgid ""
"There are no candidates for merging among the refs that you just fetched."
msgstr ""
-"No hi ha candidats per a fusionar entre les referències que acabeu d'obtenir."
+"No hi ha candidats per a fusionar entre les referències que acabeu "
+"d'obtenir."
#: builtin/pull.c:448
msgid ""
@@ -19516,7 +19923,7 @@
"Perquè aquest no és el remot configurat per defecte per a la vostra\n"
"branca actual, heu d'especificar una branca en la línia d'ordres."
-#: builtin/pull.c:456 builtin/rebase.c:1248
+#: builtin/pull.c:456 builtin/rebase.c:951
msgid "You are not currently on a branch."
msgstr "Actualment no sou en cap branca."
@@ -19533,7 +19940,7 @@
msgstr "Vegeu git-pull(1) per a més informació."
#: builtin/pull.c:463 builtin/pull.c:469 builtin/pull.c:478
-#: builtin/rebase.c:1254
+#: builtin/rebase.c:957
msgid "<remote>"
msgstr "<remot>"
@@ -19541,7 +19948,7 @@
msgid "<branch>"
msgstr "<branca>"
-#: builtin/pull.c:471 builtin/rebase.c:1246
+#: builtin/pull.c:471 builtin/rebase.c:949
msgid "There is no tracking information for the current branch."
msgstr "No hi ha cap informació de seguiment per a la branca actual."
@@ -19549,8 +19956,8 @@
msgid ""
"If you wish to set tracking information for this branch you can do so with:"
msgstr ""
-"Si voleu establir informació de seguiment per a aquesta branca, podeu fer-ho "
-"amb:"
+"Si voleu establir informació de seguiment per a aquesta branca, podeu fer-ho"
+" amb:"
#: builtin/pull.c:485
#, c-format
@@ -19570,18 +19977,18 @@
msgid "ignoring --verify-signatures for rebase"
msgstr "s'està ignorant --verify-signatures en fer «rebase»"
-#: builtin/pull.c:930
+#: builtin/pull.c:936
+#, fuzzy
msgid ""
-"Pulling without specifying how to reconcile divergent branches is\n"
-"discouraged. You can squelch this message by running one of the following\n"
-"commands sometime before your next pull:\n"
+"You have divergent branches and need to specify how to reconcile them.\n"
+"You can do so by running one of the following commands sometime before\n"
+"your next pull:\n"
"\n"
" git config pull.rebase false # merge (the default strategy)\n"
" git config pull.rebase 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"
+"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"
@@ -19599,20 +20006,20 @@
"--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:991
+#: builtin/pull.c:1010
msgid "Updating an unborn branch with changes added to the index."
msgstr ""
"S'està actualitzant una branca no nascuda amb canvis afegits a l'índex."
-#: builtin/pull.c:995
+#: builtin/pull.c:1014
msgid "pull with rebase"
msgstr "baixar fent «rebase»"
-#: builtin/pull.c:996
+#: builtin/pull.c:1015
msgid "please commit or stash them."
msgstr "cometeu-los o emmagatzemeu-los."
-#: builtin/pull.c:1021
+#: builtin/pull.c:1040
#, c-format
msgid ""
"fetch updated the current branch head.\n"
@@ -19623,7 +20030,7 @@
"s'està avançant ràpidament el vostre arbre de treball des de\n"
"la comissió %s."
-#: builtin/pull.c:1027
+#: builtin/pull.c:1046
#, c-format
msgid ""
"Cannot fast-forward your working tree.\n"
@@ -19634,22 +20041,31 @@
"to recover."
msgstr ""
"No es pot avançar ràpidament el vostre arbre de treball.\n"
-"Després d'assegurar que hàgiu desat qualsevol cosa preciosa de la sortida "
-"de\n"
+"Després d'assegurar que hàgiu desat qualsevol cosa preciosa de la sortida de\n"
"$ git diff %s\n"
"executeu\n"
"$ git reset --hard\n"
"per a recuperar."
-#: builtin/pull.c:1042
+#: builtin/pull.c:1061
msgid "Cannot merge multiple branches into empty head."
msgstr "No es poden fusionar múltiples branques a un HEAD buit."
-#: builtin/pull.c:1046
+#: builtin/pull.c:1066
msgid "Cannot rebase onto multiple branches."
msgstr "No es pot fer «rebase» sobre múltiples branques."
-#: builtin/pull.c:1067
+#: builtin/pull.c:1068
+#, fuzzy
+msgid "Cannot fast-forward to multiple branches."
+msgstr "No es pot fer «rebase» sobre múltiples branques."
+
+#: builtin/pull.c:1082
+#, fuzzy
+msgid "Need to specify how to reconcile divergent branches."
+msgstr "Cal especificar com conciliar les branques divergents."
+
+#: builtin/pull.c:1096
msgid "cannot rebase with locally recorded submodule modifications"
msgstr ""
"no es pot fer «rebase» amb modificacions als submòduls enregistrades "
@@ -19657,7 +20073,8 @@
#: builtin/push.c:19
msgid "git push [<options>] [<repository> [<refspec>...]]"
-msgstr "git push [<opcions>] [<repositori> [<especificació-de-referència>...]]"
+msgstr ""
+"git push [<opcions>] [<repositori> [<especificació-de-referència>...]]"
#: builtin/push.c:111
msgid "tag shorthand without <tag>"
@@ -19673,8 +20090,7 @@
"To choose either option permanently, see push.default in 'git help config'."
msgstr ""
"\n"
-"Per a triar qualsevol opció permanentment, vegeu push.default a «git help "
-"config»."
+"Per a triar qualsevol opció permanentment, vegeu push.default a «git help config»."
#: builtin/push.c:167
#, c-format
@@ -19716,7 +20132,7 @@
"\n"
" git push %s HEAD:<nom-de-branca-remota>\n"
-#: builtin/push.c:194
+#: builtin/push.c:191
#, c-format
msgid ""
"The current branch %s has no upstream branch.\n"
@@ -19729,13 +20145,20 @@
"\n"
" git push --set-upstream %s %s\n"
-#: builtin/push.c:202
+#: builtin/push.c:199
#, c-format
-msgid "The current branch %s has multiple upstream branches, refusing to push."
+msgid ""
+"The current branch %s has multiple upstream branches, refusing to push."
msgstr ""
"La branca actual %s té múltiples branques fonts, s'està refusant pujar."
-#: builtin/push.c:205
+#: builtin/push.c:217
+msgid "You didn't specify any refspecs to push, and push.default is \"nothing\"."
+msgstr ""
+"No heu especificat cap especificació de referència a pujar, i push.default "
+"és «nothing»."
+
+#: builtin/push.c:243
#, c-format
msgid ""
"You are pushing to remote '%s', which is not the upstream of\n"
@@ -19746,14 +20169,7 @@
"branca actual «%s», sense dir-me què pujar per a actualitzar\n"
"quina branca remota."
-#: builtin/push.c:260
-msgid ""
-"You didn't specify any refspecs to push, and push.default is \"nothing\"."
-msgstr ""
-"No heu especificat cap especificació de referència a pujar, i push.default "
-"és «nothing»."
-
-#: builtin/push.c:267
+#: builtin/push.c:258
msgid ""
"Updates were rejected because the tip of your current branch is behind\n"
"its remote counterpart. Integrate the remote changes (e.g.\n"
@@ -19763,10 +20179,9 @@
"S'han rebutjat les actualitzacions perquè el punt de la vostra branca\n"
"actual està darrere de la seva branca remota corresponent. Integreu\n"
"els canvis remots (per exemple, «git pull ...») abans de pujar de nou.\n"
-"Vegeu la «Nota sobre avanços ràpids» a «git push --help» per a més "
-"informació."
+"Vegeu la «Nota sobre avanços ràpids» a «git push --help» per a més informació."
-#: builtin/push.c:273
+#: builtin/push.c:264
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"
@@ -19777,10 +20192,9 @@
"està darrere de la seva branca remota corresponent. Agafeu aquesta\n"
"branca i integreu els canvis remots (per exemple, «git pull ...»)\n"
"abans de pujar de nou.\n"
-"Vegeu la «Nota sobre avanços ràpids» a «git push --help» per a més "
-"informació."
+"Vegeu la «Nota sobre avanços ràpids» a «git push --help» per a més informació."
-#: builtin/push.c:279
+#: builtin/push.c:270
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"
@@ -19793,15 +20207,15 @@
"que ha pujat a la mateixa referència. Pot ser que primer vulgueu\n"
"integrar els canvis remots (per exemple, «git pull ...») abans de\n"
"pujar de nou.\n"
-"Vegeu la «Nota sobre avanços ràpids» a «git push --help» per a més "
-"informació."
+"Vegeu la «Nota sobre avanços ràpids» a «git push --help» per a més informació."
-#: builtin/push.c:286
+#: builtin/push.c:277
msgid "Updates were rejected because the tag already exists in the remote."
msgstr ""
-"S'han rebutjat les actualitzacions perquè l'etiqueta ja existeix en el remot."
+"S'han rebutjat les actualitzacions perquè l'etiqueta ja existeix en el "
+"remot."
-#: builtin/push.c:289
+#: builtin/push.c:280
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"
@@ -19812,7 +20226,7 @@
"fer que assenyali un objecte no de comissió, sense usar l'opció\n"
"«--force».\n"
-#: builtin/push.c:294
+#: builtin/push.c:285
#, fuzzy
msgid ""
"Updates were rejected because the tip of the remote-tracking\n"
@@ -19823,110 +20237,108 @@
"S'han rebutjat les actualitzacions perquè el punt de la vostra branca\n"
"actual està darrere de la seva branca remota corresponent. Integreu\n"
"els canvis remots (per exemple, «git pull ...») abans de pujar de nou.\n"
-"Vegeu la «Nota sobre avanços ràpids» a «git push --help» per a més "
-"informació."
+"Vegeu la «Nota sobre avanços ràpids» a «git push --help» per a més informació."
-#: builtin/push.c:364
+#: builtin/push.c:355
#, c-format
msgid "Pushing to %s\n"
msgstr "S'està pujant a %s\n"
-#: builtin/push.c:371
+#: builtin/push.c:362
#, c-format
msgid "failed to push some refs to '%s'"
msgstr "s'ha produït un error en pujar algunes referències a «%s»"
-#: builtin/push.c:553
+#: builtin/push.c:544 builtin/submodule--helper.c:3258
msgid "repository"
msgstr "repositori"
-#: builtin/push.c:554 builtin/send-pack.c:189
+#: builtin/push.c:545 builtin/send-pack.c:193
msgid "push all refs"
msgstr "puja totes les referències"
-#: builtin/push.c:555 builtin/send-pack.c:191
+#: builtin/push.c:546 builtin/send-pack.c:195
msgid "mirror all refs"
msgstr "reflecteix totes les referències"
-#: builtin/push.c:557
+#: builtin/push.c:548
msgid "delete refs"
msgstr "suprimeix les referències"
-#: builtin/push.c:558
+#: builtin/push.c:549
msgid "push tags (can't be used with --all or --mirror)"
msgstr "puja les etiquetes (no es pot usar amb --all o --mirror)"
-#: builtin/push.c:561 builtin/send-pack.c:192
+#: builtin/push.c:552 builtin/send-pack.c:196
msgid "force updates"
msgstr "força les actualitzacions"
-#: builtin/push.c:562 builtin/send-pack.c:204
+#: builtin/push.c:553 builtin/send-pack.c:208
msgid "<refname>:<expect>"
msgstr "<nom-de-referència>:<esperat>"
-#: builtin/push.c:563 builtin/send-pack.c:205
+#: builtin/push.c:554 builtin/send-pack.c:209
msgid "require old value of ref to be at this value"
msgstr "requereix que el valor antic de la referència sigui d'aquest valor"
-#: builtin/push.c:566 builtin/send-pack.c:208
+#: builtin/push.c:557 builtin/send-pack.c:212
msgid "require remote updates to be integrated locally"
msgstr "requereix que les actualitzacions remotes s'integrin localment"
-#: builtin/push.c:569
+#: builtin/push.c:560
msgid "control recursive pushing of submodules"
msgstr "controla la pujada recursiva dels submòduls"
-#: builtin/push.c:570 builtin/send-pack.c:199
+#: builtin/push.c:561 builtin/send-pack.c:203
msgid "use thin pack"
msgstr "usa el paquet prim"
-#: builtin/push.c:571 builtin/push.c:572 builtin/send-pack.c:186
-#: builtin/send-pack.c:187
+#: builtin/push.c:562 builtin/push.c:563 builtin/send-pack.c:190
+#: builtin/send-pack.c:191
msgid "receive pack program"
msgstr "programa que rep els paquets"
-#: builtin/push.c:573
+#: builtin/push.c:564
msgid "set upstream for git pull/status"
msgstr "estableix la font per a git pull/status"
-#: builtin/push.c:576
+#: builtin/push.c:567
msgid "prune locally removed refs"
msgstr "poda les referències eliminades localment"
-#: builtin/push.c:578
+#: builtin/push.c:569
msgid "bypass pre-push hook"
msgstr "evita el lligam de prepujada"
-#: builtin/push.c:579
+#: builtin/push.c:570
msgid "push missing but relevant tags"
msgstr "puja les etiquetes absents però rellevants"
-#: builtin/push.c:581 builtin/send-pack.c:193
+#: builtin/push.c:572 builtin/send-pack.c:197
msgid "GPG sign the push"
msgstr "signa la pujada amb GPG"
-#: builtin/push.c:583 builtin/send-pack.c:200
+#: builtin/push.c:574 builtin/send-pack.c:204
msgid "request atomic transaction on remote side"
msgstr "demana una transacció atòmica al costat remot"
-#: builtin/push.c:601
+#: builtin/push.c:592
msgid "--delete is incompatible with --all, --mirror and --tags"
msgstr "--delete és incompatible amb --all, --mirror i --tags"
-#: builtin/push.c:603
+#: builtin/push.c:594
msgid "--delete doesn't make sense without any refs"
msgstr "--delete no té sentit sense referències"
-#: builtin/push.c:623
+#: builtin/push.c:614
#, c-format
msgid "bad repository '%s'"
msgstr "repositori incorrecte «%s»"
-#: builtin/push.c:624
+#: builtin/push.c:615
msgid ""
"No configured push destination.\n"
-"Either specify the URL from the command-line or configure a remote "
-"repository using\n"
+"Either specify the URL from the command-line or configure a remote repository using\n"
"\n"
" git remote add <name> <url>\n"
"\n"
@@ -19935,8 +20347,7 @@
" git push <name>\n"
msgstr ""
"No hi ha cap destí de pujada configurat.\n"
-"Especifiqueu l'URL des de la línia d'ordres o bé configureu un repositori remot "
-"fent servir\n"
+"Especifiqueu l'URL des de la línia d'ordres o bé configureu un repositori remot fent servir\n"
"\n"
" git remote add <nom> <url>\n"
"\n"
@@ -19944,36 +20355,34 @@
"\n"
" git push <nom>\n"
-#: builtin/push.c:639
+#: builtin/push.c:630
msgid "--all and --tags are incompatible"
msgstr "--all i --tags són incompatibles"
-#: builtin/push.c:641
+#: builtin/push.c:632
msgid "--all can't be combined with refspecs"
msgstr "--all no es pot combinar amb especificacions de referència"
-#: builtin/push.c:645
+#: builtin/push.c:636
msgid "--mirror and --tags are incompatible"
msgstr "--mirror i --tags són incompatibles"
-#: builtin/push.c:647
+#: builtin/push.c:638
msgid "--mirror can't be combined with refspecs"
msgstr "--mirror no es pot combinar amb especificacions de referència"
-#: builtin/push.c:650
+#: builtin/push.c:641
msgid "--all and --mirror are incompatible"
msgstr "--all i --mirror són incompatibles"
-#: builtin/push.c:657
+#: builtin/push.c:648
msgid "push options must not have new line characters"
msgstr "les opcions de pujada no han de tenir caràcters de línia nova"
#: builtin/range-diff.c:9
-#, fuzzy
msgid "git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"
msgstr ""
-"git range-diff [<opcions>] <old-base>..<old-tip> <new-base>.<new-tip>..<new-"
-"tip>."
+"git range-diff [<opcions>] <old-base>..<old-tip> <new-base>..<new-tip>"
#: builtin/range-diff.c:10
msgid "git range-diff [<options>] <old-tip>...<new-tip>"
@@ -19988,14 +20397,12 @@
msgstr "utilitza colors simples de diff"
#: builtin/range-diff.c:32
-#, fuzzy
msgid "notes"
msgstr "notes"
#: builtin/range-diff.c:32
-#, fuzzy
msgid "passed to 'git log'"
-msgstr "passa a 'git log'"
+msgstr "passa-ho a «git log»"
#: builtin/range-diff.c:35
#, fuzzy
@@ -20021,85 +20428,86 @@
msgstr "calen dos rangs de comissió"
#: builtin/read-tree.c:41
+#, fuzzy
msgid ""
-"git read-tree [(-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>) "
-"[-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--"
-"index-output=<file>] (--empty | <tree-ish1> [<tree-ish2> [<tree-ish3>]])"
+"git read-tree [(-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>)"
+" [-u | -i]] [--no-sparse-checkout] [--index-output=<file>] (--empty | <tree-"
+"ish1> [<tree-ish2> [<tree-ish3>]])"
msgstr ""
-"git read-tree [(-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>) "
-"[-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--"
-"index-output=<fitxer>] (--empty | <arbre1> [<arbre2> [<arbre3>]])"
+"git read-tree [(-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>)"
+" [-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] "
+"[--index-output=<fitxer>] (--empty | <arbre1> [<arbre2> [<arbre3>]])"
-#: builtin/read-tree.c:124
+#: builtin/read-tree.c:116
msgid "write resulting index to <file>"
msgstr "escriu l'índex resultant al <fitxer>"
-#: builtin/read-tree.c:127
+#: builtin/read-tree.c:119
msgid "only empty the index"
msgstr "només buida l'índex"
-#: builtin/read-tree.c:129
+#: builtin/read-tree.c:121
msgid "Merging"
msgstr "S'està fusionant"
-#: builtin/read-tree.c:131
+#: builtin/read-tree.c:123
msgid "perform a merge in addition to a read"
msgstr "realitza una fusió a més d'una lectura"
-#: builtin/read-tree.c:133
+#: builtin/read-tree.c:125
msgid "3-way merge if no file level merging required"
msgstr "fusió de 3 vies si no cal fusió a nivell de fitxers"
-#: builtin/read-tree.c:135
+#: builtin/read-tree.c:127
msgid "3-way merge in presence of adds and removes"
msgstr "fusió de 3 vies en presència d'afegiments i eliminacions"
-#: builtin/read-tree.c:137
+#: builtin/read-tree.c:129
msgid "same as -m, but discard unmerged entries"
msgstr "el mateix que -m, però descarta les entrades no fusionades"
-#: builtin/read-tree.c:138
+#: builtin/read-tree.c:130
msgid "<subdirectory>/"
msgstr "<subdirectori>/"
-#: builtin/read-tree.c:139
+#: builtin/read-tree.c:131
msgid "read the tree into the index under <subdirectory>/"
msgstr "llegiu l'arbre a l'índex sota <subdirectori>/"
-#: builtin/read-tree.c:142
+#: builtin/read-tree.c:134
msgid "update working tree with merge result"
msgstr "actualitza l'arbre de treball amb el resultat de fusió"
-#: builtin/read-tree.c:144
+#: builtin/read-tree.c:136
msgid "gitignore"
msgstr "gitignore"
-#: builtin/read-tree.c:145
+#: builtin/read-tree.c:137
msgid "allow explicitly ignored files to be overwritten"
msgstr "permet que els fitxers explícitament ignorats se sobreescriguin"
-#: builtin/read-tree.c:148
+#: builtin/read-tree.c:140
msgid "don't check the working tree after merging"
msgstr "no comprovis l'arbre de treball després de fusionar"
-#: builtin/read-tree.c:149
+#: builtin/read-tree.c:141
msgid "don't update the index or the work tree"
msgstr "no actualitzis l'índex ni l'arbre de treball"
-#: builtin/read-tree.c:151
+#: builtin/read-tree.c:143
msgid "skip applying sparse checkout filter"
msgstr "omet l'aplicació del filtre d'agafament parcial"
-#: builtin/read-tree.c:153
+#: builtin/read-tree.c:145
msgid "debug unpack-trees"
msgstr "depura unpack-trees"
-#: builtin/read-tree.c:157
+#: builtin/read-tree.c:149
#, fuzzy
msgid "suppress feedback messages"
msgstr "suprimeix els missatges de retroacció"
-#: builtin/read-tree.c:188
+#: builtin/read-tree.c:183
msgid "You need to resolve your current index first"
msgstr "Primer heu de resoldre l'índex actual"
@@ -20115,238 +20523,67 @@
#: builtin/rebase.c:37
#, fuzzy
msgid ""
-"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]"
+"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root "
+"[<branch>]"
msgstr ""
-"git rebase [-i] [opcions] [--exec <cmd>] [--onto <newbase>] --root [<branch>]"
+"git rebase [-i] [opcions] [--exec <cmd>] [--onto <newbase>] --root "
+"[<branch>]"
#: builtin/rebase.c:39
msgid "git rebase --continue | --abort | --skip | --edit-todo"
msgstr "git rebase --continue | --abort | --skip | --edit-todo"
-#: builtin/rebase.c:194 builtin/rebase.c:218 builtin/rebase.c:245
-#, c-format
-msgid "unusable todo list: '%s'"
-msgstr "llista per a fer inestable: «%s»"
-
-#: builtin/rebase.c:311
+#: builtin/rebase.c:230
#, c-format
msgid "could not create temporary %s"
msgstr "no s'ha pogut crear el fitxer temporal %s"
-#: builtin/rebase.c:317
+#: builtin/rebase.c:236
msgid "could not mark as interactive"
msgstr "no s'ha pogut marcar com a interactiu"
-#: builtin/rebase.c:370
+#: builtin/rebase.c:289
msgid "could not generate todo list"
msgstr "no s'ha pogut generar la llista per a fer"
-#: builtin/rebase.c:412
+#: builtin/rebase.c:331
#, fuzzy
msgid "a base commit must be provided with --upstream or --onto"
msgstr "s'ha de proporcionar una comissió base amb --upstream o --onto"
-#: builtin/rebase.c:481
-msgid "git rebase--interactive [<options>]"
-msgstr "git rebase--interactive [<opcions>]"
-
-#: builtin/rebase.c:494 builtin/rebase.c:1389
-#, fuzzy
-msgid "keep commits which start empty"
-msgstr "manté les comissions que comencen en blanc"
-
-#: builtin/rebase.c:498 builtin/revert.c:128
-msgid "allow commits with empty messages"
-msgstr "permet les comissions amb missatges buits"
-
-#: builtin/rebase.c:500
-msgid "rebase merge commits"
-msgstr "fes «rebase» de les comissions de fusió"
-
-#: builtin/rebase.c:502
-#, fuzzy
-msgid "keep original branch points of cousins"
-msgstr "mantén els punts de branca originals dels cosins"
-
-#: builtin/rebase.c:504
-#, fuzzy
-msgid "move commits that begin with squash!/fixup!"
-msgstr "mou les comissions que comencen amb squash!/fixup!"
-
-#: builtin/rebase.c:505
-msgid "sign commits"
-msgstr "signa les comissions"
-
-#: builtin/rebase.c:507 builtin/rebase.c:1328
-msgid "display a diffstat of what changed upstream"
-msgstr "mostra un «diffstat» del que ha canviat a la font"
-
-#: builtin/rebase.c:509
-msgid "continue rebase"
-msgstr "continua el «rebase»"
-
-#: builtin/rebase.c:511
-msgid "skip commit"
-msgstr "omet la comissió"
-
-#: builtin/rebase.c:512
-msgid "edit the todo list"
-msgstr "edita la llista a fer"
-
-#: builtin/rebase.c:514
-msgid "show the current patch"
-msgstr "mostra el pedaç actual"
-
-#: builtin/rebase.c:517
-msgid "shorten commit ids in the todo list"
-msgstr "escurça els ids de les comissions en la llista per a fer"
-
-#: builtin/rebase.c:519
-msgid "expand commit ids in the todo list"
-msgstr "expandeix els ids de les comissions en la llista per a fer"
-
-#: builtin/rebase.c:521
-msgid "check the todo list"
-msgstr "comprova la llista a fer"
-
-#: builtin/rebase.c:523
-msgid "rearrange fixup/squash lines"
-msgstr "reorganitza les línies «fixup/pick»"
-
-#: builtin/rebase.c:525
-msgid "insert exec commands in todo list"
-msgstr "expandeix les ordres exec en la llista per a fer"
-
-#: builtin/rebase.c:526
-#, fuzzy
-msgid "onto"
-msgstr "sobre"
-
-#: builtin/rebase.c:529
-#, fuzzy
-msgid "restrict-revision"
-msgstr "revisió restringida"
-
-#: builtin/rebase.c:529
-#, fuzzy
-msgid "restrict revision"
-msgstr "restringeix la revisió"
-
-#: builtin/rebase.c:531
-#, fuzzy
-msgid "squash-onto"
-msgstr "squash-onto"
-
-#: builtin/rebase.c:532
-#, fuzzy
-msgid "squash onto"
-msgstr "carabassa a"
-
-#: builtin/rebase.c:534
-#, fuzzy
-msgid "the upstream commit"
-msgstr "la comissió principal"
-
-#: builtin/rebase.c:536
-#, fuzzy
-msgid "head-name"
-msgstr "nom-cap"
-
-#: builtin/rebase.c:536
-#, fuzzy
-msgid "head name"
-msgstr "nom del cap"
-
-#: builtin/rebase.c:541
-#, fuzzy
-msgid "rebase strategy"
-msgstr "estratègia de rebase"
-
-#: builtin/rebase.c:542
-#, fuzzy
-msgid "strategy-opts"
-msgstr "opcions estratègiques"
-
-#: builtin/rebase.c:543
-#, fuzzy
-msgid "strategy options"
-msgstr "opcions d'estratègia"
-
-#: builtin/rebase.c:544
-#, fuzzy
-msgid "switch-to"
-msgstr "canvia a"
-
-#: builtin/rebase.c:545
-#, fuzzy
-msgid "the branch or commit to checkout"
-msgstr "la branca o entrega a agafar"
-
-#: builtin/rebase.c:546
-#, fuzzy
-msgid "onto-name"
-msgstr "ont-name"
-
-#: builtin/rebase.c:546
-#, fuzzy
-msgid "onto name"
-msgstr "al nom"
-
-#: builtin/rebase.c:547
-#, fuzzy
-msgid "cmd"
-msgstr "cmd"
-
-#: builtin/rebase.c:547
-msgid "the command to run"
-msgstr "l'ordre a executar"
-
-#: builtin/rebase.c:550 builtin/rebase.c:1422
-#, fuzzy
-msgid "automatically re-schedule any `exec` that fails"
-msgstr "torna a planificar automàticament qualsevol `exec` que falli"
-
-#: builtin/rebase.c:566
-#, fuzzy
-msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
-msgstr "--[no-]rebase-cosins no té cap efecte sense --rebase-merges"
-
-#: builtin/rebase.c:582
+#: builtin/rebase.c:390
#, fuzzy, c-format
msgid "%s requires the merge backend"
msgstr "%s requereix un «rebase» interactiu"
-#: builtin/rebase.c:625
+#: builtin/rebase.c:432
#, fuzzy, c-format
msgid "could not get 'onto': '%s'"
msgstr "no s'ha pogut obtenir «onto» «%s»"
-#: builtin/rebase.c:642
+#: builtin/rebase.c:449
#, fuzzy, c-format
msgid "invalid orig-head: '%s'"
msgstr "orig-head '%s' no és vàlid"
-#: builtin/rebase.c:667
+#: builtin/rebase.c:474
#, fuzzy, c-format
msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
msgstr "s'ignorarà allowrerereautoupdate «%s» no vàlid"
-#: builtin/rebase.c:813 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:597
msgid ""
"Resolve all conflicts manually, mark them as resolved with\n"
"\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
"You can instead skip this commit: run \"git rebase --skip\".\n"
-"To abort and get back to the state before \"git rebase\", run \"git rebase --"
-"abort\"."
+"To abort and get back to the state before \"git rebase\", run \"git rebase --abort\"."
msgstr ""
"Resoleu tots els conflictes manualment, marqueu-los com a resolts amb\n"
-"«git add/rm <fitxers_amb_conflicte>», llavors executeu «git rebase --"
-"continue».\n"
+"«git add/rm <fitxers_amb_conflicte>», llavors executeu «git rebase --continue».\n"
"Alternativament podeu ometre aquesta comissió: executeu «git rebase --skip».\n"
-"Per a avortar i tornar a l'estat anterior abans de l'ordre «git rebase», "
-"executeu «git rebase --abort»."
+"Per a avortar i tornar a l'estat anterior abans de l'ordre «git rebase», executeu «git rebase --abort»."
-#: builtin/rebase.c:896
+#: builtin/rebase.c:680
#, fuzzy, c-format
msgid ""
"\n"
@@ -20360,16 +20597,14 @@
"git va trobar un error en preparar els pedaços per a tornar a reproduir "
"aquests revisions per cent. Com a resultat git no pot refer-los."
-#: builtin/rebase.c:1222
+#: builtin/rebase.c:925
#, fuzzy, c-format
-msgid ""
-"unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
-"\"."
+msgid "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask\"."
msgstr ""
"no es reconeix el tipus buit «%s»; els valors vàlids són «drop» «keep» i "
"«ask»."
-#: builtin/rebase.c:1240
+#: builtin/rebase.c:943
#, c-format
msgid ""
"%s\n"
@@ -20386,7 +20621,7 @@
" git rebase '<branca>'\n"
"\n"
-#: builtin/rebase.c:1256
+#: builtin/rebase.c:959
#, c-format
msgid ""
"If you wish to set tracking information for this branch you can do so with:\n"
@@ -20394,202 +20629,208 @@
" git branch --set-upstream-to=%s/<branch> %s\n"
"\n"
msgstr ""
-"Si voleu establir informació de seguiment per a aquesta branca, podeu fer-ho "
-"amb:\n"
+"Si voleu establir informació de seguiment per a aquesta branca, podeu fer-ho amb:\n"
"\n"
" git branch --set-upstream-to=%s/<branca> %s\n"
"\n"
-#: builtin/rebase.c:1286
+#: builtin/rebase.c:989
#, fuzzy
msgid "exec commands cannot contain newlines"
msgstr "les ordres exec no poden contenir línies noves"
-#: builtin/rebase.c:1290
+#: builtin/rebase.c:993
msgid "empty exec command"
msgstr "ordre exec buida"
-#: builtin/rebase.c:1319
+#: builtin/rebase.c:1023
msgid "rebase onto given branch instead of upstream"
msgstr "fes un «rebase» en la branca donada en comptes de la font"
-#: builtin/rebase.c:1321
+#: builtin/rebase.c:1025
#, fuzzy
msgid "use the merge-base of upstream and branch as the current base"
msgstr "utilitza la base de fusió de la font i la branca com a base actual"
-#: builtin/rebase.c:1323
+#: builtin/rebase.c:1027
msgid "allow pre-rebase hook to run"
msgstr "permet al lligam pre-rebase executar-se"
-#: builtin/rebase.c:1325
+#: builtin/rebase.c:1029
msgid "be quiet. implies --no-stat"
msgstr "silenciós. Implica --no-stat"
-#: builtin/rebase.c:1331
+#: builtin/rebase.c:1032
+msgid "display a diffstat of what changed upstream"
+msgstr "mostra un «diffstat» del que ha canviat a la font"
+
+#: builtin/rebase.c:1035
#, fuzzy
msgid "do not show diffstat of what changed upstream"
msgstr "no mostris «diffstat» de quina font ha canviat"
-#: builtin/rebase.c:1334
+#: builtin/rebase.c:1038
#, fuzzy
msgid "add a Signed-off-by trailer to each commit"
msgstr "afegeix una línia signada per cada entrega"
-#: builtin/rebase.c:1337
+#: builtin/rebase.c:1041
#, fuzzy
msgid "make committer date match author date"
msgstr "Agrupa per «comitter» en comptes de per autor"
-#: builtin/rebase.c:1339
+#: builtin/rebase.c:1043
msgid "ignore author date and use current date"
msgstr "ignora la data de l'autor i utilitza la data actual"
-#: builtin/rebase.c:1341
+#: builtin/rebase.c:1045
msgid "synonym of --reset-author-date"
msgstr "sinònim de --reset-author-date"
-#: builtin/rebase.c:1343 builtin/rebase.c:1347
+#: builtin/rebase.c:1047 builtin/rebase.c:1051
msgid "passed to 'git apply'"
msgstr "passa-ho a «git apply»"
-#: builtin/rebase.c:1345
+#: builtin/rebase.c:1049
msgid "ignore changes in whitespace"
msgstr "ignora els canvis d'espais en blanc"
-#: builtin/rebase.c:1349 builtin/rebase.c:1352
+#: builtin/rebase.c:1053 builtin/rebase.c:1056
msgid "cherry-pick all commits, even if unchanged"
msgstr "«cherry pick» totes les comissions, inclús les no canviades"
-#: builtin/rebase.c:1354
+#: builtin/rebase.c:1058
msgid "continue"
msgstr "continua"
-#: builtin/rebase.c:1357
+#: builtin/rebase.c:1061
msgid "skip current patch and continue"
msgstr "omet el pedaç actual i continua"
-#: builtin/rebase.c:1359
+#: builtin/rebase.c:1063
msgid "abort and check out the original branch"
msgstr "interromp i agafa la branca original"
-#: builtin/rebase.c:1362
+#: builtin/rebase.c:1066
msgid "abort but keep HEAD where it is"
msgstr "interromp però manté HEAD on és"
-#: builtin/rebase.c:1363
+#: builtin/rebase.c:1067
msgid "edit the todo list during an interactive rebase"
msgstr "edita la llista de coses a fer durant un «rebase» interactiu"
-#: builtin/rebase.c:1366
+#: builtin/rebase.c:1070
msgid "show the patch file being applied or merged"
msgstr "mostra el pedaç que s'està aplicant o fusionant"
-#: builtin/rebase.c:1369
+#: builtin/rebase.c:1073
msgid "use apply strategies to rebase"
msgstr "utilitza estratègies d'aplicació per fer «rebase»"
-#: builtin/rebase.c:1373
+#: builtin/rebase.c:1077
msgid "use merging strategies to rebase"
msgstr "utilitza estratègies de fusió per fer «rebase»"
-#: builtin/rebase.c:1377
+#: builtin/rebase.c:1081
msgid "let the user edit the list of commits to rebase"
msgstr "permet a l'usuari editar la llista de comissions a fer «rebase»"
-#: builtin/rebase.c:1381
+#: builtin/rebase.c:1085
msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
msgstr "(EN DESÚS) intenta recrear fusions en lloc d'ignorar-les"
-#: builtin/rebase.c:1386
+#: builtin/rebase.c:1090
msgid "how to handle commits that become empty"
msgstr "com gestionar les comissions que queden buides"
-#: builtin/rebase.c:1393
+#: builtin/rebase.c:1093
#, fuzzy
+msgid "keep commits which start empty"
+msgstr "manté les comissions que comencen en blanc"
+
+#: builtin/rebase.c:1097
msgid "move commits that begin with squash!/fixup! under -i"
msgstr "mou les comissions que comencen amb squash!/fixup! sota -i"
-#: builtin/rebase.c:1400
+#: builtin/rebase.c:1104
#, fuzzy
msgid "add exec lines after each commit of the editable list"
-msgstr "afegeix línies d'exec després de cada publicació de la llista editable"
+msgstr ""
+"afegeix línies d'exec després de cada publicació de la llista editable"
-#: builtin/rebase.c:1404
-#, fuzzy
+#: builtin/rebase.c:1108
msgid "allow rebasing commits with empty messages"
-msgstr "permet tornar a basar les comissions amb missatges buits"
+msgstr "permet fer «rebase» de les comissions amb missatges buits"
-#: builtin/rebase.c:1408
-#, fuzzy
+#: builtin/rebase.c:1112
msgid "try to rebase merges instead of skipping them"
-msgstr "intenta fer «rebase» de les fusions en lloc d'omissió"
+msgstr "intenta fer «rebase» de les fusions en comptes de ometre-les"
-#: builtin/rebase.c:1411
-#, fuzzy
+#: builtin/rebase.c:1115
msgid "use 'merge-base --fork-point' to refine upstream"
msgstr "usa «merge-base --fork-point» per refinar la font"
-#: builtin/rebase.c:1413
+#: builtin/rebase.c:1117
msgid "use the given merge strategy"
msgstr "utilitza l'estratègia de fusió donada"
-#: builtin/rebase.c:1415 builtin/revert.c:115
+#: builtin/rebase.c:1119 builtin/revert.c:115
msgid "option"
msgstr "opció"
-#: builtin/rebase.c:1416
+#: builtin/rebase.c:1120
msgid "pass the argument through to the merge strategy"
msgstr "passa l'argument a l'estratègia de fusió"
-#: builtin/rebase.c:1419
+#: builtin/rebase.c:1123
msgid "rebase all reachable commits up to the root(s)"
msgstr "fes «rebase» de totes les comissions accessibles fins a l'arrel"
-#: builtin/rebase.c:1424
+#: builtin/rebase.c:1126
#, fuzzy
-msgid "apply all changes, even those already present upstream"
-msgstr "aplica tots els canvis fins i tot els que ja estan a la font principal"
+msgid "automatically re-schedule any `exec` that fails"
+msgstr "torna a planificar automàticament qualsevol `exec` que falli"
-#: builtin/rebase.c:1442
+#: builtin/rebase.c:1128
+msgid "apply all changes, even those already present upstream"
+msgstr "aplica tots els canvis, fins i tot els que ja estan a la font"
+
+#: builtin/rebase.c:1149
msgid "It looks like 'git am' is in progress. Cannot rebase."
msgstr "Sembla que «git am» està en curs. No es pot fer «rebase»."
-#: builtin/rebase.c:1483
-msgid ""
-"git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
+#: builtin/rebase.c:1180
+#, fuzzy
+msgid "--preserve-merges was replaced by --rebase-merges"
msgstr ""
"git rebase --preserve-merges està en desús. Utilitzeu --rebase-merges en "
"lloc seu."
-#: builtin/rebase.c:1488
-#, fuzzy
+#: builtin/rebase.c:1193
msgid "cannot combine '--keep-base' with '--onto'"
msgstr "no es pot combinar «--keep-base» amb «--onto»"
-#: builtin/rebase.c:1490
-#, fuzzy
+#: builtin/rebase.c:1195
msgid "cannot combine '--keep-base' with '--root'"
msgstr "no es pot combinar «--keep-base» amb «--root»"
-#: builtin/rebase.c:1494
-#, fuzzy
+#: builtin/rebase.c:1199
msgid "cannot combine '--root' with '--fork-point'"
-msgstr "no es pot combinar «--root» amb «--root»"
+msgstr "no es pot combinar «--root» amb «--fork-point»"
-#: builtin/rebase.c:1497
+#: builtin/rebase.c:1202
msgid "No rebase in progress?"
msgstr "No hi ha un «rebase» en curs?"
-#: builtin/rebase.c:1501
+#: builtin/rebase.c:1206
msgid "The --edit-todo action can only be used during interactive rebase."
msgstr "L'acció --edit-todo només es pot usar durant un «rebase» interactiu."
-#: builtin/rebase.c:1524 t/helper/test-fast-rebase.c:123
+#: builtin/rebase.c:1229 t/helper/test-fast-rebase.c:122
msgid "Cannot read HEAD"
msgstr "No es pot llegir HEAD"
-#: builtin/rebase.c:1536
+#: builtin/rebase.c:1241
msgid ""
"You must edit all merge conflicts and then\n"
"mark them as resolved using git add"
@@ -20597,16 +20838,16 @@
"Heu d'editar tots els conflictes de fusió i després\n"
"marcar-los com a resolts fent servir git add"
-#: builtin/rebase.c:1555
+#: builtin/rebase.c:1260
msgid "could not discard worktree changes"
msgstr "no s'han pogut descartar els canvis de l'arbre de treball"
-#: builtin/rebase.c:1574
+#: builtin/rebase.c:1279
#, c-format
msgid "could not move back to %s"
msgstr "no s'ha pogut tornar a %s"
-#: builtin/rebase.c:1620
+#: builtin/rebase.c:1325
#, fuzzy, c-format
msgid ""
"It seems that there is already a %s directory, and\n"
@@ -20622,148 +20863,134 @@
"d'un altre rebase. Si és així, si us plau, provi-ho si no és així, si us "
"plau inciti-me."
-#: builtin/rebase.c:1648
+#: builtin/rebase.c:1353
msgid "switch `C' expects a numerical value"
msgstr "«switch» «c» espera un valor numèric"
-#: builtin/rebase.c:1690
+#: builtin/rebase.c:1395
#, c-format
msgid "Unknown mode: %s"
msgstr "Mode desconegut: %s"
-#: builtin/rebase.c:1729
+#: builtin/rebase.c:1434
msgid "--strategy requires --merge or --interactive"
msgstr "--strategy requereix --merge o --interactive"
-#: builtin/rebase.c:1759
-#, fuzzy
+#: builtin/rebase.c:1463
msgid "cannot combine apply options with merge options"
msgstr "no es poden combinar les opcions d'aplicació amb les opcions de fusió"
-#: builtin/rebase.c:1772
+#: builtin/rebase.c:1476
#, fuzzy, c-format
msgid "Unknown rebase backend: %s"
msgstr "Rebase de system%s desconegut"
-#: builtin/rebase.c:1802
-#, fuzzy
+#: builtin/rebase.c:1505
msgid "--reschedule-failed-exec requires --exec or --interactive"
-msgstr "--reschedulo-failed-exec requereix --exec o --interactive"
+msgstr "--reschedule-failed-exec requereix --exec o --interactive"
-#: builtin/rebase.c:1822
-#, fuzzy
-msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
-msgstr "no es poden combinar «--preserve-merges» amb «--rebase-merges»"
-
-#: builtin/rebase.c:1826
-#, fuzzy
-msgid ""
-"error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
-msgstr ""
-"error no es pot combinar «--preserve-merges» amb «--reschedule-failed-exec»"
-
-#: builtin/rebase.c:1850
+#: builtin/rebase.c:1536
#, c-format
msgid "invalid upstream '%s'"
msgstr "font no vàlida: «%s»"
-#: builtin/rebase.c:1856
+#: builtin/rebase.c:1542
msgid "Could not create new root commit"
msgstr "No s'ha pogut crear una comissió arrel nova"
-#: builtin/rebase.c:1882
+#: builtin/rebase.c:1568
#, fuzzy, c-format
msgid "'%s': need exactly one merge base with branch"
msgstr "'%s' necessita exactament una base de fusió amb branca"
-#: builtin/rebase.c:1885
+#: builtin/rebase.c:1571
#, fuzzy, c-format
msgid "'%s': need exactly one merge base"
msgstr "'%s' necessita exactament una base de fusió"
-#: builtin/rebase.c:1893
-#, fuzzy, c-format
+#: builtin/rebase.c:1580
+#, c-format
msgid "Does not point to a valid commit '%s'"
msgstr "No apunta a una comissió vàlida «%s»"
-#: builtin/rebase.c:1921
+#: builtin/rebase.c:1607
#, fuzzy, c-format
-msgid "fatal: no such branch/commit '%s'"
+msgid "no such branch/commit '%s'"
msgstr "fatal no existeix aquesta branca/commit «%s»"
-#: builtin/rebase.c:1929 builtin/submodule--helper.c:40
-#: builtin/submodule--helper.c:2415
+#: builtin/rebase.c:1618 builtin/submodule--helper.c:39
+#: builtin/submodule--helper.c:2658
#, c-format
msgid "No such ref: %s"
msgstr "No hi ha tal referència: %s"
-#: builtin/rebase.c:1940
+#: builtin/rebase.c:1629
#, fuzzy
msgid "Could not resolve HEAD to a revision"
msgstr "No s'ha pogut resoldre HEAD a una revisió"
-#: builtin/rebase.c:1961
+#: builtin/rebase.c:1650
msgid "Please commit or stash them."
msgstr "Cometeu-los o emmagatzemeu-los."
-#: builtin/rebase.c:1997
+#: builtin/rebase.c:1686
#, c-format
msgid "could not switch to %s"
msgstr "no s'ha pogut commutar a %s"
-#: builtin/rebase.c:2008
+#: builtin/rebase.c:1697
msgid "HEAD is up to date."
msgstr "HEAD està al dia."
-#: builtin/rebase.c:2010
+#: builtin/rebase.c:1699
#, c-format
msgid "Current branch %s is up to date.\n"
msgstr "La branca actual %s està al dia.\n"
-#: builtin/rebase.c:2018
+#: builtin/rebase.c:1707
msgid "HEAD is up to date, rebase forced."
msgstr "La branca actual està al dia, «rebase» forçat."
-#: builtin/rebase.c:2020
+#: builtin/rebase.c:1709
#, c-format
msgid "Current branch %s is up to date, rebase forced.\n"
msgstr "La branca actual %s està al dia; «rebase» forçat.\n"
-#: builtin/rebase.c:2028
+#: builtin/rebase.c:1717
msgid "The pre-rebase hook refused to rebase."
msgstr "El lligam pre-«rebase» ha refusat a fer «rebase»."
-#: builtin/rebase.c:2035
+#: builtin/rebase.c:1724
#, c-format
msgid "Changes to %s:\n"
msgstr "Canvis a %s:\n"
-#: builtin/rebase.c:2038
+#: builtin/rebase.c:1727
#, c-format
msgid "Changes from %s to %s:\n"
msgstr "Canvis de %s a %s:\n"
-#: builtin/rebase.c:2063
+#: builtin/rebase.c:1752
#, c-format
msgid "First, rewinding head to replay your work on top of it...\n"
msgstr ""
"Primer, s'està rebobinant HEAD per a reproduir el vostre treball al "
"damunt...\n"
-#: builtin/rebase.c:2072
+#: builtin/rebase.c:1761
msgid "Could not detach HEAD"
msgstr "No s'ha pogut separar HEAD"
-#: builtin/rebase.c:2081
+#: builtin/rebase.c:1770
#, c-format
msgid "Fast-forwarded %s to %s.\n"
msgstr "Avanç ràpid %s a %s.\n"
-#: builtin/receive-pack.c:34
+#: builtin/receive-pack.c:35
msgid "git receive-pack <git-dir>"
msgstr "git receive-pack <git-dir>"
-#: builtin/receive-pack.c:1276
+#: builtin/receive-pack.c:1280
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"
@@ -20794,7 +21021,7 @@
"per defecte, establiu la variable de configuració\n"
"«receive.denyCurrentBranch» a «refuse»."
-#: builtin/receive-pack.c:1296
+#: builtin/receive-pack.c:1300
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"
@@ -20816,23 +21043,23 @@
"\n"
"Per a silenciar aquest missatge, podeu establir-la a «refuse»."
-#: builtin/receive-pack.c:2479
+#: builtin/receive-pack.c:2480
msgid "quiet"
msgstr "silenciós"
-#: builtin/receive-pack.c:2493
+#: builtin/receive-pack.c:2495
msgid "You must specify a directory."
msgstr "Heu d'especificar un directori."
#: builtin/reflog.c:17
msgid ""
-"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<refs>..."
+"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] "
+"[--rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all]"
+" <refs>..."
msgstr ""
-"git reflog expire [--expire=<hora>] [--expire-unreachable=<hora>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<referències>..."
+"git reflog expire [--expire=<hora>] [--expire-unreachable=<hora>] "
+"[--rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all]"
+" <referències>..."
#: builtin/reflog.c:22
msgid ""
@@ -20857,22 +21084,21 @@
msgstr "S'estan marcant els objectes abastables..."
#: builtin/reflog.c:647
-#, fuzzy, c-format
+#, c-format
msgid "%s points nowhere!"
-msgstr "els percentatges no apunten enlloc!"
+msgstr "%s no apunta a enlloc"
-#: builtin/reflog.c:699
-#, fuzzy
+#: builtin/reflog.c:700
msgid "no reflog specified to delete"
-msgstr "no s'ha especificat cap registre de referència per suprimir"
+msgstr "no s'ha especificat cap registre de referència per a suprimir"
#: builtin/reflog.c:708
-#, fuzzy, c-format
+#, c-format
msgid "not a reflog: %s"
-msgstr "no és un registre de referència"
+msgstr "no és un registre de referència: %s"
#: builtin/reflog.c:713
-#, fuzzy, c-format
+#, c-format
msgid "no reflog for '%s'"
msgstr "cap registre de referència per a «%s»"
@@ -20891,11 +21117,11 @@
#: builtin/remote.c:18
msgid ""
-"git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--"
-"mirror=<fetch|push>] <name> <url>"
+"git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] "
+"[--mirror=<fetch|push>] <name> <url>"
msgstr ""
-"git remote add [-t <branca>] [-m <mestra>] [-f] [--tags | --no-tags] [--"
-"mirror=<fetch|push>] <nom> <url>"
+"git remote add [-t <branca>] [-m <mestra>] [-f] [--tags | --no-tags] "
+"[--mirror=<fetch|push>] <nom> <url>"
#: builtin/remote.c:19 builtin/remote.c:39
msgid "git remote rename <old> <new>"
@@ -21019,7 +21245,7 @@
msgstr ""
"especificar les branques a seguir té sentit només amb miralls d'obtenció"
-#: builtin/remote.c:195 builtin/remote.c:700
+#: builtin/remote.c:195 builtin/remote.c:705
#, c-format
msgid "remote %s already exists."
msgstr "el remot %s ja existeix."
@@ -21029,26 +21255,31 @@
msgid "Could not setup master '%s'"
msgstr "No s'ha pogut configurar la mestra «%s»"
-#: builtin/remote.c:355
+#: builtin/remote.c:322
+#, c-format, fuzzy
+msgid "unhandled branch.%s.rebase=%s; assuming 'true'"
+msgstr "branca no gestionada.%s.rebase=%s; assumint 'true'"
+
+#: builtin/remote.c:366
#, c-format
msgid "Could not get fetch map for refspec %s"
msgstr ""
"No s'ha pogut obtenir el mapa d'obtenció de l'especificació de referència %s"
-#: builtin/remote.c:454 builtin/remote.c:462
+#: builtin/remote.c:460 builtin/remote.c:468
msgid "(matching)"
msgstr "(coincident)"
-#: builtin/remote.c:466
+#: builtin/remote.c:472
msgid "(delete)"
msgstr "(suprimir)"
-#: builtin/remote.c:655
-#, fuzzy, c-format
+#: builtin/remote.c:660
+#, c-format
msgid "could not set '%s'"
msgstr "no s'ha pogut establir «%s»"
-#: builtin/remote.c:660
+#: builtin/remote.c:665
#, fuzzy, c-format
msgid ""
"The %s configuration remote.pushDefault in:\n"
@@ -21058,39 +21289,38 @@
"La configuració dels percentatges és remota.pushDefault ins%d ara anomena "
"els \"%s\" remots inexistents"
-#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:943
+#: builtin/remote.c:696 builtin/remote.c:841 builtin/remote.c:948
#, c-format
msgid "No such remote: '%s'"
msgstr "No existeix el remot «%s»"
-#: builtin/remote.c:710
+#: builtin/remote.c:715
#, c-format
msgid "Could not rename config section '%s' to '%s'"
msgstr "No s'ha pogut canviar el nom de la secció de configuració «%s» a «%s»"
-#: builtin/remote.c:730
+#: builtin/remote.c:735
#, c-format
msgid ""
"Not updating non-default fetch refspec\n"
"\t%s\n"
"\tPlease update the configuration manually if necessary."
msgstr ""
-"No s'està actualitzant l'especificació de referències d'obtenció no per "
-"defecte\n"
+"No s'està actualitzant l'especificació de referències d'obtenció no per defecte\n"
"\t%s\n"
"\tActualitzeu la configuració manualment si és necessari."
-#: builtin/remote.c:770
+#: builtin/remote.c:775
#, c-format
msgid "deleting '%s' failed"
msgstr "la supressió de «%s» ha fallat"
-#: builtin/remote.c:804
+#: builtin/remote.c:809
#, c-format
msgid "creating '%s' failed"
msgstr "la creació de «%s» ha fallat"
-#: builtin/remote.c:882
+#: builtin/remote.c:887
msgid ""
"Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
"to delete it, use:"
@@ -21101,465 +21331,480 @@
"Nota: Una branca fora de la jerarquia refs/remotes/ no s'ha eliminat;\n"
"per a suprimir-la, useu:"
msgstr[1] ""
-"Nota: Algunes branques fora de la jerarquia refs/remotes/ no s'han "
-"eliminat;\n"
+"Nota: Algunes branques fora de la jerarquia refs/remotes/ no s'han eliminat;\n"
"per a suprimir-les, useu:"
-#: builtin/remote.c:896
+#: builtin/remote.c:901
#, c-format
msgid "Could not remove config section '%s'"
msgstr "No s'ha pogut eliminar la secció de configuració «%s»"
-#: builtin/remote.c:999
+#: builtin/remote.c:1009
#, c-format
msgid " new (next fetch will store in remotes/%s)"
msgstr " nou (la pròxima obtenció emmagatzemarà a remotes/%s)"
-#: builtin/remote.c:1002
+#: builtin/remote.c:1012
msgid " tracked"
msgstr " seguit"
-#: builtin/remote.c:1004
+#: builtin/remote.c:1014
msgid " stale (use 'git remote prune' to remove)"
msgstr " estancat (useu «git remote prune» per a eliminar)"
-#: builtin/remote.c:1006
+#: builtin/remote.c:1016
msgid " ???"
msgstr " ???"
-#: builtin/remote.c:1047
+#: builtin/remote.c:1057
#, c-format
msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
msgstr "branch.%s.merge no vàlid; no es pot fer «rebase» sobre > 1 branca"
-#: builtin/remote.c:1056
+#: builtin/remote.c:1066
#, c-format
msgid "rebases interactively onto remote %s"
msgstr "es fa «rebase» interactivament sobre el remot %s"
-#: builtin/remote.c:1058
+#: builtin/remote.c:1068
#, fuzzy, c-format
msgid "rebases interactively (with merges) onto remote %s"
msgstr "rebases interactivament (amb fusions) en percentatges remots"
-#: builtin/remote.c:1061
+#: builtin/remote.c:1071
#, c-format
msgid "rebases onto remote %s"
msgstr "es fa «rebase» sobre el remot %s"
-#: builtin/remote.c:1065
+#: builtin/remote.c:1075
#, c-format
msgid " merges with remote %s"
msgstr " es fusiona amb el remot %s"
-#: builtin/remote.c:1068
+#: builtin/remote.c:1078
#, c-format
msgid "merges with remote %s"
msgstr "es fusiona amb el remot %s"
-#: builtin/remote.c:1071
+#: builtin/remote.c:1081
#, c-format
msgid "%-*s and with remote %s\n"
msgstr "%-*s i amb el remot %s\n"
-#: builtin/remote.c:1114
+#: builtin/remote.c:1124
msgid "create"
msgstr "crea"
-#: builtin/remote.c:1117
+#: builtin/remote.c:1127
msgid "delete"
msgstr "suprimeix"
-#: builtin/remote.c:1121
+#: builtin/remote.c:1131
msgid "up to date"
msgstr "al dia"
-#: builtin/remote.c:1124
+#: builtin/remote.c:1134
msgid "fast-forwardable"
msgstr "avanç ràpid possible"
-#: builtin/remote.c:1127
+#: builtin/remote.c:1137
msgid "local out of date"
msgstr "local no actualitzat"
-#: builtin/remote.c:1134
+#: builtin/remote.c:1144
#, c-format
msgid " %-*s forces to %-*s (%s)"
msgstr " %-*s força a %-*s (%s)"
-#: builtin/remote.c:1137
+#: builtin/remote.c:1147
#, c-format
msgid " %-*s pushes to %-*s (%s)"
msgstr " %-*s puja a %-*s (%s)"
-#: builtin/remote.c:1141
+#: builtin/remote.c:1151
#, c-format
msgid " %-*s forces to %s"
msgstr " %-*s força a %s"
-#: builtin/remote.c:1144
+#: builtin/remote.c:1154
#, c-format
msgid " %-*s pushes to %s"
msgstr " %-*s puja a %s"
-#: builtin/remote.c:1212
+#: builtin/remote.c:1222
msgid "do not query remotes"
msgstr "no consultis els remots"
-#: builtin/remote.c:1239
+#: builtin/remote.c:1243
#, c-format
msgid "* remote %s"
msgstr "* remot %s"
-#: builtin/remote.c:1240
+#: builtin/remote.c:1244
#, c-format
msgid " Fetch URL: %s"
msgstr " URL d'obtenció: %s"
-#: builtin/remote.c:1241 builtin/remote.c:1257 builtin/remote.c:1396
+#: builtin/remote.c:1245 builtin/remote.c:1261 builtin/remote.c:1398
msgid "(no URL)"
msgstr "(sense URL)"
#. TRANSLATORS: the colon ':' should align
#. with the one in " Fetch URL: %s"
#. translation.
-#.
-#: builtin/remote.c:1255 builtin/remote.c:1257
+#: builtin/remote.c:1259 builtin/remote.c:1261
#, c-format
msgid " Push URL: %s"
msgstr " URL de pujada: %s"
-#: builtin/remote.c:1259 builtin/remote.c:1261 builtin/remote.c:1263
+#: builtin/remote.c:1263 builtin/remote.c:1265 builtin/remote.c:1267
#, c-format
msgid " HEAD branch: %s"
msgstr " Branca de HEAD: %s"
-#: builtin/remote.c:1259
+#: builtin/remote.c:1263
msgid "(not queried)"
msgstr "(no consultat)"
-#: builtin/remote.c:1261
+#: builtin/remote.c:1265
msgid "(unknown)"
msgstr "(desconegut)"
-#: builtin/remote.c:1265
+#: builtin/remote.c:1269
#, c-format
-msgid ""
-" HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
+msgid " HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
msgstr ""
" Branca de HEAD (la HEAD remot és ambigua, pot ser un dels següents):\n"
-#: builtin/remote.c:1277
+#: builtin/remote.c:1281
#, c-format
msgid " Remote branch:%s"
msgid_plural " Remote branches:%s"
msgstr[0] " Branca remota:%s"
msgstr[1] " Branques remotes:%s"
-#: builtin/remote.c:1280 builtin/remote.c:1306
+#: builtin/remote.c:1284 builtin/remote.c:1310
msgid " (status not queried)"
msgstr " (estat no consultat)"
-#: builtin/remote.c:1289
+#: builtin/remote.c:1293
msgid " Local branch configured for 'git pull':"
msgid_plural " Local branches configured for 'git pull':"
msgstr[0] " Branca local configurada per a «git pull»:"
msgstr[1] " Branques locals configurades per a «git pull»:"
-#: builtin/remote.c:1297
+#: builtin/remote.c:1301
msgid " Local refs will be mirrored by 'git push'"
msgstr " «git push» reflectirà les referències locals"
-#: builtin/remote.c:1303
+#: builtin/remote.c:1307
#, c-format
msgid " Local ref configured for 'git push'%s:"
msgid_plural " Local refs configured for 'git push'%s:"
msgstr[0] " Referència local configurada per a «git push»%s:"
msgstr[1] " Referències locals configurades per a «git push»%s:"
-#: builtin/remote.c:1324
+#: builtin/remote.c:1328
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr "estableix refs/remotes/<nom>/HEAD segons el remot"
-#: builtin/remote.c:1326
+#: builtin/remote.c:1330
msgid "delete refs/remotes/<name>/HEAD"
msgstr "suprimeix refs/remotes/<nom>/HEAD"
-#: builtin/remote.c:1341
+#: builtin/remote.c:1344
msgid "Cannot determine remote HEAD"
msgstr "No es pot determinar la HEAD remota"
-#: builtin/remote.c:1343
+#: builtin/remote.c:1346
msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
msgstr "Múltiples branques de HEAD remotes. Trieu-ne una explícitament amb:"
-#: builtin/remote.c:1353
+#: builtin/remote.c:1356
#, c-format
msgid "Could not delete %s"
msgstr "No s'ha pogut suprimir %s"
-#: builtin/remote.c:1361
+#: builtin/remote.c:1364
#, c-format
msgid "Not a valid ref: %s"
msgstr "No és una referència vàlida: %s"
-#: builtin/remote.c:1363
+#: builtin/remote.c:1366
#, c-format
msgid "Could not setup %s"
msgstr "No s'ha pogut configurar %s"
-#: builtin/remote.c:1381
+#: builtin/remote.c:1384
#, c-format
msgid " %s will become dangling!"
msgstr " %s es tornarà penjant!"
-#: builtin/remote.c:1382
+#: builtin/remote.c:1385
#, c-format
msgid " %s has become dangling!"
msgstr " %s s'ha tornat penjant!"
-#: builtin/remote.c:1392
+#: builtin/remote.c:1394
#, c-format
msgid "Pruning %s"
msgstr "S'està podant %s"
-#: builtin/remote.c:1393
+#: builtin/remote.c:1395
#, c-format
msgid "URL: %s"
msgstr "URL: %s"
-#: builtin/remote.c:1409
+#: builtin/remote.c:1411
#, c-format
msgid " * [would prune] %s"
msgstr " * [podaria] %s"
-#: builtin/remote.c:1412
+#: builtin/remote.c:1414
#, c-format
msgid " * [pruned] %s"
msgstr " * [podat] %s"
-#: builtin/remote.c:1457
+#: builtin/remote.c:1459
msgid "prune remotes after fetching"
msgstr "poda els remots després d'obtenir-los"
-#: builtin/remote.c:1521 builtin/remote.c:1577 builtin/remote.c:1647
+#: builtin/remote.c:1523 builtin/remote.c:1579 builtin/remote.c:1649
#, c-format
msgid "No such remote '%s'"
msgstr "No hi ha tal remot «%s»"
-#: builtin/remote.c:1539
+#: builtin/remote.c:1541
msgid "add branch"
msgstr "afegeix branca"
-#: builtin/remote.c:1546
+#: builtin/remote.c:1548
msgid "no remote specified"
msgstr "cap remot especificat"
-#: builtin/remote.c:1563
+#: builtin/remote.c:1565
msgid "query push URLs rather than fetch URLs"
msgstr "consulta els URL de pujada en lloc dels URL d'obtenció"
-#: builtin/remote.c:1565
+#: builtin/remote.c:1567
msgid "return all URLs"
msgstr "retorna tots els URL"
-#: builtin/remote.c:1595
+#: builtin/remote.c:1597
#, c-format
msgid "no URLs configured for remote '%s'"
msgstr "cap URL configurat per al remot «%s»"
-#: builtin/remote.c:1621
+#: builtin/remote.c:1623
msgid "manipulate push URLs"
msgstr "manipula els URL de pujada"
-#: builtin/remote.c:1623
+#: builtin/remote.c:1625
msgid "add URL"
msgstr "afegeix URL"
-#: builtin/remote.c:1625
+#: builtin/remote.c:1627
msgid "delete URLs"
msgstr "suprimeix els URL"
-#: builtin/remote.c:1632
+#: builtin/remote.c:1634
msgid "--add --delete doesn't make sense"
msgstr "--add --delete no té sentit"
-#: builtin/remote.c:1673
+#: builtin/remote.c:1675
#, c-format
msgid "Invalid old URL pattern: %s"
msgstr "Patró d'URL antic no vàlid: %s"
-#: builtin/remote.c:1681
+#: builtin/remote.c:1683
#, c-format
msgid "No such URL found: %s"
msgstr "No s'ha trobat tal URL: %s"
-#: builtin/remote.c:1683
+#: builtin/remote.c:1685
msgid "Will not delete all non-push URLs"
msgstr "No se suprimiran tots els URL no de pujada"
-#: builtin/repack.c:26
+#: builtin/remote.c:1702
+msgid "be verbose; must be placed before a subcommand"
+msgstr "sigues detallat; s'ha de col·locar abans d'una subordre"
+
+#: builtin/repack.c:28
msgid "git repack [<options>]"
msgstr "git repack [<opcions>]"
-#: builtin/repack.c:31
+#: builtin/repack.c:33
msgid ""
"Incremental repacks are incompatible with bitmap indexes. Use\n"
"--no-write-bitmap-index or disable the pack.writebitmaps configuration."
msgstr ""
-"Els reempaquetaments incrementals són incompatibles amb els índexs de mapes "
-"de bits. Useu\n"
-"--no-write-bitmap-index o inhabiliteu el paràmetre de configuració pack."
-"writebitmaps."
+"Els reempaquetaments incrementals són incompatibles amb els índexs de mapes de bits. Useu\n"
+"--no-write-bitmap-index o inhabiliteu el paràmetre de configuració pack.writebitmaps."
-#: builtin/repack.c:198
+#: builtin/repack.c:201
#, fuzzy
msgid "could not start pack-objects to repack promisor objects"
msgstr ""
"no s'han pogut iniciar pack-objects per tornar a empaquetar els objectes "
"«promissor»"
-#: builtin/repack.c:270 builtin/repack.c:630
+#: builtin/repack.c:273 builtin/repack.c:816
#, fuzzy
msgid "repack: Expecting full hex object ID lines only from pack-objects."
msgstr ""
"reempaqueta S'esperen línies d'id. de l'objecte hexadecimal complet només "
"des de pack-objects."
-#: builtin/repack.c:294
+#: builtin/repack.c:297
#, fuzzy
msgid "could not finish pack-objects to repack promisor objects"
msgstr ""
"no s'ha pogut finalitzar el paquet d'objectes per tornar a empaquetar "
"objectes promisor"
-#: builtin/repack.c:309
+#: builtin/repack.c:312
#, fuzzy, c-format
msgid "cannot open index for %s"
msgstr "s'ha produït un error en obrir l'índex per «%s»"
-#: builtin/repack.c:368
-#, c-format
+#: builtin/repack.c:371
+#, fuzzy, c-format
msgid "pack %s too large to consider in geometric progression"
-msgstr ""
+msgstr "el paquet %s és massa gran per considerar en la progressió geomètrica"
-#: builtin/repack.c:401 builtin/repack.c:408 builtin/repack.c:413
-#, c-format
+#: builtin/repack.c:404 builtin/repack.c:411 builtin/repack.c:416
+#, fuzzy, c-format
msgid "pack %s too large to roll up"
-msgstr ""
+msgstr "el paquet %s és massa gran per enrotllar-lo"
-#: builtin/repack.c:460
+#: builtin/repack.c:496
+#, fuzzy, c-format
+msgid "could not open tempfile %s for writing"
+msgstr "no s'ha pogut obrir «%s» per a escriptura"
+
+#: builtin/repack.c:514
+#, fuzzy
+msgid "could not close refs snapshot tempfile"
+msgstr "no s'ha pogut crear el fitxer temporal"
+
+#: builtin/repack.c:628
msgid "pack everything in a single pack"
msgstr "empaqueta-ho tot en un únic paquet"
-#: builtin/repack.c:462
+#: builtin/repack.c:630
msgid "same as -a, and turn unreachable objects loose"
msgstr "el mateix que -a, i solta els objectes inabastables"
-#: builtin/repack.c:465
+#: builtin/repack.c:633
msgid "remove redundant packs, and run git-prune-packed"
msgstr "elimina els paquets redundants, i executeu git-prune-packed"
-#: builtin/repack.c:467
+#: builtin/repack.c:635
msgid "pass --no-reuse-delta to git-pack-objects"
msgstr "passa --no-reuse-delta a git-pack-objects"
-#: builtin/repack.c:469
+#: builtin/repack.c:637
msgid "pass --no-reuse-object to git-pack-objects"
msgstr "passa --no-reuse-object a git-pack-objects"
-#: builtin/repack.c:471
+#: builtin/repack.c:639
msgid "do not run git-update-server-info"
msgstr "no executis git-update-server-info"
-#: builtin/repack.c:474
+#: builtin/repack.c:642
msgid "pass --local to git-pack-objects"
msgstr "passa --local a git-pack-objects"
-#: builtin/repack.c:476
+#: builtin/repack.c:644
msgid "write bitmap index"
msgstr "escriu índex de mapa de bits"
-#: builtin/repack.c:478
+#: builtin/repack.c:646
#, fuzzy
msgid "pass --delta-islands to git-pack-objects"
msgstr "passa --delta-illes a git-pack-objects"
-#: builtin/repack.c:479
+#: builtin/repack.c:647
msgid "approxidate"
msgstr "data aproximada"
-#: builtin/repack.c:480
+#: builtin/repack.c:648
msgid "with -A, do not loosen objects older than this"
msgstr "amb -A, no soltis els objectes més vells que aquest"
-#: builtin/repack.c:482
+#: builtin/repack.c:650
msgid "with -a, repack unreachable objects"
msgstr "amb -a, reempaqueta els objectes inabastables"
-#: builtin/repack.c:484
+#: builtin/repack.c:652
msgid "size of the window used for delta compression"
msgstr "mida de la finestra que s'usa per a compressió de diferències"
-#: builtin/repack.c:485 builtin/repack.c:491
+#: builtin/repack.c:653 builtin/repack.c:659
msgid "bytes"
msgstr "octets"
-#: builtin/repack.c:486
+#: builtin/repack.c:654
msgid "same as the above, but limit memory size instead of entries count"
msgstr ""
"el mateix que l'anterior, però limita la mida de memòria en lloc del nombre "
"d'entrades"
-#: builtin/repack.c:488
+#: builtin/repack.c:656
msgid "limits the maximum delta depth"
msgstr "limita la profunditat màxima de les diferències"
-#: builtin/repack.c:490
+#: builtin/repack.c:658
msgid "limits the maximum number of threads"
msgstr "limita el nombre màxim de fils"
-#: builtin/repack.c:492
+#: builtin/repack.c:660
msgid "maximum size of each packfile"
msgstr "mida màxima de cada fitxer de paquet"
-#: builtin/repack.c:494
+#: builtin/repack.c:662
msgid "repack objects in packs marked with .keep"
msgstr "reempaqueta els objectes en paquets marcats amb .keep"
-#: builtin/repack.c:496
+#: builtin/repack.c:664
#, fuzzy
msgid "do not repack this pack"
msgstr "no reempaqueta aquest paquet"
-#: builtin/repack.c:498
+#: builtin/repack.c:666
+#, fuzzy
msgid "find a geometric progression with factor <N>"
-msgstr ""
+msgstr "troba una progressió geomètrica amb el factor <N>"
-#: builtin/repack.c:508
+#: builtin/repack.c:668
+#, fuzzy
+msgid "write a multi-pack index of the resulting packs"
+msgstr "no s'ha pogut carregar l'índex del paquet per al fitxer de paquet %s"
+
+#: builtin/repack.c:678
msgid "cannot delete packs in a precious-objects repo"
msgstr "no es poden suprimir paquets en un repositori d'objectes preciosos"
-#: builtin/repack.c:512
+#: builtin/repack.c:682
msgid "--keep-unreachable and -A are incompatible"
msgstr "--keep-unreachable i -A són incompatibles"
-#: builtin/repack.c:527
+#: builtin/repack.c:713
#, fuzzy
msgid "--geometric is incompatible with -A, -a"
msgstr "--long és incompatible amb --abbrev=0"
-#: builtin/repack.c:639
+#: builtin/repack.c:825
#, fuzzy
msgid "Nothing new to pack."
msgstr "Res nou per empaquetar."
-#: builtin/repack.c:669
+#: builtin/repack.c:855
#, fuzzy, c-format
msgid "missing required file: %s"
msgstr "falten els arguments per a %s"
-#: builtin/repack.c:671
+#: builtin/repack.c:857
#, fuzzy, c-format
msgid "could not unlink: %s"
msgstr "no s'ha pogut bloquejar «%s»"
@@ -21625,8 +21870,8 @@
"while '%s' points to a replacement object of type '%s'."
msgstr ""
"Els objectes han de ser del mateix tipus. «%s» apunta a un objecte "
-"substituït del tipus «%s» mentre que «%s» apunta a un objecte de substitució "
-"del tipus «%s»."
+"substituït del tipus «%s» mentre que «%s» apunta a un objecte de substitució"
+" del tipus «%s»."
#: builtin/replace.c:229
#, fuzzy, c-format
@@ -21823,18 +22068,19 @@
#: builtin/rerere.c:13
msgid "git rerere [clear | forget <path>... | status | remaining | diff | gc]"
-msgstr "git rerere [clear | forget <camí>... | status | remaining | diff | gc]"
+msgstr ""
+"git rerere [clear | forget <camí>... | status | remaining | diff | gc]"
-#: builtin/rerere.c:60
+#: builtin/rerere.c:58
msgid "register clean resolutions in index"
msgstr "registra les resolucions netes en l'índex"
-#: builtin/rerere.c:79
+#: builtin/rerere.c:77
#, fuzzy
msgid "'git rerere forget' without paths is deprecated"
msgstr "'git rererere oblid' sense camins està en desús"
-#: builtin/rerere.c:113
+#: builtin/rerere.c:111
#, c-format
msgid "unable to generate diff for '%s'"
msgstr "s'ha pogut generar el diff per a «%s»"
@@ -21882,93 +22128,93 @@
msgid "keep"
msgstr "reteniment"
-#: builtin/reset.c:83
+#: builtin/reset.c:89
msgid "You do not have a valid HEAD."
msgstr "No teniu un HEAD vàlid."
-#: builtin/reset.c:85
+#: builtin/reset.c:91
msgid "Failed to find tree of HEAD."
msgstr "S'ha produït un error en trobar l'arbre de HEAD."
-#: builtin/reset.c:91
+#: builtin/reset.c:97
#, c-format
msgid "Failed to find tree of %s."
msgstr "S'ha produït un error en cercar l'arbre de %s."
-#: builtin/reset.c:116
+#: builtin/reset.c:122
#, c-format
msgid "HEAD is now at %s"
msgstr "HEAD ara és a %s"
-#: builtin/reset.c:195
+#: builtin/reset.c:201
#, c-format
msgid "Cannot do a %s reset in the middle of a merge."
msgstr "No es pot fer un restabliment de %s enmig d'una fusió."
-#: builtin/reset.c:295 builtin/stash.c:589 builtin/stash.c:663
-#: builtin/stash.c:687
+#: builtin/reset.c:301 builtin/stash.c:605 builtin/stash.c:679
+#: builtin/stash.c:703
msgid "be quiet, only report errors"
msgstr "sigues silenciós, només informa d'errors"
-#: builtin/reset.c:297
+#: builtin/reset.c:303
msgid "reset HEAD and index"
msgstr "restableix HEAD i l'índex"
-#: builtin/reset.c:298
+#: builtin/reset.c:304
msgid "reset only HEAD"
msgstr "restableix només HEAD"
-#: builtin/reset.c:300 builtin/reset.c:302
+#: builtin/reset.c:306 builtin/reset.c:308
msgid "reset HEAD, index and working tree"
msgstr "restableix HEAD, l'índex i l'arbre de treball"
-#: builtin/reset.c:304
+#: builtin/reset.c:310
msgid "reset HEAD but keep local changes"
msgstr "restableix HEAD però retén els canvis locals"
-#: builtin/reset.c:310
+#: builtin/reset.c:316
msgid "record only the fact that removed paths will be added later"
msgstr "registra només el fet que els camins eliminats s'afegiran després"
-#: builtin/reset.c:344
+#: builtin/reset.c:350
#, c-format
msgid "Failed to resolve '%s' as a valid revision."
msgstr "S'ha produït un error en resoldre «%s» com a revisió vàlida."
-#: builtin/reset.c:352
+#: builtin/reset.c:358
#, c-format
msgid "Failed to resolve '%s' as a valid tree."
msgstr "S'ha produït un error en resoldre «%s» com a arbre vàlid."
-#: builtin/reset.c:361
+#: builtin/reset.c:367
msgid "--patch is incompatible with --{hard,mixed,soft}"
msgstr "--patch és incompatible amb --{hard,mixed,soft}"
-#: builtin/reset.c:371
+#: builtin/reset.c:377
msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
msgstr ""
"--mixed amb camins està en desús; useu «git reset -- <camins>» en lloc "
"d'això."
-#: builtin/reset.c:373
+#: builtin/reset.c:379
#, c-format
msgid "Cannot do %s reset with paths."
msgstr "No es pot restablir de %s amb camins."
-#: builtin/reset.c:388
+#: builtin/reset.c:394
#, c-format
msgid "%s reset is not allowed in a bare repository"
msgstr "el restabliment de %s no es permet en un repositori nu"
-#: builtin/reset.c:392
+#: builtin/reset.c:398
msgid "-N can only be used with --mixed"
msgstr "-N només es pot usar amb --mixed"
-#: builtin/reset.c:413
+#: builtin/reset.c:419
msgid "Unstaged changes after reset:"
msgstr "Canvis «unstaged» després del restabliment:"
-#: builtin/reset.c:416
+#: builtin/reset.c:422
#, fuzzy, c-format
msgid ""
"\n"
@@ -21976,32 +22222,32 @@
"use '--quiet' to avoid this. Set the config setting reset.quiet to true\n"
"to make this the default.\n"
msgstr ""
-"S'ha trigat segons de 4% a enumerar els canvis sense classificar després del "
-"reinici. Podeu utilitzar «--quiet» per evitar-ho. Establiu el paràmetre de "
+"S'ha trigat segons de 4% a enumerar els canvis sense classificar després del"
+" reinici. Podeu utilitzar «--quiet» per evitar-ho. Establiu el paràmetre de "
"configuració reset.quiet a cert per fer que això sigui el predeterminat."
-#: builtin/reset.c:434
+#: builtin/reset.c:440
#, c-format
msgid "Could not reset index file to revision '%s'."
msgstr "No s'ha pogut restablir el fitxer d'índex a la revisió «%s»."
-#: builtin/reset.c:439
+#: builtin/reset.c:445
msgid "Could not write new index file."
msgstr "No s'ha pogut escriure el fitxer d'índex nou."
-#: builtin/rev-list.c:538
+#: builtin/rev-list.c:541
msgid "cannot combine --exclude-promisor-objects and --missing"
msgstr "no es pot combinar --exclude-promisor-objects i --missing"
-#: builtin/rev-list.c:599
+#: builtin/rev-list.c:602
msgid "object filtering requires --objects"
msgstr "el filtratge d'objectes requereix --objects"
-#: builtin/rev-list.c:659
+#: builtin/rev-list.c:674
msgid "rev-list does not support display of notes"
msgstr "el rev-list no permet mostrar notes"
-#: builtin/rev-list.c:664
+#: builtin/rev-list.c:679
#, fuzzy
msgid "marked counting is incompatible with --objects"
msgstr "el recompte marcat és incompatible amb --objects"
@@ -22022,6 +22268,21 @@
msgid "output in stuck long form"
msgstr "emet en forma llarga enganxada"
+#: builtin/rev-parse.c:438
+#, fuzzy
+msgid "premature end of input"
+msgstr "error de lectura d'entrada"
+
+#: builtin/rev-parse.c:442
+#, fuzzy
+msgid "no usage string given before the `--' separator"
+msgstr "no s'ha indicat cap cadena d'ús abans del separador «--»"
+
+#: builtin/rev-parse.c:548
+#, fuzzy
+msgid "Needed a single revision"
+msgstr "make_script: s'ha produït un error en preparar les revisions"
+
#: builtin/rev-parse.c:552
msgid ""
"git rev-parse --parseopt [<options>] -- [<args>...]\n"
@@ -22034,8 +22295,57 @@
" o bé: git rev-parse --sq-quote [<argument>...]\n"
" o bé: git rev-parse [<opcions>] [<argument>...]\n"
"\n"
-"Executeu «git rev-parse --parseopt -h» per a més informació sobre el primer "
-"ús."
+"Executeu «git rev-parse --parseopt -h» per a més informació sobre el primer ús."
+
+#: builtin/rev-parse.c:712
+#, fuzzy
+msgid "--resolve-git-dir requires an argument"
+msgstr "--bisect-next no requereix cap argument"
+
+#: builtin/rev-parse.c:715
+#, fuzzy, c-format
+msgid "not a gitdir '%s'"
+msgstr "no és una revisió \"%s\""
+
+#: builtin/rev-parse.c:739
+#, fuzzy
+msgid "--git-path requires an argument"
+msgstr "--bisect-next no requereix cap argument"
+
+#: builtin/rev-parse.c:749
+#, fuzzy
+msgid "-n requires an argument"
+msgstr "--bisect-next no requereix cap argument"
+
+#: builtin/rev-parse.c:763
+#, fuzzy
+msgid "--path-format requires an argument"
+msgstr "--bisect-next no requereix cap argument"
+
+#: builtin/rev-parse.c:769
+#, fuzzy, c-format
+msgid "unknown argument to --path-format: %s"
+msgstr "Valor no vàlid per a --patch-format: %s"
+
+#: builtin/rev-parse.c:776
+#, fuzzy
+msgid "--default requires an argument"
+msgstr "--bisect-next no requereix cap argument"
+
+#: builtin/rev-parse.c:782
+#, fuzzy
+msgid "--prefix requires an argument"
+msgstr "--bisect-next no requereix cap argument"
+
+#: builtin/rev-parse.c:851
+#, fuzzy, c-format
+msgid "unknown mode for --abbrev-ref: %s"
+msgstr "valor desconegut per a --diff-merges: %s"
+
+#: builtin/rev-parse.c:1023
+#, fuzzy, c-format
+msgid "unknown mode for --show-object-format: %s"
+msgstr "mode de creació d'objecte no vàlid: %s"
#: builtin/revert.c:24
msgid "git revert [<options>] <commit-ish>..."
@@ -22109,17 +22419,21 @@
#: builtin/revert.c:127
msgid "preserve initially empty commits"
-msgstr "preserva les comissions inicialment buides"
+msgstr "conserva les comissions inicialment buides"
+
+#: builtin/revert.c:128
+msgid "allow commits with empty messages"
+msgstr "permet les comissions amb missatges buits"
#: builtin/revert.c:129
msgid "keep redundant, empty commits"
msgstr "retén les comissions redundants i buides"
-#: builtin/revert.c:237
+#: builtin/revert.c:241
msgid "revert failed"
msgstr "la reversió ha fallat"
-#: builtin/revert.c:250
+#: builtin/revert.c:254
msgid "cherry-pick failed"
msgstr "el «cherry pick» ha fallat"
@@ -22169,73 +22483,72 @@
msgstr[0] "el fitxer següent té modificacions locals:"
msgstr[1] "els fitxers següents tenen modificacions locals:"
-#: builtin/rm.c:244
+#: builtin/rm.c:245
msgid "do not list removed files"
msgstr "no llistis els fitxers eliminats"
-#: builtin/rm.c:245
+#: builtin/rm.c:246
msgid "only remove from the index"
msgstr "només elimina de l'índex"
-#: builtin/rm.c:246
+#: builtin/rm.c:247
msgid "override the up-to-date check"
msgstr "passa per alt la comprovació d'actualitat"
-#: builtin/rm.c:247
+#: builtin/rm.c:248
msgid "allow recursive removal"
msgstr "permet l'eliminació recursiva"
-#: builtin/rm.c:249
+#: builtin/rm.c:250
msgid "exit with a zero status even if nothing matched"
msgstr "surt amb estat zero encara que res hagi coincidit"
-#: builtin/rm.c:283
+#: builtin/rm.c:285
#, fuzzy
msgid "No pathspec was given. Which files should I remove?"
msgstr ""
"No s'ha indicat cap especificació de camí. Quins fitxers haig de suprimir?"
-#: builtin/rm.c:310
+#: builtin/rm.c:315
#, fuzzy
msgid "please stage your changes to .gitmodules or stash them to proceed"
msgstr ""
"si us plau astaqueu els canvis a .gitmodules o feu un «stash» per continuar"
-#: builtin/rm.c:331
+#: builtin/rm.c:337
#, c-format
msgid "not removing '%s' recursively without -r"
msgstr "no s'eliminarà «%s» recursivament sense -r"
-#: builtin/rm.c:379
+#: builtin/rm.c:385
#, c-format
msgid "git rm: unable to remove %s"
msgstr "git rm: no s'ha pogut eliminar %s"
#: builtin/send-pack.c:20
+#, fuzzy
msgid ""
-"git send-pack [--all | --mirror] [--dry-run] [--force] [--receive-pack=<git-"
-"receive-pack>] [--verbose] [--thin] [--atomic] [<host>:]<directory> "
-"[<ref>...]\n"
-" --all and explicit <ref> specification are mutually exclusive."
+"git send-pack [--mirror] [--dry-run] [--force]\n"
+" [--receive-pack=<git-receive-pack>]\n"
+" [--verbose] [--thin] [--atomic]\n"
+" [<host>:]<directory> (--all | <ref>...)"
msgstr ""
-"git send-pack [--all | --mirror] [--dry-run] [--force] [--receive-"
-"pack=<paquet-del-git-receive>] [--verbose] [--thin] [--atomic] "
-"[<màquina>:]<directori> [<referència>...]\n"
+"git send-pack [--all | --mirror] [--dry-run] [--force] [--receive-pack=<paquet-del-git-receive>] [--verbose] [--thin] [--atomic] [<màquina>:]<directori> [<referència>...]\n"
" --all i especificació <referència> explícita són mútuament excloents."
-#: builtin/send-pack.c:188
+#: builtin/send-pack.c:192
msgid "remote name"
msgstr "nom del remot"
-#: builtin/send-pack.c:201
+#: builtin/send-pack.c:205
msgid "use stateless RPC protocol"
msgstr "usa el protocol RPC sense estat"
-#: builtin/send-pack.c:202
+#: builtin/send-pack.c:206
msgid "read refs from stdin"
msgstr "llegeix les referències des de stdin"
-#: builtin/send-pack.c:203
+#: builtin/send-pack.c:207
msgid "print status from remote helper"
msgstr "imprimeix l'estat des de l'ajudant remot"
@@ -22301,16 +22614,17 @@
msgid "group by field"
msgstr "Agrupa per camp"
-#: builtin/shortlog.c:391
+#: builtin/shortlog.c:394
msgid "too many arguments given outside repository"
msgstr "hi ha massa arguments donats fora del repositori"
#: builtin/show-branch.c:13
+#, fuzzy
msgid ""
"git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
-"\t\t[--current] [--color[=<when>] | --no-color] [--sparse]\n"
-"\t\t[--more=<n> | --list | --independent | --merge-base]\n"
-"\t\t[--no-name | --sha1-name] [--topics] [(<rev> | <glob>)...]"
+" [--current] [--color[=<when>] | --no-color] [--sparse]\n"
+" [--more=<n> | --list | --independent | --merge-base]\n"
+" [--no-name | --sha1-name] [--topics] [(<rev> | <glob>)...]"
msgstr ""
"git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
"\t\t[--current] [--color[=<quan>] | --no-color] [--sparse]\n"
@@ -22319,7 +22633,8 @@
#: builtin/show-branch.c:17
msgid "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"
-msgstr "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<referència>]"
+msgstr ""
+"git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<referència>]"
#: builtin/show-branch.c:395
#, c-format
@@ -22328,114 +22643,115 @@
msgstr[0] "s'està ignorant %s; no es pot gestionar més de %d referència"
msgstr[1] "s'està ignorant %s; no es poden gestionar més de %d referències"
-#: builtin/show-branch.c:548
+#: builtin/show-branch.c:547
#, c-format
msgid "no matching refs with %s"
msgstr "no hi ha referències coincidents amb %s"
-#: builtin/show-branch.c:645
+#: builtin/show-branch.c:644
msgid "show remote-tracking and local branches"
msgstr "mostra les branques amb seguiment remot i les locals"
-#: builtin/show-branch.c:647
+#: builtin/show-branch.c:646
msgid "show remote-tracking branches"
msgstr "mostra les branques amb seguiment remot"
-#: builtin/show-branch.c:649
+#: builtin/show-branch.c:648
msgid "color '*!+-' corresponding to the branch"
msgstr "colora «*!+-» corresponent a la branca"
-#: builtin/show-branch.c:651
+#: builtin/show-branch.c:650
msgid "show <n> more commits after the common ancestor"
msgstr "mostra <n> comissions després de l'avantpassat comú"
-#: builtin/show-branch.c:653
+#: builtin/show-branch.c:652
msgid "synonym to more=-1"
msgstr "sinònim de more=-1"
-#: builtin/show-branch.c:654
+#: builtin/show-branch.c:653
msgid "suppress naming strings"
msgstr "omet anomenar cadenes"
-#: builtin/show-branch.c:656
+#: builtin/show-branch.c:655
msgid "include the current branch"
msgstr "inclou la branca actual"
-#: builtin/show-branch.c:658
+#: builtin/show-branch.c:657
msgid "name commits with their object names"
msgstr "anomena les comissions amb els seus noms d'objecte"
-#: builtin/show-branch.c:660
+#: builtin/show-branch.c:659
msgid "show possible merge bases"
msgstr "mostra les bases de fusió possibles"
-#: builtin/show-branch.c:662
+#: builtin/show-branch.c:661
msgid "show refs unreachable from any other ref"
msgstr "mostra les referències inabastables de qualsevol altra referència"
-#: builtin/show-branch.c:664
+#: builtin/show-branch.c:663
msgid "show commits in topological order"
msgstr "mostra les comissions en ordre topològic"
-#: builtin/show-branch.c:667
+#: builtin/show-branch.c:666
msgid "show only commits not on the first branch"
msgstr "mostra només les comissions que no siguin en la primera branca"
-#: builtin/show-branch.c:669
+#: builtin/show-branch.c:668
msgid "show merges reachable from only one tip"
msgstr "mostra les fusions abastables de només una punta"
-#: builtin/show-branch.c:671
+#: builtin/show-branch.c:670
msgid "topologically sort, maintaining date order where possible"
msgstr "ordena topològicament, mantenint l'ordre de dates on sigui possible"
-#: builtin/show-branch.c:674
+#: builtin/show-branch.c:673
msgid "<n>[,<base>]"
msgstr "<n>[,<base>]"
-#: builtin/show-branch.c:675
+#: builtin/show-branch.c:674
msgid "show <n> most recent ref-log entries starting at base"
msgstr "mostra les <n> entrades més recents començant a la base"
-#: builtin/show-branch.c:711
+#: builtin/show-branch.c:710
msgid ""
-"--reflog is incompatible with --all, --remotes, --independent or --merge-base"
+"--reflog is incompatible with --all, --remotes, --independent or --merge-"
+"base"
msgstr ""
"--reflog és incompatible amb --all, --remotes, --independent o --merge-base"
-#: builtin/show-branch.c:735
+#: builtin/show-branch.c:734
msgid "no branches given, and HEAD is not valid"
msgstr "no s'ha donat cap branca, i HEAD no és vàlid"
-#: builtin/show-branch.c:738
+#: builtin/show-branch.c:737
msgid "--reflog option needs one branch name"
msgstr "l'opció --reflog necessita un nom de branca"
-#: builtin/show-branch.c:741
+#: builtin/show-branch.c:740
#, c-format
msgid "only %d entry can be shown at one time."
msgid_plural "only %d entries can be shown at one time."
msgstr[0] "es pot mostrar només %d entrada a la vegada."
msgstr[1] "es poden mostrar només %d entrades a la vegada."
-#: builtin/show-branch.c:745
+#: builtin/show-branch.c:744
#, c-format
msgid "no such ref %s"
msgstr "no hi ha tal referència %s"
-#: builtin/show-branch.c:831
+#: builtin/show-branch.c:828
#, c-format
msgid "cannot handle more than %d rev."
msgid_plural "cannot handle more than %d revs."
msgstr[0] "no es pot gestionar més d'%d revisió."
msgstr[1] "no es poden gestionar més de %d revisions."
-#: builtin/show-branch.c:835
+#: builtin/show-branch.c:832
#, c-format
msgid "'%s' is not a valid ref."
msgstr "«%s» no és una referència vàlida."
-#: builtin/show-branch.c:838
+#: builtin/show-branch.c:835
#, c-format
msgid "cannot find commit %s (%s)"
msgstr "no es pot trobar la comissió %s (%s)"
@@ -22452,11 +22768,11 @@
#: builtin/show-ref.c:12
msgid ""
-"git show-ref [-q | --quiet] [--verify] [--head] [-d | --dereference] [-s | --"
-"hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [<pattern>...]"
+"git show-ref [-q | --quiet] [--verify] [--head] [-d | --dereference] [-s | "
+"--hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [<pattern>...]"
msgstr ""
-"git show-ref [-q | --quiet] [--verify] [--head] [-d | --dereference] [-s | --"
-"hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [<patró>...]"
+"git show-ref [-q | --quiet] [--verify] [--head] [-d | --dereference] [-s | "
+"--hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [<patró>...]"
#: builtin/show-ref.c:13
msgid "git show-ref --exclude-existing[=<pattern>]"
@@ -22510,84 +22826,100 @@
#, fuzzy
msgid "this worktree is not sparse (sparse-checkout file may not exist)"
msgstr ""
-"aquest arbre de treball no és dispers (pot ser que el fitxer sparse-checkout "
-"no existeixi)"
+"aquest arbre de treball no és dispers (pot ser que el fitxer sparse-checkout"
+" no existeixi)"
-#: builtin/sparse-checkout.c:227
+#: builtin/sparse-checkout.c:173
+#, c-format, fuzzy
+msgid ""
+"directory '%s' contains untracked files, but is not in the sparse-checkout "
+"cone"
+msgstr ""
+"el directori '%s' conté fitxers no seguits, però no està en el con de la "
+"verificació dispersa"
+
+#: builtin/sparse-checkout.c:181
+#, fuzzy, c-format
+msgid "failed to remove directory '%s'"
+msgstr "s'ha produït un error en crear el directori «%s»"
+
+#: builtin/sparse-checkout.c:321
#, fuzzy
msgid "failed to create directory for sparse-checkout file"
msgstr "no s'ha pogut crear el directori per al fitxer sparse-checkout"
-#: builtin/sparse-checkout.c:268
+#: builtin/sparse-checkout.c:362
#, fuzzy
msgid "unable to upgrade repository format to enable worktreeConfig"
msgstr ""
-"no s'ha pogut actualitzar el format del repositori per habilitar worktreeConfig"
+"no s'ha pogut actualitzar el format del repositori per habilitar "
+"worktreeConfig"
-#: builtin/sparse-checkout.c:270
+#: builtin/sparse-checkout.c:364
#, fuzzy
msgid "failed to set extensions.worktreeConfig setting"
msgstr "no s'ha pogut establir el paràmetre extensions.worktreeConfig"
-#: builtin/sparse-checkout.c:290
+#: builtin/sparse-checkout.c:384
#, fuzzy
msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
msgstr "git sparse-checkout init [--cone]"
-#: builtin/sparse-checkout.c:310
+#: builtin/sparse-checkout.c:404
#, fuzzy
msgid "initialize the sparse-checkout in cone mode"
msgstr "inicialitza el «sparse-checkout» en mode con"
-#: builtin/sparse-checkout.c:312
+#: builtin/sparse-checkout.c:406
+#, fuzzy
msgid "toggle the use of a sparse index"
-msgstr ""
+msgstr "commuta l'ús d'un índex dispers"
-#: builtin/sparse-checkout.c:340
+#: builtin/sparse-checkout.c:434
#, fuzzy
msgid "failed to modify sparse-index config"
msgstr "no s'ha pogut carregar l'índex del paquet per al fitxer de paquet %s"
-#: builtin/sparse-checkout.c:361
+#: builtin/sparse-checkout.c:455
#, c-format
msgid "failed to open '%s'"
msgstr "s'ha produït un error en obrir «%s»"
-#: builtin/sparse-checkout.c:419
+#: builtin/sparse-checkout.c:507
#, fuzzy, c-format
msgid "could not normalize path %s"
msgstr "no s'ha pogut normalitzar el camí"
-#: builtin/sparse-checkout.c:431
+#: builtin/sparse-checkout.c:519
#, fuzzy
msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
msgstr "git sparse-checkout (set|add) (--stdin | <patrons>)"
-#: builtin/sparse-checkout.c:456
+#: builtin/sparse-checkout.c:544
#, fuzzy, c-format
msgid "unable to unquote C-style string '%s'"
msgstr "no s'ha pogut treure la cadena de l'estil C «%s»"
-#: builtin/sparse-checkout.c:510 builtin/sparse-checkout.c:534
+#: builtin/sparse-checkout.c:598 builtin/sparse-checkout.c:622
#, fuzzy
msgid "unable to load existing sparse-checkout patterns"
msgstr "no s'han pogut carregar els patrons de «sparse-checkout» existents"
-#: builtin/sparse-checkout.c:579
+#: builtin/sparse-checkout.c:667
msgid "read patterns from standard in"
msgstr "llegeix els patrons de l'entrada estàndard"
-#: builtin/sparse-checkout.c:594
+#: builtin/sparse-checkout.c:682
#, fuzzy
msgid "git sparse-checkout reapply"
msgstr "git sparse-checkout init [--cone]"
-#: builtin/sparse-checkout.c:613
+#: builtin/sparse-checkout.c:701
#, fuzzy
msgid "git sparse-checkout disable"
msgstr "git sparse-checkout init [--cone]"
-#: builtin/sparse-checkout.c:644
+#: builtin/sparse-checkout.c:732
msgid "error while refreshing working directory"
msgstr "s'ha produït un error en actualitzar el directori de treball"
@@ -22613,10 +22945,6 @@
msgid "git stash branch <branchname> [<stash>]"
msgstr "git stash branch <nom-de-branca> [<stash>]"
-#: builtin/stash.c:29 builtin/stash.c:70
-msgid "git stash clear"
-msgstr "git stash clear"
-
#: builtin/stash.c:30
#, fuzzy
msgid ""
@@ -22625,11 +22953,11 @@
" [--pathspec-from-file=<file> [--pathspec-file-nul]]\n"
" [--] [<pathspec>...]]"
msgstr ""
-"git stash [push [-p|-patch] [-k|-[no-]keep-index] [-q|--quiet] [-u|--include-"
-"untracked] [-a|-all] [-m|-message <message>] [--pathspec-from-file=<file> [--"
-"path-spec-file-nul]]"
+"git stash [push [-p|-patch] [-k|-[no-]keep-index] [-q|--quiet] "
+"[-u|--include-untracked] [-a|-all] [-m|-message <message>] [--pathspec-from-"
+"file=<file> [--path-spec-file-nul]]"
-#: builtin/stash.c:34 builtin/stash.c:87
+#: builtin/stash.c:34
msgid ""
"git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
" [-u|--include-untracked] [-a|--all] [<message>]"
@@ -22659,6 +22987,15 @@
" [-u|--include-untracked] [-a|--all] [-m|--message <missatge>]\n"
" [--] [<pathspec>...]]"
+#: builtin/stash.c:87
+#, fuzzy
+msgid ""
+"git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
+" [-u|--include-untracked] [-a|--all] [<message>]"
+msgstr ""
+"git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
+" [-u|--include-untracked] [-a|--all] [<missatge>]"
+
#: builtin/stash.c:130
#, c-format
msgid "'%s' is not a stash-like commit"
@@ -22683,187 +23020,190 @@
msgid "git stash clear with arguments is unimplemented"
msgstr "git stash clear amb paràmetres no està implementat"
-#: builtin/stash.c:431
-#, c-format
+#: builtin/stash.c:447
+#, fuzzy, c-format
msgid ""
"WARNING: Untracked file in way of tracked file! Renaming\n"
" %s -> %s\n"
" to make room.\n"
msgstr ""
+"AVÍS: El fitxer no seguit en el camí del fitxer seguit! S'està reanomenant\n"
+" %s - % %s\n"
+" per fer espai."
-#: builtin/stash.c:492
+#: builtin/stash.c:508
msgid "cannot apply a stash in the middle of a merge"
msgstr "no es pot aplicar un «stash» enmig d'una fusió"
-#: builtin/stash.c:503
+#: builtin/stash.c:519
#, c-format
msgid "could not generate diff %s^!."
msgstr "no s'ha pogut generar diff %s^!."
-#: builtin/stash.c:510
+#: builtin/stash.c:526
#, fuzzy
msgid "conflicts in index. Try without --index."
msgstr "hi ha conflictes en l'índex. Proveu-ho sense --index."
-#: builtin/stash.c:516
+#: builtin/stash.c:532
msgid "could not save index tree"
msgstr "no s'ha pogut desar l'arbre d'índex"
-#: builtin/stash.c:525
-msgid "could not restore untracked files from stash"
-msgstr "no s'han pogut restaurar els fitxers no seguits des del «stash»"
-
-#: builtin/stash.c:539
+#: builtin/stash.c:552
#, c-format
msgid "Merging %s with %s"
msgstr "S'està fusionant %s amb %s"
-#: builtin/stash.c:549
+#: builtin/stash.c:562
msgid "Index was not unstashed."
msgstr "L'índex no estava «unstashed»."
-#: builtin/stash.c:591 builtin/stash.c:689
+#: builtin/stash.c:575
+msgid "could not restore untracked files from stash"
+msgstr "no s'han pogut restaurar els fitxers no seguits des del «stash»"
+
+#: builtin/stash.c:607 builtin/stash.c:705
msgid "attempt to recreate the index"
msgstr "intenta tornar a crear l'índex"
-#: builtin/stash.c:635
+#: builtin/stash.c:651
#, c-format
msgid "Dropped %s (%s)"
-msgstr "Descartat %s (%s)"
+msgstr "Descartada %s (%s)"
-#: builtin/stash.c:638
+#: builtin/stash.c:654
#, c-format
msgid "%s: Could not drop stash entry"
msgstr "%s: no s'ha pogut descartar l'entrada «stash»"
-#: builtin/stash.c:651
+#: builtin/stash.c:667
#, c-format
msgid "'%s' is not a stash reference"
msgstr "«%s» no és una referència «stash»"
-#: builtin/stash.c:701
+#: builtin/stash.c:717
msgid "The stash entry is kept in case you need it again."
msgstr "Es conserva l'entrada «stash» en cas que la necessiteu altra vegada."
-#: builtin/stash.c:724
+#: builtin/stash.c:740
msgid "No branch name specified"
msgstr "Cap nom de branca especificat"
-#: builtin/stash.c:808
+#: builtin/stash.c:824
#, fuzzy
msgid "failed to parse tree"
msgstr "s'ha produït un error en analitzar %s"
-#: builtin/stash.c:819
+#: builtin/stash.c:835
#, fuzzy
msgid "failed to unpack trees"
msgstr "s'ha produït un error en desempaquetar l'objecte d'arbre HEAD"
-#: builtin/stash.c:839
+#: builtin/stash.c:855
#, fuzzy
msgid "include untracked files in the stash"
msgstr "inclou els fitxers no seguits a «stash»"
-#: builtin/stash.c:842
+#: builtin/stash.c:858
#, fuzzy
msgid "only show untracked files in the stash"
msgstr "inclou els fitxers no seguits a «stash»"
-#: builtin/stash.c:932 builtin/stash.c:969
+#: builtin/stash.c:945 builtin/stash.c:982
#, c-format
msgid "Cannot update %s with %s"
msgstr "No es pot actualitzar %s amb %s"
-#: builtin/stash.c:950 builtin/stash.c:1606 builtin/stash.c:1671
+#: builtin/stash.c:963 builtin/stash.c:1619 builtin/stash.c:1684
msgid "stash message"
msgstr "missatge «stash»"
-#: builtin/stash.c:960
+#: builtin/stash.c:973
msgid "\"git stash store\" requires one <commit> argument"
msgstr "«git stash store» requereix un argument <comissió>"
-#: builtin/stash.c:1175
+#: builtin/stash.c:1187
msgid "No changes selected"
msgstr "No hi ha canvis seleccionats"
-#: builtin/stash.c:1275
+#: builtin/stash.c:1287
msgid "You do not have the initial commit yet"
msgstr "Encara no teniu la comissió inicial"
-#: builtin/stash.c:1302
+#: builtin/stash.c:1314
msgid "Cannot save the current index state"
msgstr "No es pot desar l'estat d'índex actual"
-#: builtin/stash.c:1311
+#: builtin/stash.c:1323
msgid "Cannot save the untracked files"
msgstr "No es poden desar els fitxers no seguits"
-#: builtin/stash.c:1322 builtin/stash.c:1331
+#: builtin/stash.c:1334 builtin/stash.c:1343
msgid "Cannot save the current worktree state"
msgstr "No es pot desar l'estat d'arbre de treball actual"
-#: builtin/stash.c:1359
+#: builtin/stash.c:1371
msgid "Cannot record working tree state"
msgstr "No es pot registrar l'estat de l'arbre de treball"
-#: builtin/stash.c:1408
+#: builtin/stash.c:1420
msgid "Can't use --patch and --include-untracked or --all at the same time"
msgstr "No es poden usar --patch i --include-untracked o --all a la vegada"
-#: builtin/stash.c:1426
+#: builtin/stash.c:1438
msgid "Did you forget to 'git add'?"
msgstr "Heu oblidat de fer «git add»?"
-#: builtin/stash.c:1441
+#: builtin/stash.c:1453
msgid "No local changes to save"
msgstr "No hi ha canvis locals a desar"
-#: builtin/stash.c:1448
+#: builtin/stash.c:1460
msgid "Cannot initialize stash"
msgstr "No es pot inicialitzar el magatzem"
-#: builtin/stash.c:1463
+#: builtin/stash.c:1475
msgid "Cannot save the current status"
msgstr "No es pot desar l'estat actual"
-#: builtin/stash.c:1468
+#: builtin/stash.c:1480
#, c-format
msgid "Saved working directory and index state %s"
msgstr "S'han desat el directori de treball i l'estat d'índex %s"
-#: builtin/stash.c:1558
+#: builtin/stash.c:1571
msgid "Cannot remove worktree changes"
msgstr "No es poden eliminar els canvis de l'arbre de treball"
-#: builtin/stash.c:1597 builtin/stash.c:1662
+#: builtin/stash.c:1610 builtin/stash.c:1675
msgid "keep index"
msgstr "mantén l'índex"
-#: builtin/stash.c:1599 builtin/stash.c:1664
+#: builtin/stash.c:1612 builtin/stash.c:1677
#, fuzzy
msgid "stash in patch mode"
msgstr "stash en mode pedaç"
-#: builtin/stash.c:1600 builtin/stash.c:1665
+#: builtin/stash.c:1613 builtin/stash.c:1678
msgid "quiet mode"
msgstr "mode silenciós"
-#: builtin/stash.c:1602 builtin/stash.c:1667
+#: builtin/stash.c:1615 builtin/stash.c:1680
msgid "include untracked files in stash"
msgstr "inclou els fitxers no seguits a «stash»"
-#: builtin/stash.c:1604 builtin/stash.c:1669
+#: builtin/stash.c:1617 builtin/stash.c:1682
msgid "include ignore files"
msgstr "inclou els fitxers ignorats"
-#: builtin/stash.c:1704
+#: builtin/stash.c:1717
#, fuzzy
msgid ""
"the stash.useBuiltin support has been removed!\n"
"See its entry in 'git help config' for details."
msgstr ""
-"s'ha eliminat el suport «rebase.useBuiltin»! Per a més detalls vegeu la seva "
-"entrada a «git help config»."
+"s'ha eliminat el suport «rebase.useBuiltin»! Per a més detalls vegeu la seva"
+" entrada a «git help config»."
#: builtin/stripspace.c:18
msgid "git stripspace [-s | --strip-comments]"
@@ -22882,40 +23222,49 @@
msgid "prepend comment character and space to each line"
msgstr "anteposa el caràcter de comentari i un espai a cada línia"
-#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2424
+#: builtin/submodule--helper.c:46 builtin/submodule--helper.c:2667
#, c-format
msgid "Expecting a full ref name, got %s"
msgstr "S'espera un nom de referència ple, s'ha rebut %s"
-#: builtin/submodule--helper.c:64
+#: builtin/submodule--helper.c:63
msgid "submodule--helper print-default-remote takes no arguments"
msgstr "submodule--helper print-default-remote no pren cap argument"
-#: builtin/submodule--helper.c:102
+#: builtin/submodule--helper.c:101
#, c-format
msgid "cannot strip one component off url '%s'"
msgstr "no es pot despullar un component de l'url «%s»"
-#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1820
+#: builtin/submodule--helper.c:211
+#, c-format
+msgid ""
+"could not look up configuration '%s'. Assuming this repository is its own "
+"authoritative upstream."
+msgstr ""
+"no s'ha pogut trobar la configuració «%s». S'assumeix que aquest repositori "
+"és el seu repositori font autoritzat."
+
+#: builtin/submodule--helper.c:405 builtin/submodule--helper.c:1858
msgid "alternative anchor for relative paths"
msgstr "àncora alternativa per als camins relatius"
-#: builtin/submodule--helper.c:415
+#: builtin/submodule--helper.c:410
msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
msgstr "git submodule--helper list [--prefix=<camí>] [<camí>...]"
-#: builtin/submodule--helper.c:473 builtin/submodule--helper.c:630
-#: builtin/submodule--helper.c:653
+#: builtin/submodule--helper.c:468 builtin/submodule--helper.c:605
+#: builtin/submodule--helper.c:628
#, c-format
msgid "No url found for submodule path '%s' in .gitmodules"
msgstr "No s'ha trobat cap url per al camí de submòdul «%s» a .gitmodules"
-#: builtin/submodule--helper.c:525
+#: builtin/submodule--helper.c:520
#, c-format
msgid "Entering '%s'\n"
msgstr "S'està entrant a «%s»\n"
-#: builtin/submodule--helper.c:528
+#: builtin/submodule--helper.c:523
#, fuzzy, c-format
msgid ""
"run_command returned non-zero status for %s\n"
@@ -22923,93 +23272,83 @@
msgstr ""
"runcommand ha retornat un estat diferent de zero per als percentatges ."
-#: builtin/submodule--helper.c:550
+#: builtin/submodule--helper.c:545
#, fuzzy, c-format
msgid ""
-"run_command returned non-zero status while recursing in the nested "
-"submodules of %s\n"
+"run_command returned non-zero status while recursing in the nested submodules of %s\n"
"."
msgstr ""
"runcommand ha retornat un estat diferent de zero mentre es repeteix als "
"submòduls niats de percentatges ."
-#: builtin/submodule--helper.c:566
+#: builtin/submodule--helper.c:561
#, fuzzy
msgid "suppress output of entering each submodule command"
msgstr "Omet la sortida en entrar l'ordre de cada submòdul"
-#: builtin/submodule--helper.c:568 builtin/submodule--helper.c:889
-#: builtin/submodule--helper.c:1488
+#: builtin/submodule--helper.c:563 builtin/submodule--helper.c:864
+#: builtin/submodule--helper.c:1453
msgid "recurse into nested submodules"
msgstr "inclou recursivament els submòduls imbricats"
-#: builtin/submodule--helper.c:573
+#: builtin/submodule--helper.c:568
msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
msgstr "git submodule--helper foreach [--quiet] [--recursive] [--] <ordre>"
-#: builtin/submodule--helper.c:600
-#, c-format
-msgid ""
-"could not look up configuration '%s'. Assuming this repository is its own "
-"authoritative upstream."
-msgstr ""
-"no s'ha pogut trobar la configuració «%s». S'assumeix que aquest repositori és "
-"el seu repositori font autoritzat."
-
-#: builtin/submodule--helper.c:667
+#: builtin/submodule--helper.c:642
#, c-format
msgid "Failed to register url for submodule path '%s'"
msgstr "S'ha produït un error en registrar l'url per al camí de submòdul «%s»"
-#: builtin/submodule--helper.c:671
+#: builtin/submodule--helper.c:646
#, c-format
msgid "Submodule '%s' (%s) registered for path '%s'\n"
msgstr "S'ha registrat el submòdul «%s» (%s) per al camí «%s»\n"
-#: builtin/submodule--helper.c:681
+#: builtin/submodule--helper.c:656
#, c-format
msgid "warning: command update mode suggested for submodule '%s'\n"
msgstr ""
"advertència: se suggereix el mode d'actualització per ordre per al submòdul "
"«%s»\n"
-#: builtin/submodule--helper.c:688
+#: builtin/submodule--helper.c:663
#, c-format
msgid "Failed to register update mode for submodule path '%s'"
msgstr ""
"S'ha produït un error en registrar el mode d'actualització per al camí de "
"submòdul «%s»"
-#: builtin/submodule--helper.c:710
+#: builtin/submodule--helper.c:685
#, fuzzy
msgid "suppress output for initializing a submodule"
msgstr "Omet la sortida d'inicialitzar un submòdul"
-#: builtin/submodule--helper.c:715
+#: builtin/submodule--helper.c:690
msgid "git submodule--helper init [<options>] [<path>]"
msgstr "git submodule--helper init [<opcions>] [<camí>]"
-#: builtin/submodule--helper.c:788 builtin/submodule--helper.c:923
+#: builtin/submodule--helper.c:763 builtin/submodule--helper.c:898
#, c-format
msgid "no submodule mapping found in .gitmodules for path '%s'"
msgstr "No s'ha trobat cap mapatge de submòdul a .gitmodules per al camí «%s»"
-#: builtin/submodule--helper.c:836
+#: builtin/submodule--helper.c:811
#, c-format
msgid "could not resolve HEAD ref inside the submodule '%s'"
msgstr "no s'ha pogut resoldre la referència a HEAD dins del submòdul «%s»"
-#: builtin/submodule--helper.c:863 builtin/submodule--helper.c:1458
+#: builtin/submodule--helper.c:838 builtin/submodule--helper.c:1423
#, c-format
msgid "failed to recurse into submodule '%s'"
msgstr "s'ha produït un error en cercar recursivament al submòdul «%s»"
-#: builtin/submodule--helper.c:887 builtin/submodule--helper.c:1624
+#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1589
#, fuzzy
msgid "suppress submodule status output"
msgstr "Suprimeix la sortida de l'estat del submòdul"
-#: builtin/submodule--helper.c:888
+#: builtin/submodule--helper.c:863
#, fuzzy
msgid ""
"use commit stored in the index instead of the one stored in the submodule "
@@ -23018,109 +23357,110 @@
"Utilitza la comissió emmagatzemada a l'índex en lloc de la emmagatzemada al "
"submòdul HEAD"
-#: builtin/submodule--helper.c:894
+#: builtin/submodule--helper.c:869
msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
msgstr "git submodule status [--quiet] [--cached] [--recursive] [<camí>...]"
-#: builtin/submodule--helper.c:918
+#: builtin/submodule--helper.c:893
msgid "git submodule--helper name <path>"
msgstr "git submodule--helper name <camí>"
-#: builtin/submodule--helper.c:990
+#: builtin/submodule--helper.c:965
#, fuzzy, c-format
msgid "* %s %s(blob)->%s(submodule)"
msgstr "* el %s(blob)->%s(submòdul)"
-#: builtin/submodule--helper.c:993
+#: builtin/submodule--helper.c:968
#, fuzzy, c-format
msgid "* %s %s(submodule)->%s(blob)"
msgstr "* un %s per cents(submòdul)->%s(blob)"
-#: builtin/submodule--helper.c:1006
+#: builtin/submodule--helper.c:981
#, fuzzy, c-format
msgid "%s"
msgstr "percentatges"
-#: builtin/submodule--helper.c:1056
+#: builtin/submodule--helper.c:1031
#, fuzzy, c-format
msgid "couldn't hash object from '%s'"
msgstr "no s'ha pogut analitzar l'objecte «%s»"
-#: builtin/submodule--helper.c:1060
+#: builtin/submodule--helper.c:1035
#, fuzzy, c-format
msgid "unexpected mode %o\n"
msgstr "mode inesperat $mod_dst"
-#: builtin/submodule--helper.c:1301
+#: builtin/submodule--helper.c:1276
#, fuzzy
msgid "use the commit stored in the index instead of the submodule HEAD"
msgstr ""
"Utilitza la comissió emmagatzemada a l'índex en lloc de la emmagatzemada al "
"submòdul HEAD"
-#: builtin/submodule--helper.c:1303
+#: builtin/submodule--helper.c:1278
#, fuzzy
-msgid "to compare the commit in the index with that in the submodule HEAD"
+msgid "compare the commit in the index with that in the submodule HEAD"
msgstr ""
"Utilitza la comissió emmagatzemada a l'índex en lloc de la emmagatzemada al "
"submòdul HEAD"
-#: builtin/submodule--helper.c:1305
+#: builtin/submodule--helper.c:1280
#, fuzzy
msgid "skip submodules with 'ignore_config' value set to 'all'"
msgstr "omet els submòduls amb el valor «ignoreconfig» establert a «all»"
-#: builtin/submodule--helper.c:1307
+#: builtin/submodule--helper.c:1282
#, fuzzy
msgid "limit the summary size"
msgstr "limita a caps"
-#: builtin/submodule--helper.c:1312
+#: builtin/submodule--helper.c:1287
#, fuzzy
msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
msgstr "git submodule--helper init [<opcions>] [<camí>]"
-#: builtin/submodule--helper.c:1336
+#: builtin/submodule--helper.c:1311
#, fuzzy
msgid "could not fetch a revision for HEAD"
msgstr "no s'ha pogut separar HEAD"
-#: builtin/submodule--helper.c:1341
+#: builtin/submodule--helper.c:1316
#, fuzzy
msgid "--cached and --files are mutually exclusive"
msgstr "-n i -k són mútuament excloents"
-#: builtin/submodule--helper.c:1408
+#: builtin/submodule--helper.c:1373
#, c-format
msgid "Synchronizing submodule url for '%s'\n"
msgstr "S'està sincronitzant l'url del submòdul per a «%s»\n"
-#: builtin/submodule--helper.c:1414
+#: builtin/submodule--helper.c:1379
#, c-format
msgid "failed to register url for submodule path '%s'"
-msgstr "s'ha produït un error en registrar l'url per al camí del submòdul «%s»"
+msgstr ""
+"s'ha produït un error en registrar l'url per al camí del submòdul «%s»"
-#: builtin/submodule--helper.c:1428
+#: builtin/submodule--helper.c:1393
#, c-format
msgid "failed to get the default remote for submodule '%s'"
msgstr ""
"s'ha produït un error en obtenir el remot per defecte pel submòdul «%s»"
-#: builtin/submodule--helper.c:1439
+#: builtin/submodule--helper.c:1404
#, c-format
msgid "failed to update remote for submodule '%s'"
msgstr "s'ha produït un error en actualitzar el remot pel submòdul «%s»"
-#: builtin/submodule--helper.c:1486
+#: builtin/submodule--helper.c:1451
#, fuzzy
msgid "suppress output of synchronizing submodule url"
msgstr "Omet la sortida de la sincronització de l'url del submòdul"
-#: builtin/submodule--helper.c:1493
+#: builtin/submodule--helper.c:1458
msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
msgstr "git submodule--helper sync [--quiet] [--recursive] [<camí>]"
-#: builtin/submodule--helper.c:1547
+#: builtin/submodule--helper.c:1512
#, c-format
msgid ""
"Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you "
@@ -23129,7 +23469,7 @@
"L'arbre de treball de submòdul «%s» conté un directori .git\n"
"(useu «rm -rf» si realment voleu eliminar-lo, incloent tota la seva història)"
-#: builtin/submodule--helper.c:1559
+#: builtin/submodule--helper.c:1524
#, c-format
msgid ""
"Submodule work tree '%s' contains local modifications; use '-f' to discard "
@@ -23138,49 +23478,49 @@
"L'arbre de treball del submòdul «%s» conté modificacions locals; useu «-f» "
"per a descartar-les"
-#: builtin/submodule--helper.c:1567
+#: builtin/submodule--helper.c:1532
#, c-format
msgid "Cleared directory '%s'\n"
msgstr "S'ha esborrat el directori «%s»\n"
-#: builtin/submodule--helper.c:1569
+#: builtin/submodule--helper.c:1534
#, c-format
msgid "Could not remove submodule work tree '%s'\n"
msgstr "No s'ha pogut eliminar l'arbre de treball de submòdul «%s»\n"
-#: builtin/submodule--helper.c:1580
+#: builtin/submodule--helper.c:1545
#, c-format
msgid "could not create empty submodule directory %s"
msgstr "no s'ha pogut crear el directori de submòdul buit %s"
-#: builtin/submodule--helper.c:1596
+#: builtin/submodule--helper.c:1561
#, c-format
msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
msgstr "S'ha desregistrat el submòdul «%s» (%s) per al camí «%s»\n"
-#: builtin/submodule--helper.c:1625
+#: builtin/submodule--helper.c:1590
#, fuzzy
msgid "remove submodule working trees even if they contain local changes"
msgstr ""
"Elimina els arbres de treball dels submòduls fins i tot si contenen canvis "
"locals"
-#: builtin/submodule--helper.c:1626
+#: builtin/submodule--helper.c:1591
#, fuzzy
msgid "unregister all submodules"
msgstr "Desregistra recursivament tots els submòduls"
-#: builtin/submodule--helper.c:1631
+#: builtin/submodule--helper.c:1596
msgid ""
"git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
msgstr ""
"git submodule deinit [--quiet] [-f | --force] [--all | [--] [<camí>...]]"
-#: builtin/submodule--helper.c:1645
+#: builtin/submodule--helper.c:1610
msgid "Use '--all' if you really want to deinitialize all submodules"
msgstr "Useu «--all» si realment voleu desinicialitzar tots els submòduls"
-#: builtin/submodule--helper.c:1714
+#: builtin/submodule--helper.c:1655
#, fuzzy
msgid ""
"An alternate computed from a superproject's alternate is invalid.\n"
@@ -23189,50 +23529,71 @@
"'--reference-if-able' instead of '--reference'."
msgstr ""
"Un càlcul alternatiu d'un superprojecte no és vàlid. Per permetre que Git "
-"cloni sense una alternativa en aquest cas establiu submòdul."
-"alternateErrorStrategy a 'info' o clona equivalentment amb «--reference-if-"
-"able' en lloc de «--reference»."
+"cloni sense una alternativa en aquest cas establiu "
+"submòdul.alternateErrorStrategy a 'info' o clona equivalentment amb "
+"«--reference-if-able' en lloc de «--reference»."
-#: builtin/submodule--helper.c:1753 builtin/submodule--helper.c:1756
+#: builtin/submodule--helper.c:1700 builtin/submodule--helper.c:1703
#, c-format
msgid "submodule '%s' cannot add alternate: %s"
msgstr "el submòdul «%s» no pot afegir un alternatiu: %s"
-#: builtin/submodule--helper.c:1792
+#: builtin/submodule--helper.c:1739
#, c-format
msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
msgstr "No es reconeix el valor «%s» per a submodule.alternateErrorStrategy"
-#: builtin/submodule--helper.c:1799
+#: builtin/submodule--helper.c:1746
#, c-format
msgid "Value '%s' for submodule.alternateLocation is not recognized"
msgstr "No es reconeix el valor «%s» per a submodule.alternateLocation"
-#: builtin/submodule--helper.c:1823
+#: builtin/submodule--helper.c:1771
+#, fuzzy, c-format
+msgid "refusing to create/use '%s' in another submodule's git dir"
+msgstr "refusant crear/usar '%s' en el directori git d'un altre submòdul"
+
+#: builtin/submodule--helper.c:1812
+#, c-format
+msgid "clone of '%s' into submodule path '%s' failed"
+msgstr "el clonatge de «%s» al camí de submòdul «%s» ha fallat"
+
+#: builtin/submodule--helper.c:1817
+#, c-format
+msgid "directory not empty: '%s'"
+msgstr "directori no buit: «%s»"
+
+#: builtin/submodule--helper.c:1829
+#, c-format
+msgid "could not get submodule directory for '%s'"
+msgstr "no s'ha pogut obtenir el directori de submòdul per a «%s»"
+
+#: builtin/submodule--helper.c:1861
msgid "where the new submodule will be cloned to"
msgstr "a on es clonarà el submòdul nou"
-#: builtin/submodule--helper.c:1826
+#: builtin/submodule--helper.c:1864
msgid "name of the new submodule"
msgstr "nom del submòdul nou"
-#: builtin/submodule--helper.c:1829
+#: builtin/submodule--helper.c:1867
msgid "url where to clone the submodule from"
msgstr "url del qual clonar el submòdul"
-#: builtin/submodule--helper.c:1837
+#: builtin/submodule--helper.c:1875 builtin/submodule--helper.c:3264
msgid "depth for shallow clones"
msgstr "profunditat dels clons superficials"
-#: builtin/submodule--helper.c:1840 builtin/submodule--helper.c:2349
+#: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:2525
+#: builtin/submodule--helper.c:3257
msgid "force cloning progress"
msgstr "força el progrés del clonatge"
-#: builtin/submodule--helper.c:1842 builtin/submodule--helper.c:2351
+#: builtin/submodule--helper.c:1880 builtin/submodule--helper.c:2527
msgid "disallow cloning into non-empty directory"
msgstr "no permetis clonar en un directori no buit"
-#: builtin/submodule--helper.c:1849
+#: builtin/submodule--helper.c:1887
#, fuzzy
msgid ""
"git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
@@ -23240,107 +23601,199 @@
"<url> --path <path>"
msgstr ""
"git submodule--helper clone [--prefix=<path>] [--quiet] [---reference "
-"<repository>] [--name <name>] [--depth <] [---single-branch] --url <url> --"
-"path <path>"
+"<repository>] [--name <name>] [--depth <] [---single-branch] --url <url> "
+"--path <path>"
-#: builtin/submodule--helper.c:1874
-#, fuzzy, c-format
-msgid "refusing to create/use '%s' in another submodule's git dir"
-msgstr "refusant crear/usar '%s' en el directori git d'un altre submòdul"
-
-#: builtin/submodule--helper.c:1885
-#, c-format
-msgid "clone of '%s' into submodule path '%s' failed"
-msgstr "el clonatge de «%s» al camí de submòdul «%s» ha fallat"
-
-#: builtin/submodule--helper.c:1889
-#, c-format
-msgid "directory not empty: '%s'"
-msgstr "directori no buit: «%s»"
-
-#: builtin/submodule--helper.c:1901
-#, c-format
-msgid "could not get submodule directory for '%s'"
-msgstr "no s'ha pogut obtenir el directori de submòdul per a «%s»"
-
-#: builtin/submodule--helper.c:1937
+#: builtin/submodule--helper.c:1924
#, c-format
msgid "Invalid update mode '%s' for submodule path '%s'"
msgstr "Mode d'actualització «%s» no vàlid per al camí de submòdul «%s»"
-#: builtin/submodule--helper.c:1941
+#: builtin/submodule--helper.c:1928
#, c-format
msgid "Invalid update mode '%s' configured for submodule path '%s'"
msgstr ""
"Mode d'actualització «%s» configurat no vàlid per al camí de submòdul «%s»"
-#: builtin/submodule--helper.c:2042
+#: builtin/submodule--helper.c:2043
#, c-format
msgid "Submodule path '%s' not initialized"
msgstr "El camí de submòdul «%s» no està inicialitzat"
-#: builtin/submodule--helper.c:2046
+#: builtin/submodule--helper.c:2047
msgid "Maybe you want to use 'update --init'?"
msgstr "Potser voleu usar «update --init»?"
-#: builtin/submodule--helper.c:2076
+#: builtin/submodule--helper.c:2077
#, c-format
msgid "Skipping unmerged submodule %s"
msgstr "S'està ometent el submòdul no fusionat %s"
-#: builtin/submodule--helper.c:2105
+#: builtin/submodule--helper.c:2106
#, c-format
msgid "Skipping submodule '%s'"
msgstr "S'està ometent el submòdul «%s»"
-#: builtin/submodule--helper.c:2255
+#: builtin/submodule--helper.c:2256
#, c-format
msgid "Failed to clone '%s'. Retry scheduled"
msgstr "S'ha produït un error en clonar «%s». S'ha programat un reintent"
-#: builtin/submodule--helper.c:2266
+#: builtin/submodule--helper.c:2267
#, c-format
msgid "Failed to clone '%s' a second time, aborting"
msgstr "S'ha produït un error per segon cop en clonar «%s», s'està avortant"
-#: builtin/submodule--helper.c:2328 builtin/submodule--helper.c:2574
+#: builtin/submodule--helper.c:2372
+#, fuzzy, c-format
+msgid "Unable to checkout '%s' in submodule path '%s'"
+msgstr "No s'ha pogut agafar «$sha1» en el camí de submòdul «$displaypath»"
+
+#: builtin/submodule--helper.c:2376
+#, fuzzy, c-format
+msgid "Unable to rebase '%s' in submodule path '%s'"
+msgstr ""
+"No s'ha pogut fer «rebase» «$sha1» en el camí de submòdul «$displaypath»"
+
+#: builtin/submodule--helper.c:2380
+#, fuzzy, c-format
+msgid "Unable to merge '%s' in submodule path '%s'"
+msgstr "No s'ha pogut fusionar «$sha1» en el camí de submòdul «$displaypath»"
+
+#: builtin/submodule--helper.c:2384
+#, fuzzy, c-format
+msgid "Execution of '%s %s' failed in submodule path '%s'"
+msgstr ""
+"L'execució de «$command $sha1» ha fallat en el camí de submòdul "
+"«$displaypath»"
+
+#: builtin/submodule--helper.c:2408
+#, fuzzy, c-format
+msgid "Submodule path '%s': checked out '%s'\n"
+msgstr "Camí de submòdul «$displaypath»: s'ha agafat «$sha1»"
+
+#: builtin/submodule--helper.c:2412
+#, fuzzy, c-format
+msgid "Submodule path '%s': rebased into '%s'\n"
+msgstr "Camí de submòdul «$displaypath»: s'ha fet «rebase» en «$sha1»"
+
+#: builtin/submodule--helper.c:2416
+#, fuzzy, c-format
+msgid "Submodule path '%s': merged in '%s'\n"
+msgstr "Camí de submòdul «$displaypath»: s'ha fusionat en «$sha1»"
+
+#: builtin/submodule--helper.c:2420
+#, fuzzy, c-format
+msgid "Submodule path '%s': '%s %s'\n"
+msgstr "El camí de submòdul «%s» no està inicialitzat"
+
+#: builtin/submodule--helper.c:2444
+#, fuzzy, c-format
+msgid "Unable to fetch in submodule path '%s'; trying to directly fetch %s:"
+msgstr ""
+"No s'ha pogut obtenir en el camí de submòdul «$displaypath»; s'està "
+"intentant obtenir directament $sha1:"
+
+#: builtin/submodule--helper.c:2453
+#, fuzzy, c-format
+msgid ""
+"Fetched in submodule path '%s', but it did not contain %s. Direct fetching "
+"of that commit failed."
+msgstr ""
+"S'ha obtingut en el camí de submòdul «$displaypath», però no contenia $sha1."
+" L'obtenció directa d'aquella comissió ha fallat."
+
+#: builtin/submodule--helper.c:2504 builtin/submodule--helper.c:2574
+#: builtin/submodule--helper.c:2812
msgid "path into the working tree"
msgstr "camí a l'arbre de treball"
-#: builtin/submodule--helper.c:2331
+#: builtin/submodule--helper.c:2507 builtin/submodule--helper.c:2579
msgid "path into the working tree, across nested submodule boundaries"
msgstr "camí a l'arbre de treball, a través de fronteres de submòduls niats"
-#: builtin/submodule--helper.c:2335
+#: builtin/submodule--helper.c:2511 builtin/submodule--helper.c:2577
msgid "rebase, merge, checkout or none"
msgstr "rebase, merge, checkout o none"
-#: builtin/submodule--helper.c:2341
+#: builtin/submodule--helper.c:2517
#, fuzzy
msgid "create a shallow clone truncated to the specified number of revisions"
msgstr "Crea un clon superficial truncat al nombre de revisions especificat"
-#: builtin/submodule--helper.c:2344
+#: builtin/submodule--helper.c:2520
msgid "parallel jobs"
msgstr "tasques paral·leles"
-#: builtin/submodule--helper.c:2346
+#: builtin/submodule--helper.c:2522
msgid "whether the initial clone should follow the shallow recommendation"
msgstr "si el clonatge inicial ha de seguir la recomanació de superficialitat"
-#: builtin/submodule--helper.c:2347
+#: builtin/submodule--helper.c:2523
msgid "don't print cloning progress"
msgstr "no imprimeixis el progrés del clonatge"
-#: builtin/submodule--helper.c:2358
+#: builtin/submodule--helper.c:2534
msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
msgstr "git submodule--helper update-clone [--prefix=<camí>] [<camí>...]"
-#: builtin/submodule--helper.c:2371
+#: builtin/submodule--helper.c:2547
msgid "bad value for update parameter"
msgstr "valor incorrecte per al paràmetre update"
-#: builtin/submodule--helper.c:2419
+#: builtin/submodule--helper.c:2565
+#, fuzzy
+msgid "suppress output for update by rebase or merge"
+msgstr "Omet la sortida d'inicialitzar un submòdul"
+
+#: builtin/submodule--helper.c:2566
+#, fuzzy
+msgid "force checkout updates"
+msgstr "força les actualitzacions"
+
+#: builtin/submodule--helper.c:2568
+#, fuzzy
+msgid "don't fetch new objects from the remote site"
+msgstr "Crea un objecte arbre des de l'índex actual"
+
+#: builtin/submodule--helper.c:2570
+#, fuzzy
+msgid "overrides update mode in case the repository is a fresh clone"
+msgstr ""
+"substitueix el mode d'actualització en cas que el repositori sigui un clon "
+"nou"
+
+#: builtin/submodule--helper.c:2571
+#, fuzzy
+msgid "depth for shallow fetch"
+msgstr "profunditat dels clons superficials"
+
+#: builtin/submodule--helper.c:2581
+#, fuzzy
+msgid "sha1"
+msgstr "sha1"
+
+#: builtin/submodule--helper.c:2582
+#, fuzzy
+msgid "SHA1 expected by superproject"
+msgstr "SHA1 esperat per superproject"
+
+#: builtin/submodule--helper.c:2584
+#, fuzzy
+msgid "subsha1"
+msgstr "subsha1"
+
+#: builtin/submodule--helper.c:2585
+#, fuzzy
+msgid "SHA1 of submodule's HEAD"
+msgstr "SHA1 del CAP del submòdul"
+
+#: builtin/submodule--helper.c:2591
+#, fuzzy
+msgid "git submodule--helper run-update-procedure [<options>] <path>"
+msgstr "git submodule--helper init [<opcions>] [<camí>]"
+
+#: builtin/submodule--helper.c:2662
#, c-format
msgid ""
"Submodule (%s) branch configured to inherit branch from superproject, but "
@@ -23349,94 +23802,207 @@
"La branca de submòdul (%s) està configurada per a heretar la branca del "
"superprojecte, però el superprojecte no és en cap branca"
-#: builtin/submodule--helper.c:2542
+#: builtin/submodule--helper.c:2780
#, c-format
msgid "could not get a repository handle for submodule '%s'"
msgstr "no s'ha pogut obtenir el gestor del repositori pel submòdul «%s»"
-#: builtin/submodule--helper.c:2575
+#: builtin/submodule--helper.c:2813
msgid "recurse into submodules"
msgstr "inclou recursivament als submòduls"
-#: builtin/submodule--helper.c:2581
+#: builtin/submodule--helper.c:2819
msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
msgstr "git submodule--helper absorb-git-dirs [<opcions>] [<camí>...]"
-#: builtin/submodule--helper.c:2637
+#: builtin/submodule--helper.c:2875
msgid "check if it is safe to write to the .gitmodules file"
msgstr "comprova si és segur escriure al fitxer .gitmodules"
-#: builtin/submodule--helper.c:2640
+#: builtin/submodule--helper.c:2878
#, fuzzy
msgid "unset the config in the .gitmodules file"
msgstr "no s'ha definit la configuració al fitxer .gitmodules"
-#: builtin/submodule--helper.c:2645
+#: builtin/submodule--helper.c:2883
#, fuzzy
msgid "git submodule--helper config <name> [<value>]"
msgstr "git submodule--helper config <name> [<value>]"
-#: builtin/submodule--helper.c:2646
+#: builtin/submodule--helper.c:2884
#, fuzzy
msgid "git submodule--helper config --unset <name>"
msgstr "git submodule--helper config --unset <name>"
-#: builtin/submodule--helper.c:2647
+#: builtin/submodule--helper.c:2885
msgid "git submodule--helper config --check-writeable"
msgstr "git submodule--helper config --check-writeable"
-#: builtin/submodule--helper.c:2666 git-submodule.sh:150
-#, fuzzy, sh-format
+#: builtin/submodule--helper.c:2904 builtin/submodule--helper.c:3120
+#: builtin/submodule--helper.c:3276
+#, fuzzy
msgid "please make sure that the .gitmodules file is in the working tree"
msgstr "Assegureu-vos que el fitxer .gitmodules és a l'arbre de treball"
-#: builtin/submodule--helper.c:2682
+#: builtin/submodule--helper.c:2920
#, fuzzy
msgid "suppress output for setting url of a submodule"
msgstr "Omet la sortida d'inicialitzar un submòdul"
-#: builtin/submodule--helper.c:2686
+#: builtin/submodule--helper.c:2924
#, fuzzy
msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
msgstr "git submodule--helper sync [--quiet] [--recursive] [<camí>]"
-#: builtin/submodule--helper.c:2719
+#: builtin/submodule--helper.c:2957
#, fuzzy
msgid "set the default tracking branch to master"
msgstr "mostra les branques amb seguiment remot"
-#: builtin/submodule--helper.c:2721
+#: builtin/submodule--helper.c:2959
#, fuzzy
msgid "set the default tracking branch"
msgstr "mostra les branques amb seguiment remot"
-#: builtin/submodule--helper.c:2725
+#: builtin/submodule--helper.c:2963
#, fuzzy
msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
msgstr "git submodule--helper sync [--quiet] [--recursive] [<camí>]"
-#: builtin/submodule--helper.c:2726
+#: builtin/submodule--helper.c:2964
#, fuzzy
msgid ""
"git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
msgstr "git submodule--helper sync [--quiet] [--recursive] [<camí>]"
-#: builtin/submodule--helper.c:2733
+#: builtin/submodule--helper.c:2971
#, fuzzy
msgid "--branch or --default required"
msgstr "cal el nom de branca"
-#: builtin/submodule--helper.c:2736
+#: builtin/submodule--helper.c:2974
#, fuzzy
msgid "--branch and --default are mutually exclusive"
msgstr "--deepen i --depth són mútuament excloents"
-#: builtin/submodule--helper.c:2793 git.c:449 git.c:724
+#: builtin/submodule--helper.c:3037
+#, fuzzy, c-format
+msgid "Adding existing repo at '%s' to the index\n"
+msgstr "S'està afegint el repositori existent a «$sm_path» a l'índex"
+
+#: builtin/submodule--helper.c:3040
+#, fuzzy, c-format
+msgid "'%s' already exists and is not a valid git repo"
+msgstr "«$sm_path» ja existeix i no és un repositori de git vàlid"
+
+#: builtin/submodule--helper.c:3053
+#, fuzzy, c-format
+msgid "A git directory for '%s' is found locally with remote(s):\n"
+msgstr ""
+"S'ha trobat un directori de git per a «$sm_name» localment amb els remots:"
+
+#: builtin/submodule--helper.c:3060
+#, fuzzy, c-format
+msgid ""
+"If you want to reuse this local git directory instead of cloning again from\n"
+" %s\n"
+"use the '--force' option. If the local git directory is not the correct repo\n"
+"or you are unsure what this means choose another name with the '--name' option."
+msgstr ""
+"Si voleu reusar aquest directori de git local en lloc de clonar de nou de\n"
+" $realrepo\n"
+"useu l'opció «--force». Si el directori de git local no és el repositori correcte\n"
+"o no esteu segur de què vol dir això, trieu un altre nom amb l'opció «--name»."
+
+#: builtin/submodule--helper.c:3072
+#, fuzzy, c-format
+msgid "Reactivating local git directory for submodule '%s'\n"
+msgstr ""
+"S'està reactivant el directori de git local per al submòdul «$sm_name»."
+
+#: builtin/submodule--helper.c:3109
+#, fuzzy, c-format
+msgid "unable to checkout submodule '%s'"
+msgstr "No s'ha pogut agafar el submòdul «$sm_path»"
+
+#: builtin/submodule--helper.c:3148
+#, fuzzy, c-format
+msgid "Failed to add submodule '%s'"
+msgstr "S'ha produït un error en afegir el submòdul «$sm_path»"
+
+#: builtin/submodule--helper.c:3152 builtin/submodule--helper.c:3157
+#: builtin/submodule--helper.c:3165
+#, fuzzy, c-format
+msgid "Failed to register submodule '%s'"
+msgstr "S'ha produït un error en registrar el submòdul «$sm_path»"
+
+#: builtin/submodule--helper.c:3221
+#, fuzzy, c-format
+msgid "'%s' already exists in the index"
+msgstr "«$sm_path» ja existeix en l'índex"
+
+#: builtin/submodule--helper.c:3224
+#, fuzzy, c-format
+msgid "'%s' already exists in the index and is not a submodule"
+msgstr "«$sm_path» ja existeix en l'índex i no és submòdul"
+
+#: builtin/submodule--helper.c:3253
+#, fuzzy
+msgid "branch of repository to add as submodule"
+msgstr "la branca o entrega a agafar"
+
+#: builtin/submodule--helper.c:3254
+#, fuzzy
+msgid "allow adding an otherwise ignored submodule path"
+msgstr "permet afegir fitxers que d'altra manera s'ignoren"
+
+#: builtin/submodule--helper.c:3256
+#, fuzzy
+msgid "print only error messages"
+msgstr "imprimeix només les referències que s'han fusionat"
+
+#: builtin/submodule--helper.c:3260
+#, fuzzy
+msgid "borrow the objects from reference repositories"
+msgstr ""
+"ignora els objectes prestats d'un emmagatzematge d'objectes alternatiu"
+
+#: builtin/submodule--helper.c:3262
+#, fuzzy
+msgid ""
+"sets the submodule’s name to the given string instead of defaulting to its "
+"path"
+msgstr ""
+"estableix el nom del submòdul a la cadena donada en lloc de per defecte al "
+"seu camí"
+
+#: builtin/submodule--helper.c:3269
+#, fuzzy
+msgid "git submodule--helper add [<options>] [--] <repository> [<path>]"
+msgstr "git submodule--helper init [<opcions>] [<camí>]"
+
+#: builtin/submodule--helper.c:3297
+msgid "Relative path can only be used from the toplevel of the working tree"
+msgstr ""
+"El camí relatiu només es pot usar des del nivell superior de l'arbre de "
+"treball"
+
+#: builtin/submodule--helper.c:3305
+#, fuzzy, c-format
+msgid "repo URL: '%s' must be absolute or begin with ./|../"
+msgstr "URL de repositori: «$repo» ha de ser absolut o començar amb ./|../"
+
+#: builtin/submodule--helper.c:3340
+#, fuzzy, c-format
+msgid "'%s' is not a valid submodule name"
+msgstr "«%s» no és un nom de remot vàlid"
+
+#: builtin/submodule--helper.c:3404 git.c:449 git.c:723
#, c-format
msgid "%s doesn't support --super-prefix"
msgstr "%s no admet --super-prefix"
-#: builtin/submodule--helper.c:2799
+#: builtin/submodule--helper.c:3410
#, c-format
msgid "'%s' is not a valid submodule--helper subcommand"
msgstr "«%s» no és una subordre vàlida de submodule--helper"
@@ -23461,11 +24027,11 @@
msgid "shorten ref output"
msgstr "escurça la sortida de referències"
-#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:505
msgid "reason"
msgstr "raó"
-#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:505
msgid "reason of the update"
msgstr "raó de l'actualització"
@@ -23473,7 +24039,7 @@
#, fuzzy
msgid ""
"git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]\n"
-"\t\t<tagname> [<head>]"
+" <tagname> [<head>]"
msgstr ""
"git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] <tagname> "
"[<head>]"
@@ -23485,13 +24051,10 @@
#: builtin/tag.c:28
#, fuzzy
msgid ""
-"git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--"
-"points-at <object>]\n"
-"\t\t[--format=<format>] [--merged <commit>] [--no-merged <commit>] "
-"[<pattern>...]"
+"git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--points-at <object>]\n"
+" [--format=<format>] [--merged <commit>] [--no-merged <commit>] [<pattern>...]"
msgstr ""
-"git tag -l [-n[<nombre>]] [--contains <comissió>] [--no-contains <comissió>] "
-"[--points-at <objecte>]\n"
+"git tag -l [-n[<nombre>]] [--contains <comissió>] [--no-contains <comissió>] [--points-at <objecte>]\n"
"\t\t[--format=<format>] [--[no-]merged [<comissió>]] [<patró>...]"
#: builtin/tag.c:30
@@ -23527,14 +24090,12 @@
"\n"
"Write a message for tag:\n"
" %s\n"
-"Lines starting with '%c' will be kept; you may remove them yourself if you "
-"want to.\n"
+"Lines starting with '%c' will be kept; you may remove them yourself if you want to.\n"
msgstr ""
"\n"
"Escriviu el missatge de l'etiqueta:\n"
" %s\n"
-"Les línies que comencin amb «%c» es retindran; podeu eliminar-les per vós "
-"mateix si voleu.\n"
+"Les línies que comencin amb «%c» es retindran; podeu eliminar-les per vós mateix si voleu.\n"
#: builtin/tag.c:241
msgid "unable to sign the tag"
@@ -23548,138 +24109,138 @@
"\n"
"\tgit tag -f %s %s^{}"
msgstr ""
-"Heu creat una etiqueta niada. L'objecte al qual fa referència la vostra nova "
-"etiqueta ja és una etiqueta. Si voleu etiquetar l'objecte que apunta per "
+"Heu creat una etiqueta niada. L'objecte al qual fa referència la vostra nova"
+" etiqueta ja és una etiqueta. Si voleu etiquetar l'objecte que apunta per "
"utilitzar l'etiqueta git -f%s%s perds^{}"
#: builtin/tag.c:275
msgid "bad object type."
msgstr "el tipus d'objecte és incorrecte."
-#: builtin/tag.c:328
+#: builtin/tag.c:326
msgid "no tag message?"
msgstr "no hi ha cap missatge d'etiqueta?"
-#: builtin/tag.c:335
+#: builtin/tag.c:333
#, c-format
msgid "The tag message has been left in %s\n"
msgstr "S'ha deixat el missatge de l'etiqueta en %s\n"
-#: builtin/tag.c:446
+#: builtin/tag.c:444
msgid "list tag names"
msgstr "llista els noms d'etiqueta"
-#: builtin/tag.c:448
+#: builtin/tag.c:446
msgid "print <n> lines of each tag message"
msgstr "imprimeix <n> línies de cada missatge d'etiqueta"
-#: builtin/tag.c:450
+#: builtin/tag.c:448
msgid "delete tags"
msgstr "suprimeix les etiquetes"
-#: builtin/tag.c:451
+#: builtin/tag.c:449
msgid "verify tags"
msgstr "verifica les etiquetes"
-#: builtin/tag.c:453
+#: builtin/tag.c:451
msgid "Tag creation options"
msgstr "Opcions de creació d'etiquetes"
-#: builtin/tag.c:455
+#: builtin/tag.c:453
msgid "annotated tag, needs a message"
msgstr "etiqueta anotada, necessita un missatge"
-#: builtin/tag.c:457
+#: builtin/tag.c:455
msgid "tag message"
msgstr "missatge d'etiqueta"
-#: builtin/tag.c:459
+#: builtin/tag.c:457
msgid "force edit of tag message"
msgstr "força l'edició del missatge de l'etiqueta"
-#: builtin/tag.c:460
+#: builtin/tag.c:458
msgid "annotated and GPG-signed tag"
msgstr "etiqueta anotada i signada per GPG"
-#: builtin/tag.c:463
+#: builtin/tag.c:461
msgid "use another key to sign the tag"
msgstr "usa una altra clau per a signar l'etiqueta"
-#: builtin/tag.c:464
+#: builtin/tag.c:462
msgid "replace the tag if exists"
msgstr "reemplaça l'etiqueta si existeix"
-#: builtin/tag.c:465 builtin/update-ref.c:505
+#: builtin/tag.c:463 builtin/update-ref.c:511
msgid "create a reflog"
msgstr "crea un registre de referències"
-#: builtin/tag.c:467
+#: builtin/tag.c:465
msgid "Tag listing options"
msgstr "Opcions de llistat d'etiquetes"
-#: builtin/tag.c:468
+#: builtin/tag.c:466
msgid "show tag list in columns"
msgstr "mostra la llista d'etiquetes en columnes"
-#: builtin/tag.c:469 builtin/tag.c:471
+#: builtin/tag.c:467 builtin/tag.c:469
msgid "print only tags that contain the commit"
msgstr "imprimeix només les etiquetes que continguin la comissió"
-#: builtin/tag.c:470 builtin/tag.c:472
+#: builtin/tag.c:468 builtin/tag.c:470
msgid "print only tags that don't contain the commit"
msgstr "imprimeix només les etiquetes que no continguin la comissió"
-#: builtin/tag.c:473
+#: builtin/tag.c:471
msgid "print only tags that are merged"
msgstr "imprimeix només les etiquetes que s'han fusionat"
-#: builtin/tag.c:474
+#: builtin/tag.c:472
msgid "print only tags that are not merged"
msgstr "imprimeix només les etiquetes que no s'han fusionat"
-#: builtin/tag.c:478
+#: builtin/tag.c:476
msgid "print only tags of the object"
msgstr "imprimeix només les etiquetes de l'objecte"
-#: builtin/tag.c:526
+#: builtin/tag.c:525
msgid "--column and -n are incompatible"
msgstr "--column i -n són incompatibles"
-#: builtin/tag.c:548
+#: builtin/tag.c:546
msgid "-n option is only allowed in list mode"
msgstr "es permet l'opció -n només amb mode llista"
-#: builtin/tag.c:550
+#: builtin/tag.c:548
msgid "--contains option is only allowed in list mode"
msgstr "es permet l'opció --contains només amb mode llista"
-#: builtin/tag.c:552
+#: builtin/tag.c:550
msgid "--no-contains option is only allowed in list mode"
msgstr "es permet l'opció --no-contains només amb mode llista"
-#: builtin/tag.c:554
+#: builtin/tag.c:552
msgid "--points-at option is only allowed in list mode"
msgstr "es permet --points-at option només amb mode llista"
-#: builtin/tag.c:556
+#: builtin/tag.c:554
msgid "--merged and --no-merged options are only allowed in list mode"
msgstr "es permeten les opcions --merged i --no-merged només amb mode llista"
-#: builtin/tag.c:567
+#: builtin/tag.c:568
msgid "only one -F or -m option is allowed."
msgstr "només es permet una opció -F o -m."
-#: builtin/tag.c:592
+#: builtin/tag.c:593
#, c-format
msgid "'%s' is not a valid tag name."
msgstr "«%s» no és un nom d'etiqueta vàlid."
-#: builtin/tag.c:597
+#: builtin/tag.c:598
#, c-format
msgid "tag '%s' already exists"
msgstr "l'etiqueta «%s» ja existeix"
-#: builtin/tag.c:628
+#: builtin/tag.c:629
#, c-format
msgid "Updated tag '%s' (was %s)\n"
msgstr "Etiqueta «%s» actualitzada (era %s)\n"
@@ -23693,226 +24254,222 @@
msgid "failed to create directory %s"
msgstr "s'ha produït un error en crear el directori %s"
-#: builtin/update-index.c:100
-#, c-format
-msgid "failed to create file %s"
-msgstr "s'ha produït un error en crear el fitxer %s"
-
-#: builtin/update-index.c:108
+#: builtin/update-index.c:106
#, c-format
msgid "failed to delete file %s"
msgstr "s'ha produït un error en suprimir el fitxer %s"
-#: builtin/update-index.c:115 builtin/update-index.c:221
+#: builtin/update-index.c:113 builtin/update-index.c:219
#, c-format
msgid "failed to delete directory %s"
msgstr "s'ha produït un error en suprimir el directori %s"
-#: builtin/update-index.c:140
+#: builtin/update-index.c:138
#, c-format
msgid "Testing mtime in '%s' "
msgstr "S'està provant mtime en «%s» "
-#: builtin/update-index.c:154
+#: builtin/update-index.c:152
msgid "directory stat info does not change after adding a new file"
msgstr ""
"la informació de stat de directori no canvia després d'afegir un fitxer nou"
-#: builtin/update-index.c:167
+#: builtin/update-index.c:165
msgid "directory stat info does not change after adding a new directory"
msgstr ""
"la informació de stat de directori no canvia després d'afegir un directori "
"nou"
-#: builtin/update-index.c:180
+#: builtin/update-index.c:178
msgid "directory stat info changes after updating a file"
msgstr ""
"la informació de stat de directori canvia després d'actualitzar un fitxer"
-#: builtin/update-index.c:191
+#: builtin/update-index.c:189
msgid "directory stat info changes after adding a file inside subdirectory"
msgstr ""
"la informació de stat de directori canvia després d'afegir un fitxer dins "
"d'un subdirectori"
-#: builtin/update-index.c:202
+#: builtin/update-index.c:200
msgid "directory stat info does not change after deleting a file"
msgstr ""
"la informació de stat de directori no canvia després de suprimir un fitxer"
-#: builtin/update-index.c:215
+#: builtin/update-index.c:213
msgid "directory stat info does not change after deleting a directory"
msgstr ""
-"la informació de stat de directori no canvia després de suprimir un directori"
+"la informació de stat de directori no canvia després de suprimir un "
+"directori"
-#: builtin/update-index.c:222
+#: builtin/update-index.c:220
msgid " OK"
msgstr " D'acord"
-#: builtin/update-index.c:591
+#: builtin/update-index.c:589
msgid "git update-index [<options>] [--] [<file>...]"
msgstr "git update-index [<opcions>] [--] [<fitxer>...]"
-#: builtin/update-index.c:976
+#: builtin/update-index.c:974
msgid "continue refresh even when index needs update"
msgstr ""
"continua l'actualització encara que l'índex necessiti una actualització"
-#: builtin/update-index.c:979
+#: builtin/update-index.c:977
msgid "refresh: ignore submodules"
msgstr "actualitza: ignora els submòduls"
-#: builtin/update-index.c:982
+#: builtin/update-index.c:980
msgid "do not ignore new files"
msgstr "no ignoris els fitxers nous"
-#: builtin/update-index.c:984
+#: builtin/update-index.c:982
msgid "let files replace directories and vice-versa"
msgstr "deixa que els fitxers reemplacin els directoris i viceversa"
-#: builtin/update-index.c:986
+#: builtin/update-index.c:984
msgid "notice files missing from worktree"
msgstr "tingues en compte els fitxers absents de l'arbre de treball"
-#: builtin/update-index.c:988
+#: builtin/update-index.c:986
msgid "refresh even if index contains unmerged entries"
msgstr "actualitza encara que l'índex contingui entrades no fusionades"
-#: builtin/update-index.c:991
+#: builtin/update-index.c:989
msgid "refresh stat information"
msgstr "actualitza la informació d'estadístiques"
-#: builtin/update-index.c:995
+#: builtin/update-index.c:993
msgid "like --refresh, but ignore assume-unchanged setting"
msgstr "com --refresh, però ignora el paràmetre assume-unchanged"
-#: builtin/update-index.c:999
+#: builtin/update-index.c:997
msgid "<mode>,<object>,<path>"
msgstr "<mode>,<objecte>,<camí>"
-#: builtin/update-index.c:1000
+#: builtin/update-index.c:998
msgid "add the specified entry to the index"
msgstr "afegeix l'entrada especificada a l'índex"
-#: builtin/update-index.c:1010
+#: builtin/update-index.c:1008
msgid "mark files as \"not changing\""
msgstr "marca els fitxers com a «no canviant»"
-#: builtin/update-index.c:1013
+#: builtin/update-index.c:1011
msgid "clear assumed-unchanged bit"
msgstr "esborra el bit assumed-unchanged"
-#: builtin/update-index.c:1016
+#: builtin/update-index.c:1014
msgid "mark files as \"index-only\""
msgstr "marca els fitxers com a «només índex»"
-#: builtin/update-index.c:1019
+#: builtin/update-index.c:1017
msgid "clear skip-worktree bit"
msgstr "esborra el bit skip-worktree"
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1020
#, fuzzy
msgid "do not touch index-only entries"
msgstr "no toquis entrades de només índex"
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1022
msgid "add to index only; do not add content to object database"
msgstr ""
"només afegeix a l'índex; no afegeixis el contingut a la base de dades "
"d'objectes"
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1024
msgid "remove named paths even if present in worktree"
msgstr ""
"elimina els camins anomenats encara que estiguin presents en l'arbre de "
"treball"
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1026
msgid "with --stdin: input lines are terminated by null bytes"
msgstr "amb --stdin: les línies d'entrada acaben amb octets nuls"
-#: builtin/update-index.c:1030
+#: builtin/update-index.c:1028
msgid "read list of paths to be updated from standard input"
msgstr "llegeix la llista de camins a actualitzar des de l'entrada estàndard"
-#: builtin/update-index.c:1034
+#: builtin/update-index.c:1032
msgid "add entries from standard input to the index"
msgstr "afegeix les entrades de l'entrada estàndard a l'índex"
-#: builtin/update-index.c:1038
+#: builtin/update-index.c:1036
msgid "repopulate stages #2 and #3 for the listed paths"
msgstr "reemplena les «stage» #2 i #3 per als camins llistats"
-#: builtin/update-index.c:1042
+#: builtin/update-index.c:1040
msgid "only update entries that differ from HEAD"
msgstr "només actualitza les entrades que difereixin de HEAD"
-#: builtin/update-index.c:1046
+#: builtin/update-index.c:1044
msgid "ignore files missing from worktree"
msgstr "ignora els fitxers absents de l'arbre de treball"
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1047
msgid "report actions to standard output"
msgstr "informa de les accions en la sortida estàndard"
-#: builtin/update-index.c:1051
+#: builtin/update-index.c:1049
msgid "(for porcelains) forget saved unresolved conflicts"
msgstr "(per a porcellanes) oblida't dels conflictes no resolts ni desats"
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1053
msgid "write index in this format"
msgstr "escriu l'índex en aquest format"
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1055
msgid "enable or disable split index"
msgstr "habilita o inhabilita l'índex dividit"
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1057
msgid "enable/disable untracked cache"
msgstr "habilita/inhabilita la memòria cau no seguida"
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1059
msgid "test if the filesystem supports untracked cache"
msgstr "prova si el sistema de fitxers admet la memòria cau no seguida"
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1061
msgid "enable untracked cache without testing the filesystem"
msgstr "habilita la memòria cau no seguida sense provar el sistema de fitxers"
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1063
#, fuzzy
msgid "write out the index even if is not flagged as changed"
msgstr "escriu l'índex encara que no estigui marcat com a canviat"
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1065
msgid "enable or disable file system monitor"
msgstr "habilita o inhabilita el monitor del sistema de fitxers"
-#: builtin/update-index.c:1069
+#: builtin/update-index.c:1067
msgid "mark files as fsmonitor valid"
msgstr "marca els fitxers com a vàlids pel fsmonitor"
-#: builtin/update-index.c:1072
+#: builtin/update-index.c:1070
msgid "clear fsmonitor valid bit"
msgstr "esborra el bit de validesa del fsmonitor"
-#: builtin/update-index.c:1175
+#: builtin/update-index.c:1173
msgid ""
"core.splitIndex is set to false; remove or change it, if you really want to "
"enable split index"
msgstr ""
-"core.splitIndex està establert a fals; elimineu-lo o canviar-lo, si realment "
-"voleu habilitar l'índex dividit"
+"core.splitIndex està establert a fals; elimineu-lo o canviar-lo, si realment"
+" voleu habilitar l'índex dividit"
-#: builtin/update-index.c:1184
+#: 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 està establert a cert; elimineu-lo o canvieu-lo, si realment "
-"voleu inhabilitar l'índex dividit"
+"core.splitIndex està establert a cert; elimineu-lo o canvieu-lo, si realment"
+" voleu inhabilitar l'índex dividit"
-#: builtin/update-index.c:1196
+#: 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"
@@ -23920,41 +24477,41 @@
"core.untrackedCache està establert a cert; elimineu-lo o canvieu-lo, si "
"realment voleu inhabilitar el cau no seguit"
-#: builtin/update-index.c:1200
+#: builtin/update-index.c:1198
msgid "Untracked cache disabled"
msgstr "La memòria cau no seguida està inhabilitada"
-#: builtin/update-index.c:1208
+#: builtin/update-index.c:1206
msgid ""
-"core.untrackedCache is set to false; remove or change it, if you really want "
-"to enable the untracked cache"
+"core.untrackedCache is set to false; remove or change it, if you really want"
+" to enable the untracked cache"
msgstr ""
"core.untrackedCache està establert a fals; elimineu-lo o canviar-lo, si "
"realment voleu habilitar el cau no seguit"
-#: builtin/update-index.c:1212
+#: builtin/update-index.c:1210
#, c-format
msgid "Untracked cache enabled for '%s'"
msgstr "La memòria cau no seguida està habilitada per a «%s»"
-#: builtin/update-index.c:1220
+#: builtin/update-index.c:1218
msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
msgstr ""
"core.fsmonitor està establert a fals; establiu-lo a cert si realment voleu "
"habilitar fsmonitor"
-#: builtin/update-index.c:1224
+#: builtin/update-index.c:1222
msgid "fsmonitor enabled"
msgstr "fsmonitor habilitat"
-#: builtin/update-index.c:1227
+#: builtin/update-index.c:1225
msgid ""
"core.fsmonitor is set; remove it if you really want to disable fsmonitor"
msgstr ""
"core.fsmonitor està establert a cert; elimineu-lo si realment voleu "
"inhabilitar fsmonitor"
-#: builtin/update-index.c:1231
+#: builtin/update-index.c:1229
msgid "fsmonitor disabled"
msgstr "fsmonitor inhabilitat"
@@ -23965,25 +24522,26 @@
#: builtin/update-ref.c:11
msgid "git update-ref [<options>] <refname> <new-val> [<old-val>]"
msgstr ""
-"git update-ref [<opcions>] <nom-de-referència> <valor-nou> [<valor-antic>]"
+"git update-ref [<opcions>] <nom-de-referència> <valor-nou> [<valor-"
+"antic>]"
#: builtin/update-ref.c:12
msgid "git update-ref [<options>] --stdin [-z]"
msgstr "git update-ref [<opcions>] --stdin [-z]"
-#: builtin/update-ref.c:500
+#: builtin/update-ref.c:506
msgid "delete the reference"
msgstr "suprimeix la referència"
-#: builtin/update-ref.c:502
+#: builtin/update-ref.c:508
msgid "update <refname> not the one it points to"
msgstr "actualitza <nom de referència>, no la que apunti"
-#: builtin/update-ref.c:503
+#: builtin/update-ref.c:509
msgid "stdin has NUL-terminated arguments"
msgstr "stdin té arguments acabats amb NUL"
-#: builtin/update-ref.c:504
+#: builtin/update-ref.c:510
msgid "read updates from stdin"
msgstr "llegeix les actualitzacions des de stdin"
@@ -23999,20 +24557,21 @@
msgid "git upload-pack [<options>] <dir>"
msgstr "git upload-pack [<opcions>] <directori>"
-#: builtin/upload-pack.c:23 t/helper/test-serve-v2.c:17
+#: builtin/upload-pack.c:24 t/helper/test-serve-v2.c:17
msgid "quit after a single request/response exchange"
msgstr "surt després d'un sol intercanvi de sol·licitud/resposta"
-#: builtin/upload-pack.c:25
-msgid "exit immediately after initial ref advertisement"
-msgstr "surt immediatament després de l'anunci inicial de referència"
+#: builtin/upload-pack.c:26
+#, fuzzy
+msgid "serve up the info/refs for git-http-backend"
+msgstr "serveix la informació/refs per a git-http-backend"
-#: builtin/upload-pack.c:27
+#: builtin/upload-pack.c:29
msgid "do not try <directory>/.git/ if <directory> is no Git directory"
msgstr ""
"no intentis <directori>/.git/ si <directori> no és cap directori del Git"
-#: builtin/upload-pack.c:29
+#: builtin/upload-pack.c:31
msgid "interrupt transfer after <n> seconds of inactivity"
msgstr "interromp la transferència després de <n> segons d'inactivitat"
@@ -24048,72 +24607,67 @@
msgid "print tag contents"
msgstr "imprimeix els continguts de l'etiqueta"
-#: builtin/worktree.c:18
+#: builtin/worktree.c:19
msgid "git worktree add [<options>] <path> [<commit-ish>]"
msgstr "git worktree add [<opcions>] <camí> [<commit-ish>]"
-#: builtin/worktree.c:19
+#: builtin/worktree.c:20
msgid "git worktree list [<options>]"
msgstr "git worktree list [<opcions>]"
-#: builtin/worktree.c:20
+#: builtin/worktree.c:21
msgid "git worktree lock [<options>] <path>"
msgstr "git worktree lock [<opcions>] <camí>"
-#: builtin/worktree.c:21
+#: builtin/worktree.c:22
msgid "git worktree move <worktree> <new-path>"
msgstr "git worktree move <arbre de treball> <camí-nou>"
-#: builtin/worktree.c:22
+#: builtin/worktree.c:23
msgid "git worktree prune [<options>]"
msgstr "git worktree prune [<opcions>]"
-#: builtin/worktree.c:23
+#: builtin/worktree.c:24
msgid "git worktree remove [<options>] <worktree>"
msgstr "git worktree remove [<opcions>] <arbre de treball>"
-#: builtin/worktree.c:24
+#: builtin/worktree.c:25
msgid "git worktree unlock <path>"
msgstr "git worktree unlock <camí>"
-#: builtin/worktree.c:61 builtin/worktree.c:935
-#, c-format
-msgid "failed to delete '%s'"
-msgstr "s'ha produït un error en suprimir «%s»"
-
-#: builtin/worktree.c:74
+#: builtin/worktree.c:75
#, fuzzy, c-format
msgid "Removing %s/%s: %s"
msgstr "S'està eliminant %s"
-#: builtin/worktree.c:149
+#: builtin/worktree.c:148
msgid "report pruned working trees"
msgstr "informa dels arbres de treball podats"
-#: builtin/worktree.c:151
+#: builtin/worktree.c:150
msgid "expire working trees older than <time>"
msgstr "fes caducar els arbres de treball més vells que <hora>"
-#: builtin/worktree.c:221
+#: builtin/worktree.c:220
#, c-format
msgid "'%s' already exists"
msgstr "«%s» ja existeix"
-#: builtin/worktree.c:230
+#: builtin/worktree.c:229
#, fuzzy, c-format
msgid "unusable worktree destination '%s'"
msgstr "no s'ha pogut fer «stat» a «%s»"
-#: builtin/worktree.c:235
+#: builtin/worktree.c:234
#, fuzzy, c-format
msgid ""
"'%s' is a missing but locked worktree;\n"
"use '%s -f -f' to override, or 'unlock' and 'prune' or 'remove' to clear"
msgstr ""
-"«%s» és un arbre de treball que manca però bloquejat; useu «add -f -f» per a "
-"sobreescriure o «unlock» i «prune» o «remove» per a netejar"
+"«%s» és un arbre de treball que manca però bloquejat; useu «add -f -f» per a"
+" sobreescriure o «unlock» i «prune» o «remove» per a netejar"
-#: builtin/worktree.c:237
+#: builtin/worktree.c:236
#, fuzzy, c-format
msgid ""
"'%s' is a missing but already registered worktree;\n"
@@ -24122,144 +24676,160 @@
"'%s' és un arbre de treball que manca però ja està registrat; useu 'add -f' "
"per sobreescriure o 'prune' o 'remove' per netejar"
-#: builtin/worktree.c:288
+#: builtin/worktree.c:287
#, c-format
msgid "could not create directory of '%s'"
msgstr "no s'ha pogut crear directori de «%s»"
-#: builtin/worktree.c:422 builtin/worktree.c:428
+#: builtin/worktree.c:309
+#, fuzzy
+msgid "initializing"
+msgstr "inicialitzant"
+
+#: builtin/worktree.c:421 builtin/worktree.c:427
#, c-format
msgid "Preparing worktree (new branch '%s')"
msgstr "S'està preparant l'arbre de treball (branca nova «%s»)"
-#: builtin/worktree.c:424
+#: builtin/worktree.c:423
#, fuzzy, c-format
msgid "Preparing worktree (resetting branch '%s'; was at %s)"
msgstr ""
-"Preparant l'arbre de treball (la branca de reestructuració \"%s\"; estava en "
-"percentatges)"
+"Preparant l'arbre de treball (la branca de reestructuració \"%s\"; estava en"
+" percentatges)"
-#: builtin/worktree.c:433
+#: builtin/worktree.c:432
#, c-format
msgid "Preparing worktree (checking out '%s')"
msgstr "S'està preparant l'arbre de treball (s'està agafant «%s»)"
-#: builtin/worktree.c:439
+#: builtin/worktree.c:438
#, c-format
msgid "Preparing worktree (detached HEAD %s)"
msgstr "S'està preparant l'arbre de treball (HEAD %s separat)"
-#: builtin/worktree.c:482
+#: builtin/worktree.c:483
msgid "checkout <branch> even if already checked out in other worktree"
msgstr "agafa <branca> encara que sigui agafada en altre arbre de treball"
-#: builtin/worktree.c:485
+#: builtin/worktree.c:486
msgid "create a new branch"
msgstr "crea una branca nova"
-#: builtin/worktree.c:487
+#: builtin/worktree.c:488
msgid "create or reset a branch"
msgstr "crea o restableix una branca"
-#: builtin/worktree.c:489
+#: builtin/worktree.c:490
msgid "populate the new working tree"
msgstr "emplena l'arbre de treball nou"
-#: builtin/worktree.c:490
+#: builtin/worktree.c:491
msgid "keep the new working tree locked"
msgstr "mantén l'arbre de treball nou bloquejat"
-#: builtin/worktree.c:493
+#: builtin/worktree.c:493 builtin/worktree.c:730
+msgid "reason for locking"
+msgstr "raó per bloquejar"
+
+#: builtin/worktree.c:496
msgid "set up tracking mode (see git-branch(1))"
msgstr "configura el mode de seguiment (vegeu git-branch(1))"
-#: builtin/worktree.c:496
+#: builtin/worktree.c:499
msgid "try to match the new branch name with a remote-tracking branch"
msgstr ""
-"prova de fer coincidir el nom de la branca nova amb una branca amb seguiment "
-"remot"
+"prova de fer coincidir el nom de la branca nova amb una branca amb seguiment"
+" remot"
-#: builtin/worktree.c:504
+#: builtin/worktree.c:507
msgid "-b, -B, and --detach are mutually exclusive"
msgstr "-b, -B i --detach són mútuament excloents"
-#: builtin/worktree.c:565
+#: builtin/worktree.c:509
+#, fuzzy
+msgid "--reason requires --lock"
+msgstr "raó per bloquejar"
+
+#: builtin/worktree.c:513
+#, fuzzy
+msgid "added with --lock"
+msgstr "afegit amb --lock"
+
+#: builtin/worktree.c:575
msgid "--[no-]track can only be used if a new branch is created"
msgstr "--[no-]track només es pot usar si es crea una branca nova"
-#: builtin/worktree.c:682
+#: builtin/worktree.c:692
+#, fuzzy
msgid "show extended annotations and reasons, if available"
-msgstr ""
+msgstr "mostra les anotacions i raons esteses, si està disponible"
-#: builtin/worktree.c:684
+#: builtin/worktree.c:694
#, fuzzy
msgid "add 'prunable' annotation to worktrees older than <time>"
msgstr "fes caducar els arbres de treball més vells que <hora>"
-#: builtin/worktree.c:693
+#: builtin/worktree.c:703
#, fuzzy
msgid "--verbose and --porcelain are mutually exclusive"
msgstr "-p i --overlay són mútuament excloents"
-#: builtin/worktree.c:720
-msgid "reason for locking"
-msgstr "raó per bloquejar"
-
-#: builtin/worktree.c:732 builtin/worktree.c:765 builtin/worktree.c:839
-#: builtin/worktree.c:963
+#: builtin/worktree.c:742 builtin/worktree.c:775 builtin/worktree.c:849
+#: builtin/worktree.c:973
#, c-format
msgid "'%s' is not a working tree"
msgstr "«%s» no és un arbre de treball"
-#: builtin/worktree.c:734 builtin/worktree.c:767
+#: builtin/worktree.c:744 builtin/worktree.c:777
msgid "The main working tree cannot be locked or unlocked"
msgstr "No es pot bloquejar ni desbloquejar l'arbre de treball principal"
-#: builtin/worktree.c:739
+#: builtin/worktree.c:749
#, c-format
msgid "'%s' is already locked, reason: %s"
msgstr "«%s» ja està bloquejat, raó: «%s»"
-#: builtin/worktree.c:741
+#: builtin/worktree.c:751
#, c-format
msgid "'%s' is already locked"
msgstr "«%s» ja està bloquejat"
-#: builtin/worktree.c:769
+#: builtin/worktree.c:779
#, c-format
msgid "'%s' is not locked"
msgstr "«%s» no està bloquejat"
-#: builtin/worktree.c:810
+#: builtin/worktree.c:820
msgid "working trees containing submodules cannot be moved or removed"
msgstr ""
"els arbres de treball que contenen submòduls no es poden moure ni eliminar"
-#: builtin/worktree.c:818
+#: builtin/worktree.c:828
msgid "force move even if worktree is dirty or locked"
msgstr ""
"força el moviment encara que l'arbre de treball estigui brut o bloquejat"
-#: builtin/worktree.c:841 builtin/worktree.c:965
+#: builtin/worktree.c:851 builtin/worktree.c:975
#, c-format
msgid "'%s' is a main working tree"
msgstr "«%s» és un arbre de treball principal"
-#: builtin/worktree.c:846
+#: builtin/worktree.c:856
#, c-format
msgid "could not figure out destination name from '%s'"
msgstr "no s'ha pogut deduir el nom de destí des de «%s»"
-#: builtin/worktree.c:859
+#: builtin/worktree.c:869
#, fuzzy, c-format
msgid ""
"cannot move a locked working tree, lock reason: %s\n"
"use 'move -f -f' to override or unlock first"
msgstr ""
-"no es pot moure un bloqueig de l'arbre de treball bloquejat el raon per cent "
-"utilitza «move -f -f» per substituir o desbloquejar primer"
+"no es pot moure un bloqueig de l'arbre de treball bloquejat el raon per cent"
+" utilitza «move -f -f» per substituir o desbloquejar primer"
-#: builtin/worktree.c:861
+#: builtin/worktree.c:871
#, fuzzy
msgid ""
"cannot move a locked working tree;\n"
@@ -24268,38 +24838,38 @@
"no es pot moure un arbre de treball bloquejat; useu primer «move -f -f» per "
"sobreescriure o desbloquejar"
-#: builtin/worktree.c:864
+#: builtin/worktree.c:874
#, c-format
msgid "validation failed, cannot move working tree: %s"
msgstr "la validació ha fallat, no es pot moure l'arbre de treball: %s"
-#: builtin/worktree.c:869
+#: builtin/worktree.c:879
#, c-format
msgid "failed to move '%s' to '%s'"
msgstr "s'ha produït un error en moure «%s» a «%s»"
-#: builtin/worktree.c:915
+#: builtin/worktree.c:925
#, c-format
msgid "failed to run 'git status' on '%s'"
msgstr "no s'ha pogut executar «git status» a «%s»"
-#: builtin/worktree.c:919
+#: builtin/worktree.c:929
#, fuzzy, c-format
msgid "'%s' contains modified or untracked files, use --force to delete it"
msgstr ""
"'%s' conté fitxers modificats o no seguits useu --force per suprimir-los"
-#: builtin/worktree.c:924
+#: builtin/worktree.c:934
#, c-format
msgid "failed to run 'git status' on '%s', code %d"
msgstr "no s'ha pogut executar «git status» a «%s», codi %d"
-#: builtin/worktree.c:947
+#: builtin/worktree.c:957
msgid "force removal even if worktree is dirty or locked"
msgstr ""
"força l'eliminació encara que l'arbre de treball estigui brut o bloquejat"
-#: builtin/worktree.c:970
+#: builtin/worktree.c:980
#, fuzzy, c-format
msgid ""
"cannot remove a locked working tree, lock reason: %s\n"
@@ -24308,28 +24878,28 @@
"no s'ha pogut eliminar un bloqueig de l'arbre de treball bloquejat perquè "
"els raonadors utilitzen «remove -f -f» per substituir o desbloquejar primer"
-#: builtin/worktree.c:972
+#: builtin/worktree.c:982
#, fuzzy
msgid ""
"cannot remove a locked working tree;\n"
"use 'remove -f -f' to override or unlock first"
msgstr ""
-"no es pot eliminar un arbre de treball bloquejat; useu primer «remove -f -f» "
-"per sobreescriure o desbloquejar"
+"no es pot eliminar un arbre de treball bloquejat; useu primer «remove -f -f»"
+" per sobreescriure o desbloquejar"
-#: builtin/worktree.c:975
+#: builtin/worktree.c:985
#, fuzzy, c-format
msgid "validation failed, cannot remove working tree: %s"
msgstr ""
"la validació ha fallat no es poden eliminar els percentatges dels arbres de "
"treball"
-#: builtin/worktree.c:999
+#: builtin/worktree.c:1009
#, fuzzy, c-format
msgid "repair: %s: %s"
msgstr "%s no vàlid: «%s»"
-#: builtin/worktree.c:1002
+#: builtin/worktree.c:1012
#, fuzzy, c-format
msgid "error: %s: %s"
msgstr "error en %s %s: %s"
@@ -24355,8 +24925,7 @@
msgid ""
"git [--version] [--help] [-C <path>] [-c <name>=<value>]\n"
" [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]\n"
-" [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--"
-"bare]\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>]"
@@ -24428,8 +24997,8 @@
"alias '%s' changes environment variables.\n"
"You can use '!git' in the alias to do this"
msgstr ""
-"àlies «%s» canvia variables d'entorn. Podeu utilitzar «!git» a l'àlies per a "
-"fer-ho"
+"àlies «%s» canvia variables d'entorn. Podeu utilitzar «!git» a l'àlies per a"
+" fer-ho"
#: git.c:391
#, fuzzy, c-format
@@ -24453,17 +25022,17 @@
msgid "close failed on standard output"
msgstr "ha fallat el tancament en la sortida estàndard"
-#: git.c:833
+#: git.c:832
#, fuzzy, c-format
msgid "alias loop detected: expansion of '%s' does not terminate:%s"
msgstr "bucle d'àlies detectat expansió de «%s» no acaba%"
-#: git.c:883
+#: git.c:882
#, fuzzy, c-format
msgid "cannot handle %s as a builtin"
msgstr "no es poden gestionar els percentatges com a integrat"
-#: git.c:896
+#: git.c:895
#, c-format
msgid ""
"usage: %s\n"
@@ -24472,12 +25041,12 @@
"ús: %s\n"
"\n"
-#: git.c:916
+#: git.c:915
#, fuzzy, c-format
msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
msgstr "ha fallat l'expansió de l'àlies '%s'; '%s' no és una ordre git"
-#: git.c:928
+#: git.c:927
#, c-format
msgid "failed to run command '%s': %s\n"
msgstr "s'ha produït un error en executar l'ordre «%s»: %s\n"
@@ -24529,156 +25098,132 @@
msgid "exit immediately after advertising capabilities"
msgstr "surt immediatament després d'anunciar les funcionalitats"
-#: t/helper/test-simple-ipc.c:262
-#, c-format
-msgid "socket/pipe already in use: '%s'"
-msgstr ""
-
-#: t/helper/test-simple-ipc.c:264
-#, fuzzy, c-format
-msgid "could not start server on: '%s'"
-msgstr "no s'ha pogut fer «stat» sobre el fitxer «%s»"
-
-#: t/helper/test-simple-ipc.c:295 t/helper/test-simple-ipc.c:331
-msgid "could not spawn daemon in the background"
-msgstr ""
-
-#: t/helper/test-simple-ipc.c:356
+#: t/helper/test-simple-ipc.c:581
#, fuzzy
-msgid "waitpid failed"
-msgstr "«setsid» ha fallat"
-
-#: t/helper/test-simple-ipc.c:376
-msgid "daemon not online yet"
-msgstr ""
-
-#: t/helper/test-simple-ipc.c:406
-#, fuzzy
-msgid "daemon failed to start"
-msgstr "s'ha produït un error en fer stat a %s"
-
-#: t/helper/test-simple-ipc.c:410
-msgid "waitpid is confused"
-msgstr ""
-
-#: t/helper/test-simple-ipc.c:541
-msgid "daemon has not shutdown yet"
-msgstr ""
-
-#: t/helper/test-simple-ipc.c:682
msgid "test-helper simple-ipc is-active [<name>] [<options>]"
-msgstr ""
+msgstr "test-helper simple-ipc is-active [<name>] [<options>]"
-#: t/helper/test-simple-ipc.c:683
+#: t/helper/test-simple-ipc.c:582
+#, fuzzy
msgid "test-helper simple-ipc run-daemon [<name>] [<threads>]"
-msgstr ""
+msgstr "test-helper simple-ipc run-daemon [<name>] [<threads>]"
-#: t/helper/test-simple-ipc.c:684
+#: t/helper/test-simple-ipc.c:583
+#, fuzzy
msgid "test-helper simple-ipc start-daemon [<name>] [<threads>] [<max-wait>]"
-msgstr ""
+msgstr "test-helper simple-ipc start-daemon [<name>] [<threads>] [<max-wait>]"
-#: t/helper/test-simple-ipc.c:685
+#: t/helper/test-simple-ipc.c:584
+#, fuzzy
msgid "test-helper simple-ipc stop-daemon [<name>] [<max-wait>]"
-msgstr ""
+msgstr "test-helper simple-ipc stop-daemon [<name>] [<max-wait>]"
-#: t/helper/test-simple-ipc.c:686
+#: t/helper/test-simple-ipc.c:585
+#, fuzzy
msgid "test-helper simple-ipc send [<name>] [<token>]"
-msgstr ""
+msgstr "Test-helper simple-ipc envia [<name>] [<token>]"
-#: t/helper/test-simple-ipc.c:687
+#: t/helper/test-simple-ipc.c:586
+#, fuzzy
msgid "test-helper simple-ipc sendbytes [<name>] [<bytecount>] [<byte>]"
-msgstr ""
+msgstr "Test-helper simple-ipc sendbytes [<name>] [<bytecount>] [<byte>]"
-#: t/helper/test-simple-ipc.c:688
+#: t/helper/test-simple-ipc.c:587
+#, fuzzy
msgid ""
"test-helper simple-ipc multiple [<name>] [<threads>] [<bytecount>] "
"[<batchsize>]"
msgstr ""
+"test-helper simple-ipc múltiple [<name>] [<threads>] [<bytecount>] "
+"[<batchsize>]"
-#: t/helper/test-simple-ipc.c:696
+#: t/helper/test-simple-ipc.c:595
+#, fuzzy
msgid "name or pathname of unix domain socket"
-msgstr ""
+msgstr "nom o nom de camí del sòcol de domini unix"
-#: t/helper/test-simple-ipc.c:698
+#: t/helper/test-simple-ipc.c:597
+#, fuzzy
msgid "named-pipe name"
-msgstr ""
+msgstr "nom de pila amb nom"
-#: t/helper/test-simple-ipc.c:700
+#: t/helper/test-simple-ipc.c:599
+#, fuzzy
msgid "number of threads in server thread pool"
-msgstr ""
+msgstr "nombre de fils en la reserva de fils del servidor"
-#: t/helper/test-simple-ipc.c:701
+#: t/helper/test-simple-ipc.c:600
+#, fuzzy
msgid "seconds to wait for daemon to start or stop"
-msgstr ""
+msgstr "segons a esperar que el dimoni comenci o atura"
-#: t/helper/test-simple-ipc.c:703
+#: t/helper/test-simple-ipc.c:602
#, fuzzy
msgid "number of bytes"
msgstr "nombre incorrecte d'arguments"
-#: t/helper/test-simple-ipc.c:704
+#: t/helper/test-simple-ipc.c:603
#, fuzzy
msgid "number of requests per thread"
msgstr "no s'ha pogut crear fil: %s"
-#: t/helper/test-simple-ipc.c:706
+#: t/helper/test-simple-ipc.c:605
#, fuzzy
msgid "byte"
msgstr "octets"
-#: t/helper/test-simple-ipc.c:706
+#: t/helper/test-simple-ipc.c:605
+#, fuzzy
msgid "ballast character"
-msgstr ""
+msgstr "caràcter de llast"
-#: t/helper/test-simple-ipc.c:707
+#: t/helper/test-simple-ipc.c:606
+#, fuzzy
msgid "token"
-msgstr ""
+msgstr "testimoni"
-#: t/helper/test-simple-ipc.c:707
+#: t/helper/test-simple-ipc.c:606
+#, fuzzy
msgid "command token to send to the server"
-msgstr ""
+msgstr "testimoni d'ordres per enviar al servidor"
-#: http.c:399
+#: http.c:350
#, c-format
msgid "negative value for http.postbuffer; defaulting to %d"
msgstr "valor negatiu per http.postbuffer; utilitzant el valor %d"
-#: http.c:420
+#: http.c:371
msgid "Delegation control is not supported with cURL < 7.22.0"
msgstr "No s'admet el control de delegació amb el cURL < 7.22.0"
-#: http.c:429
-msgid "Public key pinning not supported with cURL < 7.44.0"
+#: http.c:380
+#, fuzzy
+msgid "Public key pinning not supported with cURL < 7.39.0"
msgstr "No s'admet la fixació de clau pública amb cURL < 7.44.0"
-#: http.c:910
+#: http.c:812
#, fuzzy
msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
msgstr "CURLSSLOPTNOREVOKE no està suportat amb cURL < 7.44.0"
-#: http.c:989
-#, fuzzy
-msgid "Protocol restrictions not supported with cURL < 7.19.4"
-msgstr "Restriccions de protocol no compatibles amb cURL < 7.19.4"
-
-#: http.c:1132
+#: http.c:1016
#, fuzzy, c-format
msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
msgstr "El dorsal SSL «%s» no està implementat. Els dorsals SSL compatibles"
-#: http.c:1139
+#: http.c:1023
#, fuzzy, c-format
msgid "Could not set SSL backend to '%s': cURL was built without SSL backends"
msgstr ""
"No s'ha pogut establir el dorsal SSL a «%s» s'ha construït cURL sense "
"dorsals SSL"
-#: http.c:1143
+#: http.c:1027
#, fuzzy, c-format
msgid "Could not set SSL backend to '%s': already set"
msgstr "No s'ha pogut establir el dorsal SSL a «%s» ja establert"
-#: http.c:2035
+#: http.c:1876
#, c-format
msgid ""
"unable to update url base from redirection:\n"
@@ -24694,145 +25239,149 @@
msgid "invalid quoting in push-option value: '%s'"
msgstr "cita no vàlida en el valor de l'opció d'empenta «%s»"
-#: remote-curl.c:307
+#: remote-curl.c:304
#, fuzzy, c-format
msgid "%sinfo/refs not valid: is this a git repository?"
msgstr "oversinfo/refs no és vàlid és un repositori git?"
-#: remote-curl.c:408
+#: remote-curl.c:405
#, fuzzy
msgid "invalid server response; expected service, got flush packet"
msgstr ""
"la resposta del servidor no és vàlida; el servei esperat ha rebut el paquet "
"de neteja"
-#: remote-curl.c:439
+#: remote-curl.c:436
#, fuzzy, c-format
msgid "invalid server response; got '%s'"
msgstr "resposta del servidor no vàlida; s'ha obtingut «%s»"
-#: remote-curl.c:499
+#: remote-curl.c:496
#, c-format
msgid "repository '%s' not found"
msgstr "no s'ha trobat el repositori «%s»"
-#: remote-curl.c:503
+#: remote-curl.c:500
#, c-format
msgid "Authentication failed for '%s'"
msgstr "S'ha produït un error en autenticar per «%s»"
-#: remote-curl.c:507
+#: remote-curl.c:504
+#, c-format, fuzzy
+msgid "unable to access '%s' with http.pinnedPubkey configuration: %s"
+msgstr "no es pot accedir a '%s' amb la configuració de http.pinnedPubkey:%s"
+
+#: remote-curl.c:508
#, c-format
msgid "unable to access '%s': %s"
msgstr "no s'ha pogut accedir a «%s»: %s"
-#: remote-curl.c:513
+#: remote-curl.c:514
#, c-format
msgid "redirecting to %s"
msgstr "s'està redirigint a %s"
-#: remote-curl.c:642
+#: remote-curl.c:645
#, fuzzy
msgid "shouldn't have EOF when not gentle on EOF"
msgstr "No hauria de tenir EOF quan no sigui suau al EOF"
-#: remote-curl.c:654
-msgid "remote server sent stateless separator"
-msgstr "el servidor remot ha enviat un separador sense estat"
+#: remote-curl.c:657
+msgid "remote server sent unexpected response end packet"
+msgstr "el servidor remot ha enviat un paquet de final de resposta inesperat"
-#: remote-curl.c:724
+#: remote-curl.c:726
#, fuzzy
msgid "unable to rewind rpc post data - try increasing http.postBuffer"
msgstr ""
"no s'han pogut rebobinar les dades de publicació rpc - proveu d'augmentar "
"http.postBuffer"
-#: remote-curl.c:754
+#: remote-curl.c:755
#, fuzzy, c-format
msgid "remote-curl: bad line length character: %.4s"
msgstr "error de protocol: caràcter de longitud de línia erroni: %.4s"
-#: remote-curl.c:756
-#, fuzzy
+#: remote-curl.c:757
msgid "remote-curl: unexpected response end packet"
-msgstr "paquet final de resposta inesperat del remot"
+msgstr "remote-curl: paquet final de resposta inesperat"
-#: remote-curl.c:832
+#: remote-curl.c:833
#, c-format
msgid "RPC failed; %s"
msgstr "RPC ha fallat; %s"
-#: remote-curl.c:872
+#: remote-curl.c:873
#, fuzzy
msgid "cannot handle pushes this big"
msgstr "no es pot gestionar empènyer aquest gran"
-#: remote-curl.c:987
+#: remote-curl.c:986
#, fuzzy, c-format
msgid "cannot deflate request; zlib deflate error %d"
msgstr "no es pot desinflar la sol·licitud; zlib deflate error%d"
-#: remote-curl.c:991
+#: remote-curl.c:990
#, fuzzy, c-format
msgid "cannot deflate request; zlib end error %d"
msgstr "no es pot desinflar la sol·licitud; error final zlib percentatged"
-#: remote-curl.c:1041
+#: remote-curl.c:1040
#, fuzzy, c-format
msgid "%d bytes of length header were received"
msgstr "s'han rebut bytes percentuals de la capçalera de longitud"
-#: remote-curl.c:1043
+#: remote-curl.c:1042
#, fuzzy, c-format
msgid "%d bytes of body are still expected"
msgstr "encara s'esperen bytes de cos per cent"
-#: remote-curl.c:1132
+#: remote-curl.c:1131
#, fuzzy
msgid "dumb http transport does not support shallow capabilities"
msgstr "el transport ximple http no admet capacitats superficials"
-#: remote-curl.c:1147
+#: remote-curl.c:1146
#, fuzzy
msgid "fetch failed."
msgstr "el fetch ha fallat."
-#: remote-curl.c:1193
+#: remote-curl.c:1192
#, fuzzy
msgid "cannot fetch by sha1 over smart http"
msgstr "no s’ha pogut obtenir per la sha1 a través de l’intel·ligent http"
-#: remote-curl.c:1237 remote-curl.c:1243
+#: remote-curl.c:1236 remote-curl.c:1242
#, fuzzy, c-format
msgid "protocol error: expected sha/ref, got '%s'"
msgstr "error de protocol esperat sha/ref s'ha obtingut «%s»"
-#: remote-curl.c:1255 remote-curl.c:1373
+#: remote-curl.c:1254 remote-curl.c:1372
#, fuzzy, c-format
msgid "http transport does not support %s"
msgstr "El transport http no dóna suport als percentatges"
-#: remote-curl.c:1291
+#: remote-curl.c:1290
#, fuzzy
msgid "git-http-push failed"
msgstr "git-http-push ha fallat"
-#: remote-curl.c:1479
+#: remote-curl.c:1478
#, fuzzy
msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
msgstr "ús remot de curl git remote-curl <remote> [<url>]"
-#: remote-curl.c:1511
+#: remote-curl.c:1510
#, fuzzy
msgid "remote-curl: error reading command stream from git"
msgstr "error remot en llegir el flux d'ordres des de git"
-#: remote-curl.c:1518
+#: remote-curl.c:1517
#, fuzzy
msgid "remote-curl: fetch attempted without a local repo"
msgstr "s'ha intentat recuperar el valor remot sense un repositori local"
-#: remote-curl.c:1559
+#: remote-curl.c:1558
#, fuzzy, c-format
msgid "remote-curl: unknown command '%s' from git"
msgstr "comandament desconegut «%s» del git"
@@ -24855,49 +25404,50 @@
msgid "object filtering"
msgstr "filtratge d'objecte"
-#: parse-options.h:184
+#: parse-options.h:183
msgid "expiry-date"
msgstr "data-de-caducitat"
-#: parse-options.h:198
+#: parse-options.h:197
msgid "no-op (backward compatibility)"
msgstr "operació nul·la (per a compatibilitat amb versions anteriors)"
-#: parse-options.h:310
+#: parse-options.h:309
msgid "be more verbose"
msgstr "sigues més detallat"
-#: parse-options.h:312
+#: parse-options.h:311
msgid "be more quiet"
msgstr "sigues més discret"
-#: parse-options.h:318
+#: parse-options.h:317
#, fuzzy
msgid "use <n> digits to display object names"
msgstr "usa <n> xifres per presentar els SHA-1"
-#: parse-options.h:337
+#: parse-options.h:336
msgid "how to strip spaces and #comments from message"
msgstr "com suprimir els espais i #comentaris del missatge"
-#: parse-options.h:338
+#: parse-options.h:337
#, fuzzy
msgid "read pathspec from file"
msgstr "llegeix l'especificació del camí del fitxer"
-#: parse-options.h:339
+#: parse-options.h:338
#, fuzzy
msgid ""
-"with --pathspec-from-file, pathspec elements are separated with NUL character"
+"with --pathspec-from-file, pathspec elements are separated with NUL "
+"character"
msgstr ""
"amb --pathspec-from-file els elements d'especificació del camí estan "
"separats amb caràcter NUL"
-#: ref-filter.h:99
+#: ref-filter.h:101
msgid "key"
msgstr "clau"
-#: ref-filter.h:99
+#: ref-filter.h:101
msgid "field name to sort on"
msgstr "nom del camp en el qual ordenar"
@@ -24957,7 +25507,8 @@
#: command-list.h:61
msgid "Provide content or type and size information for repository objects"
msgstr ""
-"Proveeix contingut o informació del tipus i mida per als objectes del repositori"
+"Proveeix contingut o informació del tipus i mida per als objectes del "
+"repositori"
#: command-list.h:62
msgid "Display gitattributes information"
@@ -25173,7 +25724,8 @@
#, fuzzy
msgid "Send a collection of patches from stdin to an IMAP folder"
msgstr ""
-"Envia una col·lecció de pedaços des de l'entrada estàndard a una carpeta IMAP"
+"Envia una col·lecció de pedaços des de l'entrada estàndard a una carpeta "
+"IMAP"
#: command-list.h:112
#, fuzzy
@@ -25338,8 +25890,7 @@
#: command-list.h:147
msgid "Compare two commit ranges (e.g. two versions of a branch)"
-msgstr ""
-"Compara dos rangs de comissions (p. ex. dues versions d'una branca)"
+msgstr "Compara dos rangs de comissions (p. ex. dues versions d'una branca)"
#: command-list.h:148
msgid "Reads tree information into the index"
@@ -25499,12 +26050,14 @@
#: command-list.h:186
msgid "Update the object name stored in a ref safely"
msgstr ""
-"Actualitza el nom de l'objecte emmagatzemat en una referència de forma segura"
+"Actualitza el nom de l'objecte emmagatzemat en una referència de forma "
+"segura"
#: command-list.h:187
msgid "Update auxiliary info file to help dumb servers"
msgstr ""
-"Actualitza el fitxer d'informació auxiliar per a ajudar als servidors ximples"
+"Actualitza el fitxer d'informació auxiliar per a ajudar als servidors "
+"ximples"
#: command-list.h:188
msgid "Send archive back to git-archive"
@@ -25591,8 +26144,9 @@
msgstr "Especifica els fitxers intencionalment no seguits a ignorar"
#: command-list.h:209
+#, fuzzy
msgid "Map author/committer names and/or E-Mail addresses"
-msgstr ""
+msgstr "Assigna noms d'autor/comitè i/o adreces de correu electrònic"
#: command-list.h:210
msgid "Defining submodule properties"
@@ -25630,48 +26184,13 @@
msgid "An overview of recommended workflows with Git"
msgstr "Una visió de conjunt de fluxos de treball recomanats amb Git"
-#: git-bisect.sh:68
-msgid "bisect run failed: no command provided."
-msgstr "ha fallat l'execució de bisect: no s'ha proporcionat cap ordre."
-
-#: git-bisect.sh:73
-#, sh-format
-msgid "running $command"
-msgstr "s'està executant $command"
-
-#: git-bisect.sh:80
-#, sh-format
-msgid ""
-"bisect run failed:\n"
-"exit code $res from '$command' is < 0 or >= 128"
-msgstr ""
-"el pas de bisecció ha fallat:\n"
-"el codi de sortida $res de «$command» és < 0 o bé >= 128"
-
-#: git-bisect.sh:105
-msgid "bisect run cannot continue any more"
-msgstr "el pas de bisecció no pot continuar més"
-
-#: git-bisect.sh:111
-#, fuzzy, sh-format
-msgid ""
-"bisect run failed:\n"
-"'bisect-state $state' exited with error code $res"
-msgstr ""
-"el pas de bisecció ha fallat:\n"
-"«bisect_state $state» ha sortit amb el codi d'error $res"
-
-#: git-bisect.sh:118
-msgid "bisect run success"
-msgstr "pas de bisecció reeixit"
-
#: git-merge-octopus.sh:46
msgid ""
"Error: Your local changes to the following files would be overwritten by "
"merge"
msgstr ""
-"Error: Els vostres canvis locals als fitxers següents se sobreescriurien per "
-"fusionar"
+"Error: Els vostres canvis locals als fitxers següents se sobreescriurien per"
+" fusionar"
#: git-merge-octopus.sh:61
msgid "Automated merge did not work."
@@ -25706,98 +26225,18 @@
msgstr ""
"La fusió simple no ha funcionat, s'està intentant una fusió automàtica."
-#: git-submodule.sh:179
-msgid "Relative path can only be used from the toplevel of the working tree"
-msgstr ""
-"El camí relatiu només es pot usar des del nivell superior de l'arbre de "
-"treball"
-
-#: git-submodule.sh:189
-#, sh-format
-msgid "repo URL: '$repo' must be absolute or begin with ./|../"
-msgstr "URL de repositori: «$repo» ha de ser absolut o començar amb ./|../"
-
-#: git-submodule.sh:208
-#, sh-format
-msgid "'$sm_path' already exists in the index"
-msgstr "«$sm_path» ja existeix en l'índex"
-
-#: git-submodule.sh:211
-#, sh-format
-msgid "'$sm_path' already exists in the index and is not a submodule"
-msgstr "«$sm_path» ja existeix en l'índex i no és submòdul"
-
-#: git-submodule.sh:218
-#, sh-format
-msgid "'$sm_path' does not have a commit checked out"
-msgstr "«$sm_path» no té una comissió agafada"
-
-#: git-submodule.sh:249
-#, sh-format
-msgid "Adding existing repo at '$sm_path' to the index"
-msgstr "S'està afegint el repositori existent a «$sm_path» a l'índex"
-
-#: git-submodule.sh:251
-#, sh-format
-msgid "'$sm_path' already exists and is not a valid git repo"
-msgstr "«$sm_path» ja existeix i no és un repositori de git vàlid"
-
-#: git-submodule.sh:259
-#, sh-format
-msgid "A git directory for '$sm_name' is found locally with remote(s):"
-msgstr ""
-"S'ha trobat un directori de git per a «$sm_name» localment amb els remots:"
-
-#: git-submodule.sh:261
-#, sh-format
-msgid ""
-"If you want to reuse this local git directory instead of cloning again from\n"
-" $realrepo\n"
-"use the '--force' option. If the local git directory is not the correct "
-"repo\n"
-"or you are unsure what this means choose another name with the '--name' "
-"option."
-msgstr ""
-"Si voleu reusar aquest directori de git local en lloc de clonar de nou de\n"
-" $realrepo\n"
-"useu l'opció «--force». Si el directori de git local no és el repositori "
-"correcte\n"
-"o no esteu segur de què vol dir això, trieu un altre nom amb l'opció «--"
-"name»."
-
-#: git-submodule.sh:267
-#, sh-format
-msgid "Reactivating local git directory for submodule '$sm_name'."
-msgstr ""
-"S'està reactivant el directori de git local per al submòdul «$sm_name»."
-
-#: git-submodule.sh:279
-#, sh-format
-msgid "Unable to checkout submodule '$sm_path'"
-msgstr "No s'ha pogut agafar el submòdul «$sm_path»"
-
-#: git-submodule.sh:284
-#, sh-format
-msgid "Failed to add submodule '$sm_path'"
-msgstr "S'ha produït un error en afegir el submòdul «$sm_path»"
-
-#: git-submodule.sh:293
-#, sh-format
-msgid "Failed to register submodule '$sm_path'"
-msgstr "S'ha produït un error en registrar el submòdul «$sm_path»"
-
-#: git-submodule.sh:568
+#: git-submodule.sh:401
#, sh-format
msgid "Unable to find current revision in submodule path '$displaypath'"
msgstr ""
"No s'ha pogut trobar la revisió actual en el camí de submòdul «$displaypath»"
-#: git-submodule.sh:578
+#: git-submodule.sh:411
#, sh-format
msgid "Unable to fetch in submodule path '$sm_path'"
msgstr "No s'ha pogut obtenir en el camí de submòdul «$sm_path»"
-#: git-submodule.sh:583
+#: git-submodule.sh:416
#, sh-format
msgid ""
"Unable to find current ${remote_name}/${branch} revision in submodule path "
@@ -25806,406 +26245,13 @@
"No s'ha pogut trobar la revisió actual de ${remote_name}/${branch} en el "
"camí de submòdul «$sm_path»"
-#: git-submodule.sh:601
-#, sh-format
-msgid ""
-"Unable to fetch in submodule path '$displaypath'; trying to directly fetch "
-"$sha1:"
-msgstr ""
-"No s'ha pogut obtenir en el camí de submòdul «$displaypath»; s'està "
-"intentant obtenir directament $sha1:"
-
-#: git-submodule.sh:607
-#, sh-format
-msgid ""
-"Fetched in submodule path '$displaypath', but it did not contain $sha1. "
-"Direct fetching of that commit failed."
-msgstr ""
-"S'ha obtingut en el camí de submòdul «$displaypath», però no contenia $sha1. "
-"L'obtenció directa d'aquella comissió ha fallat."
-
-#: git-submodule.sh:614
-#, sh-format
-msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
-msgstr "No s'ha pogut agafar «$sha1» en el camí de submòdul «$displaypath»"
-
-#: git-submodule.sh:615
-#, sh-format
-msgid "Submodule path '$displaypath': checked out '$sha1'"
-msgstr "Camí de submòdul «$displaypath»: s'ha agafat «$sha1»"
-
-#: git-submodule.sh:619
-#, sh-format
-msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
-msgstr ""
-"No s'ha pogut fer «rebase» «$sha1» en el camí de submòdul «$displaypath»"
-
-#: git-submodule.sh:620
-#, sh-format
-msgid "Submodule path '$displaypath': rebased into '$sha1'"
-msgstr "Camí de submòdul «$displaypath»: s'ha fet «rebase» en «$sha1»"
-
-#: git-submodule.sh:625
-#, sh-format
-msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
-msgstr "No s'ha pogut fusionar «$sha1» en el camí de submòdul «$displaypath»"
-
-#: git-submodule.sh:626
-#, sh-format
-msgid "Submodule path '$displaypath': merged in '$sha1'"
-msgstr "Camí de submòdul «$displaypath»: s'ha fusionat en «$sha1»"
-
-#: git-submodule.sh:631
-#, sh-format
-msgid "Execution of '$command $sha1' failed in submodule path '$displaypath'"
-msgstr ""
-"L'execució de «$command $sha1» ha fallat en el camí de submòdul "
-"«$displaypath»"
-
-#: git-submodule.sh:632
-#, sh-format
-msgid "Submodule path '$displaypath': '$command $sha1'"
-msgstr "Camí de submòdul «$displaypath»: «$command $sha1»"
-
-#: git-submodule.sh:663
+#: git-submodule.sh:464
#, sh-format
msgid "Failed to recurse into submodule path '$displaypath'"
msgstr ""
"S'ha produït un error en recórrer recursivament dins del camí de submòdul "
"«$displaypath»"
-#: git-rebase--preserve-merges.sh:109
-msgid "Applied autostash."
-msgstr "S'ha aplicat l'«autostash»."
-
-#: git-rebase--preserve-merges.sh:112
-#, sh-format
-msgid "Cannot store $stash_sha1"
-msgstr "No es pot emmagatzemar $stash_sha1"
-
-#: git-rebase--preserve-merges.sh:113
-msgid ""
-"Applying autostash resulted in conflicts.\n"
-"Your changes are safe in the stash.\n"
-"You can run \"git stash pop\" or \"git stash drop\" at any time.\n"
-msgstr ""
-"L'aplicació del «stash» automàtic ha resultat en conflictes.\n"
-"Els vostres canvis estan segurs en el «stash».\n"
-"Podeu executar «git stash pop» o «git stash drop» en qualsevol moment.\n"
-
-#: git-rebase--preserve-merges.sh:191
-#, sh-format
-msgid "Rebasing ($new_count/$total)"
-msgstr "S'està fent «rebase» ($new_count/$total)"
-
-#: git-rebase--preserve-merges.sh:197
-msgid ""
-"\n"
-"Commands:\n"
-"p, pick <commit> = use commit\n"
-"r, reword <commit> = use commit, but edit the commit message\n"
-"e, edit <commit> = use commit, but stop for amending\n"
-"s, squash <commit> = use commit, but meld into previous commit\n"
-"f, fixup <commit> = like \"squash\", but discard this commit's log message\n"
-"x, exec <commit> = run command (the rest of the line) using shell\n"
-"d, drop <commit> = remove commit\n"
-"l, label <label> = label current HEAD with a name\n"
-"t, reset <label> = reset HEAD to a label\n"
-"m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]\n"
-". create a merge commit using the original merge commit's\n"
-". message (or the oneline, if no original merge commit was\n"
-". specified). Use -c <commit> to reword the commit message.\n"
-"\n"
-"These lines can be re-ordered; they are executed from top to bottom.\n"
-msgstr ""
-"\n"
-"Ordres:\n"
-" p, pick <comissió> = usa la comissió\n"
-" r, reword <comissió> = usa la comissió, però edita el missatge de comissió\n"
-" e, edit <comissió> = usa la comissió, però atura't per a esmenar\n"
-" s, squash <comissió> = usa la comissió, però fusiona-la a la comissió "
-"prèvia\n"
-" f, fixup <comissió> = com a «squash», però descarta el missatge de registre "
-"d'aquesta comissió\n"
-"x, exec <comissió> = executa l'ordre (la resta de la línia) usant "
-"l'intèrpret d'ordres\n"
-"d, drop <comissió> = elimina la comissió\n"
-"l, label <etiqueta> = etiqueta la HEAD actual amb un nom\n"
-"t, reset <etiqueta> = reinicia HEAD a una etiqueta \n"
-"m, merge [-C <comissió> | -c <comissió>] <etiqueta> [# <oneline>]\n"
-". crea una comissió de fusió usant el missatge de la comissió\n"
-". de fusió original (o línia única, si no hi ha cap comissió de fusió "
-"original\n"
-". especificada). Useu -c <comissió> per a reescriure el missatge de "
-"publicació.\n"
-"\n"
-"Es pot canviar l'ordre d'aquestes línies; s'executen de dalt a baix.\n"
-
-#: git-rebase--preserve-merges.sh:260
-#, sh-format
-msgid ""
-"You can amend the commit now, with\n"
-"\n"
-"\tgit commit --amend $gpg_sign_opt_quoted\n"
-"\n"
-"Once you are satisfied with your changes, run\n"
-"\n"
-"\tgit rebase --continue"
-msgstr ""
-"Podeu esmenar la comissió ara, amb\n"
-"\n"
-"\tgit commit --amend $gpg_sign_opt_quoted\n"
-"\n"
-"Una vegada que estigueu satisfet amb els vostres canvis, executeu\n"
-"\n"
-"\tgit rebase --continue"
-
-#: git-rebase--preserve-merges.sh:285
-#, sh-format
-msgid "$sha1: not a commit that can be picked"
-msgstr "$sha1: no és una comissió que es pugui triar"
-
-#: git-rebase--preserve-merges.sh:324
-#, sh-format
-msgid "Invalid commit name: $sha1"
-msgstr "Nom de comissió no vàlid: $sha1"
-
-#: git-rebase--preserve-merges.sh:354
-msgid "Cannot write current commit's replacement sha1"
-msgstr "No es pot escriure el sha1 reemplaçant de la comissió actual"
-
-#: git-rebase--preserve-merges.sh:405
-#, sh-format
-msgid "Fast-forward to $sha1"
-msgstr "Avanç ràpid a $sha1"
-
-#: git-rebase--preserve-merges.sh:407
-#, sh-format
-msgid "Cannot fast-forward to $sha1"
-msgstr "No es pot avançar ràpidament a $sha1"
-
-#: git-rebase--preserve-merges.sh:416
-#, sh-format
-msgid "Cannot move HEAD to $first_parent"
-msgstr "No es pot moure HEAD a $first_parent"
-
-#: git-rebase--preserve-merges.sh:421
-#, sh-format
-msgid "Refusing to squash a merge: $sha1"
-msgstr "S'està refusant fer «squash» a una fusió: $sha1"
-
-#: git-rebase--preserve-merges.sh:439
-#, sh-format
-msgid "Error redoing merge $sha1"
-msgstr "Error en refer la fusió $sha1"
-
-#: git-rebase--preserve-merges.sh:448
-#, sh-format
-msgid "Could not pick $sha1"
-msgstr "No s'ha pogut triar $sha1"
-
-#: git-rebase--preserve-merges.sh:457
-#, sh-format
-msgid "This is the commit message #${n}:"
-msgstr "Aquest és el missatge de comissió núm. ${n}:"
-
-#: git-rebase--preserve-merges.sh:462
-#, sh-format
-msgid "The commit message #${n} will be skipped:"
-msgstr "El missatge de comissió núm. ${n} s'ometrà:"
-
-#: git-rebase--preserve-merges.sh:473
-#, sh-format
-msgid "This is a combination of $count commit."
-msgid_plural "This is a combination of $count commits."
-msgstr[0] "Això és una combinació d'$count comissió."
-msgstr[1] "Això és una combinació de $count comissions."
-
-#: git-rebase--preserve-merges.sh:482
-#, sh-format
-msgid "Cannot write $fixup_msg"
-msgstr "No es pot escriure $fixup_msg"
-
-#: git-rebase--preserve-merges.sh:485
-msgid "This is a combination of 2 commits."
-msgstr "Això és una combinació de 2 comissions."
-
-#: git-rebase--preserve-merges.sh:526 git-rebase--preserve-merges.sh:569
-#: git-rebase--preserve-merges.sh:572
-#, sh-format
-msgid "Could not apply $sha1... $rest"
-msgstr "No s'ha pogut aplicar $sha1... $rest"
-
-#: git-rebase--preserve-merges.sh:601
-#, sh-format
-msgid ""
-"Could not amend commit after successfully picking $sha1... $rest\n"
-"This is most likely due to an empty commit message, or the pre-commit hook\n"
-"failed. If the pre-commit hook failed, you may need to resolve the issue "
-"before\n"
-"you are able to reword the commit."
-msgstr ""
-"No s'ha pogut esmenar la comissió després de triar correctament $sha1... "
-"$rest\n"
-"Això és probablement a causa d'un missatge de comissió buit, o el lligam de\n"
-"precomissió ha fallat. Si el lligam de precomissió ha fallat, pot ser que\n"
-"necessiteu resoldre el problema abans que pugueu canviar el missatge de\n"
-"comissió."
-
-#: git-rebase--preserve-merges.sh:616
-#, sh-format
-msgid "Stopped at $sha1_abbrev... $rest"
-msgstr "S'ha aturat a $sha1_abbrev... $rest"
-
-#: git-rebase--preserve-merges.sh:631
-#, sh-format
-msgid "Cannot '$squash_style' without a previous commit"
-msgstr "No es pot fer «$squash_style» sense una comissió prèvia"
-
-#: git-rebase--preserve-merges.sh:673
-#, sh-format
-msgid "Executing: $rest"
-msgstr "S'està executant: $rest"
-
-#: git-rebase--preserve-merges.sh:681
-#, sh-format
-msgid "Execution failed: $rest"
-msgstr "L'execució ha fallat: $rest"
-
-#: git-rebase--preserve-merges.sh:683
-msgid "and made changes to the index and/or the working tree"
-msgstr "i ha fet canvis a l'índex o l'arbre de treball"
-
-#: git-rebase--preserve-merges.sh:685
-msgid ""
-"You can fix the problem, and then run\n"
-"\n"
-"\tgit rebase --continue"
-msgstr ""
-"Podeu arreglar el problema, i llavors executeu\n"
-"\n"
-"\tgit rebase --continue"
-
-#. TRANSLATORS: after these lines is a command to be issued by the user
-#: git-rebase--preserve-merges.sh:698
-#, sh-format
-msgid ""
-"Execution succeeded: $rest\n"
-"but left changes to the index and/or the working tree\n"
-"Commit or stash your changes, and then run\n"
-"\n"
-"\tgit rebase --continue"
-msgstr ""
-"L'execució ha tingut èxit: $rest\n"
-"però ha deixat canvis a l'índex o l'arbre de treball\n"
-"Cometeu o emmagatzemeu els vostres canvis, i llavors executeu\n"
-"\n"
-"\tgit rebase --continue"
-
-#: git-rebase--preserve-merges.sh:709
-#, sh-format
-msgid "Unknown command: $command $sha1 $rest"
-msgstr "Ordre desconeguda: $command $sha1 $rest"
-
-#: git-rebase--preserve-merges.sh:710
-msgid "Please fix this using 'git rebase --edit-todo'."
-msgstr "Corregiu-ho usant «git rebase --edit-todo»."
-
-#: git-rebase--preserve-merges.sh:745
-#, sh-format
-msgid "Successfully rebased and updated $head_name."
-msgstr "S'ha fet «rebase» i actualitzat $head_name amb èxit."
-
-#: git-rebase--preserve-merges.sh:802
-msgid "Could not remove CHERRY_PICK_HEAD"
-msgstr "No s'ha pogut eliminar CHERRY_PICK_HEAD"
-
-#: git-rebase--preserve-merges.sh:807
-#, sh-format
-msgid ""
-"You have staged changes in your working tree.\n"
-"If these changes are meant to be\n"
-"squashed into the previous commit, run:\n"
-"\n"
-" git commit --amend $gpg_sign_opt_quoted\n"
-"\n"
-"If they are meant to go into a new commit, run:\n"
-"\n"
-" git commit $gpg_sign_opt_quoted\n"
-"\n"
-"In both cases, once you're done, continue with:\n"
-"\n"
-" git rebase --continue\n"
-msgstr ""
-"Teniu canvis «stage» en el vostre arbre de treball.\n"
-"Si aquests canvis són per fer «squash»\n"
-"a la comissió prèvia, executeu:\n"
-"\n"
-" git commit --amend $gpg_sign_opt_quoted\n"
-"\n"
-"Si són per a formar una comissió nova, executeu:\n"
-"\n"
-" git commit $gpg_sign_opt_quoted\n"
-"\n"
-"En ambdós casos, quan hàgiu terminat, continueu amb:\n"
-"\n"
-" git rebase --continue\n"
-
-#: git-rebase--preserve-merges.sh:824
-msgid "Error trying to find the author identity to amend commit"
-msgstr ""
-"Hi ha hagut un error en intentar trobar la identitat d'autor per a esmenar "
-"la comissió"
-
-#: git-rebase--preserve-merges.sh:829
-msgid ""
-"You have uncommitted changes in your working tree. Please commit them\n"
-"first and then run 'git rebase --continue' again."
-msgstr ""
-"Teniu canvis no comesos en el vostre arbre de treball. \n"
-"Primer cometeu-los i després executeu «git rebase --continue» de nou."
-
-#: git-rebase--preserve-merges.sh:834 git-rebase--preserve-merges.sh:838
-msgid "Could not commit staged changes."
-msgstr "No s'han pogut cometre els canvis «staged»."
-
-#: git-rebase--preserve-merges.sh:869 git-rebase--preserve-merges.sh:955
-msgid "Could not execute editor"
-msgstr "No s'ha pogut executar l'editor"
-
-#: git-rebase--preserve-merges.sh:890
-#, sh-format
-msgid "Could not checkout $switch_to"
-msgstr "No s'ha pogut agafar $switch_to"
-
-#: git-rebase--preserve-merges.sh:897
-msgid "No HEAD?"
-msgstr "No hi ha cap HEAD?"
-
-#: git-rebase--preserve-merges.sh:898
-#, sh-format
-msgid "Could not create temporary $state_dir"
-msgstr "No s'ha pogut crear el $state_dir temporal"
-
-#: git-rebase--preserve-merges.sh:901
-msgid "Could not mark as interactive"
-msgstr "No s'ha pogut marcar com a interactiu"
-
-#: git-rebase--preserve-merges.sh:933
-#, sh-format
-msgid "Rebase $shortrevisions onto $shortonto ($todocount command)"
-msgid_plural "Rebase $shortrevisions onto $shortonto ($todocount commands)"
-msgstr[0] "Fes «rebase» $shortrevisions sobre $shortonto ($todocount ordre)"
-msgstr[1] "Fes «rebase» $shortrevisions sobre $shortonto ($todocount ordres)"
-
-#: git-rebase--preserve-merges.sh:945
-msgid "Note that empty commits are commented out"
-msgstr "Tingueu en compte que les comissions buides estan comentades"
-
-#: git-rebase--preserve-merges.sh:987 git-rebase--preserve-merges.sh:992
-msgid "Could not init rewritten commits"
-msgstr "No s'han pogut iniciar les comissions reescrites"
-
#: git-sh-setup.sh:89 git-sh-setup.sh:94
#, sh-format
msgid "usage: $dashless $USAGE"
@@ -26224,46 +26270,29 @@
msgstr "fatal: no es pot usar $program_name sense un arbre de treball."
#: git-sh-setup.sh:221
-msgid "Cannot rebase: You have unstaged changes."
-msgstr "No es pot fer «rebase»: teniu canvis «unstaged»."
-
-#: git-sh-setup.sh:224
msgid "Cannot rewrite branches: You have unstaged changes."
msgstr "No es poden reescriure branques: Teniu canvis «unstaged»."
-#: git-sh-setup.sh:227
-msgid "Cannot pull with rebase: You have unstaged changes."
-msgstr "No es pot baixar fent «rebase»: Teniu canvis «unstaged»."
-
-#: git-sh-setup.sh:230
+#: git-sh-setup.sh:224
#, sh-format
msgid "Cannot $action: You have unstaged changes."
msgstr "No es pot $action: Teniu canvis «unstaged»."
-#: git-sh-setup.sh:243
-msgid "Cannot rebase: Your index contains uncommitted changes."
-msgstr "No es pot fer «rebase»: El vostre índex conté canvis sense cometre."
-
-#: git-sh-setup.sh:246
-msgid "Cannot pull with rebase: Your index contains uncommitted changes."
-msgstr ""
-"No es pot baixar fent «rebase»: El vostre índex conté canvis sense cometre."
-
-#: git-sh-setup.sh:249
+#: git-sh-setup.sh:235
#, sh-format
msgid "Cannot $action: Your index contains uncommitted changes."
msgstr "No es pot $action: El vostre índex conté canvis sense cometre."
-#: git-sh-setup.sh:253
+#: git-sh-setup.sh:237
msgid "Additionally, your index contains uncommitted changes."
msgstr "Addicionalment, el vostre índex conté canvis sense cometre."
-#: git-sh-setup.sh:373
+#: git-sh-setup.sh:357
msgid "You need to run this command from the toplevel of the working tree."
msgstr ""
"Heu d'executar aquesta ordre des del nivell superior de l'arbre de treball."
-#: git-sh-setup.sh:378
+#: git-sh-setup.sh:362
msgid "Unable to determine absolute path of git directory"
msgstr "No s'ha pogut determinar el camí absolut del directori de git"
@@ -26569,17 +26598,14 @@
"revert - revert staged set of changes back to the HEAD version\n"
"patch - pick hunks and update selectively\n"
"diff - view diff between HEAD and index\n"
-"add untracked - add contents of untracked files to the staged set of "
-"changes\n"
+"add untracked - add contents of untracked files to the staged set of changes\n"
msgstr ""
"status - mostra els camins amb canvis\n"
-"update - afegeix l'estat de l'arbre de treball al conjunt de canvis "
-"«staged»\n"
+"update - afegeix l'estat de l'arbre de treball al conjunt de canvis «staged»\n"
"revert - reverteix el conjunt de canvis de «staged» a la versió HEAD\n"
"patch - selecciona trossos i actualitza'ls selectivament\n"
"diff - mostra la diferència entre HEAD i l'índex\n"
-"add untracked - afegeix el contingut dels fitxers no seguits al conjunt de "
-"canvis «staged»\n"
+"add untracked - afegeix el contingut dels fitxers no seguits al conjunt de canvis «staged»\n"
#: git-add--interactive.perl:1828 git-add--interactive.perl:1840
#: git-add--interactive.perl:1843 git-add--interactive.perl:1850
@@ -26598,39 +26624,38 @@
msgid "invalid argument %s, expecting --"
msgstr "argument %s no vàlid, s'esperava --"
-#: git-send-email.perl:138
+#: git-send-email.perl:129
msgid "local zone differs from GMT by a non-minute interval\n"
msgstr "la zona local difereix de GMT per un interval que no és de minuts\n"
-#: git-send-email.perl:145 git-send-email.perl:151
+#: git-send-email.perl:136 git-send-email.perl:142
msgid "local time offset greater than or equal to 24 hours\n"
msgstr "el desplaçament de la zona local és més gran o igual a 24 hores\n"
-#: git-send-email.perl:222
-#, perl-format
+#: git-send-email.perl:214
+#, fuzzy, perl-format
msgid "fatal: command '%s' died with exit code %d"
-msgstr ""
+msgstr "fatal: l'ordre «%s» ha mort amb el codi de sortida %d"
-#: git-send-email.perl:235
+#: git-send-email.perl:227
msgid "the editor exited uncleanly, aborting everything"
msgstr "l'editor no ha sortit correctament, avortant-ho tot"
-#: git-send-email.perl:321
+#: git-send-email.perl:316
#, perl-format
-msgid ""
-"'%s' contains an intermediate version of the email you were composing.\n"
+msgid "'%s' contains an intermediate version of the email you were composing.\n"
msgstr "«%s» conté una versió intermèdia del correu que estàveu redactant.\n"
-#: git-send-email.perl:326
+#: git-send-email.perl:321
#, perl-format
msgid "'%s.final' contains the composed email.\n"
msgstr "«%s.final» conté el correu redactat.\n"
-#: git-send-email.perl:419
+#: git-send-email.perl:450
msgid "--dump-aliases incompatible with other options\n"
msgstr "--dump-aliases és incompatible amb altres opcions\n"
-#: git-send-email.perl:493
+#: git-send-email.perl:525
#, fuzzy
msgid ""
"fatal: found configuration options for 'sendmail'\n"
@@ -26638,14 +26663,15 @@
"Set sendemail.forbidSendmailVariables to false to disable this check.\n"
msgstr ""
"fatal s'han trobat les opcions de configuració per a git-send-email es "
-"configura amb les opcions sendemail.* -noteu la 'e'. Establiu sendemail."
-"forbidSendmailVariables a false per desactivar aquesta comprovació."
+"configura amb les opcions sendemail.* -noteu la 'e'. Establiu "
+"sendemail.forbidSendmailVariables a false per desactivar aquesta "
+"comprovació."
-#: git-send-email.perl:498 git-send-email.perl:700
+#: git-send-email.perl:530 git-send-email.perl:746
msgid "Cannot run git format-patch from outside a repository\n"
msgstr "No es pot executar git format-patch des de fora del repositori\n"
-#: git-send-email.perl:501
+#: git-send-email.perl:533
#, fuzzy
msgid ""
"`batch-size` and `relogin` must be specified together (via command-line or "
@@ -26654,37 +26680,37 @@
"`batch-size` i `relogin` s'han d'especificar junts (a través de la línia "
"d'ordres o l'opció de configuració)"
-#: git-send-email.perl:514
+#: git-send-email.perl:546
#, perl-format
msgid "Unknown --suppress-cc field: '%s'\n"
msgstr "Camp --suppress-cc desconegut: «%s»\n"
-#: git-send-email.perl:545
+#: git-send-email.perl:577
#, perl-format
msgid "Unknown --confirm setting: '%s'\n"
msgstr "Paràmetre --confirm desconegut: «%s»\n"
-#: git-send-email.perl:573
+#: git-send-email.perl:617
#, perl-format
msgid "warning: sendmail alias with quotes is not supported: %s\n"
msgstr "avís: no s'admet l'àlies de sendmail amb cometes: %s\n"
-#: git-send-email.perl:575
+#: git-send-email.perl:619
#, perl-format
msgid "warning: `:include:` not supported: %s\n"
msgstr "avís: «:include:» no s'admet: %s\n"
-#: git-send-email.perl:577
+#: git-send-email.perl:621
#, perl-format
msgid "warning: `/file` or `|pipe` redirection not supported: %s\n"
msgstr "avís: les redireccions «/file» ni «|pipe» no s'admeten: %s\n"
-#: git-send-email.perl:582
+#: git-send-email.perl:626
#, perl-format
msgid "warning: sendmail line is not recognized: %s\n"
msgstr "avís: no es pot reconèixer la línia sendmail: %s\n"
-#: git-send-email.perl:666
+#: git-send-email.perl:711
#, perl-format
msgid ""
"File '%s' exists but it could also be the range of commits\n"
@@ -26699,12 +26725,12 @@
" * Dient «./%s» si volíeu especificar un fitxer; o\n"
" * Proporcionant l'opció «--format-patch» si volíeu especificar un rang.\n"
-#: git-send-email.perl:687
+#: git-send-email.perl:732
#, perl-format
msgid "Failed to opendir %s: %s"
msgstr "S'ha produït un error en obrir el directori %s: %s"
-#: git-send-email.perl:720
+#: git-send-email.perl:767
msgid ""
"\n"
"No patch files specified!\n"
@@ -26714,17 +26740,17 @@
"No s'han especificat fitxers de pedaç\n"
"\n"
-#: git-send-email.perl:733
+#: git-send-email.perl:780
#, perl-format
msgid "No subject line in %s?"
msgstr "Sense assumpte a %s?"
-#: git-send-email.perl:743
+#: git-send-email.perl:791
#, perl-format
msgid "Failed to open for writing %s: %s"
msgstr "S'ha produït un error en obrir per escriptura %s: %s"
-#: git-send-email.perl:754
+#: git-send-email.perl:802
msgid ""
"Lines beginning in \"GIT:\" will be removed.\n"
"Consider including an overall diffstat or table of contents\n"
@@ -26738,27 +26764,27 @@
"\n"
"Esborreu el contingut del cos si no voleu enviar cap resum.\n"
-#: git-send-email.perl:778
+#: git-send-email.perl:826
#, perl-format
msgid "Failed to open %s: %s"
msgstr "S'ha produït un error en obrir %s: %s"
-#: git-send-email.perl:795
+#: git-send-email.perl:843
#, perl-format
msgid "Failed to open %s.final: %s"
msgstr "S'ha produït un error en obrir %s.final: %s"
-#: git-send-email.perl:838
+#: git-send-email.perl:886
msgid "Summary email is empty, skipping it\n"
msgstr "El correu electrònic de resum està buit, s'omet\n"
#. TRANSLATORS: please keep [y/N] as is.
-#: git-send-email.perl:873
+#: git-send-email.perl:935
#, perl-format
msgid "Are you sure you want to use <%s> [y/N]? "
msgstr "Esteu segur que voleu usar <%s> [y/N]? "
-#: git-send-email.perl:928
+#: git-send-email.perl:990
msgid ""
"The following files are 8bit, but do not declare a Content-Transfer-"
"Encoding.\n"
@@ -26766,40 +26792,38 @@
"Els fitxers següents són 8bit, però no declaren un Content-Transfer-"
"Encoding.\n"
-#: git-send-email.perl:933
+#: git-send-email.perl:995
msgid "Which 8bit encoding should I declare [UTF-8]? "
msgstr "Quina codificació de 8 bits hauria de declarar [UTF-8]? "
-#: git-send-email.perl:941
+#: git-send-email.perl:1003
#, perl-format
msgid ""
"Refusing to send because the patch\n"
"\t%s\n"
-"has the template subject '*** SUBJECT HERE ***'. Pass --force if you really "
-"want to send.\n"
+"has the template subject '*** SUBJECT HERE ***'. Pass --force if you really want to send.\n"
msgstr ""
"S'ha refusat a enviar perquè el pedaç\n"
"\t%s\n"
-"perquè la plantilla té l'assumpte «*** SUBJECT HERE ***». Passeu --force si "
-"realment voleu enviar-ho.\n"
+"perquè la plantilla té l'assumpte «*** SUBJECT HERE ***». Passeu --force si realment voleu enviar-ho.\n"
-#: git-send-email.perl:960
+#: git-send-email.perl:1022
msgid "To whom should the emails be sent (if anyone)?"
msgstr ""
"A qui s'haurien d'enviar els correus electrònics (si s'han d'enviar a algú)?"
-#: git-send-email.perl:978
+#: git-send-email.perl:1040
#, perl-format
msgid "fatal: alias '%s' expands to itself\n"
msgstr "fatal: l'àlies «%s» s'expandeix a si mateix\n"
-#: git-send-email.perl:990
+#: git-send-email.perl:1052
msgid "Message-ID to be used as In-Reply-To for the first email (if any)? "
msgstr ""
"S'ha d'usar el Message-ID com a In-Reply-To pel primer correu (si n'hi ha "
"cap)? "
-#: git-send-email.perl:1048 git-send-email.perl:1056
+#: git-send-email.perl:1114 git-send-email.perl:1122
#, perl-format
msgid "error: unable to extract a valid address from: %s\n"
msgstr "error: no s'ha pogut extreure una adreça vàlida de: %s\n"
@@ -26807,16 +26831,16 @@
#. TRANSLATORS: Make sure to include [q] [d] [e] in your
#. translation. The program will only accept English input
#. at this point.
-#: git-send-email.perl:1060
+#: git-send-email.perl:1126
msgid "What to do with this address? ([q]uit|[d]rop|[e]dit): "
msgstr "Què cal fer amb aquesta adreça? ([q]surt|[d]escarta|[e]dita): "
-#: git-send-email.perl:1377
+#: git-send-email.perl:1446
#, perl-format
msgid "CA path \"%s\" does not exist"
msgstr "el camí CA «%s» no existeix"
-#: git-send-email.perl:1460
+#: git-send-email.perl:1529
msgid ""
" The Cc list above has been expanded by additional\n"
" addresses found in the patch commit message. By default\n"
@@ -26843,115 +26867,115 @@
#. TRANSLATORS: Make sure to include [y] [n] [e] [q] [a] in your
#. translation. The program will only accept English input
#. at this point.
-#: git-send-email.perl:1475
+#: git-send-email.perl:1544
msgid "Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): "
msgstr ""
"Voleu enviar aquest correu electrònic? ([y]sí|[n]o|[e]dita|[q]surt|[a]tot): "
-#: git-send-email.perl:1478
+#: git-send-email.perl:1547
msgid "Send this email reply required"
msgstr "Requereix resposta en enviar el correu"
-#: git-send-email.perl:1506
+#: git-send-email.perl:1581
msgid "The required SMTP server is not properly defined."
msgstr "El servidor SMTP requerit no està correctament definit."
-#: git-send-email.perl:1553
+#: git-send-email.perl:1628
#, perl-format
msgid "Server does not support STARTTLS! %s"
msgstr "El servidor no admet STARTTLS! %s"
-#: git-send-email.perl:1558 git-send-email.perl:1562
+#: git-send-email.perl:1633 git-send-email.perl:1637
#, perl-format
msgid "STARTTLS failed! %s"
msgstr "STARTTLS ha fallat! %s"
-#: git-send-email.perl:1571
+#: git-send-email.perl:1646
msgid "Unable to initialize SMTP properly. Check config and use --smtp-debug."
msgstr ""
-"No s'ha pogut inicialitzar SMTP correctament. Comproveu-ho la configuració i "
-"useu --smtp-debug."
+"No s'ha pogut inicialitzar SMTP correctament. Comproveu-ho la configuració i"
+" useu --smtp-debug."
-#: git-send-email.perl:1589
+#: git-send-email.perl:1664
#, perl-format
msgid "Failed to send %s\n"
msgstr "S'ha produït un error en enviar %s\n"
-#: git-send-email.perl:1592
+#: git-send-email.perl:1667
#, perl-format
msgid "Dry-Sent %s\n"
msgstr "Simulació d'enviament %s\n"
-#: git-send-email.perl:1592
+#: git-send-email.perl:1667
#, perl-format
msgid "Sent %s\n"
msgstr "Enviat %s\n"
-#: git-send-email.perl:1594
+#: git-send-email.perl:1669
msgid "Dry-OK. Log says:\n"
msgstr "Simulació de correcte. El registre diu:\n"
-#: git-send-email.perl:1594
+#: git-send-email.perl:1669
msgid "OK. Log says:\n"
msgstr "Correcte. El registre diu: \n"
-#: git-send-email.perl:1606
+#: git-send-email.perl:1688
msgid "Result: "
msgstr "Resultat: "
-#: git-send-email.perl:1609
+#: git-send-email.perl:1691
msgid "Result: OK\n"
msgstr "Resultat: correcte\n"
-#: git-send-email.perl:1627
+#: git-send-email.perl:1708
#, perl-format
msgid "can't open file %s"
msgstr "no es pot obrir el fitxer %s"
-#: git-send-email.perl:1674 git-send-email.perl:1694
+#: git-send-email.perl:1756 git-send-email.perl:1776
#, perl-format
msgid "(mbox) Adding cc: %s from line '%s'\n"
msgstr "(mbox) S'està afegint cc: %s des de la línia «%s»\n"
-#: git-send-email.perl:1680
+#: git-send-email.perl:1762
#, perl-format
msgid "(mbox) Adding to: %s from line '%s'\n"
msgstr "(mbox) S'està afegint a: %s des de la línia «%s»\n"
-#: git-send-email.perl:1737
+#: git-send-email.perl:1819
#, perl-format
msgid "(non-mbox) Adding cc: %s from line '%s'\n"
msgstr "(no mbox) S'està afegint cc: %s des de la línia «%s»\n"
-#: git-send-email.perl:1772
+#: git-send-email.perl:1854
#, perl-format
msgid "(body) Adding cc: %s from line '%s'\n"
msgstr "(cos) S'està afegint cc: %s des de la línia «%s»\n"
-#: git-send-email.perl:1883
+#: git-send-email.perl:1973
#, perl-format
msgid "(%s) Could not execute '%s'"
msgstr "(%s) no s'ha pogut executar «%s»"
-#: git-send-email.perl:1890
+#: git-send-email.perl:1980
#, perl-format
msgid "(%s) Adding %s: %s from: '%s'\n"
msgstr "(%s) S'està afegint %s: %s des de: «%s»\n"
-#: git-send-email.perl:1894
+#: git-send-email.perl:1984
#, perl-format
msgid "(%s) failed to close pipe to '%s'"
msgstr "(%s) s'ha produït un error en tancar el conducte «%s»"
-#: git-send-email.perl:1924
+#: git-send-email.perl:2014
msgid "cannot send message as 7bit"
msgstr "no es pot enviar el missatge en 7 bits"
-#: git-send-email.perl:1932
+#: git-send-email.perl:2022
msgid "invalid transfer encoding"
msgstr "codificació de transferència no vàlida"
-#: git-send-email.perl:1966
+#: git-send-email.perl:2059
#, fuzzy, perl-format
msgid ""
"fatal: %s: rejected by sendemail-validate hook\n"
@@ -26961,12 +26985,12 @@
"fatal: %s: %s\n"
"avís: no s'han enviat pedaços\n"
-#: git-send-email.perl:1976 git-send-email.perl:2029 git-send-email.perl:2039
+#: git-send-email.perl:2069 git-send-email.perl:2122 git-send-email.perl:2132
#, perl-format
msgid "unable to open %s: %s\n"
msgstr "no s'ha pogut obrir %s: %s\n"
-#: git-send-email.perl:1979
+#: git-send-email.perl:2072
#, fuzzy, perl-format
msgid ""
"fatal: %s:%d is longer than 998 characters\n"
@@ -26975,15 +26999,598 @@
"fatal: %s: %s\n"
"avís: no s'han enviat pedaços\n"
-#: git-send-email.perl:1997
+#: git-send-email.perl:2090
#, perl-format
msgid "Skipping %s with backup suffix '%s'.\n"
msgstr "S'està ometent %s amb el sufix de còpia de seguretat «%s».\n"
#. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:2001
+#: git-send-email.perl:2094
#, perl-format
msgid "Do you really want to send %s? [y|N]: "
msgstr "Esteu segur que voleu enviar %s? [y|N]: "
+#, fuzzy, c-format
+#~ msgid ""
+#~ "The following pathspecs didn't match any eligible path, but they do match index\n"
+#~ "entries outside the current sparse checkout:\n"
+#~ msgstr ""
+#~ "Les següents especificacions de camí no coincideixen amb cap camí elegible, però sí que tenen índex de coincidències\n"
+#~ "entrades fora de l'actual pagament dispers:"
+#, fuzzy
+#~ msgid ""
+#~ "Disable or modify the sparsity rules if you intend to update such entries."
+#~ msgstr ""
+#~ "Desactiva o modifica les regles d'esparsitat si teniu la intenció "
+#~ "d'actualitzar aquestes entrades."
+
+#, c-format
+#~ msgid "could not set GIT_DIR to '%s'"
+#~ msgstr "no s'ha pogut establir GIT_DIR a «%s»"
+
+#, c-format
+#~ msgid "unable to unpack %s header with --allow-unknown-type"
+#~ msgstr "no s'ha pogut desempaquetar la capçalera %s amb --allow-unknown-type"
+
+#, c-format
+#~ msgid "unable to parse %s header with --allow-unknown-type"
+#~ msgstr "no s'ha pogut analitzar la capçalera %s amb --allow-unknown-type"
+
+#~ msgid "open /dev/null failed"
+#~ msgstr "s'ha produït un error en obrir /dev/null"
+
+#~ msgid ""
+#~ "after resolving the conflicts, mark the corrected paths\n"
+#~ "with 'git add <paths>' or 'git rm <paths>'\n"
+#~ "and commit the result with 'git commit'"
+#~ msgstr ""
+#~ "després de resoldre els conflictes, marqueu els camins\n"
+#~ "corregits amb «git add <camins>» o «git rm <camins>»\n"
+#~ "i cometeu el resultat amb «git commit»"
+
+#~ msgid "open /dev/null or dup failed"
+#~ msgstr "s'ha produït un error en obrir /dev/null o dup"
+
+#, fuzzy
+#~ msgid "attempting to use sparse-index without cone mode"
+#~ msgstr "s'està intentant utilitzar l'índex de dispersió sense el mode de con"
+
+#, fuzzy
+#~ msgid "unable to update cache-tree, staying full"
+#~ msgstr "no s'ha pogut actualitzar l'arbre cau"
+
+#, c-format
+#~ msgid "Could not open '%s' for writing."
+#~ msgstr "No s'ha pogut obrir «%s» per a escriptura."
+
+#, c-format
+#~ msgid "could not create archive file '%s'"
+#~ msgstr "no s'ha pogut crear el fitxer d'arxiu «%s»"
+
+#~ msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
+#~ msgstr ""
+#~ "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
+
+#, fuzzy
+#~ msgid "--bisect-next-check requires 2 or 3 arguments"
+#~ msgstr "--bisect-next-check requereix 2 o 3 arguments"
+
+#, c-format
+#~ msgid "couldn't create a new file at '%s'"
+#~ msgstr "no s'ha pogut crear el fitxer nou a «%s»"
+
+#, c-format
+#~ msgid "git commit-tree: failed to open '%s'"
+#~ msgstr "git commit-tree: ha fallat en obrir «%s»"
+
+#, c-format
+#~ msgid "cannot open packfile '%s'"
+#~ msgstr "no es pot obrir el fitxer de paquet «%s»"
+
+#~ msgid "cannot store pack file"
+#~ msgstr "no es pot emmagatzemar el fitxer empaquetat"
+
+#~ msgid "cannot store index file"
+#~ msgstr "no es pot emmagatzemar el fitxer d'índex"
+
+#~ msgid "exclude patterns are read from <file>"
+#~ msgstr "els patrons d'exclusió es llegeixen de <fitxer>"
+
+#, c-format
+#~ msgid "Unknown option for merge-recursive: -X%s"
+#~ msgstr "Opció desconeguda de merge-recursive: -X%s"
+
+#, c-format
+#~ msgid "unusable todo list: '%s'"
+#~ msgstr "llista per a fer inestable: «%s»"
+
+#~ msgid "git rebase--interactive [<options>]"
+#~ msgstr "git rebase--interactive [<opcions>]"
+
+#~ msgid "rebase merge commits"
+#~ msgstr "fes «rebase» de les comissions de fusió"
+
+#, fuzzy
+#~ msgid "keep original branch points of cousins"
+#~ msgstr "mantén els punts de branca originals dels cosins"
+
+#, fuzzy
+#~ msgid "move commits that begin with squash!/fixup!"
+#~ msgstr "mou les comissions que comencen amb squash!/fixup!"
+
+#~ msgid "sign commits"
+#~ msgstr "signa les comissions"
+
+#~ msgid "continue rebase"
+#~ msgstr "continua el «rebase»"
+
+#~ msgid "skip commit"
+#~ msgstr "omet la comissió"
+
+#~ msgid "edit the todo list"
+#~ msgstr "edita la llista a fer"
+
+#~ msgid "show the current patch"
+#~ msgstr "mostra el pedaç actual"
+
+#~ msgid "shorten commit ids in the todo list"
+#~ msgstr "escurça els ids de les comissions en la llista per a fer"
+
+#~ msgid "expand commit ids in the todo list"
+#~ msgstr "expandeix els ids de les comissions en la llista per a fer"
+
+#~ msgid "check the todo list"
+#~ msgstr "comprova la llista a fer"
+
+#~ msgid "rearrange fixup/squash lines"
+#~ msgstr "reorganitza les línies «fixup/pick»"
+
+#~ msgid "insert exec commands in todo list"
+#~ msgstr "expandeix les ordres exec en la llista per a fer"
+
+#, fuzzy
+#~ msgid "onto"
+#~ msgstr "sobre"
+
+#, fuzzy
+#~ msgid "restrict-revision"
+#~ msgstr "revisió restringida"
+
+#, fuzzy
+#~ msgid "restrict revision"
+#~ msgstr "restringeix la revisió"
+
+#, fuzzy
+#~ msgid "squash-onto"
+#~ msgstr "squash-onto"
+
+#, fuzzy
+#~ msgid "squash onto"
+#~ msgstr "carabassa a"
+
+#, fuzzy
+#~ msgid "the upstream commit"
+#~ msgstr "la comissió principal"
+
+#, fuzzy
+#~ msgid "head-name"
+#~ msgstr "nom-cap"
+
+#, fuzzy
+#~ msgid "head name"
+#~ msgstr "nom del cap"
+
+#, fuzzy
+#~ msgid "rebase strategy"
+#~ msgstr "estratègia de rebase"
+
+#, fuzzy
+#~ msgid "strategy-opts"
+#~ msgstr "opcions estratègiques"
+
+#, fuzzy
+#~ msgid "strategy options"
+#~ msgstr "opcions d'estratègia"
+
+#, fuzzy
+#~ msgid "switch-to"
+#~ msgstr "canvia a"
+
+#, fuzzy
+#~ msgid "the branch or commit to checkout"
+#~ msgstr "la branca o entrega a agafar"
+
+#, fuzzy
+#~ msgid "onto-name"
+#~ msgstr "ont-name"
+
+#, fuzzy
+#~ msgid "onto name"
+#~ msgstr "al nom"
+
+#, fuzzy
+#~ msgid "cmd"
+#~ msgstr "cmd"
+
+#~ msgid "the command to run"
+#~ msgstr "l'ordre a executar"
+
+#, fuzzy
+#~ msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
+#~ msgstr "--[no-]rebase-cosins no té cap efecte sense --rebase-merges"
+
+#~ msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
+#~ msgstr "no es pot combinar «--preserve-merges» amb «--rebase-merges»"
+
+#~ msgid ""
+#~ "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
+#~ msgstr ""
+#~ "error: no es pot combinar «--preserve-merges» amb «--reschedule-failed-exec»"
+
+#, fuzzy
+#~ msgid ""
+#~ "git submodule--helper add-clone [<options>...] --url <url> --path <path> "
+#~ "--name <name>"
+#~ msgstr "git submodule--helper init [<opcions>] [<camí>]"
+
+#, c-format
+#~ msgid "failed to create file %s"
+#~ msgstr "s'ha produït un error en crear el fitxer %s"
+
+#~ msgid "exit immediately after initial ref advertisement"
+#~ msgstr "surt immediatament després de l'anunci inicial de referència"
+
+#, fuzzy, c-format
+#~ msgid "socket/pipe already in use: '%s'"
+#~ msgstr "el sòcol/pipe ja s'està utilitzant: «%s»"
+
+#, fuzzy, c-format
+#~ msgid "could not start server on: '%s'"
+#~ msgstr "no s'ha pogut fer «stat» sobre el fitxer «%s»"
+
+#, fuzzy
+#~ msgid "could not spawn daemon in the background"
+#~ msgstr "no s'ha pogut crear el dimoni en segon pla"
+
+#, fuzzy
+#~ msgid "waitpid failed"
+#~ msgstr "«setsid» ha fallat"
+
+#, fuzzy
+#~ msgid "daemon not online yet"
+#~ msgstr "El dimoni encara no està en línia"
+
+#, fuzzy
+#~ msgid "daemon failed to start"
+#~ msgstr "s'ha produït un error en fer stat a %s"
+
+#, fuzzy
+#~ msgid "waitpid is confused"
+#~ msgstr "waitpid està confós"
+
+#, fuzzy
+#~ msgid "daemon has not shutdown yet"
+#~ msgstr "El dimoni encara no s'ha apagat"
+
+#, fuzzy
+#~ msgid "Protocol restrictions not supported with cURL < 7.19.4"
+#~ msgstr "Restriccions de protocol no compatibles amb cURL < 7.19.4"
+
+#, sh-format
+#~ msgid "running $command"
+#~ msgstr "s'està executant $command"
+
+#, sh-format
+#~ msgid "'$sm_path' does not have a commit checked out"
+#~ msgstr "«$sm_path» no té una comissió agafada"
+
+#, sh-format
+#~ msgid "Submodule path '$displaypath': '$command $sha1'"
+#~ msgstr "Camí de submòdul «$displaypath»: «$command $sha1»"
+
+#~ msgid "Applied autostash."
+#~ msgstr "S'ha aplicat l'«autostash»."
+
+#, sh-format
+#~ msgid "Cannot store $stash_sha1"
+#~ msgstr "No es pot emmagatzemar $stash_sha1"
+
+#~ msgid ""
+#~ "Applying autostash resulted in conflicts.\n"
+#~ "Your changes are safe in the stash.\n"
+#~ "You can run \"git stash pop\" or \"git stash drop\" at any time.\n"
+#~ msgstr ""
+#~ "L'aplicació del «stash» automàtic ha resultat en conflictes.\n"
+#~ "Els vostres canvis estan segurs en el «stash».\n"
+#~ "Podeu executar «git stash pop» o «git stash drop» en qualsevol moment.\n"
+
+#, sh-format
+#~ msgid "Rebasing ($new_count/$total)"
+#~ msgstr "S'està fent «rebase» ($new_count/$total)"
+
+#~ msgid ""
+#~ "\n"
+#~ "Commands:\n"
+#~ "p, pick <commit> = use commit\n"
+#~ "r, reword <commit> = use commit, but edit the commit message\n"
+#~ "e, edit <commit> = use commit, but stop for amending\n"
+#~ "s, squash <commit> = use commit, but meld into previous commit\n"
+#~ "f, fixup <commit> = like \"squash\", but discard this commit's log message\n"
+#~ "x, exec <commit> = run command (the rest of the line) using shell\n"
+#~ "d, drop <commit> = remove commit\n"
+#~ "l, label <label> = label current HEAD with a name\n"
+#~ "t, reset <label> = reset HEAD to a label\n"
+#~ "m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]\n"
+#~ ". create a merge commit using the original merge commit's\n"
+#~ ". message (or the oneline, if no original merge commit was\n"
+#~ ". specified). Use -c <commit> to reword the commit message.\n"
+#~ "\n"
+#~ "These lines can be re-ordered; they are executed from top to bottom.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Ordres:\n"
+#~ " p, pick <comissió> = usa la comissió\n"
+#~ " r, reword <comissió> = usa la comissió, però edita el missatge de comissió\n"
+#~ " e, edit <comissió> = usa la comissió, però atura't per a esmenar\n"
+#~ " s, squash <comissió> = usa la comissió, però fusiona-la a la comissió prèvia\n"
+#~ " f, fixup <comissió> = com a «squash», però descarta el missatge de registre d'aquesta comissió\n"
+#~ "x, exec <comissió> = executa l'ordre (la resta de la línia) usant l'intèrpret d'ordres\n"
+#~ "d, drop <comissió> = elimina la comissió\n"
+#~ "l, label <etiqueta> = etiqueta la HEAD actual amb un nom\n"
+#~ "t, reset <etiqueta> = reinicia HEAD a una etiqueta \n"
+#~ "m, merge [-C <comissió> | -c <comissió>] <etiqueta> [# <oneline>]\n"
+#~ ". crea una comissió de fusió usant el missatge de la comissió\n"
+#~ ". de fusió original (o línia única, si no hi ha cap comissió de fusió original\n"
+#~ ". especificada). Useu -c <comissió> per a reescriure el missatge de publicació.\n"
+#~ "\n"
+#~ "Es pot canviar l'ordre d'aquestes línies; s'executen de dalt a baix.\n"
+
+#, sh-format
+#~ msgid ""
+#~ "You can amend the commit now, with\n"
+#~ "\n"
+#~ "\tgit commit --amend $gpg_sign_opt_quoted\n"
+#~ "\n"
+#~ "Once you are satisfied with your changes, run\n"
+#~ "\n"
+#~ "\tgit rebase --continue"
+#~ msgstr ""
+#~ "Podeu esmenar la comissió ara, amb\n"
+#~ "\n"
+#~ "\tgit commit --amend $gpg_sign_opt_quoted\n"
+#~ "\n"
+#~ "Una vegada que estigueu satisfet amb els vostres canvis, executeu\n"
+#~ "\n"
+#~ "\tgit rebase --continue"
+
+#, sh-format
+#~ msgid "$sha1: not a commit that can be picked"
+#~ msgstr "$sha1: no és una comissió que es pugui triar"
+
+#, sh-format
+#~ msgid "Invalid commit name: $sha1"
+#~ msgstr "Nom de comissió no vàlid: $sha1"
+
+#~ msgid "Cannot write current commit's replacement sha1"
+#~ msgstr "No es pot escriure el sha1 reemplaçant de la comissió actual"
+
+#, sh-format
+#~ msgid "Fast-forward to $sha1"
+#~ msgstr "Avanç ràpid a $sha1"
+
+#, sh-format
+#~ msgid "Cannot fast-forward to $sha1"
+#~ msgstr "No es pot avançar ràpidament a $sha1"
+
+#, sh-format
+#~ msgid "Cannot move HEAD to $first_parent"
+#~ msgstr "No es pot moure HEAD a $first_parent"
+
+#, sh-format
+#~ msgid "Refusing to squash a merge: $sha1"
+#~ msgstr "S'està refusant fer «squash» a una fusió: $sha1"
+
+#, sh-format
+#~ msgid "Error redoing merge $sha1"
+#~ msgstr "Error en refer la fusió $sha1"
+
+#, sh-format
+#~ msgid "Could not pick $sha1"
+#~ msgstr "No s'ha pogut triar $sha1"
+
+#, sh-format
+#~ msgid "This is the commit message #${n}:"
+#~ msgstr "Aquest és el missatge de comissió núm. ${n}:"
+
+#, sh-format
+#~ msgid "The commit message #${n} will be skipped:"
+#~ msgstr "El missatge de comissió núm. ${n} s'ometrà:"
+
+#, sh-format
+#~ msgid "This is a combination of $count commit."
+#~ msgid_plural "This is a combination of $count commits."
+#~ msgstr[0] "Això és una combinació d'$count comissió."
+#~ msgstr[1] "Això és una combinació de $count comissions."
+
+#, sh-format
+#~ msgid "Cannot write $fixup_msg"
+#~ msgstr "No es pot escriure $fixup_msg"
+
+#~ msgid "This is a combination of 2 commits."
+#~ msgstr "Això és una combinació de 2 comissions."
+
+#, sh-format
+#~ msgid "Could not apply $sha1... $rest"
+#~ msgstr "No s'ha pogut aplicar $sha1... $rest"
+
+#, sh-format
+#~ msgid ""
+#~ "Could not amend commit after successfully picking $sha1... $rest\n"
+#~ "This is most likely due to an empty commit message, or the pre-commit hook\n"
+#~ "failed. If the pre-commit hook failed, you may need to resolve the issue before\n"
+#~ "you are able to reword the commit."
+#~ msgstr ""
+#~ "No s'ha pogut esmenar la comissió després de triar correctament $sha1... $rest\n"
+#~ "Això és probablement a causa d'un missatge de comissió buit, o el lligam de\n"
+#~ "precomissió ha fallat. Si el lligam de precomissió ha fallat, pot ser que\n"
+#~ "necessiteu resoldre el problema abans que pugueu canviar el missatge de\n"
+#~ "comissió."
+
+#, sh-format
+#~ msgid "Stopped at $sha1_abbrev... $rest"
+#~ msgstr "S'ha aturat a $sha1_abbrev... $rest"
+
+#, sh-format
+#~ msgid "Cannot '$squash_style' without a previous commit"
+#~ msgstr "No es pot fer «$squash_style» sense una comissió prèvia"
+
+#, sh-format
+#~ msgid "Executing: $rest"
+#~ msgstr "S'està executant: $rest"
+
+#, sh-format
+#~ msgid "Execution failed: $rest"
+#~ msgstr "L'execució ha fallat: $rest"
+
+#~ msgid "and made changes to the index and/or the working tree"
+#~ msgstr "i ha fet canvis a l'índex o l'arbre de treball"
+
+#~ msgid ""
+#~ "You can fix the problem, and then run\n"
+#~ "\n"
+#~ "\tgit rebase --continue"
+#~ msgstr ""
+#~ "Podeu arreglar el problema, i llavors executeu\n"
+#~ "\n"
+#~ "\tgit rebase --continue"
+
+#, sh-format
+#~ msgid ""
+#~ "Execution succeeded: $rest\n"
+#~ "but left changes to the index and/or the working tree\n"
+#~ "Commit or stash your changes, and then run\n"
+#~ "\n"
+#~ "\tgit rebase --continue"
+#~ msgstr ""
+#~ "L'execució ha tingut èxit: $rest\n"
+#~ "però ha deixat canvis a l'índex o l'arbre de treball\n"
+#~ "Cometeu o emmagatzemeu els vostres canvis, i llavors executeu\n"
+#~ "\n"
+#~ "\tgit rebase --continue"
+
+#, sh-format
+#~ msgid "Unknown command: $command $sha1 $rest"
+#~ msgstr "Ordre desconeguda: $command $sha1 $rest"
+
+#~ msgid "Please fix this using 'git rebase --edit-todo'."
+#~ msgstr "Corregiu-ho usant «git rebase --edit-todo»."
+
+#, sh-format
+#~ msgid "Successfully rebased and updated $head_name."
+#~ msgstr "S'ha fet «rebase» i actualitzat $head_name amb èxit."
+
+#~ msgid "Could not remove CHERRY_PICK_HEAD"
+#~ msgstr "No s'ha pogut eliminar CHERRY_PICK_HEAD"
+
+#, sh-format
+#~ msgid ""
+#~ "You have staged changes in your working tree.\n"
+#~ "If these changes are meant to be\n"
+#~ "squashed into the previous commit, run:\n"
+#~ "\n"
+#~ " git commit --amend $gpg_sign_opt_quoted\n"
+#~ "\n"
+#~ "If they are meant to go into a new commit, run:\n"
+#~ "\n"
+#~ " git commit $gpg_sign_opt_quoted\n"
+#~ "\n"
+#~ "In both cases, once you're done, continue with:\n"
+#~ "\n"
+#~ " git rebase --continue\n"
+#~ msgstr ""
+#~ "Teniu canvis «stage» en el vostre arbre de treball.\n"
+#~ "Si aquests canvis són per fer «squash»\n"
+#~ "a la comissió prèvia, executeu:\n"
+#~ "\n"
+#~ " git commit --amend $gpg_sign_opt_quoted\n"
+#~ "\n"
+#~ "Si són per a formar una comissió nova, executeu:\n"
+#~ "\n"
+#~ " git commit $gpg_sign_opt_quoted\n"
+#~ "\n"
+#~ "En ambdós casos, quan hàgiu terminat, continueu amb:\n"
+#~ "\n"
+#~ " git rebase --continue\n"
+
+#~ msgid "Error trying to find the author identity to amend commit"
+#~ msgstr ""
+#~ "Hi ha hagut un error en intentar trobar la identitat d'autor per a esmenar "
+#~ "la comissió"
+
+#~ msgid ""
+#~ "You have uncommitted changes in your working tree. Please commit them\n"
+#~ "first and then run 'git rebase --continue' again."
+#~ msgstr ""
+#~ "Teniu canvis no comesos en el vostre arbre de treball. \n"
+#~ "Primer cometeu-los i després executeu «git rebase --continue» de nou."
+
+#~ msgid "Could not commit staged changes."
+#~ msgstr "No s'han pogut cometre els canvis «staged»."
+
+#~ msgid "Could not execute editor"
+#~ msgstr "No s'ha pogut executar l'editor"
+
+#, sh-format
+#~ msgid "Could not checkout $switch_to"
+#~ msgstr "No s'ha pogut agafar $switch_to"
+
+#~ msgid "No HEAD?"
+#~ msgstr "No hi ha cap HEAD?"
+
+#, sh-format
+#~ msgid "Could not create temporary $state_dir"
+#~ msgstr "No s'ha pogut crear el $state_dir temporal"
+
+#~ msgid "Could not mark as interactive"
+#~ msgstr "No s'ha pogut marcar com a interactiu"
+
+#, sh-format
+#~ msgid "Rebase $shortrevisions onto $shortonto ($todocount command)"
+#~ msgid_plural "Rebase $shortrevisions onto $shortonto ($todocount commands)"
+#~ msgstr[0] "Fes «rebase» $shortrevisions sobre $shortonto ($todocount ordre)"
+#~ msgstr[1] "Fes «rebase» $shortrevisions sobre $shortonto ($todocount ordres)"
+
+#~ msgid "Note that empty commits are commented out"
+#~ msgstr "Tingueu en compte que les comissions buides estan comentades"
+
+#~ msgid "Could not init rewritten commits"
+#~ msgstr "No s'han pogut iniciar les comissions reescrites"
+
+#~ msgid "Cannot rebase: You have unstaged changes."
+#~ msgstr "No es pot fer «rebase»: teniu canvis «unstaged»."
+
+#~ msgid "Cannot pull with rebase: You have unstaged changes."
+#~ msgstr "No es pot baixar fent «rebase»: Teniu canvis «unstaged»."
+
+#~ msgid "Cannot rebase: Your index contains uncommitted changes."
+#~ msgstr "No es pot fer «rebase»: El vostre índex conté canvis sense cometre."
+
+#~ msgid "Cannot pull with rebase: Your index contains uncommitted changes."
+#~ msgstr ""
+#~ "No es pot baixar fent «rebase»: El vostre índex conté canvis sense cometre."
+
+#~ msgid "unable to write stateless separator packet"
+#~ msgstr "no s'ha pogut escriure el paquet de separació sense estat"
+
+#~ msgid "git merge --abort"
+#~ msgstr "git merge --abort"
+
+#~ msgid "git merge --continue"
+#~ msgstr "git merge --continue"
+
+#~ msgid "git stash clear"
+#~ msgstr "git stash clear"
+
+#~ msgid "remote server sent stateless separator"
+#~ msgstr "el servidor remot ha enviat un separador sense estat"
diff --git a/po/de.po b/po/de.po
index cad96a0..f00c21d 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: 2021-08-14 07:56+0800\n"
-"PO-Revision-Date: 2021-05-23 18:32+0200\n"
+"POT-Creation-Date: 2021-11-10 08:55+0800\n"
+"PO-Revision-Date: 2021-11-07 19:48+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"
@@ -19,213 +19,213 @@
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
"X-Generator: Poedit 2.4.3\n"
-#: add-interactive.c:376
+#: add-interactive.c:380
#, c-format
msgid "Huh (%s)?"
msgstr "Wie bitte (%s)?"
-#: add-interactive.c:529 add-interactive.c:830 reset.c:64 sequencer.c:3493
-#: sequencer.c:3964 sequencer.c:4119 builtin/rebase.c:1528
-#: builtin/rebase.c:1953
+#: add-interactive.c:533 add-interactive.c:834 reset.c:65 sequencer.c:3512
+#: sequencer.c:3979 sequencer.c:4141 builtin/rebase.c:1233
+#: builtin/rebase.c:1642
msgid "could not read index"
msgstr "Index konnte nicht gelesen werden"
-#: add-interactive.c:584 git-add--interactive.perl:269
+#: add-interactive.c:588 git-add--interactive.perl:269
#: git-add--interactive.perl:294
msgid "binary"
msgstr "Binär"
-#: add-interactive.c:642 git-add--interactive.perl:278
+#: add-interactive.c:646 git-add--interactive.perl:278
#: git-add--interactive.perl:332
msgid "nothing"
msgstr "Nichts"
-#: add-interactive.c:643 git-add--interactive.perl:314
+#: add-interactive.c:647 git-add--interactive.perl:314
#: git-add--interactive.perl:329
msgid "unchanged"
msgstr "unverändert"
-#: add-interactive.c:680 git-add--interactive.perl:641
+#: add-interactive.c:684 git-add--interactive.perl:641
msgid "Update"
msgstr "Aktualisieren"
-#: add-interactive.c:697 add-interactive.c:885
+#: add-interactive.c:701 add-interactive.c:889
#, c-format
msgid "could not stage '%s'"
msgstr "Konnte '%s' nicht zum Commit vormerken."
-#: add-interactive.c:703 add-interactive.c:892 reset.c:88 sequencer.c:3707
+#: add-interactive.c:707 add-interactive.c:896 reset.c:89 sequencer.c:3718
msgid "could not write index"
msgstr "konnte Index nicht schreiben"
-#: add-interactive.c:706 git-add--interactive.perl:626
+#: add-interactive.c:710 git-add--interactive.perl:626
#, c-format, perl-format
msgid "updated %d path\n"
msgid_plural "updated %d paths\n"
msgstr[0] "%d Pfad aktualisiert\n"
msgstr[1] "%d Pfade aktualisiert\n"
-#: add-interactive.c:724 git-add--interactive.perl:676
+#: add-interactive.c:728 git-add--interactive.perl:676
#, c-format, perl-format
msgid "note: %s is untracked now.\n"
msgstr "Hinweis: %s ist nun unversioniert.\n"
-#: add-interactive.c:729 apply.c:4127 builtin/checkout.c:298
-#: builtin/reset.c:145
+#: add-interactive.c:733 apply.c:4149 builtin/checkout.c:298
+#: builtin/reset.c:151
#, c-format
msgid "make_cache_entry failed for path '%s'"
msgstr "make_cache_entry für Pfad '%s' fehlgeschlagen"
-#: add-interactive.c:759 git-add--interactive.perl:653
+#: add-interactive.c:763 git-add--interactive.perl:653
msgid "Revert"
msgstr "Revert"
-#: add-interactive.c:775
+#: add-interactive.c:779
msgid "Could not parse HEAD^{tree}"
msgstr "Konnte HEAD^{tree} nicht parsen."
-#: add-interactive.c:813 git-add--interactive.perl:629
+#: add-interactive.c:817 git-add--interactive.perl:629
#, c-format, perl-format
msgid "reverted %d path\n"
msgid_plural "reverted %d paths\n"
msgstr[0] "%d Pfad wiederhergestellt\n"
msgstr[1] "%d Pfade wiederhergestellt\n"
-#: add-interactive.c:864 git-add--interactive.perl:693
+#: add-interactive.c:868 git-add--interactive.perl:693
#, c-format
msgid "No untracked files.\n"
msgstr "Keine unversionierten Dateien.\n"
-#: add-interactive.c:868 git-add--interactive.perl:687
+#: add-interactive.c:872 git-add--interactive.perl:687
msgid "Add untracked"
msgstr "Unversionierte Dateien hinzufügen"
-#: add-interactive.c:895 git-add--interactive.perl:623
+#: add-interactive.c:899 git-add--interactive.perl:623
#, c-format, perl-format
msgid "added %d path\n"
msgid_plural "added %d paths\n"
msgstr[0] "%d Pfad hinzugefügt\n"
msgstr[1] "%d Pfade hinzugefügt\n"
-#: add-interactive.c:925
+#: add-interactive.c:929
#, c-format
msgid "ignoring unmerged: %s"
msgstr "Ignoriere nicht zusammengeführte Datei: %s"
-#: add-interactive.c:937 add-patch.c:1752 git-add--interactive.perl:1369
+#: add-interactive.c:941 add-patch.c:1752 git-add--interactive.perl:1369
#, c-format
msgid "Only binary files changed.\n"
msgstr "Nur Binärdateien geändert.\n"
-#: add-interactive.c:939 add-patch.c:1750 git-add--interactive.perl:1371
+#: add-interactive.c:943 add-patch.c:1750 git-add--interactive.perl:1371
#, c-format
msgid "No changes.\n"
msgstr "Keine Änderungen.\n"
-#: add-interactive.c:943 git-add--interactive.perl:1379
+#: add-interactive.c:947 git-add--interactive.perl:1379
msgid "Patch update"
msgstr "Patch Aktualisierung"
-#: add-interactive.c:982 git-add--interactive.perl:1792
+#: add-interactive.c:986 git-add--interactive.perl:1792
msgid "Review diff"
msgstr "Diff überprüfen"
-#: add-interactive.c:1010
+#: add-interactive.c:1014
msgid "show paths with changes"
msgstr "Zeige Pfade mit Änderungen"
-#: add-interactive.c:1012
+#: add-interactive.c:1016
msgid "add working tree state to the staged set of changes"
msgstr "Zustand des Arbeitsverzeichnisses zum Commit vormerken"
-#: add-interactive.c:1014
+#: add-interactive.c:1018
msgid "revert staged set of changes back to the HEAD version"
msgstr "Zum Commit vorgemerkte Änderungen auf HEAD-Version zurücksetzen"
-#: add-interactive.c:1016
+#: add-interactive.c:1020
msgid "pick hunks and update selectively"
msgstr "Blöcke und Änderung gezielt auswählen"
-#: add-interactive.c:1018
+#: add-interactive.c:1022
msgid "view diff between HEAD and index"
msgstr "Differenz zwischen HEAD und Index ansehen"
-#: add-interactive.c:1020
+#: add-interactive.c:1024
msgid "add contents of untracked files to the staged set of changes"
msgstr "Inhalte von unversionierten Dateien zum Commit vormerken"
-#: add-interactive.c:1028 add-interactive.c:1077
+#: add-interactive.c:1032 add-interactive.c:1081
msgid "Prompt help:"
msgstr "Hilfe für Eingaben:"
-#: add-interactive.c:1030
+#: add-interactive.c:1034
msgid "select a single item"
msgstr "Ein einzelnes Element auswählen"
-#: add-interactive.c:1032
+#: add-interactive.c:1036
msgid "select a range of items"
msgstr "Eine Reihe von Elementen auswählen"
-#: add-interactive.c:1034
+#: add-interactive.c:1038
msgid "select multiple ranges"
msgstr "Mehrere Reihen auswählen"
-#: add-interactive.c:1036 add-interactive.c:1081
+#: add-interactive.c:1040 add-interactive.c:1085
msgid "select item based on unique prefix"
msgstr "Element basierend auf eindeutigen Präfix auswählen"
-#: add-interactive.c:1038
+#: add-interactive.c:1042
msgid "unselect specified items"
msgstr "Angegebene Elemente abwählen"
-#: add-interactive.c:1040
+#: add-interactive.c:1044
msgid "choose all items"
msgstr "Alle Elemente auswählen"
-#: add-interactive.c:1042
+#: add-interactive.c:1046
msgid "(empty) finish selecting"
msgstr "(leer) Auswählen beenden"
-#: add-interactive.c:1079
+#: add-interactive.c:1083
msgid "select a numbered item"
msgstr "Ein nummeriertes Element auswählen"
-#: add-interactive.c:1083
+#: add-interactive.c:1087
msgid "(empty) select nothing"
msgstr "(leer) nichts auswählen"
-#: add-interactive.c:1091 builtin/clean.c:813 git-add--interactive.perl:1896
+#: add-interactive.c:1095 builtin/clean.c:813 git-add--interactive.perl:1896
msgid "*** Commands ***"
msgstr "*** Befehle ***"
-#: add-interactive.c:1092 builtin/clean.c:814 git-add--interactive.perl:1893
+#: add-interactive.c:1096 builtin/clean.c:814 git-add--interactive.perl:1893
msgid "What now"
msgstr "Was nun"
-#: add-interactive.c:1144 git-add--interactive.perl:213
+#: add-interactive.c:1148 git-add--interactive.perl:213
msgid "staged"
msgstr "zur Staging-Area hinzugefügt"
-#: add-interactive.c:1144 git-add--interactive.perl:213
+#: add-interactive.c:1148 git-add--interactive.perl:213
msgid "unstaged"
msgstr "aus Staging-Area entfernt"
-#: add-interactive.c:1144 apply.c:4994 apply.c:4997 builtin/am.c:2309
-#: builtin/am.c:2312 builtin/bugreport.c:135 builtin/clone.c:128
-#: builtin/fetch.c:152 builtin/merge.c:285 builtin/pull.c:190
-#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1886
-#: builtin/submodule--helper.c:1889 builtin/submodule--helper.c:2343
-#: builtin/submodule--helper.c:2346 builtin/submodule--helper.c:2589
-#: builtin/submodule--helper.c:2890 builtin/submodule--helper.c:2893
+#: add-interactive.c:1148 apply.c:5016 apply.c:5019 builtin/am.c:2311
+#: builtin/am.c:2314 builtin/bugreport.c:107 builtin/clone.c:128
+#: builtin/fetch.c:152 builtin/merge.c:286 builtin/pull.c:194
+#: builtin/submodule--helper.c:404 builtin/submodule--helper.c:1857
+#: builtin/submodule--helper.c:1860 builtin/submodule--helper.c:2503
+#: builtin/submodule--helper.c:2506 builtin/submodule--helper.c:2573
+#: builtin/submodule--helper.c:2578 builtin/submodule--helper.c:2811
#: git-add--interactive.perl:213
msgid "path"
msgstr "Pfad"
-#: add-interactive.c:1151
+#: add-interactive.c:1155
msgid "could not refresh index"
msgstr "Index konnte nicht aktualisiert werden"
-#: add-interactive.c:1165 builtin/clean.c:778 git-add--interactive.perl:1803
+#: add-interactive.c:1169 builtin/clean.c:778 git-add--interactive.perl:1803
#, c-format
msgid "Bye.\n"
msgstr "Tschüss.\n"
@@ -762,7 +762,7 @@
msgid "'git apply' failed"
msgstr "'git apply' schlug fehl"
-#: advice.c:145
+#: advice.c:78
#, c-format
msgid ""
"\n"
@@ -771,43 +771,43 @@
"\n"
"Deaktivieren Sie diese Nachricht mit \"git config advice.%s false\""
-#: advice.c:161
+#: advice.c:94
#, c-format
msgid "%shint: %.*s%s\n"
msgstr "%sHinweis: %.*s%s\n"
-#: advice.c:252
+#: advice.c:178
msgid "Cherry-picking is not possible because you have unmerged files."
msgstr ""
"Cherry-Picken ist nicht möglich, weil Sie nicht zusammengeführte Dateien "
"haben."
-#: advice.c:254
+#: advice.c:180
msgid "Committing is not possible because you have unmerged files."
msgstr ""
"Committen ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
-#: advice.c:256
+#: advice.c:182
msgid "Merging is not possible because you have unmerged files."
msgstr ""
"Mergen ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
-#: advice.c:258
+#: advice.c:184
msgid "Pulling is not possible because you have unmerged files."
msgstr ""
"Pullen ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
-#: advice.c:260
+#: advice.c:186
msgid "Reverting is not possible because you have unmerged files."
msgstr ""
"Reverten ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
-#: advice.c:262
+#: advice.c:188
#, c-format
msgid "It is not possible to %s because you have unmerged files."
msgstr "%s ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
-#: advice.c:270
+#: advice.c:196
msgid ""
"Fix them up in the work tree, and then use 'git add/rm <file>'\n"
"as appropriate to mark resolution and make a commit."
@@ -816,40 +816,49 @@
"dann 'git add/rm <Datei>', um die Auflösung entsprechend zu markieren\n"
"und zu committen."
-#: advice.c:278
+#: advice.c:204
msgid "Exiting because of an unresolved conflict."
msgstr "Beende wegen unaufgelöstem Konflikt."
-#: advice.c:283 builtin/merge.c:1375
+#: advice.c:209 builtin/merge.c:1379
msgid "You have not concluded your merge (MERGE_HEAD exists)."
msgstr "Sie haben Ihren Merge nicht abgeschlossen (MERGE_HEAD existiert)."
-#: advice.c:285
+#: advice.c:211
msgid "Please, commit your changes before merging."
msgstr "Bitte committen Sie Ihre Änderungen, bevor Sie mergen."
-#: advice.c:286
+#: advice.c:212
msgid "Exiting because of unfinished merge."
msgstr "Beende wegen nicht abgeschlossenem Merge."
-#: advice.c:296
+#: advice.c:217
+msgid "Not possible to fast-forward, aborting."
+msgstr "Vorspulen nicht möglich, breche ab."
+
+#: advice.c:227
#, c-format
msgid ""
-"The following pathspecs didn't match any eligible path, but they do match "
-"index\n"
-"entries outside the current sparse checkout:\n"
+"The following paths and/or pathspecs matched paths that exist\n"
+"outside of your sparse-checkout definition, so will not be\n"
+"updated in the index:\n"
msgstr ""
-"Die folgenden Pfadspezifikationen entsprachen keinem geeigneten Pfad, aber\n"
-"entsprechen Index-Einträgen außerhalb des aktuellen partiellen Checkouts:\n"
+"Die folgenden Pfade und/oder Pfadspezifikationen entsprachen keinem Pfad,\n"
+"der außerhalb Ihrer partiellen Checkout-Definition existierte, weshalb\n"
+"diese nicht im Index aktualisiert werden:\n"
-#: advice.c:303
+#: advice.c:234
msgid ""
-"Disable or modify the sparsity rules if you intend to update such entries."
+"If you intend to update such entries, try one of the following:\n"
+"* Use the --sparse option.\n"
+"* Disable or modify the sparsity rules."
msgstr ""
-"Deaktivieren oder verändern Sie die Regeln für partielle Checkouts, wenn Sie "
-"solche Einträge aktualisieren möchten."
+"Wenn Sie beabsichtigen, solche Einträge zu aktualisieren, versuchen Sie es\n"
+"mit einem der folgenden Schritte:\n"
+"* Verwenden Sie die Option --sparse.\n"
+"* Deaktivieren oder ändern Sie die Regeln für partielle Checkouts."
-#: advice.c:310
+#: advice.c:242
#, c-format
msgid ""
"Note: switching to '%s'.\n"
@@ -1035,37 +1044,37 @@
msgid "** warning: file %s becomes empty but is not deleted"
msgstr "** Warnung: Datei %s wird leer, aber nicht entfernt."
-#: apply.c:1977
+#: apply.c:1978
#, c-format
msgid "corrupt binary patch at line %d: %.*s"
msgstr "fehlerhafter Binär-Patch bei Zeile %d: %.*s"
-#: apply.c:2014
+#: apply.c:2015
#, c-format
msgid "unrecognized binary patch at line %d"
msgstr "nicht erkannter Binär-Patch bei Zeile %d"
-#: apply.c:2176
+#: apply.c:2177
#, c-format
msgid "patch with only garbage at line %d"
msgstr "Patch mit nutzlosen Informationen bei Zeile %d"
-#: apply.c:2262
+#: apply.c:2263
#, c-format
msgid "unable to read symlink %s"
msgstr "konnte symbolische Verknüpfung %s nicht lesen"
-#: apply.c:2266
+#: apply.c:2267
#, c-format
msgid "unable to open or read %s"
msgstr "konnte %s nicht öffnen oder lesen"
-#: apply.c:2935
+#: apply.c:2936
#, c-format
msgid "invalid start of line: '%c'"
msgstr "Ungültiger Zeilenanfang: '%c'"
-#: apply.c:3056
+#: apply.c:3057
#, c-format
msgid "Hunk #%d succeeded at %d (offset %d line)."
msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
@@ -1073,12 +1082,12 @@
msgstr[1] ""
"Patch-Bereich #%d erfolgreich angewendet bei %d (%d Zeilen versetzt)"
-#: apply.c:3068
+#: apply.c:3069
#, c-format
msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
msgstr "Kontext reduziert zu (%ld/%ld), um Patch-Bereich bei %d anzuwenden"
-#: apply.c:3074
+#: apply.c:3075
#, c-format
msgid ""
"while searching for:\n"
@@ -1087,25 +1096,25 @@
"bei der Suche nach:\n"
"%.*s"
-#: apply.c:3096
+#: apply.c:3097
#, c-format
msgid "missing binary patch data for '%s'"
msgstr "keine Daten in Binär-Patch für '%s'"
-#: apply.c:3104
+#: apply.c:3105
#, c-format
msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
msgstr ""
"kann binären Patch nicht in umgekehrter Reihenfolge anwenden ohne einen\n"
"umgekehrten Patch-Block auf '%s'"
-#: apply.c:3151
+#: apply.c:3152
#, c-format
msgid "cannot apply binary patch to '%s' without full index line"
msgstr ""
"kann binären Patch auf '%s' nicht ohne eine vollständige Index-Zeile anwenden"
-#: apply.c:3162
+#: apply.c:3163
#, c-format
msgid ""
"the patch applies to '%s' (%s), which does not match the current contents."
@@ -1113,433 +1122,434 @@
"der Patch wird angewendet auf '%s' (%s), was nicht den aktuellen Inhalten\n"
"entspricht"
-#: apply.c:3170
+#: apply.c:3171
#, c-format
msgid "the patch applies to an empty '%s' but it is not empty"
msgstr "der Patch wird auf ein leeres '%s' angewendet, was aber nicht leer ist"
-#: apply.c:3188
+#: apply.c:3189
#, c-format
msgid "the necessary postimage %s for '%s' cannot be read"
msgstr "das erforderliche Postimage %s für '%s' kann nicht gelesen werden"
-#: apply.c:3201
+#: apply.c:3202
#, c-format
msgid "binary patch does not apply to '%s'"
msgstr "Konnte Binär-Patch nicht auf '%s' anwenden"
-#: apply.c:3208
+#: apply.c:3209
#, c-format
msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
msgstr ""
"Binär-Patch für '%s' erzeugt falsches Ergebnis (erwartete %s, bekam %s)"
-#: apply.c:3229
+#: apply.c:3230
#, c-format
msgid "patch failed: %s:%ld"
msgstr "Anwendung des Patches fehlgeschlagen: %s:%ld"
-#: apply.c:3352
+#: apply.c:3353
#, c-format
msgid "cannot checkout %s"
msgstr "kann %s nicht auschecken"
-#: apply.c:3404 apply.c:3415 apply.c:3461 midx.c:98 pack-revindex.c:214
+#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:102 pack-revindex.c:214
#: setup.c:308
#, c-format
msgid "failed to read %s"
msgstr "Fehler beim Lesen von %s"
-#: apply.c:3412
+#: apply.c:3413
#, c-format
msgid "reading from '%s' beyond a symbolic link"
msgstr "'%s' ist hinter einer symbolischen Verknüpfung"
-#: apply.c:3441 apply.c:3687
+#: apply.c:3442 apply.c:3709
#, c-format
msgid "path %s has been renamed/deleted"
msgstr "Pfad %s wurde umbenannt/gelöscht"
-#: apply.c:3527 apply.c:3702
+#: apply.c:3549 apply.c:3724
#, c-format
msgid "%s: does not exist in index"
msgstr "%s ist nicht im Index"
-#: apply.c:3536 apply.c:3710 apply.c:3954
+#: apply.c:3558 apply.c:3732 apply.c:3976
#, c-format
msgid "%s: does not match index"
msgstr "%s entspricht nicht der Version im Index"
-#: apply.c:3571
+#: apply.c:3593
msgid "repository lacks the necessary blob to perform 3-way merge."
msgstr ""
"Dem Repository fehlt der notwendige Blob, um einen 3-Wege-Merge "
"durchzuführen."
-#: apply.c:3574
+#: apply.c:3596
#, c-format
msgid "Performing three-way merge...\n"
msgstr "Führe 3-Wege-Merge durch...\n"
-#: apply.c:3590 apply.c:3594
+#: apply.c:3612 apply.c:3616
#, c-format
msgid "cannot read the current contents of '%s'"
msgstr "kann aktuelle Inhalte von '%s' nicht lesen"
-#: apply.c:3606
+#: apply.c:3628
#, c-format
msgid "Failed to perform three-way merge...\n"
msgstr "Fehler beim Durchführen des 3-Wege-Merges...\n"
-#: apply.c:3620
+#: apply.c:3642
#, c-format
msgid "Applied patch to '%s' with conflicts.\n"
msgstr "Patch auf '%s' mit Konflikten angewendet.\n"
-#: apply.c:3625
+#: apply.c:3647
#, c-format
msgid "Applied patch to '%s' cleanly.\n"
msgstr "Patch auf '%s' sauber angewendet.\n"
-#: apply.c:3642
+#: apply.c:3664
#, c-format
msgid "Falling back to direct application...\n"
msgstr "Ausweichen auf direkte Anwendung...\n"
-#: apply.c:3654
+#: apply.c:3676
msgid "removal patch leaves file contents"
msgstr "Lösch-Patch hinterlässt Dateiinhalte"
-#: apply.c:3727
+#: apply.c:3749
#, c-format
msgid "%s: wrong type"
msgstr "%s: falscher Typ"
-#: apply.c:3729
+#: apply.c:3751
#, c-format
msgid "%s has type %o, expected %o"
msgstr "%s ist vom Typ %o, erwartete %o"
-#: apply.c:3894 apply.c:3896 read-cache.c:863 read-cache.c:892
-#: read-cache.c:1353
+#: apply.c:3916 apply.c:3918 read-cache.c:876 read-cache.c:905
+#: read-cache.c:1368
#, c-format
msgid "invalid path '%s'"
msgstr "Ungültiger Pfad '%s'"
-#: apply.c:3952
+#: apply.c:3974
#, c-format
msgid "%s: already exists in index"
msgstr "%s ist bereits bereitgestellt"
-#: apply.c:3956
+#: apply.c:3978
#, c-format
msgid "%s: already exists in working directory"
msgstr "%s existiert bereits im Arbeitsverzeichnis"
-#: apply.c:3976
+#: apply.c:3998
#, c-format
msgid "new mode (%o) of %s does not match old mode (%o)"
msgstr "neuer Modus (%o) von %s entspricht nicht dem alten Modus (%o)"
-#: apply.c:3981
+#: apply.c:4003
#, c-format
msgid "new mode (%o) of %s does not match old mode (%o) of %s"
msgstr "neuer Modus (%o) von %s entspricht nicht dem alten Modus (%o) von %s"
-#: apply.c:4001
+#: apply.c:4023
#, c-format
msgid "affected file '%s' is beyond a symbolic link"
msgstr "betroffene Datei '%s' ist hinter einer symbolischen Verknüpfung"
-#: apply.c:4005
+#: apply.c:4027
#, c-format
msgid "%s: patch does not apply"
msgstr "%s: Patch konnte nicht angewendet werden"
-#: apply.c:4020
+#: apply.c:4042
#, c-format
msgid "Checking patch %s..."
-msgstr "Prüfe Patch %s ..."
+msgstr "Prüfe Patch %s..."
-#: apply.c:4112
+#: apply.c:4134
#, c-format
msgid "sha1 information is lacking or useless for submodule %s"
msgstr "SHA-1 Information fehlt oder ist unbrauchbar für Submodul %s"
-#: apply.c:4119
+#: apply.c:4141
#, c-format
msgid "mode change for %s, which is not in current HEAD"
msgstr "Modusänderung für %s, was sich nicht im aktuellen HEAD befindet"
-#: apply.c:4122
+#: apply.c:4144
#, c-format
msgid "sha1 information is lacking or useless (%s)."
msgstr "SHA-1 Information fehlt oder ist unbrauchbar (%s)."
-#: apply.c:4131
+#: apply.c:4153
#, c-format
msgid "could not add %s to temporary index"
msgstr "konnte %s nicht zum temporären Index hinzufügen"
-#: apply.c:4141
+#: apply.c:4163
#, c-format
msgid "could not write temporary index to %s"
msgstr "konnte temporären Index nicht nach %s schreiben"
-#: apply.c:4279
+#: apply.c:4301
#, c-format
msgid "unable to remove %s from index"
msgstr "konnte %s nicht aus dem Index entfernen"
-#: apply.c:4313
+#: apply.c:4335
#, c-format
msgid "corrupt patch for submodule %s"
msgstr "fehlerhafter Patch für Submodul %s"
-#: apply.c:4319
+#: apply.c:4341
#, c-format
msgid "unable to stat newly created file '%s'"
msgstr "konnte neu erstellte Datei '%s' nicht lesen"
-#: apply.c:4327
+#: apply.c:4349
#, c-format
msgid "unable to create backing store for newly created file %s"
msgstr "kann internen Speicher für eben erstellte Datei %s nicht erzeugen"
-#: apply.c:4333 apply.c:4478
+#: apply.c:4355 apply.c:4500
#, c-format
msgid "unable to add cache entry for %s"
msgstr "kann für %s keinen Eintrag in den Zwischenspeicher hinzufügen"
-#: apply.c:4376 builtin/bisect--helper.c:525
+#: apply.c:4398 builtin/bisect--helper.c:540 builtin/gc.c:2241
+#: builtin/gc.c:2276
#, c-format
msgid "failed to write to '%s'"
msgstr "Fehler beim Schreiben nach '%s'"
-#: apply.c:4380
+#: apply.c:4402
#, c-format
msgid "closing file '%s'"
msgstr "schließe Datei '%s'"
-#: apply.c:4450
+#: apply.c:4472
#, c-format
msgid "unable to write file '%s' mode %o"
msgstr "konnte Datei '%s' mit Modus %o nicht schreiben"
-#: apply.c:4548
+#: apply.c:4570
#, c-format
msgid "Applied patch %s cleanly."
msgstr "Patch %s sauber angewendet"
-#: apply.c:4556
+#: apply.c:4578
msgid "internal error"
msgstr "interner Fehler"
-#: apply.c:4559
+#: apply.c:4581
#, c-format
msgid "Applying patch %%s with %d reject..."
msgid_plural "Applying patch %%s with %d rejects..."
msgstr[0] "Wende Patch %%s mit %d Zurückweisung an..."
msgstr[1] "Wende Patch %%s mit %d Zurückweisungen an..."
-#: apply.c:4570
+#: apply.c:4592
#, c-format
msgid "truncating .rej filename to %.*s.rej"
msgstr "Verkürze Name von .rej Datei zu %.*s.rej"
-#: apply.c:4578 builtin/fetch.c:993 builtin/fetch.c:1394
+#: apply.c:4600 builtin/fetch.c:998 builtin/fetch.c:1408
#, c-format
msgid "cannot open %s"
msgstr "kann '%s' nicht öffnen"
-#: apply.c:4592
+#: apply.c:4614
#, c-format
msgid "Hunk #%d applied cleanly."
msgstr "Patch-Bereich #%d sauber angewendet."
-#: apply.c:4596
+#: apply.c:4618
#, c-format
msgid "Rejected hunk #%d."
msgstr "Patch-Block #%d zurückgewiesen."
-#: apply.c:4725
+#: apply.c:4747
#, c-format
msgid "Skipped patch '%s'."
msgstr "Patch '%s' ausgelassen."
-#: apply.c:4733
+#: apply.c:4755
msgid "unrecognized input"
msgstr "nicht erkannte Eingabe"
-#: apply.c:4753
+#: apply.c:4775
msgid "unable to read index file"
msgstr "Konnte Index-Datei nicht lesen"
-#: apply.c:4910
+#: apply.c:4932
#, c-format
msgid "can't open patch '%s': %s"
msgstr "kann Patch '%s' nicht öffnen: %s"
-#: apply.c:4937
+#: apply.c:4959
#, c-format
msgid "squelched %d whitespace error"
msgid_plural "squelched %d whitespace errors"
msgstr[0] "unterdrückte %d Whitespace-Fehler"
msgstr[1] "unterdrückte %d Whitespace-Fehler"
-#: apply.c:4943 apply.c:4958
+#: apply.c:4965 apply.c:4980
#, c-format
msgid "%d line adds whitespace errors."
msgid_plural "%d lines add whitespace errors."
msgstr[0] "%d Zeile fügt Whitespace-Fehler hinzu."
msgstr[1] "%d Zeilen fügen Whitespace-Fehler hinzu."
-#: apply.c:4951
+#: apply.c:4973
#, c-format
msgid "%d line applied after fixing whitespace errors."
msgid_plural "%d lines applied after fixing whitespace errors."
msgstr[0] "%d Zeile nach Behebung von Whitespace-Fehlern angewendet."
msgstr[1] "%d Zeilen nach Behebung von Whitespace-Fehlern angewendet."
-#: apply.c:4967 builtin/add.c:678 builtin/mv.c:304 builtin/rm.c:423
+#: apply.c:4989 builtin/add.c:707 builtin/mv.c:338 builtin/rm.c:429
msgid "Unable to write new index file"
msgstr "Konnte neue Index-Datei nicht schreiben."
-#: apply.c:4995
+#: apply.c:5017
msgid "don't apply changes matching the given path"
msgstr "keine Änderungen im angegebenen Pfad anwenden"
-#: apply.c:4998
+#: apply.c:5020
msgid "apply changes matching the given path"
msgstr "Änderungen nur im angegebenen Pfad anwenden"
-#: apply.c:5000 builtin/am.c:2318
+#: apply.c:5022 builtin/am.c:2320
msgid "num"
msgstr "Anzahl"
-#: apply.c:5001
+#: apply.c:5023
msgid "remove <num> leading slashes from traditional diff paths"
msgstr ""
"<Anzahl> vorangestellte Schrägstriche von herkömmlichen Differenzpfaden "
"entfernen"
-#: apply.c:5004
+#: apply.c:5026
msgid "ignore additions made by the patch"
msgstr "hinzugefügte Zeilen des Patches ignorieren"
-#: apply.c:5006
+#: apply.c:5028
msgid "instead of applying the patch, output diffstat for the input"
msgstr ""
"statt den Patch anzuwenden, den \"diffstat\" für die Eingabe ausgegeben"
-#: apply.c:5010
+#: apply.c:5032
msgid "show number of added and deleted lines in decimal notation"
msgstr ""
"die Anzahl von hinzugefügten/entfernten Zeilen in Dezimalnotation anzeigen"
-#: apply.c:5012
+#: apply.c:5034
msgid "instead of applying the patch, output a summary for the input"
msgstr ""
"statt den Patch anzuwenden, eine Zusammenfassung für die Eingabe ausgeben"
-#: apply.c:5014
+#: apply.c:5036
msgid "instead of applying the patch, see if the patch is applicable"
msgstr ""
"statt den Patch anzuwenden, anzeigen ob der Patch angewendet werden kann"
-#: apply.c:5016
+#: apply.c:5038
msgid "make sure the patch is applicable to the current index"
msgstr ""
"sicherstellen, dass der Patch mit dem aktuellen Index angewendet werden kann"
-#: apply.c:5018
+#: apply.c:5040
msgid "mark new files with `git add --intent-to-add`"
msgstr "neue Dateien mit `git add --intent-to-add` markieren"
-#: apply.c:5020
+#: apply.c:5042
msgid "apply a patch without touching the working tree"
msgstr "Patch anwenden, ohne Änderungen im Arbeitsverzeichnis vorzunehmen"
-#: apply.c:5022
+#: apply.c:5044
msgid "accept a patch that touches outside the working area"
msgstr ""
"Patch anwenden, der Änderungen außerhalb des Arbeitsverzeichnisses vornimmt"
-#: apply.c:5025
+#: apply.c:5047
msgid "also apply the patch (use with --stat/--summary/--check)"
msgstr "Patch anwenden (Benutzung mit --stat/--summary/--check)"
-#: apply.c:5027
+#: apply.c:5049
msgid "attempt three-way merge, fall back on normal patch if that fails"
msgstr ""
"versuche 3-Wege-Merge, weiche auf normalen Patch aus, wenn dies fehlschlägt"
-#: apply.c:5029
+#: apply.c:5051
msgid "build a temporary index based on embedded index information"
msgstr ""
"einen temporären Index, basierend auf den integrierten Index-Informationen, "
"erstellen"
-#: apply.c:5032 builtin/checkout-index.c:196 builtin/ls-files.c:617
+#: apply.c:5054 builtin/checkout-index.c:196
msgid "paths are separated with NUL character"
msgstr "Pfade sind getrennt durch NUL Zeichen"
-#: apply.c:5034
+#: apply.c:5056
msgid "ensure at least <n> lines of context match"
msgstr ""
"sicher stellen, dass mindestens <n> Zeilen des Kontextes übereinstimmen"
-#: apply.c:5035 builtin/am.c:2294 builtin/am.c:2297
+#: apply.c:5057 builtin/am.c:2296 builtin/am.c:2299
#: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
-#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3991
-#: builtin/rebase.c:1347
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3960
+#: builtin/rebase.c:1051
msgid "action"
msgstr "Aktion"
-#: apply.c:5036
+#: apply.c:5058
msgid "detect new or modified lines that have whitespace errors"
msgstr "neue oder geänderte Zeilen, die Whitespace-Fehler haben, ermitteln"
-#: apply.c:5039 apply.c:5042
+#: apply.c:5061 apply.c:5064
msgid "ignore changes in whitespace when finding context"
msgstr "Änderungen im Whitespace bei der Suche des Kontextes ignorieren"
-#: apply.c:5045
+#: apply.c:5067
msgid "apply the patch in reverse"
msgstr "den Patch in umgekehrter Reihenfolge anwenden"
-#: apply.c:5047
+#: apply.c:5069
msgid "don't expect at least one line of context"
msgstr "keinen Kontext erwarten"
-#: apply.c:5049
+#: apply.c:5071
msgid "leave the rejected hunks in corresponding *.rej files"
msgstr ""
"zurückgewiesene Patch-Blöcke in entsprechenden *.rej Dateien hinterlassen"
-#: apply.c:5051
+#: apply.c:5073
msgid "allow overlapping hunks"
msgstr "sich überlappende Patch-Blöcke erlauben"
-#: apply.c:5052 builtin/add.c:364 builtin/check-ignore.c:22
-#: builtin/commit.c:1481 builtin/count-objects.c:98 builtin/fsck.c:756
-#: builtin/log.c:2297 builtin/mv.c:123 builtin/read-tree.c:128
+#: apply.c:5074 builtin/add.c:372 builtin/check-ignore.c:22
+#: builtin/commit.c:1483 builtin/count-objects.c:98 builtin/fsck.c:788
+#: builtin/log.c:2297 builtin/mv.c:123 builtin/read-tree.c:120
msgid "be verbose"
msgstr "erweiterte Ausgaben"
-#: apply.c:5054
+#: apply.c:5076
msgid "tolerate incorrectly detected missing new-line at the end of file"
msgstr "fehlerhaft erkannten fehlenden Zeilenumbruch am Dateiende tolerieren"
-#: apply.c:5057
+#: apply.c:5079
msgid "do not trust the line counts in the hunk headers"
msgstr "den Zeilennummern im Kopf des Patch-Blocks nicht vertrauen"
-#: apply.c:5059 builtin/am.c:2306
+#: apply.c:5081 builtin/am.c:2308
msgid "root"
msgstr "Wurzelverzeichnis"
-#: apply.c:5060
+#: apply.c:5082
msgid "prepend <root> to all filenames"
msgstr "<Wurzelverzeichnis> vor alle Dateinamen stellen"
@@ -1611,153 +1621,152 @@
msgid "cannot read %s"
msgstr "Kann %s nicht lesen."
-#: archive.c:342 sequencer.c:460 sequencer.c:1915 sequencer.c:3095
-#: sequencer.c:3537 sequencer.c:3665 builtin/am.c:262 builtin/commit.c:833
-#: builtin/merge.c:1144
+#: archive.c:341 sequencer.c:473 sequencer.c:1932 sequencer.c:3114
+#: sequencer.c:3556 sequencer.c:3684 builtin/am.c:263 builtin/commit.c:834
+#: builtin/merge.c:1145
#, c-format
msgid "could not read '%s'"
msgstr "Konnte '%s' nicht lesen"
-#: archive.c:427 builtin/add.c:205 builtin/add.c:645 builtin/rm.c:328
+#: archive.c:426 builtin/add.c:215 builtin/add.c:674 builtin/rm.c:334
#, c-format
msgid "pathspec '%s' did not match any files"
msgstr "Pfadspezifikation '%s' stimmt mit keinen Dateien überein"
-#: archive.c:451
+#: archive.c:450
#, c-format
msgid "no such ref: %.*s"
msgstr "Referenz nicht gefunden: %.*s"
-#: archive.c:457
+#: archive.c:456
#, c-format
msgid "not a valid object name: %s"
msgstr "Kein gültiger Objektname: %s"
-#: archive.c:470
+#: archive.c:469
#, c-format
msgid "not a tree object: %s"
msgstr "Kein Tree-Objekt: %s"
-#: archive.c:482
+#: archive.c:481
msgid "current working directory is untracked"
msgstr "Aktuelles Arbeitsverzeichnis ist unversioniert."
-#: archive.c:523
+#: archive.c:522
#, c-format
msgid "File not found: %s"
msgstr "Datei nicht gefunden: %s"
-#: archive.c:525
+#: archive.c:524
#, c-format
msgid "Not a regular file: %s"
msgstr "Keine reguläre Datei: %s"
-#: archive.c:552
+#: archive.c:551
msgid "fmt"
msgstr "Format"
-#: archive.c:552
+#: archive.c:551
msgid "archive format"
msgstr "Archivformat"
-#: archive.c:553 builtin/log.c:1775
+#: archive.c:552 builtin/log.c:1775
msgid "prefix"
msgstr "Präfix"
-#: archive.c:554
+#: archive.c:553
msgid "prepend prefix to each pathname in the archive"
msgstr "einen Präfix vor jeden Pfadnamen in dem Archiv stellen"
-#: archive.c:555 archive.c:558 builtin/blame.c:884 builtin/blame.c:888
-#: builtin/blame.c:889 builtin/commit-tree.c:117 builtin/config.c:135
-#: builtin/fast-export.c:1207 builtin/fast-export.c:1209
-#: builtin/fast-export.c:1213 builtin/grep.c:921 builtin/hash-object.c:105
-#: builtin/ls-files.c:653 builtin/ls-files.c:656 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:191
+#: archive.c:554 archive.c:557 builtin/blame.c:880 builtin/blame.c:884
+#: builtin/blame.c:885 builtin/commit-tree.c:115 builtin/config.c:135
+#: builtin/fast-export.c:1208 builtin/fast-export.c:1210
+#: builtin/fast-export.c:1214 builtin/grep.c:935 builtin/hash-object.c:103
+#: builtin/ls-files.c:651 builtin/ls-files.c:654 builtin/notes.c:410
+#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:190
msgid "file"
msgstr "Datei"
-#: archive.c:556
+#: archive.c:555
msgid "add untracked file to archive"
msgstr "unversionierte Datei zum Archiv hinzufügen"
-#: archive.c:559 builtin/archive.c:90
+#: archive.c:558 builtin/archive.c:88
msgid "write the archive to this file"
msgstr "das Archiv in diese Datei schreiben"
-#: archive.c:561
+#: archive.c:560
msgid "read .gitattributes in working directory"
msgstr ".gitattributes aus dem Arbeitsverzeichnis lesen"
-#: archive.c:562
+#: archive.c:561
msgid "report archived files on stderr"
msgstr "archivierte Dateien in der Standard-Fehlerausgabe ausgeben"
-#: archive.c:564
+#: archive.c:563
msgid "set compression level"
msgstr "Komprimierungsgrad setzen"
-#: archive.c:567
+#: archive.c:566
msgid "list supported archive formats"
msgstr "unterstützte Archivformate auflisten"
-#: archive.c:569 builtin/archive.c:91 builtin/clone.c:118 builtin/clone.c:121
-#: builtin/submodule--helper.c:1898 builtin/submodule--helper.c:2352
-#: builtin/submodule--helper.c:2902
+#: archive.c:568 builtin/archive.c:89 builtin/clone.c:118 builtin/clone.c:121
+#: builtin/submodule--helper.c:1869 builtin/submodule--helper.c:2512
msgid "repo"
msgstr "Repository"
-#: archive.c:570 builtin/archive.c:92
+#: archive.c:569 builtin/archive.c:90
msgid "retrieve the archive from remote repository <repo>"
msgstr "Archiv vom Remote-Repository <Repository> abrufen"
-#: archive.c:571 builtin/archive.c:93 builtin/difftool.c:717
-#: builtin/notes.c:498
+#: archive.c:570 builtin/archive.c:91 builtin/difftool.c:714
+#: builtin/notes.c:496
msgid "command"
msgstr "Programm"
-#: archive.c:572 builtin/archive.c:94
+#: archive.c:571 builtin/archive.c:92
msgid "path to the remote git-upload-archive command"
msgstr "Pfad zum externen \"git-upload-archive\"-Programm"
-#: archive.c:579
+#: archive.c:578
msgid "Unexpected option --remote"
msgstr "Unerwartete Option --remote"
-#: archive.c:581
+#: archive.c:580
msgid "Option --exec can only be used together with --remote"
msgstr "Die Option --exec kann nur zusammen mit --remote verwendet werden"
-#: archive.c:583
+#: archive.c:582
msgid "Unexpected option --output"
msgstr "Unerwartete Option --output"
-#: archive.c:585
+#: archive.c:584
msgid "Options --add-file and --remote cannot be used together"
msgstr ""
"Die Optionen --add-file und --remote können nicht gemeinsam verwendet werden"
-#: archive.c:607
+#: archive.c:606
#, c-format
msgid "Unknown archive format '%s'"
msgstr "Unbekanntes Archivformat '%s'"
-#: archive.c:616
+#: archive.c:615
#, c-format
msgid "Argument not supported for format '%s': -%d"
msgstr "Argument für Format '%s' nicht unterstützt: -%d"
-#: attr.c:202
+#: attr.c:203
#, c-format
msgid "%.*s is not a valid attribute name"
msgstr "%.*s ist kein gültiger Attributname"
-#: attr.c:363
+#: attr.c:364
#, c-format
msgid "%s not allowed: %s:%d"
msgstr "%s nicht erlaubt: %s:%d"
-#: attr.c:403
+#: attr.c:404
msgid ""
"Negative patterns are ignored in git attributes\n"
"Use '\\!' for literal leading exclamation."
@@ -1765,22 +1774,22 @@
"Verneinende Muster werden in Git-Attributen ignoriert.\n"
"Benutzen Sie '\\!' für führende Ausrufezeichen."
-#: bisect.c:489
+#: bisect.c:488
#, c-format
msgid "Badly quoted content in file '%s': %s"
msgstr "Ungültiger Inhalt bzgl. Anführungszeichen in Datei '%s': %s"
-#: bisect.c:699
+#: bisect.c:698
#, c-format
msgid "We cannot bisect more!\n"
msgstr "Keine binäre Suche mehr möglich!\n"
-#: bisect.c:766
+#: bisect.c:764
#, c-format
msgid "Not a valid commit name %s"
msgstr "%s ist kein gültiger Commit-Name"
-#: bisect.c:791
+#: bisect.c:789
#, c-format
msgid ""
"The merge base %s is bad.\n"
@@ -1789,7 +1798,7 @@
"Die Merge-Basis %s ist fehlerhaft.\n"
"Das bedeutet, der Fehler wurde zwischen %s und [%s] behoben.\n"
-#: bisect.c:796
+#: bisect.c:794
#, c-format
msgid ""
"The merge base %s is new.\n"
@@ -1798,7 +1807,7 @@
"Die Merge-Basis %s ist neu.\n"
"Das bedeutet, die Eigenschaft hat sich zwischen %s und [%s] geändert.\n"
-#: bisect.c:801
+#: bisect.c:799
#, c-format
msgid ""
"The merge base %s is %s.\n"
@@ -1807,7 +1816,7 @@
"Die Merge-Basis %s ist %s.\n"
"Das bedeutet, der erste '%s' Commit befindet sich zwischen %s und [%s].\n"
-#: bisect.c:809
+#: bisect.c:807
#, c-format
msgid ""
"Some %s revs are not ancestors of the %s rev.\n"
@@ -1818,7 +1827,7 @@
"git bisect kann in diesem Fall nicht richtig arbeiten.\n"
"Vielleicht verwechselten Sie %s und %s Commits?\n"
-#: bisect.c:822
+#: bisect.c:820
#, c-format
msgid ""
"the merge base between %s and [%s] must be skipped.\n"
@@ -1830,36 +1839,36 @@
"erste %s Commit zwischen %s und %s befindet.\n"
"Es wird dennoch fortgesetzt."
-#: bisect.c:861
+#: bisect.c:859
#, c-format
msgid "Bisecting: a merge base must be tested\n"
msgstr "binäre Suche: eine Merge-Basis muss geprüft werden\n"
-#: bisect.c:911
+#: bisect.c:909
#, c-format
msgid "a %s revision is needed"
msgstr "ein %s Commit wird benötigt"
-#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:298
+#: bisect.c:939
#, c-format
msgid "could not create file '%s'"
msgstr "konnte Datei '%s' nicht erstellen"
-#: bisect.c:987 builtin/merge.c:153
+#: bisect.c:985 builtin/merge.c:154
#, c-format
msgid "could not read file '%s'"
msgstr "Konnte Datei '%s' nicht lesen"
-#: bisect.c:1027
+#: bisect.c:1025
msgid "reading bisect refs failed"
msgstr "Lesen von Referenzen für binäre Suche fehlgeschlagen"
-#: bisect.c:1057
+#: bisect.c:1055
#, c-format
msgid "%s was both %s and %s\n"
msgstr "%s war sowohl %s als auch %s\n"
-#: bisect.c:1066
+#: bisect.c:1064
#, c-format
msgid ""
"No testable commit found.\n"
@@ -1868,7 +1877,7 @@
"Kein testbarer Commit gefunden.\n"
"Vielleicht starteten Sie mit schlechten Pfad-Argumenten?\n"
-#: bisect.c:1095
+#: bisect.c:1093
#, c-format
msgid "(roughly %d step)"
msgid_plural "(roughly %d steps)"
@@ -1878,7 +1887,7 @@
#. TRANSLATORS: the last %s will be replaced with "(roughly %d
#. steps)" translation.
#.
-#: bisect.c:1101
+#: bisect.c:1099
#, 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"
@@ -1901,11 +1910,12 @@
"endgültigen\n"
"Commits"
-#: blame.c:2820 bundle.c:224 ref-filter.c:2278 remote.c:2041 sequencer.c:2333
-#: sequencer.c:4865 submodule.c:844 builtin/commit.c:1113 builtin/log.c:414
-#: builtin/log.c:1021 builtin/log.c:1629 builtin/log.c:2056 builtin/log.c:2346
-#: builtin/merge.c:428 builtin/pack-objects.c:3343 builtin/pack-objects.c:3806
-#: builtin/pack-objects.c:3821 builtin/shortlog.c:255
+#: blame.c:2820 bundle.c:224 midx.c:1039 ref-filter.c:2370 remote.c:2041
+#: sequencer.c:2350 sequencer.c:4902 submodule.c:883 builtin/commit.c:1114
+#: builtin/log.c:414 builtin/log.c:1021 builtin/log.c:1629 builtin/log.c:2056
+#: builtin/log.c:2346 builtin/merge.c:429 builtin/pack-objects.c:3373
+#: builtin/pack-objects.c:3775 builtin/pack-objects.c:3790
+#: builtin/shortlog.c:255
msgid "revision walk setup failed"
msgstr "Einrichtung des Revisionsgangs fehlgeschlagen"
@@ -2088,8 +2098,8 @@
msgid "unrecognized header: %s%s (%d)"
msgstr "nicht erkannter Kopfbereich: %s%s (%d)"
-#: bundle.c:140 rerere.c:464 rerere.c:674 sequencer.c:2593 sequencer.c:3385
-#: builtin/commit.c:861
+#: bundle.c:140 rerere.c:464 rerere.c:674 sequencer.c:2618 sequencer.c:3404
+#: builtin/commit.c:862
#, c-format
msgid "could not open '%s'"
msgstr "Konnte '%s' nicht öffnen"
@@ -2147,7 +2157,7 @@
msgid "cannot write bundle version %d with algorithm %s"
msgstr "kann Paket-Version %d nicht mit Algorithmus %s schreiben"
-#: bundle.c:524 builtin/log.c:210 builtin/log.c:1938 builtin/shortlog.c:396
+#: bundle.c:524 builtin/log.c:210 builtin/log.c:1938 builtin/shortlog.c:399
#, c-format
msgid "unrecognized argument: %s"
msgstr "nicht erkanntes Argument: %s"
@@ -2189,7 +2199,7 @@
msgid "invalid color value: %.*s"
msgstr "Ungültiger Farbwert: %.*s"
-#: commit-graph.c:204 midx.c:47
+#: commit-graph.c:204 midx.c:51
msgid "invalid hash version"
msgstr "ungültige Hash-Version"
@@ -2234,190 +2244,190 @@
msgid "unable to find all commit-graph files"
msgstr "Konnte nicht alle Commit-Graph-Dateien finden."
-#: commit-graph.c:745 commit-graph.c:782
+#: commit-graph.c:746 commit-graph.c:783
msgid "invalid commit position. commit-graph is likely corrupt"
msgstr "Ungültige Commit-Position. Commit-Graph ist wahrscheinlich beschädigt."
-#: commit-graph.c:766
+#: commit-graph.c:767
#, c-format
msgid "could not find commit %s"
msgstr "Konnte Commit %s nicht finden."
-#: commit-graph.c:799
+#: commit-graph.c:800
msgid "commit-graph requires overflow generation data but has none"
msgstr "Commit-Graph erfordert Überlaufgenerierungsdaten, aber hat keine"
-#: commit-graph.c:1075 builtin/am.c:1341
+#: commit-graph.c:1105 builtin/am.c:1342
#, c-format
msgid "unable to parse commit %s"
msgstr "Konnte Commit '%s' nicht parsen."
-#: commit-graph.c:1337 builtin/pack-objects.c:3057
+#: commit-graph.c:1367 builtin/pack-objects.c:3070
#, c-format
msgid "unable to get type of object %s"
msgstr "Konnte Art von Objekt '%s' nicht bestimmen."
-#: commit-graph.c:1368
+#: commit-graph.c:1398
msgid "Loading known commits in commit graph"
msgstr "Lade bekannte Commits in Commit-Graph"
-#: commit-graph.c:1385
+#: commit-graph.c:1415
msgid "Expanding reachable commits in commit graph"
msgstr "Erweitere erreichbare Commits in Commit-Graph"
-#: commit-graph.c:1405
+#: commit-graph.c:1435
msgid "Clearing commit marks in commit graph"
msgstr "Lösche Commit-Markierungen in Commit-Graph"
-#: commit-graph.c:1424
+#: commit-graph.c:1454
msgid "Computing commit graph topological levels"
msgstr "Topologische Ebenen des Commit-Graph werden berechnet"
-#: commit-graph.c:1477
+#: commit-graph.c:1507
msgid "Computing commit graph generation numbers"
msgstr "Commit-Graph Generationsnummern berechnen"
-#: commit-graph.c:1558
+#: commit-graph.c: