aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/RelNotes/2.40.4.txt5
-rw-r--r--Documentation/RelNotes/2.41.3.txt6
-rw-r--r--Documentation/RelNotes/2.42.4.txt6
-rw-r--r--Documentation/RelNotes/2.43.6.txt7
-rw-r--r--Documentation/RelNotes/2.44.3.txt7
-rw-r--r--Documentation/RelNotes/2.45.3.txt7
-rw-r--r--Documentation/RelNotes/2.46.3.txt6
-rw-r--r--Documentation/RelNotes/2.47.2.txt7
-rw-r--r--Documentation/RelNotes/2.48.0.txt25
-rw-r--r--Documentation/RelNotes/2.48.1.txt7
-rw-r--r--Documentation/RelNotes/2.49.0.txt118
-rw-r--r--Documentation/config/commit.txt25
-rw-r--r--Documentation/config/credential.txt11
-rw-r--r--Documentation/config/diff.txt2
-rw-r--r--Documentation/config/difftool.txt2
-rw-r--r--Documentation/git-commit.txt281
-rw-r--r--Documentation/git-credential-cache.txt17
-rw-r--r--Documentation/git-restore.txt110
-rw-r--r--Documentation/git.txt2
-rw-r--r--Documentation/gitattributes.txt2
-rw-r--r--Documentation/gitcli.txt19
-rw-r--r--Documentation/gitcredentials.txt41
-rw-r--r--Documentation/i18n.txt4
-rw-r--r--Documentation/signoff-option.txt8
-rw-r--r--Documentation/technical/api-path-walk.txt63
-rw-r--r--Documentation/technical/meson.build1
-rwxr-xr-xGIT-VERSION-GEN10
-rw-r--r--Makefile10
l---------RelNotes2
-rw-r--r--add-interactive.c19
-rw-r--r--add-patch.c2
-rw-r--r--bisect.c11
-rw-r--r--builtin/am.c9
-rw-r--r--builtin/blame.c15
-rw-r--r--builtin/branch.c7
-rw-r--r--builtin/bugreport.c2
-rw-r--r--builtin/check-ref-format.c4
-rw-r--r--builtin/checkout--worker.c6
-rw-r--r--builtin/checkout-index.c6
-rw-r--r--builtin/commit-graph.c1
-rw-r--r--builtin/commit-tree.c4
-rw-r--r--builtin/commit.c10
-rw-r--r--builtin/credential-cache--daemon.c4
-rw-r--r--builtin/credential.c9
-rw-r--r--builtin/diagnose.c4
-rw-r--r--builtin/diff-files.c3
-rw-r--r--builtin/diff-index.c3
-rw-r--r--builtin/diff-tree.c3
-rw-r--r--builtin/fast-import.c3
-rw-r--r--builtin/fetch-pack.c2
-rw-r--r--builtin/fetch.c4
-rw-r--r--builtin/for-each-ref.c1
-rw-r--r--builtin/fsck.c12
-rw-r--r--builtin/fsmonitor--daemon.c4
-rw-r--r--builtin/gc.c6
-rw-r--r--builtin/get-tar-commit-id.c4
-rw-r--r--builtin/grep.c4
-rw-r--r--builtin/help.c4
-rw-r--r--builtin/index-pack.c40
-rw-r--r--builtin/log.c57
-rw-r--r--builtin/ls-files.c4
-rw-r--r--builtin/mailinfo.c2
-rw-r--r--builtin/mailsplit.c4
-rw-r--r--builtin/merge-base.c4
-rw-r--r--builtin/merge-index.c7
-rw-r--r--builtin/merge-ours.c3
-rw-r--r--builtin/merge-recursive.c6
-rw-r--r--builtin/merge.c4
-rw-r--r--builtin/pack-objects.c21
-rw-r--r--builtin/pack-redundant.c3
-rw-r--r--builtin/prune.c3
-rw-r--r--builtin/rebase.c6
-rw-r--r--builtin/receive-pack.c6
-rw-r--r--builtin/remote-ext.c2
-rw-r--r--builtin/remote-fd.c1
-rw-r--r--builtin/remote.c3
-rw-r--r--builtin/repack.c2
-rw-r--r--builtin/rev-list.c6
-rw-r--r--builtin/rev-parse.c2
-rw-r--r--builtin/send-pack.c2
-rw-r--r--builtin/tag.c1
-rw-r--r--builtin/unpack-file.c8
-rw-r--r--builtin/unpack-objects.c36
-rw-r--r--builtin/update-index.c4
-rw-r--r--builtin/update-server-info.c2
-rw-r--r--builtin/upload-archive.c6
-rw-r--r--builtin/upload-pack.c6
-rw-r--r--builtin/var.c3
-rw-r--r--builtin/verify-tag.c1
-rw-r--r--bulk-checkin.c2
-rw-r--r--commit-graph.c20
-rw-r--r--commit-reach.c75
-rw-r--r--commit-reach.h10
-rw-r--r--commit.c4
-rw-r--r--commit.h2
-rw-r--r--compat/bswap.h24
-rw-r--r--connect.c23
-rw-r--r--contrib/completion/git-completion.bash17
-rw-r--r--contrib/meson.build4
-rw-r--r--contrib/subtree/.gitignore2
-rw-r--r--contrib/subtree/Makefile23
-rw-r--r--contrib/subtree/meson.build71
-rw-r--r--credential.c85
-rw-r--r--credential.h17
-rw-r--r--date.c6
-rw-r--r--delta-islands.c3
-rw-r--r--diagnose.c15
-rw-r--r--diagnose.h5
-rw-r--r--diff.c4
-rw-r--r--diffcore-rename.c1
-rw-r--r--entry.c4
-rw-r--r--fetch-pack.c2
-rw-r--r--fsck.c2
-rw-r--r--git-compat-util.h2
-rw-r--r--git-gui/po/bg.po3191
-rwxr-xr-xgit-instaweb.sh4
-rwxr-xr-xgit-submodule.sh216
-rw-r--r--git.c10
-rw-r--r--gitk-git/po/bg.po730
-rw-r--r--graph.c3
-rw-r--r--http.c24
-rw-r--r--imap-send.c10
-rw-r--r--log-tree.c2
-rw-r--r--mailinfo.c5
-rw-r--r--mailinfo.h4
-rw-r--r--match-trees.c50
-rw-r--r--meson.build60
-rw-r--r--meson_options.txt10
-rw-r--r--midx-write.c11
-rw-r--r--midx.c13
-rw-r--r--object-file.c66
-rw-r--r--object-name.c63
-rw-r--r--oss-fuzz/fuzz-parse-attr-line.c2
-rw-r--r--pack-bitmap-write.c6
-rw-r--r--pack-bitmap.c4
-rw-r--r--pack.h3
-rw-r--r--packfile.c20
-rw-r--r--packfile.h6
-rw-r--r--pager.c14
-rw-r--r--pager.h7
-rw-r--r--parse-options.c53
-rw-r--r--parse-options.h4
-rw-r--r--path-walk.c591
-rw-r--r--path-walk.h69
-rw-r--r--perl/FromCPAN/Mail/meson.build1
-rw-r--r--perl/FromCPAN/meson.build1
-rw-r--r--perl/Git/LoadCPAN/Mail/meson.build1
-rw-r--r--perl/Git/LoadCPAN/meson.build1
-rw-r--r--perl/Git/SVN/Memoize/meson.build1
-rw-r--r--perl/Git/SVN/meson.build1
-rw-r--r--perl/Git/meson.build1
-rw-r--r--perl/meson.build1
-rw-r--r--po/bg.po357
-rw-r--r--po/de.po304
-rw-r--r--po/fr.po785
-rw-r--r--po/id.po338
-rw-r--r--po/sv.po413
-rw-r--r--po/tr.po293
-rw-r--r--po/uk.po599
-rw-r--r--po/vi.po336
-rw-r--r--po/zh_CN.po301
-rw-r--r--po/zh_TW.po667
-rw-r--r--preload-index.c4
-rw-r--r--prio-queue.h4
-rw-r--r--progress.c34
-rw-r--r--progress.h13
-rw-r--r--prune-packed.c3
-rw-r--r--pseudo-merge.c3
-rw-r--r--read-cache.c7
-rw-r--r--ref-filter.c119
-rw-r--r--ref-filter.h13
-rw-r--r--refs.c2
-rw-r--r--refs/files-backend.c3
-rw-r--r--reftable/basics.c10
-rw-r--r--reftable/basics.h4
-rw-r--r--reftable/block.c20
-rw-r--r--reftable/block.h14
-rw-r--r--reftable/blocksource.c8
-rw-r--r--reftable/reader.c32
-rw-r--r--reftable/reader.h6
-rw-r--r--reftable/record.c125
-rw-r--r--reftable/record.h25
-rw-r--r--reftable/reftable-blocksource.h13
-rw-r--r--reftable/reftable-record.h4
-rw-r--r--reftable/reftable-writer.h2
-rw-r--r--reftable/stack.c16
-rw-r--r--reftable/system.h2
-rw-r--r--reftable/writer.c7
-rw-r--r--remote-curl.c4
-rw-r--r--remote.c4
-rw-r--r--resolve-undo.c14
-rw-r--r--resolve-undo.h6
-rw-r--r--send-pack.c77
-rw-r--r--send-pack.h3
-rw-r--r--serve.c36
-rw-r--r--serve.h6
-rw-r--r--server-info.c40
-rw-r--r--server-info.h4
-rw-r--r--shallow.c40
-rw-r--r--shallow.h6
-rw-r--r--strbuf.c4
-rw-r--r--strbuf.h1
-rw-r--r--t/helper/meson.build1
-rw-r--r--t/helper/test-csprng.c2
-rw-r--r--t/helper/test-path-walk.c112
-rw-r--r--t/helper/test-progress.c6
-rw-r--r--t/helper/test-reach.c6
-rw-r--r--t/helper/test-serve-v2.c7
-rw-r--r--t/helper/test-simple-ipc.c4
-rw-r--r--t/helper/test-tool.c1
-rw-r--r--t/helper/test-tool.h1
-rw-r--r--t/lib-credential.sh15
-rw-r--r--t/meson.build9
-rwxr-xr-xt/t0012-help.sh3
-rwxr-xr-xt/t0210-trace2-normal.sh9
-rwxr-xr-xt/t0300-credentials.sh49
-rwxr-xr-xt/t1006-cat-file.sh31
-rwxr-xr-xt/t1400-update-ref.sh9
-rwxr-xr-xt/t1460-refs-migrate.sh17
-rwxr-xr-xt/t3203-branch-output.sh28
-rwxr-xr-xt/t5504-fetch-receive-strict.sh10
-rwxr-xr-xt/t5541-http-push-smart.sh6
-rwxr-xr-xt/t5550-http-fetch-dumb.sh14
-rwxr-xr-xt/t5551-http-fetch-smart.sh16
-rwxr-xr-xt/t6120-describe.sh24
-rwxr-xr-xt/t6600-test-reach.sh29
-rwxr-xr-xt/t6601-path-walk.sh368
-rwxr-xr-xt/t7110-reset-merge.sh12
-rwxr-xr-xt/t7407-submodule-foreach.sh4
-rwxr-xr-xt/t7600-merge.sh2
-rwxr-xr-xt/t8002-blame.sh26
-rw-r--r--t/test-lib-functions.sh12
-rw-r--r--t/test-lib.sh20
-rwxr-xr-xt/unit-tests/generate-clar-decls.sh1
-rw-r--r--t/unit-tests/t-mem-pool.c31
-rw-r--r--t/unit-tests/t-prio-queue.c91
-rw-r--r--t/unit-tests/t-reftable-basics.c10
-rw-r--r--t/unit-tests/t-reftable-readwrite.c8
-rw-r--r--t/unit-tests/t-reftable-record.c19
-rw-r--r--t/unit-tests/u-hash.c (renamed from t/unit-tests/t-hash.c)71
-rw-r--r--t/unit-tests/u-mem-pool.c25
-rw-r--r--t/unit-tests/u-prio-queue.c94
-rw-r--r--t/unit-tests/u-reftable-tree.c (renamed from t/unit-tests/t-reftable-tree.c)30
-rw-r--r--tmp-objdir.c15
-rw-r--r--tmp-objdir.h5
-rw-r--r--trace.c9
-rw-r--r--trace.h4
-rw-r--r--trace2.c2
-rw-r--r--trace2/tr2_tgt_event.c3
-rw-r--r--trace2/tr2_tgt_normal.c5
-rw-r--r--trace2/tr2_tgt_perf.c5
-rw-r--r--transport.c2
-rw-r--r--unpack-trees.c4
-rw-r--r--usage.c27
-rw-r--r--version.c7
-rw-r--r--walker.c3
-rw-r--r--wrapper.c24
-rw-r--r--wrapper.h16
258 files changed, 8624 insertions, 4785 deletions
diff --git a/Documentation/RelNotes/2.40.4.txt b/Documentation/RelNotes/2.40.4.txt
new file mode 100644
index 0000000000..0ff29f3cfc
--- /dev/null
+++ b/Documentation/RelNotes/2.40.4.txt
@@ -0,0 +1,5 @@
+Git v2.40.4 Release Notes
+=========================
+
+This release lets Git refuse to accept URLs that contain control
+sequences. This addresses CVE-2024-50349 and CVE-2024-52006.
diff --git a/Documentation/RelNotes/2.41.3.txt b/Documentation/RelNotes/2.41.3.txt
new file mode 100644
index 0000000000..b5aba88790
--- /dev/null
+++ b/Documentation/RelNotes/2.41.3.txt
@@ -0,0 +1,6 @@
+Git v2.41.3 Release Notes
+=========================
+
+This release merges up the fix that appears in v2.40.4 to address
+the security issues CVE-2024-50349 and CVE-2024-52006; see the
+release notes for that version for details.
diff --git a/Documentation/RelNotes/2.42.4.txt b/Documentation/RelNotes/2.42.4.txt
new file mode 100644
index 0000000000..3129d76e75
--- /dev/null
+++ b/Documentation/RelNotes/2.42.4.txt
@@ -0,0 +1,6 @@
+Git v2.42.4 Release Notes
+=========================
+
+This release merges up the fix that appears in v2.40.4 and v2.41.3
+to address the security issues CVE-2024-50349 and CVE-2024-52006;
+see the release notes for these versions for details.
diff --git a/Documentation/RelNotes/2.43.6.txt b/Documentation/RelNotes/2.43.6.txt
new file mode 100644
index 0000000000..2114b9f78d
--- /dev/null
+++ b/Documentation/RelNotes/2.43.6.txt
@@ -0,0 +1,7 @@
+Git v2.43.6 Release Notes
+=========================
+
+This release merges up the fix that appears in v2.40.4, v2.41.3
+and v2.42.4 to address the security issues CVE-2024-50349 and
+CVE-2024-52006; see the release notes for these versions for
+details.
diff --git a/Documentation/RelNotes/2.44.3.txt b/Documentation/RelNotes/2.44.3.txt
new file mode 100644
index 0000000000..5862845458
--- /dev/null
+++ b/Documentation/RelNotes/2.44.3.txt
@@ -0,0 +1,7 @@
+Git v2.44.3 Release Notes
+=========================
+
+This release merges up the fix that appears in v2.40.4, v2.41.3,
+v2.42.4 and v2.43.6 to address the security issues CVE-2024-50349
+and CVE-2024-52006; see the release notes for these versions
+for details.
diff --git a/Documentation/RelNotes/2.45.3.txt b/Documentation/RelNotes/2.45.3.txt
index 2a1e9aa608..ddb3cb694b 100644
--- a/Documentation/RelNotes/2.45.3.txt
+++ b/Documentation/RelNotes/2.45.3.txt
@@ -1,7 +1,12 @@
Git v2.45.3 Release Notes
=========================
-This primarily is to backport various small fixes accumulated on the
+This release merges up the fix that appears in v2.40.4, v2.41.3,
+v2.42.4, v2.43.6 and v2.44.3 to address the security issues
+CVE-2024-50349 and CVE-2024-52006; see the release notes for
+these versions for details.
+
+This version also backports various small fixes accumulated on the
'master' front during the development towards Git 2.46, the next
feature release.
diff --git a/Documentation/RelNotes/2.46.3.txt b/Documentation/RelNotes/2.46.3.txt
new file mode 100644
index 0000000000..4af032b63c
--- /dev/null
+++ b/Documentation/RelNotes/2.46.3.txt
@@ -0,0 +1,6 @@
+Git v2.46.3 Release Notes
+=========================
+
+This release merges up the fix that appears in v2.40.4, v2.41.3, v2.42.4,
+v2.43.6, v2.44.3 and v2.45.3 to address the security issues CVE-2024-50349 and
+CVE-2024-52006; see the release notes for these versions for details.
diff --git a/Documentation/RelNotes/2.47.2.txt b/Documentation/RelNotes/2.47.2.txt
new file mode 100644
index 0000000000..7a52ad8cb4
--- /dev/null
+++ b/Documentation/RelNotes/2.47.2.txt
@@ -0,0 +1,7 @@
+Git v2.47.2 Release Notes
+=========================
+
+This release merges up the fix that appears in v2.40.4, v2.41.3,
+v2.42.4, v2.43.6, v2.44.3, v2.45.3 and v2.46.3 to address the
+security issues CVE-2024-50349 and CVE-2024-52006; see the release
+notes for these versions for details.
diff --git a/Documentation/RelNotes/2.48.0.txt b/Documentation/RelNotes/2.48.0.txt
index d62c62dc17..eff93be37a 100644
--- a/Documentation/RelNotes/2.48.0.txt
+++ b/Documentation/RelNotes/2.48.0.txt
@@ -47,15 +47,15 @@ Performance, Internal Implementation, Development Support etc.
* The way AsciiDoc is used for SYNOPSIS part of the manual pages has
been revamped. The sources, at least for the simple cases, got
- vastly pleasant to work with.
+ vastly more pleasant to work with.
* The reftable library is now prepared to expect that the memory
allocation function given to it may fail to allocate and to deal
with such an error.
* An extra worktree attached to a repository points at each other to
- allow finding the repository from the worktree and vice versa
- possible. Turn this linkage to relative paths.
+ allow finding the repository from the worktree (and vice versa)
+ possible. Use relative paths for this linkage.
* Enable Windows-based CI in GitLab.
@@ -94,7 +94,7 @@ Performance, Internal Implementation, Development Support etc.
* Update the project's CodingGuidelines to discourage naming functions
with a "_1()" suffix.
- * Updates the '.clang-format' to match project conventions.
+ * Update '.clang-format' to match project conventions.
* Centralize documentation for repository extensions into a single place.
@@ -116,7 +116,7 @@ Performance, Internal Implementation, Development Support etc.
* The migration procedure between two ref backends has been optimized.
* "git fsck" learned to issue warnings on "curiously formatted" ref
- contents that have always been taken valid but something Git
+ contents that have always been treated as valid but that Git
wouldn't have written itself (e.g., missing terminating end-of-line
after the full object name).
@@ -127,13 +127,13 @@ Performance, Internal Implementation, Development Support etc.
* Drop support for ancient environments in various CI jobs.
- * Isolates the reftable subsystem from the rest of Git's codebase by
+ * Isolate the reftable subsystem from the rest of Git's codebase by
using fewer pieces of Git's infrastructure.
* Optimize reading random references out of the reftable backend by
allowing reuse of iterator objects.
- * Backport oss-fuzz tests for us to our codebase.
+ * Backport oss-fuzz tests to our codebase.
* Introduce a new repository extension to prevent older Git versions
from mis-interpreting worktrees created with relative paths.
@@ -173,13 +173,13 @@ Fixes since v2.47
-----------------
* Doc update to clarify how periodical maintenance are scheduled,
- spread across time to avoid thundering hurds.
+ spread across time to avoid thundering herds.
* Use after free and double freeing at the end in "git log -L... -p"
had been identified and fixed.
* On macOS, fsmonitor can fall into a race condition that results in
- a client waiting forever to be notified for an event that have
+ a client waiting forever to be notified about an event that has
already happened. This problem has been corrected.
* "git maintenance start" crashed due to an uninitialized variable
@@ -203,7 +203,7 @@ Fixes since v2.47
* The dumb-http code regressed when the result of re-indexing a pack
yielded an *.idx file that differs in content from the *.idx file
it downloaded from the remote. This has been corrected by no longer
- relying on: the *.idx file we got from the remote.
+ relying on the *.idx file we got from the remote.
* When called with '--left-right' and '--use-bitmap-index', 'rev-list'
will produce output without any left/right markers, which has been
@@ -227,7 +227,7 @@ Fixes since v2.47
* "git gc" discards any objects that are outside promisor packs that
are referred to by an object in a promisor pack, and we do not
refetch them from the promisor at runtime, resulting an unusable
- repository. Work it around by including these objects in the
+ repository. Work around it by including these objects in the
referring promisor pack at the receiving end of the fetch.
* Avoid build/test breakage on a system without working malloc debug
@@ -282,9 +282,8 @@ Fixes since v2.47
on the path, which was not documented, which has been corrected.
(merge bc1a980759 kk/doc-ancestry-path later to maint).
-
* "git tag" has been taught to refuse to create refs/tags/HEAD
- as such a tag will be confusing in the context of UI provided by
+ since such a tag will be confusing in the context of the UI provided by
the Git Porcelain commands.
(merge bbd445d5ef jc/forbid-head-as-tagname later to maint).
diff --git a/Documentation/RelNotes/2.48.1.txt b/Documentation/RelNotes/2.48.1.txt
new file mode 100644
index 0000000000..26c59b6e3b
--- /dev/null
+++ b/Documentation/RelNotes/2.48.1.txt
@@ -0,0 +1,7 @@
+Git v2.48.1 Release Notes
+=========================
+
+This release merges up the fix that appears in v2.40.4, v2.41.3,
+v2.42.4, v2.43.6, v2.44.3, v2.45.3, v2.46.3, and v2.47.2 to address
+the security issues CVE-2024-50349 and CVE-2024-52006; see the release
+notes for these versions for details.
diff --git a/Documentation/RelNotes/2.49.0.txt b/Documentation/RelNotes/2.49.0.txt
new file mode 100644
index 0000000000..6c9e010b72
--- /dev/null
+++ b/Documentation/RelNotes/2.49.0.txt
@@ -0,0 +1,118 @@
+Git v2.49 Release Notes
+=======================
+
+UI, Workflows & Features
+------------------------
+
+ * Completion script updates for zsh
+
+
+Performance, Internal Implementation, Development Support etc.
+--------------------------------------------------------------
+
+ * More -Wsign-compare fixes.
+
+ * meson-based build now supports the unsafe-sha1 build knob.
+
+ * The code to check LSan results has been simplified and made more
+ robust.
+ (merge 164a2516eb jk/lsan-race-ignore-false-positive later to maint).
+
+ * More code paths have a repository passed through the callchain,
+ instead of assuming the primary the_repository object.
+
+ * Move a few more unit tests to the clar test framework.
+
+ * Introduce a new API to visit objects in batches based on a common
+ path, or by type.
+
+
+Fixes since v2.48
+-----------------
+
+ * "git submodule" learned various ways to spell the same option,
+ e.g. "--branch=B" can be spelled "--branch B" or "-bB".
+ (merge b86f0f9071 re/submodule-parse-opt later to maint).
+
+ * Tweak the help text used for the option value placeholders by
+ parse-options API so that translations can customize the "<>"
+ placeholder signal (e.g. "--option=<value>").
+ (merge 5b34dd08d0 as/long-option-help-i18n later to maint).
+
+ * CI jobs gave sporadic failures, which turns out that that the
+ object finalization code was giving an error when it did not have
+ to.
+ (merge d7fcbe2c56 ps/object-collision-check later to maint).
+
+ * The code to compute "unique" name used git_rand() which can fail or
+ get stuck; the callsite does not require cryptographic security.
+ Introduce the "insecure" mode and use it appropriately.
+ (merge 0b4f8afef6 ps/reftable-get-random-fix later to maint).
+
+ * A misconfigured "fsck.skiplist" configuration variable was not
+ diagnosed as an error, which has been corrected.
+ (merge ca7158076f jt/fsck-skiplist-parse-fix later to maint).
+
+ * Extended SHA-1 expression parser did not work well when a branch
+ with an unusual name (e.g. "foo{bar") is involved.
+ (merge 191f0c8db2 en/object-name-with-funny-refname-fix later to maint).
+
+ * The meson build procedure looked for the 'version-def.h' file in a
+ wrong directory, which has been corrected.
+ (merge 4771501c0a tc/meson-use-our-version-def-h later to maint).
+
+ * The meson build procedure for Documentation/technical/ hierarchy was
+ missing necessary dependencies, which has been corrected.
+ (merge 1dca492edd sj/meson-doc-technical-dependency-fix later to maint).
+
+ * The "instaweb" bound only to local IP address without "--local" and
+ to all addresses with "--local", which was the other way around, when
+ using Python's http.server class, which has been corrected.
+ (merge 76baf97fa1 ak/instaweb-python-port-binding-fix later to maint).
+
+ * Document that it is insecure to use Personal Access Tokens, which
+ some hosting providers take as username/password, embedded in URLs.
+ (merge a90ff409f0 mh/doc-credential-helpers-with-pat later to maint).
+
+ * The help text from "git $cmd -h" appear on the standard output for
+ some $cmd and the standard error for others. The built-in commands
+ have been fixed to show them on the standard output consistently.
+ (merge f66d1423f5 jc/show-usage-help later to maint).
+
+ * The meson-driven build is now aware of "git-subtree" housed in
+ contrib/subtree hierarchy.
+ (merge 8454b42f94 ps/build-meson-subtree later to maint).
+
+ * It was possible for "git unpack-objects" and "git index-pack" to
+ make an unaligned access, which has been corrected.
+ (merge 98046591b9 jk/pack-header-parse-alignment-fix later to maint).
+
+ * The "cache" credential back-end did not handle authtype correctly,
+ which has been corrected.
+ (merge 0b43274850 mh/credential-cache-authtype-request-fix later to maint).
+
+ * "git branch --sort=..." and "git for-each-ref --format=... --sort=..."
+ did not work as expected with some atoms, which has been corrected.
+ (merge c5490ce9d1 rs/ref-fitler-used-atoms-value-fix later to maint).
+
+ * reflog entries for symbolic ref updates were broken, which has been
+ corrected.
+ (merge 3519492430 kn/reflog-symref-fix later to maint).
+
+ * The trace2 code was not prepared to show a configuration variable
+ that is set to true using the valueless true syntax, which has been
+ corrected.
+ (merge 2fd367cf63 am/trace2-with-valueless-true later to maint).
+
+ * The "git refs migrate" command did not migrate the reflog for
+ refs/stash, which is the contents of the stashes, which has been
+ corrected.
+ (merge a0bea0978f ps/reflog-migration-with-logall-fix later to maint).
+
+ * Other code cleanup, docfix, build fix, etc.
+ (merge ddb5287894 jk/t7407-use-test-grep later to maint).
+ (merge 21e1b44865 aj/difftool-config-doc-fix later to maint).
+ (merge 6a63995335 mh/gitattr-doc-markup-fix later to maint).
+ (merge 43850dcf9c sk/unit-test-hash later to maint).
+ (merge 4ad47d2de3 jc/cli-doc-option-and-config later to maint).
+ (merge 2d0ff147e5 jp/t8002-printf-fix later to maint).
diff --git a/Documentation/config/commit.txt b/Documentation/config/commit.txt
index 62f0d92fda..d3f4624fd2 100644
--- a/Documentation/config/commit.txt
+++ b/Documentation/config/commit.txt
@@ -1,29 +1,34 @@
-commit.cleanup::
+ifdef::git-commit[]
+:see-git-commit:
+endif::git-commit[]
+ifndef::git-commit[]
+:see-git-commit: See linkgit:git-commit[1] for details.
+endif::git-commit[]
+`commit.cleanup`::
This setting overrides the default of the `--cleanup` option in
- `git commit`. See linkgit:git-commit[1] for details. Changing the
- default can be useful when you always want to keep lines that begin
+ `git commit`. {see-git-commit} Changing the default can be useful
+ when you always want to keep lines that begin
with the comment character `#` in your log message, in which case you
would do `git config commit.cleanup whitespace` (note that you will
have to remove the help lines that begin with `#` in the commit log
template yourself, if you do this).
-commit.gpgSign::
-
+`commit.gpgSign`::
A boolean to specify whether all commits should be GPG signed.
Use of this option when doing operations such as rebase can
result in a large number of commits being signed. It may be
convenient to use an agent to avoid typing your GPG passphrase
several times.
-commit.status::
+`commit.status`::
A boolean to enable/disable inclusion of status information in the
commit message template when using an editor to prepare the commit
- message. Defaults to true.
+ message. Defaults to `true`.
-commit.template::
+`commit.template`::
Specify the pathname of a file to use as the template for
new commit messages.
-commit.verbose::
+`commit.verbose`::
A boolean or int to specify the level of verbosity with `git commit`.
- See linkgit:git-commit[1].
+ {see-git-commit}
diff --git a/Documentation/config/credential.txt b/Documentation/config/credential.txt
index 470482ff4c..80a7c77772 100644
--- a/Documentation/config/credential.txt
+++ b/Documentation/config/credential.txt
@@ -22,6 +22,17 @@ credential.useHttpPath::
or https URL to be important. Defaults to false. See
linkgit:gitcredentials[7] for more information.
+credential.sanitizePrompt::
+ By default, user names and hosts that are shown as part of the
+ password prompt are not allowed to contain control characters (they
+ will be URL-encoded by default). Configure this setting to `false` to
+ override that behavior.
+
+credential.protectProtocol::
+ By default, Carriage Return characters are not allowed in the protocol
+ that is used when Git talks to a credential helper. This setting allows
+ users to override this default.
+
credential.username::
If no username is set for a network authentication, use this username
by default. See credential.<context>.* below, and
diff --git a/Documentation/config/diff.txt b/Documentation/config/diff.txt
index fdae13a212..1135a62a0a 100644
--- a/Documentation/config/diff.txt
+++ b/Documentation/config/diff.txt
@@ -218,8 +218,6 @@ endif::git-diff[]
Set this option to `true` to make the diff driver cache the text
conversion outputs. See linkgit:gitattributes[5] for details.
-include::{build_dir}/mergetools-diff.txt[]
-
`diff.indentHeuristic`::
Set this option to `false` to disable the default heuristics
that shift diff hunk boundaries to make patches easier to read.
diff --git a/Documentation/config/difftool.txt b/Documentation/config/difftool.txt
index 447c40d85a..6cd47331a9 100644
--- a/Documentation/config/difftool.txt
+++ b/Documentation/config/difftool.txt
@@ -13,6 +13,8 @@ diff.guitool::
and requires that a corresponding difftool.<guitool>.cmd variable
is defined.
+include::{build_dir}/mergetools-diff.txt[]
+
difftool.<tool>.cmd::
Specify the command to invoke the specified diff tool.
The specified command is evaluated in shell with the following
diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
index c822113c11..602e2f1200 100644
--- a/Documentation/git-commit.txt
+++ b/Documentation/git-commit.txt
@@ -7,8 +7,8 @@ git-commit - Record changes to the repository
SYNOPSIS
--------
-[verse]
-'git commit' [-a | --interactive | --patch] [-s] [-v] [-u<mode>] [--amend]
+[synopsis]
+git commit [-a | --interactive | --patch] [-s] [-v] [-u[<mode>]] [--amend]
[--dry-run] [(-c | -C | --squash) <commit> | --fixup [(amend|reword):]<commit>]
[-F <file> | -m <msg>] [--reset-author] [--allow-empty]
[--allow-empty-message] [--no-verify] [-e] [--author=<author>]
@@ -23,31 +23,31 @@ Create a new commit containing the current contents of the index and
the given log message describing the changes. The new commit is a
direct child of HEAD, usually the tip of the current branch, and the
branch is updated to point to it (unless no branch is associated with
-the working tree, in which case HEAD is "detached" as described in
+the working tree, in which case `HEAD` is "detached" as described in
linkgit:git-checkout[1]).
The content to be committed can be specified in several ways:
1. by using linkgit:git-add[1] to incrementally "add" changes to the
- index before using the 'commit' command (Note: even modified files
+ index before using the `commit` command (Note: even modified files
must be "added");
2. by using linkgit:git-rm[1] to remove files from the working tree
- and the index, again before using the 'commit' command;
+ and the index, again before using the `commit` command;
-3. by listing files as arguments to the 'commit' command
- (without --interactive or --patch switch), in which
+3. by listing files as arguments to the `commit` command
+ (without `--interactive` or `--patch` switch), in which
case the commit will ignore changes staged in the index, and instead
record the current content of the listed files (which must already
be known to Git);
-4. by using the -a switch with the 'commit' command to automatically
+4. by using the `-a` switch with the `commit` command to automatically
"add" changes from all known files (i.e. all files that are already
listed in the index) and to automatically "rm" files in the index
that have been removed from the working tree, and then perform the
actual commit;
-5. by using the --interactive or --patch switches with the 'commit' command
+5. by using the `--interactive` or `--patch` switches with the `commit` command
to decide one by one which files or hunks should be part of the commit
in addition to contents in the index,
before finalizing the operation. See the ``Interactive Mode'' section of
@@ -58,139 +58,139 @@ summary of what is included by any of the above for the next
commit by giving the same set of parameters (options and paths).
If you make a commit and then find a mistake immediately after
-that, you can recover from it with 'git reset'.
+that, you can recover from it with `git reset`.
:git-commit: 1
OPTIONS
-------
--a::
---all::
- Tell the command to automatically stage files that have
+`-a`::
+`--all`::
+ Automatically stage files that have
been modified and deleted, but new files you have not
told Git about are not affected.
--p::
---patch::
+`-p`::
+`--patch`::
Use the interactive patch selection interface to choose
which changes to commit. See linkgit:git-add[1] for
details.
--C <commit>::
---reuse-message=<commit>::
- Take an existing commit object, and reuse the log message
+`-C <commit>`::
+`--reuse-message=<commit>`::
+ Take an existing _<commit>_ object, and reuse the log message
and the authorship information (including the timestamp)
when creating the commit.
--c <commit>::
---reedit-message=<commit>::
- Like '-C', but with `-c` the editor is invoked, so that
+`-c <commit>`::
+`--reedit-message=<commit>`::
+ Like `-C`, but with `-c` the editor is invoked, so that
the user can further edit the commit message.
---fixup=[(amend|reword):]<commit>::
- Create a new commit which "fixes up" `<commit>` when applied with
+`--fixup=[(amend|reword):]<commit>`::
+ Create a new commit which "fixes up" _<commit>_ when applied with
`git rebase --autosquash`. Plain `--fixup=<commit>` creates a
- "fixup!" commit which changes the content of `<commit>` but leaves
+ "fixup!" commit which changes the content of _<commit>_ but leaves
its log message untouched. `--fixup=amend:<commit>` is similar but
creates an "amend!" commit which also replaces the log message of
- `<commit>` with the log message of the "amend!" commit.
+ _<commit>_ with the log message of the "amend!" commit.
`--fixup=reword:<commit>` creates an "amend!" commit which
- replaces the log message of `<commit>` with its own log message
- but makes no changes to the content of `<commit>`.
+ replaces the log message of _<commit>_ with its own log message
+ but makes no changes to the content of _<commit>_.
+
The commit created by plain `--fixup=<commit>` has a subject
-composed of "fixup!" followed by the subject line from <commit>,
+composed of "fixup!" followed by the subject line from _<commit>_,
and is recognized specially by `git rebase --autosquash`. The `-m`
option may be used to supplement the log message of the created
commit, but the additional commentary will be thrown away once the
-"fixup!" commit is squashed into `<commit>` by
+"fixup!" commit is squashed into _<commit>_ by
`git rebase --autosquash`.
+
The commit created by `--fixup=amend:<commit>` is similar but its
subject is instead prefixed with "amend!". The log message of
-<commit> is copied into the log message of the "amend!" commit and
+_<commit>_ is copied into the log message of the "amend!" commit and
opened in an editor so it can be refined. When `git rebase
---autosquash` squashes the "amend!" commit into `<commit>`, the
-log message of `<commit>` is replaced by the refined log message
+--autosquash` squashes the "amend!" commit into _<commit>_, the
+log message of _<commit>_ is replaced by the refined log message
from the "amend!" commit. It is an error for the "amend!" commit's
log message to be empty unless `--allow-empty-message` is
specified.
+
`--fixup=reword:<commit>` is shorthand for `--fixup=amend:<commit>
---only`. It creates an "amend!" commit with only a log message
+ --only`. It creates an "amend!" commit with only a log message
(ignoring any changes staged in the index). When squashed by `git
-rebase --autosquash`, it replaces the log message of `<commit>`
+rebase --autosquash`, it replaces the log message of _<commit>_
without making any other changes.
+
Neither "fixup!" nor "amend!" commits change authorship of
-`<commit>` when applied by `git rebase --autosquash`.
+_<commit>_ when applied by `git rebase --autosquash`.
See linkgit:git-rebase[1] for details.
---squash=<commit>::
- Construct a commit message for use with `rebase --autosquash`.
+`--squash=<commit>`::
+ Construct a commit message for use with `git rebase --autosquash`.
The commit message subject line is taken from the specified
commit with a prefix of "squash! ". Can be used with additional
commit message options (`-m`/`-c`/`-C`/`-F`). See
linkgit:git-rebase[1] for details.
---reset-author::
- When used with -C/-c/--amend options, or when committing after a
+`--reset-author`::
+ When used with `-C`/`-c`/`--amend` options, or when committing after a
conflicting cherry-pick, declare that the authorship of the
resulting commit now belongs to the committer. This also renews
the author timestamp.
---short::
+`--short`::
When doing a dry-run, give the output in the short-format. See
linkgit:git-status[1] for details. Implies `--dry-run`.
---branch::
+`--branch`::
Show the branch and tracking info even in short-format.
---porcelain::
+`--porcelain`::
When doing a dry-run, give the output in a porcelain-ready
format. See linkgit:git-status[1] for details. Implies
`--dry-run`.
---long::
+`--long`::
When doing a dry-run, give the output in the long-format.
Implies `--dry-run`.
--z::
---null::
+`-z`::
+`--null`::
When showing `short` or `porcelain` status output, print the
- filename verbatim and terminate the entries with NUL, instead of LF.
+ filename verbatim and terminate the entries with _NUL_, instead of _LF_.
If no format is given, implies the `--porcelain` output format.
Without the `-z` option, filenames with "unusual" characters are
quoted as explained for the configuration variable `core.quotePath`
(see linkgit:git-config[1]).
--F <file>::
---file=<file>::
- Take the commit message from the given file. Use '-' to
+`-F <file>`::
+`--file=<file>`::
+ Take the commit message from _<file>_. Use '-' to
read the message from the standard input.
---author=<author>::
+`--author=<author>`::
Override the commit author. Specify an explicit author using the
- standard `A U Thor <author@example.com>` format. Otherwise <author>
+ standard `A U Thor <author@example.com>` format. Otherwise _<author>_
is assumed to be a pattern and is used to search for an existing
- commit by that author (i.e. rev-list --all -i --author=<author>);
+ commit by that author (i.e. `git rev-list --all -i --author=<author>`);
the commit author is then copied from the first such commit found.
---date=<date>::
+`--date=<date>`::
Override the author date used in the commit.
--m <msg>::
---message=<msg>::
- Use the given <msg> as the commit message.
+`-m <msg>`::
+`--message=<msg>`::
+ Use _<msg>_ as the commit message.
If multiple `-m` options are given, their values are
concatenated as separate paragraphs.
+
The `-m` option is mutually exclusive with `-c`, `-C`, and `-F`.
--t <file>::
---template=<file>::
+`-t <file>`::
+`--template=<file>`::
When editing the commit message, start the editor with the
- contents in the given file. The `commit.template` configuration
+ contents in _<file>_. The `commit.template` configuration
variable is often used to give this option implicitly to the
command. This mechanism can be used by projects that want to
guide participants with some hints on what to write in the message
@@ -200,56 +200,54 @@ The `-m` option is mutually exclusive with `-c`, `-C`, and `-F`.
include::signoff-option.txt[]
---trailer <token>[(=|:)<value>]::
- Specify a (<token>, <value>) pair that should be applied as a
+`--trailer <token>[(=|:)<value>]`::
+ Specify a (_<token>_, _<value>_) pair that should be applied as a
trailer. (e.g. `git commit --trailer "Signed-off-by:C O Mitter \
<committer@example.com>" --trailer "Helped-by:C O Mitter \
- <committer@example.com>"` will add the "Signed-off-by" trailer
- and the "Helped-by" trailer to the commit message.)
+ <committer@example.com>"` will add the `Signed-off-by` trailer
+ and the `Helped-by` trailer to the commit message.)
The `trailer.*` configuration variables
(linkgit:git-interpret-trailers[1]) can be used to define if
a duplicated trailer is omitted, where in the run of trailers
each trailer would appear, and other details.
--n::
---[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.
+`-n`::
+`--[no-]verify`::
+ Bypass the `pre-commit` and `commit-msg` hooks.
See also linkgit:githooks[5].
---allow-empty::
+`--allow-empty`::
Usually recording a commit that has the exact same tree as its
sole parent commit is a mistake, and the command prevents you
from making such a commit. This option bypasses the safety, and
is primarily for use by foreign SCM interface scripts.
---allow-empty-message::
- Like --allow-empty this command is primarily for use by foreign
- SCM interface scripts. It allows you to create a commit with an
- empty commit message without using plumbing commands like
- linkgit:git-commit-tree[1].
+`--allow-empty-message`::
+ Create a commit with an empty commit message without using plumbing
+ commands like linkgit:git-commit-tree[1]. Like `--allow-empty`, this
+ command is primarily for use by foreign SCM interface scripts.
---cleanup=<mode>::
- This option determines how the supplied commit message should be
+`--cleanup=<mode>`::
+ Determine how the supplied commit message should be
cleaned up before committing. The '<mode>' can be `strip`,
`whitespace`, `verbatim`, `scissors` or `default`.
+
--
-strip::
+`strip`::
Strip leading and trailing empty lines, trailing whitespace,
commentary and collapse consecutive empty lines.
-whitespace::
+`whitespace`::
Same as `strip` except #commentary is not removed.
-verbatim::
+`verbatim`::
Do not change the message at all.
-scissors::
+`scissors`::
Same as `whitespace` except that everything from (and including)
the line found below is truncated, if the message is to be edited.
- "`#`" can be customized with core.commentChar.
+ "`#`" can be customized with `core.commentChar`.
# ------------------------ >8 ------------------------
-default::
+`default`::
Same as `strip` if the message is to be edited.
Otherwise `whitespace`.
--
@@ -257,19 +255,18 @@ default::
The default can be changed by the `commit.cleanup` configuration
variable (see linkgit:git-config[1]).
--e::
---edit::
- The message taken from file with `-F`, command line with
- `-m`, and from commit object with `-C` are usually used as
- the commit log message unmodified. This option lets you
- further edit the message taken from these sources.
+`-e`::
+`--edit`::
+ Let the user further edit the message taken from _<file>_
+ with `-F <file>`, command line with `-m <message>`, and
+ from _<commit>_ with `-C <commit>`.
---no-edit::
+`--no-edit`::
Use the selected commit message without launching an editor.
For example, `git commit --amend --no-edit` amends a commit
without changing its commit message.
---amend::
+`--amend`::
Replace the tip of the current branch by creating a new
commit. The recorded tree is prepared as usual (including
the effect of the `-i` and `-o` options and explicit
@@ -295,23 +292,23 @@ You should understand the implications of rewriting history if you
amend a commit that has already been published. (See the "RECOVERING
FROM UPSTREAM REBASE" section in linkgit:git-rebase[1].)
---no-post-rewrite::
- Bypass the post-rewrite hook.
+`--no-post-rewrite`::
+ Bypass the `post-rewrite` hook.
--i::
---include::
+`-i`::
+`--include`::
Before making a commit out of staged contents so far,
stage the contents of paths given on the command line
as well. This is usually not what you want unless you
are concluding a conflicted merge.
--o::
---only::
+`-o`::
+`--only`::
Make a commit by taking the updated working tree contents
of the paths specified on the
command line, disregarding any contents that have been
staged for other paths. This is the default mode of operation of
- 'git commit' if any paths are given on the command line,
+ `git commit` if any paths are given on the command line,
in which case this option can be omitted.
If this option is specified together with `--amend`, then
no paths need to be specified, which can be used to amend
@@ -319,48 +316,48 @@ FROM UPSTREAM REBASE" section in linkgit:git-rebase[1].)
already been staged. If used together with `--allow-empty`
paths are also not required, and an empty commit will be created.
---pathspec-from-file=<file>::
- Pathspec is passed in `<file>` instead of commandline args. If
- `<file>` is exactly `-` then standard input is used. Pathspec
- elements are separated by LF or CR/LF. Pathspec elements can be
+`--pathspec-from-file=<file>`::
+ Pass pathspec in _<file>_ instead of commandline args. If
+ _<file>_ is exactly `-` then standard input is used. Pathspec
+ elements are separated by _LF_ or _CR_/_LF_. Pathspec elements can be
quoted as explained for the configuration variable `core.quotePath`
(see linkgit:git-config[1]). See also `--pathspec-file-nul` and
global `--literal-pathspecs`.
---pathspec-file-nul::
+`--pathspec-file-nul`::
Only meaningful with `--pathspec-from-file`. Pathspec elements are
- separated with NUL character and all other characters are taken
+ separated with _NUL_ character and all other characters are taken
literally (including newlines and quotes).
--u[<mode>]::
---untracked-files[=<mode>]::
+`-u[<mode>]`::
+`--untracked-files[=<mode>]`::
Show untracked files.
+
--
-The mode parameter is optional (defaults to 'all'), and is used to
-specify the handling of untracked files; when -u is not used, the
-default is 'normal', i.e. show untracked files and directories.
+The _<mode>_ parameter is optional (defaults to `all`), and is used to
+specify the handling of untracked files; when `-u` is not used, the
+default is `normal`, i.e. show untracked files and directories.
The possible options are:
- - 'no' - Show no untracked files
- - 'normal' - Shows untracked files and directories
- - 'all' - Also shows individual files in untracked directories.
+`no`:: Show no untracked files
+`normal`:: Shows untracked files and directories
+`all`:: Also shows individual files in untracked directories.
All usual spellings for Boolean value `true` are taken as `normal`
and `false` as `no`.
-The default can be changed using the status.showUntrackedFiles
+The default can be changed using the `status.showUntrackedFiles`
configuration variable documented in linkgit:git-config[1].
--
--v::
---verbose::
- Show unified diff between the HEAD commit and what
+`-v`::
+`--verbose`::
+ Show unified diff between the `HEAD` commit and what
would be committed at the bottom of the commit message
template to help the user describe the commit by reminding
what changes the commit has.
Note that this diff output doesn't have its
- lines prefixed with '#'. This diff will not be a part
+ lines prefixed with `#`. This diff will not be a part
of the commit message. See the `commit.verbose` configuration
variable in linkgit:git-config[1].
+
@@ -368,40 +365,40 @@ If specified twice, show in addition the unified diff between
what would be committed and the worktree files, i.e. the unstaged
changes to tracked files.
--q::
---quiet::
+`-q`::
+`--quiet`::
Suppress commit summary message.
---dry-run::
+`--dry-run`::
Do not create a commit, but show a list of paths that are
to be committed, paths with local changes that will be left
uncommitted and paths that are untracked.
---status::
+`--status`::
Include the output of linkgit:git-status[1] in the commit
message template when using an editor to prepare the commit
message. Defaults to on, but can be used to override
- configuration variable commit.status.
+ configuration variable `commit.status`.
---no-status::
+`--no-status`::
Do not include the output of linkgit:git-status[1] in the
commit message template when using an editor to prepare the
default commit message.
--S[<keyid>]::
---gpg-sign[=<keyid>]::
---no-gpg-sign::
- GPG-sign commits. The `keyid` argument is optional and
+`-S[<key-id>]`::
+`--gpg-sign[=<key-id>]`::
+`--no-gpg-sign`::
+ GPG-sign commits. The _<key-id>_ is optional and
defaults to the committer identity; if specified, it must be
stuck to the option without a space. `--no-gpg-sign` is useful to
countermand both `commit.gpgSign` configuration variable, and
earlier `--gpg-sign`.
-\--::
+`--`::
Do not interpret any more arguments as options.
-<pathspec>...::
- When pathspec is given on the command line, commit the contents of
+`<pathspec>...`::
+ When _<pathspec>_ is given on the command line, commit the contents of
the files that match the pathspec without recording the changes
already added to the index. The contents of these files are also
staged for the next commit on top of what have been staged before.
@@ -412,10 +409,10 @@ EXAMPLES
--------
When recording your own work, the contents of modified files in
your working tree are temporarily stored to a staging area
-called the "index" with 'git add'. A file can be
+called the "index" with `git add`. A file can be
reverted back, only in the index but not in the working tree,
to that of the last commit with `git restore --staged <file>`,
-which effectively reverts 'git add' and prevents the changes to
+which effectively reverts `git add` and prevents the changes to
this file from participating in the next commit. After building
the state to be committed incrementally with these commands,
`git commit` (without any pathname parameter) is used to record what
@@ -443,7 +440,7 @@ $ git commit -a
------------
The command `git commit -a` first looks at your working tree,
-notices that you have modified hello.c and removed goodbye.c,
+notices that you have modified `hello.c` and removed `goodbye.c`,
and performs necessary `git add` and `git rm` for you.
After staging changes to many files, you can alter the order the
@@ -471,13 +468,13 @@ $ git commit
this second commit would record the changes to `hello.c` and
`hello.h` as expected.
-After a merge (initiated by 'git merge' or 'git pull') stops
+After a merge (initiated by `git merge` or `git pull`) stops
because of conflicts, cleanly merged
paths are already staged to be committed for you, and paths that
conflicted are left in unmerged state. You would have to first
-check which paths are conflicting with 'git status'
+check which paths are conflicting with `git status`
and after fixing them manually in your working tree, you would
-stage the result as usual with 'git add':
+stage the result as usual with `git add`:
------------
$ git status | grep unmerged
@@ -507,12 +504,12 @@ COMMIT INFORMATION
Author and committer information is taken from the following environment
variables, if set:
- GIT_AUTHOR_NAME
- GIT_AUTHOR_EMAIL
- GIT_AUTHOR_DATE
- GIT_COMMITTER_NAME
- GIT_COMMITTER_EMAIL
- GIT_COMMITTER_DATE
+ * `GIT_AUTHOR_NAME`
+ * `GIT_AUTHOR_EMAIL`
+ * `GIT_AUTHOR_DATE`
+ * `GIT_COMMITTER_NAME`
+ * `GIT_COMMITTER_EMAIL`
+ * `GIT_COMMITTER_DATE`
(nb "<", ">" and "\n"s are stripped)
@@ -524,7 +521,7 @@ that, see the `credential.username` variable in linkgit:git-config[1].
In case (some of) these environment variables are not set, the information
is taken from the configuration items `user.name` and `user.email`, or, if not
-present, the environment variable EMAIL, or, if that is not set,
+present, the environment variable `EMAIL`, or, if that is not set,
system user name and the hostname used for outgoing mail (taken
from `/etc/mailname` and falling back to the fully qualified hostname when
that file does not exist).
@@ -555,7 +552,7 @@ include::i18n.txt[]
ENVIRONMENT AND CONFIGURATION VARIABLES
---------------------------------------
The editor used to edit the commit log message will be chosen from the
-`GIT_EDITOR` environment variable, the core.editor configuration variable, the
+`GIT_EDITOR` environment variable, the `core.editor` configuration variable, the
`VISUAL` environment variable, or the `EDITOR` environment variable (in that
order). See linkgit:git-var[1] for details.
diff --git a/Documentation/git-credential-cache.txt b/Documentation/git-credential-cache.txt
index 487cc557a8..54fa7a27e1 100644
--- a/Documentation/git-credential-cache.txt
+++ b/Documentation/git-credential-cache.txt
@@ -78,6 +78,23 @@ variable (this example increases the cache time to 1 hour):
$ git config credential.helper 'cache --timeout=3600'
-------------------------------------------------------
+PERSONAL ACCESS TOKENS
+----------------------
+
+Some remotes accept personal access tokens, which are randomly
+generated and hard to memorise. They typically have a lifetime of weeks
+or months.
+
+git-credential-cache is inherently unsuitable for persistent storage of
+personal access tokens. The credential will be forgotten after the cache
+timeout. Even if you configure a long timeout, credentials will be
+forgotten if the daemon dies.
+
+To avoid frequently regenerating personal access tokens, configure a
+credential helper with persistent storage. Alternatively, configure an
+OAuth credential helper to generate credentials automatically. See
+linkgit:gitcredentials[7], sections "Available helpers" and "OAuth".
+
GIT
---
Part of the linkgit:git[1] suite
diff --git a/Documentation/git-restore.txt b/Documentation/git-restore.txt
index 975825b44a..751f01b441 100644
--- a/Documentation/git-restore.txt
+++ b/Documentation/git-restore.txt
@@ -7,10 +7,10 @@ git-restore - Restore working tree files
SYNOPSIS
--------
-[verse]
-'git restore' [<options>] [--source=<tree>] [--staged] [--worktree] [--] <pathspec>...
-'git restore' [<options>] [--source=<tree>] [--staged] [--worktree] --pathspec-from-file=<file> [--pathspec-file-nul]
-'git restore' (-p|--patch) [<options>] [--source=<tree>] [--staged] [--worktree] [--] [<pathspec>...]
+[synopsis]
+git restore [<options>] [--source=<tree>] [--staged] [--worktree] [--] <pathspec>...
+git restore [<options>] [--source=<tree>] [--staged] [--worktree] --pathspec-from-file=<file> [--pathspec-file-nul]
+git restore (-p|--patch) [<options>] [--source=<tree>] [--staged] [--worktree] [--] [<pathspec>...]
DESCRIPTION
-----------
@@ -32,8 +32,8 @@ THIS COMMAND IS EXPERIMENTAL. THE BEHAVIOR MAY CHANGE.
OPTIONS
-------
--s <tree>::
---source=<tree>::
+`-s <tree>`::
+`--source=<tree>`::
Restore the working tree files with the content from the given
tree. It is common to specify the source tree by naming a
commit, branch or tag associated with it.
@@ -41,79 +41,79 @@ OPTIONS
If not specified, the contents are restored from `HEAD` if `--staged` is
given, otherwise from the index.
+
-As a special case, you may use `"A...B"` as a shortcut for the
-merge base of `A` and `B` if there is exactly one merge base. You can
-leave out at most one of `A` and `B`, in which case it defaults to `HEAD`.
+As a special case, you may use `"<rev-A>...<rev-B>"` as a shortcut for the
+merge base of _<rev-A>_ and _<rev-B>_ if there is exactly one merge base. You can
+leave out at most one of _<rev-A>__ and _<rev-B>_, in which case it defaults to `HEAD`.
--p::
---patch::
+`-p`::
+`--patch`::
Interactively select hunks in the difference between the
- restore source and the restore location. See the ``Interactive
- Mode'' section of linkgit:git-add[1] to learn how to operate
+ restore source and the restore location. See the "Interactive
+ Mode" section of linkgit:git-add[1] to learn how to operate
the `--patch` mode.
+
Note that `--patch` can accept no pathspec and will prompt to restore
all modified paths.
--W::
---worktree::
--S::
---staged::
+`-W`::
+`--worktree`::
+`-S`::
+`--staged`::
Specify the restore location. If neither option is specified,
by default the working tree is restored. Specifying `--staged`
will only restore the index. Specifying both restores both.
--q::
---quiet::
+`-q`::
+`--quiet`::
Quiet, suppress feedback messages. Implies `--no-progress`.
---progress::
---no-progress::
+`--progress`::
+`--no-progress`::
Progress status is reported on the standard error stream
by default when it is attached to a terminal, unless `--quiet`
is specified. This flag enables progress reporting even if not
attached to a terminal, regardless of `--quiet`.
---ours::
---theirs::
+`--ours`::
+`--theirs`::
When restoring files in the working tree from the index, use
- stage #2 ('ours') or #3 ('theirs') for unmerged paths.
+ stage #2 (`ours`) or #3 (`theirs`) for unmerged paths.
This option cannot be used when checking out paths from a
tree-ish (i.e. with the `--source` option).
+
-Note that during `git rebase` and `git pull --rebase`, 'ours' and
-'theirs' may appear swapped. See the explanation of the same options
+Note that during `git rebase` and `git pull --rebase`, `ours` and
+`theirs` may appear swapped. See the explanation of the same options
in linkgit:git-checkout[1] for details.
--m::
---merge::
+`-m`::
+`--merge`::
When restoring files on the working tree from the index,
recreate the conflicted merge in the unmerged paths.
This option cannot be used when checking out paths from a
tree-ish (i.e. with the `--source` option).
---conflict=<style>::
+`--conflict=<style>`::
The same as `--merge` option above, but changes the way the
conflicting hunks are presented, overriding the
`merge.conflictStyle` configuration variable. Possible values
- are "merge" (default), "diff3", and "zdiff3".
+ are `merge` (default), `diff3`, and `zdiff3`.
---ignore-unmerged::
+`--ignore-unmerged`::
When restoring files on the working tree from the index, do
not abort the operation if there are unmerged entries and
neither `--ours`, `--theirs`, `--merge` or `--conflict` is
specified. Unmerged paths on the working tree are left alone.
---ignore-skip-worktree-bits::
+`--ignore-skip-worktree-bits`::
In sparse checkout mode, the default is to only update entries
- matched by `<pathspec>` and sparse patterns in
- $GIT_DIR/info/sparse-checkout. This option ignores the sparse
+ matched by _<pathspec>_ and sparse patterns in
+ `$GIT_DIR/info/sparse-checkout`. This option ignores the sparse
patterns and unconditionally restores any files in
- `<pathspec>`.
+ _<pathspec>_.
---recurse-submodules::
---no-recurse-submodules::
- If `<pathspec>` names an active submodule and the restore location
+`--recurse-submodules`::
+`--no-recurse-submodules`::
+ If _<pathspec>_ names an active submodule and the restore location
includes the working tree, the submodule will only be updated if
this option is given, in which case its working tree will be
restored to the commit recorded in the superproject, and any local
@@ -122,30 +122,30 @@ in linkgit:git-checkout[1] for details.
not be updated. Just like linkgit:git-checkout[1], this will detach
`HEAD` of the submodule.
---overlay::
---no-overlay::
- In overlay mode, the command never removes files when
- restoring. In no-overlay mode, tracked files that do not
- appear in the `--source` tree are removed, to make them match
- `<tree>` exactly. The default is no-overlay mode.
-
---pathspec-from-file=<file>::
- Pathspec is passed in `<file>` instead of commandline args. If
- `<file>` is exactly `-` then standard input is used. Pathspec
- elements are separated by LF or CR/LF. Pathspec elements can be
+`--overlay`::
+`--no-overlay`::
+ In overlay mode, never remove files when restoring. In no-overlay mode,
+ remove tracked files that do not appear in the _<tree>_ of
+ `--source=<tree>`, to make them match _<tree>_ exactly. The default
+ is no-overlay mode.
+
+`--pathspec-from-file=<file>`::
+ Pathspec is passed in _<file>_ instead of commandline args. If
+ _<file>_ is exactly `-` then standard input is used. Pathspec
+ elements are separated by _LF_ or _CR_/_LF_. Pathspec elements can be
quoted as explained for the configuration variable `core.quotePath`
(see linkgit:git-config[1]). See also `--pathspec-file-nul` and
global `--literal-pathspecs`.
---pathspec-file-nul::
+`--pathspec-file-nul`::
Only meaningful with `--pathspec-from-file`. Pathspec elements are
- separated with NUL character and all other characters are taken
+ separated with _NUL_ character and all other characters are taken
literally (including newlines and quotes).
-\--::
+`--`::
Do not interpret any more arguments as options.
-<pathspec>...::
+`<pathspec>...`::
Limits the paths affected by the operation.
+
For more details, see the 'pathspec' entry in linkgit:gitglossary[7].
@@ -154,7 +154,7 @@ EXAMPLES
--------
The following sequence switches to the `master` branch, reverts the
-`Makefile` to two revisions back, deletes hello.c by mistake, and gets
+`Makefile` to two revisions back, deletes `hello.c` by mistake, and gets
it back from the index.
------------
@@ -165,7 +165,7 @@ $ git restore hello.c <2>
------------
<1> take a file out of another commit
-<2> restore hello.c from the index
+<2> restore `hello.c` from the index
If you want to restore _all_ C source files to match the version in
the index, you can say
diff --git a/Documentation/git.txt b/Documentation/git.txt
index 81498393af..e89a91dd0d 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
@@ -478,7 +478,7 @@ their values the same way as Boolean valued configuration variables, e.g.
Here are the variables:
System
-~~~~~~~~~~~~~~~~~~
+~~~~~~
`HOME`::
Specifies the path to the user's home directory. On Windows, if
unset, Git will set a process environment variable equal to:
diff --git a/Documentation/gitattributes.txt b/Documentation/gitattributes.txt
index e6150595af..5d12b78549 100644
--- a/Documentation/gitattributes.txt
+++ b/Documentation/gitattributes.txt
@@ -1166,7 +1166,7 @@ internal merge and the final merge.
The merge driver can learn the pathname in which the merged result
will be stored via placeholder `%P`. The conflict labels to be used
for the common ancestor, local head and other head can be passed by
-using '%S', '%X' and '%Y` respectively.
+using `%S`, `%X` and `%Y` respectively.
`conflict-marker-size`
^^^^^^^^^^^^^^^^^^^^^^
diff --git a/Documentation/gitcli.txt b/Documentation/gitcli.txt
index bd62cbd043..04193ec907 100644
--- a/Documentation/gitcli.txt
+++ b/Documentation/gitcli.txt
@@ -91,7 +91,7 @@ scripting Git:
written in the 'stuck' form.
* Despite the above suggestion, when Arg is a path relative to the
- home directory of a user, e.g. ~/directory/file or ~u/d/f, you
+ home directory of a user, e.g. `~/directory/file` or `~u/d/f`, you
may want to use the separate form, e.g. `git foo --file ~/mine`,
not `git foo --file=~/mine`. The shell will expand `~/` in the
former to your home directory, but most shells keep the tilde in
@@ -161,6 +161,23 @@ can use `--no-track` to override that behaviour. The same goes for `--color`
and `--no-color`.
+Options trump configuration and environment
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+When there is a configuration variable or an environment variable
+that tweak the behaviour of an aspect of a Git command, and also a
+command line option that tweaks the same, the command line option
+overrides what the configuration and/or environment variable say.
+
+For example, the `user.name` configuration variable is used to
+specify the human-readable name used by the `git commit` command to
+record the author and the committer name in a newly created commit.
+The `GIT_AUTHOR_NAME` environment variable, if set, takes precedence
+when deciding what author name to record. The `--author=<author>`
+command line option of the `git commit` command, when given, takes
+precedence over these two sources of information.
+
+
Aggregating short options
~~~~~~~~~~~~~~~~~~~~~~~~~
Commands that support the enhanced option parser allow you to aggregate short
diff --git a/Documentation/gitcredentials.txt b/Documentation/gitcredentials.txt
index 35a7452c8f..3337bb475d 100644
--- a/Documentation/gitcredentials.txt
+++ b/Documentation/gitcredentials.txt
@@ -66,18 +66,7 @@ storage provided by the OS or other programs. Alternatively, a
credential-generating helper might generate credentials for certain servers via
some API.
-To use a helper, you must first select one to use. Git currently
-includes the following helpers:
-
-cache::
-
- Cache credentials in memory for a short period of time. See
- linkgit:git-credential-cache[1] for details.
-
-store::
-
- Store credentials indefinitely on disk. See
- linkgit:git-credential-store[1] for details.
+To use a helper, you must first select one to use (see below for a list).
You may also have third-party helpers installed; search for
`credential-*` in the output of `git help -a`, and consult the
@@ -106,6 +95,28 @@ $ git config --global credential.helper foo
=== Available helpers
+Git currently includes the following helpers:
+
+cache::
+
+ Cache credentials in memory for a short period of time. See
+ linkgit:git-credential-cache[1] for details.
+
+store::
+
+ Store credentials indefinitely on disk. See
+ linkgit:git-credential-store[1] for details.
+
+Popular helpers with secure persistent storage include:
+
+ - git-credential-libsecret (Linux)
+
+ - git-credential-osxkeychain (macOS)
+
+ - git-credential-wincred (Windows)
+
+ - https://github.com/git-ecosystem/git-credential-manager[Git Credential Manager] (cross platform, included in Git for Windows)
+
The community maintains a comprehensive list of Git credential helpers at
https://git-scm.com/doc/credential-helpers.
@@ -116,6 +127,12 @@ OAuth credential helper. Initial authentication opens a browser window to the
host. Subsequent authentication happens in the background. Many popular Git
hosts support OAuth.
+Popular helpers with OAuth support include:
+
+ - https://github.com/git-ecosystem/git-credential-manager[Git Credential Manager] (cross platform, included in Git for Windows)
+
+ - https://github.com/hickford/git-credential-oauth[git-credential-oauth] (cross platform, included in many Linux distributions)
+
CREDENTIAL CONTEXTS
-------------------
diff --git a/Documentation/i18n.txt b/Documentation/i18n.txt
index 3a866af4a4..baff780a7e 100644
--- a/Documentation/i18n.txt
+++ b/Documentation/i18n.txt
@@ -34,7 +34,7 @@ project find it more convenient to use legacy encodings, Git
does not forbid it. However, there are a few things to keep in
mind.
-. 'git commit' and 'git commit-tree' issue
+. `git commit` and `git commit-tree` issue
a warning if the commit log message given to it does not look
like a valid UTF-8 string, unless you explicitly say your
project uses a legacy encoding. The way to say this is to
@@ -50,7 +50,7 @@ of `i18n.commitEncoding` in their `encoding` header. This is to
help other people who look at them later. Lack of this header
implies that the commit log message is encoded in UTF-8.
-. 'git log', 'git show', 'git blame' and friends look at the
+. `git log`, `git show`, `git blame` and friends look at the
`encoding` header of a commit object, and try to re-code the
log message into UTF-8 unless otherwise specified. You can
specify the desired output encoding with
diff --git a/Documentation/signoff-option.txt b/Documentation/signoff-option.txt
index d98758f3cb..cddfb225d1 100644
--- a/Documentation/signoff-option.txt
+++ b/Documentation/signoff-option.txt
@@ -1,8 +1,8 @@
ifdef::git-commit[]
--s::
+`-s`::
endif::git-commit[]
---signoff::
---no-signoff::
+`--signoff`::
+`--no-signoff`::
Add a `Signed-off-by` trailer by the committer at the end of the commit
log message. The meaning of a signoff depends on the project
to which you're committing. For example, it may certify that
@@ -14,5 +14,5 @@ endif::git-commit[]
leadership of the project to which you're contributing to
understand how the signoffs are used in that project.
+
-The --no-signoff option can be used to countermand an earlier --signoff
+The `--no-signoff` option can be used to countermand an earlier `--signoff`
option on the command line.
diff --git a/Documentation/technical/api-path-walk.txt b/Documentation/technical/api-path-walk.txt
new file mode 100644
index 0000000000..7075d0d5ab
--- /dev/null
+++ b/Documentation/technical/api-path-walk.txt
@@ -0,0 +1,63 @@
+Path-Walk API
+=============
+
+The path-walk API is used to walk reachable objects, but to visit objects
+in batches based on a common path they appear in, or by type.
+
+For example, all reachable commits are visited in a group. All tags are
+visited in a group. Then, all root trees are visited. At some point, all
+blobs reachable via a path `my/dir/to/A` are visited. When there are
+multiple paths possible to reach the same object, then only one of those
+paths is used to visit the object.
+
+Basics
+------
+
+To use the path-walk API, include `path-walk.h` and call
+`walk_objects_by_path()` with a customized `path_walk_info` struct. The
+struct is used to set all of the options for how the walk should proceed.
+Let's dig into the different options and their use.
+
+`path_fn` and `path_fn_data`::
+ The most important option is the `path_fn` option, which is a
+ function pointer to the callback that can execute logic on the
+ object IDs for objects grouped by type and path. This function
+ also receives a `data` value that corresponds to the
+ `path_fn_data` member, for providing custom data structures to
+ this callback function.
+
+`revs`::
+ To configure the exact details of the reachable set of objects,
+ use the `revs` member and initialize it using the revision
+ machinery in `revision.h`. Initialize `revs` using calls such as
+ `setup_revisions()` or `parse_revision_opt()`. Do not call
+ `prepare_revision_walk()`, as that will be called within
+ `walk_objects_by_path()`.
++
+It is also important that you do not specify the `--objects` flag for the
+`revs` struct. The revision walk should only be used to walk commits, and
+the objects will be walked in a separate way based on those starting
+commits.
+
+`commits`, `blobs`, `trees`, `tags`::
+ By default, these members are enabled and signal that the path-walk
+ API should call the `path_fn` on objects of these types. Specialized
+ applications could disable some options to make it simpler to walk
+ the objects or to have fewer calls to `path_fn`.
++
+While it is possible to walk only commits in this way, consumers would be
+better off using the revision walk API instead.
+
+`prune_all_uninteresting`::
+ By default, all reachable paths are emitted by the path-walk API.
+ This option allows consumers to declare that they are not
+ interested in paths where all included objects are marked with the
+ `UNINTERESTING` flag. This requires using the `boundary` option in
+ the revision walk so that the walk emits commits marked with the
+ `UNINTERESTING` flag.
+
+Examples
+--------
+
+See example usages in:
+ `t/helper/test-path-walk.c`
diff --git a/Documentation/technical/meson.build b/Documentation/technical/meson.build
index 21dfb8b5c9..3a65ee59b3 100644
--- a/Documentation/technical/meson.build
+++ b/Documentation/technical/meson.build
@@ -60,6 +60,7 @@ foreach article : api_docs + articles
command: asciidoc_html_options,
input: article,
output: fs.stem(article) + '.html',
+ depends: documentation_deps,
install: true,
install_dir: get_option('datadir') / 'doc/git-doc/technical',
)
diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
index 194ec0f9ad..3704a1c39e 100755
--- a/GIT-VERSION-GEN
+++ b/GIT-VERSION-GEN
@@ -1,6 +1,6 @@
#!/bin/sh
-DEF_VER=v2.48.0-rc1
+DEF_VER=v2.48.GIT
LF='
'
@@ -86,11 +86,11 @@ sed -e "s|@GIT_VERSION@|$GIT_VERSION|" \
-e "s|@GIT_BUILT_FROM_COMMIT@|$GIT_BUILT_FROM_COMMIT|" \
-e "s|@GIT_USER_AGENT@|$GIT_USER_AGENT|" \
-e "s|@GIT_DATE@|$GIT_DATE|" \
- "$INPUT" >"$OUTPUT"+
+ "$INPUT" >"$OUTPUT".$$+
-if ! test -f "$OUTPUT" || ! cmp "$OUTPUT"+ "$OUTPUT" >/dev/null
+if ! test -f "$OUTPUT" || ! cmp "$OUTPUT".$$+ "$OUTPUT" >/dev/null
then
- mv "$OUTPUT"+ "$OUTPUT"
+ mv "$OUTPUT".$$+ "$OUTPUT"
else
- rm "$OUTPUT"+
+ rm "$OUTPUT".$$+
fi
diff --git a/Makefile b/Makefile
index 97e8385b66..2f6e2d5295 100644
--- a/Makefile
+++ b/Makefile
@@ -818,6 +818,7 @@ TEST_BUILTINS_OBJS += test-parse-options.o
TEST_BUILTINS_OBJS += test-parse-pathspec-file.o
TEST_BUILTINS_OBJS += test-partial-clone.o
TEST_BUILTINS_OBJS += test-path-utils.o
+TEST_BUILTINS_OBJS += test-path-walk.o
TEST_BUILTINS_OBJS += test-pcre2-config.o
TEST_BUILTINS_OBJS += test-pkt-line.o
TEST_BUILTINS_OBJS += test-proc-receive.o
@@ -1094,6 +1095,7 @@ LIB_OBJS += parse-options.o
LIB_OBJS += patch-delta.o
LIB_OBJS += patch-ids.o
LIB_OBJS += path.o
+LIB_OBJS += path-walk.o
LIB_OBJS += pathspec.o
LIB_OBJS += pkt-line.o
LIB_OBJS += preload-index.o
@@ -1338,6 +1340,10 @@ THIRD_PARTY_SOURCES += $(UNIT_TEST_DIR)/clar/%
THIRD_PARTY_SOURCES += $(UNIT_TEST_DIR)/clar/clar/%
CLAR_TEST_SUITES += u-ctype
+CLAR_TEST_SUITES += u-hash
+CLAR_TEST_SUITES += u-mem-pool
+CLAR_TEST_SUITES += u-prio-queue
+CLAR_TEST_SUITES += u-reftable-tree
CLAR_TEST_SUITES += u-strvec
CLAR_TEST_PROG = $(UNIT_TEST_BIN)/unit-tests$(X)
CLAR_TEST_OBJS = $(patsubst %,$(UNIT_TEST_DIR)/%.o,$(CLAR_TEST_SUITES))
@@ -1345,13 +1351,10 @@ CLAR_TEST_OBJS += $(UNIT_TEST_DIR)/clar/clar.o
CLAR_TEST_OBJS += $(UNIT_TEST_DIR)/unit-test.o
UNIT_TEST_PROGRAMS += t-example-decorate
-UNIT_TEST_PROGRAMS += t-hash
UNIT_TEST_PROGRAMS += t-hashmap
-UNIT_TEST_PROGRAMS += t-mem-pool
UNIT_TEST_PROGRAMS += t-oid-array
UNIT_TEST_PROGRAMS += t-oidmap
UNIT_TEST_PROGRAMS += t-oidtree
-UNIT_TEST_PROGRAMS += t-prio-queue
UNIT_TEST_PROGRAMS += t-reftable-basics
UNIT_TEST_PROGRAMS += t-reftable-block
UNIT_TEST_PROGRAMS += t-reftable-merged
@@ -1360,7 +1363,6 @@ UNIT_TEST_PROGRAMS += t-reftable-reader
UNIT_TEST_PROGRAMS += t-reftable-readwrite
UNIT_TEST_PROGRAMS += t-reftable-record
UNIT_TEST_PROGRAMS += t-reftable-stack
-UNIT_TEST_PROGRAMS += t-reftable-tree
UNIT_TEST_PROGRAMS += t-strbuf
UNIT_TEST_PROGRAMS += t-strcmp-offset
UNIT_TEST_PROGRAMS += t-trailer
diff --git a/RelNotes b/RelNotes
index 061d699283..978481996e 120000
--- a/RelNotes
+++ b/RelNotes
@@ -1 +1 @@
-Documentation/RelNotes/2.48.0.txt \ No newline at end of file
+Documentation/RelNotes/2.49.0.txt \ No newline at end of file
diff --git a/add-interactive.c b/add-interactive.c
index d0f8c10e6f..97ff35b6f1 100644
--- a/add-interactive.c
+++ b/add-interactive.c
@@ -1,4 +1,3 @@
-#define USE_THE_REPOSITORY_VARIABLE
#define DISABLE_SIGN_COMPARE_WARNINGS
#include "git-compat-util.h"
@@ -72,14 +71,14 @@ void init_add_i_state(struct add_i_state *s, struct repository *r)
s->use_color ? GIT_COLOR_RESET : "", COLOR_MAXLEN);
FREE_AND_NULL(s->interactive_diff_filter);
- git_config_get_string("interactive.difffilter",
- &s->interactive_diff_filter);
+ repo_config_get_string(r, "interactive.difffilter",
+ &s->interactive_diff_filter);
FREE_AND_NULL(s->interactive_diff_algorithm);
- git_config_get_string("diff.algorithm",
- &s->interactive_diff_algorithm);
+ repo_config_get_string(r, "diff.algorithm",
+ &s->interactive_diff_algorithm);
- git_config_get_bool("interactive.singlekey", &s->use_single_key);
+ repo_config_get_bool(r, "interactive.singlekey", &s->use_single_key);
if (s->use_single_key)
setbuf(stdin, NULL);
}
@@ -535,7 +534,7 @@ static int get_modified_files(struct repository *r,
size_t *binary_count)
{
struct object_id head_oid;
- int is_initial = !refs_resolve_ref_unsafe(get_main_ref_store(the_repository),
+ int is_initial = !refs_resolve_ref_unsafe(get_main_ref_store(r),
"HEAD", RESOLVE_REF_READING,
&head_oid, NULL);
struct collection_status s = { 0 };
@@ -560,7 +559,7 @@ static int get_modified_files(struct repository *r,
s.skip_unseen = filter && i;
opt.def = is_initial ?
- empty_tree_oid_hex(the_repository->hash_algo) : oid_to_hex(&head_oid);
+ empty_tree_oid_hex(r->hash_algo) : oid_to_hex(&head_oid);
repo_init_revisions(r, &rev, NULL);
setup_revisions(0, NULL, &rev, &opt);
@@ -765,7 +764,7 @@ static int run_revert(struct add_i_state *s, const struct pathspec *ps,
size_t count, i, j;
struct object_id oid;
- int is_initial = !refs_resolve_ref_unsafe(get_main_ref_store(the_repository),
+ int is_initial = !refs_resolve_ref_unsafe(get_main_ref_store(s->r),
"HEAD", RESOLVE_REF_READING,
&oid,
NULL);
@@ -996,7 +995,7 @@ static int run_diff(struct add_i_state *s, const struct pathspec *ps,
ssize_t count, i;
struct object_id oid;
- int is_initial = !refs_resolve_ref_unsafe(get_main_ref_store(the_repository),
+ int is_initial = !refs_resolve_ref_unsafe(get_main_ref_store(s->r),
"HEAD", RESOLVE_REF_READING,
&oid,
NULL);
diff --git a/add-patch.c b/add-patch.c
index 7b598e14df..95c67d8c80 100644
--- a/add-patch.c
+++ b/add-patch.c
@@ -1464,7 +1464,7 @@ static int patch_update_file(struct add_p_state *s,
if (file_diff->hunk_nr) {
if (rendered_hunk_index != hunk_index) {
if (use_pager) {
- setup_pager();
+ setup_pager(the_repository);
sigchain_push(SIGPIPE, SIG_IGN);
}
render_hunk(s, hunk, 0, colored, &s->buf);
diff --git a/bisect.c b/bisect.c
index 1a9069c9ad..7a3c77c6d8 100644
--- a/bisect.c
+++ b/bisect.c
@@ -780,10 +780,10 @@ static struct commit *get_commit_reference(struct repository *r,
}
static struct commit **get_bad_and_good_commits(struct repository *r,
- int *rev_nr)
+ size_t *rev_nr)
{
struct commit **rev;
- int i, n = 0;
+ size_t i, n = 0;
ALLOC_ARRAY(rev, 1 + good_revs.nr);
rev[n++] = get_commit_reference(r, current_bad_oid);
@@ -855,7 +855,7 @@ static void handle_skipped_merge_base(const struct object_id *mb)
* for early success, this will be converted back to 0 in
* check_good_are_ancestors_of_bad().
*/
-static enum bisect_error check_merge_bases(int rev_nr, struct commit **rev, int no_checkout)
+static enum bisect_error check_merge_bases(size_t rev_nr, struct commit **rev, int no_checkout)
{
enum bisect_error res = BISECT_OK;
struct commit_list *result = NULL;
@@ -887,7 +887,7 @@ static enum bisect_error check_merge_bases(int rev_nr, struct commit **rev, int
return res;
}
-static int check_ancestors(struct repository *r, int rev_nr,
+static int check_ancestors(struct repository *r, size_t rev_nr,
struct commit **rev, const char *prefix)
{
struct strvec rev_argv = STRVEC_INIT;
@@ -922,7 +922,8 @@ static enum bisect_error check_good_are_ancestors_of_bad(struct repository *r,
{
char *filename;
struct stat st;
- int fd, rev_nr;
+ int fd;
+ size_t rev_nr;
enum bisect_error res = BISECT_OK;
struct commit **rev;
diff --git a/builtin/am.c b/builtin/am.c
index 1338b606fe..390b463144 100644
--- a/builtin/am.c
+++ b/builtin/am.c
@@ -1211,7 +1211,7 @@ static int parse_mail(struct am_state *state, const char *mail)
int ret = 0;
struct mailinfo mi;
- setup_mailinfo(&mi);
+ setup_mailinfo(the_repository, &mi);
if (state->utf8)
mi.metainfo_charset = get_commit_output_encoding();
@@ -1786,7 +1786,7 @@ static int do_interactive(struct am_state *state)
}
strbuf_release(&msg);
} else if (*reply == 'v' || *reply == 'V') {
- const char *pager = git_pager(1);
+ const char *pager = git_pager(the_repository, 1);
struct child_process cp = CHILD_PROCESS_INIT;
if (!pager)
@@ -2246,7 +2246,7 @@ static int show_patch(struct am_state *state, enum resume_type resume_mode)
if (len < 0)
die_errno(_("failed to read '%s'"), patch_path);
- setup_pager();
+ setup_pager(the_repository);
write_in_full(1, sb.buf, sb.len);
strbuf_release(&sb);
return 0;
@@ -2427,8 +2427,7 @@ int cmd_am(int argc,
OPT_END()
};
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage_with_options(usage, options);
+ show_usage_with_options_if_asked(argc, argv, usage, options);
git_config(git_default_config, NULL);
diff --git a/builtin/blame.c b/builtin/blame.c
index 867032e4c1..c470654c7e 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -489,9 +489,9 @@ static void emit_other(struct blame_scoreboard *sb, struct blame_entry *ent, int
fputs(color, stdout);
if (suspect->commit->object.flags & UNINTERESTING) {
- if (blank_boundary)
- memset(hex, ' ', length);
- else if (!(opt & OUTPUT_ANNOTATE_COMPAT)) {
+ if (blank_boundary) {
+ memset(hex, ' ', strlen(hex));
+ } else if (!(opt & OUTPUT_ANNOTATE_COMPAT)) {
length--;
putchar('^');
}
@@ -505,7 +505,8 @@ static void emit_other(struct blame_scoreboard *sb, struct blame_entry *ent, int
length--;
putchar('?');
}
- fwrite(hex, 1, length, stdout);
+
+ printf("%.*s", (int)(length < GIT_MAX_HEXSZ ? length : GIT_MAX_HEXSZ), hex);
if (opt & OUTPUT_ANNOTATE_COMPAT) {
const char *name;
if (opt & OUTPUT_SHOW_EMAIL)
@@ -1193,14 +1194,16 @@ parse_done:
sb.found_guilty_entry = &found_guilty_entry;
sb.found_guilty_entry_data = &pi;
if (show_progress)
- pi.progress = start_delayed_progress(_("Blaming lines"), num_lines);
+ pi.progress = start_delayed_progress(the_repository,
+ _("Blaming lines"),
+ num_lines);
assign_blame(&sb, opt);
stop_progress(&pi.progress);
if (!incremental)
- setup_pager();
+ setup_pager(the_repository);
else
goto cleanup;
diff --git a/builtin/branch.c b/builtin/branch.c
index 6e7b0cfddb..c150131bd9 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -473,7 +473,7 @@ static void print_ref_list(struct ref_filter *filter, struct ref_sorting *sortin
if (verify_ref_format(format))
die(_("unable to parse format string"));
- filter_ahead_behind(the_repository, format, &array);
+ filter_ahead_behind(the_repository, &array);
ref_array_sort(sorting, &array);
if (column_active(colopts)) {
@@ -784,8 +784,8 @@ int cmd_branch(int argc,
filter.kind = FILTER_REFS_BRANCHES;
filter.abbrev = -1;
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage_with_options(builtin_branch_usage, options);
+ show_usage_with_options_if_asked(argc, argv,
+ builtin_branch_usage, options);
/*
* Try to set sort keys from config. If config does not set any,
@@ -884,7 +884,6 @@ int cmd_branch(int argc,
string_list_clear(&output, 0);
ref_sorting_release(sorting);
ref_filter_clear(&filter);
- ref_format_clear(&format);
ret = 0;
goto out;
diff --git a/builtin/bugreport.c b/builtin/bugreport.c
index 7c2df035c9..0ac59cc8dc 100644
--- a/builtin/bugreport.c
+++ b/builtin/bugreport.c
@@ -167,7 +167,7 @@ int cmd_bugreport(int argc,
strbuf_addftime(&zip_path, option_suffix, localtime_r(&now, &tm), 0, 0);
strbuf_addstr(&zip_path, ".zip");
- if (create_diagnostics_archive(&zip_path, diagnose))
+ if (create_diagnostics_archive(the_repository, &zip_path, diagnose))
die_errno(_("unable to create diagnostics archive %s"), zip_path.buf);
strbuf_release(&zip_path);
diff --git a/builtin/check-ref-format.c b/builtin/check-ref-format.c
index cef1ffe3ce..5d80afeec0 100644
--- a/builtin/check-ref-format.c
+++ b/builtin/check-ref-format.c
@@ -64,8 +64,8 @@ int cmd_check_ref_format(int argc,
BUG_ON_NON_EMPTY_PREFIX(prefix);
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage(builtin_check_ref_format_usage);
+ show_usage_if_asked(argc, argv,
+ builtin_check_ref_format_usage);
if (argc == 3 && !strcmp(argv[1], "--branch"))
return check_ref_format_branch(argv[2]);
diff --git a/builtin/checkout--worker.c b/builtin/checkout--worker.c
index b81002a1df..da9345a44b 100644
--- a/builtin/checkout--worker.c
+++ b/builtin/checkout--worker.c
@@ -128,9 +128,9 @@ int cmd_checkout__worker(int argc,
OPT_END()
};
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage_with_options(checkout_worker_usage,
- checkout_worker_options);
+ show_usage_with_options_if_asked(argc, argv,
+ checkout_worker_usage,
+ checkout_worker_options);
git_config(git_default_config, NULL);
argc = parse_options(argc, argv, prefix, checkout_worker_options,
diff --git a/builtin/checkout-index.c b/builtin/checkout-index.c
index a81501098d..e30086c7d4 100644
--- a/builtin/checkout-index.c
+++ b/builtin/checkout-index.c
@@ -250,9 +250,9 @@ int cmd_checkout_index(int argc,
OPT_END()
};
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage_with_options(builtin_checkout_index_usage,
- builtin_checkout_index_options);
+ show_usage_with_options_if_asked(argc, argv,
+ builtin_checkout_index_usage,
+ builtin_checkout_index_options);
git_config(git_default_config, NULL);
prefix_length = prefix ? strlen(prefix) : 0;
diff --git a/builtin/commit-graph.c b/builtin/commit-graph.c
index bd70d052e7..8ca75262c5 100644
--- a/builtin/commit-graph.c
+++ b/builtin/commit-graph.c
@@ -305,6 +305,7 @@ static int graph_write(int argc, const char **argv, const char *prefix,
oidset_init(&commits, 0);
if (opts.progress)
progress = start_delayed_progress(
+ the_repository,
_("Collecting commits from input"), 0);
while (strbuf_getline(&buf, stdin) != EOF) {
diff --git a/builtin/commit-tree.c b/builtin/commit-tree.c
index 2ca1a57ebb..38457600a4 100644
--- a/builtin/commit-tree.c
+++ b/builtin/commit-tree.c
@@ -119,8 +119,8 @@ int cmd_commit_tree(int argc,
git_config(git_default_config, NULL);
- if (argc < 2 || !strcmp(argv[1], "-h"))
- usage_with_options(commit_tree_usage, options);
+ show_usage_with_options_if_asked(argc, argv,
+ commit_tree_usage, options);
argc = parse_options(argc, argv, prefix, options, commit_tree_usage, 0);
diff --git a/builtin/commit.c b/builtin/commit.c
index ef5e622c07..9fb405dd4a 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -44,7 +44,7 @@
#include "trailer.h"
static const char * const builtin_commit_usage[] = {
- N_("git commit [-a | --interactive | --patch] [-s] [-v] [-u<mode>] [--amend]\n"
+ N_("git commit [-a | --interactive | --patch] [-s] [-v] [-u[<mode>]] [--amend]\n"
" [--dry-run] [(-c | -C | --squash) <commit> | --fixup [(amend|reword):]<commit>]\n"
" [-F <file> | -m <msg>] [--reset-author] [--allow-empty]\n"
" [--allow-empty-message] [--no-verify] [-e] [--author=<author>]\n"
@@ -1559,8 +1559,8 @@ struct repository *repo UNUSED)
OPT_END(),
};
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage_with_options(builtin_status_usage, builtin_status_options);
+ show_usage_with_options_if_asked(argc, argv,
+ builtin_status_usage, builtin_status_options);
prepare_repo_settings(the_repository);
the_repository->settings.command_requires_full_index = 0;
@@ -1736,8 +1736,8 @@ int cmd_commit(int argc,
struct strbuf err = STRBUF_INIT;
int ret = 0;
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage_with_options(builtin_commit_usage, builtin_commit_options);
+ show_usage_with_options_if_asked(argc, argv,
+ builtin_commit_usage, builtin_commit_options);
prepare_repo_settings(the_repository);
the_repository->settings.command_requires_full_index = 0;
diff --git a/builtin/credential-cache--daemon.c b/builtin/credential-cache--daemon.c
index bc22f5c6d2..e707618e74 100644
--- a/builtin/credential-cache--daemon.c
+++ b/builtin/credential-cache--daemon.c
@@ -142,9 +142,9 @@ static void serve_one_client(FILE *in, FILE *out)
fprintf(out, "username=%s\n", e->item.username);
if (e->item.password)
fprintf(out, "password=%s\n", e->item.password);
- if (credential_has_capability(&c.capa_authtype, CREDENTIAL_OP_HELPER) && e->item.authtype)
+ if (credential_has_capability(&c.capa_authtype, CREDENTIAL_OP_RESPONSE) && e->item.authtype)
fprintf(out, "authtype=%s\n", e->item.authtype);
- if (credential_has_capability(&c.capa_authtype, CREDENTIAL_OP_HELPER) && e->item.credential)
+ if (credential_has_capability(&c.capa_authtype, CREDENTIAL_OP_RESPONSE) && e->item.credential)
fprintf(out, "credential=%s\n", e->item.credential);
if (e->item.password_expiry_utc != TIME_MAX)
fprintf(out, "password_expiry_utc=%"PRItime"\n",
diff --git a/builtin/credential.c b/builtin/credential.c
index 14c8c6608b..2e11b15dde 100644
--- a/builtin/credential.c
+++ b/builtin/credential.c
@@ -18,7 +18,8 @@ int cmd_credential(int argc,
git_config(git_default_config, NULL);
- if (argc != 2 || !strcmp(argv[1], "-h"))
+ show_usage_if_asked(argc, argv, usage_msg);
+ if (argc != 2)
usage(usage_msg);
op = argv[1];
@@ -32,15 +33,15 @@ int cmd_credential(int argc,
die("unable to read credential from stdin");
if (!strcmp(op, "fill")) {
- credential_fill(&c, 0);
+ credential_fill(the_repository, &c, 0);
credential_next_state(&c);
credential_write(&c, stdout, CREDENTIAL_OP_RESPONSE);
} else if (!strcmp(op, "approve")) {
credential_set_all_capabilities(&c, CREDENTIAL_OP_HELPER);
- credential_approve(&c);
+ credential_approve(the_repository, &c);
} else if (!strcmp(op, "reject")) {
credential_set_all_capabilities(&c, CREDENTIAL_OP_HELPER);
- credential_reject(&c);
+ credential_reject(the_repository, &c);
} else {
usage(usage_msg);
}
diff --git a/builtin/diagnose.c b/builtin/diagnose.c
index 66a22d918e..33c39bd598 100644
--- a/builtin/diagnose.c
+++ b/builtin/diagnose.c
@@ -1,3 +1,5 @@
+#define USE_THE_REPOSITORY_VARIABLE
+
#include "builtin.h"
#include "abspath.h"
#include "gettext.h"
@@ -58,7 +60,7 @@ int cmd_diagnose(int argc,
}
/* Prepare diagnostics */
- if (create_diagnostics_archive(&zip_path, mode))
+ if (create_diagnostics_archive(the_repository, &zip_path, mode))
die_errno(_("unable to create diagnostics archive %s"),
zip_path.buf);
diff --git a/builtin/diff-files.c b/builtin/diff-files.c
index 604b04bb2c..99b1749723 100644
--- a/builtin/diff-files.c
+++ b/builtin/diff-files.c
@@ -29,8 +29,7 @@ int cmd_diff_files(int argc,
int result;
unsigned options = 0;
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage(diff_files_usage);
+ show_usage_if_asked(argc, argv, diff_files_usage);
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
diff --git a/builtin/diff-index.c b/builtin/diff-index.c
index ebc824602e..81c0bc8ed7 100644
--- a/builtin/diff-index.c
+++ b/builtin/diff-index.c
@@ -26,8 +26,7 @@ int cmd_diff_index(int argc,
int i;
int result;
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage(diff_cache_usage);
+ show_usage_if_asked(argc, argv, diff_cache_usage);
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
diff --git a/builtin/diff-tree.c b/builtin/diff-tree.c
index 40804e7b48..e31cc797fe 100644
--- a/builtin/diff-tree.c
+++ b/builtin/diff-tree.c
@@ -122,8 +122,7 @@ int cmd_diff_tree(int argc,
int read_stdin = 0;
int merge_base = 0;
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage(diff_tree_usage);
+ show_usage_if_asked(argc, argv, diff_tree_usage);
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
diff --git a/builtin/fast-import.c b/builtin/fast-import.c
index 0f86392761..2da46fecdc 100644
--- a/builtin/fast-import.c
+++ b/builtin/fast-import.c
@@ -3565,8 +3565,7 @@ int cmd_fast_import(int argc,
{
unsigned int i;
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage(fast_import_usage);
+ show_usage_if_asked(argc, argv, fast_import_usage);
reset_pack_idx_option(&pack_idx_opts);
git_pack_config();
diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c
index bed2816c2d..d07eec9e55 100644
--- a/builtin/fetch-pack.c
+++ b/builtin/fetch-pack.c
@@ -75,6 +75,8 @@ int cmd_fetch_pack(int argc,
list_objects_filter_init(&args.filter_options);
args.uploadpack = "git-upload-pack";
+ show_usage_if_asked(argc, argv, fetch_pack_usage);
+
for (i = 1; i < argc && *argv[i] == '-'; i++) {
const char *arg = argv[i];
diff --git a/builtin/fetch.c b/builtin/fetch.c
index 2d37a378ba..fe2b26c74a 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -1588,8 +1588,8 @@ static void set_head_advice_msg(const char *remote, const char *head_name)
N_("Run 'git remote set-head %s %s' to follow the change, or set\n"
"'remote.%s.followRemoteHEAD' configuration option to a different value\n"
"if you do not want to see this message. Specifically running\n"
- "'git config set remote.%s.followRemoteHEAD %s' will disable the warning\n"
- "until the remote changes HEAD to something else.");
+ "'git config set remote.%s.followRemoteHEAD warn-if-not-branch-%s'\n"
+ "will disable the warning until the remote changes HEAD to something else.");
advise_if_enabled(ADVICE_FETCH_SET_HEAD_WARN, _(message_advice_set_head),
remote, head_name, remote, remote, head_name);
diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c
index 715745a262..8085ebd8fe 100644
--- a/builtin/for-each-ref.c
+++ b/builtin/for-each-ref.c
@@ -108,7 +108,6 @@ int cmd_for_each_ref(int argc,
filter_and_format_refs(&filter, flags, sorting, &format);
ref_filter_clear(&filter);
- ref_format_clear(&format);
ref_sorting_release(sorting);
strvec_clear(&vec);
return 0;
diff --git a/builtin/fsck.c b/builtin/fsck.c
index 0196c54eb6..7a4dcb0716 100644
--- a/builtin/fsck.c
+++ b/builtin/fsck.c
@@ -197,7 +197,8 @@ static int traverse_reachable(void)
unsigned int nr = 0;
int result = 0;
if (show_progress)
- progress = start_delayed_progress(_("Checking connectivity"), 0);
+ progress = start_delayed_progress(the_repository,
+ _("Checking connectivity"), 0);
while (pending.nr) {
result |= traverse_one_object(object_array_pop(&pending));
display_progress(progress, ++nr);
@@ -703,7 +704,8 @@ static void fsck_object_dir(const char *path)
fprintf_ln(stderr, _("Checking object directory"));
if (show_progress)
- progress = start_progress(_("Checking object directories"), 256);
+ progress = start_progress(the_repository,
+ _("Checking object directories"), 256);
for_each_loose_file_in_objdir(path, fsck_loose, fsck_cruft, fsck_subdir,
&cb_data);
@@ -879,7 +881,8 @@ static int check_pack_rev_indexes(struct repository *r, int show_progress)
if (show_progress) {
for (struct packed_git *p = get_all_packs(r); p; p = p->next)
pack_count++;
- progress = start_delayed_progress("Verifying reverse pack-indexes", pack_count);
+ progress = start_delayed_progress(the_repository,
+ "Verifying reverse pack-indexes", pack_count);
pack_count = 0;
}
@@ -989,7 +992,8 @@ int cmd_fsck(int argc,
total += p->num_objects;
}
- progress = start_progress(_("Checking objects"), total);
+ progress = start_progress(the_repository,
+ _("Checking objects"), total);
}
for (p = get_all_packs(the_repository); p;
p = p->next) {
diff --git a/builtin/fsmonitor--daemon.c b/builtin/fsmonitor--daemon.c
index 029dc64d6c..0820e524f1 100644
--- a/builtin/fsmonitor--daemon.c
+++ b/builtin/fsmonitor--daemon.c
@@ -1598,8 +1598,8 @@ int cmd_fsmonitor__daemon(int argc, const char **argv, const char *prefix UNUSED
OPT_END()
};
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage_with_options(builtin_fsmonitor__daemon_usage, options);
+ show_usage_with_options_if_asked(argc, argv,
+ builtin_fsmonitor__daemon_usage, options);
die(_("fsmonitor--daemon not supported on this platform"));
}
diff --git a/builtin/gc.c b/builtin/gc.c
index a9b1c36de2..0bf3533494 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -710,8 +710,8 @@ struct repository *repo UNUSED)
OPT_END()
};
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage_with_options(builtin_gc_usage, builtin_gc_options);
+ show_usage_with_options_if_asked(argc, argv,
+ builtin_gc_usage, builtin_gc_options);
strvec_pushl(&reflog, "reflog", "expire", "--all", NULL);
strvec_pushl(&repack, "repack", "-d", "-l", NULL);
@@ -1909,7 +1909,7 @@ static int get_random_minute(void)
if (getenv("GIT_TEST_MAINT_SCHEDULER"))
return 13;
- return git_rand() % 60;
+ return git_rand(0) % 60;
}
static int is_launchctl_available(void)
diff --git a/builtin/get-tar-commit-id.c b/builtin/get-tar-commit-id.c
index 6bec0d1854..e4cd1627b4 100644
--- a/builtin/get-tar-commit-id.c
+++ b/builtin/get-tar-commit-id.c
@@ -13,7 +13,7 @@ static const char builtin_get_tar_commit_id_usage[] =
#define HEADERSIZE (2 * RECORDSIZE)
int cmd_get_tar_commit_id(int argc,
- const char **argv UNUSED,
+ const char **argv,
const char *prefix,
struct repository *repo UNUSED)
{
@@ -27,6 +27,8 @@ int cmd_get_tar_commit_id(int argc,
BUG_ON_NON_EMPTY_PREFIX(prefix);
+ show_usage_if_asked(argc, argv, builtin_get_tar_commit_id_usage);
+
if (argc != 1)
usage(builtin_get_tar_commit_id_usage);
diff --git a/builtin/grep.c b/builtin/grep.c
index d00ee76f24..d1427290f7 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c
@@ -1084,7 +1084,7 @@ int cmd_grep(int argc,
}
if (show_in_pager == default_pager)
- show_in_pager = git_pager(1);
+ show_in_pager = git_pager(the_repository, 1);
if (show_in_pager) {
opt.color = 0;
opt.name_only = 1;
@@ -1246,7 +1246,7 @@ int cmd_grep(int argc,
}
if (!show_in_pager && !opt.status_only)
- setup_pager();
+ setup_pager(the_repository);
die_for_incompatible_opt3(!use_index, "--no-index",
untracked, "--untracked",
diff --git a/builtin/help.c b/builtin/help.c
index 05136279cf..c257079ceb 100644
--- a/builtin/help.c
+++ b/builtin/help.c
@@ -658,7 +658,7 @@ int cmd_help(int argc,
case HELP_ACTION_ALL:
opt_mode_usage(argc, "--all", help_format);
if (verbose) {
- setup_pager();
+ setup_pager(the_repository);
list_all_cmds_help(show_external_commands,
show_aliases);
return 0;
@@ -692,7 +692,7 @@ int cmd_help(int argc,
return 0;
case HELP_ACTION_CONFIG:
opt_mode_usage(argc, "--config", help_format);
- setup_pager();
+ setup_pager(the_repository);
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 0b62b2589f..6ffbb7ce35 100644
--- a/builtin/index-pack.c
+++ b/builtin/index-pack.c
@@ -282,7 +282,8 @@ static unsigned check_objects(void)
max = get_max_object_index();
if (verbose)
- progress = start_delayed_progress(_("Checking objects"), max);
+ progress = start_delayed_progress(the_repository,
+ _("Checking objects"), max);
for (i = 0; i < max; i++) {
foreign_nr += check_object(get_indexed_object(i));
@@ -379,16 +380,18 @@ static const char *open_pack_file(const char *pack_name)
static void parse_pack_header(void)
{
- struct pack_header *hdr = fill(sizeof(struct pack_header));
+ unsigned char *hdr = fill(sizeof(struct pack_header));
/* Header consistency check */
- if (hdr->hdr_signature != htonl(PACK_SIGNATURE))
+ if (get_be32(hdr) != PACK_SIGNATURE)
die(_("pack signature mismatch"));
- if (!pack_version_ok(hdr->hdr_version))
+ hdr += 4;
+ if (!pack_version_ok_native(get_be32(hdr)))
die(_("pack version %"PRIu32" unsupported"),
- ntohl(hdr->hdr_version));
+ get_be32(hdr));
+ hdr += 4;
- nr_objects = ntohl(hdr->hdr_entries);
+ nr_objects = get_be32(hdr);
use(sizeof(struct pack_header));
}
@@ -1249,6 +1252,7 @@ static void parse_pack_objects(unsigned char *hash)
if (verbose)
progress = start_progress(
+ the_repository,
progress_title ? progress_title :
from_stdin ? _("Receiving objects") : _("Indexing objects"),
nr_objects);
@@ -1329,7 +1333,8 @@ static void resolve_deltas(struct pack_idx_option *opts)
QSORT(ref_deltas, nr_ref_deltas, compare_ref_delta_entry);
if (verbose || show_resolving_progress)
- progress = start_progress(_("Resolving deltas"),
+ progress = start_progress(the_repository,
+ _("Resolving deltas"),
nr_ref_deltas + nr_ofs_deltas);
nr_dispatched = 0;
@@ -1897,8 +1902,7 @@ int cmd_index_pack(int argc,
*/
fetch_if_missing = 0;
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage(index_pack_usage);
+ show_usage_if_asked(argc, argv, index_pack_usage);
disable_replace_refs();
fsck_options.walk = mark_link;
@@ -1954,19 +1958,11 @@ int cmd_index_pack(int argc,
warning(_("no threads support, ignoring %s"), arg);
nr_threads = 1;
}
- } else if (starts_with(arg, "--pack_header=")) {
- struct pack_header *hdr;
- char *c;
-
- hdr = (struct pack_header *)input_buffer;
- hdr->hdr_signature = htonl(PACK_SIGNATURE);
- hdr->hdr_version = htonl(strtoul(arg + 14, &c, 10));
- if (*c != ',')
- die(_("bad %s"), arg);
- hdr->hdr_entries = htonl(strtoul(c + 1, &c, 10));
- if (*c)
- die(_("bad %s"), arg);
- input_len = sizeof(*hdr);
+ } else if (skip_prefix(arg, "--pack_header=", &arg)) {
+ if (parse_pack_header_option(arg,
+ input_buffer,
+ &input_len) < 0)
+ die(_("bad --pack_header: %s"), arg);
} else if (!strcmp(arg, "-v")) {
verbose = 1;
} else if (!strcmp(arg, "--progress-title")) {
diff --git a/builtin/log.c b/builtin/log.c
index 75e1b34123..e41f88945e 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -6,7 +6,6 @@
*/
#define USE_THE_REPOSITORY_VARIABLE
-#define DISABLE_SIGN_COMPARE_WARNINGS
#include "builtin.h"
#include "abspath.h"
@@ -209,7 +208,6 @@ static void cmd_log_init_defaults(struct rev_info *rev,
static void set_default_decoration_filter(struct decoration_filter *decoration_filter)
{
- int i;
char *value = NULL;
struct string_list *include = decoration_filter->include_ref_pattern;
const struct string_list *config_exclude;
@@ -243,7 +241,7 @@ static void set_default_decoration_filter(struct decoration_filter *decoration_f
* No command-line or config options were given, so
* populate with sensible defaults.
*/
- for (i = 0; i < ARRAY_SIZE(ref_namespace); i++) {
+ for (size_t i = 0; i < ARRAY_SIZE(ref_namespace); i++) {
if (!ref_namespace[i].decoration)
continue;
@@ -369,7 +367,7 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,
if (rev->line_level_traverse)
line_log_init(rev, line_cb.prefix, &line_cb.args);
- setup_pager();
+ setup_pager(the_repository);
}
static void cmd_log_init(int argc, const char **argv, const char *prefix,
@@ -717,14 +715,14 @@ static int show_tag_object(const struct object_id *oid, struct rev_info *rev)
unsigned long size;
enum object_type type;
char *buf = repo_read_object_file(the_repository, oid, &type, &size);
- int offset = 0;
+ unsigned long offset = 0;
if (!buf)
return error(_("could not read object %s"), oid_to_hex(oid));
assert(type == OBJ_TAG);
while (offset < size && buf[offset] != '\n') {
- int new_offset = offset + 1;
+ unsigned long new_offset = offset + 1;
const char *ident;
while (new_offset < size && buf[new_offset++] != '\n')
; /* do nothing */
@@ -1316,24 +1314,25 @@ static void print_signature(const char *signature, FILE *file)
static char *find_branch_name(struct rev_info *rev)
{
- int i, positive = -1;
struct object_id branch_oid;
const struct object_id *tip_oid;
const char *ref, *v;
char *full_ref, *branch = NULL;
+ int interesting_found = 0;
+ size_t idx;
- for (i = 0; i < rev->cmdline.nr; i++) {
+ for (size_t i = 0; i < rev->cmdline.nr; i++) {
if (rev->cmdline.rev[i].flags & UNINTERESTING)
continue;
- if (positive < 0)
- positive = i;
- else
+ if (interesting_found)
return NULL;
+ interesting_found = 1;
+ idx = i;
}
- if (positive < 0)
+ if (!interesting_found)
return NULL;
- ref = rev->cmdline.rev[positive].name;
- tip_oid = &rev->cmdline.rev[positive].item->oid;
+ ref = rev->cmdline.rev[idx].name;
+ tip_oid = &rev->cmdline.rev[idx].item->oid;
if (repo_dwim_ref(the_repository, ref, strlen(ref), &branch_oid,
&full_ref, 0) &&
skip_prefix(full_ref, "refs/heads/", &v) &&
@@ -1746,11 +1745,12 @@ struct base_tree_info {
static struct commit *get_base_commit(const struct format_config *cfg,
struct commit **list,
- int total)
+ size_t total)
{
struct commit *base = NULL;
struct commit **rev;
- int i = 0, rev_nr = 0, auto_select, die_on_failure, ret;
+ int auto_select, die_on_failure, ret;
+ size_t i = 0, rev_nr = 0;
switch (cfg->auto_base) {
case AUTO_BASE_NEVER:
@@ -1885,13 +1885,12 @@ define_commit_slab(commit_base, int);
static void prepare_bases(struct base_tree_info *bases,
struct commit *base,
struct commit **list,
- int total)
+ size_t total)
{
struct commit *commit;
struct rev_info revs;
struct diff_options diffopt;
struct commit_base commit_base;
- int i;
if (!base)
return;
@@ -1906,7 +1905,7 @@ static void prepare_bases(struct base_tree_info *bases,
repo_init_revisions(the_repository, &revs, NULL);
revs.max_parents = 1;
revs.topo_order = 1;
- for (i = 0; i < total; i++) {
+ for (size_t i = 0; i < total; i++) {
list[i]->object.flags &= ~UNINTERESTING;
add_pending_object(&revs, &list[i]->object, "rev_list");
*commit_base_at(&commit_base, list[i]) = 1;
@@ -2007,7 +2006,7 @@ int cmd_format_patch(int argc,
struct rev_info rev;
char *to_free = NULL;
struct setup_revision_opt s_r_opt;
- int nr = 0, total, i;
+ size_t nr = 0, total, i;
int use_stdout = 0;
int start_number = -1;
int just_numbers = 0;
@@ -2183,7 +2182,7 @@ int cmd_format_patch(int argc,
fmt_patch_suffix = cfg.fmt_patch_suffix;
/* Make sure "0000-$sub.patch" gives non-negative length for $sub */
- if (cfg.log.fmt_patch_name_max <= strlen("0000-") + strlen(fmt_patch_suffix))
+ if (cfg.log.fmt_patch_name_max <= cast_size_t_to_int(strlen("0000-") + strlen(fmt_patch_suffix)))
cfg.log.fmt_patch_name_max = strlen("0000-") + strlen(fmt_patch_suffix);
if (cover_from_description_arg)
@@ -2296,7 +2295,7 @@ int cmd_format_patch(int argc,
rev.commit_format = CMIT_FMT_MBOXRD;
if (use_stdout) {
- setup_pager();
+ setup_pager(the_repository);
} else if (!rev.diffopt.close_file) {
int saved;
@@ -2499,12 +2498,16 @@ int cmd_format_patch(int argc,
rev.add_signoff = cfg.do_signoff;
if (show_progress)
- progress = start_delayed_progress(_("Generating patches"), total);
- while (0 <= --nr) {
+ progress = start_delayed_progress(the_repository,
+ _("Generating patches"), total);
+ for (i = 0; i < nr; i++) {
+ size_t idx = nr - i - 1;
int shown;
- display_progress(progress, total - nr);
- commit = list[nr];
- rev.nr = total - nr + (start_number - 1);
+
+ display_progress(progress, total - idx);
+ commit = list[idx];
+ rev.nr = total - idx + (start_number - 1);
+
/* Make the second and subsequent mails replies to the first */
if (cfg.thread) {
/* Have we already had a message ID? */
diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index 15499cd12b..a4431429b7 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c
@@ -644,8 +644,8 @@ int cmd_ls_files(int argc,
};
int ret = 0;
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage_with_options(ls_files_usage, builtin_ls_files_options);
+ show_usage_with_options_if_asked(argc, argv,
+ ls_files_usage, builtin_ls_files_options);
prepare_repo_settings(the_repository);
the_repository->settings.command_requires_full_index = 0;
diff --git a/builtin/mailinfo.c b/builtin/mailinfo.c
index e17dec27b1..8de7ba7de1 100644
--- a/builtin/mailinfo.c
+++ b/builtin/mailinfo.c
@@ -83,7 +83,7 @@ int cmd_mailinfo(int argc,
OPT_END()
};
- setup_mailinfo(&mi);
+ setup_mailinfo(the_repository, &mi);
meta_charset.policy = CHARSET_DEFAULT;
argc = parse_options(argc, argv, prefix, options, mailinfo_usage, 0);
diff --git a/builtin/mailsplit.c b/builtin/mailsplit.c
index 41dd304731..264df6259a 100644
--- a/builtin/mailsplit.c
+++ b/builtin/mailsplit.c
@@ -284,6 +284,8 @@ int cmd_mailsplit(int argc,
BUG_ON_NON_EMPTY_PREFIX(prefix);
+ show_usage_if_asked(argc, argv, git_mailsplit_usage);
+
for (argp = argv+1; *argp; argp++) {
const char *arg = *argp;
@@ -297,8 +299,6 @@ int cmd_mailsplit(int argc,
continue;
} else if ( arg[1] == 'f' ) {
nr = strtol(arg+2, NULL, 10);
- } else if ( arg[1] == 'h' ) {
- usage(git_mailsplit_usage);
} else if ( arg[1] == 'b' && !arg[2] ) {
allow_bare = 1;
} else if (!strcmp(arg, "--keep-cr")) {
diff --git a/builtin/merge-base.c b/builtin/merge-base.c
index a20c93b11a..123c81515e 100644
--- a/builtin/merge-base.c
+++ b/builtin/merge-base.c
@@ -8,7 +8,7 @@
#include "parse-options.h"
#include "commit-reach.h"
-static int show_merge_base(struct commit **rev, int rev_nr, int show_all)
+static int show_merge_base(struct commit **rev, size_t rev_nr, int show_all)
{
struct commit_list *result = NULL, *r;
@@ -149,7 +149,7 @@ int cmd_merge_base(int argc,
struct repository *repo UNUSED)
{
struct commit **rev;
- int rev_nr = 0;
+ size_t rev_nr = 0;
int show_all = 0;
int cmdmode = 0;
int ret;
diff --git a/builtin/merge-index.c b/builtin/merge-index.c
index 342699edb7..3314fb1336 100644
--- a/builtin/merge-index.c
+++ b/builtin/merge-index.c
@@ -75,6 +75,9 @@ static void merge_all(void)
}
}
+static const char usage_string[] =
+"git merge-index [-o] [-q] <merge-program> (-a | [--] [<filename>...])";
+
int cmd_merge_index(int argc,
const char **argv,
const char *prefix UNUSED,
@@ -87,8 +90,10 @@ int cmd_merge_index(int argc,
*/
signal(SIGCHLD, SIG_DFL);
+ show_usage_if_asked(argc, argv, usage_string);
+
if (argc < 3)
- usage("git merge-index [-o] [-q] <merge-program> (-a | [--] [<filename>...])");
+ usage(usage_string);
repo_read_index(the_repository);
diff --git a/builtin/merge-ours.c b/builtin/merge-ours.c
index 3ecd9172f1..97b8a792c7 100644
--- a/builtin/merge-ours.c
+++ b/builtin/merge-ours.c
@@ -23,8 +23,7 @@ int cmd_merge_ours(int argc,
const char *prefix UNUSED,
struct repository *repo UNUSED)
{
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage(builtin_merge_ours_usage);
+ show_usage_if_asked(argc, argv, builtin_merge_ours_usage);
/*
* The contents of the current index becomes the tree we
diff --git a/builtin/merge-recursive.c b/builtin/merge-recursive.c
index 1dd295558b..abfc060e28 100644
--- a/builtin/merge-recursive.c
+++ b/builtin/merge-recursive.c
@@ -38,6 +38,12 @@ int cmd_merge_recursive(int argc,
if (argv[0] && ends_with(argv[0], "-subtree"))
o.subtree_shift = "";
+ if (argc == 2 && !strcmp(argv[1], "-h")) {
+ struct strbuf msg = STRBUF_INIT;
+ strbuf_addf(&msg, builtin_merge_recursive_usage, argv[0]);
+ show_usage_if_asked(argc, argv, msg.buf);
+ }
+
if (argc < 4)
usagef(builtin_merge_recursive_usage, argv[0]);
diff --git a/builtin/merge.c b/builtin/merge.c
index 5f67007bba..ba9faf126a 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -1300,8 +1300,8 @@ int cmd_merge(int argc,
void *branch_to_free;
int orig_argc = argc;
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage_with_options(builtin_merge_usage, builtin_merge_options);
+ show_usage_with_options_if_asked(argc, argv,
+ builtin_merge_usage, builtin_merge_options);
prepare_repo_settings(the_repository);
the_repository->settings.command_requires_full_index = 0;
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index 1c3b842651..d51c021d99 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -1264,7 +1264,8 @@ static void write_pack_file(void)
struct object_entry **write_order;
if (progress > pack_to_stdout)
- progress_state = start_progress(_("Writing objects"), nr_result);
+ progress_state = start_progress(the_repository,
+ _("Writing objects"), nr_result);
ALLOC_ARRAY(written_list, to_pack.nr_objects);
write_order = compute_write_order();
@@ -2400,7 +2401,8 @@ static void get_object_details(void)
struct object_entry **sorted_by_offset;
if (progress)
- progress_state = start_progress(_("Counting objects"),
+ progress_state = start_progress(the_repository,
+ _("Counting objects"),
to_pack.nr_objects);
CALLOC_ARRAY(sorted_by_offset, to_pack.nr_objects);
@@ -3220,7 +3222,8 @@ static void prepare_pack(int window, int depth)
unsigned nr_done = 0;
if (progress)
- progress_state = start_progress(_("Compressing objects"),
+ progress_state = start_progress(the_repository,
+ _("Compressing objects"),
nr_deltas);
QSORT(delta_list, n, type_size_sort);
ll_find_deltas(delta_list, n, window+1, depth, &nr_done);
@@ -3648,7 +3651,8 @@ static void add_objects_in_unpacked_packs(void);
static void enumerate_cruft_objects(void)
{
if (progress)
- progress_state = start_progress(_("Enumerating cruft objects"), 0);
+ progress_state = start_progress(the_repository,
+ _("Enumerating cruft objects"), 0);
add_objects_in_unpacked_packs();
add_unreachable_loose_objects();
@@ -3674,7 +3678,8 @@ static void enumerate_and_traverse_cruft_objects(struct string_list *fresh_packs
revs.ignore_missing_links = 1;
if (progress)
- progress_state = start_progress(_("Enumerating cruft objects"), 0);
+ progress_state = start_progress(the_repository,
+ _("Enumerating cruft objects"), 0);
ret = add_unseen_recent_objects_to_traversal(&revs, cruft_expiration,
set_cruft_mtime, 1);
stop_progress(&progress_state);
@@ -3693,7 +3698,8 @@ static void enumerate_and_traverse_cruft_objects(struct string_list *fresh_packs
if (prepare_revision_walk(&revs))
die(_("revision walk setup failed"));
if (progress)
- progress_state = start_progress(_("Traversing cruft objects"), 0);
+ progress_state = start_progress(the_repository,
+ _("Traversing cruft objects"), 0);
nr_seen = 0;
traverse_commit_list(&revs, show_cruft_commit, show_cruft_object, NULL);
@@ -4625,7 +4631,8 @@ int cmd_pack_objects(int argc,
prepare_packing_data(the_repository, &to_pack);
if (progress && !cruft)
- progress_state = start_progress(_("Enumerating objects"), 0);
+ progress_state = start_progress(the_repository,
+ _("Enumerating objects"), 0);
if (stdin_packs) {
/* avoids adding objects in excluded packs */
ignore_packed_keep_in_core = 1;
diff --git a/builtin/pack-redundant.c b/builtin/pack-redundant.c
index e046575871..3febe732f8 100644
--- a/builtin/pack-redundant.c
+++ b/builtin/pack-redundant.c
@@ -595,8 +595,7 @@ int cmd_pack_redundant(int argc, const char **argv, const char *prefix UNUSED, s
struct strbuf idx_name = STRBUF_INIT;
char buf[GIT_MAX_HEXSZ + 2]; /* hex hash + \n + \0 */
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage(pack_redundant_usage);
+ show_usage_if_asked(argc, argv, pack_redundant_usage);
for (i = 1; i < argc; i++) {
const char *arg = argv[i];
diff --git a/builtin/prune.c b/builtin/prune.c
index aeff9ca1b3..1c357fffd8 100644
--- a/builtin/prune.c
+++ b/builtin/prune.c
@@ -64,7 +64,8 @@ static void perform_reachability_traversal(struct rev_info *revs)
return;
if (show_progress)
- progress = start_delayed_progress(_("Checking connectivity"), 0);
+ progress = start_delayed_progress(the_repository,
+ _("Checking connectivity"), 0);
mark_reachable_objects(revs, 1, expire, progress);
stop_progress(&progress);
initialized = 1;
diff --git a/builtin/rebase.c b/builtin/rebase.c
index 0498fff3c9..6c9eaf3788 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -1223,9 +1223,9 @@ int cmd_rebase(int argc,
};
int i;
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage_with_options(builtin_rebase_usage,
- builtin_rebase_options);
+ show_usage_with_options_if_asked(argc, argv,
+ builtin_rebase_usage,
+ builtin_rebase_options);
prepare_repo_settings(the_repository);
the_repository->settings.command_requires_full_index = 0;
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index c2e9103f11..0fb0266cfd 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -174,7 +174,7 @@ static int receive_pack_config(const char *var, const char *value,
char *path;
if (git_config_pathname(&path, var, value))
- return 1;
+ return -1;
strbuf_addf(&fsck_msg_types, "%cskiplist=%s",
fsck_msg_types.len ? ',' : '=', path);
free(path);
@@ -2239,7 +2239,7 @@ static const char *unpack(int err_fd, struct shallow_info *si)
strvec_push(&child.args, alt_shallow_file);
}
- tmp_objdir = tmp_objdir_create("incoming");
+ tmp_objdir = tmp_objdir_create(the_repository, "incoming");
if (!tmp_objdir) {
if (err_fd > 0)
close(err_fd);
@@ -2628,7 +2628,7 @@ int cmd_receive_pack(int argc,
}
}
if (auto_update_server_info)
- update_server_info(0);
+ update_server_info(the_repository, 0);
clear_shallow_info(&si);
}
if (use_sideband)
diff --git a/builtin/remote-ext.c b/builtin/remote-ext.c
index 33c8ae0fc7..bd2037f27d 100644
--- a/builtin/remote-ext.c
+++ b/builtin/remote-ext.c
@@ -202,6 +202,8 @@ int cmd_remote_ext(int argc,
{
BUG_ON_NON_EMPTY_PREFIX(prefix);
+ show_usage_if_asked(argc, argv, usage_msg);
+
if (argc != 3)
usage(usage_msg);
diff --git a/builtin/remote-fd.c b/builtin/remote-fd.c
index ae896eda57..39908546ba 100644
--- a/builtin/remote-fd.c
+++ b/builtin/remote-fd.c
@@ -64,6 +64,7 @@ int cmd_remote_fd(int argc,
BUG_ON_NON_EMPTY_PREFIX(prefix);
+ show_usage_if_asked(argc, argv, usage_msg);
if (argc != 3)
usage(usage_msg);
diff --git a/builtin/remote.c b/builtin/remote.c
index 0435963286..315cbb88e6 100644
--- a/builtin/remote.c
+++ b/builtin/remote.c
@@ -820,7 +820,8 @@ static int mv(int argc, const char **argv, const char *prefix,
* Count symrefs twice, since "renaming" them is done by
* deleting and recreating them in two separate passes.
*/
- progress = start_progress(_("Renaming remote references"),
+ progress = start_progress(the_repository,
+ _("Renaming remote references"),
rename.remote_branches->nr + rename.symrefs_nr);
}
for (i = 0; i < remote_branches.nr; i++) {
diff --git a/builtin/repack.c b/builtin/repack.c
index 0c6dad7df4..81d13630ea 100644
--- a/builtin/repack.c
+++ b/builtin/repack.c
@@ -1565,7 +1565,7 @@ int cmd_repack(int argc,
}
if (run_update_server_info)
- update_server_info(0);
+ update_server_info(the_repository, 0);
if (git_env_bool(GIT_TEST_MULTI_PACK_INDEX, 0)) {
unsigned flags = 0;
diff --git a/builtin/rev-list.c b/builtin/rev-list.c
index 3196da7b2d..beb8c2529d 100644
--- a/builtin/rev-list.c
+++ b/builtin/rev-list.c
@@ -542,8 +542,7 @@ int cmd_rev_list(int argc,
const char *show_progress = NULL;
int ret = 0;
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage(rev_list_usage);
+ show_usage_if_asked(argc, argv, rev_list_usage);
git_config(git_default_config, NULL);
repo_init_revisions(the_repository, &revs, prefix);
@@ -735,7 +734,8 @@ int cmd_rev_list(int argc,
revs.limited = 1;
if (show_progress)
- progress = start_delayed_progress(show_progress, 0);
+ progress = start_delayed_progress(the_repository,
+ show_progress, 0);
if (use_bitmap_index) {
if (!try_bitmap_count(&revs, filter_provided_objects))
diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c
index 949747a6b6..428c866c05 100644
--- a/builtin/rev-parse.c
+++ b/builtin/rev-parse.c
@@ -713,6 +713,8 @@ int cmd_rev_parse(int argc,
int seen_end_of_options = 0;
enum format_type format = FORMAT_DEFAULT;
+ show_usage_if_asked(argc, argv, builtin_rev_parse_usage);
+
if (argc > 1 && !strcmp("--parseopt", argv[1]))
return cmd_parseopt(argc - 1, argv + 1, prefix);
diff --git a/builtin/send-pack.c b/builtin/send-pack.c
index 59b626aae8..8d461008e2 100644
--- a/builtin/send-pack.c
+++ b/builtin/send-pack.c
@@ -317,7 +317,7 @@ int cmd_send_pack(int argc,
set_ref_status_for_push(remote_refs, args.send_mirror,
args.force_update);
- ret = send_pack(&args, fd, conn, remote_refs, &extra_have);
+ ret = send_pack(the_repository, &args, fd, conn, remote_refs, &extra_have);
if (helper_status)
print_helper_status(remote_refs);
diff --git a/builtin/tag.c b/builtin/tag.c
index c4bd145831..e8a344b926 100644
--- a/builtin/tag.c
+++ b/builtin/tag.c
@@ -698,7 +698,6 @@ int cmd_tag(int argc,
cleanup:
ref_sorting_release(sorting);
ref_filter_clear(&filter);
- ref_format_clear(&format);
strbuf_release(&buf);
strbuf_release(&ref);
strbuf_release(&reflog_msg);
diff --git a/builtin/unpack-file.c b/builtin/unpack-file.c
index 6da2825753..fb5fcbc40a 100644
--- a/builtin/unpack-file.c
+++ b/builtin/unpack-file.c
@@ -26,6 +26,9 @@ static char *create_temp_file(struct object_id *oid)
return path;
}
+static const char usage_msg[] =
+"git unpack-file <blob>";
+
int cmd_unpack_file(int argc,
const char **argv,
const char *prefix UNUSED,
@@ -33,8 +36,9 @@ int cmd_unpack_file(int argc,
{
struct object_id oid;
- if (argc != 2 || !strcmp(argv[1], "-h"))
- usage("git unpack-file <blob>");
+ show_usage_if_asked(argc, argv, usage_msg);
+ if (argc != 2)
+ usage(usage_msg);
if (repo_get_oid(the_repository, argv[1], &oid))
die("Not a valid object name %s", argv[1]);
diff --git a/builtin/unpack-objects.c b/builtin/unpack-objects.c
index 2197d6d933..f6b9825fb0 100644
--- a/builtin/unpack-objects.c
+++ b/builtin/unpack-objects.c
@@ -18,6 +18,7 @@
#include "progress.h"
#include "decorate.h"
#include "fsck.h"
+#include "packfile.h"
static int dry_run, quiet, recover, has_errors, strict;
static const char unpack_usage[] = "git unpack-objects [-n] [-q] [-r] [--strict]";
@@ -578,19 +579,21 @@ static void unpack_one(unsigned nr)
static void unpack_all(void)
{
int i;
- struct pack_header *hdr = fill(sizeof(struct pack_header));
+ unsigned char *hdr = fill(sizeof(struct pack_header));
- nr_objects = ntohl(hdr->hdr_entries);
-
- if (ntohl(hdr->hdr_signature) != PACK_SIGNATURE)
+ if (get_be32(hdr) != PACK_SIGNATURE)
die("bad pack file");
- if (!pack_version_ok(hdr->hdr_version))
+ hdr += 4;
+ if (!pack_version_ok_native(get_be32(hdr)))
die("unknown pack file version %"PRIu32,
- ntohl(hdr->hdr_version));
+ get_be32(hdr));
+ hdr += 4;
+ nr_objects = get_be32(hdr);
use(sizeof(struct pack_header));
if (!quiet)
- progress = start_progress(_("Unpacking objects"), nr_objects);
+ progress = start_progress(the_repository,
+ _("Unpacking objects"), nr_objects);
CALLOC_ARRAY(obj_list, nr_objects);
begin_odb_transaction();
for (i = 0; i < nr_objects; i++) {
@@ -619,6 +622,8 @@ int cmd_unpack_objects(int argc,
quiet = !isatty(2);
+ show_usage_if_asked(argc, argv, unpack_usage);
+
for (i = 1 ; i < argc; i++) {
const char *arg = argv[i];
@@ -644,19 +649,10 @@ int cmd_unpack_objects(int argc,
fsck_set_msg_types(&fsck_options, arg);
continue;
}
- if (starts_with(arg, "--pack_header=")) {
- struct pack_header *hdr;
- char *c;
-
- hdr = (struct pack_header *)buffer;
- hdr->hdr_signature = htonl(PACK_SIGNATURE);
- hdr->hdr_version = htonl(strtoul(arg + 14, &c, 10));
- if (*c != ',')
- die("bad %s", arg);
- hdr->hdr_entries = htonl(strtoul(c + 1, &c, 10));
- if (*c)
- die("bad %s", arg);
- len = sizeof(*hdr);
+ if (skip_prefix(arg, "--pack_header=", &arg)) {
+ if (parse_pack_header_option(arg,
+ buffer, &len) < 0)
+ die(_("bad --pack_header: %s"), arg);
continue;
}
if (skip_prefix(arg, "--max-input-size=", &arg)) {
diff --git a/builtin/update-index.c b/builtin/update-index.c
index 74bbad9f87..b2f6b1a3fb 100644
--- a/builtin/update-index.c
+++ b/builtin/update-index.c
@@ -1045,8 +1045,8 @@ int cmd_update_index(int argc,
OPT_END()
};
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage_with_options(update_index_usage, options);
+ show_usage_with_options_if_asked(argc, argv,
+ update_index_usage, options);
git_config(git_default_config, NULL);
diff --git a/builtin/update-server-info.c b/builtin/update-server-info.c
index 6769611a02..47a3f0bdd9 100644
--- a/builtin/update-server-info.c
+++ b/builtin/update-server-info.c
@@ -27,5 +27,5 @@ int cmd_update_server_info(int argc,
if (argc > 0)
usage_with_options(update_server_info_usage, options);
- return !!update_server_info(force);
+ return !!update_server_info(the_repository, force);
}
diff --git a/builtin/upload-archive.c b/builtin/upload-archive.c
index 9e9343f121..97d7c9522f 100644
--- a/builtin/upload-archive.c
+++ b/builtin/upload-archive.c
@@ -27,7 +27,8 @@ int cmd_upload_archive_writer(int argc,
const char *arg_cmd = "argument ";
int ret;
- if (argc != 2 || !strcmp(argv[1], "-h"))
+ show_usage_if_asked(argc, argv, upload_archive_usage);
+ if (argc != 2)
usage(upload_archive_usage);
if (!enter_repo(argv[1], 0))
@@ -92,8 +93,7 @@ struct repository *repo UNUSED)
BUG_ON_NON_EMPTY_PREFIX(prefix);
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage(upload_archive_usage);
+ show_usage_if_asked(argc, argv, upload_archive_usage);
/*
* Set up sideband subprocess.
diff --git a/builtin/upload-pack.c b/builtin/upload-pack.c
index dd63d6eadf..c2bbc035ab 100644
--- a/builtin/upload-pack.c
+++ b/builtin/upload-pack.c
@@ -1,3 +1,5 @@
+#define USE_THE_REPOSITORY_VARIABLE
+
#include "builtin.h"
#include "exec-cmd.h"
#include "gettext.h"
@@ -63,9 +65,9 @@ int cmd_upload_pack(int argc,
switch (determine_protocol_version_server()) {
case protocol_v2:
if (advertise_refs)
- protocol_v2_advertise_capabilities();
+ protocol_v2_advertise_capabilities(the_repository);
else
- protocol_v2_serve_loop(stateless_rpc);
+ protocol_v2_serve_loop(the_repository, stateless_rpc);
break;
case protocol_v1:
/*
diff --git a/builtin/var.c b/builtin/var.c
index 1449656cc9..ada642a9fe 100644
--- a/builtin/var.c
+++ b/builtin/var.c
@@ -42,7 +42,7 @@ static char *sequence_editor(int ident_flag UNUSED)
static char *pager(int ident_flag UNUSED)
{
- const char *pgm = git_pager(1);
+ const char *pgm = git_pager(the_repository, 1);
if (!pgm)
pgm = "cat";
@@ -221,6 +221,7 @@ int cmd_var(int argc,
const struct git_var *git_var;
char *val;
+ show_usage_if_asked(argc, argv, var_usage);
if (argc != 2)
usage(var_usage);
diff --git a/builtin/verify-tag.c b/builtin/verify-tag.c
index a7f20618ff..f6b97048a5 100644
--- a/builtin/verify-tag.c
+++ b/builtin/verify-tag.c
@@ -69,6 +69,5 @@ int cmd_verify_tag(int argc,
if (format.format)
pretty_print_ref(name, &oid, &format);
}
- ref_format_clear(&format);
return had_error;
}
diff --git a/bulk-checkin.c b/bulk-checkin.c
index 433070a3bd..5044cb7fa0 100644
--- a/bulk-checkin.c
+++ b/bulk-checkin.c
@@ -333,7 +333,7 @@ void prepare_loose_object_bulk_checkin(void)
if (!odb_transaction_nesting || bulk_fsync_objdir)
return;
- bulk_fsync_objdir = tmp_objdir_create("bulk-fsync");
+ bulk_fsync_objdir = tmp_objdir_create(the_repository, "bulk-fsync");
if (bulk_fsync_objdir)
tmp_objdir_replace_primary_odb(bulk_fsync_objdir, 0);
}
diff --git a/commit-graph.c b/commit-graph.c
index 0df66e5a24..2a2999a6b8 100644
--- a/commit-graph.c
+++ b/commit-graph.c
@@ -1534,6 +1534,7 @@ static void close_reachable(struct write_commit_graph_context *ctx)
if (ctx->report_progress)
ctx->progress = start_delayed_progress(
+ the_repository,
_("Loading known commits in commit graph"),
ctx->oids.nr);
for (i = 0; i < ctx->oids.nr; i++) {
@@ -1551,6 +1552,7 @@ static void close_reachable(struct write_commit_graph_context *ctx)
*/
if (ctx->report_progress)
ctx->progress = start_delayed_progress(
+ the_repository,
_("Expanding reachable commits in commit graph"),
0);
for (i = 0; i < ctx->oids.nr; i++) {
@@ -1571,6 +1573,7 @@ static void close_reachable(struct write_commit_graph_context *ctx)
if (ctx->report_progress)
ctx->progress = start_delayed_progress(
+ the_repository,
_("Clearing commit marks in commit graph"),
ctx->oids.nr);
for (i = 0; i < ctx->oids.nr; i++) {
@@ -1688,6 +1691,7 @@ static void compute_topological_levels(struct write_commit_graph_context *ctx)
if (ctx->report_progress)
info.progress = ctx->progress
= start_delayed_progress(
+ the_repository,
_("Computing commit graph topological levels"),
ctx->commits.nr);
@@ -1722,6 +1726,7 @@ static void compute_generation_numbers(struct write_commit_graph_context *ctx)
if (ctx->report_progress)
info.progress = ctx->progress
= start_delayed_progress(
+ the_repository,
_("Computing commit graph generation numbers"),
ctx->commits.nr);
@@ -1798,6 +1803,7 @@ static void compute_bloom_filters(struct write_commit_graph_context *ctx)
if (ctx->report_progress)
progress = start_delayed_progress(
+ the_repository,
_("Computing commit changed paths Bloom filters"),
ctx->commits.nr);
@@ -1877,6 +1883,7 @@ int write_commit_graph_reachable(struct object_directory *odb,
data.commits = &commits;
if (flags & COMMIT_GRAPH_WRITE_PROGRESS)
data.progress = start_delayed_progress(
+ the_repository,
_("Collecting referenced commits"), 0);
refs_for_each_ref(get_main_ref_store(the_repository), add_ref_to_set,
@@ -1908,7 +1915,8 @@ static int fill_oids_from_packs(struct write_commit_graph_context *ctx,
"Finding commits for commit graph in %"PRIuMAX" packs",
pack_indexes->nr),
(uintmax_t)pack_indexes->nr);
- ctx->progress = start_delayed_progress(progress_title.buf, 0);
+ ctx->progress = start_delayed_progress(the_repository,
+ progress_title.buf, 0);
ctx->progress_done = 0;
}
for (i = 0; i < pack_indexes->nr; i++) {
@@ -1959,6 +1967,7 @@ static void fill_oids_from_all_packs(struct write_commit_graph_context *ctx)
{
if (ctx->report_progress)
ctx->progress = start_delayed_progress(
+ the_repository,
_("Finding commits for commit graph among packed objects"),
ctx->approx_nr_objects);
for_each_packed_object(ctx->r, add_packed_commits, ctx,
@@ -1977,6 +1986,7 @@ static void copy_oids_to_commits(struct write_commit_graph_context *ctx)
ctx->num_extra_edges = 0;
if (ctx->report_progress)
ctx->progress = start_delayed_progress(
+ the_repository,
_("Finding extra edges in commit graph"),
ctx->oids.nr);
oid_array_sort(&ctx->oids);
@@ -2136,6 +2146,7 @@ static int write_commit_graph_file(struct write_commit_graph_context *ctx)
get_num_chunks(cf)),
get_num_chunks(cf));
ctx->progress = start_delayed_progress(
+ the_repository,
progress_title.buf,
st_mult(get_num_chunks(cf), ctx->commits.nr));
}
@@ -2348,6 +2359,7 @@ static void sort_and_scan_merged_commits(struct write_commit_graph_context *ctx)
if (ctx->report_progress)
ctx->progress = start_delayed_progress(
+ the_repository,
_("Scanning merged commits"),
ctx->commits.nr);
@@ -2392,7 +2404,8 @@ static void merge_commit_graphs(struct write_commit_graph_context *ctx)
current_graph_number--;
if (ctx->report_progress)
- ctx->progress = start_delayed_progress(_("Merging commit-graph"), 0);
+ ctx->progress = start_delayed_progress(the_repository,
+ _("Merging commit-graph"), 0);
merge_commit_graph(ctx, g);
stop_progress(&ctx->progress);
@@ -2874,7 +2887,8 @@ int verify_commit_graph(struct repository *r, struct commit_graph *g, int flags)
if (!(flags & COMMIT_GRAPH_VERIFY_SHALLOW))
total += g->num_commits_in_base;
- progress = start_progress(_("Verifying commits in commit graph"),
+ progress = start_progress(the_repository,
+ _("Verifying commits in commit graph"),
total);
}
diff --git a/commit-reach.c b/commit-reach.c
index e3edd11995..a339e41aa4 100644
--- a/commit-reach.c
+++ b/commit-reach.c
@@ -1,5 +1,4 @@
#define USE_THE_REPOSITORY_VARIABLE
-#define DISABLE_SIGN_COMPARE_WARNINGS
#include "git-compat-util.h"
#include "commit.h"
@@ -42,8 +41,7 @@ static int compare_commits_by_gen(const void *_a, const void *_b)
static int queue_has_nonstale(struct prio_queue *queue)
{
- int i;
- for (i = 0; i < queue->nr; i++) {
+ for (size_t i = 0; i < queue->nr; i++) {
struct commit *commit = queue->array[i].data;
if (!(commit->object.flags & STALE))
return 1;
@@ -213,12 +211,13 @@ int get_octopus_merge_bases(struct commit_list *in, struct commit_list **result)
}
static int remove_redundant_no_gen(struct repository *r,
- struct commit **array, int cnt)
+ struct commit **array,
+ size_t cnt, size_t *dedup_cnt)
{
struct commit **work;
unsigned char *redundant;
- int *filled_index;
- int i, j, filled;
+ size_t *filled_index;
+ size_t i, j, filled;
CALLOC_ARRAY(work, cnt);
redundant = xcalloc(cnt, 1);
@@ -268,20 +267,22 @@ static int remove_redundant_no_gen(struct repository *r,
for (i = filled = 0; i < cnt; i++)
if (!redundant[i])
array[filled++] = work[i];
+ *dedup_cnt = filled;
free(work);
free(redundant);
free(filled_index);
- return filled;
+ return 0;
}
static int remove_redundant_with_gen(struct repository *r,
- struct commit **array, int cnt)
+ struct commit **array, size_t cnt,
+ size_t *dedup_cnt)
{
- int i, count_non_stale = 0, count_still_independent = cnt;
+ size_t i, count_non_stale = 0, count_still_independent = cnt;
timestamp_t min_generation = GENERATION_NUMBER_INFINITY;
struct commit **walk_start, **sorted;
size_t walk_start_nr = 0, walk_start_alloc = cnt;
- int min_gen_pos = 0;
+ size_t min_gen_pos = 0;
/*
* Sort the input by generation number, ascending. This allows
@@ -327,12 +328,12 @@ static int remove_redundant_with_gen(struct repository *r,
* terminate early. Otherwise, we will do the same amount of work
* as before.
*/
- for (i = walk_start_nr - 1; i >= 0 && count_still_independent > 1; i--) {
+ for (i = walk_start_nr; i && count_still_independent > 1; i--) {
/* push the STALE bits up to min generation */
struct commit_list *stack = NULL;
- commit_list_insert(walk_start[i], &stack);
- walk_start[i]->object.flags |= STALE;
+ commit_list_insert(walk_start[i - 1], &stack);
+ walk_start[i - 1]->object.flags |= STALE;
while (stack) {
struct commit_list *parents;
@@ -389,10 +390,12 @@ static int remove_redundant_with_gen(struct repository *r,
clear_commit_marks_many(walk_start_nr, walk_start, STALE);
free(walk_start);
- return count_non_stale;
+ *dedup_cnt = count_non_stale;
+ return 0;
}
-static int remove_redundant(struct repository *r, struct commit **array, int cnt)
+static int remove_redundant(struct repository *r, struct commit **array,
+ size_t cnt, size_t *dedup_cnt)
{
/*
* Some commit in the array may be an ancestor of
@@ -402,31 +405,30 @@ static int remove_redundant(struct repository *r, struct commit **array, int cnt
* that number.
*/
if (generation_numbers_enabled(r)) {
- int i;
-
/*
* If we have a single commit with finite generation
* number, then the _with_gen algorithm is preferred.
*/
- for (i = 0; i < cnt; i++) {
+ for (size_t i = 0; i < cnt; i++) {
if (commit_graph_generation(array[i]) < GENERATION_NUMBER_INFINITY)
- return remove_redundant_with_gen(r, array, cnt);
+ return remove_redundant_with_gen(r, array, cnt, dedup_cnt);
}
}
- return remove_redundant_no_gen(r, array, cnt);
+ return remove_redundant_no_gen(r, array, cnt, dedup_cnt);
}
static int get_merge_bases_many_0(struct repository *r,
struct commit *one,
- int n,
+ size_t n,
struct commit **twos,
int cleanup,
struct commit_list **result)
{
struct commit_list *list;
struct commit **rslt;
- int cnt, i;
+ size_t cnt, i;
+ int ret;
if (merge_bases_many(r, one, n, twos, result) < 0)
return -1;
@@ -453,8 +455,8 @@ static int get_merge_bases_many_0(struct repository *r,
clear_commit_marks(one, all_flags);
clear_commit_marks_many(n, twos, all_flags);
- cnt = remove_redundant(r, rslt, cnt);
- if (cnt < 0) {
+ ret = remove_redundant(r, rslt, cnt, &cnt);
+ if (ret < 0) {
free(rslt);
return -1;
}
@@ -466,7 +468,7 @@ static int get_merge_bases_many_0(struct repository *r,
int repo_get_merge_bases_many(struct repository *r,
struct commit *one,
- int n,
+ size_t n,
struct commit **twos,
struct commit_list **result)
{
@@ -475,7 +477,7 @@ int repo_get_merge_bases_many(struct repository *r,
int repo_get_merge_bases_many_dirty(struct repository *r,
struct commit *one,
- int n,
+ size_t n,
struct commit **twos,
struct commit_list **result)
{
@@ -583,7 +585,8 @@ struct commit_list *reduce_heads(struct commit_list *heads)
struct commit_list *p;
struct commit_list *result = NULL, **tail = &result;
struct commit **array;
- int num_head, i;
+ size_t num_head, i;
+ int ret;
if (!heads)
return NULL;
@@ -604,11 +607,13 @@ struct commit_list *reduce_heads(struct commit_list *heads)
p->item->object.flags &= ~STALE;
}
}
- num_head = remove_redundant(the_repository, array, num_head);
- if (num_head < 0) {
+
+ ret = remove_redundant(the_repository, array, num_head, &num_head);
+ if (ret < 0) {
free(array);
return NULL;
}
+
for (i = 0; i < num_head; i++)
tail = &commit_list_insert(array[i], tail)->next;
free(array);
@@ -781,12 +786,12 @@ int commit_contains(struct ref_filter *filter, struct commit *commit,
int can_all_from_reach_with_flag(struct object_array *from,
unsigned int with_flag,
unsigned int assign_flag,
- time_t min_commit_date,
+ timestamp_t min_commit_date,
timestamp_t min_generation)
{
struct commit **list = NULL;
- int i;
- int nr_commits;
+ size_t i;
+ size_t nr_commits;
int result = 1;
ALLOC_ARRAY(list, from->nr);
@@ -884,9 +889,9 @@ int can_all_from_reach(struct commit_list *from, struct commit_list *to,
int cutoff_by_min_date)
{
struct object_array from_objs = OBJECT_ARRAY_INIT;
- time_t min_commit_date = cutoff_by_min_date ? from->item->date : 0;
struct commit_list *from_iter = from, *to_iter = to;
int result;
+ timestamp_t min_commit_date = cutoff_by_min_date ? from->item->date : 0;
timestamp_t min_generation = GENERATION_NUMBER_INFINITY;
while (from_iter) {
@@ -938,8 +943,8 @@ int can_all_from_reach(struct commit_list *from, struct commit_list *to,
return result;
}
-struct commit_list *get_reachable_subset(struct commit **from, int nr_from,
- struct commit **to, int nr_to,
+struct commit_list *get_reachable_subset(struct commit **from, size_t nr_from,
+ struct commit **to, size_t nr_to,
unsigned int reachable_flag)
{
struct commit **item;
diff --git a/commit-reach.h b/commit-reach.h
index 9a745b7e17..6012402dfc 100644
--- a/commit-reach.h
+++ b/commit-reach.h
@@ -14,12 +14,12 @@ int repo_get_merge_bases(struct repository *r,
struct commit *rev2,
struct commit_list **result);
int repo_get_merge_bases_many(struct repository *r,
- struct commit *one, int n,
+ struct commit *one, size_t n,
struct commit **twos,
struct commit_list **result);
/* To be used only when object flags after this call no longer matter */
int repo_get_merge_bases_many_dirty(struct repository *r,
- struct commit *one, int n,
+ struct commit *one, size_t n,
struct commit **twos,
struct commit_list **result);
@@ -81,7 +81,7 @@ int commit_contains(struct ref_filter *filter, struct commit *commit,
int can_all_from_reach_with_flag(struct object_array *from,
unsigned int with_flag,
unsigned int assign_flag,
- time_t min_commit_date,
+ timestamp_t min_commit_date,
timestamp_t min_generation);
int can_all_from_reach(struct commit_list *from, struct commit_list *to,
int commit_date_cutoff);
@@ -95,8 +95,8 @@ int can_all_from_reach(struct commit_list *from, struct commit_list *to,
* This method uses the PARENT1 and PARENT2 flags during its operation,
* so be sure these flags are not set before calling the method.
*/
-struct commit_list *get_reachable_subset(struct commit **from, int nr_from,
- struct commit **to, int nr_to,
+struct commit_list *get_reachable_subset(struct commit **from, size_t nr_from,
+ struct commit **to, size_t nr_to,
unsigned int reachable_flag);
struct ahead_behind_count {
diff --git a/commit.c b/commit.c
index a127fe60c5..540660359d 100644
--- a/commit.c
+++ b/commit.c
@@ -778,11 +778,11 @@ static void clear_commit_marks_1(struct commit_list **plist,
}
}
-void clear_commit_marks_many(int nr, struct commit **commit, unsigned int mark)
+void clear_commit_marks_many(size_t nr, struct commit **commit, unsigned int mark)
{
struct commit_list *list = NULL;
- while (nr--) {
+ for (size_t i = 0; i < nr; i++) {
clear_commit_marks_1(&list, *commit, mark);
commit++;
}
diff --git a/commit.h b/commit.h
index 943e3d74b2..70c870dae4 100644
--- a/commit.h
+++ b/commit.h
@@ -210,7 +210,7 @@ struct commit *pop_most_recent_commit(struct commit_list **list,
struct commit *pop_commit(struct commit_list **stack);
void clear_commit_marks(struct commit *commit, unsigned int mark);
-void clear_commit_marks_many(int nr, struct commit **commit, unsigned int mark);
+void clear_commit_marks_many(size_t nr, struct commit **commit, unsigned int mark);
enum rev_sort_order {
diff --git a/compat/bswap.h b/compat/bswap.h
index 512f6f4b99..b34054f2bd 100644
--- a/compat/bswap.h
+++ b/compat/bswap.h
@@ -171,23 +171,23 @@ static inline uint64_t get_be64(const void *ptr)
static inline void put_be32(void *ptr, uint32_t value)
{
unsigned char *p = ptr;
- p[0] = value >> 24;
- p[1] = value >> 16;
- p[2] = value >> 8;
- p[3] = value >> 0;
+ p[0] = (value >> 24) & 0xff;
+ p[1] = (value >> 16) & 0xff;
+ p[2] = (value >> 8) & 0xff;
+ p[3] = (value >> 0) & 0xff;
}
static inline void put_be64(void *ptr, uint64_t value)
{
unsigned char *p = ptr;
- p[0] = value >> 56;
- p[1] = value >> 48;
- p[2] = value >> 40;
- p[3] = value >> 32;
- p[4] = value >> 24;
- p[5] = value >> 16;
- p[6] = value >> 8;
- p[7] = value >> 0;
+ p[0] = (value >> 56) & 0xff;
+ p[1] = (value >> 48) & 0xff;
+ p[2] = (value >> 40) & 0xff;
+ p[3] = (value >> 32) & 0xff;
+ p[4] = (value >> 24) & 0xff;
+ p[5] = (value >> 16) & 0xff;
+ p[6] = (value >> 8) & 0xff;
+ p[7] = (value >> 0) & 0xff;
}
#endif /* COMPAT_BSWAP_H */
diff --git a/connect.c b/connect.c
index 10fad43e98..91f3990014 100644
--- a/connect.c
+++ b/connect.c
@@ -1,5 +1,4 @@
#define USE_THE_REPOSITORY_VARIABLE
-#define DISABLE_SIGN_COMPARE_WARNINGS
#include "git-compat-util.h"
#include "config.h"
@@ -77,7 +76,7 @@ static NORETURN void die_initial_contact(int unexpected)
/* Checks if the server supports the capability 'c' */
int server_supports_v2(const char *c)
{
- int i;
+ size_t i;
for (i = 0; i < server_capabilities_v2.nr; i++) {
const char *out;
@@ -96,7 +95,7 @@ void ensure_server_supports_v2(const char *c)
int server_feature_v2(const char *c, const char **v)
{
- int i;
+ size_t i;
for (i = 0; i < server_capabilities_v2.nr; i++) {
const char *out;
@@ -112,7 +111,7 @@ int server_feature_v2(const char *c, const char **v)
int server_supports_feature(const char *c, const char *feature,
int die_on_error)
{
- int i;
+ size_t i;
for (i = 0; i < server_capabilities_v2.nr; i++) {
const char *out;
@@ -232,12 +231,12 @@ static void annotate_refs_with_symref_info(struct ref *ref)
string_list_clear(&symref, 0);
}
-static void process_capabilities(struct packet_reader *reader, int *linelen)
+static void process_capabilities(struct packet_reader *reader, size_t *linelen)
{
const char *feat_val;
size_t feat_len;
const char *line = reader->line;
- int nul_location = strlen(line);
+ size_t nul_location = strlen(line);
if (nul_location == *linelen)
return;
server_capabilities_v1 = xstrdup(line + nul_location + 1);
@@ -271,14 +270,14 @@ static int process_dummy_ref(const struct packet_reader *reader)
!strcmp(name, "capabilities^{}");
}
-static void check_no_capabilities(const char *line, int len)
+static void check_no_capabilities(const char *line, size_t len)
{
if (strlen(line) != len)
warning(_("ignoring capabilities after first line '%s'"),
line + strlen(line));
}
-static int process_ref(const struct packet_reader *reader, int len,
+static int process_ref(const struct packet_reader *reader, size_t len,
struct ref ***list, unsigned int flags,
struct oid_array *extra_have)
{
@@ -306,7 +305,7 @@ static int process_ref(const struct packet_reader *reader, int len,
return 1;
}
-static int process_shallow(const struct packet_reader *reader, int len,
+static int process_shallow(const struct packet_reader *reader, size_t len,
struct oid_array *shallow_points)
{
const char *line = reader->line;
@@ -341,7 +340,7 @@ struct ref **get_remote_heads(struct packet_reader *reader,
struct oid_array *shallow_points)
{
struct ref **orig_list = list;
- int len = 0;
+ size_t len = 0;
enum get_remote_heads_state state = EXPECTING_FIRST_REF;
*list = NULL;
@@ -394,7 +393,7 @@ static int process_ref_v2(struct packet_reader *reader, struct ref ***list,
const char **unborn_head_target)
{
int ret = 1;
- int i = 0;
+ size_t i = 0;
struct object_id old_oid;
struct ref *ref;
struct string_list line_sections = STRING_LIST_INIT_DUP;
@@ -552,7 +551,7 @@ struct ref **get_remote_refs(int fd_out, struct packet_reader *reader,
const struct string_list *server_options,
int stateless_rpc)
{
- int i;
+ size_t i;
struct strvec *ref_prefixes = transport_options ?
&transport_options->ref_prefixes : NULL;
const char **unborn_head_target = transport_options ?
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index b3b6aa3bae..413911be3b 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -2737,12 +2737,17 @@ __git_compute_config_vars_all ()
__git_config_vars_all="$(git --no-pager help --config)"
}
+__git_indirect()
+{
+ eval printf '%s' "\"\$$1\""
+}
+
__git_compute_first_level_config_vars_for_section ()
{
local section="$1"
__git_compute_config_vars
local this_section="__git_first_level_config_vars_for_section_${section}"
- test -n "${!this_section}" ||
+ test -n "$(__git_indirect "${this_section}")" ||
printf -v "__git_first_level_config_vars_for_section_${section}" %s \
"$(echo "$__git_config_vars" | awk -F. "/^${section}\.[a-z]/ { print \$2 }")"
}
@@ -2752,7 +2757,7 @@ __git_compute_second_level_config_vars_for_section ()
local section="$1"
__git_compute_config_vars_all
local this_section="__git_second_level_config_vars_for_section_${section}"
- test -n "${!this_section}" ||
+ test -n "$(__git_indirect "${this_section}")" ||
printf -v "__git_second_level_config_vars_for_section_${section}" %s \
"$(echo "$__git_config_vars_all" | awk -F. "/^${section}\.</ { print \$3 }")"
}
@@ -2907,7 +2912,7 @@ __git_complete_config_variable_name ()
local section="${pfx%.*.}"
__git_compute_second_level_config_vars_for_section "${section}"
local this_section="__git_second_level_config_vars_for_section_${section}"
- __gitcomp "${!this_section}" "$pfx" "$cur_" "$sfx"
+ __gitcomp "$(__git_indirect "${this_section}")" "$pfx" "$cur_" "$sfx"
return
;;
branch.*)
@@ -2917,7 +2922,7 @@ __git_complete_config_variable_name ()
__gitcomp_direct "$(__git_heads "$pfx" "$cur_" ".")"
__git_compute_first_level_config_vars_for_section "${section}"
local this_section="__git_first_level_config_vars_for_section_${section}"
- __gitcomp_nl_append "${!this_section}" "$pfx" "$cur_" "${sfx:- }"
+ __gitcomp_nl_append "$(__git_indirect "${this_section}")" "$pfx" "$cur_" "${sfx:- }"
return
;;
pager.*)
@@ -2934,7 +2939,7 @@ __git_complete_config_variable_name ()
__gitcomp_nl "$(__git_remotes)" "$pfx" "$cur_" "."
__git_compute_first_level_config_vars_for_section "${section}"
local this_section="__git_first_level_config_vars_for_section_${section}"
- __gitcomp_nl_append "${!this_section}" "$pfx" "$cur_" "${sfx:- }"
+ __gitcomp_nl_append "$(__git_indirect "${this_section}")" "$pfx" "$cur_" "${sfx:- }"
return
;;
submodule.*)
@@ -2944,7 +2949,7 @@ __git_complete_config_variable_name ()
__gitcomp_nl "$(__git config -f "$(__git rev-parse --show-toplevel)/.gitmodules" --get-regexp 'submodule.*.path' | awk -F. '{print $2}')" "$pfx" "$cur_" "."
__git_compute_first_level_config_vars_for_section "${section}"
local this_section="__git_first_level_config_vars_for_section_${section}"
- __gitcomp_nl_append "${!this_section}" "$pfx" "$cur_" "${sfx:- }"
+ __gitcomp_nl_append "$(__git_indirect "${this_section}")" "$pfx" "$cur_" "${sfx:- }"
return
;;
*.*)
diff --git a/contrib/meson.build b/contrib/meson.build
index a7b77b87c2..d74b64a518 100644
--- a/contrib/meson.build
+++ b/contrib/meson.build
@@ -1 +1,3 @@
-subdir('completion')
+foreach feature : get_option('contrib')
+ subdir(feature)
+endforeach
diff --git a/contrib/subtree/.gitignore b/contrib/subtree/.gitignore
index 0b9381abca..6deaf177c7 100644
--- a/contrib/subtree/.gitignore
+++ b/contrib/subtree/.gitignore
@@ -1,4 +1,6 @@
*~
+asciidoc.conf
+asciidoctor-extensions.rb
git-subtree
git-subtree.1
git-subtree.html
diff --git a/contrib/subtree/Makefile b/contrib/subtree/Makefile
index 6fa7496bfd..8fe0bfd401 100644
--- a/contrib/subtree/Makefile
+++ b/contrib/subtree/Makefile
@@ -1,6 +1,7 @@
# The default target of this Makefile is...
all::
+-include ../../shared.mak
-include ../../config.mak.autogen
-include ../../config.mak
@@ -13,17 +14,16 @@ htmldir ?= $(prefix)/share/doc/git-doc
../../GIT-VERSION-FILE: FORCE
$(MAKE) -C ../../ GIT-VERSION-FILE
--include ../../GIT-VERSION-FILE
-
# this should be set to a 'standard' bsd-type install program
INSTALL ?= install
RM ?= rm -f
ASCIIDOC = asciidoc
-ASCIIDOC_CONF = -f ../../Documentation/asciidoc.conf
+ASCIIDOC_CONF = -f asciidoc.conf
ASCIIDOC_HTML = xhtml11
ASCIIDOC_DOCBOOK = docbook
ASCIIDOC_EXTRA =
+ASCIIDOC_DEPS = asciidoc.conf
XMLTO = xmlto
XMLTO_EXTRA =
@@ -32,8 +32,9 @@ ASCIIDOC = asciidoctor
ASCIIDOC_CONF =
ASCIIDOC_HTML = xhtml5
ASCIIDOC_DOCBOOK = docbook
-ASCIIDOC_EXTRA += -I../../Documentation -rasciidoctor-extensions
+ASCIIDOC_EXTRA += -I. -rasciidoctor-extensions
ASCIIDOC_EXTRA += -alitdd='&\#x2d;&\#x2d;'
+ASCIIDOC_DEPS = asciidoctor-extensions.rb
XMLTO_EXTRA += --skip-validation
endif
@@ -82,13 +83,13 @@ install-html: $(GIT_SUBTREE_HTML)
$(GIT_SUBTREE_DOC): $(GIT_SUBTREE_XML)
$(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $^
-$(GIT_SUBTREE_XML): $(GIT_SUBTREE_TXT)
+$(GIT_SUBTREE_XML): $(GIT_SUBTREE_TXT) $(ASCIIDOC_DEPS)
$(ASCIIDOC) -b $(ASCIIDOC_DOCBOOK) -d manpage $(ASCIIDOC_CONF) \
- -agit_version=$(GIT_VERSION) $(ASCIIDOC_EXTRA) $^
+ $(ASCIIDOC_EXTRA) $<
-$(GIT_SUBTREE_HTML): $(GIT_SUBTREE_TXT)
+$(GIT_SUBTREE_HTML): $(GIT_SUBTREE_TXT) $(ASCIIDOC_DEPS)
$(ASCIIDOC) -b $(ASCIIDOC_HTML) -d manpage $(ASCIIDOC_CONF) \
- -agit_version=$(GIT_VERSION) $(ASCIIDOC_EXTRA) $^
+ $(ASCIIDOC_EXTRA) $<
$(GIT_SUBTREE_TEST): $(GIT_SUBTREE)
cp $< $@
@@ -98,6 +99,12 @@ test: $(GIT_SUBTREE_TEST)
clean:
$(RM) $(GIT_SUBTREE)
+ $(RM) asciidoc.conf asciidoctor-extensions.rb
$(RM) *.xml *.html *.1
+asciidoc.conf: ../../Documentation/asciidoc.conf.in ../../GIT-VERSION-FILE
+ $(QUIET_GEN)$(call version_gen,"$(shell pwd)/../..",$<,$@)
+asciidoctor-extensions.rb: ../../Documentation/asciidoctor-extensions.rb.in ../../GIT-VERSION-FILE
+ $(QUIET_GEN)$(call version_gen,"$(shell pwd)/../..",$<,$@)
+
.PHONY: FORCE
diff --git a/contrib/subtree/meson.build b/contrib/subtree/meson.build
new file mode 100644
index 0000000000..a752a188df
--- /dev/null
+++ b/contrib/subtree/meson.build
@@ -0,0 +1,71 @@
+git_subtree = custom_target(
+ input: 'git-subtree.sh',
+ output: 'git-subtree',
+ command: [
+ shell,
+ meson.project_source_root() / 'generate-script.sh',
+ '@INPUT@',
+ '@OUTPUT@',
+ meson.project_build_root() / 'GIT-BUILD-OPTIONS',
+ ],
+ install: true,
+ install_dir: get_option('libexecdir') / 'git-core',
+)
+
+subtree_test_environment = test_environment
+subtree_test_environment.prepend('PATH', meson.current_build_dir())
+
+test('t7900-subtree', shell,
+ args: [ 't7900-subtree.sh' ],
+ env: subtree_test_environment,
+ workdir: meson.current_source_dir() / 't',
+ depends: test_dependencies + bin_wrappers + [ git_subtree ],
+ timeout: 0,
+)
+
+if get_option('docs').contains('man')
+ subtree_xml = custom_target(
+ command: asciidoc_common_options + [
+ '--backend=' + asciidoc_docbook,
+ '--doctype=manpage',
+ '--out-file=@OUTPUT@',
+ '@INPUT@',
+ ],
+ depends: documentation_deps,
+ input: 'git-subtree.txt',
+ output: 'git-subtree.xml',
+ )
+
+ custom_target(
+ command: [
+ xmlto,
+ '-m', '@INPUT@',
+ 'man',
+ subtree_xml,
+ '-o',
+ meson.current_build_dir(),
+ ] + xmlto_extra,
+ input: [
+ '../../Documentation/manpage-normal.xsl',
+ ],
+ output: 'git-subtree.1',
+ install: true,
+ install_dir: get_option('mandir') / 'man1',
+ )
+endif
+
+if get_option('docs').contains('html')
+ custom_target(
+ command: asciidoc_common_options + [
+ '--backend=' + asciidoc_html,
+ '--doctype=manpage',
+ '--out-file=@OUTPUT@',
+ '@INPUT@',
+ ],
+ depends: documentation_deps,
+ input: 'git-subtree.txt',
+ output: 'git-subtree.html',
+ install: true,
+ install_dir: get_option('datadir') / 'doc/git-doc',
+ )
+endif
diff --git a/credential.c b/credential.c
index a995031c5f..2594c0c422 100644
--- a/credential.c
+++ b/credential.c
@@ -1,4 +1,3 @@
-#define USE_THE_REPOSITORY_VARIABLE
#define DISABLE_SIGN_COMPARE_WARNINGS
#include "git-compat-util.h"
@@ -13,7 +12,7 @@
#include "sigchain.h"
#include "strbuf.h"
#include "urlmatch.h"
-#include "git-compat-util.h"
+#include "environment.h"
#include "trace2.h"
#include "repository.h"
@@ -130,6 +129,10 @@ static int credential_config_callback(const char *var, const char *value,
}
else if (!strcmp(key, "usehttppath"))
c->use_http_path = git_config_bool(var, value);
+ else if (!strcmp(key, "sanitizeprompt"))
+ c->sanitize_prompt = git_config_bool(var, value);
+ else if (!strcmp(key, "protectprotocol"))
+ c->protect_protocol = git_config_bool(var, value);
return 0;
}
@@ -166,7 +169,7 @@ static int match_partial_url(const char *url, void *cb)
return matches;
}
-static void credential_apply_config(struct credential *c)
+static void credential_apply_config(struct repository *r, struct credential *c)
{
char *normalized_url;
struct urlmatch_config config = URLMATCH_CONFIG_INIT;
@@ -191,7 +194,7 @@ static void credential_apply_config(struct credential *c)
credential_format(c, &url);
normalized_url = url_normalize(url.buf, &config.url);
- git_config(urlmatch_config_entry, &config);
+ repo_config(r, urlmatch_config_entry, &config);
string_list_clear(&config.vars, 1);
free(normalized_url);
urlmatch_config_release(&config);
@@ -227,7 +230,8 @@ static void credential_format(struct credential *c, struct strbuf *out)
strbuf_addch(out, '@');
}
if (c->host)
- strbuf_addstr(out, c->host);
+ strbuf_add_percentencode(out, c->host,
+ STRBUF_ENCODE_HOST_AND_PORT);
if (c->path) {
strbuf_addch(out, '/');
strbuf_add_percentencode(out, c->path, 0);
@@ -241,7 +245,10 @@ static char *credential_ask_one(const char *what, struct credential *c,
struct strbuf prompt = STRBUF_INIT;
char *r;
- credential_describe(c, &desc);
+ if (c->sanitize_prompt)
+ credential_format(c, &desc);
+ else
+ credential_describe(c, &desc);
if (desc.len)
strbuf_addf(&prompt, "%s for '%s': ", what, desc.buf);
else
@@ -254,34 +261,34 @@ static char *credential_ask_one(const char *what, struct credential *c,
return xstrdup(r);
}
-static int credential_getpass(struct credential *c)
+static int credential_getpass(struct repository *r, struct credential *c)
{
int interactive;
char *value;
- if (!git_config_get_maybe_bool("credential.interactive", &interactive) &&
+ if (!repo_config_get_maybe_bool(r, "credential.interactive", &interactive) &&
!interactive) {
- trace2_data_intmax("credential", the_repository,
+ trace2_data_intmax("credential", r,
"interactive/skipped", 1);
return -1;
}
- if (!git_config_get_string("credential.interactive", &value)) {
+ if (!repo_config_get_string(r, "credential.interactive", &value)) {
int same = !strcmp(value, "never");
free(value);
if (same) {
- trace2_data_intmax("credential", the_repository,
+ trace2_data_intmax("credential", r,
"interactive/skipped", 1);
return -1;
}
}
- trace2_region_enter("credential", "interactive", the_repository);
+ trace2_region_enter("credential", "interactive", r);
if (!c->username)
c->username = credential_ask_one("Username", c,
PROMPT_ASKPASS|PROMPT_ECHO);
if (!c->password)
c->password = credential_ask_one("Password", c,
PROMPT_ASKPASS);
- trace2_region_leave("credential", "interactive", the_repository);
+ trace2_region_leave("credential", "interactive", r);
return 0;
}
@@ -382,7 +389,8 @@ int credential_read(struct credential *c, FILE *fp,
return 0;
}
-static void credential_write_item(FILE *fp, const char *key, const char *value,
+static void credential_write_item(const struct credential *c,
+ FILE *fp, const char *key, const char *value,
int required)
{
if (!value && required)
@@ -391,6 +399,10 @@ static void credential_write_item(FILE *fp, const char *key, const char *value,
return;
if (strchr(value, '\n'))
die("credential value for %s contains newline", key);
+ if (c->protect_protocol && strchr(value, '\r'))
+ die("credential value for %s contains carriage return\n"
+ "If this is intended, set `credential.protectProtocol=false`",
+ key);
fprintf(fp, "%s=%s\n", key, value);
}
@@ -398,34 +410,34 @@ void credential_write(const struct credential *c, FILE *fp,
enum credential_op_type op_type)
{
if (credential_has_capability(&c->capa_authtype, op_type))
- credential_write_item(fp, "capability[]", "authtype", 0);
+ credential_write_item(c, fp, "capability[]", "authtype", 0);
if (credential_has_capability(&c->capa_state, op_type))
- credential_write_item(fp, "capability[]", "state", 0);
+ credential_write_item(c, fp, "capability[]", "state", 0);
if (credential_has_capability(&c->capa_authtype, op_type)) {
- credential_write_item(fp, "authtype", c->authtype, 0);
- credential_write_item(fp, "credential", c->credential, 0);
+ credential_write_item(c, fp, "authtype", c->authtype, 0);
+ credential_write_item(c, fp, "credential", c->credential, 0);
if (c->ephemeral)
- credential_write_item(fp, "ephemeral", "1", 0);
+ credential_write_item(c, fp, "ephemeral", "1", 0);
}
- credential_write_item(fp, "protocol", c->protocol, 1);
- credential_write_item(fp, "host", c->host, 1);
- credential_write_item(fp, "path", c->path, 0);
- credential_write_item(fp, "username", c->username, 0);
- credential_write_item(fp, "password", c->password, 0);
- credential_write_item(fp, "oauth_refresh_token", c->oauth_refresh_token, 0);
+ credential_write_item(c, fp, "protocol", c->protocol, 1);
+ credential_write_item(c, fp, "host", c->host, 1);
+ credential_write_item(c, fp, "path", c->path, 0);
+ credential_write_item(c, fp, "username", c->username, 0);
+ credential_write_item(c, fp, "password", c->password, 0);
+ credential_write_item(c, fp, "oauth_refresh_token", c->oauth_refresh_token, 0);
if (c->password_expiry_utc != TIME_MAX) {
char *s = xstrfmt("%"PRItime, c->password_expiry_utc);
- credential_write_item(fp, "password_expiry_utc", s, 0);
+ credential_write_item(c, fp, "password_expiry_utc", s, 0);
free(s);
}
for (size_t i = 0; i < c->wwwauth_headers.nr; i++)
- credential_write_item(fp, "wwwauth[]", c->wwwauth_headers.v[i], 0);
+ credential_write_item(c, fp, "wwwauth[]", c->wwwauth_headers.v[i], 0);
if (credential_has_capability(&c->capa_state, op_type)) {
if (c->multistage)
- credential_write_item(fp, "continue", "1", 0);
+ credential_write_item(c, fp, "continue", "1", 0);
for (size_t i = 0; i < c->state_headers_to_send.nr; i++)
- credential_write_item(fp, "state[]", c->state_headers_to_send.v[i], 0);
+ credential_write_item(c, fp, "state[]", c->state_headers_to_send.v[i], 0);
}
}
@@ -489,7 +501,8 @@ static int credential_do(struct credential *c, const char *helper,
return r;
}
-void credential_fill(struct credential *c, int all_capabilities)
+void credential_fill(struct repository *r,
+ struct credential *c, int all_capabilities)
{
int i;
@@ -499,7 +512,7 @@ void credential_fill(struct credential *c, int all_capabilities)
credential_next_state(c);
c->multistage = 0;
- credential_apply_config(c);
+ credential_apply_config(r, c);
if (all_capabilities)
credential_set_all_capabilities(c, CREDENTIAL_OP_INITIAL);
@@ -526,12 +539,12 @@ void credential_fill(struct credential *c, int all_capabilities)
c->helpers.items[i].string);
}
- if (credential_getpass(c) ||
+ if (credential_getpass(r, c) ||
(!c->username && !c->password && !c->credential))
die("unable to get password from user");
}
-void credential_approve(struct credential *c)
+void credential_approve(struct repository *r, struct credential *c)
{
int i;
@@ -542,20 +555,20 @@ void credential_approve(struct credential *c)
credential_next_state(c);
- credential_apply_config(c);
+ credential_apply_config(r, c);
for (i = 0; i < c->helpers.nr; i++)
credential_do(c, c->helpers.items[i].string, "store");
c->approved = 1;
}
-void credential_reject(struct credential *c)
+void credential_reject(struct repository *r, struct credential *c)
{
int i;
credential_next_state(c);
- credential_apply_config(c);
+ credential_apply_config(r, c);
for (i = 0; i < c->helpers.nr; i++)
credential_do(c, c->helpers.items[i].string, "erase");
diff --git a/credential.h b/credential.h
index 5f9e6ff2ef..c78b72d110 100644
--- a/credential.h
+++ b/credential.h
@@ -4,6 +4,8 @@
#include "string-list.h"
#include "strvec.h"
+struct repository;
+
/**
* The credentials API provides an abstracted way of gathering
* authentication credentials from the user.
@@ -65,7 +67,7 @@
* // Fill in the username and password fields by contacting
* // helpers and/or asking the user. The function will die if it
* // fails.
- * credential_fill(&c);
+ * credential_fill(repo, &c);
*
* // Otherwise, we have a username and password. Try to use it.
*
@@ -168,7 +170,9 @@ struct credential {
multistage: 1,
quit:1,
use_http_path:1,
- username_from_proto:1;
+ username_from_proto:1,
+ sanitize_prompt:1,
+ protect_protocol:1;
struct credential_capability capa_authtype;
struct credential_capability capa_state;
@@ -195,6 +199,8 @@ struct credential {
.wwwauth_headers = STRVEC_INIT, \
.state_headers = STRVEC_INIT, \
.state_headers_to_send = STRVEC_INIT, \
+ .sanitize_prompt = 1, \
+ .protect_protocol = 1, \
}
/* Initialize a credential structure, setting all fields to empty. */
@@ -218,7 +224,8 @@ void credential_clear(struct credential *);
* If all_capabilities is set, this is an internal user that is prepared
* to deal with all known capabilities, and we should advertise that fact.
*/
-void credential_fill(struct credential *, int all_capabilities);
+void credential_fill(struct repository *, struct credential *,
+ int all_capabilities);
/**
* Inform the credential subsystem that the provided credentials
@@ -227,7 +234,7 @@ void credential_fill(struct credential *, int all_capabilities);
* that they may store the result to be used again. Any errors
* from helpers are ignored.
*/
-void credential_approve(struct credential *);
+void credential_approve(struct repository *, struct credential *);
/**
* Inform the credential subsystem that the provided credentials
@@ -239,7 +246,7 @@ void credential_approve(struct credential *);
* for another call to `credential_fill`). Any errors from helpers
* are ignored.
*/
-void credential_reject(struct credential *);
+void credential_reject(struct repository *, struct credential *);
/**
* Enable all of the supported credential flags in this credential.
diff --git a/date.c b/date.c
index a1b26a8dce..17a95077cf 100644
--- a/date.c
+++ b/date.c
@@ -1244,7 +1244,7 @@ static const char *approxidate_alpha(const char *date, struct tm *tm, struct tm
}
for (s = special; s->name; s++) {
- int len = strlen(s->name);
+ size_t len = strlen(s->name);
if (match_string(date, s->name) == len) {
s->fn(tm, now, num);
*touched = 1;
@@ -1254,7 +1254,7 @@ static const char *approxidate_alpha(const char *date, struct tm *tm, struct tm
if (!*num) {
for (i = 1; i < 11; i++) {
- int len = strlen(number_name[i]);
+ size_t len = strlen(number_name[i]);
if (match_string(date, number_name[i]) == len) {
*num = i;
*touched = 1;
@@ -1270,7 +1270,7 @@ static const char *approxidate_alpha(const char *date, struct tm *tm, struct tm
tl = typelen;
while (tl->type) {
- int len = strlen(tl->type);
+ size_t len = strlen(tl->type);
if (match_string(date, tl->type) >= len-1) {
update_tm(tm, now, tl->length * *num);
*num = 0;
diff --git a/delta-islands.c b/delta-islands.c
index 1c465a6041..3aec43fada 100644
--- a/delta-islands.c
+++ b/delta-islands.c
@@ -267,7 +267,8 @@ void resolve_tree_islands(struct repository *r,
QSORT(todo, nr, tree_depth_compare);
if (progress)
- progress_state = start_progress(_("Propagating island marks"), nr);
+ progress_state = start_progress(the_repository,
+ _("Propagating island marks"), nr);
for (i = 0; i < nr; i++) {
struct object_entry *ent = todo[i].entry;
diff --git a/diagnose.c b/diagnose.c
index b11931df86..bd485effea 100644
--- a/diagnose.c
+++ b/diagnose.c
@@ -1,5 +1,3 @@
-#define USE_THE_REPOSITORY_VARIABLE
-
#include "git-compat-util.h"
#include "diagnose.h"
#include "compat/disk.h"
@@ -12,6 +10,7 @@
#include "object-store-ll.h"
#include "packfile.h"
#include "parse-options.h"
+#include "repository.h"
#include "write-or-die.h"
struct archive_dir {
@@ -179,7 +178,9 @@ static int add_directory_to_archiver(struct strvec *archiver_args,
return res;
}
-int create_diagnostics_archive(struct strbuf *zip_path, enum diagnose_mode mode)
+int create_diagnostics_archive(struct repository *r,
+ struct strbuf *zip_path,
+ enum diagnose_mode mode)
{
struct strvec archiver_args = STRVEC_INIT;
char **argv_copy = NULL;
@@ -218,7 +219,7 @@ int create_diagnostics_archive(struct strbuf *zip_path, enum diagnose_mode mode)
strbuf_addstr(&buf, "Collecting diagnostic info\n\n");
get_version_info(&buf, 1);
- strbuf_addf(&buf, "Repository root: %s\n", the_repository->worktree);
+ strbuf_addf(&buf, "Repository root: %s\n", r->worktree);
get_disk_info(&buf);
write_or_die(stdout_fd, buf.buf, buf.len);
strvec_pushf(&archiver_args,
@@ -227,7 +228,7 @@ int create_diagnostics_archive(struct strbuf *zip_path, enum diagnose_mode mode)
strbuf_reset(&buf);
strbuf_addstr(&buf, "--add-virtual-file=packs-local.txt:");
- dir_file_stats(the_repository->objects->odb, &buf);
+ dir_file_stats(r->objects->odb, &buf);
foreach_alt_odb(dir_file_stats, &buf);
strvec_push(&archiver_args, buf.buf);
@@ -250,13 +251,13 @@ int create_diagnostics_archive(struct strbuf *zip_path, enum diagnose_mode mode)
}
strvec_pushl(&archiver_args, "--prefix=",
- oid_to_hex(the_hash_algo->empty_tree), "--", NULL);
+ oid_to_hex(r->hash_algo->empty_tree), "--", NULL);
/* `write_archive()` modifies the `argv` passed to it. Let it. */
argv_copy = xmemdupz(archiver_args.v,
sizeof(char *) * archiver_args.nr);
res = write_archive(archiver_args.nr, (const char **)argv_copy, NULL,
- the_repository, NULL, 0);
+ r, NULL, 0);
if (res) {
error(_("failed to write archive"));
goto diagnose_cleanup;
diff --git a/diagnose.h b/diagnose.h
index f525219ab0..f7b38f49f5 100644
--- a/diagnose.h
+++ b/diagnose.h
@@ -4,6 +4,7 @@
#include "strbuf.h"
struct option;
+struct repository;
enum diagnose_mode {
DIAGNOSE_NONE,
@@ -13,6 +14,8 @@ enum diagnose_mode {
int option_parse_diagnose(const struct option *opt, const char *arg, int unset);
-int create_diagnostics_archive(struct strbuf *zip_path, enum diagnose_mode mode);
+int create_diagnostics_archive(struct repository *r,
+ struct strbuf *zip_path,
+ enum diagnose_mode mode);
#endif /* DIAGNOSE_H */
diff --git a/diff.c b/diff.c
index d28b4114c8..0822ae4433 100644
--- a/diff.c
+++ b/diff.c
@@ -7386,6 +7386,6 @@ void setup_diff_pager(struct diff_options *opt)
* --exit-code" in hooks and other scripts, we do not do so.
*/
if (!opt->flags.exit_with_status &&
- check_pager_config("diff") != 0)
- setup_pager();
+ check_pager_config(the_repository, "diff") != 0)
+ setup_pager(the_repository);
}
diff --git a/diffcore-rename.c b/diffcore-rename.c
index 10bb0321b1..91b77993c7 100644
--- a/diffcore-rename.c
+++ b/diffcore-rename.c
@@ -1567,6 +1567,7 @@ void diffcore_rename_extended(struct diff_options *options,
trace2_region_enter("diff", "inexact renames", options->repo);
if (options->show_rename_progress) {
progress = start_delayed_progress(
+ the_repository,
_("Performing inexact rename detection"),
(uint64_t)num_destinations * (uint64_t)num_sources);
}
diff --git a/entry.c b/entry.c
index 53a1c39358..81b321e53d 100644
--- a/entry.c
+++ b/entry.c
@@ -188,7 +188,9 @@ int finish_delayed_checkout(struct checkout *state, int show_progress)
dco->state = CE_RETRY;
if (show_progress)
- progress = start_delayed_progress(_("Filtering content"), dco->paths.nr);
+ progress = start_delayed_progress(the_repository,
+ _("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_DUP;
diff --git a/fetch-pack.c b/fetch-pack.c
index 3a227721ed..055e8c3643 100644
--- a/fetch-pack.c
+++ b/fetch-pack.c
@@ -1867,7 +1867,7 @@ int fetch_pack_fsck_config(const char *var, const char *value,
char *path ;
if (git_config_pathname(&path, var, value))
- return 0;
+ return -1;
strbuf_addf(msg_types, "%cskiplist=%s",
msg_types->len ? ',' : '=', path);
free(path);
diff --git a/fsck.c b/fsck.c
index 87ce999a49..9fc4c25ffd 100644
--- a/fsck.c
+++ b/fsck.c
@@ -1353,7 +1353,7 @@ int git_fsck_config(const char *var, const char *value,
struct strbuf sb = STRBUF_INIT;
if (git_config_pathname(&path, var, value))
- return 1;
+ return -1;
strbuf_addf(&sb, "skiplist=%s", path);
free(path);
fsck_set_msg_types(options, sb.buf);
diff --git a/git-compat-util.h b/git-compat-util.h
index e283c46c6f..d43dd248c4 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -701,6 +701,8 @@ int error_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
void warning(const char *err, ...) __attribute__((format (printf, 1, 2)));
void warning_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
+void show_usage_if_asked(int ac, const char **av, const char *err);
+
#ifndef NO_OPENSSL
#ifdef APPLE_COMMON_CRYPTO
#include "compat/apple-common-crypto.h"
diff --git a/git-gui/po/bg.po b/git-gui/po/bg.po
index 5af78f15a8..27b05038e4 100644
--- a/git-gui/po/bg.po
+++ b/git-gui/po/bg.po
@@ -1,15 +1,15 @@
# Bulgarian translation of git-gui po-file.
-# Copyright (C) 2012, 2013, 2014, 2015, 2016 Alexander Shopov <ash@kambanaria.org>.
+# Copyright (C) 2012, 2013, 2014, 2015, 2016, 2024 Alexander Shopov <ash@kambanaria.org>.
# This file is distributed under the same license as the git package.
-# Alexander Shopov <ash@kambanaria.org>, 2012, 2013, 2014, 2015, 2016.
+# Alexander Shopov <ash@kambanaria.org>, 2012, 2013, 2014, 2015, 2016, 2024.
#
#
msgid ""
msgstr ""
"Project-Id-Version: git-gui master\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-10-13 15:16+0300\n"
-"PO-Revision-Date: 2016-10-13 15:16+0300\n"
+"POT-Creation-Date: 2020-02-08 22:54+0100\n"
+"PO-Revision-Date: 2024-12-22 15:44+0100\n"
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
"Language: bg\n"
@@ -18,33 +18,33 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: git-gui.sh:865
+#: git-gui.sh:847
#, tcl-format
msgid "Invalid font specified in %s:"
msgstr "Указан е неправилен шрифт в „%s“:"
-#: git-gui.sh:919
+#: git-gui.sh:901
msgid "Main Font"
msgstr "ОÑновен шрифт"
-#: git-gui.sh:920
+#: git-gui.sh:902
msgid "Diff/Console Font"
msgstr "Шрифт за разликите/конзолата"
-#: git-gui.sh:935 git-gui.sh:949 git-gui.sh:962 git-gui.sh:1052 git-gui.sh:1071
-#: git-gui.sh:3147
+#: git-gui.sh:917 git-gui.sh:931 git-gui.sh:944 git-gui.sh:1034 git-gui.sh:1053
+#: git-gui.sh:3212
msgid "git-gui: fatal error"
msgstr "git-gui: фатална грешка"
-#: git-gui.sh:936
+#: git-gui.sh:918
msgid "Cannot find git in PATH."
msgstr "Командата git липÑва в Ð¿ÑŠÑ‚Ñ (PATH)."
-#: git-gui.sh:963
+#: git-gui.sh:945
msgid "Cannot parse Git version string:"
-msgstr "Ðизът Ñ Ð²ÐµÑ€ÑиÑта на Git не може да бъде интерпретиран:"
+msgstr "Ðизът Ñ Ð²ÐµÑ€ÑиÑта на Git не може да Ñе анализира:"
-#: git-gui.sh:988
+#: git-gui.sh:970
#, tcl-format
msgid ""
"Git version cannot be determined.\n"
@@ -55,7 +55,7 @@ msgid ""
"\n"
"Assume '%s' is version 1.5.0?\n"
msgstr ""
-"ВерÑиÑта на Git не може да бъде определена.\n"
+"ВерÑиÑта на Git не може да Ñе определи.\n"
"\n"
"ВерÑиÑта на „%s“ изглежда, че е „%s“.\n"
"\n"
@@ -63,506 +63,522 @@ msgstr ""
"\n"
"Да Ñе приеме ли, че „%s“ е верÑÐ¸Ñ â€ž1.5.0“?\n"
-#: git-gui.sh:1285
+#: git-gui.sh:1267
msgid "Git directory not found:"
msgstr "ДиректориÑта на Git не е открита:"
-#: git-gui.sh:1319
+#: git-gui.sh:1301
msgid "Cannot move to top of working directory:"
-msgstr "Ðе може да Ñе премине към родителÑката директориÑ."
+msgstr "Ðе може да Ñе премине към родителÑката директориÑ."
-#: git-gui.sh:1327
+#: git-gui.sh:1309
msgid "Cannot use bare repository:"
msgstr "Голо хранилище не може да Ñе използва:"
-#: git-gui.sh:1335
+#: git-gui.sh:1317
msgid "No working directory"
msgstr "Работната Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð»Ð¸Ð¿Ñва"
-#: git-gui.sh:1507 lib/checkout_op.tcl:306
+#: git-gui.sh:1491 lib/checkout_op.tcl:306
msgid "Refreshing file status..."
msgstr "ОбновÑване на ÑÑŠÑтоÑнието на файла…"
-#: git-gui.sh:1567
+#: git-gui.sh:1551
msgid "Scanning for modified files ..."
msgstr "Проверка за променени файлове…"
-#: git-gui.sh:1645
+#: git-gui.sh:1629
msgid "Calling prepare-commit-msg hook..."
msgstr "Куката „prepare-commit-msg“ Ñе изпълнÑва в момента…"
-#: git-gui.sh:1662
+#: git-gui.sh:1646
msgid "Commit declined by prepare-commit-msg hook."
msgstr "Подаването е отхвърлено от куката „prepare-commit-msg“."
-#: git-gui.sh:1820 lib/browser.tcl:252
+#: git-gui.sh:1804 lib/browser.tcl:252
msgid "Ready."
msgstr "Готово."
-#: git-gui.sh:1984
+#: git-gui.sh:1968
#, tcl-format
msgid ""
"Display limit (gui.maxfilesdisplayed = %s) reached, not showing all %s files."
msgstr ""
-"ДоÑтигнат е макÑималниÑÑ‚ размер на ÑпиÑъка за извеждане(gui."
-"maxfilesdisplayed = %s), Ñъответно не Ñа показани вÑички %s файла."
+"ДоÑтигнат е макÑималниÑÑ‚ размер на ÑпиÑъка за "
+"извеждане(gui.maxfilesdisplayed = %s), Ñъответно не Ñа показани вÑички %s "
+"файла."
-#: git-gui.sh:2107
+#: git-gui.sh:2091
msgid "Unmodified"
msgstr "Ðепроменен"
-#: git-gui.sh:2109
+#: git-gui.sh:2093
msgid "Modified, not staged"
msgstr "Променен, но не е в индекÑа"
-#: git-gui.sh:2110 git-gui.sh:2122
+#: git-gui.sh:2094 git-gui.sh:2106
msgid "Staged for commit"
msgstr "Ð’ индекÑа за подаване"
-#: git-gui.sh:2111 git-gui.sh:2123
+#: git-gui.sh:2095 git-gui.sh:2107
msgid "Portions staged for commit"
msgstr "ЧаÑти Ñа в индекÑа за подаване"
-#: git-gui.sh:2112 git-gui.sh:2124
+#: git-gui.sh:2096 git-gui.sh:2108
msgid "Staged for commit, missing"
msgstr "Ð’ индекÑа за подаване, но липÑва"
-#: git-gui.sh:2114
+#: git-gui.sh:2098
msgid "File type changed, not staged"
msgstr "Видът на файла е Ñменен, но не е в индекÑа"
-#: git-gui.sh:2115 git-gui.sh:2116
+#: git-gui.sh:2099 git-gui.sh:2100
msgid "File type changed, old type staged for commit"
msgstr "Видът на файла е Ñменен, но новиÑÑ‚ вид не е в индекÑа"
-#: git-gui.sh:2117
+#: git-gui.sh:2101
msgid "File type changed, staged"
msgstr "Видът на файла е Ñменен и е в индекÑа"
-#: git-gui.sh:2118
+#: git-gui.sh:2102
msgid "File type change staged, modification not staged"
msgstr "Видът на файла е Ñменен в индекÑа, но не и Ñъдържанието"
-#: git-gui.sh:2119
+#: git-gui.sh:2103
msgid "File type change staged, file missing"
msgstr "Видът на файла е Ñменен в индекÑа, но файлът липÑва"
-#: git-gui.sh:2121
+#: git-gui.sh:2105
msgid "Untracked, not staged"
msgstr "ÐеÑледен"
-#: git-gui.sh:2126
+#: git-gui.sh:2110
msgid "Missing"
msgstr "ЛипÑващ"
-#: git-gui.sh:2127
+#: git-gui.sh:2111
msgid "Staged for removal"
msgstr "Ð’ индекÑа за изтриване"
-#: git-gui.sh:2128
+#: git-gui.sh:2112
msgid "Staged for removal, still present"
msgstr "Ð’ индекÑа за изтриване, но още го има"
-#: git-gui.sh:2130 git-gui.sh:2131 git-gui.sh:2132 git-gui.sh:2133
-#: git-gui.sh:2134 git-gui.sh:2135
+#: git-gui.sh:2114 git-gui.sh:2115 git-gui.sh:2116 git-gui.sh:2117
+#: git-gui.sh:2118 git-gui.sh:2119
msgid "Requires merge resolution"
msgstr "ИзиÑква коригиране при Ñливане"
-#: git-gui.sh:2170
-msgid "Starting gitk... please wait..."
-msgstr "Стартиране на „gitk“…, изчакайте…"
-
-#: git-gui.sh:2182
+#: git-gui.sh:2164
msgid "Couldn't find gitk in PATH"
msgstr "Командата „gitk“ липÑва в пътищата, определени от променливата PATH."
-#: git-gui.sh:2241
+#: git-gui.sh:2210 git-gui.sh:2245
+#, tcl-format
+msgid "Starting %s... please wait..."
+msgstr "Стартиране на „%s“…, изчакайте…"
+
+#: git-gui.sh:2224
msgid "Couldn't find git gui in PATH"
msgstr ""
"Командата „git gui“ липÑва в пътищата, определени от променливата PATH."
-#: git-gui.sh:2676 lib/choose_repository.tcl:41
+#: git-gui.sh:2726 lib/choose_repository.tcl:53
msgid "Repository"
msgstr "Хранилище"
-#: git-gui.sh:2677
+#: git-gui.sh:2727
msgid "Edit"
msgstr "Редактиране"
-#: git-gui.sh:2679 lib/choose_rev.tcl:567
+#: git-gui.sh:2729 lib/choose_rev.tcl:567
msgid "Branch"
msgstr "Клон"
-#: git-gui.sh:2682 lib/choose_rev.tcl:554
+#: git-gui.sh:2732 lib/choose_rev.tcl:554
msgid "Commit@@noun"
msgstr "Подаване"
-#: git-gui.sh:2685 lib/merge.tcl:127 lib/merge.tcl:174
+#: git-gui.sh:2735 lib/merge.tcl:127 lib/merge.tcl:174
msgid "Merge"
msgstr "Сливане"
-#: git-gui.sh:2686 lib/choose_rev.tcl:563
+#: git-gui.sh:2736 lib/choose_rev.tcl:563
msgid "Remote"
msgstr "Отдалечено хранилище"
-#: git-gui.sh:2689
+#: git-gui.sh:2739
msgid "Tools"
msgstr "Команди"
-#: git-gui.sh:2698
+#: git-gui.sh:2748
msgid "Explore Working Copy"
msgstr "Разглеждане на работното копие"
-#: git-gui.sh:2704
+#: git-gui.sh:2763
msgid "Git Bash"
msgstr "Bash за Git"
-#: git-gui.sh:2714
+#: git-gui.sh:2772
msgid "Browse Current Branch's Files"
msgstr "Разглеждане на файловете в Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ ÐºÐ»Ð¾Ð½"
-#: git-gui.sh:2718
+#: git-gui.sh:2776
msgid "Browse Branch Files..."
msgstr "Разглеждане на Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ ÐºÐ»Ð¾Ð½â€¦"
-#: git-gui.sh:2723
+#: git-gui.sh:2781
msgid "Visualize Current Branch's History"
msgstr "Ð’Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° иÑториÑта на Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ ÐºÐ»Ð¾Ð½"
-#: git-gui.sh:2727
+#: git-gui.sh:2785
msgid "Visualize All Branch History"
msgstr "Ð’Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° иÑториÑта на вÑички клонове"
-#: git-gui.sh:2734
+#: git-gui.sh:2792
#, tcl-format
msgid "Browse %s's Files"
msgstr "Разглеждане на файловете в „%s“"
-#: git-gui.sh:2736
+#: git-gui.sh:2794
#, tcl-format
msgid "Visualize %s's History"
msgstr "Ð’Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° иÑториÑта на „%s“"
-#: git-gui.sh:2741 lib/database.tcl:40
+#: git-gui.sh:2799 lib/database.tcl:40
msgid "Database Statistics"
msgstr "СтатиÑтика на базата от данни"
-#: git-gui.sh:2744 lib/database.tcl:33
+#: git-gui.sh:2802 lib/database.tcl:33
msgid "Compress Database"
msgstr "КомпреÑиране на базата от данни"
-#: git-gui.sh:2747
+#: git-gui.sh:2805
msgid "Verify Database"
msgstr "Проверка на базата от данни"
-#: git-gui.sh:2754 git-gui.sh:2758 git-gui.sh:2762
+#: git-gui.sh:2812 git-gui.sh:2816 git-gui.sh:2820
msgid "Create Desktop Icon"
msgstr "ДобавÑне на икона на Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ Ð¿Ð»Ð¾Ñ‚"
-#: git-gui.sh:2770 lib/choose_repository.tcl:193 lib/choose_repository.tcl:201
+#: git-gui.sh:2828 lib/choose_repository.tcl:209 lib/choose_repository.tcl:217
msgid "Quit"
msgstr "Спиране на програмата"
-#: git-gui.sh:2778
+#: git-gui.sh:2836
msgid "Undo"
msgstr "ОтмÑна"
-#: git-gui.sh:2781
+#: git-gui.sh:2839
msgid "Redo"
msgstr "Повторение"
-#: git-gui.sh:2785 git-gui.sh:3399
+#: git-gui.sh:2843 git-gui.sh:3461
msgid "Cut"
msgstr "ОтрÑзване"
-#: git-gui.sh:2788 git-gui.sh:3402 git-gui.sh:3476 git-gui.sh:3562
+#: git-gui.sh:2846 git-gui.sh:3464 git-gui.sh:3540 git-gui.sh:3633
#: lib/console.tcl:69
msgid "Copy"
msgstr "Копиране"
-#: git-gui.sh:2791 git-gui.sh:3405
+#: git-gui.sh:2849 git-gui.sh:3467
msgid "Paste"
msgstr "ПоÑтавÑне"
-#: git-gui.sh:2794 git-gui.sh:3408 lib/branch_delete.tcl:28
-#: lib/remote_branch_delete.tcl:39
+#: git-gui.sh:2852 git-gui.sh:3470 lib/remote_branch_delete.tcl:39
+#: lib/branch_delete.tcl:28
msgid "Delete"
msgstr "Изтриване"
-#: git-gui.sh:2798 git-gui.sh:3412 git-gui.sh:3566 lib/console.tcl:71
+#: git-gui.sh:2856 git-gui.sh:3474 git-gui.sh:3637 lib/console.tcl:71
msgid "Select All"
msgstr "Избиране на вÑичко"
-#: git-gui.sh:2807
+#: git-gui.sh:2865
msgid "Create..."
msgstr "Създаване…"
-#: git-gui.sh:2813
+#: git-gui.sh:2871
msgid "Checkout..."
msgstr "ИзтеглÑне…"
-#: git-gui.sh:2819
+#: git-gui.sh:2877
msgid "Rename..."
msgstr "Преименуване…"
-#: git-gui.sh:2824
+#: git-gui.sh:2882
msgid "Delete..."
msgstr "Изтриване…"
-#: git-gui.sh:2829
+#: git-gui.sh:2887
msgid "Reset..."
msgstr "ОтмÑна на промените…"
-#: git-gui.sh:2839
+#: git-gui.sh:2897
msgid "Done"
msgstr "Готово"
-#: git-gui.sh:2841
+#: git-gui.sh:2899
msgid "Commit@@verb"
msgstr "Подаване"
-#: git-gui.sh:2850 git-gui.sh:3335
-msgid "New Commit"
-msgstr "Ðово подаване"
-
-#: git-gui.sh:2858 git-gui.sh:3342
+#: git-gui.sh:2908 git-gui.sh:3400
msgid "Amend Last Commit"
msgstr "ПоправÑне на поÑледното подаване"
-#: git-gui.sh:2868 git-gui.sh:3296 lib/remote_branch_delete.tcl:101
+#: git-gui.sh:2918 git-gui.sh:3361 lib/remote_branch_delete.tcl:101
msgid "Rescan"
msgstr "ОбновÑване"
-#: git-gui.sh:2874
+#: git-gui.sh:2924
msgid "Stage To Commit"
msgstr "Към индекÑа за подаване"
-#: git-gui.sh:2880
+#: git-gui.sh:2930
msgid "Stage Changed Files To Commit"
msgstr "Ð’Ñички променени файлове към индекÑа за подаване"
-#: git-gui.sh:2886
+#: git-gui.sh:2936
msgid "Unstage From Commit"
msgstr "Изваждане от индекÑа за подаване"
-#: git-gui.sh:2892 lib/index.tcl:442
+#: git-gui.sh:2942 lib/index.tcl:521
msgid "Revert Changes"
msgstr "Връщане на оригинала"
-#: git-gui.sh:2900 git-gui.sh:3613 git-gui.sh:3644
+#: git-gui.sh:2950 git-gui.sh:3700 git-gui.sh:3731
msgid "Show Less Context"
msgstr "По-малко контекÑÑ‚"
-#: git-gui.sh:2904 git-gui.sh:3617 git-gui.sh:3648
+#: git-gui.sh:2954 git-gui.sh:3704 git-gui.sh:3735
msgid "Show More Context"
msgstr "Повече контекÑÑ‚"
-#: git-gui.sh:2911 git-gui.sh:3309 git-gui.sh:3423
+#: git-gui.sh:2961 git-gui.sh:3374 git-gui.sh:3485
msgid "Sign Off"
msgstr "ПодпиÑване"
-#: git-gui.sh:2927
+#: git-gui.sh:2977
msgid "Local Merge..."
msgstr "Локално Ñливане…"
-#: git-gui.sh:2932
+#: git-gui.sh:2982
msgid "Abort Merge..."
msgstr "ПреуÑтановÑване на Ñливане…"
-#: git-gui.sh:2944 git-gui.sh:2972
+#: git-gui.sh:2994 git-gui.sh:3022
msgid "Add..."
msgstr "ДобавÑне…"
-#: git-gui.sh:2948
+#: git-gui.sh:2998
msgid "Push..."
msgstr "ИзтлаÑкване…"
-#: git-gui.sh:2952
+#: git-gui.sh:3002
msgid "Delete Branch..."
msgstr "Изтриване на клон…"
-#: git-gui.sh:2962 git-gui.sh:3595
+#: git-gui.sh:3012 git-gui.sh:3666
msgid "Options..."
msgstr "Опции…"
-#: git-gui.sh:2973
+#: git-gui.sh:3023
msgid "Remove..."
msgstr "Премахване…"
-#: git-gui.sh:2982 lib/choose_repository.tcl:55
+#: git-gui.sh:3032 lib/choose_repository.tcl:67
msgid "Help"
msgstr "Помощ"
-#: git-gui.sh:2986 git-gui.sh:2990 lib/about.tcl:14
-#: lib/choose_repository.tcl:49 lib/choose_repository.tcl:58
+#: git-gui.sh:3036 git-gui.sh:3040 lib/choose_repository.tcl:61
+#: lib/choose_repository.tcl:70 lib/about.tcl:14
#, tcl-format
msgid "About %s"
-msgstr "ОтноÑно %s"
+msgstr "ОтноÑно „%s“"
-#: git-gui.sh:3014
+#: git-gui.sh:3064
msgid "Online Documentation"
msgstr "Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð² Интернет"
-#: git-gui.sh:3017 lib/choose_repository.tcl:52 lib/choose_repository.tcl:61
+#: git-gui.sh:3067 lib/choose_repository.tcl:64 lib/choose_repository.tcl:73
msgid "Show SSH Key"
msgstr "Показване на ключа за SSH"
-#: git-gui.sh:3032 git-gui.sh:3164
+#: git-gui.sh:3097 git-gui.sh:3229
msgid "usage:"
msgstr "употреба:"
-#: git-gui.sh:3036 git-gui.sh:3168
+#: git-gui.sh:3101 git-gui.sh:3233
msgid "Usage"
msgstr "Употреба"
-#: git-gui.sh:3117 lib/blame.tcl:573
+#: git-gui.sh:3182 lib/blame.tcl:575
msgid "Error"
msgstr "Грешка"
-#: git-gui.sh:3148
+#: git-gui.sh:3213
#, tcl-format
msgid "fatal: cannot stat path %s: No such file or directory"
-msgstr ""
-"ФÐТÐЛÐРГРЕШКÐ: пътÑÑ‚ %s не може да бъде открит: такъв файл или Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ "
-"нÑма"
+msgstr "ФÐТÐЛÐРГРЕШКÐ: пътÑÑ‚ „%s“ липÑва: такъв файл или Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ñма"
-#: git-gui.sh:3181
+#: git-gui.sh:3246
msgid "Current Branch:"
msgstr "Текущ клон:"
-#: git-gui.sh:3206
+#: git-gui.sh:3271
msgid "Unstaged Changes"
msgstr "Промени извън индекÑа"
-#: git-gui.sh:3228
+#: git-gui.sh:3293
msgid "Staged Changes (Will Commit)"
msgstr "Промени в индекÑа (за подаване)"
-#: git-gui.sh:3302
+#: git-gui.sh:3367
msgid "Stage Changed"
msgstr "ИндекÑÑŠÑ‚ е променен"
-#: git-gui.sh:3321 lib/transport.tcl:137
+#: git-gui.sh:3386 lib/transport.tcl:137
msgid "Push"
msgstr "ИзтлаÑкване"
-#: git-gui.sh:3356
+#: git-gui.sh:3413
msgid "Initial Commit Message:"
msgstr "Първоначално Ñъобщение при подаване:"
-#: git-gui.sh:3357
+#: git-gui.sh:3414
msgid "Amended Commit Message:"
msgstr "Поправено Ñъобщение при подаване:"
-#: git-gui.sh:3358
+#: git-gui.sh:3415
msgid "Amended Initial Commit Message:"
msgstr "Поправено първоначално Ñъобщение при подаване:"
-#: git-gui.sh:3359
+#: git-gui.sh:3416
msgid "Amended Merge Commit Message:"
msgstr "Поправено Ñъобщение при подаване ÑÑŠÑ Ñливане:"
-#: git-gui.sh:3360
+#: git-gui.sh:3417
msgid "Merge Commit Message:"
msgstr "Съобщение при подаване ÑÑŠÑ Ñливане:"
-#: git-gui.sh:3361
+#: git-gui.sh:3418
msgid "Commit Message:"
msgstr "Съобщение при подаване:"
-#: git-gui.sh:3415 git-gui.sh:3570 lib/console.tcl:73
+#: git-gui.sh:3477 git-gui.sh:3641 lib/console.tcl:73
msgid "Copy All"
msgstr "Копиране на вÑичко"
-#: git-gui.sh:3439 lib/blame.tcl:105
+#: git-gui.sh:3501 lib/blame.tcl:106
msgid "File:"
msgstr "Файл:"
-#: git-gui.sh:3558
+#: git-gui.sh:3549 lib/choose_repository.tcl:1100
+msgid "Open"
+msgstr "ОтварÑне"
+
+#: git-gui.sh:3629
msgid "Refresh"
msgstr "ОбновÑване"
-#: git-gui.sh:3579
+#: git-gui.sh:3650
msgid "Decrease Font Size"
-msgstr "По-едър шрифт"
+msgstr "По-дребен шрифт"
-#: git-gui.sh:3583
+#: git-gui.sh:3654
msgid "Increase Font Size"
-msgstr "По-дребен шрифт"
+msgstr "По-едър шрифт"
-#: git-gui.sh:3591 lib/blame.tcl:294
+#: git-gui.sh:3662 lib/blame.tcl:296
msgid "Encoding"
msgstr "Кодиране"
-#: git-gui.sh:3602
+#: git-gui.sh:3673
msgid "Apply/Reverse Hunk"
msgstr "Прилагане/връщане на парче"
-#: git-gui.sh:3607
+#: git-gui.sh:3678
msgid "Apply/Reverse Line"
msgstr "Прилагане/връщане на ред"
-#: git-gui.sh:3626
+#: git-gui.sh:3684 git-gui.sh:3794 git-gui.sh:3805
+msgid "Revert Hunk"
+msgstr "Връщане на парче"
+
+#: git-gui.sh:3689 git-gui.sh:3801 git-gui.sh:3812
+msgid "Revert Line"
+msgstr "Връщане на ред"
+
+#: git-gui.sh:3694 git-gui.sh:3791
+msgid "Undo Last Revert"
+msgstr "ОтмÑна на поÑледното връщане"
+
+#: git-gui.sh:3713
msgid "Run Merge Tool"
msgstr "Изпълнение на програмата за Ñливане"
-#: git-gui.sh:3631
+#: git-gui.sh:3718
msgid "Use Remote Version"
msgstr "ВерÑÐ¸Ñ Ð¾Ñ‚ отдалеченото хранилище"
-#: git-gui.sh:3635
+#: git-gui.sh:3722
msgid "Use Local Version"
msgstr "Локална верÑиÑ"
-#: git-gui.sh:3639
+#: git-gui.sh:3726
msgid "Revert To Base"
msgstr "Връщане към родителÑката верÑиÑ"
-#: git-gui.sh:3657
+#: git-gui.sh:3744
msgid "Visualize These Changes In The Submodule"
msgstr "Визуализиране на промените в подмодула"
-#: git-gui.sh:3661
+#: git-gui.sh:3748
msgid "Visualize Current Branch History In The Submodule"
msgstr "Ð’Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° иÑториÑта на Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ ÐºÐ»Ð¾Ð½ в иÑториÑта за подмодула"
-#: git-gui.sh:3665
+#: git-gui.sh:3752
msgid "Visualize All Branch History In The Submodule"
msgstr "Ð’Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° иÑториÑта на вÑички клони в иÑториÑта за подмодула"
-#: git-gui.sh:3670
+#: git-gui.sh:3757
msgid "Start git gui In The Submodule"
msgstr "Стартиране на „git gui“ за подмодула"
-#: git-gui.sh:3705
+#: git-gui.sh:3793
msgid "Unstage Hunk From Commit"
msgstr "Изваждане на парчето от подаването"
-#: git-gui.sh:3707
+#: git-gui.sh:3797
msgid "Unstage Lines From Commit"
msgstr "Изваждане на редовете от подаването"
-#: git-gui.sh:3709
+#: git-gui.sh:3798 git-gui.sh:3809
+msgid "Revert Lines"
+msgstr "Връщане на редовете"
+
+#: git-gui.sh:3800
msgid "Unstage Line From Commit"
msgstr "Изваждане на реда от подаването"
-#: git-gui.sh:3712
+#: git-gui.sh:3804
msgid "Stage Hunk For Commit"
msgstr "ДобавÑне на парчето за подаване"
-#: git-gui.sh:3714
+#: git-gui.sh:3808
msgid "Stage Lines For Commit"
msgstr "ДобавÑне на редовете за подаване"
-#: git-gui.sh:3716
+#: git-gui.sh:3811
msgid "Stage Line For Commit"
msgstr "ДобавÑне на реда за подаване"
-#: git-gui.sh:3741
+#: git-gui.sh:3861
msgid "Initializing..."
msgstr "Инициализиране…"
-#: git-gui.sh:3886
+#: git-gui.sh:4017
#, tcl-format
msgid ""
"Possible environment issues exist.\n"
@@ -574,12 +590,12 @@ msgid ""
msgstr ""
"Възможно е да има проблем ÑÑŠÑ Ñредата.\n"
"\n"
-"Ðай-вероÑтно Ñледните променливи нÑма да бъдат\n"
-"взети под внимание от подпроцеÑите на Git\n"
+"Ðай-вероÑтно Ñледните променливи нÑма да Ñе\n"
+"вземат под внимание от подпроцеÑите на Git\n"
"от %s:\n"
"\n"
-#: git-gui.sh:3915
+#: git-gui.sh:4046
msgid ""
"\n"
"This is due to a known issue with the\n"
@@ -589,7 +605,7 @@ msgstr ""
"Това е познат проблем и Ñе дължи на\n"
"верÑиÑта на Tcl включена в Cygwin."
-#: git-gui.sh:3920
+#: git-gui.sh:4051
#, tcl-format
msgid ""
"\n"
@@ -605,341 +621,151 @@ msgstr ""
"е да поÑтавите наÑтройките „user.name“ и\n"
"„user.email“ в Ð»Ð¸Ñ‡Ð½Ð¸Ñ Ñи файл „~/.gitconfig“.\n"
-#: lib/about.tcl:26
-msgid "git-gui - a graphical user interface for Git."
-msgstr "git-gui — графичен Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð·Ð° Git."
-
-#: lib/blame.tcl:73
-#, tcl-format
-msgid "%s (%s): File Viewer"
-msgstr "%s (%s): Преглед на файлове"
-
-#: lib/blame.tcl:79
-msgid "Commit:"
-msgstr "Подаване:"
-
-#: lib/blame.tcl:280
-msgid "Copy Commit"
-msgstr "Копиране на подаване"
-
-#: lib/blame.tcl:284
-msgid "Find Text..."
-msgstr "ТърÑене на текÑт…"
-
-#: lib/blame.tcl:288
-msgid "Goto Line..."
-msgstr "Към ред…"
-
-#: lib/blame.tcl:297
-msgid "Do Full Copy Detection"
-msgstr "Пълно търÑене на копиране"
-
-#: lib/blame.tcl:301
-msgid "Show History Context"
-msgstr "Показване на контекÑта от иÑториÑта"
-
-#: lib/blame.tcl:304
-msgid "Blame Parent Commit"
-msgstr "Ðнотиране на родителÑкото подаване"
-
-#: lib/blame.tcl:466
-#, tcl-format
-msgid "Reading %s..."
-msgstr "Чете Ñе „%s“…"
-
-#: lib/blame.tcl:594
-msgid "Loading copy/move tracking annotations..."
-msgstr "Зареждане на анотациите за проÑледÑване на копирането/премеÑтването…"
-
-#: lib/blame.tcl:614
-msgid "lines annotated"
-msgstr "реда анотирани"
-
-#: lib/blame.tcl:806
-msgid "Loading original location annotations..."
-msgstr "Зареждане на анотациите за първоначалното меÑтоположение…"
-
-#: lib/blame.tcl:809
-msgid "Annotation complete."
-msgstr "Ðнотирането завърши."
-
-#: lib/blame.tcl:839
-msgid "Busy"
-msgstr "ОперациÑта не е завършила"
-
-#: lib/blame.tcl:840
-msgid "Annotation process is already running."
-msgstr "Ð’ момента тече Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð° анотиране."
-
-#: lib/blame.tcl:879
-msgid "Running thorough copy detection..."
-msgstr "ИзпълнÑва Ñе цÑлоÑтен Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð° откриване на копиране…"
-
-#: lib/blame.tcl:947
-msgid "Loading annotation..."
-msgstr "Зареждане на анотации…"
-
-#: lib/blame.tcl:1000
-msgid "Author:"
-msgstr "Ðвтор:"
-
-#: lib/blame.tcl:1004
-msgid "Committer:"
-msgstr "Подал:"
-
-#: lib/blame.tcl:1009
-msgid "Original File:"
-msgstr "Първоначален файл:"
-
-#: lib/blame.tcl:1057
-msgid "Cannot find HEAD commit:"
-msgstr "Подаването за връх „HEAD“ не може да Ñе открие:"
-
-#: lib/blame.tcl:1112
-msgid "Cannot find parent commit:"
-msgstr "РодителÑкото подаване не може да бъде открито"
-
-#: lib/blame.tcl:1127
-msgid "Unable to display parent"
-msgstr "РодителÑÑ‚ не може да бъде показан"
-
-#: lib/blame.tcl:1128 lib/diff.tcl:358
-msgid "Error loading diff:"
-msgstr "Грешка при зареждане на разлика:"
-
-#: lib/blame.tcl:1269
-msgid "Originally By:"
-msgstr "Първоначално от:"
+#: lib/spellcheck.tcl:57
+msgid "Unsupported spell checker"
+msgstr "Тази програма за проверка на правопиÑа не Ñе поддържа"
-#: lib/blame.tcl:1275
-msgid "In File:"
-msgstr "Във файл:"
+#: lib/spellcheck.tcl:65
+msgid "Spell checking is unavailable"
+msgstr "ЛипÑва програма за проверка на правопиÑа"
-#: lib/blame.tcl:1280
-msgid "Copied Or Moved Here By:"
-msgstr "Копирано или премеÑтено тук от:"
+#: lib/spellcheck.tcl:68
+msgid "Invalid spell checking configuration"
+msgstr "Ðеправилни наÑтройки на проверката на правопиÑа"
-#: lib/branch_checkout.tcl:16
+#: lib/spellcheck.tcl:70
#, tcl-format
-msgid "%s (%s): Checkout Branch"
-msgstr "%s (%s): Клон за изтеглÑне"
-
-#: lib/branch_checkout.tcl:21
-msgid "Checkout Branch"
-msgstr "Клон за изтеглÑне"
-
-#: lib/branch_checkout.tcl:26
-msgid "Checkout"
-msgstr "ИзтеглÑне"
+msgid "Reverting dictionary to %s."
+msgstr "Ползване на речник за език „%s“."
-#: lib/branch_checkout.tcl:30 lib/branch_create.tcl:37 lib/branch_delete.tcl:34
-#: lib/branch_rename.tcl:32 lib/browser.tcl:292 lib/checkout_op.tcl:579
-#: lib/choose_font.tcl:45 lib/merge.tcl:178 lib/option.tcl:127
-#: lib/remote_add.tcl:34 lib/remote_branch_delete.tcl:43 lib/tools_dlg.tcl:41
-#: lib/tools_dlg.tcl:202 lib/tools_dlg.tcl:345 lib/transport.tcl:141
-msgid "Cancel"
-msgstr "Отказване"
+#: lib/spellcheck.tcl:73
+msgid "Spell checker silently failed on startup"
+msgstr "Програмата за Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸Ñ Ð´Ð°Ð¶Ðµ не Ñтартира уÑпешно."
-#: lib/branch_checkout.tcl:35 lib/browser.tcl:297 lib/tools_dlg.tcl:321
-msgid "Revision"
-msgstr "ВерÑиÑ"
+#: lib/spellcheck.tcl:80
+msgid "Unrecognized spell checker"
+msgstr "Ðепозната програма за проверка на правопиÑа"
-#: lib/branch_checkout.tcl:39 lib/branch_create.tcl:69 lib/option.tcl:310
-msgid "Options"
-msgstr "Опции"
+#: lib/spellcheck.tcl:186
+msgid "No Suggestions"
+msgstr "ÐÑма предложениÑ"
-#: lib/branch_checkout.tcl:42 lib/branch_create.tcl:92
-msgid "Fetch Tracking Branch"
-msgstr "ИзтеглÑне на промените от ÑÐ»ÐµÐ´ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½"
+#: lib/spellcheck.tcl:388
+msgid "Unexpected EOF from spell checker"
+msgstr "Ðеочакван край на файл от програмата за проверка на правопиÑа"
-#: lib/branch_checkout.tcl:47
-msgid "Detach From Local Branch"
-msgstr "Изтриване от Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸Ñ ÐºÐ»Ð¾Ð½"
+#: lib/spellcheck.tcl:392
+msgid "Spell Checker Failed"
+msgstr "Грешка в програмата за проверка на правопиÑа"
-#: lib/branch_create.tcl:23
+#: lib/transport.tcl:6 lib/remote_add.tcl:132
#, tcl-format
-msgid "%s (%s): Create Branch"
-msgstr "%s (%s): Създаване на клон"
-
-#: lib/branch_create.tcl:28
-msgid "Create New Branch"
-msgstr "Създаване на нов клон"
-
-#: lib/branch_create.tcl:33 lib/choose_repository.tcl:407
-msgid "Create"
-msgstr "Създаване"
-
-#: lib/branch_create.tcl:42
-msgid "Branch Name"
-msgstr "Име на клона"
-
-#: lib/branch_create.tcl:44 lib/remote_add.tcl:41 lib/tools_dlg.tcl:51
-msgid "Name:"
-msgstr "Име:"
-
-#: lib/branch_create.tcl:57
-msgid "Match Tracking Branch Name"
-msgstr "Съвпадане по името на ÑÐ»ÐµÐ´ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½"
-
-#: lib/branch_create.tcl:66
-msgid "Starting Revision"
-msgstr "Ðачална верÑиÑ"
-
-#: lib/branch_create.tcl:72
-msgid "Update Existing Branch:"
-msgstr "ОбновÑване на ÑъщеÑтвуващ клон:"
-
-#: lib/branch_create.tcl:75
-msgid "No"
-msgstr "Ðе"
-
-#: lib/branch_create.tcl:80
-msgid "Fast Forward Only"
-msgstr "Само тривиално превъртащо Ñливане"
-
-#: lib/branch_create.tcl:85 lib/checkout_op.tcl:571
-msgid "Reset"
-msgstr "Отначало"
-
-#: lib/branch_create.tcl:97
-msgid "Checkout After Creation"
-msgstr "Преминаване към клона Ñлед Ñъздаването му"
-
-#: lib/branch_create.tcl:132
-msgid "Please select a tracking branch."
-msgstr "Изберете клон за Ñледени."
+msgid "fetch %s"
+msgstr "доÑтавÑне на „%s“"
-#: lib/branch_create.tcl:141
+#: lib/transport.tcl:7
#, tcl-format
-msgid "Tracking branch %s is not a branch in the remote repository."
-msgstr "СледÑщиÑÑ‚ клон — „%s“, не ÑъщеÑтвува в отдалеченото хранилище."
-
-#: lib/branch_create.tcl:154 lib/branch_rename.tcl:92
-msgid "Please supply a branch name."
-msgstr "Дайте име на клона."
+msgid "Fetching new changes from %s"
+msgstr "ДоÑтавÑне на промените от „%s“"
-#: lib/branch_create.tcl:165 lib/branch_rename.tcl:112
+#: lib/transport.tcl:18
#, tcl-format
-msgid "'%s' is not an acceptable branch name."
-msgstr "„%s“ не може да Ñе използва за име на клон."
+msgid "remote prune %s"
+msgstr "окаÑтрÑне на ÑледÑщите клони към „%s“"
-#: lib/branch_delete.tcl:16
+#: lib/transport.tcl:19
#, tcl-format
-msgid "%s (%s): Delete Branch"
-msgstr "%s (%s): Изтриване на клон"
-
-#: lib/branch_delete.tcl:21
-msgid "Delete Local Branch"
-msgstr "Изтриване на локален клон"
-
-#: lib/branch_delete.tcl:39
-msgid "Local Branches"
-msgstr "Локални клони"
+msgid "Pruning tracking branches deleted from %s"
+msgstr "ОкаÑтрÑне на ÑледÑщите клони на изтритите клони от „%s“"
-#: lib/branch_delete.tcl:51
-msgid "Delete Only If Merged Into"
-msgstr "Изтриване, Ñамо ако промените Ñа Ñлети и другаде"
+#: lib/transport.tcl:25
+msgid "fetch all remotes"
+msgstr "доÑтавÑне от вÑички отдалечени"
-#: lib/branch_delete.tcl:53 lib/remote_branch_delete.tcl:120
-msgid "Always (Do not perform merge checks)"
-msgstr "Винаги (без проверка за Ñливане)"
+#: lib/transport.tcl:26
+msgid "Fetching new changes from all remotes"
+msgstr "ДоÑтавÑне на промените от вÑички отдалечени хранилища"
-#: lib/branch_delete.tcl:103
-#, tcl-format
-msgid "The following branches are not completely merged into %s:"
-msgstr "Ðе вÑички промени в клоните Ñа Ñлети в „%s“:"
+#: lib/transport.tcl:40
+msgid "remote prune all remotes"
+msgstr "окаÑтрÑне на ÑледÑщите изтрити"
-#: lib/branch_delete.tcl:115 lib/remote_branch_delete.tcl:218
-msgid ""
-"Recovering deleted branches is difficult.\n"
-"\n"
-"Delete the selected branches?"
+#: lib/transport.tcl:41
+msgid "Pruning tracking branches deleted from all remotes"
msgstr ""
-"ВъзÑтановÑването на изтрити клони може да е трудно.\n"
-"\n"
-"Сигурни ли Ñте, че иÑкате да триете?"
+"ОкаÑтрÑне на ÑледÑщите клони на изтритите клони от вÑички отдалечени "
+"хранилища"
-#: lib/branch_delete.tcl:131
+#: lib/transport.tcl:54 lib/transport.tcl:92 lib/transport.tcl:110
+#: lib/remote_add.tcl:162
#, tcl-format
-msgid " - %s:"
-msgstr " — „%s:“"
+msgid "push %s"
+msgstr "изтлаÑкване на „%s“"
-#: lib/branch_delete.tcl:141
+#: lib/transport.tcl:55
#, tcl-format
-msgid ""
-"Failed to delete branches:\n"
-"%s"
-msgstr ""
-"ÐеуÑпешно триене на клони:\n"
-"%s"
+msgid "Pushing changes to %s"
+msgstr "ИзтлаÑкване на промените към „%s“"
-#: lib/branch_rename.tcl:15
+#: lib/transport.tcl:93
#, tcl-format
-msgid "%s (%s): Rename Branch"
-msgstr "%s (%s): Преименуване на клон"
+msgid "Mirroring to %s"
+msgstr "ИзтлаÑкване на вÑичко към „%s“"
-#: lib/branch_rename.tcl:23
-msgid "Rename Branch"
-msgstr "Преименуване на клон"
+#: lib/transport.tcl:111
+#, tcl-format
+msgid "Pushing %s %s to %s"
+msgstr "ИзтлаÑкване на %s „%s“ към „%s“"
-#: lib/branch_rename.tcl:28
-msgid "Rename"
-msgstr "Преименуване"
+#: lib/transport.tcl:132
+msgid "Push Branches"
+msgstr "Клони за изтлаÑкване"
-#: lib/branch_rename.tcl:38
-msgid "Branch:"
-msgstr "Клон:"
+#: lib/transport.tcl:141 lib/checkout_op.tcl:580 lib/remote_add.tcl:34
+#: lib/browser.tcl:292 lib/branch_checkout.tcl:30 lib/branch_rename.tcl:32
+#: lib/choose_font.tcl:45 lib/option.tcl:127 lib/tools_dlg.tcl:41
+#: lib/tools_dlg.tcl:202 lib/tools_dlg.tcl:345 lib/remote_branch_delete.tcl:43
+#: lib/branch_create.tcl:37 lib/branch_delete.tcl:34 lib/merge.tcl:178
+msgid "Cancel"
+msgstr "Отказване"
-#: lib/branch_rename.tcl:46
-msgid "New Name:"
-msgstr "Ðово име:"
+#: lib/transport.tcl:147
+msgid "Source Branches"
+msgstr "Клони-източници"
-#: lib/branch_rename.tcl:81
-msgid "Please select a branch to rename."
-msgstr "Изберете клон за преименуване."
+#: lib/transport.tcl:162
+msgid "Destination Repository"
+msgstr "Целево хранилище"
-#: lib/branch_rename.tcl:102 lib/checkout_op.tcl:202
-#, tcl-format
-msgid "Branch '%s' already exists."
-msgstr "Клонът „%s“ вече ÑъщеÑтвува."
+#: lib/transport.tcl:165 lib/remote_branch_delete.tcl:51
+msgid "Remote:"
+msgstr "Отдалечено хранилище:"
-#: lib/branch_rename.tcl:123
-#, tcl-format
-msgid "Failed to rename '%s'."
-msgstr "ÐеуÑпешно преименуване на „%s“."
+#: lib/transport.tcl:187 lib/remote_branch_delete.tcl:72
+msgid "Arbitrary Location:"
+msgstr "Произволно меÑтоположение:"
-#: lib/browser.tcl:17
-msgid "Starting..."
-msgstr "Стартиране…"
+#: lib/transport.tcl:205
+msgid "Transfer Options"
+msgstr "ÐаÑтройки при пренаÑÑнето"
-#: lib/browser.tcl:27
-#, tcl-format
-msgid "%s (%s): File Browser"
-msgstr "%s (%s): Файлов браузър"
+#: lib/transport.tcl:207
+msgid "Force overwrite existing branch (may discard changes)"
+msgstr ""
+"Изрично презапиÑване на ÑъщеÑтвуващ клон (нÑкои промени може да Ñе загубÑÑ‚)"
-#: lib/browser.tcl:132 lib/browser.tcl:149
-#, tcl-format
-msgid "Loading %s..."
-msgstr "Зареждане на „%s“…"
+#: lib/transport.tcl:211
+msgid "Use thin pack (for slow network connections)"
+msgstr "МакÑимална компреÑÐ¸Ñ (за бавни мрежови връзки)"
-#: lib/browser.tcl:193
-msgid "[Up To Parent]"
-msgstr "[Към родителÑ]"
+#: lib/transport.tcl:215
+msgid "Include tags"
+msgstr "Включване на етикетите"
-#: lib/browser.tcl:275
+#: lib/transport.tcl:229
#, tcl-format
-msgid "%s (%s): Browse Branch Files"
-msgstr "%s (%s): Разглеждане на файловете в клона"
-
-#: lib/browser.tcl:282
-msgid "Browse Branch Files"
-msgstr "Разглеждане на файловете в клона"
-
-#: lib/browser.tcl:288 lib/choose_repository.tcl:422
-#: lib/choose_repository.tcl:509 lib/choose_repository.tcl:518
-#: lib/choose_repository.tcl:1074
-msgid "Browse"
-msgstr "Разглеждане"
+msgid "%s (%s): Push"
+msgstr "%s (%s): ИзтлаÑкване"
#: lib/checkout_op.tcl:85
#, tcl-format
@@ -951,8 +777,8 @@ msgstr "ДоÑтавÑне на „%s“ от „%s“"
msgid "fatal: Cannot resolve %s"
msgstr "фатална грешка: „%s“ не може да Ñе открие"
-#: lib/checkout_op.tcl:146 lib/console.tcl:81 lib/database.tcl:30
-#: lib/sshkey.tcl:55
+#: lib/checkout_op.tcl:146 lib/sshkey.tcl:58 lib/console.tcl:81
+#: lib/database.tcl:30
msgid "Close"
msgstr "ЗатварÑне"
@@ -966,6 +792,11 @@ msgstr "Клонът „%s“ не ÑъщеÑтвува."
msgid "Failed to configure simplified git-pull for '%s'."
msgstr "ÐеуÑпешно наÑтройване на опроÑтен git-pull за „%s“."
+#: lib/checkout_op.tcl:202 lib/branch_rename.tcl:102
+#, tcl-format
+msgid "Branch '%s' already exists."
+msgstr "Клонът „%s“ вече ÑъщеÑтвува."
+
#: lib/checkout_op.tcl:229
#, tcl-format
msgid ""
@@ -976,13 +807,13 @@ msgid ""
msgstr ""
"Клонът „%s“ ÑъщеÑтвува.\n"
"\n"
-"Той не може да бъде тривиално ÑлÑÑ‚ до „%s“.\n"
+"Той не може да Ñе Ñлее тривиално до „%s“.\n"
"Ðеобходимо е Ñливане."
#: lib/checkout_op.tcl:243
#, tcl-format
msgid "Merge strategy '%s' not supported."
-msgstr "Ð¡Ñ‚Ñ€Ð°Ñ‚ÐµÐ³Ð¸Ñ Ð·Ð° Ñливане „%s“ не Ñе поддържа."
+msgstr "Ð¡Ñ‚Ñ€Ð°Ñ‚ÐµÐ³Ð¸Ñ Ð·Ð° Ñливане „%s“ не Ñе поддържа."
#: lib/checkout_op.tcl:262
#, tcl-format
@@ -1006,7 +837,7 @@ msgstr ""
"хранилището.\n"
"\n"
"ÐÑкой друг Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð·Ð° Git е променил хранилището междувременно. СъÑтоÑнието "
-"трÑбва да бъде проверено, преди да Ñе премине към нов клон.\n"
+"трÑбва да Ñе провери, преди да Ñе премине към нов клон.\n"
"\n"
"Ðвтоматично ще започне нова проверка.\n"
@@ -1019,22 +850,22 @@ msgstr "Работната Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ñе привежда към „
msgid "files checked out"
msgstr "файла Ñа изтеглени"
-#: lib/checkout_op.tcl:376
+#: lib/checkout_op.tcl:377
#, tcl-format
msgid "Aborted checkout of '%s' (file level merging is required)."
msgstr ""
"ПреуÑтановÑване на изтеглÑнето на „%s“ (необходимо е пофайлово Ñливане)."
-#: lib/checkout_op.tcl:377
+#: lib/checkout_op.tcl:378
msgid "File level merge required."
msgstr "Ðеобходимо е пофайлово Ñливане."
-#: lib/checkout_op.tcl:381
+#: lib/checkout_op.tcl:382
#, tcl-format
msgid "Staying on branch '%s'."
msgstr "ОÑтаване върху клона „%s“."
-#: lib/checkout_op.tcl:452
+#: lib/checkout_op.tcl:453
msgid ""
"You are no longer on a local branch.\n"
"\n"
@@ -1045,31 +876,35 @@ msgstr ""
"\n"
"Ðко иÑкате да Ñте на клон, Ñъздайте базиран на „Това неÑвързано изтеглÑне“."
-#: lib/checkout_op.tcl:503 lib/checkout_op.tcl:507
+#: lib/checkout_op.tcl:504 lib/checkout_op.tcl:508
#, tcl-format
msgid "Checked out '%s'."
msgstr "„%s“ е изтеглен."
-#: lib/checkout_op.tcl:535
+#: lib/checkout_op.tcl:536
#, tcl-format
msgid "Resetting '%s' to '%s' will lose the following commits:"
msgstr ""
"ЗанулÑването на „%s“ към „%s“ ще доведе до загубването на Ñледните подаваниÑ:"
-#: lib/checkout_op.tcl:557
+#: lib/checkout_op.tcl:558
msgid "Recovering lost commits may not be easy."
msgstr "ВъзÑтановÑването на загубените Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ðµ да е трудно."
-#: lib/checkout_op.tcl:562
+#: lib/checkout_op.tcl:563
#, tcl-format
msgid "Reset '%s'?"
msgstr "ЗанулÑване на „%s“?"
-#: lib/checkout_op.tcl:567 lib/merge.tcl:170 lib/tools_dlg.tcl:336
+#: lib/checkout_op.tcl:568 lib/tools_dlg.tcl:336 lib/merge.tcl:170
msgid "Visualize"
msgstr "ВизуализациÑ"
-#: lib/checkout_op.tcl:635
+#: lib/checkout_op.tcl:572 lib/branch_create.tcl:85
+msgid "Reset"
+msgstr "Отначало"
+
+#: lib/checkout_op.tcl:636
#, tcl-format
msgid ""
"Failed to set current branch.\n"
@@ -1087,6 +922,327 @@ msgstr ""
"Това ÑÑŠÑтоÑние е аварийно и не трÑбва да Ñе Ñлучва. Програмата „%s“ ще "
"преуÑтанови работа."
+#: lib/remote_add.tcl:20
+#, tcl-format
+msgid "%s (%s): Add Remote"
+msgstr "%s (%s): ДобавÑне на отдалечено хранилище"
+
+#: lib/remote_add.tcl:25
+msgid "Add New Remote"
+msgstr "ДобавÑне на отдалечено хранилище"
+
+#: lib/remote_add.tcl:30 lib/tools_dlg.tcl:37
+msgid "Add"
+msgstr "ДобавÑне"
+
+#: lib/remote_add.tcl:39
+msgid "Remote Details"
+msgstr "Данни за отдалеченото хранилище"
+
+#: lib/remote_add.tcl:41 lib/tools_dlg.tcl:51 lib/branch_create.tcl:44
+msgid "Name:"
+msgstr "Име:"
+
+#: lib/remote_add.tcl:50
+msgid "Location:"
+msgstr "МеÑтоположение:"
+
+#: lib/remote_add.tcl:60
+msgid "Further Action"
+msgstr "Следващо дейÑтвие"
+
+#: lib/remote_add.tcl:63
+msgid "Fetch Immediately"
+msgstr "Ðезабавно доÑтавÑне"
+
+#: lib/remote_add.tcl:69
+msgid "Initialize Remote Repository and Push"
+msgstr "Инициализиране на отдалеченото хранилище и изтлаÑкване на промените"
+
+#: lib/remote_add.tcl:75
+msgid "Do Nothing Else Now"
+msgstr "Да не Ñе прави нищо"
+
+#: lib/remote_add.tcl:100
+msgid "Please supply a remote name."
+msgstr "Задайте име за отдалеченото хранилище."
+
+#: lib/remote_add.tcl:113
+#, tcl-format
+msgid "'%s' is not an acceptable remote name."
+msgstr "Отдалечено хранилище не може да Ñе казва „%s“."
+
+#: lib/remote_add.tcl:124
+#, tcl-format
+msgid "Failed to add remote '%s' of location '%s'."
+msgstr "ÐеуÑпешно добавÑне на отдалеченото хранилище „%s“ от Ð°Ð´Ñ€ÐµÑ â€ž%s“."
+
+#: lib/remote_add.tcl:133
+#, tcl-format
+msgid "Fetching the %s"
+msgstr "ДоÑтавÑне на „%s“"
+
+#: lib/remote_add.tcl:156
+#, tcl-format
+msgid "Do not know how to initialize repository at location '%s'."
+msgstr "Хранилището Ñ Ð¼ÐµÑтоположение „%s“ не може да Ñе инициализира."
+
+#: lib/remote_add.tcl:163
+#, tcl-format
+msgid "Setting up the %s (at %s)"
+msgstr "ДобавÑне на хранилище „%s“ (Ñ Ð°Ð´Ñ€ÐµÑ â€ž%s“)"
+
+#: lib/browser.tcl:17
+msgid "Starting..."
+msgstr "Стартиране…"
+
+#: lib/browser.tcl:27
+#, tcl-format
+msgid "%s (%s): File Browser"
+msgstr "%s (%s): Файлов браузър"
+
+#: lib/browser.tcl:132 lib/browser.tcl:149
+#, tcl-format
+msgid "Loading %s..."
+msgstr "Зареждане на „%s“…"
+
+#: lib/browser.tcl:193
+msgid "[Up To Parent]"
+msgstr "[Към родителÑ]"
+
+#: lib/browser.tcl:275
+#, tcl-format
+msgid "%s (%s): Browse Branch Files"
+msgstr "%s (%s): Разглеждане на файловете в клона"
+
+#: lib/browser.tcl:282
+msgid "Browse Branch Files"
+msgstr "Разглеждане на файловете в клона"
+
+#: lib/browser.tcl:288 lib/choose_repository.tcl:437
+#: lib/choose_repository.tcl:524 lib/choose_repository.tcl:533
+#: lib/choose_repository.tcl:1115
+msgid "Browse"
+msgstr "Разглеждане"
+
+#: lib/browser.tcl:297 lib/branch_checkout.tcl:35 lib/tools_dlg.tcl:321
+msgid "Revision"
+msgstr "ВерÑиÑ"
+
+#: lib/index.tcl:6
+msgid "Unable to unlock the index."
+msgstr "ИндекÑÑŠÑ‚ не може да Ñе отключи."
+
+#: lib/index.tcl:30
+msgid "Index Error"
+msgstr "Грешка в индекÑа"
+
+#: lib/index.tcl:32
+msgid ""
+"Updating the Git index failed. A rescan will be automatically started to "
+"resynchronize git-gui."
+msgstr ""
+"ÐеуÑпешно обновÑване на индекÑа на Git. Ðвтоматично ще започне нова проверка "
+"за Ñинхронизирането на git-gui."
+
+#: lib/index.tcl:43
+msgid "Continue"
+msgstr "Продължаване"
+
+#: lib/index.tcl:46
+msgid "Unlock Index"
+msgstr "Отключване на индекÑа"
+
+#: lib/index.tcl:77 lib/index.tcl:146 lib/index.tcl:220 lib/index.tcl:587
+#: lib/choose_repository.tcl:999
+msgid "files"
+msgstr "файлове"
+
+#: lib/index.tcl:326
+msgid "Unstaging selected files from commit"
+msgstr "Изваждане на избраните файлове от подаването"
+
+#: lib/index.tcl:330
+#, tcl-format
+msgid "Unstaging %s from commit"
+msgstr "Изваждане на „%s“ от подаването"
+
+#: lib/index.tcl:369
+msgid "Ready to commit."
+msgstr "ГотовноÑÑ‚ за подаване."
+
+#: lib/index.tcl:378
+msgid "Adding selected files"
+msgstr "ДобавÑне на избраните файлове"
+
+#: lib/index.tcl:382
+#, tcl-format
+msgid "Adding %s"
+msgstr "ДобавÑне на „%s“"
+
+#: lib/index.tcl:412
+#, tcl-format
+msgid "Stage %d untracked files?"
+msgstr "Да Ñе добавÑÑ‚ ли %d неÑледени файла към индекÑа?"
+
+#: lib/index.tcl:420
+msgid "Adding all changed files"
+msgstr "ДобавÑне на вÑички променени файлове"
+
+#: lib/index.tcl:503
+#, tcl-format
+msgid "Revert changes in file %s?"
+msgstr "Да Ñе махнат ли промените във файла „%s“?"
+
+#: lib/index.tcl:508
+#, tcl-format
+msgid "Revert changes in these %i files?"
+msgstr "Да Ñе махнат ли промените в тези %i файла?"
+
+#: lib/index.tcl:517
+msgid "Any unstaged changes will be permanently lost by the revert."
+msgstr ""
+"Ð’Ñички промени, които не Ñа били добавени в индекÑа, ще Ñе загубÑÑ‚ "
+"безвъзвратно."
+
+#: lib/index.tcl:520 lib/index.tcl:563
+msgid "Do Nothing"
+msgstr "Ðищо да не Ñе прави"
+
+#: lib/index.tcl:545
+#, tcl-format
+msgid "Delete untracked file %s?"
+msgstr "Да Ñе изтрие ли неÑледениÑÑ‚ файл „%s“?"
+
+#: lib/index.tcl:550
+#, tcl-format
+msgid "Delete these %i untracked files?"
+msgstr "Да Ñе изтриÑÑ‚ ли тези %d неÑледени файла?"
+
+#: lib/index.tcl:560
+msgid "Files will be permanently deleted."
+msgstr "Файловете ще Ñе изтриÑÑ‚ окончателно."
+
+#: lib/index.tcl:564
+msgid "Delete Files"
+msgstr "Изтриване на файлове"
+
+#: lib/index.tcl:586
+msgid "Deleting"
+msgstr "Изтриване"
+
+#: lib/index.tcl:665
+msgid "Encountered errors deleting files:\n"
+msgstr "Грешки при изтриване на файловете:\n"
+
+#: lib/index.tcl:674
+#, tcl-format
+msgid "None of the %d selected files could be deleted."
+msgstr "Ðикой от избраните %d файла не бе изтрит."
+
+#: lib/index.tcl:679
+#, tcl-format
+msgid "%d of the %d selected files could not be deleted."
+msgstr "%d от избраните %d файла не бÑха изтрити."
+
+#: lib/index.tcl:726
+msgid "Reverting selected files"
+msgstr "Махане на промените в избраните файлове"
+
+#: lib/index.tcl:730
+#, tcl-format
+msgid "Reverting %s"
+msgstr "Махане на промените в „%s“"
+
+#: lib/branch_checkout.tcl:16
+#, tcl-format
+msgid "%s (%s): Checkout Branch"
+msgstr "%s (%s): Клон за изтеглÑне"
+
+#: lib/branch_checkout.tcl:21
+msgid "Checkout Branch"
+msgstr "Клон за изтеглÑне"
+
+#: lib/branch_checkout.tcl:26
+msgid "Checkout"
+msgstr "ИзтеглÑне"
+
+#: lib/branch_checkout.tcl:39 lib/option.tcl:310 lib/branch_create.tcl:69
+msgid "Options"
+msgstr "Опции"
+
+#: lib/branch_checkout.tcl:42 lib/branch_create.tcl:92
+msgid "Fetch Tracking Branch"
+msgstr "ИзтеглÑне на промените от ÑÐ»ÐµÐ´ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½"
+
+#: lib/branch_checkout.tcl:47
+msgid "Detach From Local Branch"
+msgstr "Изтриване от Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸Ñ ÐºÐ»Ð¾Ð½"
+
+#: lib/status_bar.tcl:263
+#, tcl-format
+msgid "%s ... %*i of %*i %s (%3i%%)"
+msgstr "%s… %*i от общо %*i %s (%3i%%)"
+
+#: lib/remote.tcl:200
+msgid "Push to"
+msgstr "ИзтлаÑкване към"
+
+#: lib/remote.tcl:218
+msgid "Remove Remote"
+msgstr "Премахване на отдалечено хранилище"
+
+#: lib/remote.tcl:223
+msgid "Prune from"
+msgstr "ОкаÑтрÑне от"
+
+#: lib/remote.tcl:228
+msgid "Fetch from"
+msgstr "ДоÑтавÑне от"
+
+#: lib/remote.tcl:249 lib/remote.tcl:253 lib/remote.tcl:258 lib/remote.tcl:264
+msgid "All"
+msgstr "Ð’Ñички"
+
+#: lib/branch_rename.tcl:15
+#, tcl-format
+msgid "%s (%s): Rename Branch"
+msgstr "%s (%s): Преименуване на клон"
+
+#: lib/branch_rename.tcl:23
+msgid "Rename Branch"
+msgstr "Преименуване на клон"
+
+#: lib/branch_rename.tcl:28
+msgid "Rename"
+msgstr "Преименуване"
+
+#: lib/branch_rename.tcl:38
+msgid "Branch:"
+msgstr "Клон:"
+
+#: lib/branch_rename.tcl:46
+msgid "New Name:"
+msgstr "Ðово име:"
+
+#: lib/branch_rename.tcl:81
+msgid "Please select a branch to rename."
+msgstr "Изберете клон за преименуване."
+
+#: lib/branch_rename.tcl:92 lib/branch_create.tcl:154
+msgid "Please supply a branch name."
+msgstr "Дайте име на клона."
+
+#: lib/branch_rename.tcl:112 lib/branch_create.tcl:165
+#, tcl-format
+msgid "'%s' is not an acceptable branch name."
+msgstr "„%s“ не може да Ñе използва за име на клон."
+
+#: lib/branch_rename.tcl:123
+#, tcl-format
+msgid "Failed to rename '%s'."
+msgstr "ÐеуÑпешно преименуване на „%s“."
+
#: lib/choose_font.tcl:41
msgid "Select"
msgstr "Избор"
@@ -1111,251 +1267,1099 @@ msgstr ""
"Това е примерен текÑÑ‚.\n"
"Ðко ви хареÑва как изглежда, изберете шрифта."
-#: lib/choose_repository.tcl:33
+#: lib/option.tcl:11
+#, tcl-format
+msgid "Invalid global encoding '%s'"
+msgstr "Ðеправилно глобално кодиране „%s“"
+
+#: lib/option.tcl:19
+#, tcl-format
+msgid "Invalid repo encoding '%s'"
+msgstr "Ðеправилно кодиране „%s“ на хранилището"
+
+#: lib/option.tcl:119
+msgid "Restore Defaults"
+msgstr "Стандартни наÑтройки"
+
+#: lib/option.tcl:123
+msgid "Save"
+msgstr "Запазване"
+
+#: lib/option.tcl:133
+#, tcl-format
+msgid "%s Repository"
+msgstr "Хранилище „%s“"
+
+#: lib/option.tcl:134
+msgid "Global (All Repositories)"
+msgstr "Глобално (за вÑички хранилища)"
+
+#: lib/option.tcl:140
+msgid "User Name"
+msgstr "ПотребителÑко име"
+
+#: lib/option.tcl:141
+msgid "Email Address"
+msgstr "ÐÐ´Ñ€ÐµÑ Ð½Ð° е-поща"
+
+#: lib/option.tcl:143
+msgid "Summarize Merge Commits"
+msgstr "Обобщаване на подаваниÑта при Ñливане"
+
+#: lib/option.tcl:144
+msgid "Merge Verbosity"
+msgstr "ПодробноÑти при ÑливаниÑта"
+
+#: lib/option.tcl:145
+msgid "Show Diffstat After Merge"
+msgstr "Извеждане на ÑтатиÑтика Ñлед ÑливаниÑта"
+
+#: lib/option.tcl:146
+msgid "Use Merge Tool"
+msgstr "Използване на програма за Ñливане"
+
+#: lib/option.tcl:148
+msgid "Trust File Modification Timestamps"
+msgstr "Доверие във времето на промÑна на файловете"
+
+#: lib/option.tcl:149
+msgid "Prune Tracking Branches During Fetch"
+msgstr "ОкаÑтрÑне на ÑледÑщите клонове при доÑтавÑне"
+
+#: lib/option.tcl:150
+msgid "Match Tracking Branches"
+msgstr "ÐапаÑване на ÑледÑщите клонове"
+
+#: lib/option.tcl:151
+msgid "Use Textconv For Diffs and Blames"
+msgstr "Използване на „textconv“ за разликите и анотирането"
+
+#: lib/option.tcl:152
+msgid "Blame Copy Only On Changed Files"
+msgstr "Ðнотиране на копието Ñамо по променените файлове"
+
+#: lib/option.tcl:153
+msgid "Maximum Length of Recent Repositories List"
+msgstr "МакÑимален брой на ÑпиÑъка „Скоро ползвани“ хранилища"
+
+#: lib/option.tcl:154
+msgid "Minimum Letters To Blame Copy On"
+msgstr "Минимален брой знаци за анотиране на копието"
+
+#: lib/option.tcl:155
+msgid "Blame History Context Radius (days)"
+msgstr "ИÑторичеÑки обхват за анотиране в дни"
+
+#: lib/option.tcl:156
+msgid "Number of Diff Context Lines"
+msgstr "Брой редове за контекÑта на разликите"
+
+#: lib/option.tcl:157
+msgid "Additional Diff Parameters"
+msgstr "Ðргументи към командата за разликите"
+
+#: lib/option.tcl:158
+msgid "Commit Message Text Width"
+msgstr "Широчина на текÑта на Ñъобщението при подаване"
+
+#: lib/option.tcl:159
+msgid "New Branch Name Template"
+msgstr "Шаблон за името на новите клони"
+
+#: lib/option.tcl:160
+msgid "Default File Contents Encoding"
+msgstr "Кодиране на файловете"
+
+#: lib/option.tcl:161
+msgid "Warn before committing to a detached head"
+msgstr "Предупреждаване при подаване към неÑвързан указател"
+
+#: lib/option.tcl:162
+msgid "Staging of untracked files"
+msgstr "ДобавÑне на неÑледените файлове към индекÑа"
+
+#: lib/option.tcl:163
+msgid "Show untracked files"
+msgstr "Показване на неÑледените файлове"
+
+#: lib/option.tcl:164
+msgid "Tab spacing"
+msgstr "Ширина на табулациÑта"
+
+#: lib/option.tcl:182 lib/option.tcl:197 lib/option.tcl:220 lib/option.tcl:282
+#: lib/database.tcl:57
+#, tcl-format
+msgid "%s:"
+msgstr "%s:"
+
+#: lib/option.tcl:210
+msgid "Change"
+msgstr "СмÑна"
+
+#: lib/option.tcl:254
+msgid "Spelling Dictionary:"
+msgstr "ПравопиÑен речник:"
+
+#: lib/option.tcl:284
+msgid "Change Font"
+msgstr "СмÑна на шрифта"
+
+#: lib/option.tcl:288
+#, tcl-format
+msgid "Choose %s"
+msgstr "Избор на „%s“"
+
+#: lib/option.tcl:294
+msgid "pt."
+msgstr "тчк."
+
+#: lib/option.tcl:308
+msgid "Preferences"
+msgstr "ÐаÑтройки"
+
+#: lib/option.tcl:345
+msgid "Failed to completely save options:"
+msgstr "ÐеуÑпешно запазване на наÑтройките:"
+
+#: lib/encoding.tcl:443
+msgid "Default"
+msgstr "Стандартното"
+
+#: lib/encoding.tcl:448
+#, tcl-format
+msgid "System (%s)"
+msgstr "СиÑтемното (%s)"
+
+#: lib/encoding.tcl:459 lib/encoding.tcl:465
+msgid "Other"
+msgstr "Друго"
+
+#: lib/tools.tcl:76
+#, tcl-format
+msgid "Running %s requires a selected file."
+msgstr "За изпълнението на „%s“ трÑбва да изберете файл."
+
+#: lib/tools.tcl:92
+#, tcl-format
+msgid "Are you sure you want to run %1$s on file \"%2$s\"?"
+msgstr "Сигурни ли Ñте, че иÑкате да изпълните „%1$s“ върху файла „%2$s“?"
+
+#: lib/tools.tcl:96
+#, tcl-format
+msgid "Are you sure you want to run %s?"
+msgstr "Сигурни ли Ñте, че иÑкате да изпълните „%s“?"
+
+#: lib/tools.tcl:118
+#, tcl-format
+msgid "Tool: %s"
+msgstr "Команда: %s"
+
+#: lib/tools.tcl:119
+#, tcl-format
+msgid "Running: %s"
+msgstr "Изпълнение: %s"
+
+#: lib/tools.tcl:158
+#, tcl-format
+msgid "Tool completed successfully: %s"
+msgstr "Командата завърши уÑпешно: %s"
+
+#: lib/tools.tcl:160
+#, tcl-format
+msgid "Tool failed: %s"
+msgstr "Командата върна грешка: %s"
+
+#: lib/mergetool.tcl:8
+msgid "Force resolution to the base version?"
+msgstr "Да Ñе използва базовата верÑиÑ"
+
+#: lib/mergetool.tcl:9
+msgid "Force resolution to this branch?"
+msgstr "Да Ñе използва верÑиÑта от този клон"
+
+#: lib/mergetool.tcl:10
+msgid "Force resolution to the other branch?"
+msgstr "Да Ñе използва верÑиÑта от Ð´Ñ€ÑƒÐ³Ð¸Ñ ÐºÐ»Ð¾Ð½"
+
+#: lib/mergetool.tcl:14
+#, tcl-format
+msgid ""
+"Note that the diff shows only conflicting changes.\n"
+"\n"
+"%s will be overwritten.\n"
+"\n"
+"This operation can be undone only by restarting the merge."
+msgstr ""
+"Разликата показва Ñамо разликите Ñ ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚.\n"
+"\n"
+"Файлът „%s“ ще Ñе презапише.\n"
+"\n"
+"Тази Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¼Ð¾Ð¶Ðµ да Ñе отмени Ñамо чрез започване на Ñливането наново."
+
+#: lib/mergetool.tcl:45
+#, tcl-format
+msgid "File %s seems to have unresolved conflicts, still stage?"
+msgstr ""
+"Изглежда, че вÑе още има некоригирани конфликти във файла „%s“. Да Ñе добави "
+"ли файлът към индекÑа?"
+
+#: lib/mergetool.tcl:60
+#, tcl-format
+msgid "Adding resolution for %s"
+msgstr "ДобавÑне на ÐºÐ¾Ñ€ÐµÐºÑ†Ð¸Ñ Ð½Ð° конфликтите в „%s“"
+
+#: lib/mergetool.tcl:141
+msgid "Cannot resolve deletion or link conflicts using a tool"
+msgstr ""
+"Конфликтите при Ñимволни връзки или изтриване не може да Ñе коригират Ñ "
+"външна програма."
+
+#: lib/mergetool.tcl:146
+msgid "Conflict file does not exist"
+msgstr "Файлът, в който е конфликтът, не ÑъщеÑтвува"
+
+#: lib/mergetool.tcl:246
+#, tcl-format
+msgid "Not a GUI merge tool: '%s'"
+msgstr "Това не е графична програма за Ñливане: „%s“"
+
+#: lib/mergetool.tcl:275
+#, tcl-format
+msgid "Unsupported merge tool '%s'"
+msgstr "Ðеподдържана програма за Ñливане: „%s“"
+
+#: lib/mergetool.tcl:310
+msgid "Merge tool is already running, terminate it?"
+msgstr "Програмата за Ñливане вече е Ñтартирана. Да Ñе изключи ли?"
+
+#: lib/mergetool.tcl:330
+#, tcl-format
+msgid ""
+"Error retrieving versions:\n"
+"%s"
+msgstr ""
+"Грешка при изтеглÑнето на верÑии:\n"
+"%s"
+
+#: lib/mergetool.tcl:350
+#, tcl-format
+msgid ""
+"Could not start the merge tool:\n"
+"\n"
+"%s"
+msgstr ""
+"Програмата за Ñливане не може да Ñе Ñтартира:\n"
+"\n"
+"%s"
+
+#: lib/mergetool.tcl:354
+msgid "Running merge tool..."
+msgstr "Стартиране на програмата за Ñливане…"
+
+#: lib/mergetool.tcl:382 lib/mergetool.tcl:390
+msgid "Merge tool failed."
+msgstr "Грешка в програмата за Ñливане."
+
+#: lib/tools_dlg.tcl:22
+#, tcl-format
+msgid "%s (%s): Add Tool"
+msgstr "%s (%s): ДобавÑне на команда"
+
+#: lib/tools_dlg.tcl:28
+msgid "Add New Tool Command"
+msgstr "ДобавÑне на команда"
+
+#: lib/tools_dlg.tcl:34
+msgid "Add globally"
+msgstr "Глобално добавÑне"
+
+#: lib/tools_dlg.tcl:46
+msgid "Tool Details"
+msgstr "ПодробноÑти за командата"
+
+#: lib/tools_dlg.tcl:49
+msgid "Use '/' separators to create a submenu tree:"
+msgstr "За Ñъздаване на подменюта използвайте знака „/“ за разделител:"
+
+#: lib/tools_dlg.tcl:60
+msgid "Command:"
+msgstr "Команда:"
+
+#: lib/tools_dlg.tcl:71
+msgid "Show a dialog before running"
+msgstr "Преди изпълнение да Ñе извежда диалогов прозорец"
+
+#: lib/tools_dlg.tcl:77
+msgid "Ask the user to select a revision (sets $REVISION)"
+msgstr "ПотребителÑÑ‚ да укаже верÑÐ¸Ñ (задаване на променливата $REVISION)"
+
+#: lib/tools_dlg.tcl:82
+msgid "Ask the user for additional arguments (sets $ARGS)"
+msgstr ""
+"ПотребителÑÑ‚ да укаже допълнителни аргументи (задаване на променливата $ARGS)"
+
+#: lib/tools_dlg.tcl:89
+msgid "Don't show the command output window"
+msgstr "Без показване на прозорец Ñ Ð¸Ð·Ñ…Ð¾Ð´Ð° от командата"
+
+#: lib/tools_dlg.tcl:94
+msgid "Run only if a diff is selected ($FILENAME not empty)"
+msgstr ""
+"Стартиране Ñамо Ñлед избор на разлика (променливата $FILENAME не е празна)"
+
+#: lib/tools_dlg.tcl:118
+msgid "Please supply a name for the tool."
+msgstr "Задайте име за командата."
+
+#: lib/tools_dlg.tcl:126
+#, tcl-format
+msgid "Tool '%s' already exists."
+msgstr "Командата „%s“ вече ÑъщеÑтвува."
+
+#: lib/tools_dlg.tcl:148
+#, tcl-format
+msgid ""
+"Could not add tool:\n"
+"%s"
+msgstr ""
+"Командата не може да Ñе добави:\n"
+"%s"
+
+#: lib/tools_dlg.tcl:187
+#, tcl-format
+msgid "%s (%s): Remove Tool"
+msgstr "%s (%s): Премахване на команда"
+
+#: lib/tools_dlg.tcl:193
+msgid "Remove Tool Commands"
+msgstr "Премахване на команди"
+
+#: lib/tools_dlg.tcl:198
+msgid "Remove"
+msgstr "Премахване"
+
+#: lib/tools_dlg.tcl:231
+msgid "(Blue denotes repository-local tools)"
+msgstr "(командите към локалното хранилище Ñа обозначени в Ñиньо)"
+
+#: lib/tools_dlg.tcl:283
+#, tcl-format
+msgid "%s (%s):"
+msgstr "%s (%s):"
+
+#: lib/tools_dlg.tcl:292
+#, tcl-format
+msgid "Run Command: %s"
+msgstr "Изпълнение на командата „%s“"
+
+#: lib/tools_dlg.tcl:306
+msgid "Arguments"
+msgstr "Ðргументи"
+
+#: lib/tools_dlg.tcl:341
+msgid "OK"
+msgstr "Добре"
+
+#: lib/search.tcl:48
+msgid "Find:"
+msgstr "ТърÑене:"
+
+#: lib/search.tcl:50
+msgid "Next"
+msgstr "Следваща поÑва"
+
+#: lib/search.tcl:51
+msgid "Prev"
+msgstr "Предишна поÑва"
+
+#: lib/search.tcl:52
+msgid "RegExp"
+msgstr "РегИзр"
+
+#: lib/search.tcl:54
+msgid "Case"
+msgstr "Главни/Малки"
+
+#: lib/shortcut.tcl:8 lib/shortcut.tcl:43 lib/shortcut.tcl:75
+#, tcl-format
+msgid "%s (%s): Create Desktop Icon"
+msgstr "%s (%s): ДобавÑне на икона на Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ Ð¿Ð»Ð¾Ñ‚"
+
+#: lib/shortcut.tcl:24 lib/shortcut.tcl:65
+msgid "Cannot write shortcut:"
+msgstr "Клавишната ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ð½Ðµ може да Ñе запази:"
+
+#: lib/shortcut.tcl:140
+msgid "Cannot write icon:"
+msgstr "Иконата не може да Ñе запази:"
+
+#: lib/remote_branch_delete.tcl:29
+#, tcl-format
+msgid "%s (%s): Delete Branch Remotely"
+msgstr "%s (%s): Изтриване на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½"
+
+#: lib/remote_branch_delete.tcl:34
+msgid "Delete Branch Remotely"
+msgstr "Изтриване на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½"
+
+#: lib/remote_branch_delete.tcl:48
+msgid "From Repository"
+msgstr "От хранилище"
+
+#: lib/remote_branch_delete.tcl:88
+msgid "Branches"
+msgstr "Клони"
+
+#: lib/remote_branch_delete.tcl:110
+msgid "Delete Only If"
+msgstr "Изтриване, Ñамо ако"
+
+#: lib/remote_branch_delete.tcl:112
+msgid "Merged Into:"
+msgstr "СлÑÑ‚ в:"
+
+#: lib/remote_branch_delete.tcl:120 lib/branch_delete.tcl:53
+msgid "Always (Do not perform merge checks)"
+msgstr "Винаги (без проверка за Ñливане)"
+
+#: lib/remote_branch_delete.tcl:153
+msgid "A branch is required for 'Merged Into'."
+msgstr "За данните „СлÑÑ‚ в“ е необходимо да зададете клон."
+
+#: lib/remote_branch_delete.tcl:185
+#, tcl-format
+msgid ""
+"The following branches are not completely merged into %s:\n"
+"\n"
+" - %s"
+msgstr ""
+"Следните клони не Ñа Ñлети напълно в „%s“:\n"
+"\n"
+" â— %s"
+
+#: lib/remote_branch_delete.tcl:190
+#, tcl-format
+msgid ""
+"One or more of the merge tests failed because you have not fetched the "
+"necessary commits. Try fetching from %s first."
+msgstr ""
+"Поне една от пробите за Ñливане е неуÑпешна, защото не Ñте доÑтавили вÑички "
+"необходими подаваниÑ. Пробвайте първо да доÑтавите подаваниÑта от „%s“."
+
+#: lib/remote_branch_delete.tcl:208
+msgid "Please select one or more branches to delete."
+msgstr "Изберете поне един клон за изтриване."
+
+#: lib/remote_branch_delete.tcl:218 lib/branch_delete.tcl:115
+msgid ""
+"Recovering deleted branches is difficult.\n"
+"\n"
+"Delete the selected branches?"
+msgstr ""
+"ВъзÑтановÑването на изтрити клони може да е трудно.\n"
+"\n"
+"Сигурни ли Ñте, че иÑкате да триете?"
+
+#: lib/remote_branch_delete.tcl:227
+#, tcl-format
+msgid "Deleting branches from %s"
+msgstr "Изтриване на клони от „%s“"
+
+#: lib/remote_branch_delete.tcl:300
+msgid "No repository selected."
+msgstr "Ðе е избрано хранилище."
+
+#: lib/remote_branch_delete.tcl:305
+#, tcl-format
+msgid "Scanning %s..."
+msgstr "ПретърÑване на „%s“…"
+
+#: lib/choose_repository.tcl:45
msgid "Git Gui"
msgstr "ГПИ на Git"
-#: lib/choose_repository.tcl:92 lib/choose_repository.tcl:412
+#: lib/choose_repository.tcl:104 lib/choose_repository.tcl:427
msgid "Create New Repository"
msgstr "Създаване на ново хранилище"
-#: lib/choose_repository.tcl:98
+#: lib/choose_repository.tcl:110
msgid "New..."
msgstr "Ðово…"
-#: lib/choose_repository.tcl:105 lib/choose_repository.tcl:496
+#: lib/choose_repository.tcl:117 lib/choose_repository.tcl:511
msgid "Clone Existing Repository"
msgstr "Клониране на ÑъщеÑтвуващо хранилище"
-#: lib/choose_repository.tcl:116
+#: lib/choose_repository.tcl:128
msgid "Clone..."
msgstr "Клониране…"
-#: lib/choose_repository.tcl:123 lib/choose_repository.tcl:1064
+#: lib/choose_repository.tcl:135 lib/choose_repository.tcl:1105
msgid "Open Existing Repository"
msgstr "ОтварÑне на ÑъщеÑтвуващо хранилище"
-#: lib/choose_repository.tcl:129
+#: lib/choose_repository.tcl:141
msgid "Open..."
msgstr "ОтварÑне…"
-#: lib/choose_repository.tcl:142
+#: lib/choose_repository.tcl:154
msgid "Recent Repositories"
msgstr "Скоро ползвани"
-#: lib/choose_repository.tcl:148
+#: lib/choose_repository.tcl:164
msgid "Open Recent Repository:"
msgstr "ОтварÑне на хранилище ползвано наÑкоро:"
-#: lib/choose_repository.tcl:316 lib/choose_repository.tcl:323
-#: lib/choose_repository.tcl:330
+#: lib/choose_repository.tcl:331 lib/choose_repository.tcl:338
+#: lib/choose_repository.tcl:345
#, tcl-format
msgid "Failed to create repository %s:"
msgstr "ÐеуÑпешно Ñъздаване на хранилището „%s“:"
-#: lib/choose_repository.tcl:417
+#: lib/choose_repository.tcl:422 lib/branch_create.tcl:33
+msgid "Create"
+msgstr "Създаване"
+
+#: lib/choose_repository.tcl:432
msgid "Directory:"
msgstr "ДиректориÑ:"
-#: lib/choose_repository.tcl:447 lib/choose_repository.tcl:573
-#: lib/choose_repository.tcl:1098
+#: lib/choose_repository.tcl:462 lib/choose_repository.tcl:588
+#: lib/choose_repository.tcl:1139
msgid "Git Repository"
msgstr "Хранилище на Git"
-#: lib/choose_repository.tcl:472
+#: lib/choose_repository.tcl:487
#, tcl-format
msgid "Directory %s already exists."
msgstr "Вече ÑъщеÑтвува Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ â€ž%s“."
-#: lib/choose_repository.tcl:476
+#: lib/choose_repository.tcl:491
#, tcl-format
msgid "File %s already exists."
msgstr "Вече ÑъщеÑтвува файл „%s“."
-#: lib/choose_repository.tcl:491
+#: lib/choose_repository.tcl:506
msgid "Clone"
msgstr "Клониране"
-#: lib/choose_repository.tcl:504
+#: lib/choose_repository.tcl:519
msgid "Source Location:"
msgstr "ÐÐ´Ñ€ÐµÑ Ð½Ð° източника:"
-#: lib/choose_repository.tcl:513
+#: lib/choose_repository.tcl:528
msgid "Target Directory:"
msgstr "Целева директориÑ:"
-#: lib/choose_repository.tcl:523
+#: lib/choose_repository.tcl:538
msgid "Clone Type:"
msgstr "Вид клониране:"
-#: lib/choose_repository.tcl:528
+#: lib/choose_repository.tcl:543
msgid "Standard (Fast, Semi-Redundant, Hardlinks)"
msgstr "Стандартно (бързо, чаÑтично ÑподелÑне на файлове, твърди връзки)"
-#: lib/choose_repository.tcl:533
+#: lib/choose_repository.tcl:548
msgid "Full Copy (Slower, Redundant Backup)"
msgstr "Пълно (бавно, пълноценно резервно копие)"
-#: lib/choose_repository.tcl:538
+#: lib/choose_repository.tcl:553
msgid "Shared (Fastest, Not Recommended, No Backup)"
msgstr "Споделено (най-бързо, не Ñе препоръчва, не прави резервно копие)"
-#: lib/choose_repository.tcl:545
+#: lib/choose_repository.tcl:560
msgid "Recursively clone submodules too"
msgstr "РекурÑивно клониране и на подмодулите"
-#: lib/choose_repository.tcl:579 lib/choose_repository.tcl:626
-#: lib/choose_repository.tcl:772 lib/choose_repository.tcl:842
-#: lib/choose_repository.tcl:1104 lib/choose_repository.tcl:1112
+#: lib/choose_repository.tcl:594 lib/choose_repository.tcl:641
+#: lib/choose_repository.tcl:790 lib/choose_repository.tcl:864
+#: lib/choose_repository.tcl:1145 lib/choose_repository.tcl:1153
#, tcl-format
msgid "Not a Git repository: %s"
msgstr "Това не е хранилище на Git: %s"
-#: lib/choose_repository.tcl:615
+#: lib/choose_repository.tcl:630
msgid "Standard only available for local repository."
-msgstr "Само локални хранилища могат да Ñе клонират Ñтандартно"
+msgstr "Само локални хранилища може да Ñе клонират Ñтандартно"
-#: lib/choose_repository.tcl:619
+#: lib/choose_repository.tcl:634
msgid "Shared only available for local repository."
-msgstr "Само локални хранилища могат да Ñе клонират Ñподелено"
+msgstr "Само локални хранилища може да Ñе клонират Ñподелено"
-#: lib/choose_repository.tcl:640
+#: lib/choose_repository.tcl:655
#, tcl-format
msgid "Location %s already exists."
msgstr "МеÑтоположението „%s“ вече ÑъщеÑтвува."
-#: lib/choose_repository.tcl:651
+#: lib/choose_repository.tcl:666
msgid "Failed to configure origin"
msgstr "ÐеуÑпешно наÑтройване на хранилището-източник"
-#: lib/choose_repository.tcl:663
+#: lib/choose_repository.tcl:678
msgid "Counting objects"
msgstr "ПреброÑване на обекти"
-#: lib/choose_repository.tcl:664
+#: lib/choose_repository.tcl:679
msgid "buckets"
msgstr "клетки"
-#: lib/choose_repository.tcl:688
+#: lib/choose_repository.tcl:703
#, tcl-format
msgid "Unable to copy objects/info/alternates: %s"
-msgstr "Обектите/информациÑта/Ñинонимите не могат да бъдат копирани: %s"
+msgstr "Обектите/ИнформациÑта/Синонимите не може да Ñе копират: %s"
-#: lib/choose_repository.tcl:724
+#: lib/choose_repository.tcl:740
#, tcl-format
msgid "Nothing to clone from %s."
msgstr "ÐÑма какво да Ñе клонира от „%s“."
-#: lib/choose_repository.tcl:726 lib/choose_repository.tcl:940
-#: lib/choose_repository.tcl:952
+#: lib/choose_repository.tcl:742 lib/choose_repository.tcl:962
+#: lib/choose_repository.tcl:974
msgid "The 'master' branch has not been initialized."
msgstr "ОÑновниÑÑ‚ клон — „master“ не е инициализиран."
-#: lib/choose_repository.tcl:739
+#: lib/choose_repository.tcl:755
msgid "Hardlinks are unavailable. Falling back to copying."
msgstr "Ðе Ñе поддържат твърди връзки. Преминава Ñе към копиране."
-#: lib/choose_repository.tcl:751
+#: lib/choose_repository.tcl:769
#, tcl-format
msgid "Cloning from %s"
msgstr "Клониране на „%s“"
-#: lib/choose_repository.tcl:782
+#: lib/choose_repository.tcl:800
msgid "Copying objects"
msgstr "Копиране на обекти"
-#: lib/choose_repository.tcl:783
+#: lib/choose_repository.tcl:801
msgid "KiB"
msgstr "KiB"
-#: lib/choose_repository.tcl:807
+#: lib/choose_repository.tcl:825
#, tcl-format
msgid "Unable to copy object: %s"
msgstr "ÐеуÑпешно копиране на обект: %s"
-#: lib/choose_repository.tcl:817
+#: lib/choose_repository.tcl:837
msgid "Linking objects"
msgstr "Създаване на връзки към обектите"
-#: lib/choose_repository.tcl:818
+#: lib/choose_repository.tcl:838
msgid "objects"
msgstr "обекти"
-#: lib/choose_repository.tcl:826
+#: lib/choose_repository.tcl:846
#, tcl-format
msgid "Unable to hardlink object: %s"
msgstr "ÐеуÑпешно Ñъздаване на твърда връзка към обект: %s"
-#: lib/choose_repository.tcl:881
+#: lib/choose_repository.tcl:903
msgid "Cannot fetch branches and objects. See console output for details."
msgstr ""
-"Клоните и обектите не могат да бъдат изтеглени. За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ "
-"погледнете изхода на конзолата."
+"Клоните и обектите не може да Ñе изтеглÑÑ‚. За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð³Ð»ÐµÐ´Ð½ÐµÑ‚Ðµ "
+"изхода на конзолата."
-#: lib/choose_repository.tcl:892
+#: lib/choose_repository.tcl:914
msgid "Cannot fetch tags. See console output for details."
msgstr ""
-"Етикетите не могат да бъдат изтеглени. За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð³Ð»ÐµÐ´Ð½ÐµÑ‚Ðµ "
-"изхода на конзолата."
+"Етикетите не може да Ñе изтеглÑÑ‚. За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð³Ð»ÐµÐ´Ð½ÐµÑ‚Ðµ изхода на "
+"конзолата."
-#: lib/choose_repository.tcl:916
+#: lib/choose_repository.tcl:938
msgid "Cannot determine HEAD. See console output for details."
msgstr ""
-"Върхът „HEAD“ не може да бъде определен. За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð³Ð»ÐµÐ´Ð½ÐµÑ‚Ðµ "
-"изхода на конзолата."
+"Върхът „HEAD“ не може да Ñе определи. За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð³Ð»ÐµÐ´Ð½ÐµÑ‚Ðµ изхода "
+"на конзолата."
-#: lib/choose_repository.tcl:925
+#: lib/choose_repository.tcl:947
#, tcl-format
msgid "Unable to cleanup %s"
-msgstr "„%s“ не може да Ñе зачиÑти"
+msgstr "„%s“ не може да Ñе изчиÑти"
-#: lib/choose_repository.tcl:931
+#: lib/choose_repository.tcl:953
msgid "Clone failed."
msgstr "ÐеуÑпешно клониране."
-#: lib/choose_repository.tcl:938
+#: lib/choose_repository.tcl:960
msgid "No default branch obtained."
msgstr "Ðе е получен клон по подразбиране."
-#: lib/choose_repository.tcl:949
+#: lib/choose_repository.tcl:971
#, tcl-format
msgid "Cannot resolve %s as a commit."
msgstr "ÐÑма подаване отговарÑщо на „%s“."
-#: lib/choose_repository.tcl:961
+#: lib/choose_repository.tcl:998
msgid "Creating working directory"
msgstr "Създаване на работната директориÑ"
-#: lib/choose_repository.tcl:962 lib/index.tcl:70 lib/index.tcl:136
-#: lib/index.tcl:207
-msgid "files"
-msgstr "файлове"
-
-#: lib/choose_repository.tcl:981
-msgid "Cannot clone submodules."
-msgstr "Подмодулите не могат да Ñе клонират."
+#: lib/choose_repository.tcl:1028
+msgid "Initial file checkout failed."
+msgstr "ÐеуÑпешно първоначално изтеглÑне."
-#: lib/choose_repository.tcl:990
+#: lib/choose_repository.tcl:1072
msgid "Cloning submodules"
msgstr "Клониране на подмодули"
-#: lib/choose_repository.tcl:1015
-msgid "Initial file checkout failed."
-msgstr "ÐеуÑпешно първоначално изтеглÑне."
-
-#: lib/choose_repository.tcl:1059
-msgid "Open"
-msgstr "ОтварÑне"
+#: lib/choose_repository.tcl:1087
+msgid "Cannot clone submodules."
+msgstr "Подмодулите не може да Ñе клонират."
-#: lib/choose_repository.tcl:1069
+#: lib/choose_repository.tcl:1110
msgid "Repository:"
msgstr "Хранилище:"
-#: lib/choose_repository.tcl:1118
+#: lib/choose_repository.tcl:1159
#, tcl-format
msgid "Failed to open repository %s:"
msgstr "ÐеуÑпешно отварÑне на хранилището „%s“:"
+#: lib/about.tcl:26
+msgid "git-gui - a graphical user interface for Git."
+msgstr "git-gui — графичен Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð·Ð° Git."
+
+#: lib/blame.tcl:74
+#, tcl-format
+msgid "%s (%s): File Viewer"
+msgstr "%s (%s): Преглед на файлове"
+
+#: lib/blame.tcl:80
+msgid "Commit:"
+msgstr "Подаване:"
+
+#: lib/blame.tcl:282
+msgid "Copy Commit"
+msgstr "Копиране на подаване"
+
+#: lib/blame.tcl:286
+msgid "Find Text..."
+msgstr "ТърÑене на текÑт…"
+
+#: lib/blame.tcl:290
+msgid "Goto Line..."
+msgstr "Към ред…"
+
+#: lib/blame.tcl:299
+msgid "Do Full Copy Detection"
+msgstr "Пълно търÑене на копиране"
+
+#: lib/blame.tcl:303
+msgid "Show History Context"
+msgstr "Показване на контекÑта от иÑториÑта"
+
+#: lib/blame.tcl:306
+msgid "Blame Parent Commit"
+msgstr "Ðнотиране на родителÑкото подаване"
+
+#: lib/blame.tcl:468
+#, tcl-format
+msgid "Reading %s..."
+msgstr "Чете Ñе „%s“…"
+
+#: lib/blame.tcl:596
+msgid "Loading copy/move tracking annotations..."
+msgstr "Зареждане на анотациите за проÑледÑване на копирането/премеÑтването…"
+
+#: lib/blame.tcl:613
+msgid "lines annotated"
+msgstr "реда анотирани"
+
+#: lib/blame.tcl:815
+msgid "Loading original location annotations..."
+msgstr "Зареждане на анотациите за първоначалното меÑтоположение…"
+
+#: lib/blame.tcl:818
+msgid "Annotation complete."
+msgstr "Ðнотирането завърши."
+
+#: lib/blame.tcl:849
+msgid "Busy"
+msgstr "ОперациÑта не е завършила"
+
+#: lib/blame.tcl:850
+msgid "Annotation process is already running."
+msgstr "Ð’ момента тече Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð° анотиране."
+
+#: lib/blame.tcl:889
+msgid "Running thorough copy detection..."
+msgstr "ИзпълнÑва Ñе цÑлоÑтен Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð° откриване на копиране…"
+
+#: lib/blame.tcl:957
+msgid "Loading annotation..."
+msgstr "Зареждане на анотации…"
+
+#: lib/blame.tcl:1010
+msgid "Author:"
+msgstr "Ðвтор:"
+
+#: lib/blame.tcl:1014
+msgid "Committer:"
+msgstr "Подал:"
+
+#: lib/blame.tcl:1019
+msgid "Original File:"
+msgstr "Първоначален файл:"
+
+#: lib/blame.tcl:1067
+msgid "Cannot find HEAD commit:"
+msgstr "Подаването за връх „HEAD“ не може да Ñе открие:"
+
+#: lib/blame.tcl:1122
+msgid "Cannot find parent commit:"
+msgstr "РодителÑкото подаване не може да Ñе открие"
+
+#: lib/blame.tcl:1137
+msgid "Unable to display parent"
+msgstr "РодителÑÑ‚ не може да Ñе покаже"
+
+#: lib/blame.tcl:1138 lib/diff.tcl:345
+msgid "Error loading diff:"
+msgstr "Грешка при зареждане на разлика:"
+
+#: lib/blame.tcl:1279
+msgid "Originally By:"
+msgstr "Първоначално от:"
+
+#: lib/blame.tcl:1285
+msgid "In File:"
+msgstr "Във файл:"
+
+#: lib/blame.tcl:1290
+msgid "Copied Or Moved Here By:"
+msgstr "Копирано или премеÑтено тук от:"
+
+#: lib/diff.tcl:77
+#, tcl-format
+msgid ""
+"No differences detected.\n"
+"\n"
+"%s has no changes.\n"
+"\n"
+"The modification date of this file was updated by another application, but "
+"the content within the file was not changed.\n"
+"\n"
+"A rescan will be automatically started to find other files which may have "
+"the same state."
+msgstr ""
+"Ðе Ñа открити разлики.\n"
+"\n"
+"ÐÑма промени в „%s“.\n"
+"\n"
+"Времето на промÑна на файла е бил зададен от друга програма, но Ñъдържанието "
+"му не е променено.\n"
+"\n"
+"Ðвтоматично ще започне нова проверка дали нÑма други файлове в това "
+"ÑÑŠÑтоÑние."
+
+#: lib/diff.tcl:117
+#, tcl-format
+msgid "Loading diff of %s..."
+msgstr "Зареждане на разликите в „%s“…"
+
+#: lib/diff.tcl:143
+msgid ""
+"LOCAL: deleted\n"
+"REMOTE:\n"
+msgstr ""
+"ЛОКÐЛÐО: изтрит\n"
+"ОТДÐЛЕЧЕÐО:\n"
+
+#: lib/diff.tcl:148
+msgid ""
+"REMOTE: deleted\n"
+"LOCAL:\n"
+msgstr ""
+"ОТДÐЛЕЧЕÐО: изтрит\n"
+"ЛОКÐЛÐО:\n"
+
+#: lib/diff.tcl:155
+msgid "LOCAL:\n"
+msgstr "ЛОКÐЛÐО:\n"
+
+#: lib/diff.tcl:158
+msgid "REMOTE:\n"
+msgstr "ОТДÐЛЕЧЕÐО:\n"
+
+#: lib/diff.tcl:220 lib/diff.tcl:344
+#, tcl-format
+msgid "Unable to display %s"
+msgstr "Файлът „%s“ не може да Ñе покаже"
+
+#: lib/diff.tcl:221
+msgid "Error loading file:"
+msgstr "Грешка при зареждане на файл:"
+
+#: lib/diff.tcl:227
+msgid "Git Repository (subproject)"
+msgstr "Хранилище на Git (подмодул)"
+
+#: lib/diff.tcl:239
+msgid "* Binary file (not showing content)."
+msgstr "◠Двоичен файл (Ñъдържанието не Ñе показва)."
+
+#: lib/diff.tcl:244
+#, tcl-format
+msgid ""
+"* Untracked file is %d bytes.\n"
+"* Showing only first %d bytes.\n"
+msgstr ""
+"â— ÐеÑледениÑÑ‚ файл е %d байта.\n"
+"◠Показват Ñе Ñамо първите %d байта.\n"
+
+#: lib/diff.tcl:250
+#, tcl-format
+msgid ""
+"\n"
+"* Untracked file clipped here by %s.\n"
+"* To see the entire file, use an external editor.\n"
+msgstr ""
+"\n"
+"â— ÐеÑледениÑÑ‚ файл е отрÑзан дотук от програмата „%s“.\n"
+"◠Използвайте външен редактор, за да видите Ñ†ÐµÐ»Ð¸Ñ Ñ„Ð°Ð¹Ð».\n"
+
+#: lib/diff.tcl:583
+msgid "Failed to unstage selected hunk."
+msgstr "Избраното парче не може да Ñе извади от индекÑа."
+
+#: lib/diff.tcl:591
+msgid "Failed to revert selected hunk."
+msgstr "Избраното парче не може да Ñе върне."
+
+#: lib/diff.tcl:594
+msgid "Failed to stage selected hunk."
+msgstr "Избраното парче не може да Ñе добави към индекÑа."
+
+#: lib/diff.tcl:687
+msgid "Failed to unstage selected line."
+msgstr "ИзбраниÑÑ‚ ред не може да Ñе извади от индекÑа."
+
+#: lib/diff.tcl:696
+msgid "Failed to revert selected line."
+msgstr "ИзбраниÑÑ‚ ред не може да Ñе върне."
+
+#: lib/diff.tcl:700
+msgid "Failed to stage selected line."
+msgstr "ИзбраниÑÑ‚ ред не може да Ñе добави към индекÑа."
+
+#: lib/diff.tcl:889
+msgid "Failed to undo last revert."
+msgstr "ÐеуÑпешна отмÑна на поÑледното връщане."
+
+#: lib/sshkey.tcl:34
+msgid "No keys found."
+msgstr "Ðе Ñа открити ключове."
+
+#: lib/sshkey.tcl:37
+#, tcl-format
+msgid "Found a public key in: %s"
+msgstr "Открит е публичен ключ в „%s“"
+
+#: lib/sshkey.tcl:43
+msgid "Generate Key"
+msgstr "Генериране на ключ"
+
+#: lib/sshkey.tcl:61
+msgid "Copy To Clipboard"
+msgstr "Копиране към ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð±ÑƒÑ„ÐµÑ€"
+
+#: lib/sshkey.tcl:75
+msgid "Your OpenSSH Public Key"
+msgstr "ПубличниÑÑ‚ ви ключ за OpenSSH"
+
+#: lib/sshkey.tcl:83
+msgid "Generating..."
+msgstr "Генериране…"
+
+#: lib/sshkey.tcl:89
+#, tcl-format
+msgid ""
+"Could not start ssh-keygen:\n"
+"\n"
+"%s"
+msgstr ""
+"Програмата „ssh-keygen“ не може да Ñе Ñтартира:\n"
+"\n"
+"%s"
+
+#: lib/sshkey.tcl:116
+msgid "Generation failed."
+msgstr "ÐеуÑпешно генериране."
+
+#: lib/sshkey.tcl:123
+msgid "Generation succeeded, but no keys found."
+msgstr "Генерирането завърши уÑпешно, а не Ñа намерени ключове."
+
+#: lib/sshkey.tcl:126
+#, tcl-format
+msgid "Your key is in: %s"
+msgstr "Ключът ви е в „%s“"
+
+#: lib/branch_create.tcl:23
+#, tcl-format
+msgid "%s (%s): Create Branch"
+msgstr "%s (%s): Създаване на клон"
+
+#: lib/branch_create.tcl:28
+msgid "Create New Branch"
+msgstr "Създаване на нов клон"
+
+#: lib/branch_create.tcl:42
+msgid "Branch Name"
+msgstr "Име на клона"
+
+#: lib/branch_create.tcl:57
+msgid "Match Tracking Branch Name"
+msgstr "Съвпадане по името на ÑÐ»ÐµÐ´ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½"
+
+#: lib/branch_create.tcl:66
+msgid "Starting Revision"
+msgstr "Ðачална верÑиÑ"
+
+#: lib/branch_create.tcl:72
+msgid "Update Existing Branch:"
+msgstr "ОбновÑване на ÑъщеÑтвуващ клон:"
+
+#: lib/branch_create.tcl:75
+msgid "No"
+msgstr "Ðе"
+
+#: lib/branch_create.tcl:80
+msgid "Fast Forward Only"
+msgstr "Само тривиално превъртащо Ñливане"
+
+#: lib/branch_create.tcl:97
+msgid "Checkout After Creation"
+msgstr "Преминаване към клона Ñлед Ñъздаването му"
+
+#: lib/branch_create.tcl:132
+msgid "Please select a tracking branch."
+msgstr "Изберете клон за Ñледени."
+
+#: lib/branch_create.tcl:141
+#, tcl-format
+msgid "Tracking branch %s is not a branch in the remote repository."
+msgstr "СледÑщиÑÑ‚ клон — „%s“, не ÑъщеÑтвува в отдалеченото хранилище."
+
+#: lib/console.tcl:59
+msgid "Working... please wait..."
+msgstr "Ð’ момента Ñе извършва дейÑтвие, изчакайте…"
+
+#: lib/console.tcl:186
+msgid "Success"
+msgstr "УÑпех"
+
+#: lib/console.tcl:200
+msgid "Error: Command Failed"
+msgstr "Грешка: неуÑпешно изпълнение на команда"
+
+#: lib/line.tcl:17
+msgid "Goto Line:"
+msgstr "Към ред:"
+
+#: lib/line.tcl:23
+msgid "Go"
+msgstr "Към"
+
#: lib/choose_rev.tcl:52
msgid "This Detached Checkout"
msgstr "Това неÑвързано изтеглÑне"
@@ -1422,24 +2426,24 @@ msgstr ""
"Ð’ момента вÑе още не Ñте завършили Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿Ð¾ Ñливане. Ðе може да поправите "
"предишното подаване, оÑвен ако първо не преуÑтановите текущото Ñливане.\n"
-#: lib/commit.tcl:48
+#: lib/commit.tcl:56
msgid "Error loading commit data for amend:"
msgstr "Грешка при зареждане на данните от подаване, които да Ñе поправÑÑ‚:"
-#: lib/commit.tcl:75
+#: lib/commit.tcl:83
msgid "Unable to obtain your identity:"
-msgstr "ИдентификациÑта ви не може да бъде определена:"
+msgstr "ИдентификациÑта ви не може да Ñе определи:"
-#: lib/commit.tcl:80
+#: lib/commit.tcl:88
msgid "Invalid GIT_COMMITTER_IDENT:"
msgstr "Ðеправилно поле „GIT_COMMITTER_IDENT“:"
-#: lib/commit.tcl:129
+#: lib/commit.tcl:138
#, tcl-format
msgid "warning: Tcl does not support encoding '%s'."
msgstr "предупреждение: Tcl не поддържа кодирането „%s“."
-#: lib/commit.tcl:149
+#: lib/commit.tcl:158
msgid ""
"Last scanned state does not match repository state.\n"
"\n"
@@ -1452,11 +2456,11 @@ msgstr ""
"хранилището.\n"
"\n"
"ÐÑкой друг Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð·Ð° Git е променил хранилището междувременно. СъÑтоÑнието "
-"трÑбва да бъде проверено преди ново подаване.\n"
+"трÑбва да Ñе провери преди ново подаване.\n"
"\n"
"Ðвтоматично ще започне нова проверка.\n"
-#: lib/commit.tcl:173
+#: lib/commit.tcl:182
#, tcl-format
msgid ""
"Unmerged files cannot be committed.\n"
@@ -1464,12 +2468,12 @@ msgid ""
"File %s has merge conflicts. You must resolve them and stage the file "
"before committing.\n"
msgstr ""
-"ÐеÑлетите файлове не могат да бъдат подавани.\n"
+"ÐеÑлетите файлове не може да Ñе подадат.\n"
"\n"
"Във файла „%s“ има конфликти при Ñливане. За да го подадете, трÑбва първо да "
"коригирате конфликтите и да добавите файла към индекÑа за подаване.\n"
-#: lib/commit.tcl:181
+#: lib/commit.tcl:190
#, tcl-format
msgid ""
"Unknown file state %s detected.\n"
@@ -1478,9 +2482,9 @@ msgid ""
msgstr ""
"Ðепознато ÑÑŠÑтоÑние на файл „%s“.\n"
"\n"
-"Файлът „%s“ не може да бъде подаден чрез текущата програма.\n"
+"Файлът „%s“ не може да Ñе подаде чрез текущата програма.\n"
-#: lib/commit.tcl:189
+#: lib/commit.tcl:198
msgid ""
"No changes to commit.\n"
"\n"
@@ -1490,7 +2494,7 @@ msgstr ""
"\n"
"ТрÑбва да добавите поне един файл към индекÑа, за да подадете.\n"
-#: lib/commit.tcl:204
+#: lib/commit.tcl:213
msgid ""
"Please supply a commit message.\n"
"\n"
@@ -1508,15 +2512,15 @@ msgstr ""
"◠Втори ред: празен.\n"
"◠ОÑтаналите редове: опишете защо Ñе налага тази промÑна.\n"
-#: lib/commit.tcl:235
+#: lib/commit.tcl:244
msgid "Calling pre-commit hook..."
msgstr "ИзпълнÑване на куката преди подаване…"
-#: lib/commit.tcl:250
+#: lib/commit.tcl:259
msgid "Commit declined by pre-commit hook."
msgstr "Подаването е отхвърлено от куката преди подаване."
-#: lib/commit.tcl:269
+#: lib/commit.tcl:278
msgid ""
"You are about to commit on a detached head. This is a potentially dangerous "
"thing to do because if you switch to another branch you will lose your "
@@ -1532,32 +2536,32 @@ msgstr ""
" \n"
"Сигурни ли Ñте, че иÑкате да извършите текущото подаване?"
-#: lib/commit.tcl:290
+#: lib/commit.tcl:299
msgid "Calling commit-msg hook..."
msgstr "ИзпълнÑване на куката за Ñъобщението при подаване…"
-#: lib/commit.tcl:305
+#: lib/commit.tcl:314
msgid "Commit declined by commit-msg hook."
msgstr "Подаването е отхвърлено от куката за Ñъобщението при подаване."
-#: lib/commit.tcl:318
+#: lib/commit.tcl:327
msgid "Committing changes..."
msgstr "Подаване на промените…"
-#: lib/commit.tcl:334
+#: lib/commit.tcl:344
msgid "write-tree failed:"
msgstr "неуÑпешно запазване на дървото (write-tree):"
-#: lib/commit.tcl:335 lib/commit.tcl:382 lib/commit.tcl:403
+#: lib/commit.tcl:345 lib/commit.tcl:395 lib/commit.tcl:422
msgid "Commit failed."
msgstr "ÐеуÑпешно подаване."
-#: lib/commit.tcl:352
+#: lib/commit.tcl:362
#, tcl-format
msgid "Commit %s appears to be corrupt"
msgstr "Подаването „%s“ изглежда повредено"
-#: lib/commit.tcl:357
+#: lib/commit.tcl:367
msgid ""
"No changes to commit.\n"
"\n"
@@ -1572,34 +2576,63 @@ msgstr ""
"\n"
"Ðвтоматично ще започне нова проверка.\n"
-#: lib/commit.tcl:364
+#: lib/commit.tcl:374
msgid "No changes to commit."
msgstr "ÐÑма промени за подаване."
-#: lib/commit.tcl:381
+#: lib/commit.tcl:394
msgid "commit-tree failed:"
msgstr "неуÑпешно подаване на дървото (commit-tree):"
-#: lib/commit.tcl:402
+#: lib/commit.tcl:421
msgid "update-ref failed:"
msgstr "неуÑпешно обновÑване на указателите (update-ref):"
-#: lib/commit.tcl:495
+#: lib/commit.tcl:514
#, tcl-format
msgid "Created commit %s: %s"
msgstr "УÑпешно подаване %s: %s"
-#: lib/console.tcl:59
-msgid "Working... please wait..."
-msgstr "Ð’ момента Ñе извършва дейÑтвие, изчакайте…"
+#: lib/branch_delete.tcl:16
+#, tcl-format
+msgid "%s (%s): Delete Branch"
+msgstr "%s (%s): Изтриване на клон"
-#: lib/console.tcl:186
-msgid "Success"
-msgstr "УÑпех"
+#: lib/branch_delete.tcl:21
+msgid "Delete Local Branch"
+msgstr "Изтриване на локален клон"
-#: lib/console.tcl:200
-msgid "Error: Command Failed"
-msgstr "Грешка: неуÑпешно изпълнение на команда"
+#: lib/branch_delete.tcl:39
+msgid "Local Branches"
+msgstr "Локални клони"
+
+#: lib/branch_delete.tcl:51
+msgid "Delete Only If Merged Into"
+msgstr "Изтриване, Ñамо ако промените Ñа Ñлети и другаде"
+
+#: lib/branch_delete.tcl:103
+#, tcl-format
+msgid "The following branches are not completely merged into %s:"
+msgstr "Ðе вÑички промени в клоните Ñа Ñлети в „%s“:"
+
+#: lib/branch_delete.tcl:131
+#, tcl-format
+msgid " - %s:"
+msgstr " — „%s:“"
+
+#: lib/branch_delete.tcl:141
+#, tcl-format
+msgid ""
+"Failed to delete branches:\n"
+"%s"
+msgstr ""
+"ÐеуÑпешно триене на клони:\n"
+"%s"
+
+#: lib/date.tcl:25
+#, tcl-format
+msgid "Invalid date from Git: %s"
+msgstr "Ðеправилни данни от Git: %s"
#: lib/database.tcl:42
msgid "Number of loose objects"
@@ -1629,12 +2662,6 @@ msgstr "Пакетирани обекти за окаÑтрÑне"
msgid "Garbage files"
msgstr "Файлове за боклука"
-#: lib/database.tcl:57 lib/option.tcl:182 lib/option.tcl:197 lib/option.tcl:220
-#: lib/option.tcl:282
-#, tcl-format
-msgid "%s:"
-msgstr "%s:"
-
#: lib/database.tcl:66
#, tcl-format
msgid "%s (%s): Database Statistics"
@@ -1665,129 +2692,6 @@ msgstr ""
"\n"
"Да Ñе започне ли компреÑирането?"
-#: lib/date.tcl:25
-#, tcl-format
-msgid "Invalid date from Git: %s"
-msgstr "Ðеправилни данни от Git: %s"
-
-#: lib/diff.tcl:77
-#, tcl-format
-msgid ""
-"No differences detected.\n"
-"\n"
-"%s has no changes.\n"
-"\n"
-"The modification date of this file was updated by another application, but "
-"the content within the file was not changed.\n"
-"\n"
-"A rescan will be automatically started to find other files which may have "
-"the same state."
-msgstr ""
-"Ðе Ñа открити разлики.\n"
-"\n"
-"ÐÑма промени в „%s“.\n"
-"\n"
-"Времето на промÑна на файла е бил зададен от друга програма, но Ñъдържанието "
-"му не е променено.\n"
-"\n"
-"Ðвтоматично ще започне нова проверка дали нÑма други файлове в това "
-"ÑÑŠÑтоÑние."
-
-#: lib/diff.tcl:117
-#, tcl-format
-msgid "Loading diff of %s..."
-msgstr "Зареждане на разликите в „%s“…"
-
-#: lib/diff.tcl:143
-msgid ""
-"LOCAL: deleted\n"
-"REMOTE:\n"
-msgstr ""
-"ЛОКÐЛÐО: изтрит\n"
-"ОТДÐЛЕЧЕÐО:\n"
-
-#: lib/diff.tcl:148
-msgid ""
-"REMOTE: deleted\n"
-"LOCAL:\n"
-msgstr ""
-"ОТДÐЛЕЧЕÐО: изтрит\n"
-"ЛОКÐЛÐО:\n"
-
-#: lib/diff.tcl:155
-msgid "LOCAL:\n"
-msgstr "ЛОКÐЛÐО:\n"
-
-#: lib/diff.tcl:158
-msgid "REMOTE:\n"
-msgstr "ОТДÐЛЕЧЕÐО:\n"
-
-#: lib/diff.tcl:220 lib/diff.tcl:357
-#, tcl-format
-msgid "Unable to display %s"
-msgstr "Файлът „%s“ не може да бъде показан"
-
-#: lib/diff.tcl:221
-msgid "Error loading file:"
-msgstr "Грешка при зареждане на файл:"
-
-#: lib/diff.tcl:227
-msgid "Git Repository (subproject)"
-msgstr "Хранилище на Git (подмодул)"
-
-#: lib/diff.tcl:239
-msgid "* Binary file (not showing content)."
-msgstr "◠Двоичен файл (Ñъдържанието не Ñе показва)."
-
-#: lib/diff.tcl:244
-#, tcl-format
-msgid ""
-"* Untracked file is %d bytes.\n"
-"* Showing only first %d bytes.\n"
-msgstr ""
-"â— ÐеÑледениÑÑ‚ файл е %d байта.\n"
-"◠Показват Ñе Ñамо първите %d байта.\n"
-
-#: lib/diff.tcl:250
-#, tcl-format
-msgid ""
-"\n"
-"* Untracked file clipped here by %s.\n"
-"* To see the entire file, use an external editor.\n"
-msgstr ""
-"\n"
-"â— ÐеÑледениÑÑ‚ файл е отрÑзан дотук от програмата „%s“.\n"
-"◠Използвайте външен редактор, за да видите Ñ†ÐµÐ»Ð¸Ñ Ñ„Ð°Ð¹Ð».\n"
-
-#: lib/diff.tcl:580
-msgid "Failed to unstage selected hunk."
-msgstr "Избраното парче не може да бъде извадено от индекÑа."
-
-#: lib/diff.tcl:587
-msgid "Failed to stage selected hunk."
-msgstr "Избраното парче не може да бъде добавено към индекÑа."
-
-#: lib/diff.tcl:666
-msgid "Failed to unstage selected line."
-msgstr "ИзбраниÑÑ‚ ред не може да бъде изваден от индекÑа."
-
-#: lib/diff.tcl:674
-msgid "Failed to stage selected line."
-msgstr "ИзбраниÑÑ‚ ред не може да бъде добавен към индекÑа."
-
-#: lib/encoding.tcl:443
-msgid "Default"
-msgstr "Стандартното"
-
-#: lib/encoding.tcl:448
-#, tcl-format
-msgid "System (%s)"
-msgstr "СиÑтемното (%s)"
-
-#: lib/encoding.tcl:459 lib/encoding.tcl:465
-msgid "Other"
-msgstr "Друго"
-
#: lib/error.tcl:20
#, tcl-format
msgid "%s: error"
@@ -1812,98 +2716,6 @@ msgstr "Преди да можете да подадете, коригирайт
msgid "%s (%s): error"
msgstr "%s (%s): грешка"
-#: lib/index.tcl:6
-msgid "Unable to unlock the index."
-msgstr "ИндекÑÑŠÑ‚ не може да бъде отключен."
-
-#: lib/index.tcl:17
-msgid "Index Error"
-msgstr "Грешка в индекÑа"
-
-#: lib/index.tcl:19
-msgid ""
-"Updating the Git index failed. A rescan will be automatically started to "
-"resynchronize git-gui."
-msgstr ""
-"ÐеуÑпешно обновÑване на индекÑа на Git. Ðвтоматично ще започне нова проверка "
-"за Ñинхронизирането на git-gui."
-
-#: lib/index.tcl:30
-msgid "Continue"
-msgstr "Продължаване"
-
-#: lib/index.tcl:33
-msgid "Unlock Index"
-msgstr "Отключване на индекÑа"
-
-#: lib/index.tcl:294
-msgid "Unstaging selected files from commit"
-msgstr "Изваждане на избраните файлове от подаването"
-
-#: lib/index.tcl:298
-#, tcl-format
-msgid "Unstaging %s from commit"
-msgstr "Изваждане на „%s“ от подаването"
-
-#: lib/index.tcl:337
-msgid "Ready to commit."
-msgstr "ГотовноÑÑ‚ за подаване."
-
-#: lib/index.tcl:346
-msgid "Adding selected files"
-msgstr "ДобавÑне на избраните файлове"
-
-#: lib/index.tcl:350
-#, tcl-format
-msgid "Adding %s"
-msgstr "ДобавÑне на „%s“"
-
-#: lib/index.tcl:380
-#, tcl-format
-msgid "Stage %d untracked files?"
-msgstr "Да Ñе добавÑÑ‚ ли %d неÑледени файла към индекÑа?"
-
-#: lib/index.tcl:388
-msgid "Adding all changed files"
-msgstr "ДобавÑне на вÑички променени файлове"
-
-#: lib/index.tcl:428
-#, tcl-format
-msgid "Revert changes in file %s?"
-msgstr "Да Ñе махнат ли промените във файла „%s“?"
-
-#: lib/index.tcl:430
-#, tcl-format
-msgid "Revert changes in these %i files?"
-msgstr "Да Ñе махнат ли промените в тези %i файла?"
-
-#: lib/index.tcl:438
-msgid "Any unstaged changes will be permanently lost by the revert."
-msgstr ""
-"Ð’Ñички промени, които не Ñа били вкарани в индекÑа, ще бъдат безвъзвратно "
-"загубени."
-
-#: lib/index.tcl:441
-msgid "Do Nothing"
-msgstr "Ðищо да не Ñе прави"
-
-#: lib/index.tcl:459
-msgid "Reverting selected files"
-msgstr "Махане на промените в избраните файлове"
-
-#: lib/index.tcl:463
-#, tcl-format
-msgid "Reverting %s"
-msgstr "Махане на промените в „%s“"
-
-#: lib/line.tcl:17
-msgid "Goto Line:"
-msgstr "Към ред:"
-
-#: lib/line.tcl:23
-msgid "Go"
-msgstr "Придвижване"
-
#: lib/merge.tcl:13
msgid ""
"Cannot merge while amending.\n"
@@ -1927,7 +2739,7 @@ msgstr ""
"ПоÑледно уÑтановеното ÑÑŠÑтоÑние не Ð¾Ñ‚Ð³Ð¾Ð²Ð°Ñ€Ñ Ð½Ð° това в хранилището.\n"
"\n"
"ÐÑкой друг Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð·Ð° Git е променил хранилището междувременно. СъÑтоÑнието "
-"трÑбва да бъде проверено, преди да Ñе извърши Ñливане.\n"
+"трÑбва да Ñе провери, преди да Ñе извърши Ñливане.\n"
"\n"
"Ðвтоматично ще започне нова проверка.\n"
"\n"
@@ -2005,7 +2817,7 @@ msgid ""
"\n"
"You must finish amending this commit.\n"
msgstr ""
-"ПоправÑнето не може да бъде преуÑтановено.\n"
+"ПоправÑнето не може да Ñе преуÑтанови.\n"
"\n"
"ТрÑбва да завършите поправката на това подаване.\n"
@@ -2019,7 +2831,7 @@ msgid ""
msgstr ""
"Да Ñе преуÑтанови ли Ñливането?\n"
"\n"
-"Ð’ такъв Ñлучай â—ВСИЧКИ◠неподадени промени ще бъдат безвъзвратно загубени.\n"
+"Ð’ такъв Ñлучай â—ВСИЧКИ◠неподадени промени ще Ñе загубÑÑ‚ безвъзвратно.\n"
"\n"
"ÐаиÑтина ли да Ñе преуÑтанови Ñливането?"
@@ -2033,775 +2845,22 @@ msgid ""
msgstr ""
"Да Ñе занулÑÑ‚ ли промените?\n"
"\n"
-"Ð’ такъв Ñлучай â—ВСИЧКИ◠неподадени промени ще бъдат безвъзвратно загубени.\n"
+"Ð’ такъв Ñлучай â—ВСИЧКИ◠неподадени промени ще Ñе загубÑÑ‚ безвъзвратно.\n"
"\n"
"ÐаиÑтина ли да Ñе занулÑÑ‚ промените?"
-#: lib/merge.tcl:245
+#: lib/merge.tcl:246
msgid "Aborting"
msgstr "ПреуÑтановÑване"
-#: lib/merge.tcl:245
+#: lib/merge.tcl:247
msgid "files reset"
msgstr "файла ÑÑŠÑ Ð·Ð°Ð½ÑƒÐ»ÐµÐ½Ð¸ промени"
-#: lib/merge.tcl:273
+#: lib/merge.tcl:277
msgid "Abort failed."
msgstr "ÐеуÑпешно преуÑтановÑване."
-#: lib/merge.tcl:275
+#: lib/merge.tcl:279
msgid "Abort completed. Ready."
msgstr "УÑпешно преуÑтановÑване. ГотовноÑÑ‚ за Ñледващо дейÑтвие."
-
-#: lib/mergetool.tcl:8
-msgid "Force resolution to the base version?"
-msgstr "Да Ñе използва базовата верÑиÑ"
-
-#: lib/mergetool.tcl:9
-msgid "Force resolution to this branch?"
-msgstr "Да Ñе използва верÑиÑта от този клон"
-
-#: lib/mergetool.tcl:10
-msgid "Force resolution to the other branch?"
-msgstr "Да Ñе използва верÑиÑта от Ð´Ñ€ÑƒÐ³Ð¸Ñ ÐºÐ»Ð¾Ð½"
-
-#: lib/mergetool.tcl:14
-#, tcl-format
-msgid ""
-"Note that the diff shows only conflicting changes.\n"
-"\n"
-"%s will be overwritten.\n"
-"\n"
-"This operation can be undone only by restarting the merge."
-msgstr ""
-"Разликата показва Ñамо разликите Ñ ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚.\n"
-"\n"
-"Файлът „%s“ ще бъде презапиÑан.\n"
-"\n"
-"Тази Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¼Ð¾Ð¶Ðµ да бъде отменена Ñамо чрез започване на Ñливането наново."
-
-#: lib/mergetool.tcl:45
-#, tcl-format
-msgid "File %s seems to have unresolved conflicts, still stage?"
-msgstr ""
-"Изглежда, че вÑе още има некоригирани конфликти във файла „%s“. Да Ñе добави "
-"ли файлът към индекÑа?"
-
-#: lib/mergetool.tcl:60
-#, tcl-format
-msgid "Adding resolution for %s"
-msgstr "ДобавÑне на ÐºÐ¾Ñ€ÐµÐºÑ†Ð¸Ñ Ð½Ð° конфликтите в „%s“"
-
-#: lib/mergetool.tcl:141
-msgid "Cannot resolve deletion or link conflicts using a tool"
-msgstr ""
-"Конфликтите при Ñимволни връзки или изтриване не могат да бъдат коригирани Ñ "
-"външна програма."
-
-#: lib/mergetool.tcl:146
-msgid "Conflict file does not exist"
-msgstr "Файлът, в който е конфликтът, не ÑъщеÑтвува"
-
-#: lib/mergetool.tcl:246
-#, tcl-format
-msgid "Not a GUI merge tool: '%s'"
-msgstr "Това не е графична програма за Ñливане: „%s“"
-
-#: lib/mergetool.tcl:275
-#, tcl-format
-msgid "Unsupported merge tool '%s'"
-msgstr "Ðеподдържана програма за Ñливане: „%s“"
-
-#: lib/mergetool.tcl:310
-msgid "Merge tool is already running, terminate it?"
-msgstr "Програмата за Ñливане вече е Ñтартирана. Да бъде ли изключена?"
-
-#: lib/mergetool.tcl:330
-#, tcl-format
-msgid ""
-"Error retrieving versions:\n"
-"%s"
-msgstr ""
-"Грешка при изтеглÑнето на верÑии:\n"
-"%s"
-
-#: lib/mergetool.tcl:350
-#, tcl-format
-msgid ""
-"Could not start the merge tool:\n"
-"\n"
-"%s"
-msgstr ""
-"Програмата за Ñливане не може да бъде Ñтартирана:\n"
-"\n"
-"%s"
-
-#: lib/mergetool.tcl:354
-msgid "Running merge tool..."
-msgstr "Стартиране на програмата за Ñливане…"
-
-#: lib/mergetool.tcl:382 lib/mergetool.tcl:390
-msgid "Merge tool failed."
-msgstr "Грешка в програмата за Ñливане."
-
-#: lib/option.tcl:11
-#, tcl-format
-msgid "Invalid global encoding '%s'"
-msgstr "Ðеправилно глобално кодиране „%s“"
-
-#: lib/option.tcl:19
-#, tcl-format
-msgid "Invalid repo encoding '%s'"
-msgstr "Ðеправилно кодиране „%s“ на хранилището"
-
-#: lib/option.tcl:119
-msgid "Restore Defaults"
-msgstr "Стандартни наÑтройки"
-
-#: lib/option.tcl:123
-msgid "Save"
-msgstr "Запазване"
-
-#: lib/option.tcl:133
-#, tcl-format
-msgid "%s Repository"
-msgstr "Хранилище „%s“"
-
-#: lib/option.tcl:134
-msgid "Global (All Repositories)"
-msgstr "Глобално (за вÑички хранилища)"
-
-#: lib/option.tcl:140
-msgid "User Name"
-msgstr "ПотребителÑко име"
-
-#: lib/option.tcl:141
-msgid "Email Address"
-msgstr "ÐÐ´Ñ€ÐµÑ Ð½Ð° е-поща"
-
-#: lib/option.tcl:143
-msgid "Summarize Merge Commits"
-msgstr "Обобщаване на подаваниÑта при Ñливане"
-
-#: lib/option.tcl:144
-msgid "Merge Verbosity"
-msgstr "ПодробноÑти при ÑливаниÑта"
-
-#: lib/option.tcl:145
-msgid "Show Diffstat After Merge"
-msgstr "Извеждане на ÑтатиÑтика Ñлед ÑливаниÑта"
-
-#: lib/option.tcl:146
-msgid "Use Merge Tool"
-msgstr "Използване на програма за Ñливане"
-
-#: lib/option.tcl:148
-msgid "Trust File Modification Timestamps"
-msgstr "Доверие във времето на промÑна на файловете"
-
-#: lib/option.tcl:149
-msgid "Prune Tracking Branches During Fetch"
-msgstr "ОкаÑтрÑне на ÑледÑщите клонове при доÑтавÑне"
-
-#: lib/option.tcl:150
-msgid "Match Tracking Branches"
-msgstr "ÐапаÑване на ÑледÑщите клонове"
-
-#: lib/option.tcl:151
-msgid "Use Textconv For Diffs and Blames"
-msgstr "Използване на „textconv“ за разликите и анотирането"
-
-#: lib/option.tcl:152
-msgid "Blame Copy Only On Changed Files"
-msgstr "Ðнотиране на копието Ñамо по променените файлове"
-
-#: lib/option.tcl:153
-msgid "Maximum Length of Recent Repositories List"
-msgstr "МакÑимален брой на ÑпиÑъка „Скоро ползвани“ хранилища"
-
-#: lib/option.tcl:154
-msgid "Minimum Letters To Blame Copy On"
-msgstr "Минимален брой знаци за анотиране на копието"
-
-#: lib/option.tcl:155
-msgid "Blame History Context Radius (days)"
-msgstr "ИÑторичеÑки обхват за анотиране в дни"
-
-#: lib/option.tcl:156
-msgid "Number of Diff Context Lines"
-msgstr "Брой редове за контекÑта на разликите"
-
-#: lib/option.tcl:157
-msgid "Additional Diff Parameters"
-msgstr "Ðргументи към командата за разликите"
-
-#: lib/option.tcl:158
-msgid "Commit Message Text Width"
-msgstr "Широчина на текÑта на Ñъобщението при подаване"
-
-#: lib/option.tcl:159
-msgid "New Branch Name Template"
-msgstr "Шаблон за името на новите клони"
-
-#: lib/option.tcl:160
-msgid "Default File Contents Encoding"
-msgstr "Кодиране на файловете"
-
-#: lib/option.tcl:161
-msgid "Warn before committing to a detached head"
-msgstr "Предупреждаване при подаване към неÑвързан указател"
-
-#: lib/option.tcl:162
-msgid "Staging of untracked files"
-msgstr "ДобавÑне на неÑледените файлове към индекÑа"
-
-#: lib/option.tcl:163
-msgid "Show untracked files"
-msgstr "Показване на неÑледените файлове"
-
-#: lib/option.tcl:164
-msgid "Tab spacing"
-msgstr "Ширина на табулациÑта"
-
-#: lib/option.tcl:210
-msgid "Change"
-msgstr "СмÑна"
-
-#: lib/option.tcl:254
-msgid "Spelling Dictionary:"
-msgstr "ПравопиÑен речник:"
-
-#: lib/option.tcl:284
-msgid "Change Font"
-msgstr "СмÑна на шрифта"
-
-#: lib/option.tcl:288
-#, tcl-format
-msgid "Choose %s"
-msgstr "Избор на „%s“"
-
-#: lib/option.tcl:294
-msgid "pt."
-msgstr "тчк."
-
-#: lib/option.tcl:308
-msgid "Preferences"
-msgstr "ÐаÑтройки"
-
-#: lib/option.tcl:345
-msgid "Failed to completely save options:"
-msgstr "ÐеуÑпешно запазване на наÑтройките:"
-
-#: lib/remote.tcl:200
-msgid "Push to"
-msgstr "ИзтлаÑкване към"
-
-#: lib/remote.tcl:218
-msgid "Remove Remote"
-msgstr "Премахване на отдалечено хранилище"
-
-#: lib/remote.tcl:223
-msgid "Prune from"
-msgstr "ОкаÑтрÑне от"
-
-#: lib/remote.tcl:228
-msgid "Fetch from"
-msgstr "ДоÑтавÑне от"
-
-#: lib/remote.tcl:253 lib/remote.tcl:258
-msgid "All"
-msgstr "Ð’Ñички"
-
-#: lib/remote_add.tcl:20
-#, tcl-format
-msgid "%s (%s): Add Remote"
-msgstr "%s (%s): ДобавÑне на отдалечено хранилище"
-
-#: lib/remote_add.tcl:25
-msgid "Add New Remote"
-msgstr "ДобавÑне на отдалечено хранилище"
-
-#: lib/remote_add.tcl:30 lib/tools_dlg.tcl:37
-msgid "Add"
-msgstr "ДобавÑне"
-
-#: lib/remote_add.tcl:39
-msgid "Remote Details"
-msgstr "Данни за отдалеченото хранилище"
-
-#: lib/remote_add.tcl:50
-msgid "Location:"
-msgstr "МеÑтоположение:"
-
-#: lib/remote_add.tcl:60
-msgid "Further Action"
-msgstr "Следващо дейÑтвие"
-
-#: lib/remote_add.tcl:63
-msgid "Fetch Immediately"
-msgstr "Ðезабавно доÑтавÑне"
-
-#: lib/remote_add.tcl:69
-msgid "Initialize Remote Repository and Push"
-msgstr "Инициализиране на отдалеченото хранилище и изтлаÑкване на промените"
-
-#: lib/remote_add.tcl:75
-msgid "Do Nothing Else Now"
-msgstr "Да не Ñе прави нищо"
-
-#: lib/remote_add.tcl:100
-msgid "Please supply a remote name."
-msgstr "Задайте име за отдалеченото хранилище."
-
-#: lib/remote_add.tcl:113
-#, tcl-format
-msgid "'%s' is not an acceptable remote name."
-msgstr "Отдалечено хранилище не може да Ñе казва „%s“."
-
-#: lib/remote_add.tcl:124
-#, tcl-format
-msgid "Failed to add remote '%s' of location '%s'."
-msgstr "ÐеуÑпешно добавÑне на отдалеченото хранилище „%s“ от Ð°Ð´Ñ€ÐµÑ â€ž%s“."
-
-#: lib/remote_add.tcl:132 lib/transport.tcl:6
-#, tcl-format
-msgid "fetch %s"
-msgstr "доÑтавÑне на „%s“"
-
-#: lib/remote_add.tcl:133
-#, tcl-format
-msgid "Fetching the %s"
-msgstr "ДоÑтавÑне на „%s“"
-
-#: lib/remote_add.tcl:156
-#, tcl-format
-msgid "Do not know how to initialize repository at location '%s'."
-msgstr "Хранилището Ñ Ð¼ÐµÑтоположение „%s“ не може да бъде инициализирано."
-
-#: lib/remote_add.tcl:162 lib/transport.tcl:54 lib/transport.tcl:92
-#: lib/transport.tcl:110
-#, tcl-format
-msgid "push %s"
-msgstr "изтлаÑкване на „%s“"
-
-#: lib/remote_add.tcl:163
-#, tcl-format
-msgid "Setting up the %s (at %s)"
-msgstr "ДобавÑне на хранилище „%s“ (Ñ Ð°Ð´Ñ€ÐµÑ â€ž%s“)"
-
-#: lib/remote_branch_delete.tcl:29
-#, tcl-format
-msgid "%s (%s): Delete Branch Remotely"
-msgstr "%s (%s): Изтриване на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½"
-
-#: lib/remote_branch_delete.tcl:34
-msgid "Delete Branch Remotely"
-msgstr "Изтриване на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½"
-
-#: lib/remote_branch_delete.tcl:48
-msgid "From Repository"
-msgstr "От хранилище"
-
-#: lib/remote_branch_delete.tcl:51 lib/transport.tcl:165
-msgid "Remote:"
-msgstr "Отдалечено хранилище:"
-
-#: lib/remote_branch_delete.tcl:72 lib/transport.tcl:187
-msgid "Arbitrary Location:"
-msgstr "Произволно меÑтоположение:"
-
-#: lib/remote_branch_delete.tcl:88
-msgid "Branches"
-msgstr "Клони"
-
-#: lib/remote_branch_delete.tcl:110
-msgid "Delete Only If"
-msgstr "Изтриване, Ñамо ако"
-
-#: lib/remote_branch_delete.tcl:112
-msgid "Merged Into:"
-msgstr "СлÑÑ‚ в:"
-
-#: lib/remote_branch_delete.tcl:153
-msgid "A branch is required for 'Merged Into'."
-msgstr "За данните „СлÑÑ‚ в“ е необходимо да зададете клон."
-
-#: lib/remote_branch_delete.tcl:185
-#, tcl-format
-msgid ""
-"The following branches are not completely merged into %s:\n"
-"\n"
-" - %s"
-msgstr ""
-"Следните клони не Ñа Ñлети напълно в „%s“:\n"
-"\n"
-" â— %s"
-
-#: lib/remote_branch_delete.tcl:190
-#, tcl-format
-msgid ""
-"One or more of the merge tests failed because you have not fetched the "
-"necessary commits. Try fetching from %s first."
-msgstr ""
-"Поне една от пробите за Ñливане е неуÑпешна, защото не Ñте доÑтавили вÑички "
-"необходими подаваниÑ. Пробвайте първо да доÑтавите подаваниÑта от „%s“."
-
-#: lib/remote_branch_delete.tcl:208
-msgid "Please select one or more branches to delete."
-msgstr "Изберете поне един клон за изтриване."
-
-#: lib/remote_branch_delete.tcl:227
-#, tcl-format
-msgid "Deleting branches from %s"
-msgstr "Изтриване на клони от „%s“"
-
-#: lib/remote_branch_delete.tcl:300
-msgid "No repository selected."
-msgstr "Ðе е избрано хранилище."
-
-#: lib/remote_branch_delete.tcl:305
-#, tcl-format
-msgid "Scanning %s..."
-msgstr "ПретърÑване на „%s“…"
-
-#: lib/search.tcl:48
-msgid "Find:"
-msgstr "ТърÑене:"
-
-#: lib/search.tcl:50
-msgid "Next"
-msgstr "Следваща поÑва"
-
-#: lib/search.tcl:51
-msgid "Prev"
-msgstr "Предишна поÑва"
-
-#: lib/search.tcl:52
-msgid "RegExp"
-msgstr "РегИзр"
-
-#: lib/search.tcl:54
-msgid "Case"
-msgstr "Главни/малки"
-
-#: lib/shortcut.tcl:8 lib/shortcut.tcl:43 lib/shortcut.tcl:75
-#, tcl-format
-msgid "%s (%s): Create Desktop Icon"
-msgstr "%s (%s): ДобавÑне на икона на Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ Ð¿Ð»Ð¾Ñ‚"
-
-#: lib/shortcut.tcl:24 lib/shortcut.tcl:65
-msgid "Cannot write shortcut:"
-msgstr "Клавишната ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ð½Ðµ може да бъде запазена:"
-
-#: lib/shortcut.tcl:140
-msgid "Cannot write icon:"
-msgstr "Иконата не може да бъде запазена:"
-
-#: lib/spellcheck.tcl:57
-msgid "Unsupported spell checker"
-msgstr "Тази програма за проверка на правопиÑа не Ñе поддържа"
-
-#: lib/spellcheck.tcl:65
-msgid "Spell checking is unavailable"
-msgstr "ЛипÑва програма за проверка на правопиÑа"
-
-#: lib/spellcheck.tcl:68
-msgid "Invalid spell checking configuration"
-msgstr "Ðеправилни наÑтройки на проверката на правопиÑа"
-
-#: lib/spellcheck.tcl:70
-#, tcl-format
-msgid "Reverting dictionary to %s."
-msgstr "Ползване на речник за език „%s“."
-
-#: lib/spellcheck.tcl:73
-msgid "Spell checker silently failed on startup"
-msgstr "Програмата за Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸Ñ Ð´Ð°Ð¶Ðµ не Ñтартира уÑпешно."
-
-#: lib/spellcheck.tcl:80
-msgid "Unrecognized spell checker"
-msgstr "Ðепозната програма за проверка на правопиÑа"
-
-#: lib/spellcheck.tcl:186
-msgid "No Suggestions"
-msgstr "ÐÑма предложениÑ"
-
-#: lib/spellcheck.tcl:388
-msgid "Unexpected EOF from spell checker"
-msgstr "Ðеочакван край на файл от програмата за проверка на правопиÑа"
-
-#: lib/spellcheck.tcl:392
-msgid "Spell Checker Failed"
-msgstr "Грешка в програмата за проверка на правопиÑа"
-
-#: lib/sshkey.tcl:31
-msgid "No keys found."
-msgstr "Ðе Ñа открити ключове."
-
-#: lib/sshkey.tcl:34
-#, tcl-format
-msgid "Found a public key in: %s"
-msgstr "Открит е публичен ключ в „%s“"
-
-#: lib/sshkey.tcl:40
-msgid "Generate Key"
-msgstr "Генериране на ключ"
-
-#: lib/sshkey.tcl:58
-msgid "Copy To Clipboard"
-msgstr "Копиране към ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð±ÑƒÑ„ÐµÑ€"
-
-#: lib/sshkey.tcl:72
-msgid "Your OpenSSH Public Key"
-msgstr "ПубличниÑÑ‚ ви ключ за OpenSSH"
-
-#: lib/sshkey.tcl:80
-msgid "Generating..."
-msgstr "Генериране…"
-
-#: lib/sshkey.tcl:86
-#, tcl-format
-msgid ""
-"Could not start ssh-keygen:\n"
-"\n"
-"%s"
-msgstr ""
-"Програмата „ssh-keygen“ не може да бъде Ñтартирана:\n"
-"\n"
-"%s"
-
-#: lib/sshkey.tcl:113
-msgid "Generation failed."
-msgstr "ÐеуÑпешно генериране."
-
-#: lib/sshkey.tcl:120
-msgid "Generation succeeded, but no keys found."
-msgstr "Генерирането завърши уÑпешно, а не Ñа намерени ключове."
-
-#: lib/sshkey.tcl:123
-#, tcl-format
-msgid "Your key is in: %s"
-msgstr "Ключът ви е в „%s“"
-
-#: lib/status_bar.tcl:87
-#, tcl-format
-msgid "%s ... %*i of %*i %s (%3i%%)"
-msgstr "%s… %*i от общо %*i %s (%3i%%)"
-
-#: lib/tools.tcl:76
-#, tcl-format
-msgid "Running %s requires a selected file."
-msgstr "За изпълнението на „%s“ трÑбва да изберете файл."
-
-#: lib/tools.tcl:92
-#, tcl-format
-msgid "Are you sure you want to run %1$s on file \"%2$s\"?"
-msgstr "Сигурни ли Ñте, че иÑкате да изпълните „%1$s“ върху файла „%2$s“?"
-
-#: lib/tools.tcl:96
-#, tcl-format
-msgid "Are you sure you want to run %s?"
-msgstr "Сигурни ли Ñте, че иÑкате да изпълните „%s“?"
-
-#: lib/tools.tcl:118
-#, tcl-format
-msgid "Tool: %s"
-msgstr "Команда: %s"
-
-#: lib/tools.tcl:119
-#, tcl-format
-msgid "Running: %s"
-msgstr "Изпълнение: %s"
-
-#: lib/tools.tcl:158
-#, tcl-format
-msgid "Tool completed successfully: %s"
-msgstr "Командата завърши уÑпешно: %s"
-
-#: lib/tools.tcl:160
-#, tcl-format
-msgid "Tool failed: %s"
-msgstr "Командата върна грешка: %s"
-
-#: lib/tools_dlg.tcl:22
-#, tcl-format
-msgid "%s (%s): Add Tool"
-msgstr "%s (%s): ДобавÑне на команда"
-
-#: lib/tools_dlg.tcl:28
-msgid "Add New Tool Command"
-msgstr "ДобавÑне на команда"
-
-#: lib/tools_dlg.tcl:34
-msgid "Add globally"
-msgstr "Глобално добавÑне"
-
-#: lib/tools_dlg.tcl:46
-msgid "Tool Details"
-msgstr "ПодробноÑти за командата"
-
-#: lib/tools_dlg.tcl:49
-msgid "Use '/' separators to create a submenu tree:"
-msgstr "За Ñъздаване на подменюта използвайте знака „/“ за разделител:"
-
-#: lib/tools_dlg.tcl:60
-msgid "Command:"
-msgstr "Команда:"
-
-#: lib/tools_dlg.tcl:71
-msgid "Show a dialog before running"
-msgstr "Преди изпълнение да Ñе извежда диалогов прозорец"
-
-#: lib/tools_dlg.tcl:77
-msgid "Ask the user to select a revision (sets $REVISION)"
-msgstr "ПотребителÑÑ‚ да укаже верÑÐ¸Ñ (задаване на променливата $REVISION)"
-
-#: lib/tools_dlg.tcl:82
-msgid "Ask the user for additional arguments (sets $ARGS)"
-msgstr ""
-"ПотребителÑÑ‚ да укаже допълнителни аргументи (задаване на променливата $ARGS)"
-
-#: lib/tools_dlg.tcl:89
-msgid "Don't show the command output window"
-msgstr "Без показване на прозорец Ñ Ð¸Ð·Ñ…Ð¾Ð´Ð° от командата"
-
-#: lib/tools_dlg.tcl:94
-msgid "Run only if a diff is selected ($FILENAME not empty)"
-msgstr ""
-"Стартиране Ñамо Ñлед избор на разлика (променливата $FILENAME не е празна)"
-
-#: lib/tools_dlg.tcl:118
-msgid "Please supply a name for the tool."
-msgstr "Задайте име за командата."
-
-#: lib/tools_dlg.tcl:126
-#, tcl-format
-msgid "Tool '%s' already exists."
-msgstr "Командата „%s“ вече ÑъщеÑтвува."
-
-#: lib/tools_dlg.tcl:148
-#, tcl-format
-msgid ""
-"Could not add tool:\n"
-"%s"
-msgstr ""
-"Командата не може да бъде добавена:\n"
-"%s"
-
-#: lib/tools_dlg.tcl:187
-#, tcl-format
-msgid "%s (%s): Remove Tool"
-msgstr "%s (%s): Премахване на команда"
-
-#: lib/tools_dlg.tcl:193
-msgid "Remove Tool Commands"
-msgstr "Премахване на команди"
-
-#: lib/tools_dlg.tcl:198
-msgid "Remove"
-msgstr "Премахване"
-
-#: lib/tools_dlg.tcl:231
-msgid "(Blue denotes repository-local tools)"
-msgstr "(командите към локалното хранилище Ñа обозначени в Ñиньо)"
-
-#: lib/tools_dlg.tcl:283
-#, tcl-format
-msgid "%s (%s):"
-msgstr "%s (%s):"
-
-#: lib/tools_dlg.tcl:292
-#, tcl-format
-msgid "Run Command: %s"
-msgstr "Изпълнение на командата „%s“"
-
-#: lib/tools_dlg.tcl:306
-msgid "Arguments"
-msgstr "Ðргументи"
-
-#: lib/tools_dlg.tcl:341
-msgid "OK"
-msgstr "Добре"
-
-#: lib/transport.tcl:7
-#, tcl-format
-msgid "Fetching new changes from %s"
-msgstr "ДоÑтавÑне на промените от „%s“"
-
-#: lib/transport.tcl:18
-#, tcl-format
-msgid "remote prune %s"
-msgstr "окаÑтрÑне на ÑледÑщите клони към „%s“"
-
-#: lib/transport.tcl:19
-#, tcl-format
-msgid "Pruning tracking branches deleted from %s"
-msgstr "ОкаÑтрÑне на ÑледÑщите клони на изтритите клони от „%s“"
-
-#: lib/transport.tcl:25
-msgid "fetch all remotes"
-msgstr "доÑтавÑне от вÑички отдалечени"
-
-#: lib/transport.tcl:26
-msgid "Fetching new changes from all remotes"
-msgstr "ДоÑтавÑне на промените от вÑички отдалечени хранилища"
-
-#: lib/transport.tcl:40
-msgid "remote prune all remotes"
-msgstr "окаÑтрÑне на ÑледÑщите изтрити"
-
-#: lib/transport.tcl:41
-msgid "Pruning tracking branches deleted from all remotes"
-msgstr ""
-"ОкаÑтрÑне на ÑледÑщите клони на изтритите клони от вÑички отдалечени "
-"хранилища"
-
-#: lib/transport.tcl:55
-#, tcl-format
-msgid "Pushing changes to %s"
-msgstr "ИзтлаÑкване на промените към „%s“"
-
-#: lib/transport.tcl:93
-#, tcl-format
-msgid "Mirroring to %s"
-msgstr "ИзтлаÑкване на вÑичко към „%s“"
-
-#: lib/transport.tcl:111
-#, tcl-format
-msgid "Pushing %s %s to %s"
-msgstr "ИзтлаÑкване на %s „%s“ към „%s“"
-
-#: lib/transport.tcl:132
-msgid "Push Branches"
-msgstr "Клони за изтлаÑкване"
-
-#: lib/transport.tcl:147
-msgid "Source Branches"
-msgstr "Клони-източници"
-
-#: lib/transport.tcl:162
-msgid "Destination Repository"
-msgstr "Целево хранилище"
-
-#: lib/transport.tcl:205
-msgid "Transfer Options"
-msgstr "ÐаÑтройки при пренаÑÑнето"
-
-#: lib/transport.tcl:207
-msgid "Force overwrite existing branch (may discard changes)"
-msgstr ""
-"Изрично презапиÑване на ÑъщеÑтвуващ клон (нÑкои промени може да бъдат "
-"загубени)"
-
-#: lib/transport.tcl:211
-msgid "Use thin pack (for slow network connections)"
-msgstr "МакÑимална компреÑÐ¸Ñ (за бавни мрежови връзки)"
-
-#: lib/transport.tcl:215
-msgid "Include tags"
-msgstr "Включване на етикетите"
-
-#: lib/transport.tcl:229
-#, tcl-format
-msgid "%s (%s): Push"
-msgstr "%s (%s): ИзтлаÑкване"
diff --git a/git-instaweb.sh b/git-instaweb.sh
index 5ad50160bb..7b44f70789 100755
--- a/git-instaweb.sh
+++ b/git-instaweb.sh
@@ -694,9 +694,9 @@ class GitWebRequestHandler(CGIHTTPRequestHandler):
return result
-bind = "127.0.0.1"
+bind = "0.0.0.0"
if "$local" == "true":
- bind = "0.0.0.0"
+ bind = "127.0.0.1"
# Set our http root directory
# This is a work around for a missing directory argument in older Python versions
diff --git a/git-submodule.sh b/git-submodule.sh
index 03c5a220a2..2999b31fad 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -40,11 +40,11 @@ init=
require_init=
files=
remote=
-nofetch=
+no_fetch=
rebase=
merge=
checkout=
-custom_name=
+name=
depth=
progress=
dissociate=
@@ -52,11 +52,10 @@ single_branch=
jobs=
recommend_shallow=
filter=
-
-isnumber()
-{
- n=$(($1 + 0)) 2>/dev/null && test "$n" = "$1"
-}
+all=
+default=
+summary_limit=
+for_status=
#
# Add a new submodule to the working tree, .gitmodules and the index
@@ -68,31 +67,33 @@ isnumber()
cmd_add()
{
# parse $args after "submodule ... add".
- reference_path=
while test $# -ne 0
do
case "$1" in
-b | --branch)
case "$2" in '') usage ;; esac
- branch=$2
+ branch="--branch=$2"
shift
;;
+ -b* | --branch=*)
+ branch="$1"
+ ;;
-f | --force)
force=$1
;;
-q|--quiet)
- quiet=1
+ quiet=$1
;;
--progress)
- progress=1
+ progress=$1
;;
--reference)
case "$2" in '') usage ;; esac
- reference_path=$2
+ reference="--reference=$2"
shift
;;
--reference=*)
- reference_path="${1#--reference=}"
+ reference="$1"
;;
--ref-format)
case "$2" in '') usage ;; esac
@@ -103,20 +104,23 @@ cmd_add()
ref_format="$1"
;;
--dissociate)
- dissociate=1
+ dissociate=$1
;;
--name)
case "$2" in '') usage ;; esac
- custom_name=$2
+ name="--name=$2"
shift
;;
+ --name=*)
+ name="$1"
+ ;;
--depth)
case "$2" in '') usage ;; esac
depth="--depth=$2"
shift
;;
--depth=*)
- depth=$1
+ depth="$1"
;;
--)
shift
@@ -138,14 +142,14 @@ cmd_add()
fi
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper add \
- ${quiet:+--quiet} \
- ${force:+--force} \
- ${progress:+"--progress"} \
- ${branch:+--branch "$branch"} \
- ${reference_path:+--reference "$reference_path"} \
+ $quiet \
+ $force \
+ $progress \
+ ${branch:+"$branch"} \
+ ${reference:+"$reference"} \
${ref_format:+"$ref_format"} \
- ${dissociate:+--dissociate} \
- ${custom_name:+--name "$custom_name"} \
+ $dissociate \
+ ${name:+"$name"} \
${depth:+"$depth"} \
-- \
"$@"
@@ -164,10 +168,10 @@ cmd_foreach()
do
case "$1" in
-q|--quiet)
- quiet=1
+ quiet=$1
;;
--recursive)
- recursive=1
+ recursive=$1
;;
-*)
usage
@@ -180,8 +184,8 @@ cmd_foreach()
done
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper foreach \
- ${quiet:+--quiet} \
- ${recursive:+--recursive} \
+ $quiet \
+ $recursive \
-- \
"$@"
}
@@ -198,7 +202,7 @@ cmd_init()
do
case "$1" in
-q|--quiet)
- quiet=1
+ quiet=$1
;;
--)
shift
@@ -215,7 +219,7 @@ cmd_init()
done
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper init \
- ${quiet:+--quiet} \
+ $quiet \
-- \
"$@"
}
@@ -226,7 +230,6 @@ cmd_init()
cmd_deinit()
{
# parse $args after "submodule ... deinit".
- deinit_all=
while test $# -ne 0
do
case "$1" in
@@ -234,10 +237,10 @@ cmd_deinit()
force=$1
;;
-q|--quiet)
- quiet=1
+ quiet=$1
;;
--all)
- deinit_all=t
+ all=$1
;;
--)
shift
@@ -254,9 +257,9 @@ cmd_deinit()
done
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper deinit \
- ${quiet:+--quiet} \
- ${force:+--force} \
- ${deinit_all:+--all} \
+ $quiet \
+ $force \
+ $all \
-- \
"$@"
}
@@ -273,31 +276,31 @@ cmd_update()
do
case "$1" in
-q|--quiet)
- quiet=1
+ quiet=$1
;;
-v|--verbose)
- quiet=0
+ quiet=
;;
--progress)
- progress=1
+ progress=$1
;;
-i|--init)
- init=1
+ init=$1
;;
--require-init)
- require_init=1
+ require_init=$1
;;
--remote)
- remote=1
+ remote=$1
;;
-N|--no-fetch)
- nofetch=1
+ no_fetch=$1
;;
-f|--force)
force=$1
;;
-r|--rebase)
- rebase=1
+ rebase=$1
;;
--ref-format)
case "$2" in '') usage ;; esac
@@ -316,22 +319,19 @@ cmd_update()
reference="$1"
;;
--dissociate)
- dissociate=1
+ dissociate=$1
;;
-m|--merge)
- merge=1
+ merge=$1
;;
--recursive)
- recursive=1
+ recursive=$1
;;
--checkout)
- checkout=1
- ;;
- --recommend-shallow)
- recommend_shallow="--recommend-shallow"
+ checkout=$1
;;
- --no-recommend-shallow)
- recommend_shallow="--no-recommend-shallow"
+ --recommend-shallow|--no-recommend-shallow)
+ recommend_shallow=$1
;;
--depth)
case "$2" in '') usage ;; esac
@@ -339,21 +339,18 @@ cmd_update()
shift
;;
--depth=*)
- depth=$1
+ depth="$1"
;;
-j|--jobs)
case "$2" in '') usage ;; esac
jobs="--jobs=$2"
shift
;;
- --jobs=*)
- jobs=$1
+ -j*|--jobs=*)
+ jobs="$1"
;;
- --single-branch)
- single_branch="--single-branch"
- ;;
- --no-single-branch)
- single_branch="--no-single-branch"
+ --single-branch|--no-single-branch)
+ single_branch=$1
;;
--filter)
case "$2" in '') usage ;; esac
@@ -378,22 +375,21 @@ cmd_update()
done
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper update \
- ${quiet:+--quiet} \
- ${force:+--force} \
- ${progress:+"--progress"} \
- ${remote:+--remote} \
- ${recursive:+--recursive} \
- ${init:+--init} \
- ${nofetch:+--no-fetch} \
- ${rebase:+--rebase} \
- ${merge:+--merge} \
- ${checkout:+--checkout} \
+ $quiet \
+ $force \
+ $progress \
+ $remote \
+ $recursive \
+ $init \
+ $no_fetch \
+ $rebase \
+ $merge \
+ $checkout \
${ref_format:+"$ref_format"} \
${reference:+"$reference"} \
- ${dissociate:+"--dissociate"} \
+ $dissociate \
${depth:+"$depth"} \
- ${require_init:+--require-init} \
- ${dissociate:+"--dissociate"} \
+ $require_init \
$single_branch \
$recommend_shallow \
$jobs \
@@ -408,9 +404,7 @@ cmd_update()
# $@ = requested path
#
cmd_set_branch() {
- default=
- branch=
-
+ # parse $args after "submodule ... set-branch".
while test $# -ne 0
do
case "$1" in
@@ -418,13 +412,16 @@ cmd_set_branch() {
# we don't do anything with this but we need to accept it
;;
-d|--default)
- default=1
+ default=$1
;;
-b|--branch)
case "$2" in '') usage ;; esac
- branch=$2
+ branch="--branch=$2"
shift
;;
+ -b*|--branch=*)
+ branch="$1"
+ ;;
--)
shift
break
@@ -440,9 +437,9 @@ cmd_set_branch() {
done
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper set-branch \
- ${quiet:+--quiet} \
- ${branch:+--branch "$branch"} \
- ${default:+--default} \
+ $quiet \
+ ${branch:+"$branch"} \
+ $default \
-- \
"$@"
}
@@ -453,11 +450,12 @@ cmd_set_branch() {
# $@ = requested path, requested url
#
cmd_set_url() {
+ # parse $args after "submodule ... set-url".
while test $# -ne 0
do
case "$1" in
-q|--quiet)
- quiet=1
+ quiet=$1
;;
--)
shift
@@ -474,7 +472,7 @@ cmd_set_url() {
done
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper set-url \
- ${quiet:+--quiet} \
+ $quiet \
-- \
"$@"
}
@@ -488,31 +486,26 @@ cmd_set_url() {
# $@ = [commit (default 'HEAD'),] requested paths (default all)
#
cmd_summary() {
- summary_limit=-1
- for_status=
- diff_cmd=diff-index
-
# parse $args after "submodule ... summary".
while test $# -ne 0
do
case "$1" in
--cached)
- cached=1
+ cached=$1
;;
--files)
- files="$1"
+ files=$1
;;
--for-status)
- for_status="$1"
+ for_status=$1
;;
-n|--summary-limit)
- summary_limit="$2"
- isnumber "$summary_limit" || usage
+ case "$2" in '') usage ;; esac
+ summary_limit="--summary-limit=$2"
shift
;;
- --summary-limit=*)
- summary_limit="${1#--summary-limit=}"
- isnumber "$summary_limit" || usage
+ -n*|--summary-limit=*)
+ summary_limit="$1"
;;
--)
shift
@@ -529,10 +522,10 @@ cmd_summary() {
done
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper summary \
- ${files:+--files} \
- ${cached:+--cached} \
- ${for_status:+--for-status} \
- ${summary_limit:+-n $summary_limit} \
+ $files \
+ $cached \
+ $for_status \
+ ${summary_limit:+"$summary_limit"} \
-- \
"$@"
}
@@ -553,13 +546,13 @@ cmd_status()
do
case "$1" in
-q|--quiet)
- quiet=1
+ quiet=$1
;;
--cached)
- cached=1
+ cached=$1
;;
--recursive)
- recursive=1
+ recursive=$1
;;
--)
shift
@@ -576,9 +569,9 @@ cmd_status()
done
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper status \
- ${quiet:+--quiet} \
- ${cached:+--cached} \
- ${recursive:+--recursive} \
+ $quiet \
+ $cached \
+ $recursive \
-- \
"$@"
}
@@ -590,15 +583,16 @@ cmd_status()
#
cmd_sync()
{
+ # parse $args after "submodule ... sync".
while test $# -ne 0
do
case "$1" in
-q|--quiet)
- quiet=1
+ quiet=$1
shift
;;
--recursive)
- recursive=1
+ recursive=$1
shift
;;
--)
@@ -615,8 +609,8 @@ cmd_sync()
done
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper sync \
- ${quiet:+--quiet} \
- ${recursive:+--recursive} \
+ $quiet \
+ $recursive \
-- \
"$@"
}
@@ -639,10 +633,10 @@ do
command=$1
;;
-q|--quiet)
- quiet=1
+ quiet=$1
;;
--cached)
- cached=1
+ cached=$1
;;
--)
break
diff --git a/git.c b/git.c
index 71d644dc1c..a94dab3770 100644
--- a/git.c
+++ b/git.c
@@ -125,7 +125,7 @@ static void commit_pager_choice(void)
setenv("GIT_PAGER", "cat", 1);
break;
case 1:
- setup_pager();
+ setup_pager(the_repository);
break;
default:
break;
@@ -136,7 +136,7 @@ void setup_auto_pager(const char *cmd, int def)
{
if (use_pager != -1 || pager_in_use())
return;
- use_pager = check_pager_config(cmd);
+ use_pager = check_pager_config(the_repository, cmd);
if (use_pager == -1)
use_pager = def;
commit_pager_choice();
@@ -462,12 +462,12 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv, struct
precompose_argv_prefix(argc, argv, NULL);
if (use_pager == -1 && run_setup &&
!(p->option & DELAY_PAGER_CONFIG))
- use_pager = check_pager_config(p->cmd);
+ use_pager = check_pager_config(the_repository, p->cmd);
if (use_pager == -1 && p->option & USE_PAGER)
use_pager = 1;
if (run_setup && startup_info->have_repository)
/* get_git_dir() may set up repo, avoid that */
- trace_repo_setup();
+ trace_repo_setup(the_repository);
commit_pager_choice();
if (!help && p->option & NEED_WORK_TREE)
@@ -750,7 +750,7 @@ static void execv_dashed_external(const char **argv)
int status;
if (use_pager == -1 && !is_builtin(argv[0]))
- use_pager = check_pager_config(argv[0]);
+ use_pager = check_pager_config(the_repository, argv[0]);
commit_pager_choice();
strvec_pushf(&cmd.args, "git-%s", argv[0]);
diff --git a/gitk-git/po/bg.po b/gitk-git/po/bg.po
index 87ab1fac24..773a049831 100644
--- a/gitk-git/po/bg.po
+++ b/gitk-git/po/bg.po
@@ -1,15 +1,15 @@
# Bulgarian translation of gitk po-file.
-# Copyright (C) 2014, 2015, 2019 Alexander Shopov <ash@kambanaria.org>.
+# Copyright (C) 2014, 2015, 2019, 2020, 2024 Alexander Shopov <ash@kambanaria.org>.
# This file is distributed under the same license as the git package.
-# Alexander Shopov <ash@kambanaria.org>, 2014, 2015, 2019.
+# Alexander Shopov <ash@kambanaria.org>, 2014, 2015, 2019, 2020, 2024.
#
#
msgid ""
msgstr ""
"Project-Id-Version: gitk master\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-03-04 11:27+0100\n"
-"PO-Revision-Date: 2019-03-04 11:39+0100\n"
+"POT-Creation-Date: 2024-12-24 11:01+0100\n"
+"PO-Revision-Date: 2024-12-24 11:05+0100\n"
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
"Language: bg\n"
@@ -18,32 +18,32 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: gitk:140
+#: gitk:139
msgid "Couldn't get list of unmerged files:"
-msgstr "СпиÑъкът Ñ Ð½ÐµÑлети файлове не може да бъде получен:"
+msgstr "СпиÑъкът Ñ Ð½ÐµÑлети файлове не може да Ñе получи:"
-#: gitk:212 gitk:2403
+#: gitk:211 gitk:2430
msgid "Color words"
msgstr "ОцветÑване на думите"
-#: gitk:217 gitk:2403 gitk:8249 gitk:8282
+#: gitk:216 gitk:2430 gitk:8335 gitk:8368
msgid "Markup words"
msgstr "ОтбелÑзване на думите"
-#: gitk:324
+#: gitk:323
msgid "Error parsing revisions:"
msgstr "Грешка при анализ на верÑиите:"
-#: gitk:380
+#: gitk:389
msgid "Error executing --argscmd command:"
msgstr "Грешка при изпълнение на командата Ñ â€ž--argscmd“."
-#: gitk:393
+#: gitk:402
msgid "No files selected: --merge specified but no files are unmerged."
msgstr ""
"Ðе Ñа избрани файлове — указана е опциÑта „--merge“, но нÑма неÑлети файлове."
-#: gitk:396
+#: gitk:405
msgid ""
"No files selected: --merge specified but no unmerged files are within file "
"limit."
@@ -51,326 +51,326 @@ msgstr ""
"Ðе Ñа избрани файлове — указана е опциÑта „--merge“, но нÑма неÑлети файлове "
"в ограничениÑта."
-#: gitk:418 gitk:566
+#: gitk:430 gitk:585
msgid "Error executing git log:"
msgstr "Грешка при изпълнение на „git log“:"
-#: gitk:436 gitk:582
+#: gitk:448 gitk:601
msgid "Reading"
msgstr "Прочитане"
-#: gitk:496 gitk:4549
+#: gitk:508 gitk:4596
msgid "Reading commits..."
msgstr "Прочитане на подаваниÑта…"
-#: gitk:499 gitk:1641 gitk:4552
+#: gitk:511 gitk:1660 gitk:4599
msgid "No commits selected"
msgstr "Ðе Ñа избрани подаваниÑ"
-#: gitk:1449 gitk:4069 gitk:12583
+#: gitk:1468 gitk:4116 gitk:12738
msgid "Command line"
msgstr "Команден ред"
-#: gitk:1515
+#: gitk:1534
msgid "Can't parse git log output:"
msgstr "Изходът от „git log“ не може да Ñе анализира:"
-#: gitk:1744
+#: gitk:1763
msgid "No commit information available"
msgstr "ЛипÑва Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° подаваниÑ"
-#: gitk:1907 gitk:1936 gitk:4339 gitk:9789 gitk:11388 gitk:11668
+#: gitk:1930 gitk:1959 gitk:4386 gitk:9875 gitk:11485 gitk:11805
msgid "OK"
msgstr "Добре"
-#: gitk:1938 gitk:4341 gitk:9225 gitk:9304 gitk:9434 gitk:9520 gitk:9791
-#: gitk:11389 gitk:11669
+#: gitk:1961 gitk:4388 gitk:9311 gitk:9390 gitk:9520 gitk:9606 gitk:9877
+#: gitk:11486 gitk:11806
msgid "Cancel"
msgstr "Отказ"
-#: gitk:2087
+#: gitk:2114
msgid "&Update"
msgstr "&ОбновÑване"
-#: gitk:2088
+#: gitk:2115
msgid "&Reload"
msgstr "&Презареждане"
-#: gitk:2089
+#: gitk:2116
msgid "Reread re&ferences"
-msgstr "&Ðаново прочитане"
+msgstr "Прочитане &наново"
-#: gitk:2090
+#: gitk:2117
msgid "&List references"
msgstr "&ИзброÑване на указателите"
-#: gitk:2092
+#: gitk:2119
msgid "Start git &gui"
msgstr "&Стартиране на „git gui“"
-#: gitk:2094
+#: gitk:2121
msgid "&Quit"
msgstr "&Спиране на програмата"
-#: gitk:2086
+#: gitk:2113
msgid "&File"
msgstr "&Файл"
-#: gitk:2098
+#: gitk:2125
msgid "&Preferences"
msgstr "&ÐаÑтройки"
-#: gitk:2097
+#: gitk:2124
msgid "&Edit"
msgstr "&Редактиране"
-#: gitk:2102
+#: gitk:2129
msgid "&New view..."
msgstr "&Ðов изглед…"
-#: gitk:2103
+#: gitk:2130
msgid "&Edit view..."
msgstr "&Редактиране на изгледа…"
-#: gitk:2104
+#: gitk:2131
msgid "&Delete view"
msgstr "&Изтриване на изгледа"
-#: gitk:2106
+#: gitk:2133
msgid "&All files"
msgstr "&Ð’Ñички файлове"
-#: gitk:2101
+#: gitk:2128
msgid "&View"
msgstr "&Изглед"
-#: gitk:2111 gitk:2121
+#: gitk:2138 gitk:2148
msgid "&About gitk"
msgstr "&ОтноÑно gitk"
-#: gitk:2112 gitk:2126
+#: gitk:2139 gitk:2153
msgid "&Key bindings"
msgstr "&Клавишни комбинации"
-#: gitk:2110 gitk:2125
+#: gitk:2137 gitk:2152
msgid "&Help"
msgstr "Помо&щ"
-#: gitk:2203 gitk:8681
-msgid "SHA1 ID:"
-msgstr "SHA1:"
+#: gitk:2230 gitk:8767
+msgid "Commit ID:"
+msgstr "Подаване:"
-#: gitk:2247
+#: gitk:2274
msgid "Row"
msgstr "Ред"
-#: gitk:2285
+#: gitk:2312
msgid "Find"
msgstr "ТърÑене"
-#: gitk:2313
+#: gitk:2340
msgid "commit"
msgstr "подаване"
-#: gitk:2317 gitk:2319 gitk:4711 gitk:4734 gitk:4758 gitk:6779 gitk:6851
-#: gitk:6936
+#: gitk:2344 gitk:2346 gitk:4758 gitk:4781 gitk:4805 gitk:6826 gitk:6898
+#: gitk:6983
msgid "containing:"
msgstr "Ñъдържащо:"
-#: gitk:2320 gitk:3550 gitk:3555 gitk:4787
+#: gitk:2347 gitk:3597 gitk:3602 gitk:4834
msgid "touching paths:"
msgstr "в пътищата:"
-#: gitk:2321 gitk:4801
+#: gitk:2348 gitk:4848
msgid "adding/removing string:"
msgstr "добавÑщо/премахващо низ"
-#: gitk:2322 gitk:4803
+#: gitk:2349 gitk:4850
msgid "changing lines matching:"
msgstr "променÑщо редове напаÑващи:"
-#: gitk:2331 gitk:2333 gitk:4790
+#: gitk:2358 gitk:2360 gitk:4837
msgid "Exact"
msgstr "Точно"
-#: gitk:2333 gitk:4878 gitk:6747
+#: gitk:2360 gitk:4925 gitk:6794
msgid "IgnCase"
msgstr "Без региÑтър"
-#: gitk:2333 gitk:4760 gitk:4876 gitk:6743
+#: gitk:2360 gitk:4807 gitk:4923 gitk:6790
msgid "Regexp"
msgstr "Рег. израз"
-#: gitk:2335 gitk:2336 gitk:4898 gitk:4928 gitk:4935 gitk:6872 gitk:6940
+#: gitk:2362 gitk:2363 gitk:4945 gitk:4975 gitk:4982 gitk:6919 gitk:6987
msgid "All fields"
msgstr "Ð’Ñички полета"
-#: gitk:2336 gitk:4895 gitk:4928 gitk:6810
+#: gitk:2363 gitk:4942 gitk:4975 gitk:6857
msgid "Headline"
msgstr "Първи ред"
-#: gitk:2337 gitk:4895 gitk:6810 gitk:6940 gitk:7413
+#: gitk:2364 gitk:4942 gitk:6857 gitk:6987 gitk:7499
msgid "Comments"
msgstr "Коментари"
-#: gitk:2337 gitk:4895 gitk:4900 gitk:4935 gitk:6810 gitk:7348 gitk:8859
-#: gitk:8874
+#: gitk:2364 gitk:4942 gitk:4947 gitk:4982 gitk:6857 gitk:7434 gitk:8945
+#: gitk:8960
msgid "Author"
msgstr "Ðвтор"
-#: gitk:2337 gitk:4895 gitk:6810 gitk:7350
+#: gitk:2364 gitk:4942 gitk:6857 gitk:7436
msgid "Committer"
msgstr "Подаващ"
-#: gitk:2371
+#: gitk:2398
msgid "Search"
msgstr "ТърÑене"
-#: gitk:2379
+#: gitk:2406
msgid "Diff"
msgstr "Разлики"
-#: gitk:2381
+#: gitk:2408
msgid "Old version"
msgstr "Стара верÑиÑ"
-#: gitk:2383
+#: gitk:2410
msgid "New version"
msgstr "Ðова верÑиÑ"
-#: gitk:2386
+#: gitk:2413
msgid "Lines of context"
msgstr "КонтекÑÑ‚ в редове"
-#: gitk:2396
+#: gitk:2423
msgid "Ignore space change"
msgstr "Празните знаци без значение"
-#: gitk:2400 gitk:2402 gitk:7983 gitk:8235
+#: gitk:2427 gitk:2429 gitk:8069 gitk:8321
msgid "Line diff"
msgstr "Поредови разлики"
-#: gitk:2467
+#: gitk:2502
msgid "Patch"
msgstr "Кръпка"
-#: gitk:2469
+#: gitk:2504
msgid "Tree"
msgstr "Дърво"
-#: gitk:2639 gitk:2660
+#: gitk:2674 gitk:2695
msgid "Diff this -> selected"
msgstr "Разлики между това и избраното"
-#: gitk:2640 gitk:2661
+#: gitk:2675 gitk:2696
msgid "Diff selected -> this"
msgstr "Разлики между избраното и това"
-#: gitk:2641 gitk:2662
+#: gitk:2676 gitk:2697
msgid "Make patch"
msgstr "Създаване на кръпка"
-#: gitk:2642 gitk:9283
+#: gitk:2677 gitk:9369
msgid "Create tag"
msgstr "Създаване на етикет"
-#: gitk:2643
-msgid "Copy commit summary"
-msgstr "Копиране на информациÑта за подаване"
+#: gitk:2678
+msgid "Copy commit reference"
+msgstr "Копиране на ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ Ð½Ð° подаване"
-#: gitk:2644 gitk:9414
+#: gitk:2679 gitk:9500
msgid "Write commit to file"
msgstr "Запазване на подаването във файл"
-#: gitk:2645
+#: gitk:2680
msgid "Create new branch"
msgstr "Създаване на нов клон"
-#: gitk:2646
+#: gitk:2681
msgid "Cherry-pick this commit"
msgstr "Отбиране на това подаване"
-#: gitk:2647
+#: gitk:2682
msgid "Reset HEAD branch to here"
msgstr "Привеждане на върха на клона към текущото подаване"
-#: gitk:2648
+#: gitk:2683
msgid "Mark this commit"
msgstr "ОтбелÑзване на това подаване"
-#: gitk:2649
+#: gitk:2684
msgid "Return to mark"
msgstr "Връщане към отбелÑзаното подаване"
-#: gitk:2650
+#: gitk:2685
msgid "Find descendant of this and mark"
msgstr "Откриване и отбелÑзване на наÑледниците"
-#: gitk:2651
+#: gitk:2686
msgid "Compare with marked commit"
msgstr "Сравнение Ñ Ð¾Ñ‚Ð±ÐµÐ»Ñзаното подаване"
-#: gitk:2652 gitk:2663
+#: gitk:2687 gitk:2698
msgid "Diff this -> marked commit"
msgstr "Разлики между това и отбелÑзаното"
-#: gitk:2653 gitk:2664
+#: gitk:2688 gitk:2699
msgid "Diff marked commit -> this"
msgstr "Разлики между отбелÑзаното и това"
-#: gitk:2654
+#: gitk:2689
msgid "Revert this commit"
msgstr "ОтмÑна на това подаване"
-#: gitk:2670
+#: gitk:2705
msgid "Check out this branch"
msgstr "ИзтеглÑне на този клон"
-#: gitk:2671
+#: gitk:2706
msgid "Rename this branch"
msgstr "Преименуване на този клон"
-#: gitk:2672
+#: gitk:2707
msgid "Remove this branch"
msgstr "Изтриване на този клон"
-#: gitk:2673
+#: gitk:2708
msgid "Copy branch name"
msgstr "Копиране на името на клона"
-#: gitk:2680
+#: gitk:2715
msgid "Highlight this too"
msgstr "ОтбелÑзване и на това"
-#: gitk:2681
+#: gitk:2716
msgid "Highlight this only"
msgstr "ОтбелÑзване Ñамо на това"
-#: gitk:2682
+#: gitk:2717
msgid "External diff"
msgstr "Външна програма за разлики"
-#: gitk:2683
+#: gitk:2718
msgid "Blame parent commit"
msgstr "Ðнотиране на родителÑкото подаване"
-#: gitk:2684
+#: gitk:2719
msgid "Copy path"
msgstr "Копиране на пътÑ"
-#: gitk:2691
+#: gitk:2726
msgid "Show origin of this line"
msgstr "Показване на произхода на този ред"
-#: gitk:2692
+#: gitk:2727
msgid "Run git gui blame on this line"
msgstr "Изпълнение на „git gui blame“ върху този ред"
-#: gitk:3036
+#: gitk:3081
msgid "About gitk"
msgstr "ОтноÑно gitk"
-#: gitk:3038
+#: gitk:3083
msgid ""
"\n"
"Gitk - a commit viewer for git\n"
@@ -386,324 +386,324 @@ msgstr ""
"\n"
"Използвайте и разпроÑтранÑвайте при уÑловиÑта на ОПЛ на ГÐУ"
-#: gitk:3046 gitk:3113 gitk:10004
+#: gitk:3091 gitk:3158 gitk:10090
msgid "Close"
msgstr "ЗатварÑне"
-#: gitk:3067
+#: gitk:3112
msgid "Gitk key bindings"
msgstr "Клавишни комбинации"
-#: gitk:3070
+#: gitk:3115
msgid "Gitk key bindings:"
msgstr "Клавишни комбинации:"
-#: gitk:3072
+#: gitk:3117
#, tcl-format
msgid "<%s-Q>\t\tQuit"
msgstr "<%s-Q>\t\tСпиране на програмата"
-#: gitk:3073
+#: gitk:3118
#, tcl-format
msgid "<%s-W>\t\tClose window"
msgstr "<%s-W>\t\tЗатварÑне на прозореца"
-#: gitk:3074
+#: gitk:3119
msgid "<Home>\t\tMove to first commit"
msgstr "<Home>\t\tКъм първото подаване"
-#: gitk:3075
+#: gitk:3120
msgid "<End>\t\tMove to last commit"
msgstr "<End>\t\tКъм поÑледното подаване"
-#: gitk:3076
+#: gitk:3121
msgid "<Up>, p, k\tMove up one commit"
msgstr "<Up>, p, k\tЕдно подаване нагоре"
-#: gitk:3077
+#: gitk:3122
msgid "<Down>, n, j\tMove down one commit"
msgstr "<Down>, n, j\tЕдно подаване надолу"
-#: gitk:3078
+#: gitk:3123
msgid "<Left>, z, h\tGo back in history list"
msgstr "<Left>, z, h\tÐазад в иÑториÑта"
-#: gitk:3079
+#: gitk:3124
msgid "<Right>, x, l\tGo forward in history list"
msgstr "<Right>, x, l\tÐапред в иÑториÑта"
-#: gitk:3080
+#: gitk:3125
#, tcl-format
msgid "<%s-n>\tGo to n-th parent of current commit in history list"
msgstr "<%s-n>\tКъм n-Ñ‚Ð¸Ñ Ñ€Ð¾Ð´Ð¸Ñ‚ÐµÐ» на текущото подаване в иÑториÑта"
-#: gitk:3081
+#: gitk:3126
msgid "<PageUp>\tMove up one page in commit list"
msgstr "<PageUp>\tСтраница нагоре в ÑпиÑъка Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта"
-#: gitk:3082
+#: gitk:3127
msgid "<PageDown>\tMove down one page in commit list"
msgstr "<PageDown>\tСтраница надолу в ÑпиÑъка Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта"
-#: gitk:3083
+#: gitk:3128
#, tcl-format
msgid "<%s-Home>\tScroll to top of commit list"
msgstr "<%s-Home>\tКъм началото на ÑпиÑъка Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта"
-#: gitk:3084
+#: gitk:3129
#, tcl-format
msgid "<%s-End>\tScroll to bottom of commit list"
msgstr "<%s-End>\tКъм ÐºÑ€Ð°Ñ Ð½Ð° ÑпиÑъка Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта"
-#: gitk:3085
+#: gitk:3130
#, tcl-format
msgid "<%s-Up>\tScroll commit list up one line"
msgstr "<%s-Up>\tРед нагоре в ÑпиÑъка Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ"
-#: gitk:3086
+#: gitk:3131
#, tcl-format
msgid "<%s-Down>\tScroll commit list down one line"
msgstr "<%s-Down>\tРед надолу в ÑпиÑъка Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ"
-#: gitk:3087
+#: gitk:3132
#, tcl-format
msgid "<%s-PageUp>\tScroll commit list up one page"
msgstr "<%s-PageUp>\tСтраница нагоре в ÑпиÑъка Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ"
-#: gitk:3088
+#: gitk:3133
#, tcl-format
msgid "<%s-PageDown>\tScroll commit list down one page"
msgstr "<%s-PageDown>\tСтраница надолу в ÑпиÑъка Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ"
-#: gitk:3089
+#: gitk:3134
msgid "<Shift-Up>\tFind backwards (upwards, later commits)"
msgstr "<Shift-Up>\tТърÑене назад (визуално нагоре, иÑторичеÑки — поÑледващи)"
-#: gitk:3090
+#: gitk:3135
msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)"
msgstr ""
"<Shift-Down>\tТърÑене напред (визуално надолу, иÑторичеÑки — предхождащи)"
-#: gitk:3091
+#: gitk:3136
msgid "<Delete>, b\tScroll diff view up one page"
msgstr "<Delete>, b\tСтраница нагоре в изгледа за разлики"
-#: gitk:3092
+#: gitk:3137
msgid "<Backspace>\tScroll diff view up one page"
msgstr "<Backspace>\tСтраница надолу в изгледа за разлики"
-#: gitk:3093
+#: gitk:3138
msgid "<Space>\t\tScroll diff view down one page"
msgstr "<Space>\t\tСтраница надолу в изгледа за разлики"
-#: gitk:3094
+#: gitk:3139
msgid "u\t\tScroll diff view up 18 lines"
msgstr "u\t\t18 реда нагоре в изгледа за разлики"
-#: gitk:3095
+#: gitk:3140
msgid "d\t\tScroll diff view down 18 lines"
msgstr "d\t\t18 реда надолу в изгледа за разлики"
-#: gitk:3096
+#: gitk:3141
#, tcl-format
msgid "<%s-F>\t\tFind"
msgstr "<%s-F>\t\tТърÑене"
-#: gitk:3097
+#: gitk:3142
#, tcl-format
msgid "<%s-G>\t\tMove to next find hit"
msgstr "<%s-G>\t\tКъм Ñледващата поÑва"
-#: gitk:3098
+#: gitk:3143
msgid "<Return>\tMove to next find hit"
msgstr "<Return>\tКъм Ñледващата поÑва"
-#: gitk:3099
+#: gitk:3144
msgid "g\t\tGo to commit"
msgstr "g\t\tКъм поÑледното подаване"
-#: gitk:3100
+#: gitk:3145
msgid "/\t\tFocus the search box"
msgstr "/\t\tÐ¤Ð¾ÐºÑƒÑ Ð²ÑŠÑ€Ñ…Ñƒ полето за търÑене"
-#: gitk:3101
+#: gitk:3146
msgid "?\t\tMove to previous find hit"
msgstr "?\t\tКъм предишната поÑва"
-#: gitk:3102
+#: gitk:3147
msgid "f\t\tScroll diff view to next file"
msgstr "f\t\tСледващ файл в изгледа за разлики"
-#: gitk:3103
+#: gitk:3148
#, tcl-format
msgid "<%s-S>\t\tSearch for next hit in diff view"
msgstr "<%s-S>\t\tТърÑене на Ñледващата поÑва в изгледа за разлики"
-#: gitk:3104
+#: gitk:3149
#, tcl-format
msgid "<%s-R>\t\tSearch for previous hit in diff view"
msgstr "<%s-R>\t\tТърÑене на предишната поÑва в изгледа за разлики"
-#: gitk:3105
+#: gitk:3150
#, tcl-format
msgid "<%s-KP+>\tIncrease font size"
msgstr "<%s-KP+>\tПо-голÑм размер на шрифта"
-#: gitk:3106
+#: gitk:3151
#, tcl-format
msgid "<%s-plus>\tIncrease font size"
msgstr "<%s-plus>\tПо-голÑм размер на шрифта"
-#: gitk:3107
+#: gitk:3152
#, tcl-format
msgid "<%s-KP->\tDecrease font size"
msgstr "<%s-KP->\tПо-малък размер на шрифта"
-#: gitk:3108
+#: gitk:3153
#, tcl-format
msgid "<%s-minus>\tDecrease font size"
msgstr "<%s-minus>\tПо-малък размер на шрифта"
-#: gitk:3109
+#: gitk:3154
msgid "<F5>\t\tUpdate"
msgstr "<F5>\t\tОбновÑване"
-#: gitk:3574 gitk:3583
+#: gitk:3621 gitk:3630
#, tcl-format
msgid "Error creating temporary directory %s:"
msgstr "Грешка при Ñъздаването на временната Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ â€ž%s“:"
-#: gitk:3596
+#: gitk:3643
#, tcl-format
msgid "Error getting \"%s\" from %s:"
msgstr "Грешка при получаването на „%s“ от %s:"
-#: gitk:3659
+#: gitk:3706
msgid "command failed:"
msgstr "неуÑпешно изпълнение на команда:"
-#: gitk:3808
+#: gitk:3855
msgid "No such commit"
msgstr "Такова подаване нÑма"
-#: gitk:3822
+#: gitk:3869
msgid "git gui blame: command failed:"
msgstr "„git gui blame“: неуÑпешно изпълнение на команда:"
-#: gitk:3853
+#: gitk:3900
#, tcl-format
msgid "Couldn't read merge head: %s"
-msgstr "Върхът за Ñливане не може да бъде прочетен: %s"
+msgstr "Върхът за Ñливане не може да Ñе прочете: %s"
-#: gitk:3861
+#: gitk:3908
#, tcl-format
msgid "Error reading index: %s"
msgstr "Грешка при прочитане на индекÑа: %s"
-#: gitk:3886
+#: gitk:3933
#, tcl-format
msgid "Couldn't start git blame: %s"
-msgstr "Командата „git blame“ не може да бъде Ñтартирана: %s"
+msgstr "Командата „git blame“ не може да Ñе Ñтартира: %s"
-#: gitk:3889 gitk:6778
+#: gitk:3936 gitk:6825
msgid "Searching"
msgstr "ТърÑене"
-#: gitk:3921
+#: gitk:3968
#, tcl-format
msgid "Error running git blame: %s"
msgstr "Грешка при изпълнението на „git blame“: %s"
-#: gitk:3949
+#: gitk:3996
#, tcl-format
msgid "That line comes from commit %s, which is not in this view"
msgstr "Този ред идва от подаването %s, което не е в изгледа"
-#: gitk:3963
+#: gitk:4010
msgid "External diff viewer failed:"
msgstr "ÐеуÑпешно изпълнение на външната програма за разлики:"
-#: gitk:4067
+#: gitk:4114
msgid "All files"
msgstr "Ð’Ñички файлове"
-#: gitk:4091
+#: gitk:4138
msgid "View"
msgstr "Изглед"
-#: gitk:4094
+#: gitk:4141
msgid "Gitk view definition"
msgstr "Ð”ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ Ð½Ð° изглед в Gitk"
-#: gitk:4098
+#: gitk:4145
msgid "Remember this view"
msgstr "Запазване на този изглед"
-#: gitk:4099
+#: gitk:4146
msgid "References (space separated list):"
msgstr "Указатели (ÑпиÑък Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¸Ñ‚ÐµÐ» интервал):"
-#: gitk:4100
+#: gitk:4147
msgid "Branches & tags:"
msgstr "Клони и етикети:"
-#: gitk:4101
+#: gitk:4148
msgid "All refs"
msgstr "Ð’Ñички указатели"
-#: gitk:4102
+#: gitk:4149
msgid "All (local) branches"
msgstr "Ð’Ñички (локални) клони"
-#: gitk:4103
+#: gitk:4150
msgid "All tags"
msgstr "Ð’Ñички етикети"
-#: gitk:4104
+#: gitk:4151
msgid "All remote-tracking branches"
msgstr "Ð’Ñички ÑледÑщи клони"
-#: gitk:4105
+#: gitk:4152
msgid "Commit Info (regular expressions):"
msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° подаване (рег. изр.):"
-#: gitk:4106
+#: gitk:4153
msgid "Author:"
msgstr "Ðвтор:"
-#: gitk:4107
+#: gitk:4154
msgid "Committer:"
msgstr "Подал:"
-#: gitk:4108
+#: gitk:4155
msgid "Commit Message:"
msgstr "Съобщение при подаване:"
-#: gitk:4109
+#: gitk:4156
msgid "Matches all Commit Info criteria"
msgstr "Съвпадение по вÑички характериÑтики на подаването"
-#: gitk:4110
+#: gitk:4157
msgid "Matches no Commit Info criteria"
msgstr "Ðе Ñъвпада по Ð½Ð¸ÐºÐ¾Ñ Ð¾Ñ‚ характериÑтиките на подаването"
-#: gitk:4111
+#: gitk:4158
msgid "Changes to Files:"
msgstr "Промени по файловете:"
-#: gitk:4112
+#: gitk:4159
msgid "Fixed String"
msgstr "ДоÑловен низ"
-#: gitk:4113
+#: gitk:4160
msgid "Regular Expression"
msgstr "РегулÑрен израз"
-#: gitk:4114
+#: gitk:4161
msgid "Search string:"
msgstr "Ðиз за търÑене:"
-#: gitk:4115
+#: gitk:4162
msgid ""
"Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 "
"15:27:38\"):"
@@ -711,204 +711,208 @@ msgstr ""
"Дата на подаване („2 weeks ago“ (преди 2 Ñедмици), „2009-03-17 15:27:38“, "
"„March 17, 2009 15:27:38“):"
-#: gitk:4116
+#: gitk:4163
msgid "Since:"
msgstr "От:"
-#: gitk:4117
+#: gitk:4164
msgid "Until:"
msgstr "До:"
-#: gitk:4118
+#: gitk:4165
msgid "Limit and/or skip a number of revisions (positive integer):"
msgstr ""
"Ограничаване и/или преÑкачане на определен брой верÑии (неотрицателно цÑло "
"чиÑло):"
-#: gitk:4119
+#: gitk:4166
msgid "Number to show:"
msgstr "Брой показани:"
-#: gitk:4120
+#: gitk:4167
msgid "Number to skip:"
msgstr "Брой преÑкочени:"
-#: gitk:4121
+#: gitk:4168
msgid "Miscellaneous options:"
msgstr "Разни:"
-#: gitk:4122
+#: gitk:4169
msgid "Strictly sort by date"
msgstr "Подреждане по дата"
-#: gitk:4123
+#: gitk:4170
msgid "Mark branch sides"
msgstr "ОтбелÑзване на Ñтраните по клона"
-#: gitk:4124
+#: gitk:4171
msgid "Limit to first parent"
msgstr "Само Ð¿ÑŠÑ€Ð²Ð¸Ñ Ñ€Ð¾Ð´Ð¸Ñ‚ÐµÐ»"
-#: gitk:4125
+#: gitk:4172
msgid "Simple history"
msgstr "ОпроÑтена иÑториÑ"
-#: gitk:4126
+#: gitk:4173
msgid "Additional arguments to git log:"
msgstr "Допълнителни аргументи към „git log“:"
-#: gitk:4127
+#: gitk:4174
msgid "Enter files and directories to include, one per line:"
msgstr "Въведете файловете и директориите за включване, по елемент на ред"
-#: gitk:4128
+#: gitk:4175
msgid "Command to generate more commits to include:"
msgstr ""
-"Команда за генерирането на допълнителни подаваниÑ, които да бъдат включени:"
+"Команда за генерирането на допълнителни подаваниÑ, които да Ñе включат:"
-#: gitk:4252
+#: gitk:4299
msgid "Gitk: edit view"
msgstr "Gitk: редактиране на изглед"
-#: gitk:4260
+#: gitk:4307
msgid "-- criteria for selecting revisions"
msgstr "— критерии за избор на верÑии"
-#: gitk:4265
+#: gitk:4312
msgid "View Name"
msgstr "Име на изглед"
-#: gitk:4340
+#: gitk:4387
msgid "Apply (F5)"
msgstr "Прилагане (F5)"
-#: gitk:4378
+#: gitk:4425
msgid "Error in commit selection arguments:"
msgstr "Грешка в аргументите за избор на подаваниÑ:"
-#: gitk:4433 gitk:4486 gitk:4948 gitk:4962 gitk:6232 gitk:12524 gitk:12525
+#: gitk:4480 gitk:4533 gitk:4995 gitk:5009 gitk:6279 gitk:12679 gitk:12680
msgid "None"
msgstr "ÐÑма"
-#: gitk:5045 gitk:5050
+#: gitk:5092 gitk:5097
msgid "Descendant"
msgstr "ÐаÑледник"
-#: gitk:5046
+#: gitk:5093
msgid "Not descendant"
msgstr "Ðе е наÑледник"
-#: gitk:5053 gitk:5058
+#: gitk:5100 gitk:5105
msgid "Ancestor"
msgstr "ПредшеÑтвеник"
-#: gitk:5054
+#: gitk:5101
msgid "Not ancestor"
msgstr "Ðе е предшеÑтвеник"
-#: gitk:5348
+#: gitk:5395
msgid "Local changes checked in to index but not committed"
msgstr "Локални промени добавени към индекÑа, но неподадени"
-#: gitk:5384
+#: gitk:5431
msgid "Local uncommitted changes, not checked in to index"
msgstr "Локални промени извън индекÑа"
-#: gitk:7158
+#: gitk:7179
+msgid "Error starting web browser:"
+msgstr "Грешка при Ñтартирането на уеб браузър:"
+
+#: gitk:7240
msgid "and many more"
msgstr "и още много"
-#: gitk:7161
+#: gitk:7243
msgid "many"
msgstr "много"
-#: gitk:7352
+#: gitk:7438
msgid "Tags:"
msgstr "Етикети:"
-#: gitk:7369 gitk:7375 gitk:8854
+#: gitk:7455 gitk:7461 gitk:8940
msgid "Parent"
msgstr "Родител"
-#: gitk:7380
+#: gitk:7466
msgid "Child"
msgstr "Дете"
-#: gitk:7389
+#: gitk:7475
msgid "Branch"
msgstr "Клон"
-#: gitk:7392
+#: gitk:7478
msgid "Follows"
msgstr "Следва"
-#: gitk:7395
+#: gitk:7481
msgid "Precedes"
msgstr "ПредшеÑтва"
-#: gitk:7990
+#: gitk:8076
#, tcl-format
msgid "Error getting diffs: %s"
msgstr "Грешка при получаването на разликите: %s"
-#: gitk:8679
+#: gitk:8765
msgid "Goto:"
msgstr "Към ред:"
-#: gitk:8700
+#: gitk:8786
#, tcl-format
-msgid "Short SHA1 id %s is ambiguous"
-msgstr "Съкратената Ñума по SHA1 %s не е еднозначна"
+msgid "Short commit ID %s is ambiguous"
+msgstr "Съкратената контролна Ñума %s не е еднозначна"
-#: gitk:8707
+#: gitk:8793
#, tcl-format
msgid "Revision %s is not known"
msgstr "Ðепозната верÑÐ¸Ñ %s"
-#: gitk:8717
+#: gitk:8803
#, tcl-format
-msgid "SHA1 id %s is not known"
-msgstr "Ðепозната Ñума по SHA1 %s"
+msgid "Commit ID %s is not known"
+msgstr "Ðепозната контролна Ñума %s"
-#: gitk:8719
+#: gitk:8805
#, tcl-format
msgid "Revision %s is not in the current view"
msgstr "ВерÑÐ¸Ñ %s не е в Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ð¸Ð·Ð³Ð»ÐµÐ´"
-#: gitk:8861 gitk:8876
+#: gitk:8947 gitk:8962
msgid "Date"
msgstr "Дата"
-#: gitk:8864
+#: gitk:8950
msgid "Children"
msgstr "Деца"
-#: gitk:8927
+#: gitk:9013
#, tcl-format
msgid "Reset %s branch to here"
msgstr "ЗанулÑване на клона „%s“ към текущото подаване"
-#: gitk:8929
+#: gitk:9015
msgid "Detached head: can't reset"
msgstr "ÐеÑвързан връх: невъзможно занулÑване"
-#: gitk:9034 gitk:9040
+#: gitk:9120 gitk:9126
msgid "Skipping merge commit "
msgstr "ПропуÑкане на подаването на Ñливането"
-#: gitk:9049 gitk:9054
+#: gitk:9135 gitk:9140
msgid "Error getting patch ID for "
msgstr "Грешка при получаването на идентификатора на "
-#: gitk:9050 gitk:9055
+#: gitk:9136 gitk:9141
msgid " - stopping\n"
msgstr " — Ñпиране\n"
-#: gitk:9060 gitk:9063 gitk:9071 gitk:9085 gitk:9094
+#: gitk:9146 gitk:9149 gitk:9157 gitk:9171 gitk:9180
msgid "Commit "
msgstr "Подаване"
-#: gitk:9064
+#: gitk:9150
msgid ""
" is the same patch as\n"
" "
@@ -916,7 +920,7 @@ msgstr ""
" е Ñъщата кръпка като\n"
" "
-#: gitk:9072
+#: gitk:9158
msgid ""
" differs from\n"
" "
@@ -924,7 +928,7 @@ msgstr ""
" Ñе различава от\n"
" "
-#: gitk:9074
+#: gitk:9160
msgid ""
"Diff of commits:\n"
"\n"
@@ -932,147 +936,147 @@ msgstr ""
"Разлика между подаваниÑта:\n"
"\n"
-#: gitk:9086 gitk:9095
+#: gitk:9172 gitk:9181
#, tcl-format
msgid " has %s children - stopping\n"
msgstr " има %s деца — Ñпиране\n"
-#: gitk:9114
+#: gitk:9200
#, tcl-format
msgid "Error writing commit to file: %s"
msgstr "Грешка при запазването на подаването във файл: %s"
-#: gitk:9120
+#: gitk:9206
#, tcl-format
msgid "Error diffing commits: %s"
msgstr "Грешка при изчиÑлÑването на разликите между подаваниÑта: %s"
-#: gitk:9166
+#: gitk:9252
msgid "Top"
msgstr "Ðай-горе"
-#: gitk:9167
+#: gitk:9253
msgid "From"
msgstr "От"
-#: gitk:9172
+#: gitk:9258
msgid "To"
msgstr "До"
-#: gitk:9196
+#: gitk:9282
msgid "Generate patch"
msgstr "Генериране на кръпка"
-#: gitk:9198
+#: gitk:9284
msgid "From:"
msgstr "От:"
-#: gitk:9207
+#: gitk:9293
msgid "To:"
msgstr "До:"
-#: gitk:9216
+#: gitk:9302
msgid "Reverse"
msgstr "Обръщане"
-#: gitk:9218 gitk:9428
+#: gitk:9304 gitk:9514
msgid "Output file:"
msgstr "Запазване във файла:"
-#: gitk:9224
+#: gitk:9310
msgid "Generate"
msgstr "Генериране"
-#: gitk:9262
+#: gitk:9348
msgid "Error creating patch:"
msgstr "Грешка при Ñъздаването на кръпка:"
-#: gitk:9285 gitk:9416 gitk:9504
+#: gitk:9371 gitk:9502 gitk:9590
msgid "ID:"
msgstr "Идентификатор:"
-#: gitk:9294
+#: gitk:9380
msgid "Tag name:"
msgstr "Име на етикет:"
-#: gitk:9297
+#: gitk:9383
msgid "Tag message is optional"
msgstr "Съобщението за етикет е незадължително"
-#: gitk:9299
+#: gitk:9385
msgid "Tag message:"
msgstr "Съобщение за етикет:"
-#: gitk:9303 gitk:9474
+#: gitk:9389 gitk:9560
msgid "Create"
msgstr "Създаване"
-#: gitk:9321
+#: gitk:9407
msgid "No tag name specified"
msgstr "ЛипÑва име на етикет"
-#: gitk:9325
+#: gitk:9411
#, tcl-format
msgid "Tag \"%s\" already exists"
msgstr "Етикетът „%s“ вече ÑъщеÑтвува"
-#: gitk:9335
+#: gitk:9421
msgid "Error creating tag:"
msgstr "Грешка при Ñъздаването на етикет:"
-#: gitk:9425
+#: gitk:9511
msgid "Command:"
msgstr "Команда:"
-#: gitk:9433
+#: gitk:9519
msgid "Write"
msgstr "Запазване"
-#: gitk:9451
+#: gitk:9537
msgid "Error writing commit:"
msgstr "Грешка при запазването на подаването:"
-#: gitk:9473
+#: gitk:9559
msgid "Create branch"
msgstr "Създаване на клон"
-#: gitk:9489
+#: gitk:9575
#, tcl-format
msgid "Rename branch %s"
msgstr "Преименуване на клона „%s“"
-#: gitk:9490
+#: gitk:9576
msgid "Rename"
msgstr "Преименуване"
-#: gitk:9514
+#: gitk:9600
msgid "Name:"
msgstr "Име:"
-#: gitk:9538
+#: gitk:9624
msgid "Please specify a name for the new branch"
msgstr "Укажете име за Ð½Ð¾Ð²Ð¸Ñ ÐºÐ»Ð¾Ð½"
-#: gitk:9543
+#: gitk:9629
#, tcl-format
msgid "Branch '%s' already exists. Overwrite?"
-msgstr "Клонът „%s“ вече ÑъщеÑтвува. Да бъде ли презапиÑан?"
+msgstr "Клонът „%s“ вече ÑъщеÑтвува. Да Ñе презапише ли?"
-#: gitk:9587
+#: gitk:9673
msgid "Please specify a new name for the branch"
msgstr "Укажете ново име за клона"
-#: gitk:9650
+#: gitk:9736
#, tcl-format
msgid "Commit %s is already included in branch %s -- really re-apply it?"
msgstr ""
-"Подаването „%s“ вече е включено в клона „%s“ — да бъде ли приложено отново?"
+"Подаването „%s“ вече е включено в клона „%s“ — да Ñе приложи ли отново?"
-#: gitk:9655
+#: gitk:9741
msgid "Cherry-picking"
msgstr "Отбиране"
-#: gitk:9664
+#: gitk:9750
#, tcl-format
msgid ""
"Cherry-pick failed because of local changes to file '%s'.\n"
@@ -1081,7 +1085,7 @@ msgstr ""
"ÐеуÑпешно отбиране, защото във файла „%s“ има локални промени.\n"
"Подайте, занулете или ги Ñкатайте и пробвайте отново."
-#: gitk:9670
+#: gitk:9756
msgid ""
"Cherry-pick failed because of merge conflict.\n"
"Do you wish to run git citool to resolve it?"
@@ -1089,20 +1093,20 @@ msgstr ""
"ÐеуÑпешно отбиране поради конфликти при Ñливане.\n"
"ИÑкате ли да ги коригирате чрез „git citool“?"
-#: gitk:9686 gitk:9744
+#: gitk:9772 gitk:9830
msgid "No changes committed"
msgstr "Ðе Ñа подадени промени"
-#: gitk:9713
+#: gitk:9799
#, tcl-format
msgid "Commit %s is not included in branch %s -- really revert it?"
-msgstr "Подаването „%s“ не е включено в клона „%s“. Да бъде ли отменено?"
+msgstr "Подаването „%s“ не е включено в клона „%s“. Да Ñе отменени ли?"
-#: gitk:9718
+#: gitk:9804
msgid "Reverting"
msgstr "ОтмÑна"
-#: gitk:9726
+#: gitk:9812
#, tcl-format
msgid ""
"Revert failed because of local changes to the following files:%s Please "
@@ -1111,7 +1115,7 @@ msgstr ""
"ÐеуÑпешна отмÑна, защото във файла „%s“ има локални промени.\n"
"Подайте, занулете или ги Ñкатайте и пробвайте отново."
-#: gitk:9730
+#: gitk:9816
msgid ""
"Revert failed because of merge conflict.\n"
" Do you wish to run git citool to resolve it?"
@@ -1119,53 +1123,53 @@ msgstr ""
"ÐеуÑпешно отмÑна поради конфликти при Ñливане.\n"
"ИÑкате ли да ги коригирате чрез „git citool“?"
-#: gitk:9773
+#: gitk:9859
msgid "Confirm reset"
msgstr "Потвърждаване на занулÑването"
-#: gitk:9775
+#: gitk:9861
#, tcl-format
msgid "Reset branch %s to %s?"
msgstr "Да Ñе занули ли клонът „%s“ към „%s“?"
-#: gitk:9777
+#: gitk:9863
msgid "Reset type:"
msgstr "Вид занулÑване:"
-#: gitk:9780
+#: gitk:9866
msgid "Soft: Leave working tree and index untouched"
msgstr "Слабо: работното дърво и индекÑа оÑтават Ñъщите"
-#: gitk:9783
+#: gitk:9869
msgid "Mixed: Leave working tree untouched, reset index"
msgstr "СмеÑено: работното дърво оÑтава Ñъщото, индекÑÑŠÑ‚ Ñе занулÑва"
-#: gitk:9786
+#: gitk:9872
msgid ""
"Hard: Reset working tree and index\n"
"(discard ALL local changes)"
msgstr ""
"Силно: занулÑване и на работното дърво, и на индекÑа\n"
-"(ВСИЧКИ локални промени ще бъдат безвъзвратно загубени)"
+"(ВСИЧКИ локални промени ще Ñе загубÑÑ‚ безвъзвратно)"
-#: gitk:9803
+#: gitk:9889
msgid "Resetting"
msgstr "ЗанулÑване"
-#: gitk:9876
+#: gitk:9962
#, tcl-format
msgid "A local branch named %s exists already"
msgstr "Вече ÑъщеÑтвува локален клон „%s“."
-#: gitk:9884
+#: gitk:9970
msgid "Checking out"
msgstr "ИзтеглÑне"
-#: gitk:9943
+#: gitk:10029
msgid "Cannot delete the currently checked-out branch"
-msgstr "Текущо изтеглениÑÑ‚ клон не може да бъде изтрит"
+msgstr "Текущо изтеглениÑÑ‚ клон не може да Ñе изтрие"
-#: gitk:9949
+#: gitk:10035
#, tcl-format
msgid ""
"The commits on branch %s aren't on any other branch.\n"
@@ -1174,16 +1178,16 @@ msgstr ""
"ПодаваниÑта на клона „%s“ не Ñа на никой друг клон.\n"
"ÐаиÑтина ли иÑкате да изтриете клона „%s“?"
-#: gitk:9980
+#: gitk:10066
#, tcl-format
msgid "Tags and heads: %s"
msgstr "Етикети и върхове: %s"
-#: gitk:9997
+#: gitk:10083
msgid "Filter"
msgstr "Филтриране"
-#: gitk:10293
+#: gitk:10390
msgid ""
"Error reading commit topology information; branch and preceding/following "
"tag information will be incomplete."
@@ -1191,201 +1195,237 @@ msgstr ""
"Грешка при прочитането на топологиÑта на подаваниÑта. ИнформациÑта за клона "
"и предшеÑтващите/Ñледващите етикети ще е непълна."
-#: gitk:11270
+#: gitk:11367
msgid "Tag"
msgstr "Етикет"
-#: gitk:11274
+#: gitk:11371
msgid "Id"
msgstr "Идентификатор"
-#: gitk:11357
+#: gitk:11454
msgid "Gitk font chooser"
msgstr "Избор на шрифт за Gitk"
-#: gitk:11374
+#: gitk:11471
msgid "B"
msgstr "Ч"
-#: gitk:11377
+#: gitk:11474
msgid "I"
msgstr "К"
-#: gitk:11495
+#: gitk:11593
msgid "Commit list display options"
msgstr "ÐаÑтройки на ÑпиÑъка Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ"
-#: gitk:11498
+#: gitk:11596
msgid "Maximum graph width (lines)"
msgstr "МакÑимална широчина на графа (в редове)"
-#: gitk:11502
+#: gitk:11600
#, no-tcl-format
msgid "Maximum graph width (% of pane)"
msgstr "МакÑимална широчина на графа (% от панела)"
-#: gitk:11505
+#: gitk:11603
msgid "Show local changes"
msgstr "Показване на локалните промени"
-#: gitk:11508
-msgid "Auto-select SHA1 (length)"
-msgstr "Ðвтоматично избиране на SHA1 (дължина)"
-
-#: gitk:11512
+#: gitk:11606
msgid "Hide remote refs"
msgstr "Скриване на отдалечените указатели"
-#: gitk:11516
+#: gitk:11610
+msgid "Copy commit ID to clipboard"
+msgstr "Копиране на контролната Ñума към буфера за обмен"
+
+#: gitk:11614
+msgid "Copy commit ID to X11 selection"
+msgstr "Копиране на контролната Ñума в ÑелекциÑта на X11"
+
+#: gitk:11619
+msgid "Length of commit ID to copy"
+msgstr "Дължина на контролната Ñума, коÑто Ñе копира"
+
+#: gitk:11622
msgid "Diff display options"
msgstr "ÐаÑтройки на показването на разликите"
-#: gitk:11518
+#: gitk:11624
msgid "Tab spacing"
msgstr "Широчина на табулатора"
-#: gitk:11521
+#: gitk:11628
+msgid "Wrap comment text"
+msgstr "ПренаÑÑне на думите в коментарите"
+
+#: gitk:11633
+msgid "Wrap other text"
+msgstr "ПренаÑÑне на Ð´Ñ€ÑƒÐ³Ð¸Ñ Ñ‚ÐµÐºÑÑ‚"
+
+#: gitk:11638
msgid "Display nearby tags/heads"
msgstr "Извеждане на близките етикети и върхове"
-#: gitk:11524
+#: gitk:11641
msgid "Maximum # tags/heads to show"
msgstr "МакÑимален брой етикети/върхове за показване"
-#: gitk:11527
+#: gitk:11644
msgid "Limit diffs to listed paths"
msgstr "Разлика Ñамо в избраните пътища"
-#: gitk:11530
+#: gitk:11647
msgid "Support per-file encodings"
msgstr "Поддръжка на различни ÐºÐ¾Ð´Ð¸Ñ€Ð°Ð½Ð¸Ñ Ð·Ð° вÑеки файл"
-#: gitk:11536 gitk:11683
+#: gitk:11653 gitk:11820
msgid "External diff tool"
msgstr "Външен инÑтрумент за разлики"
-#: gitk:11537
+#: gitk:11654
msgid "Choose..."
msgstr "Избор…"
-#: gitk:11542
+#: gitk:11661
+msgid "Web browser"
+msgstr "Уеб браузър"
+
+#: gitk:11666
msgid "General options"
msgstr "Общи наÑтройки"
-#: gitk:11545
+#: gitk:11669
msgid "Use themed widgets"
msgstr "Използване на тема за графичните обекти"
-#: gitk:11547
+#: gitk:11671
msgid "(change requires restart)"
msgstr "(промÑната изиÑква реÑтартиране на Gitk)"
-#: gitk:11549
+#: gitk:11673
msgid "(currently unavailable)"
msgstr "(в момента недоÑтъпно)"
-#: gitk:11560
+#: gitk:11685
msgid "Colors: press to choose"
msgstr "Цветове: избира Ñе Ñ Ð½Ð°Ñ‚Ð¸Ñкане"
-#: gitk:11563
+#: gitk:11688
msgid "Interface"
msgstr "ИнтерфейÑ"
-#: gitk:11564
+#: gitk:11689
msgid "interface"
msgstr "интерфейÑ"
-#: gitk:11567
+#: gitk:11692
msgid "Background"
msgstr "Фон"
-#: gitk:11568 gitk:11598
+#: gitk:11693 gitk:11735
msgid "background"
msgstr "фон"
-#: gitk:11571
+#: gitk:11696
msgid "Foreground"
msgstr "Знаци"
-#: gitk:11572
+#: gitk:11697
msgid "foreground"
msgstr "знаци"
-#: gitk:11575
+#: gitk:11700
msgid "Diff: old lines"
msgstr "Разлика: Ñтари редове"
-#: gitk:11576
+#: gitk:11701
msgid "diff old lines"
msgstr "разлика, Ñтари редове"
-#: gitk:11580
+#: gitk:11705
+msgid "Diff: old lines bg"
+msgstr "Разлика: фон на Ñтари редове"
+
+#: gitk:11707
+msgid "diff old lines bg"
+msgstr "разлика, фон на Ñтари редове"
+
+#: gitk:11711
msgid "Diff: new lines"
msgstr "Разлика: нови редове"
-#: gitk:11581
+#: gitk:11712
msgid "diff new lines"
msgstr "разлика, нови редове"
-#: gitk:11585
+#: gitk:11716
+msgid "Diff: new lines bg"
+msgstr "Разлика: фон на нови редове"
+
+#: gitk:11718
+msgid "diff new lines bg"
+msgstr "разлика, фон на нови редове"
+
+#: gitk:11722
msgid "Diff: hunk header"
msgstr "Разлика: начало на парче"
-#: gitk:11587
+#: gitk:11724
msgid "diff hunk header"
msgstr "разлика, начало на парче"
-#: gitk:11591
+#: gitk:11728
msgid "Marked line bg"
msgstr "Фон на отбелÑзан ред"
-#: gitk:11593
+#: gitk:11730
msgid "marked line background"
msgstr "фон на отбелÑзан ред"
-#: gitk:11597
+#: gitk:11734
msgid "Select bg"
msgstr "Избор на фон"
-#: gitk:11606
+#: gitk:11743
msgid "Fonts: press to choose"
msgstr "Шрифтове: избира Ñе Ñ Ð½Ð°Ñ‚Ð¸Ñкане"
-#: gitk:11608
+#: gitk:11745
msgid "Main font"
msgstr "ОÑновен шрифт"
-#: gitk:11609
+#: gitk:11746
msgid "Diff display font"
msgstr "Шрифт за разликите"
-#: gitk:11610
+#: gitk:11747
msgid "User interface font"
msgstr "Шрифт на интерфейÑа"
-#: gitk:11632
+#: gitk:11769
msgid "Gitk preferences"
msgstr "ÐаÑтройки на Gitk"
-#: gitk:11641
+#: gitk:11778
msgid "General"
msgstr "Общи"
-#: gitk:11642
+#: gitk:11779
msgid "Colors"
msgstr "Цветове"
-#: gitk:11643
+#: gitk:11780
msgid "Fonts"
msgstr "Шрифтове"
-#: gitk:11693
+#: gitk:11830
#, tcl-format
msgid "Gitk: choose color for %s"
msgstr "Gitk: избор на цвÑÑ‚ на „%s“"
-#: gitk:12206
+#: gitk:12350
msgid ""
"Sorry, gitk cannot run with this version of Tcl/Tk.\n"
" Gitk requires at least Tcl/Tk 8.4."
@@ -1393,15 +1433,15 @@ msgstr ""
"Тази верÑÐ¸Ñ Ð½Ð° Tcl/Tk не Ñе поддържа от Gitk.\n"
" Ðеобходима ви е поне Tcl/Tk 8.4."
-#: gitk:12416
+#: gitk:12571
msgid "Cannot find a git repository here."
msgstr "Тук липÑва хранилище на Git."
-#: gitk:12463
+#: gitk:12618
#, tcl-format
msgid "Ambiguous argument '%s': both revision and filename"
msgstr "Ðееднозначен аргумент „%s“: има и такава верÑиÑ, и такъв файл"
-#: gitk:12475
+#: gitk:12630
msgid "Bad arguments to gitk:"
msgstr "Ðеправилни аргументи на gitk:"
diff --git a/graph.c b/graph.c
index 52205f75c3..26f6fbf000 100644
--- a/graph.c
+++ b/graph.c
@@ -1,4 +1,3 @@
-#define USE_THE_REPOSITORY_VARIABLE
#define DISABLE_SIGN_COMPARE_WARNINGS
#include "git-compat-util.h"
@@ -351,7 +350,7 @@ struct git_graph *graph_init(struct rev_info *opt)
if (!column_colors) {
char *string;
- if (git_config_get_string("log.graphcolors", &string)) {
+ if (repo_config_get_string(opt->repo, "log.graphcolors", &string)) {
/* not configured -- use default */
graph_set_column_colors(column_colors_ansi,
column_colors_ansi_max);
diff --git a/http.c b/http.c
index c8fc15aa11..f08b2ae474 100644
--- a/http.c
+++ b/http.c
@@ -609,7 +609,7 @@ static void init_curl_http_auth(CURL *result)
}
}
- credential_fill(&http_auth, 1);
+ credential_fill(the_repository, &http_auth, 1);
if (http_auth.password) {
if (always_auth_proactively()) {
@@ -652,7 +652,7 @@ static void init_curl_proxy_auth(CURL *result)
{
if (proxy_auth.username) {
if (!proxy_auth.password && !proxy_auth.credential)
- credential_fill(&proxy_auth, 1);
+ credential_fill(the_repository, &proxy_auth, 1);
set_proxyauth_name_password(result);
}
@@ -686,7 +686,7 @@ static int has_cert_password(void)
cert_auth.host = xstrdup("");
cert_auth.username = xstrdup("");
cert_auth.path = xstrdup(ssl_cert);
- credential_fill(&cert_auth, 0);
+ credential_fill(the_repository, &cert_auth, 0);
}
return 1;
}
@@ -700,7 +700,7 @@ static int has_proxy_cert_password(void)
proxy_cert_auth.host = xstrdup("");
proxy_cert_auth.username = xstrdup("");
proxy_cert_auth.path = xstrdup(http_proxy_ssl_cert);
- credential_fill(&proxy_cert_auth, 0);
+ credential_fill(the_repository, &proxy_cert_auth, 0);
}
return 1;
}
@@ -1784,9 +1784,9 @@ static int handle_curl_result(struct slot_results *results)
curl_errorstr, sizeof(curl_errorstr));
if (results->curl_result == CURLE_OK) {
- credential_approve(&http_auth);
- credential_approve(&proxy_auth);
- credential_approve(&cert_auth);
+ credential_approve(the_repository, &http_auth);
+ credential_approve(the_repository, &proxy_auth);
+ credential_approve(the_repository, &cert_auth);
return HTTP_OK;
} else if (results->curl_result == CURLE_SSL_CERTPROBLEM) {
/*
@@ -1795,7 +1795,7 @@ static int handle_curl_result(struct slot_results *results)
* with the certificate. So we reject the credential to
* avoid caching or saving a bad password.
*/
- credential_reject(&cert_auth);
+ credential_reject(the_repository, &cert_auth);
return HTTP_NOAUTH;
} else if (results->curl_result == CURLE_SSL_PINNEDPUBKEYNOTMATCH) {
return HTTP_NOMATCHPUBLICKEY;
@@ -1808,7 +1808,7 @@ static int handle_curl_result(struct slot_results *results)
credential_clear_secrets(&http_auth);
return HTTP_REAUTH;
}
- credential_reject(&http_auth);
+ credential_reject(the_repository, &http_auth);
if (always_auth_proactively())
http_proactive_auth = PROACTIVE_AUTH_NONE;
return HTTP_NOAUTH;
@@ -1822,7 +1822,7 @@ static int handle_curl_result(struct slot_results *results)
}
} else {
if (results->http_connectcode == 407)
- credential_reject(&proxy_auth);
+ credential_reject(the_repository, &proxy_auth);
if (!curl_errorstr[0])
strlcpy(curl_errorstr,
curl_easy_strerror(results->curl_result),
@@ -2210,7 +2210,7 @@ static int http_request_reauth(const char *url,
int ret;
if (always_auth_proactively())
- credential_fill(&http_auth, 1);
+ credential_fill(the_repository, &http_auth, 1);
ret = http_request(url, result, target, options);
@@ -2251,7 +2251,7 @@ static int http_request_reauth(const char *url,
BUG("Unknown http_request target");
}
- credential_fill(&http_auth, 1);
+ credential_fill(the_repository, &http_auth, 1);
ret = http_request(url, result, target, options);
}
diff --git a/imap-send.c b/imap-send.c
index 68ab1aea83..6c8f84e836 100644
--- a/imap-send.c
+++ b/imap-send.c
@@ -922,7 +922,7 @@ static void server_fill_credential(struct imap_server_conf *srvc, struct credent
cred->username = xstrdup_or_null(srvc->user);
cred->password = xstrdup_or_null(srvc->pass);
- credential_fill(cred, 1);
+ credential_fill(the_repository, cred, 1);
if (!srvc->user)
srvc->user = xstrdup(cred->username);
@@ -1123,7 +1123,7 @@ static struct imap_store *imap_open_store(struct imap_server_conf *srvc, const c
} /* !preauth */
if (cred.username)
- credential_approve(&cred);
+ credential_approve(the_repository, &cred);
credential_clear(&cred);
/* check the target mailbox exists */
@@ -1150,7 +1150,7 @@ static struct imap_store *imap_open_store(struct imap_server_conf *srvc, const c
bail:
if (cred.username)
- credential_reject(&cred);
+ credential_reject(the_repository, &cred);
credential_clear(&cred);
out:
@@ -1492,9 +1492,9 @@ static int curl_append_msgs_to_imap(struct imap_server_conf *server,
if (cred.username) {
if (res == CURLE_OK)
- credential_approve(&cred);
+ credential_approve(the_repository, &cred);
else if (res == CURLE_LOGIN_DENIED)
- credential_reject(&cred);
+ credential_reject(the_repository, &cred);
}
credential_clear(&cred);
diff --git a/log-tree.c b/log-tree.c
index d08eb672a9..8b184d6776 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -1042,7 +1042,7 @@ static int do_remerge_diff(struct rev_info *opt,
* into the alternative object store list as the primary.
*/
if (opt->remerge_diff && !opt->remerge_objdir) {
- opt->remerge_objdir = tmp_objdir_create("remerge-diff");
+ opt->remerge_objdir = tmp_objdir_create(the_repository, "remerge-diff");
if (!opt->remerge_objdir)
return error(_("unable to create temporary object directory"));
tmp_objdir_replace_primary_odb(opt->remerge_objdir, 1);
diff --git a/mailinfo.c b/mailinfo.c
index aa263bf490..7b001fa5db 100644
--- a/mailinfo.c
+++ b/mailinfo.c
@@ -1,4 +1,3 @@
-#define USE_THE_REPOSITORY_VARIABLE
#define DISABLE_SIGN_COMPARE_WARNINGS
#include "git-compat-util.h"
@@ -1269,7 +1268,7 @@ static int git_mailinfo_config(const char *var, const char *value,
return 0;
}
-void setup_mailinfo(struct mailinfo *mi)
+void setup_mailinfo(struct repository *r, struct mailinfo *mi)
{
memset(mi, 0, sizeof(*mi));
strbuf_init(&mi->name, 0);
@@ -1281,7 +1280,7 @@ void setup_mailinfo(struct mailinfo *mi)
mi->header_stage = 1;
mi->use_inbody_headers = 1;
mi->content_top = mi->content;
- git_config(git_mailinfo_config, mi);
+ repo_config(r, git_mailinfo_config, mi);
}
void clear_mailinfo(struct mailinfo *mi)
diff --git a/mailinfo.h b/mailinfo.h
index f2ffd0349e..1f20664165 100644
--- a/mailinfo.h
+++ b/mailinfo.h
@@ -5,6 +5,8 @@
#define MAX_BOUNDARIES 5
+struct repository;
+
enum quoted_cr_action {
quoted_cr_unset = -1,
quoted_cr_nowarn,
@@ -49,7 +51,7 @@ struct mailinfo {
};
int mailinfo_parse_quoted_cr_action(const char *actionstr, int *action);
-void setup_mailinfo(struct mailinfo *);
+void setup_mailinfo(struct repository *r, struct mailinfo *);
int mailinfo(struct mailinfo *, const char *msg, const char *patch);
void clear_mailinfo(struct mailinfo *);
diff --git a/match-trees.c b/match-trees.c
index a1c8b91eae..ef14ceb594 100644
--- a/match-trees.c
+++ b/match-trees.c
@@ -1,4 +1,3 @@
-#define USE_THE_REPOSITORY_VARIABLE
#define DISABLE_SIGN_COMPARE_WARNINGS
#include "git-compat-util.h"
@@ -8,6 +7,7 @@
#include "tree.h"
#include "tree-walk.h"
#include "object-store-ll.h"
+#include "repository.h"
static int score_missing(unsigned mode)
{
@@ -54,14 +54,15 @@ static int score_matches(unsigned mode1, unsigned mode2)
return score;
}
-static void *fill_tree_desc_strict(struct tree_desc *desc,
+static void *fill_tree_desc_strict(struct repository *r,
+ struct tree_desc *desc,
const struct object_id *hash)
{
void *buffer;
enum object_type type;
unsigned long size;
- buffer = repo_read_object_file(the_repository, hash, &type, &size);
+ buffer = repo_read_object_file(r, hash, &type, &size);
if (!buffer)
die("unable to read tree (%s)", oid_to_hex(hash));
if (type != OBJ_TREE)
@@ -80,12 +81,13 @@ static int base_name_entries_compare(const struct name_entry *a,
/*
* Inspect two trees, and give a score that tells how similar they are.
*/
-static int score_trees(const struct object_id *hash1, const struct object_id *hash2)
+static int score_trees(struct repository *r,
+ const struct object_id *hash1, const struct object_id *hash2)
{
struct tree_desc one;
struct tree_desc two;
- void *one_buf = fill_tree_desc_strict(&one, hash1);
- void *two_buf = fill_tree_desc_strict(&two, hash2);
+ void *one_buf = fill_tree_desc_strict(r, &one, hash1);
+ void *two_buf = fill_tree_desc_strict(r, &two, hash2);
int score = 0;
for (;;) {
@@ -133,7 +135,8 @@ static int score_trees(const struct object_id *hash1, const struct object_id *ha
/*
* Match one itself and its subtrees with two and pick the best match.
*/
-static void match_trees(const struct object_id *hash1,
+static void match_trees(struct repository *r,
+ const struct object_id *hash1,
const struct object_id *hash2,
int *best_score,
char **best_match,
@@ -141,7 +144,7 @@ static void match_trees(const struct object_id *hash1,
int recurse_limit)
{
struct tree_desc one;
- void *one_buf = fill_tree_desc_strict(&one, hash1);
+ void *one_buf = fill_tree_desc_strict(r, &one, hash1);
while (one.size) {
const char *path;
@@ -152,7 +155,7 @@ static void match_trees(const struct object_id *hash1,
elem = tree_entry_extract(&one, &path, &mode);
if (!S_ISDIR(mode))
goto next;
- score = score_trees(elem, hash2);
+ score = score_trees(r, elem, hash2);
if (*best_score < score) {
free(*best_match);
*best_match = xstrfmt("%s%s", base, path);
@@ -160,7 +163,7 @@ static void match_trees(const struct object_id *hash1,
}
if (recurse_limit) {
char *newbase = xstrfmt("%s%s/", base, path);
- match_trees(elem, hash2, best_score, best_match,
+ match_trees(r, elem, hash2, best_score, best_match,
newbase, recurse_limit - 1);
free(newbase);
}
@@ -175,7 +178,8 @@ static void match_trees(const struct object_id *hash1,
* A tree "oid1" has a subdirectory at "prefix". Come up with a tree object by
* replacing it with another tree "oid2".
*/
-static int splice_tree(const struct object_id *oid1, const char *prefix,
+static int splice_tree(struct repository *r,
+ const struct object_id *oid1, const char *prefix,
const struct object_id *oid2, struct object_id *result)
{
char *subpath;
@@ -194,7 +198,7 @@ static int splice_tree(const struct object_id *oid1, const char *prefix,
if (*subpath)
subpath++;
- buf = repo_read_object_file(the_repository, oid1, &type, &sz);
+ buf = repo_read_object_file(r, oid1, &type, &sz);
if (!buf)
die("cannot read tree %s", oid_to_hex(oid1));
init_tree_desc(&desc, oid1, buf, sz);
@@ -232,15 +236,15 @@ static int splice_tree(const struct object_id *oid1, const char *prefix,
oid_to_hex(oid1));
if (*subpath) {
struct object_id tree_oid;
- oidread(&tree_oid, rewrite_here, the_repository->hash_algo);
- status = splice_tree(&tree_oid, subpath, oid2, &subtree);
+ oidread(&tree_oid, rewrite_here, r->hash_algo);
+ status = splice_tree(r, &tree_oid, subpath, oid2, &subtree);
if (status)
return status;
rewrite_with = &subtree;
} else {
rewrite_with = oid2;
}
- hashcpy(rewrite_here, rewrite_with->hash, the_repository->hash_algo);
+ hashcpy(rewrite_here, rewrite_with->hash, r->hash_algo);
status = write_object_file(buf, sz, OBJ_TREE, result);
free(buf);
return status;
@@ -271,7 +275,7 @@ void shift_tree(struct repository *r,
if (!depth_limit)
depth_limit = 2;
- add_score = del_score = score_trees(hash1, hash2);
+ add_score = del_score = score_trees(r, hash1, hash2);
add_prefix = xcalloc(1, 1);
del_prefix = xcalloc(1, 1);
@@ -279,13 +283,13 @@ void shift_tree(struct repository *r,
* See if one's subtree resembles two; if so we need to prefix
* two with a few fake trees to match the prefix.
*/
- match_trees(hash1, hash2, &add_score, &add_prefix, "", depth_limit);
+ match_trees(r, hash1, hash2, &add_score, &add_prefix, "", depth_limit);
/*
* See if two's subtree resembles one; if so we need to
* pick only subtree of two.
*/
- match_trees(hash2, hash1, &del_score, &del_prefix, "", depth_limit);
+ match_trees(r, hash2, hash1, &del_score, &del_prefix, "", depth_limit);
/* Assume we do not have to do any shifting */
oidcpy(shifted, hash2);
@@ -306,7 +310,7 @@ void shift_tree(struct repository *r,
if (!*add_prefix)
goto out;
- splice_tree(hash1, add_prefix, hash2, shifted);
+ splice_tree(r, hash1, add_prefix, hash2, shifted);
out:
free(add_prefix);
@@ -340,16 +344,16 @@ void shift_tree_by(struct repository *r,
if (candidate == 3) {
/* Both are plausible -- we need to evaluate the score */
- int best_score = score_trees(hash1, hash2);
+ int best_score = score_trees(r, hash1, hash2);
int score;
candidate = 0;
- score = score_trees(&sub1, hash2);
+ score = score_trees(r, &sub1, hash2);
if (score > best_score) {
candidate = 1;
best_score = score;
}
- score = score_trees(&sub2, hash1);
+ score = score_trees(r, &sub2, hash1);
if (score > best_score)
candidate = 2;
}
@@ -365,7 +369,7 @@ void shift_tree_by(struct repository *r,
* shift tree2 down by adding shift_prefix above it
* to match tree1.
*/
- splice_tree(hash1, shift_prefix, hash2, shifted);
+ splice_tree(r, hash1, shift_prefix, hash2, shifted);
else
/*
* shift tree2 up by removing shift_prefix from it
diff --git a/meson.build b/meson.build
index 0064eb64f5..548eac62b2 100644
--- a/meson.build
+++ b/meson.build
@@ -358,6 +358,7 @@ libgit_sources = [
'patch-delta.c',
'patch-ids.c',
'path.c',
+ 'path-walk.c',
'pathspec.c',
'pkt-line.c',
'preload-index.c',
@@ -708,7 +709,6 @@ if get_option('warning_level') in ['2','3', 'everything'] and compiler.get_argum
# These are disabled because we have these all over the place.
'-Wno-empty-body',
'-Wno-missing-field-initializers',
- '-Wno-sign-compare',
]
if compiler.has_argument(cflag)
libgit_c_args += cflag
@@ -1326,14 +1326,17 @@ if not meson.is_cross_build() and fs.exists('/dev/tty')
endif
https_backend = get_option('https_backend')
+sha1_backend = get_option('sha1_backend')
+sha1_unsafe_backend = get_option('sha1_unsafe_backend')
+sha256_backend = get_option('sha256_backend')
-security_framework = dependency('Security', required: https_backend == 'CommonCrypto')
+security_framework = dependency('Security', required: 'CommonCrypto' in [https_backend, sha1_backend, sha1_unsafe_backend])
core_foundation_framework = dependency('CoreFoundation', required: security_framework.found())
if https_backend == 'auto' and security_framework.found()
https_backend = 'CommonCrypto'
endif
-openssl_required = https_backend == 'openssl' or get_option('sha1_backend') == 'openssl' or get_option('sha256_backend') == 'openssl'
+openssl_required = 'openssl' in [https_backend, sha1_backend, sha1_unsafe_backend, sha256_backend]
openssl = dependency('openssl', required: openssl_required, default_options: ['default_library=static'])
if https_backend == 'auto' and openssl.found()
https_backend = 'openssl'
@@ -1354,7 +1357,6 @@ if https_backend != 'openssl'
libgit_c_args += '-DNO_OPENSSL'
endif
-sha1_backend = get_option('sha1_backend')
if sha1_backend == 'sha1dc'
libgit_c_args += '-DSHA1_DC'
libgit_c_args += '-DSHA1DC_NO_STANDARD_INCLUDES=1'
@@ -1367,22 +1369,40 @@ if sha1_backend == 'sha1dc'
'sha1dc/sha1.c',
'sha1dc/ubc_check.c',
]
-elif sha1_backend == 'common-crypto'
+endif
+if sha1_backend == 'CommonCrypto' or sha1_unsafe_backend == 'CommonCrypto'
+ if sha1_backend == 'CommonCrypto'
+ libgit_c_args += '-DSHA1_APPLE'
+ endif
+ if sha1_unsafe_backend == 'CommonCrypto'
+ libgit_c_args += '-DSHA1_APPLE_UNSAFE'
+ endif
+
libgit_c_args += '-DCOMMON_DIGEST_FOR_OPENSSL'
- libgit_c_args += '-DSHA1_APPLE'
# Apple CommonCrypto requires chunking
libgit_c_args += '-DSHA1_MAX_BLOCK_SIZE=1024L*1024L*1024L'
-elif sha1_backend == 'openssl'
- libgit_c_args += '-DSHA1_OPENSSL'
+endif
+if sha1_backend == 'openssl' or sha1_unsafe_backend == 'openssl'
+ if sha1_backend == 'openssl'
+ libgit_c_args += '-DSHA1_OPENSSL'
+ endif
+ if sha1_unsafe_backend == 'openssl'
+ libgit_c_args += '-DSHA1_OPENSSL_UNSAFE'
+ endif
+
libgit_dependencies += openssl
-elif sha1_backend == 'block'
- libgit_c_args += '-DSHA1_BLK'
+endif
+if sha1_backend == 'block' or sha1_unsafe_backend == 'block'
+ if sha1_backend == 'block'
+ libgit_c_args += '-DSHA1_BLK'
+ endif
+ if sha1_unsafe_backend == 'block'
+ libgit_c_args += '-DSHA1_BLK_UNSAFE'
+ endif
+
libgit_sources += 'block-sha1/sha1.c'
-else
- error('Unhandled SHA1 backend ' + sha1_backend)
endif
-sha256_backend = get_option('sha256_backend')
if sha256_backend == 'openssl'
libgit_c_args += '-DSHA256_OPENSSL'
libgit_dependencies += openssl
@@ -1493,7 +1513,9 @@ libgit_version_library = static_library('git-version',
'version.c',
version_def_h,
],
- c_args: libgit_c_args,
+ c_args: libgit_c_args + [
+ '-DGIT_VERSION_H="' + version_def_h.full_path() + '"',
+ ],
dependencies: libgit_dependencies,
include_directories: libgit_include_directories,
)
@@ -1857,7 +1879,6 @@ endforeach
if intl.found()
subdir('po')
endif
-subdir('contrib')
# Gitweb requires Perl, so we disable the auto-feature if Perl was not found.
# We make sure further up that Perl is required in case the gitweb option is
@@ -1884,6 +1905,8 @@ if get_option('docs') != []
subdir('Documentation')
endif
+subdir('contrib')
+
foreach key, value : {
'DIFF': diff.full_path(),
'GIT_TEST_CMP': diff.full_path() + ' -u',
@@ -1923,3 +1946,10 @@ summary({
'perl': perl_features_enabled,
'python': python.found(),
}, section: 'Auto-detected features')
+
+summary({
+ 'https': https_backend,
+ 'sha1': sha1_backend,
+ 'sha1_unsafe': sha1_unsafe_backend,
+ 'sha256': sha256_backend,
+}, section: 'Backends')
diff --git a/meson_options.txt b/meson_options.txt
index f50bb40cdf..c0d72d85a3 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -27,6 +27,8 @@ option('version', type: 'string', value: '',
description: 'Version string reported by git-version(1) and other tools.')
# Features supported by Git.
+option('contrib', type: 'array', value: [ 'completion' ], choices: [ 'completion', 'subtree' ],
+ description: 'Contributed features to include.')
option('curl', type: 'feature', value: 'enabled',
description: 'Build helpers used to access remotes with the HTTP transport.')
option('expat', type: 'feature', value: 'enabled',
@@ -49,10 +51,12 @@ option('regex', type: 'feature', value: 'auto',
# Backends.
option('https_backend', type: 'combo', value: 'auto', choices: ['auto', 'openssl', 'CommonCrypto', 'none'],
description: 'The HTTPS backend to use when connecting to remotes.')
-option('sha1_backend', type: 'combo', choices: ['openssl', 'block', 'sha1dc', 'common-crypto'], value: 'sha1dc',
- description: 'The backend used for hashing objects with the SHA1 object format')
+option('sha1_backend', type: 'combo', choices: ['openssl', 'block', 'sha1dc', 'CommonCrypto'], value: 'sha1dc',
+ description: 'The backend used for hashing objects with the SHA1 object format.')
+option('sha1_unsafe_backend', type: 'combo', choices: ['openssl', 'block', 'CommonCrypto', 'none'], value: 'none',
+ description: 'The backend used for hashing data with the SHA1 object format in case no cryptographic security is needed.')
option('sha256_backend', type: 'combo', choices: ['openssl', 'nettle', 'gcrypt', 'block'], value: 'block',
- description: 'The backend used for hashing objects with the SHA256 object format')
+ description: 'The backend used for hashing objects with the SHA256 object format.')
# Build tweaks.
option('macos_use_homebrew_gettext', type: 'boolean', value: true,
diff --git a/midx-write.c b/midx-write.c
index 0066594fa6..b3827b936b 100644
--- a/midx-write.c
+++ b/midx-write.c
@@ -1131,7 +1131,8 @@ static int write_midx_internal(struct repository *r, const char *object_dir,
ctx.pack_paths_checked = 0;
if (flags & MIDX_PROGRESS)
- ctx.progress = start_delayed_progress(_("Adding packfiles to multi-pack-index"), 0);
+ ctx.progress = start_delayed_progress(r,
+ _("Adding packfiles to multi-pack-index"), 0);
else
ctx.progress = NULL;
@@ -1539,7 +1540,9 @@ int expire_midx_packs(struct repository *r, const char *object_dir, unsigned fla
CALLOC_ARRAY(count, m->num_packs);
if (flags & MIDX_PROGRESS)
- progress = start_delayed_progress(_("Counting referenced objects"),
+ progress = start_delayed_progress(
+ r,
+ _("Counting referenced objects"),
m->num_objects);
for (i = 0; i < m->num_objects; i++) {
int pack_int_id = nth_midxed_pack_int_id(m, i);
@@ -1549,7 +1552,9 @@ int expire_midx_packs(struct repository *r, const char *object_dir, unsigned fla
stop_progress(&progress);
if (flags & MIDX_PROGRESS)
- progress = start_delayed_progress(_("Finding and deleting unreferenced packfiles"),
+ progress = start_delayed_progress(
+ r,
+ _("Finding and deleting unreferenced packfiles"),
m->num_packs);
for (i = 0; i < m->num_packs; i++) {
char *pack_name;
diff --git a/midx.c b/midx.c
index f8a75cafd4..d91088efb8 100644
--- a/midx.c
+++ b/midx.c
@@ -907,7 +907,8 @@ int verify_midx_file(struct repository *r, const char *object_dir, unsigned flag
midx_report(_("incorrect checksum"));
if (flags & MIDX_PROGRESS)
- progress = start_delayed_progress(_("Looking for referenced packfiles"),
+ progress = start_delayed_progress(r,
+ _("Looking for referenced packfiles"),
m->num_packs + m->num_packs_in_base);
for (i = 0; i < m->num_packs + m->num_packs_in_base; i++) {
if (prepare_midx_pack(r, m, i))
@@ -927,7 +928,8 @@ int verify_midx_file(struct repository *r, const char *object_dir, unsigned flag
}
if (flags & MIDX_PROGRESS)
- progress = start_sparse_progress(_("Verifying OID order in multi-pack-index"),
+ progress = start_sparse_progress(r,
+ _("Verifying OID order in multi-pack-index"),
m->num_objects - 1);
for (curr = m; curr; curr = curr->base_midx) {
@@ -959,14 +961,17 @@ int verify_midx_file(struct repository *r, const char *object_dir, unsigned flag
}
if (flags & MIDX_PROGRESS)
- progress = start_sparse_progress(_("Sorting objects by packfile"),
+ progress = start_sparse_progress(r,
+ _("Sorting objects by packfile"),
m->num_objects);
display_progress(progress, 0); /* TODO: Measure QSORT() progress */
QSORT(pairs, m->num_objects, compare_pair_pos_vs_id);
stop_progress(&progress);
if (flags & MIDX_PROGRESS)
- progress = start_sparse_progress(_("Verifying object offsets"), m->num_objects);
+ progress = start_sparse_progress(r,
+ _("Verifying object offsets"),
+ m->num_objects);
for (i = 0; i < m->num_objects + m->num_objects_in_base; i++) {
struct object_id oid;
struct pack_entry e;
diff --git a/object-file.c b/object-file.c
index 5b792b3dd4..aeca61b8ae 100644
--- a/object-file.c
+++ b/object-file.c
@@ -1970,54 +1970,59 @@ static void write_object_file_prepare_literally(const struct git_hash_algo *algo
hash_object_body(algo, &c, buf, len, oid, hdr, hdrlen);
}
-static int check_collision(const char *filename_a, const char *filename_b)
+#define CHECK_COLLISION_DEST_VANISHED -2
+
+static int check_collision(const char *source, const char *dest)
{
- char buf_a[4096], buf_b[4096];
- int fd_a = -1, fd_b = -1;
+ char buf_source[4096], buf_dest[4096];
+ int fd_source = -1, fd_dest = -1;
int ret = 0;
- fd_a = open(filename_a, O_RDONLY);
- if (fd_a < 0) {
- ret = error_errno(_("unable to open %s"), filename_a);
+ fd_source = open(source, O_RDONLY);
+ if (fd_source < 0) {
+ ret = error_errno(_("unable to open %s"), source);
goto out;
}
- fd_b = open(filename_b, O_RDONLY);
- if (fd_b < 0) {
- ret = error_errno(_("unable to open %s"), filename_b);
+ fd_dest = open(dest, O_RDONLY);
+ if (fd_dest < 0) {
+ if (errno != ENOENT)
+ ret = error_errno(_("unable to open %s"), dest);
+ else
+ ret = CHECK_COLLISION_DEST_VANISHED;
goto out;
}
while (1) {
ssize_t sz_a, sz_b;
- sz_a = read_in_full(fd_a, buf_a, sizeof(buf_a));
+ sz_a = read_in_full(fd_source, buf_source, sizeof(buf_source));
if (sz_a < 0) {
- ret = error_errno(_("unable to read %s"), filename_a);
+ ret = error_errno(_("unable to read %s"), source);
goto out;
}
- sz_b = read_in_full(fd_b, buf_b, sizeof(buf_b));
+ sz_b = read_in_full(fd_dest, buf_dest, sizeof(buf_dest));
if (sz_b < 0) {
- ret = error_errno(_("unable to read %s"), filename_b);
+ ret = error_errno(_("unable to read %s"), dest);
goto out;
}
- if (sz_a != sz_b || memcmp(buf_a, buf_b, sz_a)) {
+ if (sz_a != sz_b || memcmp(buf_source, buf_dest, sz_a)) {
ret = error(_("files '%s' and '%s' differ in contents"),
- filename_a, filename_b);
+ source, dest);
goto out;
}
- if (sz_a < sizeof(buf_a))
+ if (sz_a < sizeof(buf_source))
break;
}
out:
- if (fd_a > -1)
- close(fd_a);
- if (fd_b > -1)
- close(fd_b);
+ if (fd_source > -1)
+ close(fd_source);
+ if (fd_dest > -1)
+ close(fd_dest);
return ret;
}
@@ -2032,8 +2037,11 @@ int finalize_object_file(const char *tmpfile, const char *filename)
int finalize_object_file_flags(const char *tmpfile, const char *filename,
enum finalize_object_file_flags flags)
{
- struct stat st;
- int ret = 0;
+ unsigned retries = 0;
+ int ret;
+
+retry:
+ ret = 0;
if (object_creation_mode == OBJECT_CREATION_USES_RENAMES)
goto try_rename;
@@ -2054,6 +2062,8 @@ int finalize_object_file_flags(const char *tmpfile, const char *filename,
* left to unlink.
*/
if (ret && ret != EEXIST) {
+ struct stat st;
+
try_rename:
if (!stat(filename, &st))
ret = EEXIST;
@@ -2069,9 +2079,17 @@ int finalize_object_file_flags(const char *tmpfile, const char *filename,
errno = saved_errno;
return error_errno(_("unable to write file %s"), filename);
}
- if (!(flags & FOF_SKIP_COLLISION_CHECK) &&
- check_collision(tmpfile, filename))
+ if (!(flags & FOF_SKIP_COLLISION_CHECK)) {
+ ret = check_collision(tmpfile, filename);
+ if (ret == CHECK_COLLISION_DEST_VANISHED) {
+ if (retries++ > 5)
+ return error(_("unable to write repeatedly vanishing file %s"),
+ filename);
+ goto retry;
+ }
+ else if (ret)
return -1;
+ }
unlink_or_warn(tmpfile);
}
diff --git a/object-name.c b/object-name.c
index 88d1313028..945d5bdef2 100644
--- a/object-name.c
+++ b/object-name.c
@@ -1272,6 +1272,58 @@ static int peel_onion(struct repository *r, const char *name, int len,
return 0;
}
+/*
+ * Documentation/revisions.txt says:
+ * '<describeOutput>', e.g. 'v1.7.4.2-679-g3bee7fb'::
+ * Output from `git describe`; i.e. a closest tag, optionally
+ * followed by a dash and a number of commits, followed by a dash, a
+ * 'g', and an abbreviated object name.
+ *
+ * which means that the stuff before '-g${HASH}' needs to be a valid
+ * refname, a dash, and a non-negative integer. This function verifies
+ * that.
+ *
+ * In particular, we do not want to treat
+ * branchname:path/to/file/named/i-gaffed
+ * as a request for commit affed.
+ *
+ * More generally, we should probably not treat
+ * 'refs/heads/./../.../ ~^:/?*[////\\\&}/busted.lock-g050e0ef6ead'
+ * as a request for object 050e0ef6ead either.
+ *
+ * We are called with name[len] == '-' and name[len+1] == 'g', i.e.
+ * we are verifying ${REFNAME}-{INTEGER} part of the name.
+ */
+static int ref_and_count_parts_valid(const char *name, int len)
+{
+ struct strbuf sb;
+ const char *cp;
+ int flags = REFNAME_ALLOW_ONELEVEL;
+ int ret = 1;
+
+ /* Ensure we have at least one digit */
+ if (!isxdigit(name[len-1]))
+ return 0;
+
+ /* Skip over digits backwards until we get to the dash */
+ for (cp = name + len - 2; name < cp; cp--) {
+ if (*cp == '-')
+ break;
+ if (!isxdigit(*cp))
+ return 0;
+ }
+ /* Ensure we found the leading dash */
+ if (*cp != '-')
+ return 0;
+
+ len = cp - name;
+ strbuf_init(&sb, len);
+ strbuf_add(&sb, name, len);
+ ret = !check_refname_format(sb.buf, flags);
+ strbuf_release(&sb);
+ return ret;
+}
+
static int get_describe_name(struct repository *r,
const char *name, int len,
struct object_id *oid)
@@ -1285,7 +1337,8 @@ static int get_describe_name(struct repository *r,
/* We must be looking at g in "SOMETHING-g"
* for it to be describe output.
*/
- if (ch == 'g' && cp[-1] == '-') {
+ if (ch == 'g' && cp[-1] == '-' &&
+ ref_and_count_parts_valid(name, cp - 1 - name)) {
cp++;
len -= cp - name;
return get_short_oid(r,
@@ -2052,12 +2105,14 @@ static enum get_oid_result get_oid_with_context_1(struct repository *repo,
return -1;
}
for (cp = name, bracket_depth = 0; *cp; cp++) {
- if (*cp == '{')
+ if (strchr("@^", *cp) && cp[1] == '{') {
+ cp++;
bracket_depth++;
- else if (bracket_depth && *cp == '}')
+ } else if (bracket_depth && *cp == '}') {
bracket_depth--;
- else if (!bracket_depth && *cp == ':')
+ } else if (!bracket_depth && *cp == ':') {
break;
+ }
}
if (*cp == ':') {
struct object_id tree_oid;
diff --git a/oss-fuzz/fuzz-parse-attr-line.c b/oss-fuzz/fuzz-parse-attr-line.c
index e0e4bc6358..315198505c 100644
--- a/oss-fuzz/fuzz-parse-attr-line.c
+++ b/oss-fuzz/fuzz-parse-attr-line.c
@@ -24,7 +24,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
res = parse_attr_line(buf, "dummy", 0, 0);
if (res) {
- int j;
+ size_t j;
for (j = 0; j < res->num_attr; j++) {
const char *setto = res->state[j].setto;
if (ATTR_TRUE(setto) || ATTR_FALSE(setto) ||
diff --git a/pack-bitmap-write.c b/pack-bitmap-write.c
index 4f8be53c2b..a06a1f35c6 100644
--- a/pack-bitmap-write.c
+++ b/pack-bitmap-write.c
@@ -590,7 +590,8 @@ int bitmap_writer_build(struct bitmap_writer *writer)
int closed = 1; /* until proven otherwise */
if (writer->show_progress)
- writer->progress = start_progress("Building bitmaps",
+ writer->progress = start_progress(the_repository,
+ "Building bitmaps",
writer->selected_nr);
trace2_region_enter("pack-bitmap-write", "building_bitmaps_total",
the_repository);
@@ -710,7 +711,8 @@ void bitmap_writer_select_commits(struct bitmap_writer *writer,
}
if (writer->show_progress)
- writer->progress = start_progress("Selecting bitmap commits", 0);
+ writer->progress = start_progress(the_repository,
+ "Selecting bitmap commits", 0);
for (;;) {
struct commit *chosen = NULL;
diff --git a/pack-bitmap.c b/pack-bitmap.c
index 60b5da9d0b..6406953d32 100644
--- a/pack-bitmap.c
+++ b/pack-bitmap.c
@@ -2573,7 +2573,9 @@ void test_bitmap_walk(struct rev_info *revs)
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.prg = start_progress(revs->repo,
+ "Verifying bitmap entries",
+ result_popcnt);
tdata.seen = 0;
traverse_commit_list(revs, &test_show_commit, &test_show_object, &tdata);
diff --git a/pack.h b/pack.h
index a8da040629..78f8d8b213 100644
--- a/pack.h
+++ b/pack.h
@@ -13,7 +13,8 @@ struct repository;
*/
#define PACK_SIGNATURE 0x5041434b /* "PACK" */
#define PACK_VERSION 2
-#define pack_version_ok(v) ((v) == htonl(2) || (v) == htonl(3))
+#define pack_version_ok(v) pack_version_ok_native(ntohl(v))
+#define pack_version_ok_native(v) ((v) == 2 || (v) == 3)
struct pack_header {
uint32_t hdr_signature;
uint32_t hdr_version;
diff --git a/packfile.c b/packfile.c
index cc7ab6403a..2d80d80cb3 100644
--- a/packfile.c
+++ b/packfile.c
@@ -2315,3 +2315,23 @@ int is_promisor_object(struct repository *r, const struct object_id *oid)
}
return oidset_contains(&promisor_objects, oid);
}
+
+int parse_pack_header_option(const char *in, unsigned char *out, unsigned int *len)
+{
+ unsigned char *hdr;
+ char *c;
+
+ hdr = out;
+ put_be32(hdr, PACK_SIGNATURE);
+ hdr += 4;
+ put_be32(hdr, strtoul(in, &c, 10));
+ hdr += 4;
+ if (*c != ',')
+ return -1;
+ put_be32(hdr, strtoul(c + 1, &c, 10));
+ hdr += 4;
+ if (*c)
+ return -1;
+ *len = hdr - out;
+ return 0;
+}
diff --git a/packfile.h b/packfile.h
index 58104fa009..00ada7a938 100644
--- a/packfile.h
+++ b/packfile.h
@@ -216,4 +216,10 @@ int is_promisor_object(struct repository *r, const struct object_id *oid);
int load_idx(const char *path, const unsigned int hashsz, void *idx_map,
size_t idx_size, struct packed_git *p);
+/*
+ * Parse a --pack_header option as accepted by index-pack and unpack-objects,
+ * turning it into the matching bytes we'd find in a pack.
+ */
+int parse_pack_header_option(const char *in, unsigned char *out, unsigned int *len);
+
#endif
diff --git a/pager.c b/pager.c
index 40b664f893..5531fff50e 100644
--- a/pager.c
+++ b/pager.c
@@ -1,5 +1,3 @@
-#define USE_THE_REPOSITORY_VARIABLE
-
#include "git-compat-util.h"
#include "config.h"
#include "editor.h"
@@ -84,7 +82,7 @@ static int core_pager_config(const char *var, const char *value,
return 0;
}
-const char *git_pager(int stdout_is_tty)
+const char *git_pager(struct repository *r, int stdout_is_tty)
{
const char *pager;
@@ -94,7 +92,7 @@ const char *git_pager(int stdout_is_tty)
pager = getenv("GIT_PAGER");
if (!pager) {
if (!pager_program)
- read_early_config(the_repository,
+ read_early_config(r,
core_pager_config, NULL);
pager = pager_program;
}
@@ -143,10 +141,10 @@ void prepare_pager_args(struct child_process *pager_process, const char *pager)
pager_process->trace2_child_class = "pager";
}
-void setup_pager(void)
+void setup_pager(struct repository *r)
{
static int once = 0;
- const char *pager = git_pager(isatty(1));
+ const char *pager = git_pager(r, isatty(1));
if (!pager)
return;
@@ -293,7 +291,7 @@ static int pager_command_config(const char *var, const char *value,
}
/* returns 0 for "no pager", 1 for "use pager", and -1 for "not specified" */
-int check_pager_config(const char *cmd)
+int check_pager_config(struct repository *r, const char *cmd)
{
struct pager_command_config_data data;
@@ -301,7 +299,7 @@ int check_pager_config(const char *cmd)
data.want = -1;
data.value = NULL;
- read_early_config(the_repository, pager_command_config, &data);
+ read_early_config(r, pager_command_config, &data);
if (data.value)
pager_program = data.value;
diff --git a/pager.h b/pager.h
index 103ecac476..d070be6348 100644
--- a/pager.h
+++ b/pager.h
@@ -2,15 +2,16 @@
#define PAGER_H
struct child_process;
+struct repository;
-const char *git_pager(int stdout_is_tty);
-void setup_pager(void);
+const char *git_pager(struct repository *r, int stdout_is_tty);
+void setup_pager(struct repository *r);
void wait_for_pager(void);
int pager_in_use(void);
int term_columns(void);
void term_clear_line(void);
int decimal_width(uintmax_t);
-int check_pager_config(const char *cmd);
+int check_pager_config(struct repository *r, const char *cmd);
void prepare_pager_args(struct child_process *, const char *pager);
extern int pager_use_color;
diff --git a/parse-options.c b/parse-options.c
index 33bfba0ed4..35fbb3b0d6 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -1076,11 +1076,48 @@ static int usage_argh(const struct option *opts, FILE *outfile)
!opts->argh || !!strpbrk(opts->argh, "()<>[]|");
if (opts->flags & PARSE_OPT_OPTARG)
if (opts->long_name)
- s = literal ? "[=%s]" : "[=<%s>]";
+ /*
+ * TRANSLATORS: The "<%s>" part of this string
+ * stands for an optional value given to a command
+ * line option in the long form, and "<>" is there
+ * as a convention to signal that it is a
+ * placeholder (i.e. the user should substitute it
+ * with the real value). If your language uses a
+ * different convention, you can change "<%s>" part
+ * to match yours, e.g. it might use "|%s|" instead,
+ * or if the alphabet is different enough it may use
+ * "%s" without any placeholder signal. Most
+ * translations leave this message as is.
+ */
+ s = literal ? "[=%s]" : _("[=<%s>]");
else
- s = literal ? "[%s]" : "[<%s>]";
+ /*
+ * TRANSLATORS: The "<%s>" part of this string
+ * stands for an optional value given to a command
+ * line option in the short form, and "<>" is there
+ * as a convention to signal that it is a
+ * placeholder (i.e. the user should substitute it
+ * with the real value). If your language uses a
+ * different convention, you can change "<%s>" part
+ * to match yours, e.g. it might use "|%s|" instead,
+ * or if the alphabet is different enough it may use
+ * "%s" without any placeholder signal. Most
+ * translations leave this message as is.
+ */
+ s = literal ? "[%s]" : _("[<%s>]");
else
- s = literal ? " %s" : " <%s>";
+ /*
+ * TRANSLATORS: The "<%s>" part of this string stands for a
+ * value given to a command line option, and "<>" is there
+ * as a convention to signal that it is a placeholder
+ * (i.e. the user should substitute it with the real value).
+ * If your language uses a different convention, you can
+ * change "<%s>" part to match yours, e.g. it might use
+ * "|%s|" instead, or if the alphabet is different enough it
+ * may use "%s" without any placeholder signal. Most
+ * translations leave this message as is.
+ */
+ s = literal ? " %s" : _(" <%s>");
return utf8_fprintf(outfile, s, opts->argh ? _(opts->argh) : _("..."));
}
@@ -1282,6 +1319,16 @@ void NORETURN usage_with_options(const char * const *usagestr,
exit(129);
}
+void show_usage_with_options_if_asked(int ac, const char **av,
+ const char * const *usagestr,
+ const struct option *opts)
+{
+ if (ac == 2 && !strcmp(av[1], "-h")) {
+ usage_with_options_internal(NULL, usagestr, opts, 0, 0);
+ exit(129);
+ }
+}
+
void NORETURN usage_msg_opt(const char *msg,
const char * const *usagestr,
const struct option *options)
diff --git a/parse-options.h b/parse-options.h
index d01361ca97..39f0886254 100644
--- a/parse-options.h
+++ b/parse-options.h
@@ -402,6 +402,10 @@ int parse_options(int argc, const char **argv, const char *prefix,
NORETURN void usage_with_options(const char * const *usagestr,
const struct option *options);
+void show_usage_with_options_if_asked(int ac, const char **av,
+ const char * const *usage,
+ const struct option *options);
+
NORETURN void usage_msg_opt(const char *msg,
const char * const *usagestr,
const struct option *options);
diff --git a/path-walk.c b/path-walk.c
new file mode 100644
index 0000000000..9715a5550e
--- /dev/null
+++ b/path-walk.c
@@ -0,0 +1,591 @@
+/*
+ * path-walk.c: implementation for path-based walks of the object graph.
+ */
+#include "git-compat-util.h"
+#include "path-walk.h"
+#include "blob.h"
+#include "commit.h"
+#include "dir.h"
+#include "hashmap.h"
+#include "hex.h"
+#include "list-objects.h"
+#include "object.h"
+#include "oid-array.h"
+#include "prio-queue.h"
+#include "revision.h"
+#include "string-list.h"
+#include "strmap.h"
+#include "tag.h"
+#include "trace2.h"
+#include "tree.h"
+#include "tree-walk.h"
+
+static const char *root_path = "";
+
+struct type_and_oid_list {
+ enum object_type type;
+ struct oid_array oids;
+ int maybe_interesting;
+};
+
+#define TYPE_AND_OID_LIST_INIT { \
+ .type = OBJ_NONE, \
+ .oids = OID_ARRAY_INIT \
+}
+
+struct path_walk_context {
+ /**
+ * Repeats of data in 'struct path_walk_info' for
+ * access with fewer characters.
+ */
+ struct repository *repo;
+ struct rev_info *revs;
+ struct path_walk_info *info;
+
+ /**
+ * Map a path to a 'struct type_and_oid_list'
+ * containing the objects discovered at that
+ * path.
+ */
+ struct strmap paths_to_lists;
+
+ /**
+ * Store the current list of paths in a priority queue,
+ * using object type as a sorting mechanism, mostly to
+ * make sure blobs are popped off the stack first. No
+ * other sort is made, so within each object type it acts
+ * like a stack and performs a DFS within the trees.
+ *
+ * Use path_stack_pushed to indicate whether a path
+ * was previously added to path_stack.
+ */
+ struct prio_queue path_stack;
+ struct strset path_stack_pushed;
+};
+
+static int compare_by_type(const void *one, const void *two, void *cb_data)
+{
+ struct type_and_oid_list *list1, *list2;
+ const char *str1 = one;
+ const char *str2 = two;
+ struct path_walk_context *ctx = cb_data;
+
+ list1 = strmap_get(&ctx->paths_to_lists, str1);
+ list2 = strmap_get(&ctx->paths_to_lists, str2);
+
+ /*
+ * If object types are equal, then use path comparison.
+ */
+ if (!list1 || !list2 || list1->type == list2->type)
+ return strcmp(str1, str2);
+
+ /* Prefer tags to be popped off first. */
+ if (list1->type == OBJ_TAG)
+ return -1;
+ if (list2->type == OBJ_TAG)
+ return 1;
+
+ /* Prefer blobs to be popped off second. */
+ if (list1->type == OBJ_BLOB)
+ return -1;
+ if (list2->type == OBJ_BLOB)
+ return 1;
+
+ return 0;
+}
+
+static void push_to_stack(struct path_walk_context *ctx,
+ const char *path)
+{
+ if (strset_contains(&ctx->path_stack_pushed, path))
+ return;
+
+ strset_add(&ctx->path_stack_pushed, path);
+ prio_queue_put(&ctx->path_stack, xstrdup(path));
+}
+
+static int add_tree_entries(struct path_walk_context *ctx,
+ const char *base_path,
+ struct object_id *oid)
+{
+ struct tree_desc desc;
+ struct name_entry entry;
+ struct strbuf path = STRBUF_INIT;
+ size_t base_len;
+ struct tree *tree = lookup_tree(ctx->repo, oid);
+
+ if (!tree) {
+ error(_("failed to walk children of tree %s: not found"),
+ oid_to_hex(oid));
+ return -1;
+ } else if (parse_tree_gently(tree, 1)) {
+ error("bad tree object %s", oid_to_hex(oid));
+ return -1;
+ }
+
+ strbuf_addstr(&path, base_path);
+ base_len = path.len;
+
+ init_tree_desc(&desc, &tree->object.oid, tree->buffer, tree->size);
+ while (tree_entry(&desc, &entry)) {
+ struct type_and_oid_list *list;
+ struct object *o;
+ /* Not actually true, but we will ignore submodules later. */
+ enum object_type type = S_ISDIR(entry.mode) ? OBJ_TREE : OBJ_BLOB;
+
+ /* Skip submodules. */
+ if (S_ISGITLINK(entry.mode))
+ continue;
+
+ /* If the caller doesn't want blobs, then don't bother. */
+ if (!ctx->info->blobs && type == OBJ_BLOB)
+ continue;
+
+ if (type == OBJ_TREE) {
+ struct tree *child = lookup_tree(ctx->repo, &entry.oid);
+ o = child ? &child->object : NULL;
+ } else if (type == OBJ_BLOB) {
+ struct blob *child = lookup_blob(ctx->repo, &entry.oid);
+ o = child ? &child->object : NULL;
+ } else {
+ BUG("invalid type for tree entry: %d", type);
+ }
+
+ if (!o) {
+ error(_("failed to find object %s"),
+ oid_to_hex(&o->oid));
+ return -1;
+ }
+
+ /* Skip this object if already seen. */
+ if (o->flags & SEEN)
+ continue;
+ o->flags |= SEEN;
+
+ strbuf_setlen(&path, base_len);
+ strbuf_add(&path, entry.path, entry.pathlen);
+
+ /*
+ * Trees will end with "/" for concatenation and distinction
+ * from blobs at the same path.
+ */
+ if (type == OBJ_TREE)
+ strbuf_addch(&path, '/');
+
+ if (!(list = strmap_get(&ctx->paths_to_lists, path.buf))) {
+ CALLOC_ARRAY(list, 1);
+ list->type = type;
+ strmap_put(&ctx->paths_to_lists, path.buf, list);
+ }
+ push_to_stack(ctx, path.buf);
+
+ if (!(o->flags & UNINTERESTING))
+ list->maybe_interesting = 1;
+
+ oid_array_append(&list->oids, &entry.oid);
+ }
+
+ free_tree_buffer(tree);
+ strbuf_release(&path);
+ return 0;
+}
+
+/*
+ * For each path in paths_to_explore, walk the trees another level
+ * and add any found blobs to the batch (but only if they exist and
+ * haven't been added yet).
+ */
+static int walk_path(struct path_walk_context *ctx,
+ const char *path)
+{
+ struct type_and_oid_list *list;
+ int ret = 0;
+
+ list = strmap_get(&ctx->paths_to_lists, path);
+
+ if (!list)
+ BUG("provided path '%s' that had no associated list", path);
+
+ if (!list->oids.nr)
+ return 0;
+
+ if (ctx->info->prune_all_uninteresting) {
+ /*
+ * This is true if all objects were UNINTERESTING
+ * when added to the list.
+ */
+ if (!list->maybe_interesting)
+ return 0;
+
+ /*
+ * But it's still possible that the objects were set
+ * as UNINTERESTING after being added. Do a quick check.
+ */
+ list->maybe_interesting = 0;
+ for (size_t i = 0;
+ !list->maybe_interesting && i < list->oids.nr;
+ i++) {
+ if (list->type == OBJ_TREE) {
+ struct tree *t = lookup_tree(ctx->repo,
+ &list->oids.oid[i]);
+ if (t && !(t->object.flags & UNINTERESTING))
+ list->maybe_interesting = 1;
+ } else if (list->type == OBJ_BLOB) {
+ struct blob *b = lookup_blob(ctx->repo,
+ &list->oids.oid[i]);
+ if (b && !(b->object.flags & UNINTERESTING))
+ list->maybe_interesting = 1;
+ } else {
+ /* Tags are always interesting if visited. */
+ list->maybe_interesting = 1;
+ }
+ }
+
+ /* We have confirmed that all objects are UNINTERESTING. */
+ if (!list->maybe_interesting)
+ return 0;
+ }
+
+ /* Evaluate function pointer on this data, if requested. */
+ if ((list->type == OBJ_TREE && ctx->info->trees) ||
+ (list->type == OBJ_BLOB && ctx->info->blobs) ||
+ (list->type == OBJ_TAG && ctx->info->tags))
+ ret = ctx->info->path_fn(path, &list->oids, list->type,
+ ctx->info->path_fn_data);
+
+ /* Expand data for children. */
+ if (list->type == OBJ_TREE) {
+ for (size_t i = 0; i < list->oids.nr; i++) {
+ ret |= add_tree_entries(ctx,
+ path,
+ &list->oids.oid[i]);
+ }
+ }
+
+ oid_array_clear(&list->oids);
+ strmap_remove(&ctx->paths_to_lists, path, 1);
+ return ret;
+}
+
+static void clear_paths_to_lists(struct strmap *map)
+{
+ struct hashmap_iter iter;
+ struct strmap_entry *e;
+
+ hashmap_for_each_entry(&map->map, &iter, e, ent) {
+ struct type_and_oid_list *list = e->value;
+ oid_array_clear(&list->oids);
+ }
+ strmap_clear(map, 1);
+ strmap_init(map);
+}
+
+static struct repository *edge_repo;
+static struct type_and_oid_list *edge_tree_list;
+
+static void show_edge(struct commit *commit)
+{
+ struct tree *t = repo_get_commit_tree(edge_repo, commit);
+
+ if (!t)
+ return;
+
+ if (commit->object.flags & UNINTERESTING)
+ t->object.flags |= UNINTERESTING;
+
+ if (t->object.flags & SEEN)
+ return;
+ t->object.flags |= SEEN;
+
+ oid_array_append(&edge_tree_list->oids, &t->object.oid);
+}
+
+static int setup_pending_objects(struct path_walk_info *info,
+ struct path_walk_context *ctx)
+{
+ struct type_and_oid_list *tags = NULL;
+ struct type_and_oid_list *tagged_blobs = NULL;
+ struct type_and_oid_list *root_tree_list = NULL;
+
+ if (info->tags)
+ CALLOC_ARRAY(tags, 1);
+ if (info->blobs)
+ CALLOC_ARRAY(tagged_blobs, 1);
+ if (info->trees)
+ root_tree_list = strmap_get(&ctx->paths_to_lists, root_path);
+
+ /*
+ * Pending objects include:
+ * * Commits at branch tips.
+ * * Annotated tags at tag tips.
+ * * Any kind of object at lightweight tag tips.
+ * * Trees and blobs in the index (with an associated path).
+ */
+ for (size_t i = 0; i < info->revs->pending.nr; i++) {
+ struct object_array_entry *pending = info->revs->pending.objects + i;
+ struct object *obj = pending->item;
+
+ /* Commits will be picked up by revision walk. */
+ if (obj->type == OBJ_COMMIT)
+ continue;
+
+ /* Navigate annotated tag object chains. */
+ while (obj->type == OBJ_TAG) {
+ struct tag *tag = lookup_tag(info->revs->repo, &obj->oid);
+ if (!tag) {
+ error(_("failed to find tag %s"),
+ oid_to_hex(&obj->oid));
+ return -1;
+ }
+ if (tag->object.flags & SEEN)
+ break;
+ tag->object.flags |= SEEN;
+
+ if (tags)
+ oid_array_append(&tags->oids, &obj->oid);
+ obj = tag->tagged;
+ }
+
+ if (obj->type == OBJ_TAG)
+ continue;
+
+ /* We are now at a non-tag object. */
+ if (obj->flags & SEEN)
+ continue;
+ obj->flags |= SEEN;
+
+ switch (obj->type) {
+ case OBJ_TREE:
+ if (!info->trees)
+ continue;
+ if (pending->path) {
+ struct type_and_oid_list *list;
+ char *path = *pending->path ? xstrfmt("%s/", pending->path)
+ : xstrdup("");
+ if (!(list = strmap_get(&ctx->paths_to_lists, path))) {
+ CALLOC_ARRAY(list, 1);
+ list->type = OBJ_TREE;
+ strmap_put(&ctx->paths_to_lists, path, list);
+ }
+ oid_array_append(&list->oids, &obj->oid);
+ free(path);
+ } else {
+ /* assume a root tree, such as a lightweight tag. */
+ oid_array_append(&root_tree_list->oids, &obj->oid);
+ }
+ break;
+
+ case OBJ_BLOB:
+ if (!info->blobs)
+ continue;
+ if (pending->path) {
+ struct type_and_oid_list *list;
+ char *path = pending->path;
+ if (!(list = strmap_get(&ctx->paths_to_lists, path))) {
+ CALLOC_ARRAY(list, 1);
+ list->type = OBJ_BLOB;
+ strmap_put(&ctx->paths_to_lists, path, list);
+ }
+ oid_array_append(&list->oids, &obj->oid);
+ } else {
+ /* assume a root tree, such as a lightweight tag. */
+ oid_array_append(&tagged_blobs->oids, &obj->oid);
+ }
+ break;
+
+ case OBJ_COMMIT:
+ /* Make sure it is in the object walk */
+ if (obj != pending->item)
+ add_pending_object(info->revs, obj, "");
+ break;
+
+ default:
+ BUG("should not see any other type here");
+ }
+ }
+
+ /*
+ * Add tag objects and tagged blobs if they exist.
+ */
+ if (tagged_blobs) {
+ if (tagged_blobs->oids.nr) {
+ const char *tagged_blob_path = "/tagged-blobs";
+ tagged_blobs->type = OBJ_BLOB;
+ tagged_blobs->maybe_interesting = 1;
+ strmap_put(&ctx->paths_to_lists, tagged_blob_path, tagged_blobs);
+ push_to_stack(ctx, tagged_blob_path);
+ } else {
+ oid_array_clear(&tagged_blobs->oids);
+ free(tagged_blobs);
+ }
+ }
+ if (tags) {
+ if (tags->oids.nr) {
+ const char *tag_path = "/tags";
+ tags->type = OBJ_TAG;
+ tags->maybe_interesting = 1;
+ strmap_put(&ctx->paths_to_lists, tag_path, tags);
+ push_to_stack(ctx, tag_path);
+ } else {
+ oid_array_clear(&tags->oids);
+ free(tags);
+ }
+ }
+
+ return 0;
+}
+
+/**
+ * Given the configuration of 'info', walk the commits based on 'info->revs' and
+ * call 'info->path_fn' on each discovered path.
+ *
+ * Returns nonzero on an error.
+ */
+int walk_objects_by_path(struct path_walk_info *info)
+{
+ int ret;
+ size_t commits_nr = 0, paths_nr = 0;
+ struct commit *c;
+ struct type_and_oid_list *root_tree_list;
+ struct type_and_oid_list *commit_list;
+ struct path_walk_context ctx = {
+ .repo = info->revs->repo,
+ .revs = info->revs,
+ .info = info,
+ .path_stack = {
+ .compare = compare_by_type,
+ .cb_data = &ctx
+ },
+ .path_stack_pushed = STRSET_INIT,
+ .paths_to_lists = STRMAP_INIT
+ };
+
+ trace2_region_enter("path-walk", "commit-walk", info->revs->repo);
+
+ CALLOC_ARRAY(commit_list, 1);
+ commit_list->type = OBJ_COMMIT;
+
+ if (info->tags)
+ info->revs->tag_objects = 1;
+
+ /* Insert a single list for the root tree into the paths. */
+ CALLOC_ARRAY(root_tree_list, 1);
+ root_tree_list->type = OBJ_TREE;
+ root_tree_list->maybe_interesting = 1;
+ strmap_put(&ctx.paths_to_lists, root_path, root_tree_list);
+ push_to_stack(&ctx, root_path);
+
+ /*
+ * Set these values before preparing the walk to catch
+ * lightweight tags pointing to non-commits and indexed objects.
+ */
+ info->revs->blob_objects = info->blobs;
+ info->revs->tree_objects = info->trees;
+
+ if (prepare_revision_walk(info->revs))
+ die(_("failed to setup revision walk"));
+
+ /* Walk trees to mark them as UNINTERESTING. */
+ edge_repo = info->revs->repo;
+ edge_tree_list = root_tree_list;
+ mark_edges_uninteresting(info->revs, show_edge,
+ info->prune_all_uninteresting);
+ edge_repo = NULL;
+ edge_tree_list = NULL;
+
+ info->revs->blob_objects = info->revs->tree_objects = 0;
+
+ trace2_region_enter("path-walk", "pending-walk", info->revs->repo);
+ ret = setup_pending_objects(info, &ctx);
+ trace2_region_leave("path-walk", "pending-walk", info->revs->repo);
+
+ if (ret)
+ return ret;
+
+ while ((c = get_revision(info->revs))) {
+ struct object_id *oid;
+ struct tree *t;
+ commits_nr++;
+
+ if (info->commits)
+ oid_array_append(&commit_list->oids,
+ &c->object.oid);
+
+ /* If we only care about commits, then skip trees. */
+ if (!info->trees && !info->blobs)
+ continue;
+
+ oid = get_commit_tree_oid(c);
+ t = lookup_tree(info->revs->repo, oid);
+
+ if (!t) {
+ error("could not find tree %s", oid_to_hex(oid));
+ return -1;
+ }
+
+ if (t->object.flags & SEEN)
+ continue;
+ t->object.flags |= SEEN;
+ oid_array_append(&root_tree_list->oids, oid);
+ }
+
+ trace2_data_intmax("path-walk", ctx.repo, "commits", commits_nr);
+ trace2_region_leave("path-walk", "commit-walk", info->revs->repo);
+
+ /* Track all commits. */
+ if (info->commits && commit_list->oids.nr)
+ ret = info->path_fn("", &commit_list->oids, OBJ_COMMIT,
+ info->path_fn_data);
+ oid_array_clear(&commit_list->oids);
+ free(commit_list);
+
+ trace2_region_enter("path-walk", "path-walk", info->revs->repo);
+ while (!ret && ctx.path_stack.nr) {
+ char *path = prio_queue_get(&ctx.path_stack);
+ paths_nr++;
+
+ ret = walk_path(&ctx, path);
+
+ free(path);
+ }
+
+ /* Are there paths remaining? Likely they are from indexed objects. */
+ if (!strmap_empty(&ctx.paths_to_lists)) {
+ struct hashmap_iter iter;
+ struct strmap_entry *entry;
+
+ strmap_for_each_entry(&ctx.paths_to_lists, &iter, entry)
+ push_to_stack(&ctx, entry->key);
+
+ while (!ret && ctx.path_stack.nr) {
+ char *path = prio_queue_get(&ctx.path_stack);
+ paths_nr++;
+
+ ret = walk_path(&ctx, path);
+
+ free(path);
+ }
+ }
+
+ trace2_data_intmax("path-walk", ctx.repo, "paths", paths_nr);
+ trace2_region_leave("path-walk", "path-walk", info->revs->repo);
+
+ clear_paths_to_lists(&ctx.paths_to_lists);
+ strset_clear(&ctx.path_stack_pushed);
+ clear_prio_queue(&ctx.path_stack);
+ return ret;
+}
+
+void path_walk_info_init(struct path_walk_info *info)
+{
+ struct path_walk_info empty = PATH_WALK_INFO_INIT;
+ memcpy(info, &empty, sizeof(empty));
+}
+
+void path_walk_info_clear(struct path_walk_info *info UNUSED)
+{
+ /*
+ * This destructor is empty for now, as info->revs
+ * is not owned by 'struct path_walk_info'.
+ */
+}
diff --git a/path-walk.h b/path-walk.h
new file mode 100644
index 0000000000..414d6db23c
--- /dev/null
+++ b/path-walk.h
@@ -0,0 +1,69 @@
+/*
+ * path-walk.h : Methods and structures for walking the object graph in batches
+ * by the paths that can reach those objects.
+ */
+#include "object.h" /* Required for 'enum object_type'. */
+
+struct rev_info;
+struct oid_array;
+
+/**
+ * The type of a function pointer for the method that is called on a list of
+ * objects reachable at a given path.
+ */
+typedef int (*path_fn)(const char *path,
+ struct oid_array *oids,
+ enum object_type type,
+ void *data);
+
+struct path_walk_info {
+ /**
+ * revs provides the definitions for the commit walk, including
+ * which commits are UNINTERESTING or not. This structure is
+ * expected to be owned by the caller.
+ */
+ struct rev_info *revs;
+
+ /**
+ * The caller wishes to execute custom logic on objects reachable at a
+ * given path. Every reachable object will be visited exactly once, and
+ * the first path to see an object wins. This may not be a stable choice.
+ */
+ path_fn path_fn;
+ void *path_fn_data;
+
+ /**
+ * Initialize which object types the path_fn should be called on. This
+ * could also limit the walk to skip blobs if not set.
+ */
+ int commits;
+ int trees;
+ int blobs;
+ int tags;
+
+ /**
+ * When 'prune_all_uninteresting' is set and a path has all objects
+ * marked as UNINTERESTING, then the path-walk will not visit those
+ * objects. It will not call path_fn on those objects and will not
+ * walk the children of such trees.
+ */
+ int prune_all_uninteresting;
+};
+
+#define PATH_WALK_INFO_INIT { \
+ .blobs = 1, \
+ .trees = 1, \
+ .commits = 1, \
+ .tags = 1, \
+}
+
+void path_walk_info_init(struct path_walk_info *info);
+void path_walk_info_clear(struct path_walk_info *info);
+
+/**
+ * Given the configuration of 'info', walk the commits based on 'info->revs' and
+ * call 'info->path_fn' on each discovered path.
+ *
+ * Returns nonzero on an error.
+ */
+int walk_objects_by_path(struct path_walk_info *info);
diff --git a/perl/FromCPAN/Mail/meson.build b/perl/FromCPAN/Mail/meson.build
index 129cff161c..b4ff2fc0b2 100644
--- a/perl/FromCPAN/Mail/meson.build
+++ b/perl/FromCPAN/Mail/meson.build
@@ -4,4 +4,5 @@ test_dependencies += custom_target(
command: generate_perl_command,
install: true,
install_dir: get_option('datadir') / 'perl5/FromCPAN/Mail',
+ depends: [git_version_file],
)
diff --git a/perl/FromCPAN/meson.build b/perl/FromCPAN/meson.build
index 4e7ea909df..1f9ea6ce8e 100644
--- a/perl/FromCPAN/meson.build
+++ b/perl/FromCPAN/meson.build
@@ -4,6 +4,7 @@ test_dependencies += custom_target(
command: generate_perl_command,
install: true,
install_dir: get_option('datadir') / 'perl5/FromCPAN',
+ depends: [git_version_file],
)
subdir('Mail')
diff --git a/perl/Git/LoadCPAN/Mail/meson.build b/perl/Git/LoadCPAN/Mail/meson.build
index 7da5b37adb..89cde56be8 100644
--- a/perl/Git/LoadCPAN/Mail/meson.build
+++ b/perl/Git/LoadCPAN/Mail/meson.build
@@ -4,4 +4,5 @@ test_dependencies += custom_target(
command: generate_perl_command,
install: true,
install_dir: get_option('datadir') / 'perl5/Git/LoadCPAN/Mail',
+ depends: [git_version_file],
)
diff --git a/perl/Git/LoadCPAN/meson.build b/perl/Git/LoadCPAN/meson.build
index 9468c073ae..1ee915c650 100644
--- a/perl/Git/LoadCPAN/meson.build
+++ b/perl/Git/LoadCPAN/meson.build
@@ -4,6 +4,7 @@ test_dependencies += custom_target(
command: generate_perl_command,
install: true,
install_dir: get_option('datadir') / 'perl5/Git/LoadCPAN',
+ depends: [git_version_file],
)
subdir('Mail')
diff --git a/perl/Git/SVN/Memoize/meson.build b/perl/Git/SVN/Memoize/meson.build
index 515ab3dd92..233ec670d7 100644
--- a/perl/Git/SVN/Memoize/meson.build
+++ b/perl/Git/SVN/Memoize/meson.build
@@ -4,4 +4,5 @@ test_dependencies += custom_target(
command: generate_perl_command,
install: true,
install_dir: get_option('datadir') / 'perl5/Git/SVN',
+ depends: [git_version_file],
)
diff --git a/perl/Git/SVN/meson.build b/perl/Git/SVN/meson.build
index 8338531041..44abaf42b7 100644
--- a/perl/Git/SVN/meson.build
+++ b/perl/Git/SVN/meson.build
@@ -14,6 +14,7 @@ foreach source : [
command: generate_perl_command,
install: true,
install_dir: get_option('datadir') / 'perl5/Git/SVN',
+ depends: [git_version_file],
)
endforeach
diff --git a/perl/Git/meson.build b/perl/Git/meson.build
index 259209d730..b21fa5591e 100644
--- a/perl/Git/meson.build
+++ b/perl/Git/meson.build
@@ -11,6 +11,7 @@ foreach source : [
command: generate_perl_command,
install: true,
install_dir: get_option('datadir') / 'perl5/Git',
+ depends: [git_version_file],
)
endforeach
diff --git a/perl/meson.build b/perl/meson.build
index c22d6f8a1a..2d4ab1c4a9 100644
--- a/perl/meson.build
+++ b/perl/meson.build
@@ -4,6 +4,7 @@ test_dependencies += custom_target(
command: generate_perl_command,
install: true,
install_dir: get_option('datadir') / 'perl5',
+ depends: [git_version_file],
)
subdir('Git')
diff --git a/po/bg.po b/po/bg.po
index 1f7222dd93..2fc6c2b60c 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -225,6 +225,14 @@
# mailmap файл за ÑъответÑтвиÑта на имената и адреÑите на е-поща
# unit test поединичен теÑÑ‚
# test suite група теÑтове
+# object database базата от данни за обектите
+# expecting integer изиÑква Ñе чиÑло
+# timeout макÑимално изчакване
+# init timeout макÑимално първоначално изчакване
+# implies option включва опциÑта
+# cache-tree кеша на обектите-дървета
+# acquire lock придобивам ключалка
+# detached отделѐн, неÑвързан
#
# ------------------------
# „$var“ - може да не Ñработва за shell има gettext и eval_gettext - проверка - намират Ñе леÑно по „$
@@ -251,10 +259,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.45\n"
+"Project-Id-Version: git 2.48\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2024-10-05 01:20+0000\n"
-"PO-Revision-Date: 2024-10-05 13:20+0200\n"
+"POT-Creation-Date: 2024-12-27 22:37+0100\n"
+"PO-Revision-Date: 2024-12-27 22:40+0100\n"
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
"Language: bg\n"
@@ -564,8 +572,8 @@ msgstr ""
#, c-format
msgid "Discard mode change from worktree [y,n,q,a,d%s,?]? "
msgstr ""
-"Премахване на промÑната в права̀та за доÑтъп от работното дърво [y,n,q,a,"
-"d%s,?]? "
+"Премахване на промÑната в права̀та за доÑтъп от работното дърво "
+"[y,n,q,a,d%s,?]? "
#, c-format
msgid "Discard deletion from worktree [y,n,q,a,d%s,?]? "
@@ -605,8 +613,8 @@ msgstr ""
#, c-format
msgid "Discard mode change from index and worktree [y,n,q,a,d%s,?]? "
msgstr ""
-"Премахване на промÑната в права̀та за доÑтъп от индекÑа и работното дърво [y,"
-"n,q,a,d%s,?]? "
+"Премахване на промÑната в права̀та за доÑтъп от индекÑа и работното дърво "
+"[y,n,q,a,d%s,?]? "
#, c-format
msgid "Discard deletion from index and worktree [y,n,q,a,d%s,?]? "
@@ -641,8 +649,8 @@ msgstr ""
#, c-format
msgid "Apply mode change to index and worktree [y,n,q,a,d%s,?]? "
msgstr ""
-"Прилагане на промÑната в права̀та за доÑтъп от индекÑа и работното дърво [y,n,"
-"q,a,d%s,?]? "
+"Прилагане на промÑната в права̀та за доÑтъп от индекÑа и работното дърво "
+"[y,n,q,a,d%s,?]? "
#, c-format
msgid "Apply deletion to index and worktree [y,n,q,a,d%s,?]? "
@@ -676,8 +684,8 @@ msgstr ""
#, c-format
msgid "Apply mode change to worktree [y,n,q,a,d%s,?]? "
msgstr ""
-"Прилагане на промÑната в права̀та за доÑтъп към работното дърво [y,n,q,a,"
-"d%s,?]? "
+"Прилагане на промÑната в права̀та за доÑтъп към работното дърво "
+"[y,n,q,a,d%s,?]? "
#, c-format
msgid "Apply deletion to worktree [y,n,q,a,d%s,?]? "
@@ -893,12 +901,12 @@ msgstr "Променени Ñа Ñамо двоични файлове."
#, c-format
msgid ""
"\n"
-"Disable this message with \"git config advice.%s false\""
+"Disable this message with \"git config set advice.%s false\""
msgstr ""
"\n"
"За да изключите това предупреждение, изпълнете:\n"
"\n"
-" git config advice.%s false"
+" git config set advice.%s false"
#, c-format
msgid "%shint:%s%.*s%s\n"
@@ -1016,8 +1024,8 @@ msgstr ""
"\n"
" git switch -\n"
"\n"
-"Може да Ñпрете това Ñъобщение ÑÑŠÑ Ð·Ð°Ð´Ð°Ð²Ð°Ð½Ðµ на наÑтройката „advice."
-"detachedHead“\n"
+"Може да Ñпрете това Ñъобщение ÑÑŠÑ Ð·Ð°Ð´Ð°Ð²Ð°Ð½Ðµ на наÑтройката "
+"„advice.detachedHead“\n"
"да е „false“ (лъжа̀).\n"
#, c-format
@@ -1247,7 +1255,7 @@ msgstr "двоичната кръпка не може да Ñе приложи Ð
#, c-format
msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
msgstr ""
-"двоичната кръпка за „%s“ води до неправилни резултати (очакваше Ñе: „%s“, а "
+"двоичната кръпка за „%s“ води до неправилни резултати (изиÑква Ñе: „%s“, а "
"бе получено: „%s“)"
#, c-format
@@ -2651,9 +2659,9 @@ msgid ""
"git bisect start [--term-(new|bad)=<term> --term-(old|good)=<term>] [--no-"
"checkout] [--first-parent] [<bad> [<good>...]] [--] [<pathspec>...]"
msgstr ""
-"git bisect start [--term-(new,bad)=УПРÐВЛЯВÐЩÐ_ДУМР--term-(old,"
-"good)=УПРÐВЛЯВÐЩÐ_ДУМÐ] [--no-checkout] [--first-parent] [ЛОШО [ДОБРО…]] "
-"[--] [ПЪТ…]"
+"git bisect start [--term-(new,bad)=УПРÐВЛЯВÐЩÐ_ДУМР--term-"
+"(old,good)=УПРÐВЛЯВÐЩÐ_ДУМÐ] [--no-checkout] [--first-parent] [ЛОШО "
+"[ДОБРО…]] [--] [ПЪТ…]"
msgid "git bisect (good|bad) [<rev>...]"
msgstr "git bisect (good|bad) [ВЕРСИЯ…]"
@@ -2936,7 +2944,7 @@ msgstr "ОПЦИИте_ЗÐ_ВЕРСИЯТРÑа документирани в
#, c-format
msgid "expecting a color: %s"
-msgstr "трÑбва да е цвÑÑ‚: %s"
+msgstr "изиÑква Ñе цвÑÑ‚: %s"
msgid "must end with a color"
msgstr "трÑбва да завършва Ñ Ñ†Ð²ÑÑ‚"
@@ -3349,8 +3357,8 @@ msgid "HEAD not found below refs/heads!"
msgstr "Ð’ директориÑта „refs/heads“ липÑва файл „HEAD“"
msgid ""
-"branch with --recurse-submodules can only be used if submodule."
-"propagateBranches is enabled"
+"branch with --recurse-submodules can only be used if "
+"submodule.propagateBranches is enabled"
msgstr ""
"може да Ñе ползва клон Ñ Ð¾Ð¿Ñ†Ð¸Ñта „--recurse-submodules“, Ñамо ако "
"наÑтройката „submodule.propagateBranches“ е зададена"
@@ -3653,8 +3661,8 @@ msgstr "позволÑване на опциите „-s“ и „-t“ да Ñ€Ð
msgid "use mail map file"
msgstr ""
-"използване на файл за ÑъответÑтвиÑта на имената и адреÑите на е-поща („."
-"mailmap“)"
+"използване на файл за ÑъответÑтвиÑта на имената и адреÑите на е-поща "
+"(„.mailmap“)"
msgid "Batch objects requested on stdin (or --batch-all-objects)"
msgstr ""
@@ -4206,7 +4214,7 @@ msgstr ""
"„zdiff3“)"
msgid "detach HEAD at named commit"
-msgstr "отделÑне на ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ â€žHEAD“ към указаното подаване"
+msgstr "отделÑне на ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ â€žHEAD“ при указаното подаване"
msgid "force checkout (throw away local modifications)"
msgstr "принудително изтеглÑне (вашите промѐни ще бъдат занулени)"
@@ -4220,8 +4228,8 @@ msgstr "нов неродѐн клон"
msgid "update ignored files (default)"
msgstr "обновÑване на игнорираните файлове (Ñтандартно)"
-msgid "do not check if another worktree is holding the given ref"
-msgstr "без проверка дали друго работно дърво държи указателÑ"
+msgid "do not check if another worktree is using this branch"
+msgstr "без проверка дали друго работно дърво ползва този клон"
msgid "checkout our version for unmerged files"
msgstr "изтеглÑне на вашата верÑÐ¸Ñ Ð½Ð° неÑлетите файлове"
@@ -4525,10 +4533,10 @@ msgstr "плитко клониране до тази ДЪЛБОЧИÐÐ"
msgid "create a shallow clone since a specific time"
msgstr "плитко клониране до момент във времето"
-msgid "revision"
-msgstr "ВЕРСИЯ"
+msgid "ref"
+msgstr "УКÐЗ"
-msgid "deepen history of shallow clone, excluding rev"
+msgid "deepen history of shallow clone, excluding ref"
msgstr "задълбочаване на иÑториÑта на плитко хранилище до изключващ указател"
msgid "clone only one branch, HEAD or --branch"
@@ -5509,9 +5517,10 @@ msgstr ""
msgid ""
"git config unset [<file-option>] [--all] [--value=<value>] [--fixed-value] "
-"<name> <value>"
+"<name>"
msgstr ""
-"git config unset [ОПЦИЯ_ЗÐ_ФÐЙЛ] [--all] [--value=СТОЙÐОСТ] [--fixed-value]"
+"git config unset [ОПЦИЯ_ЗÐ_ФÐЙЛ] [--all] [--value=СТОЙÐОСТ] [--fixed-value] "
+"ИМЕ"
msgid "git config rename-section [<file-option>] <old-name> <new-name>"
msgstr "git config rename-section [ОПЦИЯ_ЗÐ_ФÐЙЛ] СТÐРО_ИМЕ ÐОВО_ИМЕ"
@@ -5963,12 +5972,8 @@ msgid "traversed %lu commits\n"
msgstr "обходени Ñа %lu подаваниÑ\n"
#, c-format
-msgid ""
-"more than %i tags found; listed %i most recent\n"
-"gave up search at %s\n"
-msgstr ""
-"открити Ñа над %i етикета, изведени Ñа поÑледните %i,\n"
-"търÑенето бе прекратено при „%s“.\n"
+msgid "found %i tags; gave up search at %s\n"
+msgstr "открити Ñа %i етикета. ТърÑенето приключи при „%s“\n"
#, c-format
msgid "describe %s\n"
@@ -6414,6 +6419,27 @@ msgstr "„%s“ е неправилен обект"
msgid "the object %s does not exist"
msgstr "обектът „%s“ не ÑъщеÑтвува"
+#, c-format
+msgid ""
+"Run 'git remote set-head %s %s' to follow the change, or set\n"
+"'remote.%s.followRemoteHEAD' configuration option to a different value\n"
+"if you do not want to see this message. Specifically running\n"
+"'git config set remote.%s.followRemoteHEAD %s' will disable the warning\n"
+"until the remote changes HEAD to something else."
+msgstr ""
+"Изпълнете\n"
+"\n"
+" git remote set-head %s %s\n"
+"\n"
+"за да Ñледвате промÑната или задайте друга ÑтойноÑÑ‚ на наÑтройката\n"
+"„remote.%s.followRemoteHEAD, ако не иÑкате тези ÑъобщениÑ.\n"
+"Изпълнението на\n"
+"\n"
+" git config set remote.%s.followRemoteHEAD %s\n"
+"\n"
+"ще изключи предупреждението, докато отдалечениÑÑ‚ указател HEAD не\n"
+"започне да Ñочи нещо друго."
+
msgid "multiple branches detected, incompatible with --set-upstream"
msgstr ""
"заÑечени Ñа множеÑтво клони, това е неÑъвмеÑтимо Ñ Ð¾Ð¿Ñ†Ð¸Ñта „--set-upstream“"
@@ -6553,6 +6579,9 @@ msgstr "КÐРТÐ_С_УКÐЗÐТЕЛИ"
msgid "specify fetch refmap"
msgstr "указване на КÐРТÐта_С_УКÐЗÐТЕЛИ за доÑтавÑне"
+msgid "revision"
+msgstr "ВЕРСИЯ"
+
msgid "report that we have only objects reachable from this object"
msgstr "докладване, че вÑички обекти може Ñа доÑтижими при започване от този"
@@ -6608,8 +6637,8 @@ msgid "protocol does not support --negotiate-only, exiting"
msgstr "протоколът не поддържа опциÑта „--negotiate-only“, изход от програмата"
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“ може да Ñе ползва Ñамо Ñ Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¾Ñ‚Ð¾ хранилище указано в "
"наÑтройката „extensions.partialclone“"
@@ -6859,7 +6888,7 @@ msgstr "„%s“ Ñочи към нещо необичайно (%s)"
#, c-format
msgid "%s: detached HEAD points at nothing"
-msgstr "%s: неÑвързаниÑÑ‚ връх „HEAD“ не Ñочи към нищо"
+msgstr "%s: отделениÑÑ‚ връх „HEAD“ не Ñочи към нищо"
#, c-format
msgid "notice: %s points to an unborn branch (%s)"
@@ -7169,8 +7198,8 @@ msgstr "неуÑпешно изпълнение на „git multi-pack-index rep
msgid ""
"skipping incremental-repack task because core.multiPackIndex is disabled"
msgstr ""
-"задачата „incremental-repack“ Ñе преÑкача, защото наÑтройката „core."
-"multiPackIndex“ е изключена"
+"задачата „incremental-repack“ Ñе преÑкача, защото наÑтройката "
+"„core.multiPackIndex“ е изключена"
#, c-format
msgid "lock file '%s' exists, skipping maintenance"
@@ -7291,8 +7320,25 @@ msgstr "липÑват както таймери на systemd, така и cront
msgid "%s scheduler is not available"
msgstr "планиращиÑÑ‚ модул „%s“ липÑва"
-msgid "another process is scheduling background maintenance"
-msgstr "друг Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð·Ð°Ð´Ð°Ð²Ð° поддръжката на заден фон"
+#, c-format
+msgid ""
+"unable to create '%s.lock': %s.\n"
+"\n"
+"Another scheduled git-maintenance(1) process seems to be running in this\n"
+"repository. Please make sure no other maintenance processes are running and\n"
+"then try again. If it still fails, a git-maintenance(1) process may have\n"
+"crashed in this repository earlier: remove the file manually to continue."
+msgstr ""
+"Файлът-ключалка „%s.lock“ не може да бъде Ñъздаден: %s\n"
+"\n"
+"Изглежда, че и друг Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð° git-maintenance(1) е пуÑнат в това\n"
+"хранилище. Уверете Ñе, че вÑички подобни процеÑи Ñа Ñпрени и опитайте\n"
+"отново. Ðко това не помогне, вероÑтната причина е, че нÑкой Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð°\n"
+"git-maintenance(1) в това хранилище е забил. За да продължите работа,\n"
+"ще трÑбва ръчно да изтриете файла:"
+
+msgid "cannot acquire lock for scheduled background maintenance"
+msgstr "не може да Ñе придобие ключалката за поддръжката на заден фон"
msgid "git maintenance start [--scheduler=<scheduler>]"
msgstr "git maintenance start [--scheduler=ПЛÐÐИРÐЩ_МОДУЛ]"
@@ -7876,6 +7922,24 @@ msgid_plural "chain length = %d: %lu objects"
msgstr[0] "дължината на веригата е %d: %lu обект"
msgstr[1] "дължината на веригата е %d: %lu обекта"
+msgid "could not start pack-objects to repack local links"
+msgstr ""
+"командата „pack-objects“ не може да Ñе Ñтартира за препакетирането на "
+"локалните връзки"
+
+msgid "failed to feed local object to pack-objects"
+msgstr "локалните обекти не може да Ñе подадат на командата „pack-objects“"
+
+msgid "index-pack: Expecting full hex object ID lines only from pack-objects."
+msgstr ""
+"index-pack: от „pack-objects“ Ñе изиÑкват редове Ñамо Ñ Ð¿ÑŠÐ»Ð½Ð¸ шеÑтнайÑетични "
+"указатели."
+
+msgid "could not finish pack-objects to repack local links"
+msgstr ""
+"командата „pack-objects“ не може да завърши за препакетирането на локалните "
+"връзки"
+
msgid "Cannot come back to cwd"
msgstr "ПроцеÑÑŠÑ‚ не може да Ñе върне към предишната работна директориÑ"
@@ -7887,6 +7951,9 @@ msgstr "неправилна ÑтойноÑÑ‚ „%s“"
msgid "unknown hash algorithm '%s'"
msgstr "непознат алгоритъм за контролни Ñуми „%s“"
+msgid "--promisor cannot be used with a pack name"
+msgstr "опциÑта „--promisor“ е неÑъвмеÑтима Ñ Ð¸Ð¼Ðµ на пакет"
+
msgid "--stdin requires a git repository"
msgstr "„--stdin“ изиÑква хранилище на git"
@@ -9283,11 +9350,14 @@ msgstr "git notes [--ref УКÐЗÐТЕЛ_ЗÐ_БЕЛЕЖКÐ] [list [ОБЕКТ
msgid ""
"git notes [--ref <notes-ref>] add [-f] [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
msgstr ""
+"git notes [--ref <notes-ref>] add [-f] [--allow-empty] [--[no-]separator|--"
+"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
+"| -C) <object>] [<object>] [-e]\n"
"git notes [--ref УКÐЗÐТЕЛ_ЗÐ_БЕЛЕЖКÐ] add [-f] [--allow-empty] [--"
"[no-]separator|--separator=<paragraph-break>] [--[no-]stripspace] [-m "
-"СЪОБЩЕÐИЕ|-F ФÐЙЛ|(-c|-C) ОБЕКТ] [ОБЕКТ]"
+"СЪОБЩЕÐИЕ|-F ФÐЙЛ|(-c|-C) ОБЕКТ] [ОБЕКТ] [-e]"
msgid "git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>"
msgstr ""
@@ -9296,11 +9366,11 @@ msgstr ""
msgid ""
"git notes [--ref <notes-ref>] append [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
msgstr ""
"git notes [--ref УКÐЗÐТЕЛ_ЗÐ_БЕЛЕЖКÐ] append [--allow-empty] [--"
"[no-]separator|--separator=КРÐЙ_ÐÐ_ÐБЗÐЦ] [--[no-]stripspace] [-m СЪОБЩЕÐИЕ "
-"| -F ФÐЙЛ|(-c|-C) ОБЕКТ] [ОБЕКТ]"
+"| -F ФÐЙЛ|(-c|-C) ОБЕКТ] [ОБЕКТ] [-e]"
msgid "git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]"
msgstr "git notes [--ref УКÐЗÐТЕЛ_ЗÐ_БЕЛЕЖКÐ] edit [--allow-empty] [ОБЕКТ]"
@@ -9422,6 +9492,9 @@ msgstr "ФÐЙЛ ÑÑŠÑ Ñъдържанието на бележката"
msgid "reuse and edit specified note object"
msgstr "преизползване и редактиране на ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÐžÐ‘Ð•ÐšÐ¢-бележка"
+msgid "edit note message in editor"
+msgstr "редактиране на Ñъобщението в редактора"
+
msgid "reuse specified note object"
msgstr "преизползване на ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÐžÐ‘Ð•ÐšÐ¢-бележка"
@@ -9660,7 +9733,7 @@ msgstr "неуÑпешно запиÑване на индекÑи на база
#, c-format
msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
-msgstr "бÑха запиÑани %<PRIu32> обекти, а Ñе очакваха %<PRIu32>"
+msgstr "бÑха запиÑани %<PRIu32> обекти, а Ñе изиÑкват %<PRIu32>"
msgid "disabling bitmap writing, as some objects are not being packed"
msgstr ""
@@ -9940,6 +10013,9 @@ msgstr "как да Ñе обработват липÑващите обекти"
msgid "do not pack objects in promisor packfiles"
msgstr "без пакетиране на обекти в гарантиращи пакети"
+msgid "implies --missing=allow-any"
+msgstr "включва опциÑта „--missing=allow-any“"
+
msgid "respect islands during delta compression"
msgstr "без промÑна на групите при делта компреÑиÑ"
@@ -10315,7 +10391,7 @@ msgid ""
" git push %s HEAD:<name-of-remote-branch>\n"
msgstr ""
"Ð’ момента не Ñте на никой клон. За да изтлаÑкате иÑториÑта до ÑÑŠÑтоÑнието,\n"
-"Ñочено в момента от ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ â€žHEAD“, използвайте командата:\n"
+"Ñочено в момента от (неÑвързаниÑ) указател „HEAD“, използвайте командата:\n"
"\n"
" git push %s HEAD:ИМЕ_ÐÐ_ОТДÐЛЕЧЕÐИЯ_КЛОÐ\n"
@@ -11592,6 +11668,30 @@ msgid_plural " Local refs configured for 'git push'%s:"
msgstr[0] " ЛокалниÑÑ‚ указател, наÑтроен за „git push“%s:"
msgstr[1] " Локалните указатели, наÑтроени за „git push“%s:"
+#, c-format
+msgid "'%s/HEAD' is unchanged and points to '%s'\n"
+msgstr "„%s/HEAD“ не е променен и Ñочи към „%s“\n"
+
+#, c-format
+msgid "'%s/HEAD' has changed from '%s' and now points to '%s'\n"
+msgstr "„%s/HEAD“ е променен от „%s“ и Ñега Ñочи към „%s“\n"
+
+#, c-format
+msgid "'%s/HEAD' is now created and points to '%s'\n"
+msgstr "„%s/HEAD“ е Ñъздаден и Ñочи към „%s“\n"
+
+#, c-format
+msgid "'%s/HEAD' was detached at '%s' and now points to '%s'\n"
+msgstr "„%s/HEAD“ е отделѐн при „%s“ и Ñочи към „%s“\n"
+
+#, c-format
+msgid ""
+"'%s/HEAD' used to point to '%s' (which is not a remote branch), but now "
+"points to '%s'\n"
+msgstr ""
+"„%s/HEAD“ Ñочеше към „%s“ (което не е отдалечен клон), но Ñега Ñочи към "
+"„%s“\n"
+
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr "задаване на refs/remotes/ИМЕ/HEAD Ñпоред отдалеченото хранилище"
@@ -11614,7 +11714,7 @@ msgid "Not a valid ref: %s"
msgstr "Ðеправилен указател: %s"
#, c-format
-msgid "Could not setup %s"
+msgid "Could not set up %s"
msgstr "„%s“ не може да Ñе наÑтрои"
#, c-format
@@ -12287,8 +12387,8 @@ msgstr ""
" или: git rev-parse --sq-quote [ÐРГУМЕÐТ…]\n"
" или: git rev-parse [ОПЦИЯ…] [ÐРГУМЕÐТ…]\n"
"\n"
-"За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° Ð¿ÑŠÑ€Ð²Ð¸Ñ Ð²Ð°Ñ€Ð¸Ð°Ð½Ñ‚ изпълнете „git rev-parse --parseopt -"
-"h“"
+"За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° Ð¿ÑŠÑ€Ð²Ð¸Ñ Ð²Ð°Ñ€Ð¸Ð°Ð½Ñ‚ изпълнете „git rev-parse --parseopt "
+"-h“"
msgid "--resolve-git-dir requires an argument"
msgstr "опциÑта „--resolve-git-dir“ изиÑква аргумент"
@@ -13119,7 +13219,7 @@ msgstr "добавÑне на „# “ в началото на вÑеки реÐ
#, c-format
msgid "Expecting a full ref name, got %s"
-msgstr "Очаква Ñе пълно име на указател, а не „%s“"
+msgstr "ИзиÑква Ñе пълно име на указател, а не „%s“"
#, c-format
msgid "could not get a repository handle for submodule '%s'"
@@ -13546,7 +13646,8 @@ msgid "don't print cloning progress"
msgstr "без извеждане на напредъка на клонирането"
msgid "disallow cloning into non-empty directory, implies --init"
-msgstr "предотвратÑване на клониране в непразна иÑториÑ, включва „--init“"
+msgstr ""
+"предотвратÑване на клониране в непразна иÑториÑ, включва опциÑта „--init“"
msgid ""
"git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] "
@@ -14403,6 +14504,9 @@ msgstr "задаване на режима на Ñледене (виж git-branc
msgid "try to match the new branch name with a remote-tracking branch"
msgstr "опит за напаÑване на името на Ð½Ð¾Ð²Ð¸Ñ ÐºÐ»Ð¾Ð½ Ñ Ñ‚Ð¾Ð²Ð° на ÑледÑщ клон"
+msgid "use relative paths for worktrees"
+msgstr "използване на отноÑителни пътища за работните дървета"
+
#, c-format
msgid "options '%s', '%s', and '%s' cannot be used together"
msgstr "опциите „%s“, „%s“ и „%s“ Ñа неÑъвмеÑтими"
@@ -14684,6 +14788,26 @@ msgstr "файлът „%s“ не може да бъде Ñъздаден"
msgid "index-pack died"
msgstr "командата „git index-pack“ не завърши уÑпешно"
+#, c-format
+msgid "directory '%s' is present in index, but not sparse"
+msgstr "директориÑта „%s“ е в индекÑа, но не е чаÑтична"
+
+msgid "corrupted cache-tree has entries not present in index"
+msgstr "повредениÑÑ‚ кеш на обектите-дървета Ñъдържа запиÑи извън индекÑа"
+
+#, c-format
+msgid "%s with flags 0x%x should not be in cache-tree"
+msgstr "„%s“ Ñ Ñ„Ð»Ð°Ð³Ð¾Ð²Ðµ 0x%x не трÑбва да е в кеша на обектите-дървета"
+
+#, c-format
+msgid "bad subtree '%.*s'"
+msgstr "неправилно поддърво „%.*s“"
+
+#, c-format
+msgid "cache-tree for path %.*s does not match. Expected %s got %s"
+msgstr ""
+"кешираниÑÑ‚ обект-дърво за Ð¿ÑŠÑ‚Ñ â€ž%.*s“ не Ñъвпада. ИзиÑква Ñе „%s“, а не „%s“"
+
msgid "terminating chunk id appears earlier than expected"
msgstr "идентификаторът за краен Ð¾Ñ‚ÐºÑŠÑ Ñе ÑвÑва по-рано от очакваното"
@@ -15468,7 +15592,7 @@ msgstr "временниÑÑ‚ файл на гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸ÑÑ‚Ð
#, c-format
msgid "cannot merge graphs with %<PRIuMAX>, %<PRIuMAX> commits"
msgstr ""
-"не може да Ñе ÑлеÑÑ‚ графове Ñ %<PRIuMAX> и %<PRIuMAX> Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ (Ñъответно)"
+"не може да Ñе ÑлеÑÑ‚ гра̀фи Ñ %<PRIuMAX> и %<PRIuMAX> Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ (Ñъответно)"
#, c-format
msgid "cannot merge graph %s, too many commits: %<PRIuMAX>"
@@ -15490,8 +15614,8 @@ msgid ""
"attempting to write a commit-graph, but 'commitGraph.changedPathsVersion' "
"(%d) is not supported"
msgstr ""
-"опит за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта, но наÑтройката „commitGraph."
-"changedPathsVersion“ (%d) не Ñе поддържа"
+"опит за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта, но наÑтройката "
+"„commitGraph.changedPathsVersion“ (%d) не Ñе поддържа"
msgid "too many commits to write graph"
msgstr "прекалено много Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ Ð·Ð° запиÑване на гра̀фа"
@@ -15578,7 +15702,7 @@ msgid ""
"to convert the grafts into replace refs.\n"
"\n"
"Turn this message off by running\n"
-"\"git config advice.graftFileDeprecated false\""
+"\"git config set advice.graftFileDeprecated false\""
msgstr ""
"Поддръжката на „<GIT_DIR>/info/grafts“ е оÑтарÑла.\n"
"Ð’ бъдеща верÑÐ¸Ñ Ð½Ð° Git ще бъде премахната.\n"
@@ -15590,7 +15714,7 @@ msgstr ""
"\n"
"За да изключите това Ñъобщение, изпълнете:\n"
"\n"
-" git config advice.graftFileDeprecated false"
+" git config set advice.graftFileDeprecated false"
#, c-format
msgid "commit %s exists in commit-graph but not in the object database"
@@ -16445,6 +16569,24 @@ msgstr "адреÑÑŠÑ‚ е без Ñхема: %s"
msgid "credential url cannot be parsed: %s"
msgstr "адреÑÑŠÑ‚ за Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð½Ðµ може да Ñе анализира: „%s“"
+#, c-format
+msgid "invalid timeout '%s', expecting a non-negative integer"
+msgstr ""
+"неправилна ÑтойноÑÑ‚ за „timeout“ (макÑимално изчакване) „%s“, изиÑква Ñе "
+"неотрицателно цÑло чиÑло"
+
+#, c-format
+msgid "invalid init-timeout '%s', expecting a non-negative integer"
+msgstr ""
+"неправилна ÑтойноÑÑ‚ за „init-timeout“ (макÑимално първоначално изчакване): "
+"„%s“, изиÑква Ñе неотрицателно цÑло чиÑло"
+
+#, c-format
+msgid "invalid max-connections '%s', expecting an integer"
+msgstr ""
+"неправилна ÑтойноÑÑ‚ за „max-connections“ (макÑÐ¸Ð¼Ð°Ð»Ð½Ð¸Ñ Ð±Ñ€Ð¾Ð¹ връзки): „%s“, "
+"изиÑква Ñе цÑло чиÑло"
+
msgid "in the future"
msgstr "в бъдещето"
@@ -17170,6 +17312,22 @@ msgstr "неправилен път към проÑтранÑтва от имеÐ
msgid "too many args to run %s"
msgstr "прекалено много аргументи за изпълнение „%s“"
+#, c-format
+msgid ""
+"You are attempting to fetch %s, which is in the commit graph file but not in "
+"the object database.\n"
+"This is probably due to repo corruption.\n"
+"If you are attempting to repair this repo corruption by refetching the "
+"missing object, use 'git fetch --refetch' with the missing object."
+msgstr ""
+"Пробвате да доÑтавите „%s“, което е в гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта, но не и в базата "
+"от данни за обектите.\n"
+"Ðай-вероÑтната причина е повредено хранилище.\n"
+"За да поправите хранилището като изтеглите липÑÐ²Ð°Ñ‰Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚ наново, "
+"изпълнете:\n"
+"\n"
+" git fetch --refetch"
+
msgid "git fetch-pack: expected shallow list"
msgstr "git fetch-pack: очаква Ñе плитък ÑпиÑък"
@@ -17770,11 +17928,12 @@ msgstr[1] ""
#, 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`."
+"You can disable this warning with `git config set advice.ignoredHook false`."
msgstr ""
"Куката „%s“ Ñе преÑкача, защото липÑват права̀ за изпълнение.\n"
"За да изключите това предупреждение, изпълнете:\n"
-" git config advice.ignoredHook false"
+"\n"
+" git config set advice.ignoredHook false"
msgid "not a git repository"
msgstr "не е хранилище на Git"
@@ -17791,15 +17950,9 @@ msgstr ""
msgid "Delegation control is not supported with cURL < 7.22.0"
msgstr "Управлението на делегирането не Ñе поддържа от cURL < 7.22.0"
-msgid "Public key pinning not supported with cURL < 7.39.0"
-msgstr "Задаването на поÑтоÑнен публичен ключ не Ñе поддържа от cURL < 7.39.0"
-
msgid "Unknown value for http.proactiveauth"
msgstr "Ðепозната ÑтойноÑÑ‚ за „http.proactiveauth“"
-msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
-msgstr "„CURLSSLOPT_NO_REVOKE“ не Ñе поддържа от cURL < 7.44.0"
-
#, c-format
msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
msgstr "Ðеподдържана Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° SSL „%s“. Поддържат Ñе:"
@@ -17992,6 +18145,10 @@ msgid "unable to format message: %s"
msgstr "Ñъобщението не може да Ñе форматира: %s"
#, c-format
+msgid "invalid marker-size '%s', expecting an integer"
+msgstr "неправилен размер на маркер: „%s“, изиÑква Ñе цÑло чиÑло"
+
+#, c-format
msgid "Failed to merge submodule %s (not checked out)"
msgstr "ÐеуÑпешно Ñливане на подмодула „%s“ (не е изтеглен)"
@@ -19147,7 +19304,7 @@ msgid ""
"\n"
"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
+"running \"git config set advice.objectNameWarning false\""
msgstr ""
"При нормална работа Git никога не Ñъздава указатели, които завършват\n"
"Ñ 40 шеÑтнадеÑетични знака, защото Ñтандартно те ще бъдат преÑкачани.\n"
@@ -19159,7 +19316,7 @@ msgstr ""
"Ñе Ñъздава подобен указател. Прегледайте тези указатели и ги изтрийте.\n"
"За да изключите това Ñъобщение, изпълнете:\n"
"\n"
-" git config advice.objectNameWarning false"
+" config set advice.objectNameWarning false"
#, c-format
msgid "log for '%.*s' only goes back to %s"
@@ -19330,15 +19487,6 @@ msgstr "задължителниÑÑ‚ обратен Ð¸Ð½Ð´ÐµÐºÑ Ð»Ð¸Ð¿Ñва в
msgid "could not open pack %s"
msgstr "пакетът „%s“ не може да Ñе отвори"
-msgid "could not determine MIDX preferred pack"
-msgstr ""
-"предпочитаниÑÑ‚ пакет за файла Ñ Ð¸Ð½Ð´ÐµÐºÑа за множеÑтво пакети не може да Ñе "
-"определи"
-
-#, c-format
-msgid "preferred pack (%s) is invalid"
-msgstr "предпочитаниÑÑ‚ пакет „%s“ е неправилен"
-
msgid "corrupt bitmap lookup table: triplet position out of index"
msgstr ""
"повредена таблица ÑÑŠÑ ÑъответÑтвиÑ: меÑтоположението на тройката е извън "
@@ -20497,20 +20645,28 @@ msgstr "журналът Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта за ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ â€ž%s
msgid "log for %s is empty"
msgstr "журналът Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта за ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ â€ž%s“ е празен"
-msgid "refusing to force and skip creation of reflog"
-msgstr ""
-"принудителна Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð±ÐµÐ· Ñъздаване на журнал на указателите нÑма да Ñе "
-"приеме"
-
#, c-format
-msgid "refusing to update ref with bad name '%s'"
-msgstr "указател не може да Ñе обнови Ñ Ð³Ñ€ÐµÑˆÐ½Ð¾ име „%s“"
+msgid "refusing to update reflog for pseudoref '%s'"
+msgstr "журналът на указателите нÑма да Ñе обнови Ñ Ð¿Ñевдо ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ â€ž%s“"
#, c-format
msgid "refusing to update pseudoref '%s'"
msgstr "пÑевдо указателÑÑ‚ „%s“ нÑма да Ñе обнови"
#, c-format
+msgid "refusing to update reflog with bad name '%s'"
+msgstr "журналът на указателите нÑма да Ñе обнови Ñ Ð³Ñ€ÐµÑˆÐ½Ð¾ име „%s“"
+
+#, c-format
+msgid "refusing to update ref with bad name '%s'"
+msgstr "указател не може да Ñе обнови Ñ Ð³Ñ€ÐµÑˆÐ½Ð¾ име „%s“"
+
+msgid "refusing to force and skip creation of reflog"
+msgstr ""
+"принудителна Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð±ÐµÐ· Ñъздаване на журнал на указателите нÑма да Ñе "
+"приеме"
+
+#, c-format
msgid "update_ref failed for ref '%s': %s"
msgstr "неуÑпешно обновÑване на ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ (update_ref) „%s“: %s"
@@ -20560,6 +20716,10 @@ msgstr ""
"„%s“, но вмеÑто това е обикновен указател"
#, c-format
+msgid "cannot read ref file '%s'"
+msgstr "файлът Ñ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ» „%s“ не може да Ñе прочете"
+
+#, c-format
msgid "cannot open directory %s"
msgstr "директориÑта „%s“ не може да бъде отворена"
@@ -20781,6 +20941,10 @@ msgid "more than one uploadpack given, using the first"
msgstr "зададен е повече от един пакет за изпращане, ще Ñе ползва първиÑÑ‚"
#, c-format
+msgid "unrecognized followRemoteHEAD value '%s' ignored"
+msgstr "непознатата ÑтойноÑÑ‚ за „followRemoteHEAD“: „%s“, Ñе преÑкача"
+
+#, c-format
msgid "unrecognized value transfer.credentialsInUrl: '%s'"
msgstr "непозната ÑтойноÑÑ‚ за „transfer.credentialsInUrl“: „%s“"
@@ -22788,6 +22952,11 @@ msgstr "подаването „%s“ не е отбелÑзано като до
msgid "too many commits marked reachable"
msgstr "прекалено много Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ Ñа отбелÑзани като доÑтижими"
+msgid "could not determine MIDX preferred pack"
+msgstr ""
+"предпочитаниÑÑ‚ пакет за файла Ñ Ð¸Ð½Ð´ÐµÐºÑа за множеÑтво пакети не може да Ñе "
+"определи"
+
msgid "test-tool serve-v2 [<options>]"
msgstr "test-tool serve-v2 [ОПЦИЯ…]"
@@ -23444,6 +23613,9 @@ msgstr "„.git“ е повреден"
msgid ".git file incorrect"
msgstr "„.git“ е неправилен"
+msgid ".git file absolute/relative path mismatch"
+msgstr "неÑъвпадение на абÑолютниÑ/отноÑÐ¸Ñ‚ÐµÐ»Ð½Ð¸Ñ Ð¿ÑŠÑ‚ на „.git“"
+
msgid "not a valid path"
msgstr "неправилен път"
@@ -23459,6 +23631,9 @@ msgstr "не може да Ñе открие хранилище: „.git“ е Ð
msgid "gitdir unreadable"
msgstr "директориÑта „gitdir“ не може да Ñе прочете"
+msgid "gitdir absolute/relative path mismatch"
+msgstr "„gitdir“ указва неÑъвпадение на абÑолютниÑ/отноÑÐ¸Ñ‚ÐµÐ»Ð½Ð¸Ñ Ð¿ÑŠÑ‚"
+
msgid "gitdir incorrect"
msgstr "неправилна Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ â€žgitdir“"
@@ -23495,6 +23670,14 @@ msgstr "„%s“ не може да Ñе изчиÑти в „%s“"
msgid "failed to set extensions.worktreeConfig setting"
msgstr "неуÑпешно задаване на наÑтройката „extensions.worktreeConfig“"
+msgid "unable to upgrade repository format to support relative worktrees"
+msgstr ""
+"форматът на хранилището не може да Ñе обнови за поддръжката на отноÑителни "
+"работни дървета"
+
+msgid "unable to set extensions.relativeWorktrees setting"
+msgstr "неуÑпешно задаване на наÑтройката „extensions.relativeWorktrees“"
+
#, c-format
msgid "could not setenv '%s'"
msgstr "променливата на Ñредата „%s“ не може да Ñе зададе чрез „setenv“"
diff --git a/po/de.po b/po/de.po
index 06055e7611..addd5919bd 100644
--- a/po/de.po
+++ b/po/de.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2024-10-05 16:17+0200\n"
-"PO-Revision-Date: 2024-10-05 16:18+0200\n"
+"POT-Creation-Date: 2024-12-20 17:44+0100\n"
+"PO-Revision-Date: 2024-12-27 16:43+0100\n"
"Last-Translator: Ralf Thielow <ralf.thielow@gmail.com>\n"
"Language-Team: German\n"
"Language: de\n"
@@ -366,11 +366,11 @@ msgstr ""
#, c-format
msgid "Discard mode change from index and worktree [y,n,q,a,d%s,?]? "
msgstr ""
-"Modusänderung vom Index und Arbeitsverzeichnis verwerfen [y,n,q,a,d%s,?]? "
+"Modusänderung im Index und Arbeitsverzeichnis verwerfen [y,n,q,a,d%s,?]? "
#, c-format
msgid "Discard deletion from index and worktree [y,n,q,a,d%s,?]? "
-msgstr "Löschung vom Index und Arbeitsverzeichnis verwerfen [y,n,q,a,d%s,?]? "
+msgstr "Löschung im Index und Arbeitsverzeichnis verwerfen [y,n,q,a,d%s,?]? "
#, c-format
msgid "Discard addition from index and worktree [y,n,q,a,d%s,?]? "
@@ -379,7 +379,7 @@ msgstr "Ergänzung im Index und Arbeitsverzeichnis verwerfen [y,n,q,a,d%s,?]? "
#, c-format
msgid "Discard this hunk from index and worktree [y,n,q,a,d%s,?]? "
msgstr ""
-"Diesen Patch-Block vom Index und Arbeitsverzeichnis verwerfen [y,n,q,a,"
+"Diesen Patch-Block im Index und Arbeitsverzeichnis verwerfen [y,n,q,a,"
"d%s,?]? "
msgid ""
@@ -650,10 +650,10 @@ msgstr "Nur Binärdateien geändert."
#, c-format
msgid ""
"\n"
-"Disable this message with \"git config advice.%s false\""
+"Disable this message with \"git config set advice.%s false\""
msgstr ""
"\n"
-"Deaktivieren Sie diese Nachricht mit \"git config advice.%s false\""
+"Deaktivieren Sie diese Meldung mit \"git config set advice.%s false\""
#, c-format
msgid "%shint:%s%.*s%s\n"
@@ -3962,10 +3962,9 @@ msgstr "neuer ungeborener Branch"
msgid "update ignored files (default)"
msgstr "ignorierte Dateien aktualisieren (Standard)"
-msgid "do not check if another worktree is holding the given ref"
+msgid "do not check if another worktree is using this branch"
msgstr ""
-"Prüfung, ob die Referenz bereits in einem anderen Arbeitsverzeichnis "
-"ausgecheckt wurde, deaktivieren"
+"nicht prüfen, ob ein anderes Arbeitsverzeichnis diesen Branch verwendet"
msgid "checkout our version for unmerged files"
msgstr "unsere Variante für nicht zusammengeführte Dateien auschecken"
@@ -4272,13 +4271,11 @@ msgstr ""
"Zeit\n"
"erstellen"
-msgid "revision"
-msgstr "Commit"
+msgid "ref"
+msgstr "Referenz"
-msgid "deepen history of shallow clone, excluding rev"
-msgstr ""
-"die Historie eines Klons mit unvollständiger Historie (shallow) mittels\n"
-"Ausschluss eines Commits vertiefen"
+msgid "deepen history of shallow clone, excluding ref"
+msgstr "Historie eines flachen Klons vertiefen, Referenz exkludiert"
msgid "clone only one branch, HEAD or --branch"
msgstr "nur einen Branch klonen, HEAD oder --branch"
@@ -5232,8 +5229,7 @@ msgid ""
"regexp] [--value=<value>] [--fixed-value] [--default=<default>] <name>"
msgstr ""
"git config get [<Datei-Option>] [<Anzeige-Option>] [--includes] [--all] [--"
-"regexp] [--value=<Wert>] [--fixed-value] [--default=<Standardwert>] "
-"<Name>"
+"regexp] [--value=<Wert>] [--fixed-value] [--default=<Standardwert>] <Name>"
msgid ""
"git config set [<file-option>] [--type=<type>] [--all] [--value=<value>] [--"
@@ -5244,10 +5240,10 @@ msgstr ""
msgid ""
"git config unset [<file-option>] [--all] [--value=<value>] [--fixed-value] "
-"<name> <value>"
+"<name>"
msgstr ""
"git config unset [<Datei-Option>] [--all] [--value=<Wert>] [--fixed-value] "
-"<Name> <Wert>"
+"<Name>"
msgid "git config rename-section [<file-option>] <old-name> <new-name>"
msgstr "git config rename-section [<Datei-Option>] <alter-Name> <neuer-Name>"
@@ -5695,12 +5691,8 @@ msgid "traversed %lu commits\n"
msgstr "%lu Commits durchlaufen\n"
#, c-format
-msgid ""
-"more than %i tags found; listed %i most recent\n"
-"gave up search at %s\n"
-msgstr ""
-"mehr als %i Tags gefunden; führe die ersten %i auf\n"
-"Suche bei %s aufgegeben\n"
+msgid "found %i tags; gave up search at %s\n"
+msgstr "%i Tags gefunden; Suche bei %s aufgegeben\n"
#, c-format
msgid "describe %s\n"
@@ -6142,6 +6134,20 @@ msgstr "%s ist kein gültiges Objekt"
msgid "the object %s does not exist"
msgstr "das Objekt %s ist nicht vorhanden"
+#, c-format
+msgid ""
+"Run 'git remote set-head %s %s' to follow the change, or set\n"
+"'remote.%s.followRemoteHEAD' configuration option to a different value\n"
+"if you do not want to see this message. Specifically running\n"
+"'git config set remote.%s.followRemoteHEAD %s' will disable the warning\n"
+"until the remote changes HEAD to something else."
+msgstr ""
+"Führen Sie 'git remote set-head %s %s' aus, um der Änderung zu folgen,\n"
+"oder setzen Sie die Konfiguration 'remote.%s.followRemoteHEAD' auf einen\n"
+"anderen Wert, wenn Sie diese Meldung nicht sehen wollen. Konkret wird diese\n"
+"Warnung mit 'git config set remote.%s.followRemoteHEAD %s' deaktiviert\n"
+"bis die Gegenstelle HEAD in etwas anderes ändert."
+
msgid "multiple branches detected, incompatible with --set-upstream"
msgstr "mehrere Branches erkannt, inkompatibel mit --set-upstream"
@@ -6287,6 +6293,9 @@ msgstr "Refmap"
msgid "specify fetch refmap"
msgstr "Refmap für 'fetch' angeben"
+msgid "revision"
+msgstr "Commit"
+
msgid "report that we have only objects reachable from this object"
msgstr ""
"ausgeben, dass wir nur Objekte haben, die von diesem Objekt aus erreichbar "
@@ -7030,8 +7039,26 @@ msgstr "weder Timer von systemd, noch crontab ist verfügbar"
msgid "%s scheduler is not available"
msgstr "%s Scheduler ist nicht verfügbar"
-msgid "another process is scheduling background maintenance"
-msgstr "ein anderer Prozess plant die Hintergrundwartung"
+#, c-format
+msgid ""
+"unable to create '%s.lock': %s.\n"
+"\n"
+"Another scheduled git-maintenance(1) process seems to be running in this\n"
+"repository. Please make sure no other maintenance processes are running and\n"
+"then try again. If it still fails, a git-maintenance(1) process may have\n"
+"crashed in this repository earlier: remove the file manually to continue."
+msgstr ""
+"Konnte '%s.lock' nicht erstellen: %s.\n"
+"\n"
+"Ein weiterer geplanter git-maintenance(1)-Prozess scheint in diesem\n"
+"Repository zu laufen. Bitte stellen Sie sicher, dass keine anderen\n"
+"Wartungsprozesse laufen und versuchen Sie es dann erneut. Wenn es\n"
+"immer noch fehlschlägt, ist möglicherweise ein git-maintenance(1)-Prozess\n"
+"in diesem Repository abgestürzt: Entfernen Sie die Datei manuell, um\n"
+"fortzufahren."
+
+msgid "cannot acquire lock for scheduled background maintenance"
+msgstr "kann keine Sperre für die geplante Hintergrundwartung erhalten"
msgid "git maintenance start [--scheduler=<scheduler>]"
msgstr "git maintenance start [--scheduler=<Scheduler>]"
@@ -7612,6 +7639,22 @@ msgid_plural "chain length = %d: %lu objects"
msgstr[0] "Länge der Objekt-Liste = %d: %lu Objekt"
msgstr[1] "Länge der Objekt-Liste = %d: %lu Objekte"
+msgid "could not start pack-objects to repack local links"
+msgstr ""
+"konnte pack-objects nicht starten, um lokale Verknüpfungen neu zu packen"
+
+msgid "failed to feed local object to pack-objects"
+msgstr "lokales Objekt konnte nicht an pack-objects übergeben werden"
+
+msgid "index-pack: Expecting full hex object ID lines only from pack-objects."
+msgstr ""
+"index-pack: Erwarte vollständige Hex-Objekt-ID-Zeilen nur von pack-objects."
+
+msgid "could not finish pack-objects to repack local links"
+msgstr ""
+"konnte pack-objects nicht vollständig ausführen, um lokale Verknüpfungen neu "
+"zu packen"
+
msgid "Cannot come back to cwd"
msgstr "Kann nicht zurück zum Arbeitsverzeichnis wechseln"
@@ -7623,6 +7666,9 @@ msgstr "%s ist ungültig"
msgid "unknown hash algorithm '%s'"
msgstr "unbekannter Hash-Algorithmus '%s'"
+msgid "--promisor cannot be used with a pack name"
+msgstr "--promisor kann nicht mit einem Paketnamen verwendet werden"
+
msgid "--stdin requires a git repository"
msgstr "--stdin erfordert ein Git-Repository"
@@ -9003,11 +9049,11 @@ msgstr "git notes [--ref <Notiz-Referenz>] [list [<Objekt>]]"
msgid ""
"git notes [--ref <notes-ref>] add [-f] [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
msgstr ""
"git notes [--ref <Notiz-Referenz>] add [-f] [--allow-empty] [--"
"[no-]separator|--separator=<Absatz-Unterbrechung>] [--[no-]stripspace] [-m "
-"<Nachricht> | -F <Datei> | (-c | -C) <Objekt>] [<Objekt>]"
+"<Nachricht> | -F <Datei> | (-c | -C) <Objekt>] [<Objekt>] [-e]"
msgid "git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>"
msgstr ""
@@ -9016,11 +9062,11 @@ msgstr ""
msgid ""
"git notes [--ref <notes-ref>] append [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
msgstr ""
"git notes [--ref <Notiz-Referenz>] append [--allow-empty] [--"
"[no-]separator|--separator=<Absatz-Unterbrechnung>] [--[no-]stripspace] [-m "
-"<Nachricht> | -F <Datei> | (-c | -C) <Objekt>] [<Object>]"
+"<Nachricht> | -F <Datei> | (-c | -C) <Objekt>] [<Objekt>] [-e]"
msgid "git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]"
msgstr "git notes [--ref <Notiz-Referenz>] edit [--allow-empty] [<Objekt>]"
@@ -9142,6 +9188,9 @@ msgstr "Notizinhalte in einer Datei"
msgid "reuse and edit specified note object"
msgstr "Wiederverwendung und Bearbeitung des angegebenen Notiz-Objektes"
+msgid "edit note message in editor"
+msgstr "Notizmeldung im Editor bearbeiten"
+
msgid "reuse specified note object"
msgstr "Wiederverwendung des angegebenen Notiz-Objektes"
@@ -9655,6 +9704,9 @@ msgstr ""
"keine Objekte aus Packdateien von partiell geklonten Remote-Repositories "
"packen"
+msgid "implies --missing=allow-any"
+msgstr "impliziert --missing=allow-any"
+
msgid "respect islands during delta compression"
msgstr "Delta-Islands bei Delta-Kompression beachten"
@@ -11317,6 +11369,30 @@ msgid_plural " Local refs configured for 'git push'%s:"
msgstr[0] " Lokale Referenz konfiguriert für 'git push'%s:"
msgstr[1] " Lokale Referenzen konfiguriert für 'git push'%s:"
+#, c-format
+msgid "'%s/HEAD' is unchanged and points to '%s'\n"
+msgstr "'%s/HEAD' ist unverändert und zeigt auf '%s'\n"
+
+#, c-format
+msgid "'%s/HEAD' has changed from '%s' and now points to '%s'\n"
+msgstr "'%s/HEAD' hat sich von '%s' geändert und zeigt jetzt auf '%s'\n"
+
+#, c-format
+msgid "'%s/HEAD' is now created and points to '%s'\n"
+msgstr "'%s/HEAD' ist nun erstellt und zeigt auf '%s'\n"
+
+#, c-format
+msgid "'%s/HEAD' was detached at '%s' and now points to '%s'\n"
+msgstr "'%s/HEAD' war losgelöst bei '%s' und zeigt nun auf '%s'\n"
+
+#, c-format
+msgid ""
+"'%s/HEAD' used to point to '%s' (which is not a remote branch), but now "
+"points to '%s'\n"
+msgstr ""
+"'%s/HEAD' zeigte vorher auf '%s' (was kein Remote-Branch ist), zeigt jetzt "
+"aber auf '%s'\n"
+
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr "setzt refs/remotes/<Name>/HEAD gemäß dem Remote-Repository"
@@ -11340,7 +11416,7 @@ msgid "Not a valid ref: %s"
msgstr "keine gültige Referenz: %s"
#, c-format
-msgid "Could not setup %s"
+msgid "Could not set up %s"
msgstr "Konnte %s nicht einrichten"
#, c-format
@@ -14142,6 +14218,9 @@ msgstr ""
"versuchen, eine Übereinstimmung des Branchnamens mit einem\n"
"Remote-Tracking-Branch herzustellen"
+msgid "use relative paths for worktrees"
+msgstr "relative Pfade für Arbeitsverzeichnisse verwenden"
+
#, c-format
msgid "options '%s', '%s', and '%s' cannot be used together"
msgstr ""
@@ -14426,6 +14505,28 @@ msgstr "kann '%s' nicht erstellen"
msgid "index-pack died"
msgstr "Erstellung der Paketindexdatei abgebrochen"
+#, c-format
+msgid "directory '%s' is present in index, but not sparse"
+msgstr "Verzeichnis '%s' ist im Index vorhanden, aber nicht partiell"
+
+msgid "corrupted cache-tree has entries not present in index"
+msgstr ""
+"das beschädigte Cache-Verzeichnis enthält Einträge, die nicht im Index "
+"enthalten sind"
+
+#, c-format
+msgid "%s with flags 0x%x should not be in cache-tree"
+msgstr "%s mit Flags 0x%x sollte nicht im Cache-Verzeichnis sein"
+
+#, c-format
+msgid "bad subtree '%.*s'"
+msgstr "ungültiges Unterverzeichnis '%.*s'"
+
+#, c-format
+msgid "cache-tree for path %.*s does not match. Expected %s got %s"
+msgstr ""
+"Cache-Verzeichnis für Pfad %.*s stimmt nicht überein. Erwartete %s bekam %s"
+
msgid "terminating chunk id appears earlier than expected"
msgstr "abschließende Chunk-ID erscheint eher als erwartet"
@@ -15322,17 +15423,18 @@ msgid ""
"to convert the grafts into replace refs.\n"
"\n"
"Turn this message off by running\n"
-"\"git config advice.graftFileDeprecated false\""
+"\"git config set advice.graftFileDeprecated false\""
msgstr ""
"Die Unterstützung für <GIT_DIR>/info/grafts ist veraltet\n"
-"und wird in zukünftigen Git Versionen entfernt.\n"
+"und wird in einer zukünftigen Git-Version entfernt.\n"
"\n"
-"Bitte benutzen Sie \"git replace --convert-graft-file\"\n"
-"zum Konvertieren der künstlichen Vorgänger (\"grafts\")\n"
-"in ersetzende Referenzen.<\n"
+"Bitte verwenden Sie \"git replace --convert-graft-file\"\n"
+"um die künstlichen Vorgänger (\"graft\") in ersetzende Referenzen\n"
+"zu konvertieren.\n"
"\n"
-"Sie können diese Meldung unterdrücken, indem Sie\n"
-"\"git config advice.graftFileDeprecated false\" ausführen."
+"Deaktivieren Sie diese Meldung, indem Sie\n"
+"\"git config set advice.graftFileDeprecated false\"\n"
+"ausführen."
#, c-format
msgid "commit %s exists in commit-graph but not in the object database"
@@ -16166,6 +16268,18 @@ msgstr "URL hat kein Schema: %s"
msgid "credential url cannot be parsed: %s"
msgstr "URL mit Zugangsdaten konnte nicht geparst werden: %s"
+#, c-format
+msgid "invalid timeout '%s', expecting a non-negative integer"
+msgstr "ungültiger timeout '%s', nicht-negative ganze Zahl erwartet"
+
+#, c-format
+msgid "invalid init-timeout '%s', expecting a non-negative integer"
+msgstr "ungültiger init-timeout '%s', nicht-negative ganze Zahl erwartet"
+
+#, c-format
+msgid "invalid max-connections '%s', expecting an integer"
+msgstr "ungültiges max-connections '%s', ganze Zahl erwartet"
+
msgid "in the future"
msgstr "in der Zukunft"
@@ -16896,6 +17010,22 @@ msgstr "ungültiger Git-Namespace-Pfad \"%s\""
msgid "too many args to run %s"
msgstr "zu viele Argumente angegeben, um %s auszuführen"
+#, c-format
+msgid ""
+"You are attempting to fetch %s, which is in the commit graph file but not in "
+"the object database.\n"
+"This is probably due to repo corruption.\n"
+"If you are attempting to repair this repo corruption by refetching the "
+"missing object, use 'git fetch --refetch' with the missing object."
+msgstr ""
+"Sie versuchen %s zu holen, welches sich in der Commit-Graph-Datei, aber "
+"nicht in der Objektdatenbank befindet.\n"
+"Dies ist wahrscheinlich auf eine Beschädigung des Repositories "
+"zurückzuführen.\n"
+"Wenn Sie versuchen, die Beschädigung des Repositories zu beheben, indem Sie "
+"das fehlende Objekt erneut holen,\n"
+"verwenden Sie 'git fetch --refetch' mit dem fehlenden Objekt."
+
msgid "git fetch-pack: expected shallow list"
msgstr "git fetch-pack: erwartete shallow-Liste"
@@ -17329,8 +17459,8 @@ msgid ""
"given pattern contains NULL byte (via -f <file>). This is only supported "
"with -P under PCRE v2"
msgstr ""
-"Angegebenes Muster enthält NULL Byte (über -f <Datei>). Das wird nur mit -"
-"Punter PCRE v2 unterstützt."
+"Angegebenes Muster enthält NULL Byte (über -f <Datei>). Das wird nur mit -P "
+"unter PCRE v2 unterstützt."
#, c-format
msgid "'%s': unable to read %s"
@@ -17483,10 +17613,11 @@ msgstr[1] ""
#, 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`."
+"You can disable this warning with `git config set advice.ignoredHook false`."
msgstr ""
-"Der '%s' Hook wurde ignoriert, weil er nicht als ausführbar markiert ist.\n"
-"Sie können diese Warnung mit `git config advice.ignoredHook false` "
+"Der '%s'-Hook wurde ignoriert, weil er nicht als ausführbar eingestellt "
+"ist.\n"
+"Sie können diese Warnung mit `git config set advice.ignoredHook false` "
"deaktivieren."
msgid "not a git repository"
@@ -17503,17 +17634,9 @@ msgstr "negativer Wert für http.postBuffer; benutze Standardwert %d"
msgid "Delegation control is not supported with cURL < 7.22.0"
msgstr "Kontrolle über Delegation wird mit cURL < 7.22.0 nicht unterstützt"
-msgid "Public key pinning not supported with cURL < 7.39.0"
-msgstr ""
-"Das Anheften des öffentlichen Schlüssels wird mit cURL < 7.39.0 nicht "
-"unterstützt"
-
msgid "Unknown value for http.proactiveauth"
msgstr "Unbekannter Wert für http.proactiveauth"
-msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
-msgstr "CURLSSLOPT_NO_REVOKE wird mit cURL < 7.44.0 nicht unterstützt."
-
#, c-format
msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
msgstr "Nicht unterstütztes SSL-Backend '%s'. Unterstützte SSL-Backends:"
@@ -17701,6 +17824,10 @@ msgid "unable to format message: %s"
msgstr "Meldung kann nicht formatiert werden: %s"
#, c-format
+msgid "invalid marker-size '%s', expecting an integer"
+msgstr "ungültige marker-size '%s', ganze Zahl erwartet"
+
+#, c-format
msgid "Failed to merge submodule %s (not checked out)"
msgstr "Fehler beim Merge von Submodul %s (nicht ausgecheckt)."
@@ -18837,19 +18964,18 @@ msgid ""
"\n"
"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
+"running \"git config set advice.objectNameWarning false\""
msgstr ""
-"Git erzeugt normalerweise keine Referenzen die mit\n"
-"40 Hex-Zeichen enden, da diese ignoriert werden wenn\n"
-"Sie diese angeben. Diese Referenzen könnten aus Versehen\n"
-"erzeugt worden sein. Zum Beispiel,\n"
+"Git erstellt normalerweise nie eine Referenz, die mit 40-Hex-Zeichen endet,\n"
+"weil sie ignoriert wird, wenn Sie nur 40-Hex-Zeichen angeben. Diese\n"
+"Referenzen können aus Versehen erstellt werden. Zum Beispiel,\n"
"\n"
" git switch -c $br $(git rev-parse ...)\n"
"\n"
-"wobei \"$br\" leer ist und eine 40-Hex-Referenz erzeugt\n"
-"wurde. Bitte prüfen Sie diese Referenzen und löschen\n"
-"Sie sie gegebenenfalls. Unterdrücken Sie diese Meldung\n"
-"indem Sie \"git config advice.objectNameWarning false\"\n"
+"wobei \"$br\" irgendwie leer ist und eine 40-Hex-Referenz erstellt wird.\n"
+"Bitte überprüfen Sie die Referenzen und löschen Sie diese gegebenenfalls.\n"
+"Schalten Sie diese Meldung aus, indem Sie\n"
+"\"git config set advice.objectNameWarning false\"\n"
"ausführen."
#, c-format
@@ -19010,13 +19136,6 @@ msgstr "Multi-Pack-Bitmap fehlt erforderlicher Reverse-Index"
msgid "could not open pack %s"
msgstr "konnte Paket '%s' nicht öffnen"
-msgid "could not determine MIDX preferred pack"
-msgstr "konnte das von MIDX bevorzugte Paket nicht ermitteln"
-
-#, c-format
-msgid "preferred pack (%s) is invalid"
-msgstr "bevorzugtes Paket (%s) ist ungültig"
-
msgid "corrupt bitmap lookup table: triplet position out of index"
msgstr "Bitmap-Lookup-Tabelle beschädigt: Triplet-Position außerhalb des Index"
@@ -20151,18 +20270,26 @@ msgstr "Log für Referenz %s unerwartet bei %s beendet."
msgid "log for %s is empty"
msgstr "Log für %s ist leer."
-msgid "refusing to force and skip creation of reflog"
-msgstr "Erzwingen der Aktion verweigert; überspringe Erstellung des Reflogs"
-
#, c-format
-msgid "refusing to update ref with bad name '%s'"
-msgstr "verweigere Aktualisierung einer Referenz mit fehlerhaftem Namen '%s'"
+msgid "refusing to update reflog for pseudoref '%s'"
+msgstr "Aktualisierung des Reflogs für Pseudoreferenz '%s' verweigert"
#, c-format
msgid "refusing to update pseudoref '%s'"
msgstr "Aktualisierung von Pseudoreferenz '%s' verweigert"
#, c-format
+msgid "refusing to update reflog with bad name '%s'"
+msgstr "Aktualisierung des Reflogs mit fehlerhaftem Namen '%s' verweigert"
+
+#, c-format
+msgid "refusing to update ref with bad name '%s'"
+msgstr "verweigere Aktualisierung einer Referenz mit fehlerhaftem Namen '%s'"
+
+msgid "refusing to force and skip creation of reflog"
+msgstr "Erzwingen der Aktion verweigert; überspringe Erstellung des Reflogs"
+
+#, c-format
msgid "update_ref failed for ref '%s': %s"
msgstr "update_ref für Referenz '%s' fehlgeschlagen: %s"
@@ -20216,6 +20343,10 @@ msgstr ""
"'%s': ist aber eine reguläre Referenz"
#, c-format
+msgid "cannot read ref file '%s'"
+msgstr "kann Ref-Datei '%s' nicht lesen"
+
+#, c-format
msgid "cannot open directory %s"
msgstr "Verzeichnis %s kann nicht geöffnet werden"
@@ -20431,6 +20562,10 @@ msgid "more than one uploadpack given, using the first"
msgstr "Mehr als ein uploadpack-Befehl angegeben, benutze den ersten."
#, c-format
+msgid "unrecognized followRemoteHEAD value '%s' ignored"
+msgstr "nicht erkannter followRemoteHEAD-Wert '%s' ignoriert"
+
+#, c-format
msgid "unrecognized value transfer.credentialsInUrl: '%s'"
msgstr "unbekannter Wert transfer.credentialsInUrl: '%s'"
@@ -22391,6 +22526,9 @@ msgstr "Commit %s ist nicht als erreichbar gekennzeichnet."
msgid "too many commits marked reachable"
msgstr "Zu viele Commits als erreichbar gekennzeichnet."
+msgid "could not determine MIDX preferred pack"
+msgstr "konnte das von MIDX bevorzugte Paket nicht ermitteln"
+
msgid "test-tool serve-v2 [<options>]"
msgstr "test-tool serve-v2 [<Optionen>]"
@@ -23061,6 +23199,9 @@ msgstr ".git-Datei kaputt"
msgid ".git file incorrect"
msgstr ".git-Datei fehlerhaft"
+msgid ".git file absolute/relative path mismatch"
+msgstr "absoluter/relativer Pfad der .git-Datei stimmt nicht überein"
+
msgid "not a valid path"
msgstr "kein gültiger Pfad"
@@ -23077,6 +23218,9 @@ msgstr "Konnte Repository nicht finden; .git-Datei ist kaputt"
msgid "gitdir unreadable"
msgstr "gitdir nicht lesbar"
+msgid "gitdir absolute/relative path mismatch"
+msgstr "absolute/relative Pfadabweichung in gitdir"
+
msgid "gitdir incorrect"
msgstr "gitdir fehlerhaft"
@@ -23111,6 +23255,14 @@ msgstr "konnte %s nicht in '%s' aufheben"
msgid "failed to set extensions.worktreeConfig setting"
msgstr "Einstellung für extensions.worktreeConfig konnte nicht gesetzt werden"
+msgid "unable to upgrade repository format to support relative worktrees"
+msgstr ""
+"Repository-Format konnte nicht aktualisiert werden, um relative "
+"Arbeitsverzeichnisse zu unterstützen"
+
+msgid "unable to set extensions.relativeWorktrees setting"
+msgstr "Einstellung extensions.relativeWorktrees kann nicht gesetzt werden"
+
#, c-format
msgid "could not setenv '%s'"
msgstr "konnte '%s' nicht setzen"
@@ -24038,3 +24190,7 @@ msgstr "Lasse %s mit Backup-Suffix '%s' aus.\n"
#, perl-format
msgid "Do you really want to send %s? [y|N]: "
msgstr "Wollen Sie %s wirklich versenden? [y|N]: "
+
+#, c-format
+#~ msgid "preferred pack (%s) is invalid"
+#~ msgstr "bevorzugtes Paket (%s) ist ungültig"
diff --git a/po/fr.po b/po/fr.po
index 481e1bdc1d..64a75aecf5 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -29,6 +29,7 @@
# to debug | déboguer
# debugging | débogage
# to deflate | compresser
+# directory | répertoire
# email | courriel
# enlistment | enrôlement
# entry | élément
@@ -45,18 +46,23 @@
# hunk | section
# to inflate | décompresser
# to list | afficher
+# loose object | objet esseulé
# mapping | mise en correspondance
# merge | fusion
# pack | paquet
-# patches | patchs
+# patch (v) | appliquer une/des rustine(s)
+# patches | rustines
# pattern | motif
# to prune | élaguer
# to push | pousser
# to rebase | rebaser
# scheduler | planificateur
# trailers | lignes terminales
-# repository | dépôt
+# regex | regex
+# regular |
+# expression | expression régulière
# remote | distante (ou serveur distant)
+# repository | dépôt
# revision | révision
# shallow | superficiel
# shell | interpréteur de commandes
@@ -64,6 +70,7 @@
# split (index) | index scindé
# stash | remisage
# to stash | remiser
+# superproject | super-projet
# tag | étiquette
# template | modèle
# thread | fil
@@ -80,8 +87,8 @@ msgid ""
msgstr ""
"Project-Id-Version: git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2024-10-02 16:57+0000\n"
-"PO-Revision-Date: 2024-10-04 23:03+0200\n"
+"POT-Creation-Date: 2024-12-23 18:57+0000\n"
+"PO-Revision-Date: 2024-12-29 18:26+0100\n"
"Last-Translator: Cédric Malard <c.malard-git@valdun.net>\n"
"Language-Team: Jean-Noël Avila <jn.avila@free.fr>\n"
"Language: fr\n"
@@ -169,7 +176,7 @@ msgid "No changes.\n"
msgstr "Aucune modification.\n"
msgid "Patch update"
-msgstr "Mise à jour par patch"
+msgstr "Mise à jour par rustine"
msgid "Review diff"
msgstr "Réviser la différence"
@@ -267,7 +274,7 @@ msgid ""
"If the patch applies cleanly, the edited hunk will immediately be marked for "
"staging."
msgstr ""
-"Si le patch s'applique proprement, la section éditée sera immédiatement "
+"Si la rustine s'applique proprement, la section éditée sera immédiatement "
"marquée comme indexée."
msgid ""
@@ -303,7 +310,7 @@ msgid ""
"If the patch applies cleanly, the edited hunk will immediately be marked for "
"stashing."
msgstr ""
-"Si le patch s'applique proprement, la section éditée sera immédiatement "
+"Si la rustine s'applique proprement, la section éditée sera immédiatement "
"marquée comme remisée."
msgid ""
@@ -339,7 +346,7 @@ msgid ""
"If the patch applies cleanly, the edited hunk will immediately be marked for "
"unstaging."
msgstr ""
-"Si le patch s'applique proprement, la section éditée sera immédiatement "
+"Si la rustine s'applique proprement, la section éditée sera immédiatement "
"marquée comme desindexée."
msgid ""
@@ -375,7 +382,7 @@ msgid ""
"If the patch applies cleanly, the edited hunk will immediately be marked for "
"applying."
msgstr ""
-"Si le patch s'applique proprement, la section éditée sera immédiatement "
+"Si la rustine s'applique proprement, la section éditée sera immédiatement "
"marquée comme appliquée."
msgid ""
@@ -411,7 +418,7 @@ msgid ""
"If the patch applies cleanly, the edited hunk will immediately be marked for "
"discarding."
msgstr ""
-"Si le patch s'applique proprement, la section éditée sera immédiatement "
+"Si la rustine s'applique proprement, la section éditée sera immédiatement "
"marquée comme éliminée."
msgid ""
@@ -461,14 +468,14 @@ msgstr ""
#, c-format
msgid "Apply mode change to index and worktree [y,n,q,a,d%s,?]? "
msgstr ""
-"Appliquer le changement de mode dans l'index et l'arbre de travail [y,n,q,a,"
-"d%s,?] ? "
+"Appliquer le changement de mode dans l'index et l'arbre de travail "
+"[y,n,q,a,d%s,?] ? "
#, c-format
msgid "Apply deletion to index and worktree [y,n,q,a,d%s,?]? "
msgstr ""
-"Appliquer la suppression dans l'index et l'arbre de travail [y,n,q,a,"
-"d%s,?] ? "
+"Appliquer la suppression dans l'index et l'arbre de travail "
+"[y,n,q,a,d%s,?] ? "
#, c-format
msgid "Apply addition to index and worktree [y,n,q,a,d%s,?]? "
@@ -710,10 +717,10 @@ msgstr "Seuls des fichiers binaires ont changé."
#, c-format
msgid ""
"\n"
-"Disable this message with \"git config advice.%s false\""
+"Disable this message with \"git config set advice.%s false\""
msgstr ""
"\n"
-"Désactivez ce message avec \"git config advice.%s false\""
+"Désactivez ce message avec \"git config set advice.%s false\""
#, c-format
msgid "%shint:%s%.*s%s\n"
@@ -837,8 +844,8 @@ msgstr ""
"\n"
" git switch -\n"
"\n"
-"Désactivez ce conseil en renseignant la variable de configuration advice."
-"detachedHead à false\n"
+"Désactivez ce conseil en renseignant la variable de configuration "
+"advice.detachedHead à false\n"
"\n"
#, c-format
@@ -893,7 +900,7 @@ msgstr "la rustine est trop grosse"
#, c-format
msgid "Cannot prepare timestamp regexp %s"
-msgstr "Impossible de préparer la regexp d'horodatage %s"
+msgstr "Impossible de préparer la regex d'horodatage %s"
#, c-format
msgid "regexec returned %d for input: %s"
@@ -901,7 +908,7 @@ msgstr "regexec a retourné %d pour l'entrée : %s"
#, c-format
msgid "unable to find filename in patch at line %d"
-msgstr "nom de fichier du patch introuvable à la ligne %d"
+msgstr "nom de fichier de la rustine introuvable à la ligne %d"
#, c-format
msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
@@ -912,14 +919,14 @@ msgstr ""
#, c-format
msgid "git apply: bad git-diff - inconsistent new filename on line %d"
msgstr ""
-"git apply : mauvais format de git-diff - nouveau nom de fichier inconsistant "
-"à la ligne %d"
+"git apply : mauvais format de git-diff - nouveau nom de fichier incohérent à "
+"la ligne %d"
#, c-format
msgid "git apply: bad git-diff - inconsistent old filename on line %d"
msgstr ""
-"git apply : mauvais format de git-diff - ancien nom de fichier inconsistant "
-"à la ligne %d"
+"git apply : mauvais format de git-diff - ancien nom de fichier incohérent à "
+"la ligne %d"
#, c-format
msgid "git apply: bad git-diff - expected /dev/null on line %d"
@@ -959,7 +966,7 @@ msgstr "recomptage : ligne inattendue : %.*s"
#, c-format
msgid "patch fragment without header at line %d: %.*s"
-msgstr "fragment de patch sans en-tête à la ligne %d : %.*s"
+msgstr "fragment de rustine sans en-tête à la ligne %d : %.*s"
msgid "new file depends on old contents"
msgstr "le nouveau fichier dépend de contenus anciens"
@@ -969,7 +976,7 @@ msgstr "le fichier supprimé a encore du contenu"
#, c-format
msgid "corrupt patch at line %d"
-msgstr "patch corrompu à la ligne %d"
+msgstr "rustine corrompue à la ligne %d"
#, c-format
msgid "new file %s depends on old contents"
@@ -985,15 +992,15 @@ msgstr "** attention : le fichier %s devient vide mais n'est pas supprimé"
#, c-format
msgid "corrupt binary patch at line %d: %.*s"
-msgstr "patch binaire corrompu à la ligne %d : %.*s"
+msgstr "rustine binaire corrompue à la ligne %d : %.*s"
#, c-format
msgid "unrecognized binary patch at line %d"
-msgstr "patch binaire non reconnu à la ligne %d"
+msgstr "rustine binaire non reconnue à la ligne %d"
#, c-format
msgid "patch with only garbage at line %d"
-msgstr "patch totalement incompréhensible à la ligne %d"
+msgstr "rustine totalement incompréhensible à la ligne %d"
#, c-format
msgid "unable to read symlink %s"
@@ -1027,28 +1034,30 @@ msgstr ""
#, c-format
msgid "missing binary patch data for '%s'"
-msgstr "données de patch binaire manquantes pour '%s'"
+msgstr "données de rustine binaire manquantes pour '%s'"
#, c-format
msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
msgstr ""
-"impossible d'appliquer l'inverse d'un patch binaire à '%s' sans la section "
-"inverse"
+"impossible d'appliquer l'inverse d'une rustine binaire à '%s' sans la "
+"section inverse"
#, c-format
msgid "cannot apply binary patch to '%s' without full index line"
msgstr ""
-"impossible d'appliquer un patch binaire à '%s' sans la ligne complète d'index"
+"impossible d'appliquer une rustine binaire à '%s' sans la ligne complète "
+"d'index"
#, c-format
msgid ""
"the patch applies to '%s' (%s), which does not match the current contents."
msgstr ""
-"le patch s'applique à '%s' (%s), ce qui ne correspond pas au contenu actuel."
+"la rustine s'applique à '%s' (%s), ce qui ne correspond pas au contenu "
+"actuel."
#, c-format
msgid "the patch applies to an empty '%s' but it is not empty"
-msgstr "le patch s'applique à un '%s' vide mais ce n'est pas vide"
+msgstr "la rustine s'applique à un '%s' vide mais ce n'est pas vide"
#, c-format
msgid "the necessary postimage %s for '%s' cannot be read"
@@ -1056,17 +1065,17 @@ msgstr "l'image postérieure nécessaire %s pour '%s' ne peut pas être lue"
#, c-format
msgid "binary patch does not apply to '%s'"
-msgstr "le patch binaire ne s'applique par correctement à '%s'"
+msgstr "la rustine binaire ne s'applique par correctement à '%s'"
#, c-format
msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
msgstr ""
-"le patch binaire sur '%s' crée un résultat incorrect (%s attendu, mais %s "
+"la rustine binaire sur '%s' crée un résultat incorrect (%s attendu, mais %s "
"trouvé)"
#, c-format
msgid "patch failed: %s:%ld"
-msgstr "le patch a échoué : %s:%ld"
+msgstr "l'application de la rustine a échoué : %s:%ld"
#, c-format
msgid "cannot checkout %s"
@@ -1110,18 +1119,18 @@ msgstr "Échec de l'application de la fusion à 3 points…\n"
#, c-format
msgid "Applied patch to '%s' with conflicts.\n"
-msgstr "Patch %s appliqué avec des conflits.\n"
+msgstr "Rustine %s appliquée avec des conflits.\n"
#, c-format
msgid "Applied patch to '%s' cleanly.\n"
-msgstr "Patch %s appliqué proprement.\n"
+msgstr "Rustine %s appliquée proprement.\n"
#, c-format
msgid "Falling back to direct application...\n"
msgstr "Retour à une application directe…\n"
msgid "removal patch leaves file contents"
-msgstr "le patch de suppression laisse un contenu dans le fichier"
+msgstr "la rustine de suppression laisse un contenu dans le fichier"
#, c-format
msgid "%s: wrong type"
@@ -1158,11 +1167,11 @@ msgstr "le fichier affecté '%s' est au-delà d'un lien symbolique"
#, c-format
msgid "%s: patch does not apply"
-msgstr "%s : le patch ne s'applique pas"
+msgstr "%s : la rustine ne s'applique pas"
#, c-format
msgid "Checking patch %s..."
-msgstr "Vérification du patch %s..."
+msgstr "Vérification de la rustine %s..."
#, c-format
msgid "sha1 information is lacking or useless for submodule %s"
@@ -1191,7 +1200,7 @@ msgstr "suppression de %s dans l'index impossible"
#, c-format
msgid "corrupt patch for submodule %s"
-msgstr "patch corrompu pour le sous-module %s"
+msgstr "rustine corrompue pour le sous-module %s"
#, c-format
msgid "unable to stat newly created file '%s'"
@@ -1221,7 +1230,7 @@ msgstr "écriture du fichier '%s' mode %o impossible"
#, c-format
msgid "Applied patch %s cleanly."
-msgstr "Patch %s appliqué proprement."
+msgstr "Rustine %s appliquée proprement."
msgid "internal error"
msgstr "erreur interne"
@@ -1229,8 +1238,8 @@ msgstr "erreur interne"
#, c-format
msgid "Applying patch %%s with %d reject..."
msgid_plural "Applying patch %%s with %d rejects..."
-msgstr[0] "Application du patch %%s avec %d rejet..."
-msgstr[1] "Application du patch %%s avec %d rejets..."
+msgstr[0] "Application de la rustine %%s avec %d rejet..."
+msgstr[1] "Application de la rustine %%s avec %d rejets..."
#, c-format
msgid "cannot open %s"
@@ -1260,7 +1269,7 @@ msgstr "lecture du fichier d'index impossible"
#, c-format
msgid "can't open patch '%s': %s"
-msgstr "ouverture impossible du patch '%s' :%s"
+msgstr "ouverture impossible de la rustine '%s' :%s"
#, c-format
msgid "squelched %d whitespace error"
@@ -1296,35 +1305,35 @@ msgid "remove <num> leading slashes from traditional diff paths"
msgstr "supprimer <num> barres obliques des chemins traditionnels de diff"
msgid "ignore additions made by the patch"
-msgstr "ignorer les additions réalisées par le patch"
+msgstr "ignorer les additions réalisées par la rustine"
msgid "instead of applying the patch, output diffstat for the input"
-msgstr "au lieu d'appliquer le patch, afficher le diffstat de l'entrée"
+msgstr "au lieu d'appliquer la rustine, afficher le diffstat de l'entrée"
msgid "show number of added and deleted lines in decimal notation"
msgstr ""
"afficher le nombre de lignes ajoutées et supprimées en notation décimale"
msgid "instead of applying the patch, output a summary for the input"
-msgstr "au lieu d'appliquer le patch, afficher un résumé de l'entrée"
+msgstr "au lieu d'appliquer la rustine, afficher un résumé de l'entrée"
msgid "instead of applying the patch, see if the patch is applicable"
-msgstr "au lieu d'appliquer le patch, voir si le patch est applicable"
+msgstr "au lieu d'appliquer la rustine, voir si la rustine est applicable"
msgid "make sure the patch is applicable to the current index"
-msgstr "s'assurer que le patch est applicable sur l'index actuel"
+msgstr "s'assurer que la rustine est applicable sur l'index actuel"
msgid "mark new files with `git add --intent-to-add`"
msgstr "marquer les nouveaux fichiers `git add --intent-to-add`"
msgid "apply a patch without touching the working tree"
-msgstr "appliquer les patch sans toucher à la copie de travail"
+msgstr "appliquer les rustines sans toucher à la copie de travail"
msgid "accept a patch that touches outside the working area"
-msgstr "accepter un patch qui touche hors de la copie de travail"
+msgstr "accepter une rustine qui touche hors de la copie de travail"
msgid "also apply the patch (use with --stat/--summary/--check)"
-msgstr "appliquer aussi le patch (à utiliser avec --stat/--summary/--check)"
+msgstr "appliquer aussi la rustine (à utiliser avec --stat/--summary/--check)"
msgid "attempt three-way merge, fall back on normal patch if that fails"
msgstr ""
@@ -1361,7 +1370,7 @@ msgid "ignore changes in whitespace when finding context"
msgstr "ignorer des modifications d'espace lors de la recherche de contexte"
msgid "apply the patch in reverse"
-msgstr "appliquer le patch en sens inverse"
+msgstr "appliquer la rustine en sens inverse"
msgid "don't expect at least one line of context"
msgstr "ne pas s'attendre à au moins une ligne de contexte"
@@ -1465,8 +1474,9 @@ msgstr "nom d'objet invalide : %s"
msgid "not a tree object: %s"
msgstr "objet arbre invalide : %s"
-msgid "unable to checkout working tree"
-msgstr "impossible d'extraire la copie de travail"
+#, c-format
+msgid "failed to unpack tree object %s"
+msgstr "échec du dépaquetage de l'objet arbre %s"
#, c-format
msgid "File not found: %s"
@@ -1923,7 +1933,7 @@ msgid "could not read the index"
msgstr "impossible de lire l'index"
msgid "editing patch failed"
-msgstr "échec de l'édition du patch"
+msgstr "échec de l'édition de la rustine"
#, c-format
msgid "could not stat '%s'"
@@ -2031,7 +2041,7 @@ msgid "adding embedded git repository: %s"
msgstr "dépôt git embarqué ajouté : %s"
msgid "Use -f if you really want to add them."
-msgstr "Utilisez -f si vous voulez vraiment les ajouter<."
+msgstr "Utilisez -f si vous voulez vraiment les ajouter."
msgid "adding files failed"
msgstr "échec de l'ajout de fichiers"
@@ -2103,10 +2113,10 @@ msgstr "impossible d'ouvrir '%s' en écriture"
#, c-format
msgid "could not parse patch '%s'"
-msgstr "impossible d'analyser le patch '%s'"
+msgstr "impossible d'analyser la rustine '%s'"
msgid "Only one StGIT patch series can be applied at once"
-msgstr "Seulement une série de patchs StGIT peut être appliquée à la fois"
+msgstr "Seulement une série de rustines StGIT peut être appliquée à la fois"
msgid "invalid timestamp"
msgstr "horodatage invalide"
@@ -2118,14 +2128,14 @@ msgid "invalid timezone offset"
msgstr "décalage horaire invalide"
msgid "Patch format detection failed."
-msgstr "Échec de détection du format du patch."
+msgstr "Échec de détection du format de la rustine."
#, c-format
msgid "failed to create directory '%s'"
msgstr "échec de la création du répertoire '%s'"
msgid "Failed to split patches."
-msgstr "Échec de découpage des patchs."
+msgstr "Échec de découpage des rustines."
#, c-format
msgid "When you have resolved this problem, run \"%s --continue\".\n"
@@ -2145,8 +2155,8 @@ msgstr ""
#, c-format
msgid "To restore the original branch and stop patching, run \"%s --abort\"."
msgstr ""
-"Pour restaurer la branche originale et arrêter de patcher, lancez \"%s --"
-"abort\"."
+"Pour restaurer la branche originale et arrêter d'appliquer des rustines, "
+"lancez \"%s --abort\"."
msgid "Patch sent with format=flowed; space at the end of lines might be lost."
msgstr ""
@@ -2178,11 +2188,11 @@ msgid ""
"Did you hand edit your patch?\n"
"It does not apply to blobs recorded in its index."
msgstr ""
-"Avez-vous édité le patch à la main ?\n"
+"Avez-vous édité la rustine à la main ?\n"
"Il ne s'applique pas aux blobs enregistrés dans son index."
msgid "Falling back to patching base and 3-way merge..."
-msgstr "Retour à un patch de la base et fusion à 3 points..."
+msgstr "Retour à une rustine de la base et fusion à 3 points..."
msgid "Failed to merge in the changes."
msgstr "Échec d'intégration des modifications."
@@ -2216,7 +2226,7 @@ msgstr "impossible d'écrire le fichier d'index"
#, c-format
msgid "Dirty index: cannot apply patches (dirty: %s)"
-msgstr "Index sale : impossible d'appliquer des patchs (sales : %s)"
+msgstr "Index sale : impossible d'appliquer des rustines (sales : %s)"
#, c-format
msgid "Skipping: %.*s"
@@ -2227,7 +2237,7 @@ msgid "Creating an empty commit: %.*s"
msgstr "Création d'un commit vide : %.*s"
msgid "Patch is empty."
-msgstr "Le patch actuel est vide."
+msgstr "La rustine actuelle est vide."
#, c-format
msgid "Applying: %.*s"
@@ -2242,7 +2252,8 @@ msgstr "l'application de la rustine a échoué à %s %.*s"
msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
msgstr ""
-"Utilisez 'git am --show-current-patch=diff' pour visualiser le patch en échec"
+"Utilisez 'git am --show-current-patch=diff' pour visualiser la rustine en "
+"échec"
msgid "No changes - recorded it as an empty commit."
msgstr "aucune modification - enregistré comme un commit vide."
@@ -2254,8 +2265,8 @@ msgid ""
msgstr ""
"Aucun changement - avez-vous oublié d'utiliser 'git add' ?\n"
"S'il n'y a plus rien à indexer, il se peut qu'autre chose ait déjà\n"
-"introduit les mêmes changements ; vous pourriez avoir envie de sauter ce "
-"patch."
+"introduit les mêmes changements ; vous pourriez avoir envie de sauter cette "
+"rustine."
msgid ""
"You still have unmerged paths in your index.\n"
@@ -2342,28 +2353,30 @@ msgid "format"
msgstr "format"
msgid "format the patch(es) are in"
-msgstr "format de présentation des patchs"
+msgstr "format de présentation des rustines"
msgid "override error message when patch failure occurs"
-msgstr "surcharger le message d'erreur lors d'un échec d'application de patch"
+msgstr ""
+"surcharger le message d'erreur lors d'un échec d'application d'une rustine"
msgid "continue applying patches after resolving a conflict"
-msgstr "continuer à appliquer les patchs après résolution d'un conflit"
+msgstr "continuer à appliquer les rustines après résolution d'un conflit"
msgid "synonyms for --continue"
msgstr "synonymes de --continue"
msgid "skip the current patch"
-msgstr "sauter le patch courant"
+msgstr "sauter la rustine courante"
msgid "restore the original branch and abort the patching operation"
-msgstr "restaurer la branche originale et abandonner les applications de patch"
+msgstr ""
+"restaurer la branche originale et abandonner les applications de rustines"
msgid "abort the patching operation but keep HEAD where it is"
-msgstr "abandonne l'opération de patch mais garde HEAD où il est"
+msgstr "abandonne l'opération de rustine mais garde HEAD où il est"
msgid "show the patch being applied"
-msgstr "afficher le patch en cours d'application"
+msgstr "afficher la rustine en cours d'application"
msgid "try to apply current patch again"
msgstr "essayer d'appliquer de nouveau la rustine"
@@ -3126,11 +3139,11 @@ msgid "HEAD not found below refs/heads!"
msgstr "HEAD non trouvée sous refs/heads !"
msgid ""
-"branch with --recurse-submodules can only be used if submodule."
-"propagateBranches is enabled"
+"branch with --recurse-submodules can only be used if "
+"submodule.propagateBranches is enabled"
msgstr ""
-"brancher avec --recurse-submodules ne peut être utilisé que si submodule."
-"propagateBranches est activé"
+"brancher avec --recurse-submodules ne peut être utilisé que si "
+"submodule.propagateBranches est activé"
msgid "--recurse-submodules can only be used to create branches"
msgstr "--recurse-submodules ne peut être utilisé que pour créer des branches"
@@ -3992,9 +4005,8 @@ msgstr "nouvelle branche non née"
msgid "update ignored files (default)"
msgstr "mettre à jour les fichiers ignorés (par défaut)"
-msgid "do not check if another worktree is holding the given ref"
-msgstr ""
-"ne pas vérifier si une autre copie de travail contient le référence fournie"
+msgid "do not check if another worktree is using this branch"
+msgstr "ne pas vérifier si une autre copie-de-travail utilise cette branche"
msgid "checkout our version for unmerged files"
msgstr "extraire notre version pour les fichiers non fusionnés"
@@ -4297,12 +4309,11 @@ msgstr "créer un clone superficiel de cette profondeur"
msgid "create a shallow clone since a specific time"
msgstr "créer un clone superficiel depuis une date spécifique"
-msgid "revision"
-msgstr "révision"
+msgid "ref"
+msgstr "ref"
-msgid "deepen history of shallow clone, excluding rev"
-msgstr ""
-"approfondir l'historique d'un clone superficiel en excluant une révision"
+msgid "deepen history of shallow clone, excluding ref"
+msgstr "approfondit l'historique d'un clone superficiel en excluant une ref"
msgid "clone only one branch, HEAD or --branch"
msgstr "cloner seulement une branche, HEAD ou --branch"
@@ -4386,7 +4397,7 @@ msgstr "échec pour délier '%s'"
#, c-format
msgid "hardlink cannot be checked at '%s'"
-msgstr "le lien dur ne peut pas être vérifier à '%s'"
+msgstr "le lien dur ne peut pas être vérifié à '%s'"
#, c-format
msgid "hardlink different from source at '%s'"
@@ -4436,6 +4447,9 @@ msgstr ""
"la HEAD distante réfère à une référence non existante, impossible de "
"l'extraire"
+msgid "unable to checkout working tree"
+msgstr "impossible d'extraire la copie de travail"
+
msgid "unable to write parameters to config file"
msgstr "impossible d'écrire les paramètres dans le fichier de configuration"
@@ -5255,10 +5269,10 @@ msgstr ""
msgid ""
"git config unset [<file-option>] [--all] [--value=<value>] [--fixed-value] "
-"<name> <value>"
+"<name>"
msgstr ""
"git config unset [<option-de-fichier>] [--all] [--value=<valeur>] [--fixed-"
-"value] <nom> <valeur>"
+"value] <nom>"
msgid "git config rename-section [<file-option>] <old-name> <new-name>"
msgstr ""
@@ -5486,7 +5500,7 @@ msgid "value"
msgstr "valeur"
msgid "use default value when missing entry"
-msgstr "utiliser le valeur par défaut quand l'entrée n'existe pas"
+msgstr "utiliser la valeur par défaut quand l'entrée n'existe pas"
msgid "--fixed-value only applies with 'value-pattern'"
msgstr "--fixed-value ne s'applique qu'à 'motif-de-valeur'"
@@ -5523,7 +5537,7 @@ msgid ""
" Use a regexp, --add or --replace-all to change %s."
msgstr ""
"impossible de surcharger des valeurs multiples avec une seule valeur\n"
-" Utilisez une regexp, --add ou --replace-all pour modifier %s."
+" Utilisez une regex, --add ou --replace-all pour modifier %s."
#, c-format
msgid "no such section: %s"
@@ -5549,7 +5563,7 @@ msgid "get all values: key [<value-pattern>]"
msgstr "obtenir toutes les valeurs : clé [<motif-de-valeur>]"
msgid "get values for regexp: name-regex [<value-pattern>]"
-msgstr "obtenir les valeur pour la regexp : name-regex [<motif-de-valeur>]"
+msgstr "obtenir les valeurs pour la regex : name-regex [<motif-de-valeur>]"
msgid "get value specific for the URL: section[.var] URL"
msgstr "obtenir la valeur spécifique pour l'URL : section[.var] URL"
@@ -5586,7 +5600,7 @@ msgid "find the color setting: slot [<stdout-is-tty>]"
msgstr "trouver le réglage de la couleur : slot [<stdout-est-tty>]"
msgid "with --get, use default value when missing entry"
-msgstr "avec --get, utiliser le valeur par défaut quand l'entrée n'existe pas"
+msgstr "avec --get, utiliser la valeur par défaut quand l'entrée n'existe pas"
msgid "--get-color and variable type are incoherent"
msgstr "--get-color et le type de la variable sont incohérents"
@@ -5623,7 +5637,7 @@ msgstr ""
"Les permissions de votre répertoire de socket sont trop permissives ;\n"
"les autres utilisateurs pourraient lire vos identifiants secrets. Lancez :\n"
"\n"
-" chmod 0700 %s"
+"\tchmod 0700 %s"
msgid "print debugging messages to stderr"
msgstr "afficher les messages de debug sur stderr"
@@ -5704,13 +5718,8 @@ msgid "traversed %lu commits\n"
msgstr "%lu commits parcourus\n"
#, c-format
-msgid ""
-"more than %i tags found; listed %i most recent\n"
-"gave up search at %s\n"
-msgstr ""
-"plus de %i étiquettes ont été trouvées; seules les %i plus récentes sont "
-"affichées\n"
-"abandon de la recherche à %s\n"
+msgid "found %i tags; gave up search at %s\n"
+msgstr "%i étiquettes trouvées ; recherche abandonnée à %s\n"
#, c-format
msgid "describe %s\n"
@@ -6154,6 +6163,20 @@ msgstr "%s n'est pas un objet valide"
msgid "the object %s does not exist"
msgstr "l'objet %s n'existe pas"
+#, c-format
+msgid ""
+"Run 'git remote set-head %s %s' to follow the change, or set\n"
+"'remote.%s.followRemoteHEAD' configuration option to a different value\n"
+"if you do not want to see this message. Specifically running\n"
+"'git config set remote.%s.followRemoteHEAD %s' will disable the warning\n"
+"until the remote changes HEAD to something else."
+msgstr ""
+"Lancez 'git remote set-head %s %s' pour suivre la modification, ou\n"
+"réglez l'option de configuration 'remote.%s.followRemoteHEAD' à une\n"
+"valeur différente si vous ne souhaitez pas voir ce message. Lancer\n"
+"spécifiquement 'git config set remote.%s.followRemoteHEAD %s'\n"
+"va désactiver l'alerte jusqu'à ce que le distant change HEAD."
+
msgid "multiple branches detected, incompatible with --set-upstream"
msgstr "branches multiples détectées, imcompatible avec --set-upstream"
@@ -6294,6 +6317,9 @@ msgstr "correspondance de référence"
msgid "specify fetch refmap"
msgstr "spécifier une correspondance de référence pour la récupération"
+msgid "revision"
+msgstr "révision"
+
msgid "report that we have only objects reachable from this object"
msgstr "rapporte que nous n'avons que des objets joignables depuis cet objet"
@@ -6351,8 +6377,8 @@ msgid "protocol does not support --negotiate-only, exiting"
msgstr "Le protocole ne prend pas en charge --negotiate-only, abandon"
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 ne peut être utilisé qu'avec le dépôt distant configuré dans "
"extensions.partialclone"
@@ -6450,7 +6476,7 @@ msgid "config key storing a list of repository paths"
msgstr "clé de config qui stocke la liste des chemins de dépôts"
msgid "keep going even if command fails in a repository"
-msgstr "continuer mêm si la commande échoue dans un dépôt"
+msgstr "continuer même si la commande échoue dans un dépôt"
msgid "missing --config=<config>"
msgstr "--config=<config> manquant"
@@ -6665,7 +6691,7 @@ msgid "check only connectivity"
msgstr "ne vérifier que la connectivité"
msgid "enable more strict checking"
-msgstr "activer une vérification plus strict"
+msgstr "activer une vérification plus stricte"
msgid "write dangling objects in .git/lost-found"
msgstr "écrire les objets en suspens dans .git/lost-found"
@@ -6866,7 +6892,7 @@ msgstr ""
msgid ""
"There are too many unreachable loose objects; run 'git prune' to remove them."
msgstr ""
-"Il y a trop d'objets seuls inaccessibles ; lancez 'git prune' pour les "
+"Il y a trop d'objets esseulés inaccessibles ; lancez 'git prune' pour les "
"supprimer."
msgid ""
@@ -7027,9 +7053,27 @@ msgstr "ni les minuteurs systemd ni crontab ne sont disponibles"
msgid "%s scheduler is not available"
msgstr "le planificateur %s n'est pas disponible"
-msgid "another process is scheduling background maintenance"
+#, c-format
+msgid ""
+"unable to create '%s.lock': %s.\n"
+"\n"
+"Another scheduled git-maintenance(1) process seems to be running in this\n"
+"repository. Please make sure no other maintenance processes are running and\n"
+"then try again. If it still fails, a git-maintenance(1) process may have\n"
+"crashed in this repository earlier: remove the file manually to continue."
+msgstr ""
+"impossible de créer '%s.lock' : %s.\n"
+"\n"
+"Il semble qu'un processus git-maintenance(1) programmé est déjà lancé dans\n"
+"ce dépôt. Veuillez vous assurer qu'aucun processus de maintenance n'est "
+"lancé\n"
+"et réessayez. Si l'échec persiste, un processus git-maintenance(1) peut "
+"avoir\n"
+"planté dans ce dépôt : supprimez le fichier manuellement pour poursuivre."
+
+msgid "cannot acquire lock for scheduled background maintenance"
msgstr ""
-"un autre processus est en train de programmer une maintenance en tâche de "
+"impossible d'acquérir le verrou pour une maintenance programmée en tâche de "
"fond"
msgid "git maintenance start [--scheduler=<scheduler>]"
@@ -7610,6 +7654,22 @@ msgid_plural "chain length = %d: %lu objects"
msgstr[0] "longueur chaînée = %d : %lu objet"
msgstr[1] "longueur chaînée = %d : %lu objets"
+msgid "could not start pack-objects to repack local links"
+msgstr ""
+"impossible de démarrer pack-objects pour ré-empaqueter les liens locaux"
+
+msgid "failed to feed local object to pack-objects"
+msgstr "échéc de la fourniture les objets locaux à pack-objects"
+
+msgid "index-pack: Expecting full hex object ID lines only from pack-objects."
+msgstr ""
+"index-pack : attente de lignes d'Id d'objets en hexa complet seulement "
+"depuis les objects de paquet."
+
+msgid "could not finish pack-objects to repack local links"
+msgstr ""
+"impossible de terminer pack-objects pour ré-empaqueter les objets locaux"
+
msgid "Cannot come back to cwd"
msgstr "Impossible de revenir au répertoire de travail courant"
@@ -7621,6 +7681,9 @@ msgstr "mauvais %s"
msgid "unknown hash algorithm '%s'"
msgstr "algorithme d'empreinte inconnu '%s'"
+msgid "--promisor cannot be used with a pack name"
+msgstr "--promisor ne peut pas être utilisé avec un nom de paquet"
+
msgid "--stdin requires a git repository"
msgstr "--stdin requiert un dépôt git"
@@ -7890,7 +7953,7 @@ msgid "base commit shouldn't be in revision list"
msgstr "le commit de base ne devrait pas faire partie de la liste de révisions"
msgid "cannot get patch id"
-msgstr "impossible d'obtenir l'id du patch"
+msgstr "impossible d'obtenir l'id de la rustine"
msgid "failed to infer range-diff origin of current series"
msgstr ""
@@ -7903,13 +7966,13 @@ msgstr ""
"utilisation de '%s' comme une différence d'intervalle pour la série actuelle"
msgid "use [PATCH n/m] even with a single patch"
-msgstr "utiliser [PATCH n/m] même avec un patch unique"
+msgstr "utiliser [PATCH n/m] même avec une rustine unique"
msgid "use [PATCH] even with multiple patches"
-msgstr "utiliser [PATCH] même avec des patchs multiples"
+msgstr "utiliser [PATCH] même avec des rustines multiples"
msgid "print patches to standard out"
-msgstr "afficher les patchs sur la sortie standard"
+msgstr "afficher les rustines sur la sortie standard"
msgid "generate a cover letter"
msgstr "générer une lettre de motivation"
@@ -7925,7 +7988,7 @@ msgid "use <sfx> instead of '.patch'"
msgstr "utiliser <sfx> au lieu de '.patch'"
msgid "start numbering patches at <n> instead of 1"
-msgstr "démarrer la numérotation des patchs à <n> au lieu de 1"
+msgstr "démarrer la numérotation des rustines à <n> au lieu de 1"
msgid "reroll-count"
msgstr "reroll-count"
@@ -7969,10 +8032,10 @@ msgid "output all-zero hash in From header"
msgstr "écrire une empreinte à zéro dans l'entête From"
msgid "don't include a patch matching a commit upstream"
-msgstr "ne pas inclure un patch correspondant à un commit amont"
+msgstr "ne pas inclure de rustine correspondant à un commit amont"
msgid "show patch format instead of default (patch + stat)"
-msgstr "afficher le format du patch au lieu du défaut (patch + stat)"
+msgstr "afficher le format de la rustine au lieu du défaut (rustine + stat)"
msgid "Messaging"
msgstr "Communication"
@@ -8009,10 +8072,10 @@ msgid "boundary"
msgstr "limite"
msgid "attach the patch"
-msgstr "attacher le patch"
+msgstr "attacher la rustine"
msgid "inline the patch"
-msgstr "patch à l'intérieur"
+msgstr "incorporer la rustine à l'intérieur"
msgid "enable message threading, styles: shallow, deep"
msgstr ""
@@ -8028,17 +8091,17 @@ msgid "base-commit"
msgstr "commit-de-base"
msgid "add prerequisite tree info to the patch series"
-msgstr "ajouter un arbre prérequis à la série de patchs"
+msgstr "ajouter un arbre prérequis à la série de rustines"
msgid "add a signature from a file"
msgstr "ajouter une signature depuis un fichier"
msgid "don't print the patch filenames"
-msgstr "ne pas afficher les noms de fichiers des patchs"
+msgstr "ne pas afficher les noms de fichiers des rustines"
msgid "show progress while generating patches"
msgstr ""
-"afficher la barre de progression durant la phase de génération des patchs"
+"afficher la barre de progression durant la phase de génération des rustines"
msgid "show changes against <rev> in cover letter or single patch"
msgstr ""
@@ -8103,7 +8166,7 @@ msgid "unable to read signature file '%s'"
msgstr "lecture du fichier de signature '%s' impossible"
msgid "Generating patches"
-msgstr "Génération des patchs"
+msgstr "Génération des rustines"
msgid "failed to create output files"
msgstr "échec de création des fichiers en sortie"
@@ -8221,7 +8284,7 @@ msgid ""
" [-q | --quiet] [--exit-code] [--get-url] [--sort=<key>]\n"
" [--symref] [<repository> [<patterns>...]]"
msgstr ""
-"git ls-remote [--brances] [--tags] [--refs] [--upload-pack=<exec>]\n"
+"git ls-remote [--branches] [--tags] [--refs] [--upload-pack=<exec>]\n"
" [-q | --quiet] [--exit-code] [--get-url] [--sort=<clé>]\n"
" [--symref] [<dépôt> [<motif>...]]"
@@ -9007,11 +9070,11 @@ msgstr "git notes [--ref <références-notes>] [list [<object>]]"
msgid ""
"git notes [--ref <notes-ref>] add [-f] [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
msgstr ""
"git notes [--ref <référence-notes>] add [-f] [--allow-empty] [--"
"[no-]separator|--separator=<coupure-paragraphe>] [--[no-]stripspace] [-m "
-"<message> | -F <fichier> | (-c | -C) <objet>] [<objet>]"
+"<message> | -F <fichier> | (-c | -C) <objet>] [<objet>] [-e]"
msgid "git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>"
msgstr ""
@@ -9020,11 +9083,11 @@ msgstr ""
msgid ""
"git notes [--ref <notes-ref>] append [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
msgstr ""
"git notes [--ref <références-notes>] append [--allow-empty] [--"
"[no-]separator|--separator=<coupure-paragraphe>] [--[no-]stripspace]-m "
-"<message> | -F <fichier> | (-c | -C) <objet>] [<objet>]"
+"<message> | -F <fichier> | (-c | -C) <objet>] [<objet>] [-e]"
msgid "git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]"
msgstr "git notes [--ref <références-notes>] edit [--allow-empty] [<objet>]"
@@ -9143,6 +9206,9 @@ msgstr "contenu de la note dans un fichier"
msgid "reuse and edit specified note object"
msgstr "réutiliser et éditer l'objet de note spécifié"
+msgid "edit note message in editor"
+msgstr "éditer le message de node dans un éditeur"
+
msgid "reuse specified note object"
msgstr "réutiliser l'objet de note spécifié"
@@ -9652,6 +9718,9 @@ msgstr "gestion des objets manquants"
msgid "do not pack objects in promisor packfiles"
msgstr "ne pas empaqueter les objets dans les fichiers paquets prometteurs"
+msgid "implies --missing=allow-any"
+msgstr "implique --missing=allow-any"
+
msgid "respect islands during delta compression"
msgstr "respecter les îlots pendant la compression des deltas"
@@ -10064,8 +10133,8 @@ msgstr ""
msgid ""
"You didn't specify any refspecs to push, and push.default is \"nothing\"."
msgstr ""
-"Vous n'avez pas spécifié de spécifications de référence à pousser, et push."
-"default est \"nothing\"."
+"Vous n'avez pas spécifié de spécifications de référence à pousser, et "
+"push.default est \"nothing\"."
#, c-format
msgid ""
@@ -10548,7 +10617,7 @@ msgid "continue"
msgstr "continuer"
msgid "skip current patch and continue"
-msgstr "sauter le patch courant et continuer"
+msgstr "sauter la rustine courante et continuer"
msgid "abort and check out the original branch"
msgstr "abandonner et extraire la branche d'origine"
@@ -10560,7 +10629,7 @@ msgid "edit the todo list during an interactive rebase"
msgstr "éditer la liste à faire lors d'un rebasage interactif"
msgid "show the patch file being applied or merged"
-msgstr "afficher le patch en cours d'application ou de fusion"
+msgstr "afficher la rustine en cours d'application ou de fusion"
msgid "use apply strategies to rebase"
msgstr "utiliser des stratégies d'application pour rebaser"
@@ -10943,7 +11012,7 @@ msgid "repository already uses '%s' format"
msgstr "le dépôt utilise déjà le format '%s'"
msgid "enable strict checking"
-msgstr "activer une vérification plus strict"
+msgstr "activer une vérification plus stricte"
msgid "'git refs verify' takes no arguments"
msgstr "'git refs verify' n'accepte aucun argument"
@@ -11287,6 +11356,30 @@ msgid_plural " Local refs configured for 'git push'%s:"
msgstr[0] " Référence locale configurée pour 'git push'%s :"
msgstr[1] " Références locales configurées pour 'git push'%s :"
+#, c-format
+msgid "'%s/HEAD' is unchanged and points to '%s'\n"
+msgstr "'%s/HEAD' est inchangé et pointe sur '%s'\n"
+
+#, c-format
+msgid "'%s/HEAD' has changed from '%s' and now points to '%s'\n"
+msgstr "'%s/HEAD' a changé depuis '%s' et pointe à présent sur '%s'\n"
+
+#, c-format
+msgid "'%s/HEAD' is now created and points to '%s'\n"
+msgstr "'%s/HEAD' a été créé et pointe sur '%s'\n"
+
+#, c-format
+msgid "'%s/HEAD' was detached at '%s' and now points to '%s'\n"
+msgstr "'%s/HEAD' est détaché de '%s' et pointe à présent sur '%s'\n"
+
+#, c-format
+msgid ""
+"'%s/HEAD' used to point to '%s' (which is not a remote branch), but now "
+"points to '%s'\n"
+msgstr ""
+"'%s/HEAD' pointait sur '%s' (qui n'est pas une branche distante), mais "
+"pointe à présent sur '%s'\n"
+
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr "définir refs/remotes/<nom>/HEAD selon la distante"
@@ -11310,7 +11403,7 @@ msgid "Not a valid ref: %s"
msgstr "Référence non valide : %s"
#, c-format
-msgid "Could not setup %s"
+msgid "Could not set up %s"
msgstr "Impossible de paramétrer %s"
#, c-format
@@ -12454,7 +12547,7 @@ msgid ""
"directory '%s' contains untracked files, but is not in the sparse-checkout "
"cone"
msgstr ""
-"le dossier '%s' contient des fichiers non-suivis, mais n'est pas dans le "
+"le répertoire '%s' contient des fichiers non-suivis, mais n'est pas dans le "
"cone d'extraction clairsemée"
#, c-format
@@ -13191,7 +13284,7 @@ msgid ""
"the superproject is not on any branch"
msgstr ""
"La branche du sous-module %s est configurée pour hériter de la branche du "
-"superprojet, mais le superprojet n'est sur aucune branche"
+"super-projet, mais le super-projet n'est sur aucune branche"
#, c-format
msgid "Unable to find current revision in submodule path '%s'"
@@ -14097,6 +14190,9 @@ msgstr "régler le mode de suivi (voir git-branch(1))"
msgid "try to match the new branch name with a remote-tracking branch"
msgstr "essayer de nommer la nouvelle branche comme la branche amont"
+msgid "use relative paths for worktrees"
+msgstr "utiliser des chemins relatifs pour les arbres-de-travail"
+
#, c-format
msgid "options '%s', '%s', and '%s' cannot be used together"
msgstr "les options '%s', '%s' et '%s' ne peuvent pas être utilisées ensemble"
@@ -14379,6 +14475,26 @@ msgstr "impossible de créer '%s'"
msgid "index-pack died"
msgstr "l'index de groupe a disparu"
+#, c-format
+msgid "directory '%s' is present in index, but not sparse"
+msgstr "Le répertoire '%s' est présent dans l'index et pourtant pas clairsemé"
+
+msgid "corrupted cache-tree has entries not present in index"
+msgstr "l'arbre de cache corrompu a des entrées non présentes dans l'index"
+
+#, c-format
+msgid "%s with flags 0x%x should not be in cache-tree"
+msgstr "%s avec les drapeaux 0x%x ne devrait pas être dans l'arbre de cache"
+
+#, c-format
+msgid "bad subtree '%.*s'"
+msgstr "mauvais sous-arbre '%.*s'"
+
+#, c-format
+msgid "cache-tree for path %.*s does not match. Expected %s got %s"
+msgstr ""
+"l'arbre de cache pour le chemin %.*s ne correspond pas. %s attendu, %s obtenu"
+
msgid "terminating chunk id appears earlier than expected"
msgstr "l'identifiant de terminaison de tronçon apparaît plus tôt qu'attendu"
@@ -14409,13 +14525,13 @@ msgid "Add file contents to the index"
msgstr "Ajouter le contenu de fichiers dans l'index"
msgid "Apply a series of patches from a mailbox"
-msgstr "Appliquer une série de patchs depuis une boîte mail"
+msgstr "Appliquer une série de rustines depuis une boîte mail"
msgid "Annotate file lines with commit information"
msgstr "Annoter les lignes du fichier avec l'information de commit"
msgid "Apply a patch to files and/or to the index"
-msgstr "Appliquer une patch à des fichiers ou à l'index"
+msgstr "Appliquer une rustine à des fichiers ou à l'index"
msgid "Import a GNU Arch repository into Git"
msgstr "Importer dans Git un dépôt GNU Arch"
@@ -14567,7 +14683,7 @@ msgid "Run a Git command on a list of repositories"
msgstr "Lance une commande Git sur une liste de dépôts"
msgid "Prepare patches for e-mail submission"
-msgstr "Préparer les patchs pour soumission par courriel"
+msgstr "Préparer les rustines pour soumission par courriel"
msgid "Verifies the connectivity and validity of the objects in the database"
msgstr ""
@@ -14637,7 +14753,7 @@ msgstr "Afficher le contenu d'un objet arbre"
msgid "Extracts patch and authorship from a single e-mail message"
msgstr ""
-"Extraire le patch et l'information de d'auteur depuis un simple message de "
+"Extraire la rustine et l'information de l'auteur depuis un simple message de "
"courriel"
msgid "Simple UNIX mbox splitter program"
@@ -14700,7 +14816,7 @@ msgid "Pack heads and tags for efficient repository access"
msgstr "Empaqueter les têtes et les étiquettes pour un accès efficace au dépôt"
msgid "Compute unique ID for a patch"
-msgstr "Calculer l'ID unique d'un patch"
+msgstr "Calculer l'ID unique d'une rustine"
msgid "Prune all unreachable objects from the object database"
msgstr "Élaguer les objets inatteignables depuis la base de données des objets"
@@ -14775,7 +14891,7 @@ msgid "Remove files from the working tree and from the index"
msgstr "Supprimer des fichiers de la copie de travail et de l'index"
msgid "Send a collection of patches as emails"
-msgstr "Envoyer un ensemble de patchs comme courriels"
+msgstr "Envoyer un ensemble de rustines comme courriels"
msgid "Push objects over Git protocol to another repository"
msgstr "Pousser les objets sur un autre dépôt via le protocole Git"
@@ -15060,7 +15176,7 @@ msgid ""
"disabling Bloom filters for commit-graph layer '%s' due to incompatible "
"settings"
msgstr ""
-"désactivation des filtres de Bloom opur la couche de graphe de commits '%s' "
+"désactivation des filtres de Bloom pour la couche de graphe de commits '%s' "
"à cause de réglages incompatibles"
msgid "commit-graph has no base graphs chunk"
@@ -15202,8 +15318,8 @@ msgid ""
"attempting to write a commit-graph, but 'commitGraph.changedPathsVersion' "
"(%d) is not supported"
msgstr ""
-"essai d'écriture de graphe de commits, mais 'commitGraph."
-"changedPathsVersion' (%d) n'est pas pris en charge"
+"essai d'écriture de graphe de commits, mais "
+"'commitGraph.changedPathsVersion' (%d) n'est pas pris en charge"
msgid "too many commits to write graph"
msgstr "trop de commits pour écrire un graphe"
@@ -15292,13 +15408,13 @@ msgid ""
"to convert the grafts into replace refs.\n"
"\n"
"Turn this message off by running\n"
-"\"git config advice.graftFileDeprecated false\""
+"\"git config set advice.graftFileDeprecated false\""
msgstr ""
"Le support de <GIT_DIR>/info/grafts est déconseillé\n"
"et sera supprimé dans une version future de Git.\n"
"\n"
"Veuillez utiliser \"git replace --convert-graft-file\"\n"
-"pour convertir les grafts en référence de remplacement.\n"
+"pour convertir les grafts en références de remplacement.\n"
"\n"
"Supprimez ce message en lançant\n"
"\"git config advice.graftFileDeprecated false\""
@@ -16139,6 +16255,18 @@ msgstr "l'url n'a pas de schéma : %s"
msgid "credential url cannot be parsed: %s"
msgstr "impossible d'analyser l'url d'identification : %s"
+#, c-format
+msgid "invalid timeout '%s', expecting a non-negative integer"
+msgstr "délai d'attente invalide '%s', entier positif ou nul attendu"
+
+#, c-format
+msgid "invalid init-timeout '%s', expecting a non-negative integer"
+msgstr "délai d'attente d'init invalide '%s', entier positif ou nul attendu"
+
+#, c-format
+msgid "invalid max-connections '%s', expecting an integer"
+msgstr "max-connections invalide '%s', entier attendu"
+
msgid "in the future"
msgstr "dans le futur"
@@ -16211,8 +16339,8 @@ msgstr "impossible de charger la regex île pour '%s' : %s"
#, c-format
msgid "island regex from config has too many capture groups (max=%d)"
msgstr ""
-"l'expression rationnelle depuis la configuration a trop de groupes de "
-"capture (max=%d)"
+"l'expression régulière depuis la configuration a trop de groupes de capture "
+"(max=%d)"
#, c-format
msgid "Marked %d islands, done.\n"
@@ -16735,8 +16863,7 @@ msgstr ""
"ou -G"
msgid "treat <string> in -S as extended POSIX regular expression"
-msgstr ""
-"traiter <chaîne> dans -S comme une expression rationnelle POSIX étendue"
+msgstr "traiter <chaîne> dans -S comme une expression régulière POSIX étendue"
msgid "control the order in which files appear in the output"
msgstr "contrôler l'ordre dans lequel les fichiers apparaissent dans la sortie"
@@ -16880,6 +17007,20 @@ msgstr "espaces de nom de Git \"%s\""
msgid "too many args to run %s"
msgstr "trop d'arguments pour lancer %s"
+#, c-format
+msgid ""
+"You are attempting to fetch %s, which is in the commit graph file but not in "
+"the object database.\n"
+"This is probably due to repo corruption.\n"
+"If you are attempting to repair this repo corruption by refetching the "
+"missing object, use 'git fetch --refetch' with the missing object."
+msgstr ""
+"Vous tentez de récupérer %s, qui est dans le graphe de commit mais pas dans "
+"la base de données des objets.\n"
+"C'est probablement du à une corruption de dépôt.\n"
+"Si vous essayez de réparer cette corruption de dépôt en re-récupérer l'objet "
+"manquant, utilisez 'git fetch --refetch' sur les objets manquants."
+
msgid "git fetch-pack: expected shallow list"
msgstr "git fetch-pack : liste superficielle attendue"
@@ -17469,11 +17610,11 @@ msgstr[1] ""
#, 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`."
+"You can disable this warning with `git config set advice.ignoredHook false`."
msgstr ""
"Le crochet '%s' a été ignoré parce qu'il n'est pas marqué comme exécutable.\n"
-"Vous pouvez désactiver cet avertissement avec `git config advice.ignoredHook "
-"false`."
+"Vous pouvez désactiver cet avertissement avec `git config set "
+"advice.ignoredHook false`."
msgid "not a git repository"
msgstr "pas un dépôt git"
@@ -17490,15 +17631,9 @@ msgstr ""
msgid "Delegation control is not supported with cURL < 7.22.0"
msgstr "La délégation de commande n'est pas supporté avec cuRL < 7.22.0"
-msgid "Public key pinning not supported with cURL < 7.39.0"
-msgstr "L'épinglage de clé publique n'est pas supporté avec cuRL < 7.39.0"
-
msgid "Unknown value for http.proactiveauth"
msgstr "valeur inconnue pour http.proactiveauth"
-msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
-msgstr "CURLSSLOPT_NO_REVOKE n'est pas supporté avec cuRL < 7.44.0"
-
#, c-format
msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
msgstr "Dorsale SSL '%s' non supportée. Dorsales SSL supportées :"
@@ -17688,6 +17823,10 @@ msgid "unable to format message: %s"
msgstr "impossible de formater le message : %s"
#, c-format
+msgid "invalid marker-size '%s', expecting an integer"
+msgstr "taille de marqueur invalide '%s', entier attendu"
+
+#, c-format
msgid "Failed to merge submodule %s (not checked out)"
msgstr "Échec de la fusion du sous-module %s (non extrait)"
@@ -18284,7 +18423,7 @@ msgstr "échec de l'écriture de l'index de multi-paquet"
msgid "cannot expire packs from an incremental multi-pack-index"
msgstr ""
-"impossible d'expirer les paquets dpuis un index multi-paquet incrémental"
+"impossible d'expirer les paquets depuis un index multi-paquet incrémental"
msgid "Counting referenced objects"
msgstr "Comptage des objets référencés"
@@ -18293,7 +18432,7 @@ msgid "Finding and deleting unreferenced packfiles"
msgstr "Recherche et effacement des fichiers paquets non-référencés"
msgid "cannot repack an incremental multi-pack-index"
-msgstr "impossible de ré-empaqueter un index multi-paquet"
+msgstr "impossible de ré-empaqueter un index multi-paquet incrémental"
msgid "could not start pack-objects"
msgstr "impossible de démarrer le groupement d'objets"
@@ -18809,7 +18948,7 @@ msgid ""
"\n"
"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
+"running \"git config set advice.objectNameWarning false\""
msgstr ""
"Git ne crée normalement jamais de référence qui se termine par 40\n"
"caractères hexa car elle serait ignorée si vous spécifiez juste\n"
@@ -18821,7 +18960,7 @@ msgstr ""
"est créée.\n"
"Veuillez examiner ces références et peut-être les supprimer. Désactivez ce "
"message\n"
-"en lançant \"git config advice.objectNameWarning false\""
+"en lançant \"git config set advice.objectNameWarning false\""
#, c-format
msgid "log for '%.*s' only goes back to %s"
@@ -18986,13 +19125,6 @@ msgstr "l'index inverse requis manque dans l'index multi-paquet"
msgid "could not open pack %s"
msgstr "impossible d'ouvrir le paquet '%s'"
-msgid "could not determine MIDX preferred pack"
-msgstr "impossible de déterminer le paquet préféré de MIDX"
-
-#, c-format
-msgid "preferred pack (%s) is invalid"
-msgstr "le paquet préféré (%s) est invalide"
-
msgid "corrupt bitmap lookup table: triplet position out of index"
msgstr ""
"table de recherche en bitmap corrompue : position de triplet hors d'index"
@@ -19270,7 +19402,7 @@ msgid "use <n> digits to display object names"
msgstr "utiliser <n> chiffres pour afficher les noms des objets"
msgid "prefixed path to initial superproject"
-msgstr "chemin préfixé vers le superprojet initial"
+msgstr "chemin préfixé vers le super-projet initial"
msgid "how to strip spaces and #comments from message"
msgstr "comment éliminer les espaces et les commentaires # du message"
@@ -19484,7 +19616,7 @@ msgstr ""
msgid ""
"pseudo-merge regex from config has too many capture groups (max=%<PRIuMAX>)"
msgstr ""
-"l'expression rationnelle de pseudo-fusion a trop de groupes de capture "
+"l'expression régulière de pseudo-fusion a trop de groupes de capture "
"(max=%<PRIuMAX>)"
#, c-format
@@ -20128,18 +20260,26 @@ msgstr "le journal pour la réf %s s'arrête de manière inattendue sur %s"
msgid "log for %s is empty"
msgstr "le journal pour la réf %s est vide"
-msgid "refusing to force and skip creation of reflog"
-msgstr "refus de forcer et sauter la création du reflog"
-
#, c-format
-msgid "refusing to update ref with bad name '%s'"
-msgstr "refus de mettre à jour une réf avec un nom cassé '%s'"
+msgid "refusing to update reflog for pseudoref '%s'"
+msgstr "refus de mettre à jour le réflog pour la pseudo-réf '%s'"
#, c-format
msgid "refusing to update pseudoref '%s'"
msgstr "refus de mettre à jour la pseudo-réf '%s'"
#, c-format
+msgid "refusing to update reflog with bad name '%s'"
+msgstr "refus de mettre à jour le réflog avec un nom cassé '%s'"
+
+#, c-format
+msgid "refusing to update ref with bad name '%s'"
+msgstr "refus de mettre à jour une réf avec un nom cassé '%s'"
+
+msgid "refusing to force and skip creation of reflog"
+msgstr "refus de forcer et sauter la création du reflog"
+
+#, c-format
msgid "update_ref failed for ref '%s': %s"
msgstr "échec de update_ref pour la réf '%s' : %s"
@@ -20190,6 +20330,10 @@ msgstr ""
"normale trouvée"
#, c-format
+msgid "cannot read ref file '%s'"
+msgstr "impossible de lire le fichier de référence '%s'"
+
+#, c-format
msgid "cannot open directory %s"
msgstr "impossible d'ouvrir le répertoire %s"
@@ -20321,8 +20465,8 @@ msgstr "le serveur distant a envoyé un paquet de fin de réponse inattendu"
msgid "unable to rewind rpc post data - try increasing http.postBuffer"
msgstr ""
-"impossible de rembobiner le données post rpc - essayer d'augmenter http."
-"postBuffer"
+"impossible de rembobiner le données post rpc - essayer d'augmenter "
+"http.postBuffer"
#, c-format
msgid "remote-curl: bad line length character: %.4s"
@@ -20406,6 +20550,10 @@ msgid "more than one uploadpack given, using the first"
msgstr "plus d'un uploadpack fournis, utilisation du premier"
#, c-format
+msgid "unrecognized followRemoteHEAD value '%s' ignored"
+msgstr "valeur '%s' de followRemoteHEAD non reconnue et ignorée "
+
+#, c-format
msgid "unrecognized value transfer.credentialsInUrl: '%s'"
msgstr "valeur non reconnue transfer.credentialsInUrl : '%s'"
@@ -21359,7 +21507,7 @@ msgstr "impossible d'appliquer %s... %s"
#, c-format
msgid "dropping %s %s -- patch contents already upstream\n"
-msgstr "abandon de %s %s -- le contenu de la rustine déjà en amont\n"
+msgstr "abandon de %s %s -- le contenu de la rustine est déjà en amont\n"
#, c-format
msgid "git %s: failed to read the index"
@@ -22364,6 +22512,9 @@ msgstr "le commit %s n'est pas marqué joignable"
msgid "too many commits marked reachable"
msgstr "trop de commits marqués joignables"
+msgid "could not determine MIDX preferred pack"
+msgstr "impossible de déterminer le paquet préféré de MIDX"
+
msgid "test-tool serve-v2 [<options>]"
msgstr "test-tool serve-v2 [<options>]"
@@ -23034,6 +23185,10 @@ msgstr "fichier .git cassé"
msgid ".git file incorrect"
msgstr "fichier .git incorrect"
+msgid ".git file absolute/relative path mismatch"
+msgstr ""
+"non-correspondance entre les chemin absolu entre relatif du fichier .git"
+
msgid "not a valid path"
msgstr "pas un chemin valide"
@@ -23050,6 +23205,9 @@ msgstr "impossible de localiser le dépôt ; fichier .git cassé"
msgid "gitdir unreadable"
msgstr "gitdir non lisible"
+msgid "gitdir absolute/relative path mismatch"
+msgstr "non-correspondance de chemin absolu/relatif de gitdir"
+
msgid "gitdir incorrect"
msgstr "gitdir incorrect"
@@ -23085,6 +23243,14 @@ msgstr "impossible de désinitialiser %s dans '%s'"
msgid "failed to set extensions.worktreeConfig setting"
msgstr "échec de paramétrage extensions.worktreeConfig"
+msgid "unable to upgrade repository format to support relative worktrees"
+msgstr ""
+"impossible de mettre à jour le format de dépôt pour prendre en charge les "
+"arbres-de-travail relatifs"
+
+msgid "unable to set extensions.relativeWorktrees setting"
+msgstr "échec de modification du paramètre extensions.relativeWorktrees"
+
#, c-format
msgid "could not setenv '%s'"
msgstr "impossible de configurer l'environnement '%s'"
@@ -23266,13 +23432,13 @@ msgid "You are in the middle of an am session."
msgstr "Vous êtes au milieu d'une session am."
msgid "The current patch is empty."
-msgstr "Le patch actuel est vide."
+msgstr "La rustine actuelle est vide."
msgid " (fix conflicts and then run \"git am --continue\")"
msgstr " (réglez les conflits puis lancez \"git am --continue\")"
msgid " (use \"git am --skip\" to skip this patch)"
-msgstr " (utilisez \"git am --skip\" pour sauter ce patch)"
+msgstr " (utilisez \"git am --skip\" pour sauter cette rustine)"
msgid ""
" (use \"git am --allow-empty\" to record this patch as an empty commit)"
@@ -23322,7 +23488,7 @@ msgid " (fix conflicts and then run \"git rebase --continue\")"
msgstr " (réglez les conflits puis lancez \"git rebase --continue\")"
msgid " (use \"git rebase --skip\" to skip this patch)"
-msgstr " (utilisez \"git rebase --skip\" pour sauter ce patch)"
+msgstr " (utilisez \"git rebase --skip\" pour sauter cette rustine)"
msgid " (use \"git rebase --abort\" to check out the original branch)"
msgstr " (utilisez \"git rebase --abort\" pour extraire la branche d'origine)"
@@ -23382,7 +23548,7 @@ msgstr ""
" (tous les conflits sont réglés : lancez \"git cherry-pick --continue\")"
msgid " (use \"git cherry-pick --skip\" to skip this patch)"
-msgstr " (utilisez \"git cherry-pick --skip\" pour sauter ce patch)"
+msgstr " (utilisez \"git cherry-pick --skip\" pour sauter cette rustine)"
msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
msgstr " (utilisez \"git cherry-pick --abort\" pour annuler le picorage)"
@@ -23404,7 +23570,7 @@ msgid " (all conflicts fixed: run \"git revert --continue\")"
msgstr " (tous les conflits sont réglés : lancez \"git revert --continue\")"
msgid " (use \"git revert --skip\" to skip this patch)"
-msgstr " (utilisez \"git revert --skip\" pour sauter ce patch)"
+msgstr " (utilisez \"git revert --skip\" pour sauter cette rustine)"
msgid " (use \"git revert --abort\" to cancel the revert operation)"
msgstr " (utilisez \"git revert --abort\" pour annuler le rétablissement)"
@@ -23728,7 +23894,7 @@ msgid ""
"\n"
msgstr ""
"\n"
-"Aucun fichier patch spécifié !\n"
+"Aucun fichier de rustine spécifié !\n"
"\n"
#, perl-format
@@ -23748,7 +23914,7 @@ msgid ""
msgstr ""
"Les lignes commençant par \"GIT:\" seront supprimées.\n"
"Envisagez d'inclure un diffstat global ou une table des matières\n"
-"pour le patch que vous êtes en train d'écrire.\n"
+"pour la rustine que vous êtes en train d'écrire.\n"
"\n"
"Effacez le corps si vous ne souhaitez pas envoyer un résumé.\n"
@@ -23785,7 +23951,7 @@ msgid ""
"has the template subject '*** SUBJECT HERE ***'. Pass --force if you really "
"want to send.\n"
msgstr ""
-"Envoi refusé parce que le patch\n"
+"Envoi refusé parce que la rustine\n"
"\t%s\n"
"a un sujet modèle '*** SUBJECT HERE ***'. Passez --force is vous souhaitez "
"vraiment envoyer.\n"
@@ -23938,7 +24104,7 @@ msgid ""
msgstr ""
"fatal : %s : rejeté par le crochet %s\n"
"%s\n"
-"attention : aucun patch envoyé\n"
+"attention : aucune rustine envoyée\n"
#, perl-format
msgid "unable to open %s: %s\n"
@@ -23950,7 +24116,7 @@ msgid ""
"warning: no patches were sent\n"
msgstr ""
"fatal : %s : %d est plus long que 998 caractères \n"
-"attention : aucun patch envoyé\n"
+"attention : aucune rustine envoyée\n"
#, perl-format
msgid "Skipping %s with backup suffix '%s'.\n"
@@ -23961,229 +24127,6 @@ msgstr "%s sauté avec un suffix de sauvegarde '%s'.\n"
msgid "Do you really want to send %s? [y|N]: "
msgstr "Souhaitez-vous réellement envoyer %s ?[y|N] : "
-#~ msgid "revision walk setup failed\n"
-#~ msgstr "échec de la préparation du parcours des révisions\n"
-
-#, c-format
-#~ msgid "unable to parse contact: %s"
-#~ msgstr "impossible d'analyser le contact : %s"
-
#, c-format
-#~ msgid "truncating .rej filename to %.*s.rej"
-#~ msgstr "troncature du nom de fichier .rej en %.*s.rej"
-
-#~ msgid ""
-#~ "the add.interactive.useBuiltin setting has been removed!\n"
-#~ "See its entry in 'git help config' for details."
-#~ msgstr ""
-#~ "le réglage add.interactive.useBuiltin a été supprimé !\n"
-#~ "Référez-vous à cette entrée dans 'git help config' pour plus de détails."
-
-#~ msgid "git archive: Remote with no URL"
-#~ msgstr "git archive : Dépôt distant sans URL"
-
-#~ msgid "only one action at a time"
-#~ msgstr "une seule action à la fois"
-
-#~ msgid "use [RFC PATCH] instead of [PATCH]"
-#~ msgstr "utiliser [RFC PATCH] au lieu de [PATCH]"
-
-#, c-format
-#~ msgid "no URLs configured for remote '%s'"
-#~ msgstr "aucune URL configurée pour le dépôt distant '%s'"
-
-#, c-format
-#~ msgid "remote '%s' has no configured URL"
-#~ msgstr "le distant '%s' n'a pas d'URL configuré"
-
-#~ msgid ""
-#~ "Use -f if you really want to add them.\n"
-#~ "Turn this message off by running\n"
-#~ "\"git config advice.addIgnoredFile false\""
-#~ msgstr ""
-#~ "Utilisez -f si vous voulez vraiment les ajouter.\n"
-#~ "Éliminez ce message en lançant\n"
-#~ "\"git config advice.addIgnoredFile false\""
-
-#~ msgid ""
-#~ "Maybe you wanted to say 'git add .'?\n"
-#~ "Turn this message off by running\n"
-#~ "\"git config advice.addEmptyPathspec false\""
-#~ msgstr ""
-#~ "Peut-être avez-vous voulu dire 'git add .' ?\n"
-#~ "Éliminez ce message en lançant\n"
-#~ "\"git config advice.addEmptyPathspec false\""
-
-#~ msgid ""
-#~ "clean.requireForce defaults to true and neither -i, -n, nor -f given; "
-#~ "refusing to clean"
-#~ msgstr ""
-#~ "clean.requireForce à true par défaut et ni -i, -n ou -f fourni ; refus de "
-#~ "nettoyer"
-
-#, c-format
-#~ msgid "bad ls-files format: element '%s' does not start with '('"
-#~ msgstr "mauvais format ls-files : l'élément '%s' ne commence pas par '('"
-
-#, c-format
-#~ msgid "bad ls-files format: element '%s' does not end in ')'"
-#~ msgstr "mauvais format ls-files : l'élément '%s' ne se termine pas par ')'"
-
-#, c-format
-#~ msgid "bad ls-files format: %%%.*s"
-#~ msgstr "mauvais format ls-files : %%%.*s"
-
-#~ msgid "keep redundant, empty commits"
-#~ msgstr "garder les validations redondantes, vides"
-
-#~ msgid "core.commentChar should only be one ASCII character"
-#~ msgstr "core.commentChar ne devrait être qu'un unique caractère ASCII"
-
-#~ msgid ""
-#~ "--bundle-uri is incompatible with --depth, --shallow-since, and --shallow-"
-#~ "exclude"
-#~ msgstr ""
-#~ "--bundle-uri est incompatible avec --depth, --shallow-since, et --shallow-"
-#~ "exclude"
-
-#~ msgid "--merge-base is incompatible with --stdin"
-#~ msgstr "--merge-base est incompatible avec --stdin"
-
-#~ msgid ""
-#~ "apply options are incompatible with rebase.autoSquash. Consider adding --"
-#~ "no-autosquash"
-#~ msgstr ""
-#~ "les options d'application sont incompatibles avec rebase.autoSquash. "
-#~ "Considérez l'ajout de --no-autosquash"
-
-#~ msgid "--exclude-hidden cannot be used together with --branches"
-#~ msgstr "--exclude-hidden ne peut être utilisé avec --branches"
-
-#~ msgid "--exclude-hidden cannot be used together with --tags"
-#~ msgstr "--exclude-hidden ne peut pas être utilisé avec --tags"
-
-#~ msgid "--exclude-hidden cannot be used together with --remotes"
-#~ msgstr "--exclude-hidden ne peut pas être utilisé avec --remotes"
-
-#, c-format
-#~ msgid "only one of '%s', '%s' or '%s' can be given"
-#~ msgstr "les options '%s', '%s' et '%s' sont mutuellement exclusives"
-
-#, c-format
-#~ msgid "'%s' and '%s' cannot be used together"
-#~ msgstr "'%s' et '%s' ne peuvent pas être utilisées ensemble"
-
-#, c-format
-#~ msgid "options '%s', and '%s' cannot be used together"
-#~ msgstr "les options '%s' et '%s' ne peuvent pas être utilisées ensemble"
-
-#~ msgid "<commit-ish>"
-#~ msgstr "<commit-esque>"
-
-#, c-format
-#~ msgid "%s is incompatible with %s"
-#~ msgstr "%s est incompatible avec %s"
-
-#~ msgid "unhandled options"
-#~ msgstr "options non gérées"
-
-#, c-format
-#~ msgid "options '%s=%s' and '%s=%s' cannot be used together"
-#~ msgstr ""
-#~ "les options '%s=%s' et '%s=%s' ne peuvent pas être utilisées ensemble"
-
-#, c-format
-#~ msgid "%s : incompatible with something else"
-#~ msgstr "%s est incompatible avec toute autre option"
-
-#~ msgid "Could not write patch"
-#~ msgstr "Impossible d'écrire le patch"
-
-#, c-format
-#~ msgid "Could not stat '%s'"
-#~ msgstr "Stat de '%s' impossible"
-
-#, c-format
-#~ msgid "Cannot delete branch '%s' checked out at '%s'"
-#~ msgstr "Impossible de supprimer la branche '%s' extraite dans '%s'"
-
-#~ msgid "unable to write new_index file"
-#~ msgstr "impossible d'écrire le fichier new_index"
-
-#~ msgid "do not apply config rules"
-#~ msgstr "ne pas appliquer les règles de la configuration"
-
-#~ msgid "join whitespace-continued values"
-#~ msgstr "joindre les valeurs continuées avec des caractères blancs"
-
-#~ msgid "set parsing options"
-#~ msgstr "paramètres d'analyse"
-
-#~ msgid "cannot move directory over file"
-#~ msgstr "impossible de déplacer un répertoire sur un fichier"
-
-#~ msgid "cannot use --filter without --stdout"
-#~ msgstr "impossible d'utiliser --filter sans --stdout"
-
-#~ msgid "cannot use --max-pack-size with --cruft"
-#~ msgstr "impossible d'utiliser --max-pack-size avec --cruft"
-
-#~ msgid "--strategy requires --merge or --interactive"
-#~ msgstr "--strategy requiert --merge ou --interactive"
-
-#, c-format
-#~ msgid ""
-#~ "commit-graph has generation number zero for commit %s, but non-zero "
-#~ "elsewhere"
-#~ msgstr ""
-#~ "le graphe de commit a un numéro de génération nul pour le commit %s, mais "
-#~ "non-nul ailleurs"
-
-#~ msgid "--merge-base only works with commits"
-#~ msgstr "--merge-base ne fonctionne qu'avec des commits"
-
-#~ msgid "scalar clone [<options>] [--] <repo> [<dir>]"
-#~ msgstr "scalar clone [<options>] [--] <dépôt> [<répertoire>]"
-
-#, c-format
-#~ msgid "could not rename '%s' to '%s'"
-#~ msgstr "impossible de renommer '%s' en '%s'"
-
-#, c-format
-#~ msgid "It is not possible to %s because you have unmerged files."
-#~ msgstr "%s n'est pas possible car vous avez des fichiers non fusionnés."
-
-#~ msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
-#~ msgstr ""
-#~ "ne pas passer l'option --keep-cr à git-mailsplit indépendamment de am."
-#~ "keepcr"
-
-#~ msgid ""
-#~ "Updates were rejected because the tip of the remote-tracking\n"
-#~ "branch has been updated since the last checkout. You may want\n"
-#~ "to integrate those changes locally (e.g., 'git pull ...')\n"
-#~ "before forcing an update.\n"
-#~ msgstr ""
-#~ "Les mises à jour ont été rejetées, car la pointe de la branche\n"
-#~ "de suivi a été mise à jour depuis la dernière extraction. Intégrez\n"
-#~ "ces changements localement (par exemple 'git pull ...') avant de\n"
-#~ "forcer à nouveau une mise à jour.\n"
-
-#~ msgid "or do not fetch any tag at all (--no-tags)"
-#~ msgstr "ou ne rapatrier aucune étiquette (--no-tags)"
-
-#~ msgid "current working directory is untracked"
-#~ msgstr "l'arbre de travail actuel est non-suivi"
-
-#~ msgid "cannot use --contents with final commit object name"
-#~ msgstr "on ne peut pas utiliser --contents avec un nom d'objet commit final"
-
-#~ msgid "please commit or stash them."
-#~ msgstr "veuillez les valider ou les remiser."
-
-#, c-format
-#~ msgid "Unknown mode: %s"
-#~ msgstr "Mode inconnu : %s"
-
-#~ msgid "could not lock HEAD"
-#~ msgstr "impossible de verrouiller HEAD"
+#~ msgid "preferred pack (%s) is invalid"
+#~ msgstr "le paquet préféré (%s) est invalide"
diff --git a/po/id.po b/po/id.po
index fc34140776..3965c9e941 100644
--- a/po/id.po
+++ b/po/id.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2024-10-04 08:33+0700\n"
-"PO-Revision-Date: 2024-10-04 08:52+0700\n"
+"POT-Creation-Date: 2024-12-23 18:57+0000\n"
+"PO-Revision-Date: 2025-01-06 15:50+0700\n"
"Last-Translator: Bagas Sanjaya <bagasdotme@gmail.com>\n"
"Language-Team: Indonesian\n"
"Language: id\n"
@@ -755,10 +755,10 @@ msgstr "Hanya berkas biner yang berubah."
#, c-format
msgid ""
"\n"
-"Disable this message with \"git config advice.%s false\""
+"Disable this message with \"git config set advice.%s false\""
msgstr ""
"\n"
-"Nonaktifkan pesan ini dengan \"git config advice.%s false\""
+"Nonaktifkan pesan ini dengan \"git config set advice.%s false\""
#: advice.c
#, c-format
@@ -1670,9 +1670,10 @@ msgstr "bukan nama objek valid: %s"
msgid "not a tree object: %s"
msgstr "bukan objek pohon: %s"
-#: archive.c builtin/clone.c
-msgid "unable to checkout working tree"
-msgstr "tidak dapat men-checkout pohon kerja"
+#: archive.c
+#, c-format
+msgid "failed to unpack tree object %s"
+msgstr "gagal membuka objek pohon %s"
#: archive.c
#, c-format
@@ -3734,11 +3735,11 @@ msgstr "HEAD tidak ditemukan di bawah refs/heads!"
#: builtin/branch.c
msgid ""
-"branch with --recurse-submodules can only be used if submodule."
-"propagateBranches is enabled"
+"branch with --recurse-submodules can only be used if "
+"submodule.propagateBranches is enabled"
msgstr ""
-"cabang dengan --recurse-submodules hanya dapat digunakan jika submodule."
-"propagateBranches diaktifkan"
+"cabang dengan --recurse-submodules hanya dapat digunakan jika "
+"submodule.propagateBranches diaktifkan"
#: builtin/branch.c
msgid "--recurse-submodules can only be used to create branches"
@@ -4767,7 +4768,7 @@ msgstr "gaya konflik '%s' tidak dikenal"
msgid "perform a 3-way merge with the new branch"
msgstr "lakukan penggabungan 3 arah dengan cabang baru"
-#: builtin/checkout.c builtin/log.c parse-options.h
+#: builtin/checkout.c builtin/log.c builtin/range-diff.c parse-options.h
msgid "style"
msgstr "gaya"
@@ -4796,9 +4797,8 @@ msgid "update ignored files (default)"
msgstr "perbarui berkas yang diabaikan (default)"
#: builtin/checkout.c
-msgid "do not check if another worktree is holding the given ref"
-msgstr ""
-"jangan periksa jika pohon kerja yang lain mempunyai referensi yang diberikan"
+msgid "do not check if another worktree is using this branch"
+msgstr "jangan periksa jika pohon kerja yang lain menggunakan cabang ini"
#: builtin/checkout.c
msgid "checkout our version for unmerged files"
@@ -5179,14 +5179,13 @@ msgstr "buat klon dangkal sedalam kedalaman tersebut"
msgid "create a shallow clone since a specific time"
msgstr "buat klon dangkal sejak waktu yang disebutkan"
-#: builtin/clone.c builtin/fetch.c builtin/pull.c builtin/rebase.c
-#: builtin/replay.c
-msgid "revision"
-msgstr "revisi"
+#: builtin/clone.c builtin/fetch.c builtin/pull.c
+msgid "ref"
+msgstr "referensi"
#: builtin/clone.c builtin/fetch.c builtin/pull.c
-msgid "deepen history of shallow clone, excluding rev"
-msgstr "perdalam riwayat klon dangkal, tidak termasuk rev"
+msgid "deepen history of shallow clone, excluding ref"
+msgstr "perdalam riwayat klon dangkal, kecualikan referensi"
#: builtin/clone.c builtin/submodule--helper.c
msgid "clone only one branch, HEAD or --branch"
@@ -5349,6 +5348,10 @@ msgid "remote HEAD refers to nonexistent ref, unable to checkout"
msgstr "HEAD remote merujuk pada ref yang tidak ada, tidak dapat men-checkout"
#: builtin/clone.c
+msgid "unable to checkout working tree"
+msgstr "tidak dapat men-checkout pohon kerja"
+
+#: builtin/clone.c
msgid "unable to write parameters to config file"
msgstr "tidak dapat menulis parameter ke berkas konfigurasi"
@@ -6347,10 +6350,10 @@ msgstr ""
#: builtin/config.c
msgid ""
"git config unset [<file-option>] [--all] [--value=<value>] [--fixed-value] "
-"<name> <value>"
+"<name>"
msgstr ""
-"git config unset [<opsi berkas] [--all] [--value=<nilai>] [--fixed-value] "
-"<nama> <nilai>"
+"git config unset [<opsi berkas>] [--all] [--value=<nilai>] [--fixed-value] "
+"<nama>"
#: builtin/config.c
msgid "git config rename-section [<file-option>] <old-name> <new-name>"
@@ -6907,12 +6910,8 @@ msgstr "%lu komit dilintasi\n"
#: builtin/describe.c
#, c-format
-msgid ""
-"more than %i tags found; listed %i most recent\n"
-"gave up search at %s\n"
-msgstr ""
-"lebih dari %i tag ditemukan; %i terbaru didaftarkan\n"
-"menyerah mencari pada %s\n"
+msgid "found %i tags; gave up search at %s\n"
+msgstr "dapat %i tag; menyerah mencari pada %s\n"
#: builtin/describe.c
#, c-format
@@ -7389,8 +7388,8 @@ msgstr ""
"fetch secara normal mengindikasikan cabang mana ada pembaruan terpaksa,\n"
"tapi pemeriksaan tersebut sudah dinonaktifkan. Untuk aktifkan kembali, "
"gunakan\n"
-"bendera '--show-forced-updates' atau jalankan 'git config fetch."
-"showForcedUpdates true'."
+"bendera '--show-forced-updates' atau jalankan 'git config "
+"fetch.showForcedUpdates true'."
#: builtin/fetch.c
#, c-format
@@ -7468,6 +7467,21 @@ msgid "the object %s does not exist"
msgstr "objek '%s' tidak ada"
#: builtin/fetch.c
+#, c-format
+msgid ""
+"Run 'git remote set-head %s %s' to follow the change, or set\n"
+"'remote.%s.followRemoteHEAD' configuration option to a different value\n"
+"if you do not want to see this message. Specifically running\n"
+"'git config set remote.%s.followRemoteHEAD %s' will disable the warning\n"
+"until the remote changes HEAD to something else."
+msgstr ""
+"Jalankan 'git remote set-head %s %s' untuk mengikuti perubahan, atau setel\n"
+"opsi konfigurasi 'remote.%s.followRemoteHEAD' ke nilai yang berbeda jika\n"
+"Anda tidak ingin melihat pesan ini lagi. Secara rinci menjalakan\n"
+"'git config set remote.%s followRemoteHEAD %s' akan mematikan peringatan\n"
+"ini sampai remote mengubah HEAD ke yang lain."
+
+#: builtin/fetch.c
msgid "multiple branches detected, incompatible with --set-upstream"
msgstr "banyak cabang terdeteksi, tidak kompatibel dengan --set-upstream"
@@ -7641,6 +7655,10 @@ msgstr "peta referensi"
msgid "specify fetch refmap"
msgstr "sebutkan ambil peta referensi"
+#: builtin/fetch.c builtin/pull.c builtin/rebase.c builtin/replay.c
+msgid "revision"
+msgstr "revisi"
+
#: builtin/fetch.c builtin/pull.c
msgid "report that we have only objects reachable from this object"
msgstr ""
@@ -7711,8 +7729,8 @@ msgstr "protokol tidak mendukung --negotiate-only, keluar."
#: builtin/fetch.c
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 hanya dapat digunakan dengan remote yang terkonfigurasi di "
"extensions.partialclone"
@@ -8565,8 +8583,25 @@ msgid "%s scheduler is not available"
msgstr "penjadwal %s tidak tersedia"
#: builtin/gc.c
-msgid "another process is scheduling background maintenance"
-msgstr "proses lainnya sedang menjadwalkan peme"
+#, c-format
+msgid ""
+"unable to create '%s.lock': %s.\n"
+"\n"
+"Another scheduled git-maintenance(1) process seems to be running in this\n"
+"repository. Please make sure no other maintenance processes are running and\n"
+"then try again. If it still fails, a git-maintenance(1) process may have\n"
+"crashed in this repository earlier: remove the file manually to continue."
+msgstr ""
+"Tidak dapat membuat '%s.lock': %s.\n"
+"\n"
+"Sepertinya proses git-maintenance(1) lainnya berjalan pada repositori ini.\n"
+"Pastikan tidak ada proses pemeliharaan lainnya yang berjalan dan coba lagi.\n"
+"Jika masih gagal, suatu proses git-maintenance(1) bisa jadi hancur pada\n"
+"repositori ini sebelumnya: hapus berkas secara manual untuk melanjutkan."
+
+#: builtin/gc.c
+msgid "cannot acquire lock for scheduled background maintenance"
+msgstr "tidak dapat memperoleh kunci untuk pemeliharran balik layar terjadwal"
#: builtin/gc.c
msgid "git maintenance start [--scheduler=<scheduler>]"
@@ -9298,6 +9333,23 @@ msgstr[0] "panjang rantai = %d: %lu objek"
msgstr[1] "panjang rantai = %d: %lu objek"
#: builtin/index-pack.c
+msgid "could not start pack-objects to repack local links"
+msgstr "tidak dapat memulai pack-objects untuk mempak ulang tautan lokal"
+
+#: builtin/index-pack.c
+msgid "failed to feed local object to pack-objects"
+msgstr "tidak dapat memasukkan objek ke pada pack-objects"
+
+#: builtin/index-pack.c
+msgid "index-pack: Expecting full hex object ID lines only from pack-objects."
+msgstr ""
+"index-pack: Mengharapkan hanya baris hex ID objek penuh daripack-objects."
+
+#: builtin/index-pack.c
+msgid "could not finish pack-objects to repack local links"
+msgstr "tidak dapat menyelesaikan pack-objects untuk mempak ulang tautan lokal"
+
+#: builtin/index-pack.c
msgid "Cannot come back to cwd"
msgstr "tidak dapat kembali ke direktori kerja saat ini"
@@ -9312,6 +9364,10 @@ msgid "unknown hash algorithm '%s'"
msgstr "algoritma hash tak dikenal '%s'"
#: builtin/index-pack.c
+msgid "--promisor cannot be used with a pack name"
+msgstr "--promisor tidak dapat digunakan dengan nama pak"
+
+#: builtin/index-pack.c
msgid "--stdin requires a git repository"
msgstr "--stdin memerlukan repositori git"
@@ -11055,11 +11111,11 @@ msgstr "git notes [--ref <referensi catan>] [list [<objek>]]"
msgid ""
"git notes [--ref <notes-ref>] add [-f] [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
msgstr ""
"git notes [--ref <referensi catatan>] add [-f] [--allow-empty] [--"
"[no-]separator|--separator=<pemisah paragraf>] [--[no-]stripspace] [-m "
-"<pesan | -F <berkas> | (-c | -C) <objek>] [<objek>]"
+"<pesan> | -F <berkas> | (-c | -C) <objek>] [<objek>] [-e]"
#: builtin/notes.c
msgid "git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>"
@@ -11070,11 +11126,11 @@ msgstr ""
msgid ""
"git notes [--ref <notes-ref>] append [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
msgstr ""
"git notes [--ref <referensi catatan>] append [--alow-empty] [--"
"[no]separator|--separator=<pemisah paragraf>] [--[no-]stripspace] [-m "
-"<pesan> | -F <berkas> | (-c | -C) <objek>] [<objek>]"
+"<pesan> | -F <berkas> | (-c | -C) <objek>] [<objek>] [-e]"
#: builtin/notes.c
msgid "git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]"
@@ -11228,6 +11284,10 @@ msgid "reuse and edit specified note object"
msgstr "gunakan ulang dan sunting objek catatan yang disebutkan"
#: builtin/notes.c
+msgid "edit note message in editor"
+msgstr "sunting pesan catatan dalam penyunting"
+
+#: builtin/notes.c
msgid "reuse specified note object"
msgstr "gunakan ulang objek catatan yang disebutkan"
@@ -11857,6 +11917,10 @@ msgid "do not pack objects in promisor packfiles"
msgstr "jangan pak objek di dalam pak penjanji"
#: builtin/pack-objects.c
+msgid "implies --missing=allow-any"
+msgstr "mengimplikasikan --missing=allow-any"
+
+#: builtin/pack-objects.c
msgid "respect islands during delta compression"
msgstr "patuhi pulau selama pemampatan delta"
@@ -12269,8 +12333,8 @@ msgid ""
msgstr ""
"\n"
"Untuk menghindari konfigurasi cabang hulu otomatis ketika namanya\n"
-"tidak akan cocok dengan cabang lokal, lihat opsi 'simple' dari branch."
-"autoSetupMerge\n"
+"tidak akan cocok dengan cabang lokal, lihat opsi 'simple' dari "
+"branch.autoSetupMerge\n"
"di 'git help config'.\n"
#: builtin/push.c
@@ -13811,6 +13875,35 @@ msgstr[0] " Referensi lokal dikonfigurasi untuk 'git push'%s:"
msgstr[1] " Referensi lokal dikonfigurasi untuk 'git push'%s:"
#: builtin/remote.c
+#, c-format
+msgid "'%s/HEAD' is unchanged and points to '%s'\n"
+msgstr "'%s/HEAD' tak berubah dan menunjuk pada '%s'\n"
+
+#: builtin/remote.c
+#, c-format
+msgid "'%s/HEAD' has changed from '%s' and now points to '%s'\n"
+msgstr "'%s/HEAD' berubah dari '%s' dan sekarang menunjuk pada '%s'\n"
+
+#: builtin/remote.c
+#, c-format
+msgid "'%s/HEAD' is now created and points to '%s'\n"
+msgstr "'%s/HEAD' sekarang dibuat dan menunjuk pada '%s'\n"
+
+#: builtin/remote.c
+#, c-format
+msgid "'%s/HEAD' was detached at '%s' and now points to '%s'\n"
+msgstr "%s/HEAD' terlepas pada '%s' dan sekarang menunjuk pada '%s'\n"
+
+#: builtin/remote.c
+#, c-format
+msgid ""
+"'%s/HEAD' used to point to '%s' (which is not a remote branch), but now "
+"points to '%s'\n"
+msgstr ""
+"'%s/HEAD' dulunya menunjuk pada '%s' (yang bukan cabang remote), tetapi "
+"sekarang menunjuk pada '%s'\n"
+
+#: builtin/remote.c
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr "setel refs/remotes/<nama>/HEAD tergantung remote"
@@ -13838,8 +13931,8 @@ msgstr "Bukan referensi valid: %s"
#: builtin/remote.c
#, c-format
-msgid "Could not setup %s"
-msgstr "Tidak dapat mengatur %s"
+msgid "Could not set up %s"
+msgstr "Tidak dapat menyiapkan %s"
#: builtin/remote.c
#, c-format
@@ -17247,6 +17340,10 @@ msgstr "pasang mode pelacakan (lihat git-branch(1))"
msgid "try to match the new branch name with a remote-tracking branch"
msgstr "coba cocokkan nama cabang baru dengan sebuah cabang pelacakan remote"
+#: builtin/worktree.c
+msgid "use relative paths for worktrees"
+msgstr "gunakan jalur relatif untuk pohon kerja"
+
#: builtin/worktree.c diff.c parse-options.c
#, c-format
msgid "options '%s', '%s', and '%s' cannot be used together"
@@ -17588,6 +17685,31 @@ msgstr "tidak dapat membuat '%s'"
msgid "index-pack died"
msgstr "index-pack mati"
+#: cache-tree.c
+#, c-format
+msgid "directory '%s' is present in index, but not sparse"
+msgstr "direktori '%s' ada pada indeks, tapi bukan tipis"
+
+#: cache-tree.c unpack-trees.c
+msgid "corrupted cache-tree has entries not present in index"
+msgstr "pohon tembolok rusak mempunyai entri yang tidak ada pada indeks"
+
+#: cache-tree.c
+#, c-format
+msgid "%s with flags 0x%x should not be in cache-tree"
+msgstr "%s dengan bendera 0x%x tidak boleh ada di pohon tembolok"
+
+#: cache-tree.c
+#, c-format
+msgid "bad subtree '%.*s'"
+msgstr "subpohon jelek '%.*s'"
+
+#: cache-tree.c
+#, c-format
+msgid "cache-tree for path %.*s does not match. Expected %s got %s"
+msgstr ""
+"pohon tembolok untuk jalur %.*s tidak cocok. %s diharapkan tapi dapat %s"
+
#: chunk-format.c
msgid "terminating chunk id appears earlier than expected"
msgstr "id bingkah pengakhiran muncul lebih awal dari yang diharapkan"
@@ -18714,16 +18836,16 @@ msgid ""
"to convert the grafts into replace refs.\n"
"\n"
"Turn this message off by running\n"
-"\"git config advice.graftFileDeprecated false\""
+"\"git config set advice.graftFileDeprecated false\""
msgstr ""
"Dukungan untuk <GIT_DIR>/info/grafts usang dan akan dihapus\n"
-"pada versi Git di masa yang akan datang.\n"
+"pada versi Git mendatang.\n"
"\n"
"Mohon gunakan \"git replace --convert-graft-file\"\n"
"untuk mengkonversi cangkuk ke referensi penggantian.\n"
"\n"
"Matikan pesan ini dengan menjalankan\n"
-"\"git config advice.graftFileDeprecated false\""
+"\"git config set advice.graftFileDeprecated false\""
#: commit.c
#, c-format
@@ -19739,6 +19861,21 @@ msgstr "url tidak punya skema: %s"
msgid "credential url cannot be parsed: %s"
msgstr "url kredensial tidak dapat diuraikan: %s"
+#: daemon.c
+#, c-format
+msgid "invalid timeout '%s', expecting a non-negative integer"
+msgstr "timeout '%s' tidak valid, bilangan bulat non-negatif diharapkan"
+
+#: daemon.c
+#, c-format
+msgid "invalid init-timeout '%s', expecting a non-negative integer"
+msgstr "init-timeout '%s' tidak valid, bilangan bulat non-negatif diharapkan"
+
+#: daemon.c
+#, c-format
+msgid "invalid max-connections '%s', expecting an integer"
+msgstr "max-connections '%s' tidak valid, bilangan bulat diharapkan"
+
#: date.c
msgid "in the future"
msgstr "di masa depan"
@@ -20632,6 +20769,21 @@ msgid "too many args to run %s"
msgstr "terlalu banyak argumen untuk menjalankan %s"
#: fetch-pack.c
+#, c-format
+msgid ""
+"You are attempting to fetch %s, which is in the commit graph file but not in "
+"the object database.\n"
+"This is probably due to repo corruption.\n"
+"If you are attempting to repair this repo corruption by refetching the "
+"missing object, use 'git fetch --refetch' with the missing object."
+msgstr ""
+"Anda mencoba mengambil %s, yang ada di dalam berkas grafik komit tapi bukan "
+"di dalam basis data objek.\n"
+"Bisa jadi ini dikarenakan kerusakan repositori.\n"
+"Apabila Anda mencoba memperbaiki keruskanan repositori ini dengan mengambil "
+"ulang objek yang hilang, gunakan 'git fetch --refetch' dengan objek tersebut."
+
+#: fetch-pack.c
msgid "git fetch-pack: expected shallow list"
msgstr "git fetch-pack: daftar dangkal diharapkan"
@@ -21351,11 +21503,11 @@ msgstr[1] ""
#, 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`."
+"You can disable this warning with `git config set advice.ignoredHook false`."
msgstr ""
-"Kait '%s' diabaikan karena tidak disetel sebagai dapat dieksekusi.\n"
-"Anda dapat menonaktifkan peringatan ini dengan `git config advice."
-"ignoredHook false`."
+"Kait '%s' diabaikan karena tidak disetel sebagai berkas yang dapat\n"
+"dieksekusi. Anda dapat menonaktifkan peringatan ini dengan\n"
+"`git config set advice.ignoredHook false`."
#: http-fetch.c
msgid "not a git repository"
@@ -21376,18 +21528,10 @@ msgid "Delegation control is not supported with cURL < 7.22.0"
msgstr "Kontrol delegasi tidak didukung oleh cURL < 7.22.0"
#: http.c
-msgid "Public key pinning not supported with cURL < 7.39.0"
-msgstr "Penyematan kunci publik tidak didukung oleh cURL < 7.39.0"
-
-#: http.c
msgid "Unknown value for http.proactiveauth"
msgstr "nilai tidak dikenal untuk http.proactiveauth"
#: http.c
-msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
-msgstr "CURLSSLOPT_NO_REVOKE tidak didukung dengan cURL < 7.44.0"
-
-#: http.c
#, c-format
msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
msgstr "Tulang punggung SSL '%s' tidak didukung, yang didukung:"
@@ -21609,6 +21753,11 @@ msgstr "CRLF terkutip terdeteksi"
msgid "unable to format message: %s"
msgstr "tidak dapat memformat pesan: %s"
+#: merge-ll.c
+#, c-format
+msgid "invalid marker-size '%s', expecting an integer"
+msgstr "marker-size '%s' tidak valid, bilangan bulat diharapkan"
+
#: merge-ort.c merge-recursive.c
#, c-format
msgid "Failed to merge submodule %s (not checked out)"
@@ -22955,19 +23104,17 @@ msgid ""
"\n"
"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
+"running \"git config set advice.objectNameWarning false\""
msgstr ""
"Biasanya Git tidak pernah membuat sebuah referensi yang diakhiri dengan\n"
-"40 karakter hex, karena akan diabaikan ketika Anda hanya menyebutkan 40-"
-"hex.\n"
+"40 karakter hex, karena akan diabaikan ketika Anda hanya merincikan 40-hex.\n"
"Referensi tersebut bisa tidak sengaja dibuat. Misalnya,\n"
"\n"
" git switch -c $br $(git rev-parse ...)\n"
"\n"
"dimana \"$br\" entah bagaimana kosong dan referensi 40-hex dibuat.\n"
-"Mohon periksa referensi tersebut dan mungkin hapus. Matikan pesan ini "
-"dengan\n"
-"menjalankan \"git config advice.objectNameWarning false\""
+"Mohon periksa referensi tersebut dan mungkin hapus. Matikan pesan ini\n"
+"dengan menjalankan \"git config set advice.objectNameWarning false\""
#: object-name.c
#, c-format
@@ -23166,15 +23313,6 @@ msgstr "bitmap multipak kehilangan indeks balik yang diperlukan"
msgid "could not open pack %s"
msgstr "tidak dapat membuka '%s'"
-#: pack-bitmap.c t/helper/test-read-midx.c
-msgid "could not determine MIDX preferred pack"
-msgstr "tidak dapat menentukan pak MIDX terpilih"
-
-#: pack-bitmap.c
-#, c-format
-msgid "preferred pack (%s) is invalid"
-msgstr "pak yang disukai '%s' kadaluarsa"
-
#: pack-bitmap.c
msgid "corrupt bitmap lookup table: triplet position out of index"
msgstr "tabel pencarian bitmap rusak: posisi kembar tiga di luar indeks"
@@ -24546,8 +24684,19 @@ msgid "log for %s is empty"
msgstr "log untuk %s kosong"
#: refs.c
-msgid "refusing to force and skip creation of reflog"
-msgstr "menolak memaksa dan melewatkan pembuatan reflog"
+#, c-format
+msgid "refusing to update reflog for pseudoref '%s'"
+msgstr "menolak memperbarui reflog untuk referensi semu '%s'"
+
+#: refs.c
+#, c-format
+msgid "refusing to update pseudoref '%s'"
+msgstr "menolak memperbarui referensi semu '%s'"
+
+#: refs.c
+#, c-format
+msgid "refusing to update reflog with bad name '%s'"
+msgstr "menolak memperbarui reflog dengan nama jelek '%s'"
#: refs.c
#, c-format
@@ -24555,9 +24704,8 @@ msgid "refusing to update ref with bad name '%s'"
msgstr "menolak memperbarui referensi dengan nama jelek '%s'"
#: refs.c
-#, c-format
-msgid "refusing to update pseudoref '%s'"
-msgstr "menolak memperbarui referensi semu '%s'"
+msgid "refusing to force and skip creation of reflog"
+msgstr "menolak memaksa dan melewatkan pembuatan reflog"
#: refs.c
#, c-format
@@ -24622,6 +24770,11 @@ msgstr ""
#: refs/files-backend.c
#, c-format
+msgid "cannot read ref file '%s'"
+msgstr "tidak dapat membaca berkas referensi '%s'"
+
+#: refs/files-backend.c
+#, c-format
msgid "cannot open directory %s"
msgstr "tidak dapat membuka direktori %s"
@@ -24885,6 +25038,11 @@ msgstr "lebih dari satu paket unggah diberikan, gunakan yang pertama"
#: remote.c
#, c-format
+msgid "unrecognized followRemoteHEAD value '%s' ignored"
+msgstr "nilai followRemoteHEAD yang tak dikenal '%s' diabaikan"
+
+#: remote.c
+#, c-format
msgid "unrecognized value transfer.credentialsInUrl: '%s'"
msgstr "nilai transfer.credentialsInUrl tidak dikenal: '%s'"
@@ -27240,6 +27398,10 @@ msgstr "komit %s tidak ditandai sebagai dapat dicapai"
msgid "too many commits marked reachable"
msgstr "terlalu banyak komit yang ditandai sebagai dapat dicapai"
+#: t/helper/test-read-midx.c
+msgid "could not determine MIDX preferred pack"
+msgstr "tidak dapat menentukan pak MIDX terpilih"
+
#: t/helper/test-serve-v2.c
msgid "test-tool serve-v2 [<options>]"
msgstr "test-tool serve-v2 [<opsi>]"
@@ -28027,6 +28189,10 @@ msgid ".git file incorrect"
msgstr "berkas .git salah"
#: worktree.c
+msgid ".git file absolute/relative path mismatch"
+msgstr "jalur absolut/relative berkas .git tidak cocok"
+
+#: worktree.c
msgid "not a valid path"
msgstr "bukan jalur valid"
@@ -28048,6 +28214,10 @@ msgid "gitdir unreadable"
msgstr "gitdir tidak dapat dibaca"
#: worktree.c
+msgid "gitdir absolute/relative path mismatch"
+msgstr "jalur absolut/relatif gitdir tidak cocok"
+
+#: worktree.c
msgid "gitdir incorrect"
msgstr "gitdir salah"
@@ -28091,6 +28261,16 @@ msgstr "tidak dapat menyetel balik %s di '%s'"
msgid "failed to set extensions.worktreeConfig setting"
msgstr "gagal menyetel setelan extensions.worktreeConfig"
+#: worktree.c
+msgid "unable to upgrade repository format to support relative worktrees"
+msgstr ""
+"tidak dapat meningkatkan format repositori untuk mendukung pohon kerja "
+"relatif"
+
+#: worktree.c
+msgid "unable to set extensions.relativeWorktrees setting"
+msgstr "gagal menyetel setelan extensions.relativeWorktrees"
+
#: wrapper.c
#, c-format
msgid "could not setenv '%s'"
diff --git a/po/sv.po b/po/sv.po
index 973dd940ac..5377b3ece7 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -5,10 +5,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: git 2.47.0\n"
+"Project-Id-Version: git 2.48.0\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2024-09-19 02:06+0000\n"
-"PO-Revision-Date: 2024-09-28 15:45+0100\n"
+"POT-Creation-Date: 2024-12-30 11:57+0100\n"
+"PO-Revision-Date: 2024-12-30 12:03+0100\n"
"Last-Translator: Peter Krefting <peter@softwolves.pp.se>\n"
"Language-Team: Svenska <tp-sv@listor.tp-sv.se>\n"
"Language: sv\n"
@@ -624,10 +624,10 @@ msgstr "Endast binära filer ändrade."
#, c-format
msgid ""
"\n"
-"Disable this message with \"git config advice.%s false\""
+"Disable this message with \"git config set advice.%s false\""
msgstr ""
"\n"
-"SlÃ¥ av meddelandet med â€git config advice.%s falseâ€"
+"SlÃ¥ av meddelandet med â€git config set advice.%s falseâ€"
#, c-format
msgid "%shint:%s%.*s%s\n"
@@ -1300,7 +1300,7 @@ msgstr "fel i deflate (%d)"
#, c-format
msgid "unable to start '%s' filter"
-msgstr "kane inte starta filtret â€%sâ€"
+msgstr "kan inte starta filtret â€%sâ€"
msgid "unable to redirect descriptor"
msgstr "kan inte omdirigera handtag"
@@ -1358,6 +1358,10 @@ msgid "not a tree object: %s"
msgstr "inte ett trädobjekt: %s"
#, c-format
+msgid "failed to unpack tree object %s"
+msgstr "misslyckades packa upp trädobjektet %s"
+
+#, c-format
msgid "File not found: %s"
msgstr "Hittar inte filen: %s"
@@ -2808,7 +2812,7 @@ msgstr "kunde inte slå upp HEAD"
#, c-format
msgid "HEAD (%s) points outside of refs/heads/"
-msgstr "HEAD (%s) pekar utenför refs/heads/"
+msgstr "HEAD (%s) pekar utanför refs/heads/"
#, c-format
msgid "branch %s is being rebased at %s"
@@ -2824,7 +2828,7 @@ msgstr "HEAD i arbetskatalogen %s har inte uppdaterats"
#, c-format
msgid "invalid branch name: '%s'"
-msgstr "gelaktigt namn pÃ¥ gren: â€%sâ€"
+msgstr "felaktigt namn pÃ¥ gren: â€%sâ€"
#, c-format
msgid "no commit on branch '%s' yet"
@@ -3297,7 +3301,7 @@ msgid "read commands from stdin"
msgstr "läs kommandon från standard in"
msgid "with --batch[-check]: ignores stdin, batches all known objects"
-msgstr "med --batch[-check]: ignorear standard in, buntar alla kända objekt"
+msgstr "med --batch[-check]: ignorerar standard in, buntar alla kända objekt"
msgid "Change or optimize batch output"
msgstr "Ändra eller optimera buntutdata"
@@ -3683,13 +3687,13 @@ msgid ""
"one remote, e.g. the 'origin' remote, consider setting\n"
"checkout.defaultRemote=origin in your config."
msgstr ""
-"Om du menade checka ut en spÃ¥rad fjärrgren pÃ¥ t.ex â€originâ€, kan du\n"
+"Om du menade checka ut en spÃ¥rad fjärrgren pÃ¥ t.ex. â€originâ€, kan du\n"
"göra det genom att ange hela namnet med flaggan --track:\n"
"\n"
" git checkout --track origin/<namn>\n"
"\n"
"Om du alltid vill att utcheckningar med tvetydiga <namn> ska\n"
-"föredra en fjärr, t.ex fjärren â€origin†kan du ställa in\n"
+"föredra en fjärr, t.ex. fjärren â€origin†kan du ställa in\n"
"checkout.defaultRemote=origin i din konfiguration."
#, c-format
@@ -3795,7 +3799,7 @@ msgid "Cannot switch branch to a non-commit '%s'"
msgstr "Kan inte växla gren till icke-incheckningen â€%sâ€"
msgid "missing branch or commit argument"
-msgstr "saknar gren- eller incheckingsargument"
+msgstr "saknar gren- eller incheckningsargument"
#, c-format
msgid "unknown conflict style '%s'"
@@ -3825,9 +3829,8 @@ msgstr "ny ofödd gren"
msgid "update ignored files (default)"
msgstr "uppdatera ignorerade filer (standard)"
-msgid "do not check if another worktree is holding the given ref"
-msgstr ""
-"kontrollera inte om en annan arbetskatalog håller den angivna referensen"
+msgid "do not check if another worktree is using this branch"
+msgstr "kontrollera inte om en annan arbetskatalog använder grenen"
msgid "checkout our version for unmerged files"
msgstr "checka ut vår version för ej sammanslagna filer"
@@ -4125,11 +4128,11 @@ msgstr "skapa en grund klon på detta djup"
msgid "create a shallow clone since a specific time"
msgstr "skapa en grund klon från en angiven tidpunkt"
-msgid "revision"
-msgstr "revision"
+msgid "ref"
+msgstr "ref"
-msgid "deepen history of shallow clone, excluding rev"
-msgstr "fördjupa historik för grund klon, exkludera revisionen"
+msgid "deepen history of shallow clone, excluding ref"
+msgstr "fördjupa historik för grund klon, exkludera ref"
msgid "clone only one branch, HEAD or --branch"
msgstr "klona endast en gren, HEAD eller --branch"
@@ -4422,7 +4425,7 @@ msgid "the object directory to store the graph"
msgstr "objektkatalogen där grafen ska lagras"
msgid "if the commit-graph is split, only verify the tip file"
-msgstr "om inchecknignsgrafen är delad, kontrollera bara spetsfilen"
+msgstr "om incheckningsgrafen är delad, kontrollera bara spetsfilen"
#, c-format
msgid "Could not open commit-graph '%s'"
@@ -4468,7 +4471,7 @@ msgstr "tillåt skriva en inkrementell incheckningsgraffil"
msgid "maximum number of commits in a non-base split commit-graph"
msgstr ""
-"maximalt antal incheckningar i en delad incheckingsgraf som inte är bad"
+"maximalt antal incheckningar i en delad incheckningsgraf som inte är bad"
msgid "maximum ratio between two levels of a split commit-graph"
msgstr "maximalt förhållande mellan två nivåer av en delad incheckningsgraf"
@@ -4477,7 +4480,7 @@ msgid "only expire files older than a given date-time"
msgstr "låt tid endast gå ut för filer äldre än givet datum och tid"
msgid "maximum number of changed-path Bloom filters to compute"
-msgstr "maximalt antal Bloom-filer med ändrad sökväg att beräkna"
+msgstr "maximalt antal Bloom-filter med ändrad sökväg att beräkna"
msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs"
msgstr "använd som mest en av --reachable, --stdin-commits och --stdin-packs"
@@ -5054,10 +5057,10 @@ msgstr ""
msgid ""
"git config unset [<file-option>] [--all] [--value=<value>] [--fixed-value] "
-"<name> <value>"
+"<name>"
msgstr ""
"git config unset [<filflagga>] [--all] [--value=<värde>] [--fixed-value] "
-"<namn> <värde>"
+"<namn>"
msgid "git config rename-section [<file-option>] <old-name> <new-name>"
msgstr "git config rename-section [<filflagga>] <gammalt-namn> <nytt-namn>"
@@ -5423,7 +5426,7 @@ msgstr "â€credential-cache†ej tillgänglig; stöd för unix-uttag saknas"
#, c-format
msgid "unable to get credential storage lock in %d ms"
-msgstr "kan inte erhålla låset för lagring av inlogginsuppgifter på %d ms"
+msgstr "kan inte erhålla låset för lagring av inloggningsuppgifter på %d ms"
msgid ""
"git describe [--all] [--tags] [--contains] [--abbrev=<n>] [<commit-ish>...]"
@@ -5490,12 +5493,8 @@ msgid "traversed %lu commits\n"
msgstr "traverserade %lu incheckningar\n"
#, c-format
-msgid ""
-"more than %i tags found; listed %i most recent\n"
-"gave up search at %s\n"
-msgstr ""
-"mer än %i taggar hittades; listar de %i senaste\n"
-"gav upp sökningen vid %s\n"
+msgid "found %i tags; gave up search at %s\n"
+msgstr "hittade %i taggar; gav upp sökning vid %s\n"
#, c-format
msgid "describe %s\n"
@@ -5783,7 +5782,7 @@ msgid "Expected 'to' command, got %s"
msgstr "Förväntade â€toâ€-kommando, fick %s"
msgid "Expected format name:filename for submodule rewrite option"
-msgstr "Förvändae formatet namn:filnamn för undermodul-omskrivningsflaggan"
+msgstr "Förväntade formatet namn:filnamn för undermodul-omskrivningsflaggan"
#, c-format
msgid "feature '%s' forbidden in input without --allow-unsafe-features"
@@ -5927,6 +5926,20 @@ msgstr "%s är inte ett giltigt objekt"
msgid "the object %s does not exist"
msgstr "objektet %s finns inte"
+#, c-format
+msgid ""
+"Run 'git remote set-head %s %s' to follow the change, or set\n"
+"'remote.%s.followRemoteHEAD' configuration option to a different value\n"
+"if you do not want to see this message. Specifically running\n"
+"'git config set remote.%s.followRemoteHEAD %s' will disable the warning\n"
+"until the remote changes HEAD to something else."
+msgstr ""
+"Kör â€git remote set-head %s %s†för att följa ändringen, eller sätt\n"
+"konfigurationsflaggan â€remote %s.followRemoteHEAD†till ett annat värde\n"
+"om du inte vill se det här meddelandet. Du kan specifikt inaktivera\n"
+"varningen till fjärren ändrar HEAD till något annat genom att köra\n"
+"â€git config set remote %s.followRemoteHEAD %sâ€."
+
msgid "multiple branches detected, incompatible with --set-upstream"
msgstr "flera grenar upptäcktes, inkompatibelt med --set-upstream"
@@ -6064,6 +6077,9 @@ msgstr "referenskarta"
msgid "specify fetch refmap"
msgstr "ange referenskarta för â€fetchâ€"
+msgid "revision"
+msgstr "revision"
+
msgid "report that we have only objects reachable from this object"
msgstr "rapportera att vi bara har objekt nåbara från detta objektet"
@@ -6077,7 +6093,7 @@ msgid "check for forced-updates on all updated branches"
msgstr "se efter tvingade uppdateringar i alla uppdaterade grenar"
msgid "write the commit-graph after fetching"
-msgstr "skriv incheckingsgrafen efter hämtning"
+msgstr "skriv incheckningsgrafen efter hämtning"
msgid "accept refspecs from stdin"
msgstr "ta emot referenser från standard in"
@@ -6125,7 +6141,7 @@ msgid "--atomic can only be used when fetching from one remote"
msgstr "--atomic kan bara användas vid hämtning från en fjärr"
msgid "--stdin can only be used when fetching from one remote"
-msgstr "--stdin kan bara användas vid hämtning fårn en fjärr"
+msgstr "--stdin kan bara användas vid hämtning från en fjärr"
msgid ""
"git fmt-merge-msg [-m <message>] [--log[=<n>] | --no-log] [--file <file>]"
@@ -6422,7 +6438,7 @@ msgid "report root nodes"
msgstr "rapportera rotnoder"
msgid "make index objects head nodes"
-msgstr "gör indexojekt till huvudnoder"
+msgstr "gör indexobjekt till huvudnoder"
msgid "make reflogs head nodes (default)"
msgstr "gör refloggar till huvudnoder (standard)"
@@ -6789,8 +6805,25 @@ msgstr "varken systemd-timer eller crontab är tillgänglig"
msgid "%s scheduler is not available"
msgstr "%s-schemaläggare är inte tillgänglig"
-msgid "another process is scheduling background maintenance"
-msgstr "en annan process schemalägger bakgrundsunderhåll"
+#, c-format
+msgid ""
+"unable to create '%s.lock': %s.\n"
+"\n"
+"Another scheduled git-maintenance(1) process seems to be running in this\n"
+"repository. Please make sure no other maintenance processes are running and\n"
+"then try again. If it still fails, a git-maintenance(1) process may have\n"
+"crashed in this repository earlier: remove the file manually to continue."
+msgstr ""
+"Kunde inte skapa â€%s.lockâ€: %s.\n"
+"\n"
+"Det verkar som en annan schemalagd git-maintenance(1)-process kör i det\n"
+"här arkivet. Se till att inga andra underhållsprocesser körs och försök\n"
+"sedan igen. Om det fortfarande misslyckas kanske en git-maintenance(1)-\n"
+"process har kraschat i det här arkivet tidigare: ta bort filen manuellt\n"
+"för att fortsätta."
+
+msgid "cannot acquire lock for scheduled background maintenance"
+msgstr "kan inte erhålla låset för schemalagt bakgrundsunderhåll"
msgid "git maintenance start [--scheduler=<scheduler>]"
msgstr "git maintenance start [--scheduler=<schemaläggare>]"
@@ -7320,7 +7353,7 @@ msgstr "paketfilnamnet â€%s†slutar inte med â€.%sâ€"
#, c-format
msgid "cannot write %s file '%s'"
-msgstr "kan inte ta skriva %s-fil â€%sâ€"
+msgstr "kan inte skriva %s-fil â€%sâ€"
#, c-format
msgid "cannot close written %s file '%s'"
@@ -7357,6 +7390,19 @@ msgid_plural "chain length = %d: %lu objects"
msgstr[0] "kedjelängd = %d: %lu objekt"
msgstr[1] "kedjelängd = %d: %lu objekt"
+msgid "could not start pack-objects to repack local links"
+msgstr "kunde inte starta pack-objects för att packa om lokala länkar"
+
+msgid "failed to feed local object to pack-objects"
+msgstr "misslyckades sända lokala objekt till pack-objects"
+
+msgid "index-pack: Expecting full hex object ID lines only from pack-objects."
+msgstr ""
+"index-pack: Förväntar kompletta hex-objekt-ID-rader endast från pack-objects."
+
+msgid "could not finish pack-objects to repack local links"
+msgstr "kunde inte avsluta pack-objects för att packa om lokala länkar"
+
msgid "Cannot come back to cwd"
msgstr "Kan inte gå tillbaka till arbetskatalogen (cwd)"
@@ -7368,6 +7414,9 @@ msgstr "felaktig %s"
msgid "unknown hash algorithm '%s'"
msgstr "okänd hashningsalgoritm â€%sâ€"
+msgid "--promisor cannot be used with a pack name"
+msgstr "--promisor kan inte användas med ett paketnamn"
+
msgid "--stdin requires a git repository"
msgstr "--stdin kräver ett git-arkiv"
@@ -7683,7 +7732,7 @@ msgid "cover-from-description-mode"
msgstr "cover-from-description-läge"
msgid "generate parts of a cover letter based on a branch's description"
-msgstr "skapa delar av omslagsbrevet baserat på grenbeskrivelsen"
+msgstr "skapa delar av omslagsbrevet baserat på grenbeskrivningen"
msgid "use branch description from file"
msgstr "använd grenbeskrivningar från fil"
@@ -7925,7 +7974,7 @@ msgid "show debugging data"
msgstr "visa felsökningsutdata"
msgid "suppress duplicate entries"
-msgstr "undertyck dublettposter"
+msgstr "undertryck dublettposter"
msgid "show sparse directories in the presence of a sparse index"
msgstr "visa glesa kataloger när et glest index existerar"
@@ -8017,7 +8066,7 @@ msgid "keep subject"
msgstr "behåll ärenderad"
msgid "keep non patch brackets in subject"
-msgstr "behÃ¥ll hakparanterser som inte är â€patch†i ärenderaden"
+msgstr "behÃ¥ll hakparenteser som inte är â€patch†i ärenderaden"
msgid "copy Message-ID to the end of commit message"
msgstr "kopiera Message-ID till slutet av incheckningsmeddelandet"
@@ -8172,7 +8221,7 @@ msgid "git merge-tree [--write-tree] [<options>] <branch1> <branch2>"
msgstr "git merge-tree [--write-tree] [<flaggor>] <gren1> <gren2>"
msgid "git merge-tree [--trivial-merge] <base-tree> <branch1> <branch2>"
-msgstr "git merge-tree [--trivial-merge] <baseträd> <gren1> <gren2>"
+msgstr "git merge-tree [--trivial-merge] <basträd> <gren1> <gren2>"
msgid "do a real merge instead of a trivial merge"
msgstr "gör en riktig sammanslagning istället för en enkel sammanslagning"
@@ -8708,11 +8757,11 @@ msgstr "git notes [--ref <anteckningsref>] [list [<objekt>]]"
msgid ""
"git notes [--ref <notes-ref>] add [-f] [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
msgstr ""
"git notes [--ref <anteckningsref>] add [-f] [--allow-empty] [--"
"[no-]separator|--separator=<styckebrytning>] [--[no-]stripspace] [-m <medd> "
-"| -F <fil> | (-c | -C) <objekt>] [<objekt>]"
+"| -F <fil> | (-c | -C) <objekt>] [<objekt>] [-e]"
msgid "git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>"
msgstr ""
@@ -8721,11 +8770,11 @@ msgstr ""
msgid ""
"git notes [--ref <notes-ref>] append [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
msgstr ""
"git notes [--ref <anteckningsref>] append [--allow-empty] [--"
"[no-]separator|--separator=<styckebrytning>] [--[no-]stripspace] [-m <medd> "
-"| -F <fil> | (-c | -C) <objekt>] [<objekt>]"
+"| -F <fil> | (-c | -C) <objekt>] [<objekt>] [-e]"
msgid "git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]"
msgstr "git notes [--ref <anteckningsref>] edit [--allow-empty] [<objekt>]"
@@ -8844,6 +8893,9 @@ msgstr "anteckningsinnehåll i en fil"
msgid "reuse and edit specified note object"
msgstr "återanvänd och redigera angivet anteckningsobjekt"
+msgid "edit note message in editor"
+msgstr "redigera anteckning i textredigeringsprogram"
+
msgid "reuse specified note object"
msgstr "återanvänd angivet anteckningsobjekt"
@@ -9192,7 +9244,7 @@ msgstr "kan inte öppna paketfilen"
#, c-format
msgid "loose object at %s could not be examined"
-msgstr "lösa objekt på %s kunde inte underökas"
+msgstr "lösa objekt på %s kunde inte undersökas"
msgid "unable to force loose object"
msgstr "kan inte tvinga lösa objekt"
@@ -9336,6 +9388,9 @@ msgstr "hantering av saknade objekt"
msgid "do not pack objects in promisor packfiles"
msgstr "packa inte objekt i kontraktspackfiler"
+msgid "implies --missing=allow-any"
+msgstr "implicerar --missing=allow-any"
+
msgid "respect islands during delta compression"
msgstr "respektera öar under deltakomprimering"
@@ -9638,7 +9693,7 @@ msgid "Need to specify how to reconcile divergent branches."
msgstr "Måste ange hur avvikande grenar skall förlikas."
msgid "cannot rebase with locally recorded submodule modifications"
-msgstr "kan inte ombasera med lokalt lagrade ändringar i undermoful"
+msgstr "kan inte ombasera med lokalt lagrade ändringar i undermodul"
msgid "git push [<options>] [<repository> [<refspec>...]]"
msgstr "git push [<flaggor>] [<arkiv> [<refspec>...]]"
@@ -10156,7 +10211,7 @@ msgid "empty exec command"
msgstr "tomt exec-kommando"
msgid "rebase onto given branch instead of upstream"
-msgstr "ombasera mot given grenen istället för uppström"
+msgstr "ombasera mot given gren istället för uppström"
msgid "use the merge-base of upstream and branch as the current base"
msgstr "använd sammanslagningsbasen mellan uppströms och gren som aktuell bas"
@@ -10548,7 +10603,7 @@ msgid "process the reflogs of all references"
msgstr "hantera referensloggar för alla referenser"
msgid "limits processing to reflogs from the current worktree only"
-msgstr "begränsar hantering av referensloggar till endst aktuell arbetskatalog"
+msgstr "begränsar hantering av referensloggar till endast aktuell arbetskatalog"
#, c-format
msgid "Marking reachable objects..."
@@ -10919,6 +10974,30 @@ msgid_plural " Local refs configured for 'git push'%s:"
msgstr[0] " Lokal referens konfigurerad för â€git pushâ€%s:"
msgstr[1] " Lokala referenser konfigurerade för â€git pushâ€%s:"
+#, c-format
+msgid "'%s/HEAD' is unchanged and points to '%s'\n"
+msgstr "â€%s/HEAD†är oförändrad och pekar pÃ¥ â€%sâ€\n"
+
+#, c-format
+msgid "'%s/HEAD' has changed from '%s' and now points to '%s'\n"
+msgstr "â€%s/HEAD†har ändrats frÃ¥n â€%s†och pekar nu pÃ¥ â€%sâ€\n"
+
+#, c-format
+msgid "'%s/HEAD' is now created and points to '%s'\n"
+msgstr "â€%s/HEAD†har nu skapats och pekar pÃ¥ â€%sâ€\n"
+
+#, c-format
+msgid "'%s/HEAD' was detached at '%s' and now points to '%s'\n"
+msgstr "â€%s/HEAD†kopplades frÃ¥n vid â€%s†och pekar nu pÃ¥ â€%sâ€\n"
+
+#, c-format
+msgid ""
+"'%s/HEAD' used to point to '%s' (which is not a remote branch), but now "
+"points to '%s'\n"
+msgstr ""
+"â€%s/HEAD†pekade tidigare pÃ¥ â€%s†(som inte är en fjärrgren), men pekar nu "
+"pÃ¥ â€%sâ€\n"
+
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr "sätt refs/remotes/<namn>/HEAD enligt fjärren"
@@ -10940,7 +11019,7 @@ msgid "Not a valid ref: %s"
msgstr "Inte en giltig referens: %s"
#, c-format
-msgid "Could not setup %s"
+msgid "Could not set up %s"
msgstr "Kunde inte ställa in %s"
#, c-format
@@ -11787,7 +11866,7 @@ msgstr "Ingen sökvägsangivelse gavs. Vilka filer ska jag ta bort?"
msgid "please stage your changes to .gitmodules or stash them to proceed"
msgstr ""
-"löa dina ändringar i .gitmodules eller använd â€stash†för att fortsätta"
+"köa dina ändringar i .gitmodules eller använd â€stash†för att fortsätta"
#, c-format
msgid "not removing '%s' recursively without -r"
@@ -11861,7 +11940,7 @@ msgid "linewrap output"
msgstr "radbryt utdata"
msgid "field"
-msgstr "föt"
+msgstr "fält"
msgid "group by field"
msgstr "gruppera efter fält"
@@ -12022,7 +12101,7 @@ msgid "stricter reference checking, requires exact ref path"
msgstr "striktare referenskontroll, kräver exakt referenssökväg"
msgid "show the HEAD reference, even if it would be filtered out"
-msgstr "visa HEAD-refrens, även när den skulle filtreras ut"
+msgstr "visa HEAD-referens, även när den skulle filtreras ut"
msgid "dereference tags into object IDs"
msgstr "avreferera taggar till objekt-id"
@@ -12079,7 +12158,7 @@ msgid "initialize the sparse-checkout in cone mode"
msgstr "initiera sparse-checkout i konläge"
msgid "toggle the use of a sparse index"
-msgstr "slå på/av använding av glest index"
+msgstr "slå på/av användning av glest index"
#, c-format
msgid "unable to create leading directories of %s"
@@ -12250,7 +12329,7 @@ msgstr "Inga â€stashâ€-poster hittades."
#, c-format
msgid "%s is not a valid reference"
-msgstr "%s är inte en giltigt referens"
+msgstr "%s är inte en giltig referens"
msgid "git stash clear with arguments is unimplemented"
msgstr "â€git stash clear†med argument har inte implementerats"
@@ -12501,7 +12580,7 @@ msgstr ""
"HEAD"
msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
-msgstr "git submodule status [--quitet] [--cached] [--recursive] [<sökväg>...]"
+msgstr "git submodule status [--quiet] [--cached] [--recursive] [<sökväg>...]"
#, c-format
msgid "* %s %s(blob)->%s(submodule)"
@@ -12524,7 +12603,7 @@ msgid "unexpected mode %o"
msgstr "okänt läge %o"
msgid "use the commit stored in the index instead of the submodule HEAD"
-msgstr "använd incechkning lagrad i indexet istället för undermodulens HEAD"
+msgstr "använd incheckning lagrad i indexet istället för undermodulens HEAD"
msgid "compare the commit in the index with that in the submodule HEAD"
msgstr "jämför incheckningen i indexet med den i undermodulens HEAD"
@@ -13641,6 +13720,9 @@ msgstr "ställ in spårningsläge (se git-branch(1))"
msgid "try to match the new branch name with a remote-tracking branch"
msgstr "försök träffa namn på ny gren mot en fjärrspårande gren"
+msgid "use relative paths for worktrees"
+msgstr "använd relativa sökvägar för arbetskataloger"
+
#, c-format
msgid "options '%s', '%s', and '%s' cannot be used together"
msgstr "flaggorna â€%sâ€, â€%s†och â€%s†kan inte användas samtidigt"
@@ -13802,7 +13884,7 @@ msgstr "misslyckades lagra maximal skaparsymbol"
#, c-format
msgid "unrecognized bundle mode from URI '%s'"
-msgstr "okänt buntlägre frÃ¥n URI:en â€%sâ€"
+msgstr "okänt buntläge frÃ¥n URI:en â€%sâ€"
#, c-format
msgid "exceeded bundle URI recursion limit (%d)"
@@ -13912,6 +13994,26 @@ msgstr "kan inte skapa â€%sâ€"
msgid "index-pack died"
msgstr "index-pack dog"
+#, c-format
+msgid "directory '%s' is present in index, but not sparse"
+msgstr "katalogen â€%s†finns i indexet, men inte glest"
+
+msgid "corrupted cache-tree has entries not present in index"
+msgstr "trasigt cacheträd innehåller poster som inte finns i indexet"
+
+#, c-format
+msgid "%s with flags 0x%x should not be in cache-tree"
+msgstr "%s med flaggorna 0x%x borde inte finnas i cacheträdet"
+
+#, c-format
+msgid "bad subtree '%.*s'"
+msgstr "felaktigt underträd â€%.*sâ€"
+
+#, c-format
+msgid "cache-tree for path %.*s does not match. Expected %s got %s"
+msgstr ""
+"cacheträd för sökvägen %.*s stämmer inte överens. Förväntade %s fick %s"
+
msgid "terminating chunk id appears earlier than expected"
msgstr "avslutande stycke-id förekommer tidigare än förväntat"
@@ -14131,7 +14233,7 @@ msgid "Send a collection of patches from stdin to an IMAP folder"
msgstr "Sänd en samling patchar från stdin till en IMAP-mapp"
msgid "Build pack index file for an existing packed archive"
-msgstr "SKapa pack-indexfiler för ett befintligt packat arkiv"
+msgstr "Skapa pack-indexfiler för ett befintligt packat arkiv"
msgid "Create an empty Git repository or reinitialize an existing one"
msgstr "Skapa tomt Git-arkiv eller ominitiera ett befintligt"
@@ -14353,7 +14455,7 @@ msgid "Creates a temporary file with a blob's contents"
msgstr "Skapar temporära filer med innehållet från en blob"
msgid "Unpack objects from a packed archive"
-msgstr "Packa upp objekt från ett pakat arkiv"
+msgstr "Packa upp objekt från ett packat arkiv"
msgid "Register file contents in the working tree to the index"
msgstr "Registrera filinnehållet från arbetskatalogen i indexet"
@@ -14410,7 +14512,7 @@ msgid "Git for CVS users"
msgstr "Git för CVS-användare"
msgid "Tweaking diff output"
-msgstr "Justrea diff-utdata"
+msgstr "Justera diff-utdata"
msgid "A useful minimum set of commands for Everyday Git"
msgstr "Ett användbart minsta uppsättning kommandon för vardags-Git"
@@ -14518,7 +14620,7 @@ msgid "commit-graph generations chunk is wrong size"
msgstr "incheckningsgrafens generationsstycke har fel storlek"
msgid "commit-graph changed-path index chunk is too small"
-msgstr "incheckningsgrafens ändrade-sökvägar-indexstycke är förö litet"
+msgstr "incheckningsgrafens ändrade-sökvägar-indexstycke är för litet"
#, c-format
msgid ""
@@ -14582,10 +14684,10 @@ msgstr "incheckningsgrafens kedjefil är för liten"
#, c-format
msgid "invalid commit-graph chain: line '%s' not a hash"
-msgstr "ogiltig incheckingsgrafkedja: rad â€%s†är inte ett hash-värde"
+msgstr "ogiltig incheckningsgrafkedja: rad â€%s†är inte ett hash-värde"
msgid "unable to find all commit-graph files"
-msgstr "kan inte hitta alla incheckingsgraffiler"
+msgstr "kan inte hitta alla incheckningsgraffiler"
msgid "invalid commit position. commit-graph is likely corrupt"
msgstr "ogiltig incheckningsposition. incheckningsgrafen är troligtvis trasig"
@@ -14627,8 +14729,8 @@ msgstr "Samlar refererade incheckningar"
#, c-format
msgid "Finding commits for commit graph in %<PRIuMAX> pack"
msgid_plural "Finding commits for commit graph in %<PRIuMAX> packs"
-msgstr[0] "Söker incheckningar för incheckingsgraf i %<PRIuMAX> paket"
-msgstr[1] "Söker incheckningar för incheckingsgraf i %<PRIuMAX> paket"
+msgstr[0] "Söker incheckningar för incheckningsgraf i %<PRIuMAX> paket"
+msgstr[1] "Söker incheckningar för incheckningsgraf i %<PRIuMAX> paket"
#, c-format
msgid "error adding pack %s"
@@ -14639,10 +14741,10 @@ msgid "error opening index for %s"
msgstr "fel vid öppning av indexet för %s"
msgid "Finding commits for commit graph among packed objects"
-msgstr "Söker incheckningar för incheckingsgraf i packade objekt"
+msgstr "Söker incheckningar för incheckningsgraf i packade objekt"
msgid "Finding extra edges in commit graph"
-msgstr "Söker ytterligare kanter i incheckingsgraf"
+msgstr "Söker ytterligare kanter i incheckningsgraf"
msgid "failed to write correct number of base graph ids"
msgstr "misslyckades skriva korrekt antal bas-graf-id:n"
@@ -14664,7 +14766,7 @@ msgid "unable to open commit-graph chain file"
msgstr "kan inte öppna incheckningsgrafkedjefilen"
msgid "failed to rename base commit-graph file"
-msgstr "misslyckades byta namn på bas-incheckingsgraffilen"
+msgstr "misslyckades byta namn på bas-incheckningsgraffilen"
msgid "failed to rename temporary commit-graph file"
msgstr "misslyckades byta namn på temporär incheckningsgraffil"
@@ -14777,7 +14879,7 @@ msgid ""
"to convert the grafts into replace refs.\n"
"\n"
"Turn this message off by running\n"
-"\"git config advice.graftFileDeprecated false\""
+"\"git config set advice.graftFileDeprecated false\""
msgstr ""
"Stöd för <GIT_DIR>/info/grafts avråds från och\n"
"kommer tas bort i en framtida version av Git.\n"
@@ -14786,7 +14888,7 @@ msgstr ""
"för att omvandla grafts till ersättningsreferenser.\n"
"\n"
"Slå av detta meddelande genom att skriva\n"
-"â€git config advice.graftFileDeprecated falseâ€"
+"â€git config set advice.graftFileDeprecated falseâ€"
#, c-format
msgid "commit %s exists in commit-graph but not in the object database"
@@ -15233,7 +15335,7 @@ msgstr "referensen â€%s†pekar inte pÃ¥ en blob"
#, c-format
msgid "unable to resolve config blob '%s'"
-msgstr "kan inte slÃ¥ upp konfigurerings-bloben â€%sâ€"
+msgstr "kan inte slÃ¥ upp konfigurerings-blobben â€%sâ€"
msgid "unable to parse command-line config"
msgstr "kan inte tolka kommandoradskonfiguration"
@@ -15595,7 +15697,20 @@ msgstr "url saknar protokoll: %s"
#, c-format
msgid "credential url cannot be parsed: %s"
-msgstr "kan inte tolka url för inloggingsuppgifter: %s"
+msgstr "kan inte tolka url för inloggningsuppgifter: %s"
+
+#, c-format
+msgid "invalid timeout '%s', expecting a non-negative integer"
+msgstr "felaktig tidsgräns â€%sâ€, förväntade ett icke-negativt heltal"
+
+#, c-format
+msgid "invalid init-timeout '%s', expecting a non-negative integer"
+msgstr ""
+"felaktig värde för init-timeout â€%sâ€, förväntade ett icke-negativt heltal"
+
+#, c-format
+msgid "invalid max-connections '%s', expecting an integer"
+msgstr "felaktigt värde för max-connections â€%sâ€, förväntade ett heltal"
msgid "in the future"
msgstr "i framtiden"
@@ -15987,7 +16102,7 @@ msgid "use default prefixes a/ and b/"
msgstr "använd standardprefixen a/ och b/"
msgid "show context between diff hunks up to the specified number of lines"
-msgstr "visa sammnhang mellan diff-stycken upp till angivet antal rader"
+msgstr "visa sammanhang mellan diff-stycken upp till angivet antal rader"
msgid "<char>"
msgstr "<tecken>"
@@ -16296,6 +16411,20 @@ msgstr "felaktig git-namnrymdssökväg â€%sâ€"
msgid "too many args to run %s"
msgstr "för många flaggor för att köra %s"
+#, c-format
+msgid ""
+"You are attempting to fetch %s, which is in the commit graph file but not in "
+"the object database.\n"
+"This is probably due to repo corruption.\n"
+"If you are attempting to repair this repo corruption by refetching the "
+"missing object, use 'git fetch --refetch' with the missing object."
+msgstr ""
+"Du försöker hämta %s som är i incheckningsgrafen men inte i "
+"objektdatabasen.\n"
+"Det händer antagligen på grund av att arkivet är trasigt.\n"
+"Om du försöker reparera det trasiga arkivet genom att hämta om det saknade "
+"objektet, använd â€git fetch --refetch†med det saknade objektet."
+
msgid "git fetch-pack: expected shallow list"
msgstr "git fetch-pack: förväntade grund lista"
@@ -16493,7 +16622,7 @@ msgstr "Servern tillåter inte förfrågan om ej tillkännagivet objekt %s"
#, c-format
msgid "fsmonitor_ipc__send_query: invalid path '%s'"
-msgstr "fsmonitor_ipc__send_query: ogilitg sökväg â€%sâ€"
+msgstr "fsmonitor_ipc__send_query: ogiltig sökväg â€%sâ€"
#, c-format
msgid "fsmonitor_ipc__send_query: unspecified error on '%s'"
@@ -16767,7 +16896,7 @@ msgid "Interacting with Others"
msgstr "Interaktion med andra"
msgid "Low-level Commands / Manipulators"
-msgstr "Lågnivåkommandon / maniupulerare"
+msgstr "Lågnivåkommandon / manipulerare"
msgid "Low-level Commands / Interrogators"
msgstr "Lågnivåkommandon / frågare"
@@ -16807,7 +16936,7 @@ msgid "External commands"
msgstr "Externa kommandon"
msgid "Command aliases"
-msgstr "Kommadoalias"
+msgstr "Kommandoalias"
msgid "See 'git help <command>' to read about a specific subcommand"
msgstr "Se â€git help <kommando>†för att läsa om ett specifikt underkommando"
@@ -16880,10 +17009,10 @@ msgstr[1] ""
#, 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`."
+"You can disable this warning with `git config set advice.ignoredHook false`."
msgstr ""
"Kroken â€%s†ignorerades eftersom den inte är markerad som körbar.\n"
-"Du kan inaktivera varningen med â€git config advice.ignoredHook falseâ€."
+"Du kan inaktivera varningen med â€git config set advice.ignoredHook falseâ€."
msgid "not a git repository"
msgstr "inte ett git-arkiv"
@@ -16900,15 +17029,9 @@ msgstr "http.postBuffer har negativt värde; använder förvalet %d"
msgid "Delegation control is not supported with cURL < 7.22.0"
msgstr "Delegerad styrning stöds inte av cURL < 7.22.0"
-msgid "Public key pinning not supported with cURL < 7.39.0"
-msgstr "Fastnålning av öppen nyckel stöds inte av cURL < 7.39.0"
-
msgid "Unknown value for http.proactiveauth"
msgstr "Okänt värde för http.proactiveauth"
-msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
-msgstr "CURLSSLOPT_NO_REVOKE stöds inte av cURL < 7.44.0"
-
#, c-format
msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
msgstr "SSL-bakändan â€%s†stöds inte. Dessa SSL-bakändor stöds:"
@@ -17092,6 +17215,10 @@ msgid "unable to format message: %s"
msgstr "kan inte formatera meddelandet: %s"
#, c-format
+msgid "invalid marker-size '%s', expecting an integer"
+msgstr "felaktigt värde för marker-size â€%sâ€, förväntade ett heltal"
+
+#, c-format
msgid "Failed to merge submodule %s (not checked out)"
msgstr "Misslyckades slå ihop undermodulen %s (ej utcheckad)"
@@ -17152,7 +17279,7 @@ msgid ""
"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
"implicit directory rename(s) putting the following path(s) there: %s."
msgstr ""
-"KONFLIKT (implicit nämnändrad kat): Befintlig fil/kat vid %s är i vägen för "
+"KONFLIKT (implicit namnändrad kat): Befintlig fil/kat vid %s är i vägen för "
"implicit namnändrad(e) katalog(er) som lägger dit följande sökväg(ar): %s."
#, c-format
@@ -17314,7 +17441,7 @@ msgid ""
" - resolve any other conflicts in the superproject\n"
" - commit the resulting index in the superproject\n"
msgstr ""
-"Rekursiv sammanslaning med undermoduler stöder för närvarande endast enkla "
+"Rekursiv sammanslagning med undermoduler stöder för närvarande endast enkla "
"fall.\n"
"Du måste hantera sammanslagning av undermoduler i konflikt manuellt.\n"
"Detta kan göras genom att utföra följande steg:\n"
@@ -17996,6 +18123,14 @@ msgid "missing mapping of %s to %s"
msgstr "saknar koppling av %s till %s"
#, c-format
+msgid "unable to open %s"
+msgstr "kan inte öppna %s"
+
+#, c-format
+msgid "files '%s' and '%s' differ in contents"
+msgstr "filerna â€%s†och â€%s†har olika innehÃ¥ll"
+
+#, c-format
msgid "unable to write file %s"
msgstr "kan inte skriva filen %s"
@@ -18039,7 +18174,7 @@ msgstr "kan inte utföra â€deflate†pÃ¥ nytt strömobjekt (%d)"
#, c-format
msgid "deflateEnd on stream object failed (%d)"
-msgstr "â€deflatEend†pÃ¥ strömobjektet misslyckades (%d)"
+msgstr "â€deflateEnd†pÃ¥ strömobjektet misslyckades (%d)"
#, c-format
msgid "unable to create directory %s"
@@ -18081,10 +18216,6 @@ msgid "%s is not a valid '%s' object"
msgstr "%s är inte ett giltigt â€%sâ€-objekt"
#, c-format
-msgid "unable to open %s"
-msgstr "kan inte öppna %s"
-
-#, c-format
msgid "hash mismatch for %s (expected %s)"
msgstr "hash stämmer inte för %s (förväntade %s)"
@@ -18185,7 +18316,7 @@ msgid ""
"\n"
"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
+"running \"git config set advice.objectNameWarning false\""
msgstr ""
"Git skapar normalt aldrig referenser som slutar med 40 hexadecimala\n"
"tecken, då detta ignoreras när du anger 40-hex enbart. Dessa\n"
@@ -18195,7 +18326,7 @@ msgstr ""
"\n"
"där â€$br†pÃ¥ nÃ¥got sätt blivit tomt och en 40-hex-referens skapats.\n"
"Undersök referenserna och ta kanske bort dem. Stäng av meddelandet\n"
-"genom att köra â€git config advice.objectNameWarning falseâ€"
+"genom att köra â€git config set advice.objectNameWarning falseâ€"
#, c-format
msgid "log for '%.*s' only goes back to %s"
@@ -18313,7 +18444,7 @@ msgid ""
"corrupted bitmap index file (too short to fit pseudo-merge table header)"
msgstr ""
"trasig bitkarteindexfil (för kort för att få plats för pseudo-"
-"sammanslagningsatbellhuvudet)"
+"sammanslagningstabellhuvudet)"
msgid "corrupted bitmap index file (too short to fit pseudo-merge table)"
msgstr ""
@@ -18354,13 +18485,6 @@ msgstr "flerpaketsbitkarta saknar nödvändigt omvänt index"
msgid "could not open pack %s"
msgstr "kunde inte öppna paketfilen %s"
-msgid "could not determine MIDX preferred pack"
-msgstr "kunde inte bestämma det föredragna MIDX-paketet"
-
-#, c-format
-msgid "preferred pack (%s) is invalid"
-msgstr "föredragen paketfil (%s) är ogiltig"
-
msgid "corrupt bitmap lookup table: triplet position out of index"
msgstr "trasig bitkarteuppslagstabell: trippelposition utanför indexet"
@@ -18414,7 +18538,7 @@ msgstr "bitkarteresultat stämmer inte överens"
#, c-format
msgid "pseudo-merge index out of range (%<PRIu32> >= %<PRIuMAX>)"
-msgstr "pseudosammanslaningsindex utenför intervallet (%<PRIu32> ≥ %<PRIuMAX>)"
+msgstr "pseudosammanslagningsindex utanför intervallet (%<PRIu32> ≥ %<PRIuMAX>)"
#, c-format
msgid "could not find '%s' in pack '%s' at offset %<PRIuMAX>"
@@ -18509,7 +18633,7 @@ msgstr "offset före slutet av packindex för %s (trasigt index?)"
#, c-format
msgid "offset beyond end of pack index for %s (truncated index?)"
-msgstr "offset borton slutet av packindex för %s (trunkerat index?)"
+msgstr "offset bortom slutet av packindex för %s (trunkerat index?)"
#, c-format
msgid "malformed expiration date '%s'"
@@ -18885,7 +19009,7 @@ msgid ""
"could not parse first line of `log` output: did not start with 'commit ': "
"'%s'"
msgstr ""
-"kunde inte tolka första raden i â€logâ€-updata: börjar inte med â€commit â€: â€%sâ€"
+"kunde inte tolka första raden i â€logâ€-utdata: börjar inte med â€commit â€: â€%sâ€"
#, c-format
msgid "could not parse git header '%.*s'"
@@ -19000,7 +19124,7 @@ msgstr "%s: öppning av indexfilen misslyckades"
#, c-format
msgid "%s: cannot stat the open index"
-msgstr "%s: kan inte ta startus på det öppna indexet"
+msgstr "%s: kan inte ta status på det öppna indexet"
#, c-format
msgid "%s: index file smaller than expected"
@@ -19269,7 +19393,7 @@ msgstr "kan inte helt tolka %s=%s"
#, c-format
msgid "value expected %s="
-msgstr "vädre förväntades %s="
+msgstr "värde förväntades %s="
#, c-format
msgid "positive value expected '%s' in %%(%s)"
@@ -19475,18 +19599,26 @@ msgstr "loggen för referensen %s slutade oväntat på %s"
msgid "log for %s is empty"
msgstr "loggen för %s är tom"
-msgid "refusing to force and skip creation of reflog"
-msgstr "vägrar att tvinga och hoppa över skapande av reflogg"
-
#, c-format
-msgid "refusing to update ref with bad name '%s'"
-msgstr "vägrar uppdatera referens med trasigt namn â€%sâ€"
+msgid "refusing to update reflog for pseudoref '%s'"
+msgstr "vägrar uppdatera referenslogg för pseudoreferensen â€%sâ€"
#, c-format
msgid "refusing to update pseudoref '%s'"
msgstr "vägrar uppdatera pseudoreferensen â€%sâ€"
#, c-format
+msgid "refusing to update reflog with bad name '%s'"
+msgstr "vägrar uppdatera referenslogg med trasigt namn â€%sâ€"
+
+#, c-format
+msgid "refusing to update ref with bad name '%s'"
+msgstr "vägrar uppdatera referens med trasigt namn â€%sâ€"
+
+msgid "refusing to force and skip creation of reflog"
+msgstr "vägrar att tvinga och hoppa över skapande av reflogg"
+
+#, c-format
msgid "update_ref failed for ref '%s': %s"
msgstr "update_ref misslyckades för referensen â€%sâ€: %s"
@@ -19536,6 +19668,10 @@ msgstr ""
"men är en vanlig referens"
#, c-format
+msgid "cannot read ref file '%s'"
+msgstr "kan inte läsa ref-fil â€%sâ€"
+
+#, c-format
msgid "cannot open directory %s"
msgstr "kunde inte öppna katalogen %s"
@@ -19741,6 +19877,10 @@ msgid "more than one uploadpack given, using the first"
msgstr "mer än en uploadpack angavs, använder den första"
#, c-format
+msgid "unrecognized followRemoteHEAD value '%s' ignored"
+msgstr "okänt värde â€%s†för followRemoteHEAD ignorerades"
+
+#, c-format
msgid "unrecognized value transfer.credentialsInUrl: '%s'"
msgstr "okänt värde transfer.credentialsInUrl: â€%sâ€"
@@ -19792,7 +19932,7 @@ msgid ""
"\n"
"Neither worked, so we gave up. You must fully qualify the ref."
msgstr ""
-"Målet du angav är inte ett komplett referensamn (dvs.,\n"
+"Målet du angav är inte ett komplett referensnamn (dvs.,\n"
"startar med â€refs/â€). Vi försökte gissa vad du menade genom att:\n"
"\n"
"- Se efter en referens som motsvarar â€%s†pÃ¥ fjärrsidan.\n"
@@ -20050,7 +20190,7 @@ msgstr "misslyckades hitta trädet för %s."
#, c-format
msgid "unsupported section for hidden refs: %s"
-msgstr "sktionen för dolda referenser stöds ej: %s"
+msgstr "sektionen för dolda referenser stöds ej: %s"
msgid "--exclude-hidden= passed more than once"
msgstr "--exclude-hidden= angavs mer än en gång"
@@ -20333,7 +20473,7 @@ msgid ""
"not sending a push certificate since the receiving end does not support --"
"signed push"
msgstr ""
-"sänder inte push-certifikat eftersom mottagarsidan inte stlder push med --"
+"sänder inte push-certifikat eftersom mottagarsidan inte stöder push med --"
"signed"
msgid "the receiving end does not support --atomic push"
@@ -20693,7 +20833,7 @@ msgstr "â€%s†är inte ett giltigt referensnamn"
#, c-format
msgid "update-ref requires a fully qualified refname e.g. refs/heads/%s"
-msgstr "update-ref kräver ett fullständigt referensnamn, t.ex refs/heads/%s"
+msgstr "update-ref kräver ett fullständigt referensnamn, t.ex. refs/heads/%s"
#, c-format
msgid "'%s' does not accept merge commits"
@@ -21665,6 +21805,9 @@ msgstr "incheckning %s är inte märkt nåbar"
msgid "too many commits marked reachable"
msgstr "för många incheckningar markerade nåbara"
+msgid "could not determine MIDX preferred pack"
+msgstr "kunde inte bestämma det föredragna MIDX-paketet"
+
msgid "test-tool serve-v2 [<options>]"
msgstr "test-tool serve-v2 [<flaggor>]"
@@ -21698,7 +21841,7 @@ msgstr ""
"[<buntstorlek>]"
msgid "name or pathname of unix domain socket"
-msgstr "namn eller sövkäg till unixdomän-uttag"
+msgstr "namn eller sökväg till unixdomän-uttag"
msgid "named-pipe name"
msgstr "namn på namngivet rör"
@@ -21800,10 +21943,10 @@ msgstr "kunde inte läsa referensen %s"
#, c-format
msgid "unknown response to connect: %s"
-msgstr "okänt svar på ansluntning: %s"
+msgstr "okänt svar på anslutning: %s"
msgid "setting remote service path not supported by protocol"
-msgstr "protkollet stöder inte att sätta sökväg till fjärrtjänst"
+msgstr "protokollet stöder inte att sätta sökväg till fjärrtjänst"
msgid "invalid remote service path"
msgstr "felaktig sökväg till fjärrtjänst"
@@ -21816,7 +21959,7 @@ msgid "--negotiate-only requires protocol v2"
msgstr "--negotiate-only kräver protokoll v2"
msgid "'option' without a matching 'ok/error' directive"
-msgstr "â€option†utan mostsvarande â€ok/errorâ€-direktiv"
+msgstr "â€option†utan motsvarande â€ok/errorâ€-direktiv"
#, c-format
msgid "expected ok/error, helper said '%s'"
@@ -22319,6 +22462,9 @@ msgstr ".git-filen är trasig"
msgid ".git file incorrect"
msgstr ".git-filen är felaktig"
+msgid ".git file absolute/relative path mismatch"
+msgstr "absolut/relativ sökväg för .git-fil stämmer inte överens"
+
msgid "not a valid path"
msgstr "inte en giltig sökväg"
@@ -22334,6 +22480,9 @@ msgstr "kan inte hitta arkivet; â€.gitâ€-filen är trasig"
msgid "gitdir unreadable"
msgstr "gitdir är oläsbar"
+msgid "gitdir absolute/relative path mismatch"
+msgstr "absolut/relativ sökväg för git-katalog stämmer inte överens"
+
msgid "gitdir incorrect"
msgstr "gitdir är felaktig"
@@ -22368,6 +22517,13 @@ msgstr "kan inte slÃ¥ av %s i â€%sâ€"
msgid "failed to set extensions.worktreeConfig setting"
msgstr "misslyckades ändra inställningen extensions.worktreeConfig"
+msgid "unable to upgrade repository format to support relative worktrees"
+msgstr ""
+"kunde inte uppgradera arkivformat till att stöda relativa arbetskataloger"
+
+msgid "unable to set extensions.relativeWorktrees setting"
+msgstr "misslyckades ändra inställningen extensions.relativeWorktrees"
+
#, c-format
msgid "could not setenv '%s'"
msgstr "kunde inte lagra miljövariabeln â€%sâ€"
@@ -22866,7 +23022,7 @@ msgstr "Kan inte byta katalog till $cdup, toppnivån på arbetskatalogen"
#, sh-format
msgid "fatal: $program_name cannot be used without a working tree."
-msgstr "ödesdigetrt: $program_name kan inte användas utan arbetskatalog."
+msgstr "ödesdigert: $program_name kan inte användas utan arbetskatalog."
msgid "Cannot rewrite branches: You have unstaged changes."
msgstr "Kan inte skriva om grenar: Du har oköade ändringar."
@@ -22915,7 +23071,7 @@ msgid "--dump-aliases incompatible with other options\n"
msgstr "--dump-aliases är inkompatibelt med andra flaggor\n"
msgid "--dump-aliases and --translate-aliases are mutually exclusive\n"
-msgstr "--dump-aliases och --translate-aliases är ömsesidigt utelsutande\n"
+msgstr "--dump-aliases och --translate-aliases är ömsesidigt uteslutande\n"
msgid ""
"fatal: found configuration options for 'sendmail'\n"
@@ -22956,7 +23112,7 @@ msgstr "varning: â€:include:†stöds inte: %s\n"
#, perl-format
msgid "warning: `/file` or `|pipe` redirection not supported: %s\n"
-msgstr "varning: omdirigering til â€/fil†eller â€|rör†stöds inte: %s\n"
+msgstr "varning: omdirigering till â€/fil†eller â€|rör†stöds inte: %s\n"
#, perl-format
msgid "warning: sendmail line is not recognized: %s\n"
@@ -23184,7 +23340,7 @@ msgid "cannot send message as 7bit"
msgstr "kan inte sända brev som sjubitars"
msgid "invalid transfer encoding"
-msgstr "ogiltig överföringskondning"
+msgstr "ogiltig överföringskodning"
#, perl-format
msgid ""
@@ -23217,10 +23373,3 @@ msgstr ""
#, perl-format
msgid "Do you really want to send %s? [y|N]: "
msgstr "Vill du verkligen sända %s? [y=ja, n=nej]: "
-
-#~ msgid "revision walk setup failed\n"
-#~ msgstr "misslyckades starta revisionstraversering\n"
-
-#, c-format
-#~ msgid "unable to parse contact: %s"
-#~ msgstr "kan inte tolka kontakt: %s"
diff --git a/po/tr.po b/po/tr.po
index 7aede5cd5f..1bc43453aa 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -2,7 +2,7 @@
# Git Türkçe çevirileri
# Copyright (C) 2020-2024 Emir SARI <emir_sari@icloud.com>
# This file is distributed under the same license as the Git package.
-# Emir SARI <emir_sari@icloud.com>, 2020-2024
+# Emir SARI <emir_sari@icloud.com>, 2020-2025
#
# ######################################################### #
# Git Türkçe kavramlar dizini / Git Turkish Glossary #
@@ -96,8 +96,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Git Turkish Localization Project\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2024-10-03 06:52+0300\n"
-"PO-Revision-Date: 2024-10-03 07:00+0300\n"
+"POT-Creation-Date: 2024-12-23 18:57+0000\n"
+"PO-Revision-Date: 2025-01-01 15:00+0300\n"
"Last-Translator: Emir SARI <emir_sari@icloud.com>\n"
"Language-Team: Turkish (https://github.com/bitigchi/git-po/)\n"
"Language: tr\n"
@@ -714,10 +714,10 @@ msgstr "Yalnızca ikili dosyalar değiştirildi."
#, c-format
msgid ""
"\n"
-"Disable this message with \"git config advice.%s false\""
+"Disable this message with \"git config set advice.%s false\""
msgstr ""
"\n"
-"Bu iletiyi \"git config advice.%s false\" ile devre dışı bırakın"
+"Bu iletiyi \"git config set advice.%s false\" ile devre dışı bırakın"
#, c-format
msgid "%shint:%s%.*s%s\n"
@@ -1441,8 +1441,9 @@ msgstr "geçerli bir nesne adı değil: %s"
msgid "not a tree object: %s"
msgstr "bir ağaç nesnesi değil: %s"
-msgid "unable to checkout working tree"
-msgstr "çalışma ağacı çıkış yapılamıyor"
+#, c-format
+msgid "failed to unpack tree object %s"
+msgstr "%s ağaç nesnesi açılamadı"
#, c-format
msgid "File not found: %s"
@@ -3072,8 +3073,8 @@ msgid "HEAD not found below refs/heads!"
msgstr "HEAD, refs/heads altında bulunamadı!"
msgid ""
-"branch with --recurse-submodules can only be used if submodule."
-"propagateBranches is enabled"
+"branch with --recurse-submodules can only be used if "
+"submodule.propagateBranches is enabled"
msgstr ""
"--recurse-submodules ile dallanma, yalnızca submodule.propagateBranches "
"etkinleştirilmişse kullanılabilir"
@@ -3921,9 +3922,8 @@ msgstr "yeni henüz doğmamış dal"
msgid "update ignored files (default)"
msgstr "yok sayılan dosyaları güncelle (öntanımlı)"
-msgid "do not check if another worktree is holding the given ref"
-msgstr ""
-"verilen başvuruyu başka bir çalışma ağacının tutup tutmadığını denetleme"
+msgid "do not check if another worktree is using this branch"
+msgstr "bu dalı başka bir çalışma ağacının kullanıp kullanmadığını denetleme"
msgid "checkout our version for unmerged files"
msgstr "birleştirilmeyen dosyalar için bizdeki sürümü çıkış yap"
@@ -4224,11 +4224,11 @@ msgstr "verilen derinlikte sığ bir depo oluştur"
msgid "create a shallow clone since a specific time"
msgstr "verilen zamandan sonrasını içeren bir sığ depo oluştur"
-msgid "revision"
-msgstr "revizyon"
+msgid "ref"
+msgstr "baÅŸvuru"
-msgid "deepen history of shallow clone, excluding rev"
-msgstr "revizyonu hariç tutarak sığ klonun geçmişini derinleştir"
+msgid "deepen history of shallow clone, excluding ref"
+msgstr "başvuru hariç tutarak sığ klonun geçmişini derinleştir"
msgid "clone only one branch, HEAD or --branch"
msgstr "yalnızca bir dal klonla, HEAD veya --branch"
@@ -4355,6 +4355,9 @@ msgstr "sparse-checkout ilklendirilemedi"
msgid "remote HEAD refers to nonexistent ref, unable to checkout"
msgstr "uzak konum HEAD'i, var olmayan başvuruya başvuruyor; çıkış yapılamıyor"
+msgid "unable to checkout working tree"
+msgstr "çalışma ağacı çıkış yapılamıyor"
+
msgid "unable to write parameters to config file"
msgstr "parametreler yapılandırma dosyasına yazılamıyor"
@@ -5163,10 +5166,10 @@ msgstr ""
msgid ""
"git config unset [<file-option>] [--all] [--value=<value>] [--fixed-value] "
-"<name> <value>"
+"<name>"
msgstr ""
"git config unset [<dosya-seçeneği>] [--all] [--value=<değer>] [--fixed-"
-"value] <ad> <deÄŸer>"
+"value] <ad>"
msgid "git config rename-section [<file-option>] <old-name> <new-name>"
msgstr "git config rename-section [<dosya-seçeneği>] <eski-ad> <yeni-ad>"
@@ -5601,12 +5604,8 @@ msgid "traversed %lu commits\n"
msgstr "%lu iÅŸleme katedildi\n"
#, c-format
-msgid ""
-"more than %i tags found; listed %i most recent\n"
-"gave up search at %s\n"
-msgstr ""
-"%i etiketten fazla etiket bulundu; en son %i listelendi\n"
-"şu konumda arama bırakıldı: %s\n"
+msgid "found %i tags; gave up search at %s\n"
+msgstr "%i etiket bulundu; arama ÅŸurada bitirildi: %s\n"
#, c-format
msgid "describe %s\n"
@@ -6040,6 +6039,21 @@ msgstr "%s geçerli bir nesne değil"
msgid "the object %s does not exist"
msgstr "%s diye bir nesne yok"
+#, c-format
+msgid ""
+"Run 'git remote set-head %s %s' to follow the change, or set\n"
+"'remote.%s.followRemoteHEAD' configuration option to a different value\n"
+"if you do not want to see this message. Specifically running\n"
+"'git config set remote.%s.followRemoteHEAD %s' will disable the warning\n"
+"until the remote changes HEAD to something else."
+msgstr ""
+"Değişikliği izlemek için 'git remote set-head %s %s' yapın veya\n"
+"'remote.%s.followRemoteHEAD' yapılandırma seçeneğini başka bir\n"
+"değere ayarlayın (bu iletiyi görmek istemiyorsanız). Özellikle\n"
+"'git config set remote.%s.followRemoteHEAD %s' komutunu çalıştırmak\n"
+"uyarıyı HEAD'e veya başka bir şeye uzaktan değişiklik olana dek\n"
+"devre dışı bırakır."
+
msgid "multiple branches detected, incompatible with --set-upstream"
msgstr "birden çok dal algılandı, --set-upstream ile uyumsuz"
@@ -6178,6 +6192,9 @@ msgstr "ilgili baÅŸvuru"
msgid "specify fetch refmap"
msgstr "getirme ile ilgili başvuruları belirt"
+msgid "revision"
+msgstr "revizyon"
+
msgid "report that we have only objects reachable from this object"
msgstr "yalnızca bu nesneden ulaşılabilir nesnelerimiz olduğunu bildir"
@@ -6232,8 +6249,8 @@ msgid "protocol does not support --negotiate-only, exiting"
msgstr "protokol, --negotiate-only desteklemediğinden çıkılıyor"
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, yalnızca extensions.partialclone içinde yapılandırılmış uzak konum "
"ile kullanılabilir"
@@ -6898,8 +6915,27 @@ msgstr "ne systemd zamanlayıcıları ne de crontab kullanılabiliyor"
msgid "%s scheduler is not available"
msgstr "%s planlayıcısı kullanılamıyor"
-msgid "another process is scheduling background maintenance"
-msgstr "başka bir işlem arka plan bakımı zamanını planlıyor"
+#, c-format
+msgid ""
+"unable to create '%s.lock': %s.\n"
+"\n"
+"Another scheduled git-maintenance(1) process seems to be running in this\n"
+"repository. Please make sure no other maintenance processes are running and\n"
+"then try again. If it still fails, a git-maintenance(1) process may have\n"
+"crashed in this repository earlier: remove the file manually to continue."
+msgstr ""
+"'%s.lock' oluşturulamıyor: %s.\n"
+"\n"
+"Bu depoda başka bir planlı git-maintenance(1) süreci çalışıyor gibi\n"
+"görünüyor. Lütfen başka bir bakım sürecinin çalışmıyor olduğundan emin\n"
+"olun ve yeniden deneyin. Eğer hâlâ başarısız oluyorsa bir git-"
+"maintenance(1)\n"
+"süreci bu depo içinde daha önceden çakılmış olabilir: Sürdürmek için "
+"dosyayı\n"
+"elle kaldırın."
+
+msgid "cannot acquire lock for scheduled background maintenance"
+msgstr "planlı arka plan bakımı için kilit alınamıyor"
msgid "git maintenance start [--scheduler=<scheduler>]"
msgstr "git maintenance start [--scheduler=<görev-planlayıcı>]"
@@ -7472,8 +7508,22 @@ msgid_plural "chain length = %d: %lu objects"
msgstr[0] "zincir uzunluÄŸu = %d: %lu nesne"
msgstr[1] "zincir uzunluÄŸu = %d: %lu nesne"
+msgid "could not start pack-objects to repack local links"
+msgstr "yerel bağlantıları yeniden paketleme için pack-objects başlatılamadı"
+
+msgid "failed to feed local object to pack-objects"
+msgstr "yerel nesne pack-objects'e beslenemedi"
+
+msgid "index-pack: Expecting full hex object ID lines only from pack-objects."
+msgstr ""
+"index-pack: Onaltılı tam nesne kimliği satırları yalnızca pack-objects'ten "
+"bekleniyor."
+
+msgid "could not finish pack-objects to repack local links"
+msgstr "yerel bağlantıları yeniden paketleme için pack-objects bitirilemedi"
+
msgid "Cannot come back to cwd"
-msgstr "Şu anki çalışma dizinine geri gelinemiyor"
+msgstr "Geçerli çalışma dizinine geri gelinemiyor"
#, c-format
msgid "bad %s"
@@ -7483,6 +7533,9 @@ msgstr "hatalı %s"
msgid "unknown hash algorithm '%s'"
msgstr "bilinmeyen sağlama algoritması '%s'"
+msgid "--promisor cannot be used with a pack name"
+msgstr "--promisor bir paket adıyla kullanılamaz"
+
msgid "--stdin requires a git repository"
msgstr "--stdin bir git dizini gerektirir"
@@ -8826,11 +8879,11 @@ msgstr "git notes [--ref <not-bÅŸvr>] [list [<nesne>]]"
msgid ""
"git notes [--ref <notes-ref>] add [-f] [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
msgstr ""
-"git notes [--ref <not-bÅŸv>] add [-f] [--allow-empty] [--[no-]separator|--"
-"separator=<paragraf-sonu>] [--[no-]stripspace] [-m <ilet> | -F <dosya> | (-c "
-"| -C) <nesne>] [<nesne>]"
+"git notes [--ref <notlar-baÅŸ>] add [-f] [--allow-empty] [--[no-]separator|--"
+"separator=<paragraf-kes>] [--[no-]stripspace] [-m <ileti> | -F <dosya> | (-c "
+"| -C) <nesne>] [<nesne>] [-e]"
msgid "git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>"
msgstr "git notes [--ref <not-bÅŸvr>] copy [-f] <nesneden> <nesneye>"
@@ -8838,11 +8891,11 @@ msgstr "git notes [--ref <not-bÅŸvr>] copy [-f] <nesneden> <nesneye>"
msgid ""
"git notes [--ref <notes-ref>] append [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
msgstr ""
-"git notes [--ref <not-bÅŸv>] append [--allow-empty] [--[no-]separator|--"
-"separator=<paragraf-sonu>] [--[no-]stripspace] [-m <ileti> | -F <dosya> | (-"
-"c | -C) <nesne>] [<nesne>]"
+"git notes [--ref <notlar-baÅŸ>] append [--allow-empty] [--[no-]separator|--"
+"separator=<paragraf-kes>] [--[no-]stripspace] [-m <ileti> | -F <dosya> | (-c "
+"| -C) <nesne>] [<nesne>] [-e]"
msgid "git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]"
msgstr "git notes [--ref <not-bÅŸvr>] edit [--allow-empty] [<nesne>]"
@@ -8960,6 +9013,9 @@ msgstr "not içeriği bir dosyada"
msgid "reuse and edit specified note object"
msgstr "belirtilen not nesnesini düzenle ve yeniden kullan"
+msgid "edit note message in editor"
+msgstr "not iletisini düzenleyicide aç"
+
msgid "reuse specified note object"
msgstr "belirtilen not nesnesini yeniden kullan"
@@ -9456,6 +9512,9 @@ msgstr "eksik nesneler için işlem"
msgid "do not pack objects in promisor packfiles"
msgstr "nesneleri vaatçi paket dosyalarıyla paketleme"
+msgid "implies --missing=allow-any"
+msgstr "--missing=allow-any ima eder"
+
msgid "respect islands during delta compression"
msgstr "delta sıkıştırması sırasında adalara uy"
@@ -11057,6 +11116,31 @@ msgid_plural " Local refs configured for 'git push'%s:"
msgstr[0] " 'git push'%s için yapılandırılan yerel başvuru:"
msgstr[1] " 'git push'%s için yapılandırılan yerel başvurular:"
+#, c-format
+msgid "'%s/HEAD' is unchanged and points to '%s'\n"
+msgstr "'%s/HEAD' deÄŸiÅŸtirilmedi ve '%s' konumuna iÅŸaret ediyor\n"
+
+#, c-format
+msgid "'%s/HEAD' has changed from '%s' and now points to '%s'\n"
+msgstr "'%s/HEAD', '%s' konumundan '%s' konumuna deÄŸiÅŸtirildi\n"
+
+#, c-format
+msgid "'%s/HEAD' is now created and points to '%s'\n"
+msgstr "'%s/HEAD' ÅŸimdi oluÅŸturuldu ve '%s' konumuna iÅŸaret ediyor\n"
+
+#, c-format
+msgid "'%s/HEAD' was detached at '%s' and now points to '%s'\n"
+msgstr ""
+"'%s/HEAD', '%s' konumunda ayrıldı ve artık '%s' konumuna işaret ediyor\n"
+
+#, c-format
+msgid ""
+"'%s/HEAD' used to point to '%s' (which is not a remote branch), but now "
+"points to '%s'\n"
+msgstr ""
+"'%s/HEAD', uzak dal olmayan '%s' konumuna iÅŸaret ediyordu; ancak ÅŸimdi '%s' "
+"konumuna iÅŸaret ediyor\n"
+
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr "refs/remotes/<ad>/HEAD'i uzak konuma göre ayarla"
@@ -11078,7 +11162,7 @@ msgid "Not a valid ref: %s"
msgstr "Geçerli bir başvuru değil: %s"
#, c-format
-msgid "Could not setup %s"
+msgid "Could not set up %s"
msgstr "%s ayarlanamadı"
#, c-format
@@ -13779,6 +13863,9 @@ msgstr "izleme kipini ayarla (bkz: git-branch(1))"
msgid "try to match the new branch name with a remote-tracking branch"
msgstr "yeni dalın adını bir uzak izleme dalıyla eşleştirmeyi dene"
+msgid "use relative paths for worktrees"
+msgstr "çalışma ağaçları için göreceli yollar kullan"
+
#, c-format
msgid "options '%s', '%s', and '%s' cannot be used together"
msgstr "'%s', '%s' ve '%s' seçenekleri birlikte kullanılamaz"
@@ -14050,6 +14137,25 @@ msgstr "'%s' oluşturulamıyor"
msgid "index-pack died"
msgstr "index-pack sonlandı"
+#, c-format
+msgid "directory '%s' is present in index, but not sparse"
+msgstr "'%s' dizini indekste var; ancak aralıklı değil"
+
+msgid "corrupted cache-tree has entries not present in index"
+msgstr "hasarlı cache-tree'de indekste olmayan girdiler var"
+
+#, c-format
+msgid "%s with flags 0x%x should not be in cache-tree"
+msgstr "%s, 0x%x bayraklı olarak cache-tree'de olmamalı"
+
+#, c-format
+msgid "bad subtree '%.*s'"
+msgstr "hatalı alt ağaç '%.*s'"
+
+#, c-format
+msgid "cache-tree for path %.*s does not match. Expected %s got %s"
+msgstr "%.*s yolu için olan cache-tree eşleşmiyor. %s bekleniyordu, %s alındı"
+
msgid "terminating chunk id appears earlier than expected"
msgstr "iri parça numarası sonlandırması beklenenden önce ortaya çıkıyor"
@@ -14829,8 +14935,8 @@ msgid ""
"attempting to write a commit-graph, but 'commitGraph.changedPathsVersion' "
"(%d) is not supported"
msgstr ""
-"bir commit-graph yazılmaya çalışılıyor; ancak 'commitGraph."
-"changedPathsVersion' (%d) desteklenmiyor"
+"bir commit-graph yazılmaya çalışılıyor; ancak "
+"'commitGraph.changedPathsVersion' (%d) desteklenmiyor"
msgid "too many commits to write graph"
msgstr "grafik yazımı için pek fazla işleme"
@@ -14909,7 +15015,7 @@ msgid ""
"to convert the grafts into replace refs.\n"
"\n"
"Turn this message off by running\n"
-"\"git config advice.graftFileDeprecated false\""
+"\"git config set advice.graftFileDeprecated false\""
msgstr ""
"<GIT_DIR>/info/grafts desteği artık kullanılmamalı\n"
"ve ileriki bir Git sürümünde kaldırılacak.\n"
@@ -14917,7 +15023,7 @@ msgstr ""
"Aşıları değiştirme başvurularına dönüştürmek için\n"
"lütfen \"git replace --convert-graft-file\" kullanın.\n"
"\n"
-"\"git config advice.graftFileDeprecated false\"\n"
+"\"git config set advice.graftFileDeprecated false\"\n"
"kullanarak bu iletiyi kapatabilirsiniz"
#, c-format
@@ -15176,8 +15282,8 @@ msgid ""
"remote URLs cannot be configured in file directly or indirectly included by "
"includeIf.hasconfig:remote.*.url"
msgstr ""
-"uzak URL'ler dosya içinde doğrudan veya başka türlü includeIf.hasconfig:"
-"remote.*.url kullanarak yapılandırılamaz"
+"uzak URL'ler dosya içinde doğrudan veya başka türlü "
+"includeIf.hasconfig:remote.*.url kullanarak yapılandırılamaz"
#, c-format
msgid "invalid config format: %s"
@@ -15733,6 +15839,19 @@ msgstr "url'nin şeması yok: %s"
msgid "credential url cannot be parsed: %s"
msgstr "yetki url'si ayrıştırılamıyor: %s"
+#, c-format
+msgid "invalid timeout '%s', expecting a non-negative integer"
+msgstr "geçersiz zaman aşımı '%s', negatif olmayan bir tamsayı bekleniyor"
+
+#, c-format
+msgid "invalid init-timeout '%s', expecting a non-negative integer"
+msgstr ""
+"geçersiz ilklendirme zaman aşımı '%s', negatif olmayan bir tamsayı bekleniyor"
+
+#, c-format
+msgid "invalid max-connections '%s', expecting an integer"
+msgstr "geçersiz en çok bağlantı '%s', bir tamsayı bekleniyor"
+
msgid "in the future"
msgstr "gelecekte"
@@ -16439,6 +16558,20 @@ msgstr "hatalı git ad alanı yolu \"%s\""
msgid "too many args to run %s"
msgstr "%s çalıştırmak için pek fazla argüman"
+#, c-format
+msgid ""
+"You are attempting to fetch %s, which is in the commit graph file but not in "
+"the object database.\n"
+"This is probably due to repo corruption.\n"
+"If you are attempting to repair this repo corruption by refetching the "
+"missing object, use 'git fetch --refetch' with the missing object."
+msgstr ""
+"İşleme grafiğinde bulunan; ancak nesne veritabanında bulunmayan %s ögesini "
+"getirmeyi deniyorsunuz.\n"
+"Bu, büyük olasılıkla depo hasarından dolayı oluyor.\n"
+"Bu depo hasarını eksik nesneyi yeniden getirerek onarmayı düşünüyorsanız "
+"eksik nesneyle birlikte 'git fetch --refetch' kullanmayı deneyin."
+
msgid "git fetch-pack: expected shallow list"
msgstr "git fetch-pack: sığ bir liste bekleniyordu"
@@ -17024,10 +17157,10 @@ msgstr[1] ""
#, 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`."
+"You can disable this warning with `git config set advice.ignoredHook false`."
msgstr ""
"'%s' kancası yok sayıldı; çünkü bir yürütülebilir olarak ayarlanmamış.\n"
-"Bu uyarıyı 'git config advice.ignoredHook false' ile kapatabilirsiniz."
+"Bu uyarıyı 'git config set advice.ignoredHook false' ile kapatabilirsiniz."
msgid "not a git repository"
msgstr "bir git deposu deÄŸil"
@@ -17043,15 +17176,9 @@ msgstr "http.postBuffer için negatif değer; %d olarak varsayılıyor"
msgid "Delegation control is not supported with cURL < 7.22.0"
msgstr "Delegasyon denetimi cURL < 7.22.0 tarafından desteklenmiyor"
-msgid "Public key pinning not supported with cURL < 7.39.0"
-msgstr "Ortak anahtar iğnelemesi cURL < 7.39.0 tarafından desteklenmiyor"
-
msgid "Unknown value for http.proactiveauth"
msgstr "http.proactiveauth için bilinmeyen değer"
-msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
-msgstr "CURLSSLOPT_NO_REVOKE cURL < 7.44.0 tarafından desteklenmiyor"
-
#, c-format
msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
msgstr "Desteklenmeyen SSL arka ucu '%s'. Desteklenen SSL arka uçları:"
@@ -17238,6 +17365,10 @@ msgid "unable to format message: %s"
msgstr "ileti biçimlendirilemiyor: %s"
#, c-format
+msgid "invalid marker-size '%s', expecting an integer"
+msgstr "geçersiz imleyici boyutu '%s', bir tamsayı bekleniyor"
+
+#, c-format
msgid "Failed to merge submodule %s (not checked out)"
msgstr "%s altmodülü birleştirilemedi (çıkış yapılmadı)"
@@ -18339,7 +18470,7 @@ msgid ""
"\n"
"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
+"running \"git config set advice.objectNameWarning false\""
msgstr ""
"Git normalde hiçbir zaman 40 onaltılı karakterlerle biten bir başvuru\n"
"oluşturmaz; çünkü 40 onaltılı bir başvuru, onu belirlediğiniz zaman yok\n"
@@ -18350,7 +18481,7 @@ msgstr ""
"komutunda \"$br\" bir şekilde boş kalmış ve 40 onaltılı bir başvuru\n"
"oluşturulmuş. Lütfen bu başvuruları inceleyin ve gerekirse silin. Bu "
"iletiyi\n"
-"kapatmak için \"git config advice.objectNameWarning\" yapın"
+"kapatmak için \"git config set advice.objectNameWarning\" yapın"
#, c-format
msgid "log for '%.*s' only goes back to %s"
@@ -18511,13 +18642,6 @@ msgstr "çoklu paket biteşlemi gereken ters indeksi içermiyor"
msgid "could not open pack %s"
msgstr "%s paketi açılamadı"
-msgid "could not determine MIDX preferred pack"
-msgstr "MIDX yeğlenen paketi algılanamadı"
-
-#, c-format
-msgid "preferred pack (%s) is invalid"
-msgstr "yeğlenen paket (%s) geçersiz"
-
msgid "corrupt bitmap lookup table: triplet position out of index"
msgstr "hasarlı biteşlem arama tablosu: üçlü konum indeks dışında"
@@ -19343,8 +19467,8 @@ msgid ""
msgstr ""
"Bu iletiden kaçınmak için, bir işlemeyi kaldırırken açıkça \"drop\" "
"kullanın.\n"
-"Uyarıların düzeyini değiştirmek için 'git config rebase."
-"missingCommitsCheck'\n"
+"Uyarıların düzeyini değiştirmek için 'git config "
+"rebase.missingCommitsCheck'\n"
"kullanın. Kullanılabilir davranışlar: ignore, warn, error.\n"
"\n"
@@ -19626,18 +19750,27 @@ msgstr ""
msgid "log for %s is empty"
msgstr "%s için olan günlük boş"
-msgid "refusing to force and skip creation of reflog"
-msgstr "başvuru günlüğünün oluşturulma/atlanma zorlanması reddediliyor"
-
#, c-format
-msgid "refusing to update ref with bad name '%s'"
-msgstr "hatalı ada iye '%s' başvurusunu güncelleme reddediliyor"
+msgid "refusing to update reflog for pseudoref '%s'"
+msgstr ""
+"'%s' yalancı başvurusu için olan başvuru günlüğünü güncelleme reddediliyor"
#, c-format
msgid "refusing to update pseudoref '%s'"
msgstr "'%s' yalancı başvurusunun güncellenmesi reddediliyor"
#, c-format
+msgid "refusing to update reflog with bad name '%s'"
+msgstr "hatalı adlı '%s' başvuru günlüğünü güncelleme reddediliyor"
+
+#, c-format
+msgid "refusing to update ref with bad name '%s'"
+msgstr "hatalı ada iye '%s' başvurusunu güncelleme reddediliyor"
+
+msgid "refusing to force and skip creation of reflog"
+msgstr "başvuru günlüğünün oluşturulma/atlanma zorlanması reddediliyor"
+
+#, c-format
msgid "update_ref failed for ref '%s': %s"
msgstr "'%s' başvurusu için update_ref başarısız oldu: %s"
@@ -19687,6 +19820,10 @@ msgstr ""
"bekleniyordu; ancak bu normal bir baÅŸvuru"
#, c-format
+msgid "cannot read ref file '%s'"
+msgstr "başvuru dosyası '%s' yazılamıyor"
+
+#, c-format
msgid "cannot open directory %s"
msgstr "%s dizini açılamıyor"
@@ -19894,6 +20031,10 @@ msgid "more than one uploadpack given, using the first"
msgstr "birden fazla uploadpack verildi, birincisi kullanılıyor"
#, c-format
+msgid "unrecognized followRemoteHEAD value '%s' ignored"
+msgstr "tanımlanamayan followRemoteHEAD değeri '%s' yok sayıldı"
+
+#, c-format
msgid "unrecognized value transfer.credentialsInUrl: '%s'"
msgstr "tanımlanamayan değer transfer.credentialsInUrl: '%s'"
@@ -21814,6 +21955,9 @@ msgstr "%s işlemesi ulaşılabilir olarak imlenmedi"
msgid "too many commits marked reachable"
msgstr "pek fazla işleme ulaşılabilir olarak imlenmiş"
+msgid "could not determine MIDX preferred pack"
+msgstr "MIDX yeğlenen paketi algılanamadı"
+
msgid "test-tool serve-v2 [<options>]"
msgstr "test-tool serve-v2 [<seçenekler>]"
@@ -22462,6 +22606,9 @@ msgstr ".git dosyası bozuk"
msgid ".git file incorrect"
msgstr ".git dosyası doğru değil"
+msgid ".git file absolute/relative path mismatch"
+msgstr ".git dosyası mutlak/göreceli yolu uyumsuzluğu"
+
msgid "not a valid path"
msgstr "geçerli bir yol değil"
@@ -22477,6 +22624,9 @@ msgstr "depo konumu bulunamıyor: .git dosyası bozuk"
msgid "gitdir unreadable"
msgstr "okunamayan gitdir"
+msgid "gitdir absolute/relative path mismatch"
+msgstr "gitdir mutlak/göreceli yolu uyumsuzluğu"
+
msgid "gitdir incorrect"
msgstr "doÄŸru olmayan gitdir"
@@ -22511,6 +22661,13 @@ msgstr "%s, '%s' içinde ayarı kaldırılamıyor"
msgid "failed to set extensions.worktreeConfig setting"
msgstr "extensions.worktreeConfig yapılandırması ayarlanamadı"
+msgid "unable to upgrade repository format to support relative worktrees"
+msgstr ""
+"depo biçimi göreceli çalışma ağaçlarını desteklemesi için yükseltilemiyor"
+
+msgid "unable to set extensions.relativeWorktrees setting"
+msgstr "extensions.relativeWorktrees yapılandırması ayarlanamadı"
+
#, c-format
msgid "could not setenv '%s'"
msgstr "setenv '%s' yapılamadı"
diff --git a/po/uk.po b/po/uk.po
index 297f7b0687..5f68f36c7d 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Git v2.46\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2023-04-11 09:55-0700\n"
-"PO-Revision-Date: 2024-07-24 08:45-0700\n"
-"Last-Translator: Arkadii Yakovets <ark@cho.red>\n"
+"POT-Creation-Date: 2025-01-04 19:26-0800\n"
+"PO-Revision-Date: 2025-01-03 14:17-0800\n"
+"Last-Translator: Kateryna Golovanova <kate@kgthreads.com>\n"
"Language-Team: Ukrainian <https://github.com/arkid15r/git-uk-l10n/>\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
-"X-Generator: Poedit 3.4.2\n"
+"X-Generator: Poedit 3.5\n"
#, c-format
msgid "Huh (%s)?"
@@ -41,7 +41,7 @@ msgstr "Оновити"
#, c-format
msgid "could not stage '%s'"
-msgstr "не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ до індекÑу %s"
+msgstr "не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ до індекÑу \"%s\""
msgid "could not write index"
msgstr "не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати індекÑ"
@@ -549,7 +549,7 @@ msgid ""
"/ - search for a hunk matching the given regex\n"
"s - split the current hunk into smaller hunks\n"
"e - manually edit the current hunk\n"
-"p - print the current hunk\n"
+"p - print the current hunk, 'P' to use the pager\n"
"? - print help\n"
msgstr ""
"j - залишити цей шматок невизначеним, перейти до наÑтупного невизначеного "
@@ -562,7 +562,7 @@ msgstr ""
"/ - шукати шматок, що відповідає заданому регвиру\n"
"s - розбити поточний шматок на менші шматки\n"
"e - редагувати поточний шматок вручну\n"
-"p - показати поточний шматок\n"
+"p - показати поточний шматок, \"P\" Ð´Ð»Ñ Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ñторінок\n"
"? - показати довідку\n"
#, c-format
@@ -634,10 +634,11 @@ msgstr "Змінено лише бінарні файли."
#, c-format
msgid ""
"\n"
-"Disable this message with \"git config advice.%s false\""
+"Disable this message with \"git config set advice.%s false\""
msgstr ""
"\n"
-"Вимкнути це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð° за допомогою \"git config advice.%s false\""
+"Вимкнути це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð° за допомогою \"git config set advice.%s "
+"false\""
#, c-format
msgid "%shint:%s%.*s%s\n"
@@ -761,8 +762,8 @@ msgstr ""
"\n"
" git switch -\n"
"\n"
-"Щоб вимкнути цю пораду, вÑтановіть конфігураційний параметр advice."
-"detachedHead у false\n"
+"Щоб вимкнути цю пораду, вÑтановіть конфігураційний параметр "
+"advice.detachedHead у false\n"
#, c-format
msgid ""
@@ -1255,6 +1256,15 @@ msgstr ""
"Ñпробувати триÑтороннє злиттÑ, повернутиÑÑ Ð´Ð¾ звичайного латаннÑ, Ñкщо це не "
"вдаÑтьÑÑ"
+msgid "for conflicts, use our version"
+msgstr "у разі конфліктів викориÑтовувати нашу верÑÑ–ÑŽ"
+
+msgid "for conflicts, use their version"
+msgstr "у разі конфліктів викориÑтовувати їхню верÑÑ–ÑŽ"
+
+msgid "for conflicts, use a union version"
+msgstr "у разі конфліктів викориÑтовувати обʼєднану верÑÑ–ÑŽ"
+
msgid "build a temporary index based on embedded index information"
msgstr "Ñтворити тимчаÑовий Ñ–Ð½Ð´ÐµÐºÑ Ð½Ð° оÑнові вбудованої індекÑної інформації"
@@ -1300,6 +1310,9 @@ msgstr "додати <корінь> до вÑÑ–Ñ… назв файлів"
msgid "don't return error for empty patches"
msgstr "не повертати помилку Ð´Ð»Ñ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–Ñ… латок"
+msgid "--ours, --theirs, and --union require --3way"
+msgstr "--ours, --theirs, та --union вимагають --3way"
+
#, c-format
msgid "cannot stream blob %s"
msgstr "неможливо транÑлювати blob %s"
@@ -1372,6 +1385,10 @@ msgid "not a tree object: %s"
msgstr "не є об’єктом дерева: %s"
#, c-format
+msgid "failed to unpack tree object %s"
+msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ñ‚Ð¸ обʼєкт дерева %s"
+
+#, c-format
msgid "File not found: %s"
msgstr "Файл не знайдено: %s"
@@ -2174,7 +2191,7 @@ msgstr ""
#, c-format
msgid "Could not parse object '%s'."
-msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ об'єкт '%s'."
+msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ обʼєкт \"%s\"."
msgid "failed to clean index"
msgstr "не вдалоÑÑ Ð¾Ñ‡Ð¸Ñтити індекÑ"
@@ -2484,9 +2501,6 @@ msgstr ""
"неприпуÑтимий аргумент %s Ð´Ð»Ñ \"git bisect terms\".\n"
"Підтримувані опції: --term-good|--term-old і --term-bad|--term-new."
-msgid "revision walk setup failed\n"
-msgstr "не вдалоÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ€Ð¾Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð¿Ð¾ ревізіÑм\n"
-
#, c-format
msgid "could not open '%s' for appending"
msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ \"%s\" Ð´Ð»Ñ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ"
@@ -3026,8 +3040,8 @@ msgid "HEAD not found below refs/heads!"
msgstr "HEAD не знайдено під refs/heads!"
msgid ""
-"branch with --recurse-submodules can only be used if submodule."
-"propagateBranches is enabled"
+"branch with --recurse-submodules can only be used if "
+"submodule.propagateBranches is enabled"
msgstr ""
"гілку з --recurse-submodules можна викориÑтовувати лише Ñкщо увімкнено "
"submodule.propagateBranches"
@@ -3478,9 +3492,14 @@ msgstr "git check-mailmap [<опції>] <контакт>..."
msgid "also read contacts from stdin"
msgstr "також читати контакти з stdin"
-#, c-format
-msgid "unable to parse contact: %s"
-msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ контакт: %s"
+msgid "read additional mailmap entries from file"
+msgstr "зчитувати додаткові запиÑи mailmap з файлу"
+
+msgid "blob"
+msgstr "blob"
+
+msgid "read additional mailmap entries from blob"
+msgstr "зчитувати додаткові запиÑи mailmap з blob"
msgid "no contacts specified"
msgstr "контакти не вказані"
@@ -3648,7 +3667,7 @@ msgstr "Вже на \"%s\"\n"
#, c-format
msgid "Switched to and reset branch '%s'\n"
-msgstr "Переключено на та Ñкинуто гілку '%s'\n"
+msgstr "Переключено на та Ñкинуто гілку \"%s\"\n"
#, c-format
msgid "Switched to a new branch '%s'\n"
@@ -3842,19 +3861,23 @@ msgstr "шлÑхи не можуть викориÑтовуватиÑÑŒ при Ð
#, c-format
msgid "'%s' cannot be used with switching branches"
-msgstr "'%s' не може викориÑтовуватиÑÑŒ при переключенні гілок"
+msgstr "\"%s\" не може викориÑтовуватиÑÑŒ при переключенні гілок"
+
+#, c-format
+msgid "'%s' needs the paths to check out"
+msgstr "\"%s\" потрібні шлÑхи Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ñƒ"
#, c-format
msgid "'%s' cannot be used with '%s'"
-msgstr "'%s' не може викориÑтовуватиÑÑŒ з '%s'"
+msgstr "\"%s\" не може викориÑтовуватиÑÑŒ з \"%s\""
#, c-format
msgid "'%s' cannot take <start-point>"
-msgstr "'%s' не може прийнÑти <Ñтартова-точка>"
+msgstr "\"%s\" не може прийнÑти <Ñтартова-точка>"
#, c-format
msgid "Cannot switch branch to a non-commit '%s'"
-msgstr "Ðеможливо переключити гілку на не коміт '%s'"
+msgstr "Ðеможливо переключити гілку на не коміт \"%s\""
msgid "missing branch or commit argument"
msgstr "відÑÑƒÑ‚Ð½Ñ Ð³Ñ–Ð»ÐºÐ° або коміт"
@@ -3887,8 +3910,8 @@ msgstr "нова ненароджена гілка"
msgid "update ignored files (default)"
msgstr "оновити ігноровані файли (за замовчуваннÑм)"
-msgid "do not check if another worktree is holding the given ref"
-msgstr "не перевірÑти, чи інше робоче дерево міÑтить дане поÑиланнÑ"
+msgid "do not check if another worktree is using this branch"
+msgstr "не перевірÑти, чи викориÑтовує цю гілку інше робоче дерево"
msgid "checkout our version for unmerged files"
msgstr "викориÑтовувати нашу верÑÑ–ÑŽ Ð´Ð»Ñ Ð½Ðµ злитих файлів"
@@ -3919,11 +3942,11 @@ msgstr "неприпуÑтиме Ð·Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÑˆÐ»Ñху"
#, c-format
msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
-msgstr "'%s' не Ñ” комітом, Ñ– з нього не можна Ñтворити гілку '%s'"
+msgstr "\"%s\" не Ñ” комітом, Ñ– з нього не можна Ñтворити гілку \"%s\""
#, c-format
msgid "git checkout: --detach does not take a path argument '%s'"
-msgstr "git checkout: --detach не приймає аргумент шлÑху '%s'"
+msgstr "git checkout: --detach не приймає аргумент шлÑху \"%s\""
msgid ""
"git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
@@ -4191,11 +4214,11 @@ msgstr "Ñтворити неглибокий клон вказаної глиб
msgid "create a shallow clone since a specific time"
msgstr "Ñтворити неглибокий клон з певного чаÑу"
-msgid "revision"
-msgstr "ревізіÑ"
+msgid "ref"
+msgstr "поÑиланнÑ"
-msgid "deepen history of shallow clone, excluding rev"
-msgstr "поглибити Ñ–Ñторію неглибокого клону, за винÑтком ревізії"
+msgid "deepen history of shallow clone, excluding ref"
+msgstr "поглибити Ñ–Ñторію неглибокого клону, за винÑтком поÑиланнÑ"
msgid "clone only one branch, HEAD or --branch"
msgstr "клонувати лише одну гілку, HEAD або --branch"
@@ -4428,7 +4451,7 @@ msgstr "не вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Ñховище, URI пÐ
#, c-format
msgid "failed to fetch objects from bundle URI '%s'"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ обʼєкти з пакунка URI '%s'"
+msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ обʼєкти з пакунка URI \"%s\""
msgid "failed to fetch advertised bundles"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ обіцÑні пакунки"
@@ -4618,7 +4641,7 @@ msgstr "git commit-tree: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸"
msgid ""
"git commit [-a | --interactive | --patch] [-s] [-v] [-u<mode>] [--amend]\n"
" [--dry-run] [(-c | -C | --squash) <commit> | --fixup [(amend|"
-"reword):]<commit>)]\n"
+"reword):]<commit>]\n"
" [-F <file> | -m <msg>] [--reset-author] [--allow-empty]\n"
" [--allow-empty-message] [--no-verify] [-e] [--author=<author>]\n"
" [--date=<date>] [--cleanup=<mode>] [--[no-]status]\n"
@@ -4628,14 +4651,14 @@ msgid ""
msgstr ""
"git commit [-a | --interactive | --patch] [-s] [-v] [-u<режим>] [--amend]\n"
" [--dry-run] [(-c | -C | --squash) <коміт> | --fixup [(amend|"
-"reword):]<коміт>)]\n"
+"reword):]<коміт>]\n"
" [-F <файл> | -m <допиÑ>] [--reset-author] [--allow-empty]\n"
" [--allow-empty-message] [--no-verify] [-e] [--author=<автор>]\n"
" [--date=<дата>] [--cleanup=<режим>] [--[no-]status]\n"
" [-i | -o] [--pathspec-from-file=<файл> [--pathspec-file-nul]]\n"
-" [(--trailer <токен>[(=|:)<значеннÑ>])...] [-S[<ідентифікатор "
+" [(--trailer <токен>[(=|:)<значеннÑ>])...] [-S[<ідентифікатор-"
"ключа>]]\n"
-" [--] [<визначник шлÑху>...]"
+" [--] [<визначник-шлÑху>...]"
msgid "git status [<options>] [--] [<pathspec>...]"
msgstr "git status [<опції>] [--] [<визначник шлÑху>...]"
@@ -5121,12 +5144,11 @@ msgstr "git config list [<опціÑ-файлу>] [<опціÑ-відображÐ
msgid ""
"git config get [<file-option>] [<display-option>] [--includes] [--all] [--"
-"regexp=<regexp>] [--value=<value>] [--fixed-value] [--default=<default>] "
-"<name>"
+"regexp] [--value=<value>] [--fixed-value] [--default=<default>] <name>"
msgstr ""
"git config get [<опціÑ-файлу>] [<опціÑ-відображеннÑ>] [--includes] [--all] "
-"[--regexp=<регвир>] [--value=<значеннÑ>] [--fixed-value] [--"
-"default=<Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ -за-умовчаннÑм>] <назва>"
+"[--regexp] [--value=<значеннÑ>] [--fixed-value] [--default=<за "
+"замовчуваннÑм>] <назва>"
msgid ""
"git config set [<file-option>] [--type=<type>] [--all] [--value=<value>] [--"
@@ -5137,10 +5159,10 @@ msgstr ""
msgid ""
"git config unset [<file-option>] [--all] [--value=<value>] [--fixed-value] "
-"<name> <value>"
+"<name>"
msgstr ""
"git config unset [<опціÑ-файлу>] [--all] [--value=<значеннÑ>] [--fixed-"
-"value] <назва> <значеннÑ>"
+"value] <назва>"
msgid "git config rename-section [<file-option>] <old-name> <new-name>"
msgstr "git config rename-section [<опціÑ-файлу>] <Ñтара-назва> <нова-назва>"
@@ -5155,6 +5177,15 @@ msgid "git config [<file-option>] --get-colorbool <name> [<stdout-is-tty>]"
msgstr "git config [<опціÑ-файлу>] --get-colorbool <назва> [<stdout-is-tty>]"
msgid ""
+"git config get [<file-option>] [<display-option>] [--includes] [--all] [--"
+"regexp=<regexp>] [--value=<value>] [--fixed-value] [--default=<default>] "
+"<name>"
+msgstr ""
+"git config get [<опціÑ-файлу>] [<опціÑ-відображеннÑ>] [--includes] [--all] "
+"[--regexp=<регвир>] [--value=<значеннÑ>] [--fixed-value] [--default=<за-"
+"замовчуваннÑм>] <назва>"
+
+msgid ""
"git config set [<file-option>] [--type=<type>] [--comment=<message>] [--all] "
"[--value=<value>] [--fixed-value] <name> <value>"
msgstr ""
@@ -5574,12 +5605,8 @@ msgid "traversed %lu commits\n"
msgstr "пройдено через %lu комітів\n"
#, c-format
-msgid ""
-"more than %i tags found; listed %i most recent\n"
-"gave up search at %s\n"
-msgstr ""
-"знайдено більше %i тегів; показані %i оÑтанніх\n"
-"припинено пошук на %s\n"
+msgid "found %i tags; gave up search at %s\n"
+msgstr "знайдено %i тегів; припинено пошук на %s\n"
#, c-format
msgid "describe %s\n"
@@ -5964,13 +5991,13 @@ msgid ""
"to avoid this check\n"
msgstr ""
"перевірка примуÑових оновлень зайнÑла %.2f Ñекунд; ви можете ÑкориÑтатиÑÑ\n"
-"\"--no-show-forced-updates\" або виконати \"git config fetch."
-"showForcedUpdates false\"\n"
+"\"--no-show-forced-updates\" або виконати \"git config "
+"fetch.showForcedUpdates false\"\n"
"щоб уникнути цієї перевірки\n"
#, c-format
-msgid "%s did not send all necessary objects\n"
-msgstr "%s не надіÑлав вÑÑ–Ñ… необхідних обʼєктів\n"
+msgid "%s did not send all necessary objects"
+msgstr "%s не надіÑлав уÑÑ– необхідні обʼєкти"
#, c-format
msgid "rejected %s because shallow roots are not allowed to be updated"
@@ -6007,8 +6034,8 @@ msgid "option \"%s\" value \"%s\" is not valid for %s"
msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ \"%s\" опції \"%s\" неприпуÑтиме Ð´Ð»Ñ %s"
#, c-format
-msgid "option \"%s\" is ignored for %s\n"
-msgstr "Ð¾Ð¿Ñ†Ñ–Ñ \"%s\" ігноруєтьÑÑ Ð´Ð»Ñ %s\n"
+msgid "option \"%s\" is ignored for %s"
+msgstr "Ð¾Ð¿Ñ†Ñ–Ñ \"%s\" ігноруєтьÑÑ Ð´Ð»Ñ %s"
#, c-format
msgid "%s is not a valid object"
@@ -6018,6 +6045,21 @@ msgstr "%s не Ñ” припуÑтимим об’єктом"
msgid "the object %s does not exist"
msgstr "об’єкт %s не Ñ–Ñнує"
+#, c-format
+msgid ""
+"Run 'git remote set-head %s %s' to follow the change, or set\n"
+"'remote.%s.followRemoteHEAD' configuration option to a different value\n"
+"if you do not want to see this message. Specifically running\n"
+"'git config set remote.%s.followRemoteHEAD %s' will disable the warning\n"
+"until the remote changes HEAD to something else."
+msgstr ""
+"ЗапуÑтіть \"git remote set-head %s %s\", щоб відÑтежити зміни, або "
+"вÑтановіть\n"
+"\"remote.%s.followRemoteHEAD\" параметр конфігурації на інше значеннÑ\n"
+"Ñкщо ви не хочете бачити це повідомленнÑ. Зокрема, Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸\n"
+"\"git config set remote.%s.followRemoteHEAD %s\" вимкне попередженнÑ\n"
+"доки віддалений Ñервер не змінить HEAD на щоÑÑŒ інше."
+
msgid "multiple branches detected, incompatible with --set-upstream"
msgstr "виÑвлено кілька гілок, неÑуміÑних з --set-upstream"
@@ -6158,6 +6200,9 @@ msgstr "refmap"
msgid "specify fetch refmap"
msgstr "вказати мапу поÑилань Ð´Ð»Ñ fetch"
+msgid "revision"
+msgstr "ревізіÑ"
+
msgid "report that we have only objects reachable from this object"
msgstr "звітувати, що у Ð½Ð°Ñ Ñ” тільки обʼєкти, доÑтупні з цього обʼєкта"
@@ -6212,8 +6257,8 @@ msgid "protocol does not support --negotiate-only, exiting"
msgstr "протокол не підтримує --negotiate-only, вихід"
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 можна викориÑтовувати лише з віддаленим призначеннÑм, налаштованим "
"у extensions.partialclone"
@@ -6686,6 +6731,9 @@ msgstr "працювати ретельніше (збільшує Ñ‡Ð°Ñ Ð²Ð¸ÐºÐ
msgid "enable auto-gc mode"
msgstr "увімкнути режим автоматичного збору ÑміттÑ"
+msgid "perform garbage collection in the background"
+msgstr "виконувати Ð¿Ñ€Ð¸Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ ÑÐ¼Ñ–Ñ‚Ñ‚Ñ Ñƒ фоновому режимі"
+
msgid "force running gc even if there may be another gc running"
msgstr "примуÑово запуÑкати збирач ÑміттÑ, навіть Ñкщо інший збирач вже працює"
@@ -6786,6 +6834,9 @@ msgstr "Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ \"%s\" не можна вибрати кілька ра
msgid "run tasks based on the state of the repository"
msgstr "запуÑкати Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð½Ð° оÑнові Ñтану Ñховища"
+msgid "perform maintenance in the background"
+msgstr "виконувати технічне обÑÐ»ÑƒÐ³Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ фоновому режимі"
+
msgid "frequency"
msgstr "чаÑтота"
@@ -6883,8 +6934,26 @@ msgstr "недоÑтупні ні systemd таймери, ні crontab"
msgid "%s scheduler is not available"
msgstr "%s планувальник недоÑтупний"
-msgid "another process is scheduling background maintenance"
-msgstr "ще один Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¿Ð»Ð°Ð½ÑƒÑ” фонове обÑлуговуваннÑ"
+#, c-format
+msgid ""
+"unable to create '%s.lock': %s.\n"
+"\n"
+"Another scheduled git-maintenance(1) process seems to be running in this\n"
+"repository. Please make sure no other maintenance processes are running and\n"
+"then try again. If it still fails, a git-maintenance(1) process may have\n"
+"crashed in this repository earlier: remove the file manually to continue."
+msgstr ""
+"не вдалоÑÑ Ñтворити \"%s.lock\": %s.\n"
+"\n"
+"ЗдаєтьÑÑ, у цьому Ñховищі запущено ще один запланований Ð¿Ñ€Ð¾Ñ†ÐµÑ git-"
+"maintenance(1). Будь лаÑка, переконайтеÑÑ, що у Ñховищі не запущено інших "
+"процеÑів обÑлуговуваннÑ, Ñ–\n"
+"Ñ– Ñпробуйте ще раз. Якщо вÑе одно не вдаÑтьÑÑ, можливо, \n"
+"раніше у цьому Ñховищі аварійно завершивÑÑ git-maintenance(1) процеÑ: "
+"видаліть файл вручну, щоб продовжити роботу."
+
+msgid "cannot acquire lock for scheduled background maintenance"
+msgstr "не може отримати Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¿Ð»Ð°Ð½Ð¾Ð²Ð¾Ð³Ð¾ фонового обÑлуговуваннÑ"
msgid "git maintenance start [--scheduler=<scheduler>]"
msgstr "git maintenance start [--scheduler=<планувальник>]"
@@ -7418,19 +7487,19 @@ msgstr "локальний обʼєкт %s пошкоджено"
#, c-format
msgid "packfile name '%s' does not end with '.%s'"
-msgstr "Ñ–Ð¼â€™Ñ Ñ„Ð°Ð¹Ð»Ð° пакунка '%s' не закінчуєтьÑÑ Ð½Ð° '.%s'"
+msgstr "Ñ–Ð¼â€™Ñ Ñ„Ð°Ð¹Ð»Ð° пакунка \"%s\" не закінчуєтьÑÑ Ð½Ð° '.%s'"
#, c-format
msgid "cannot write %s file '%s'"
-msgstr "неможливо запиÑати %s файл '%s'"
+msgstr "неможливо запиÑати %s файл \"%s\""
#, c-format
msgid "cannot close written %s file '%s'"
-msgstr "неможливо закрити запиÑаний %s файл '%s'"
+msgstr "неможливо закрити запиÑаний %s файл \"%s\""
#, c-format
msgid "unable to rename temporary '*.%s' file to '%s'"
-msgstr "не вдаєтьÑÑ Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ñ‚Ð¸ тимчаÑовий файл '*.%s' на '%s'"
+msgstr "не вдаєтьÑÑ Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ñ‚Ð¸ тимчаÑовий файл \"*.%s\" на \"%s\""
msgid "error while closing pack file"
msgstr "помилка під Ñ‡Ð°Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ„Ð°Ð¹Ð»Ñƒ пакунка"
@@ -7441,11 +7510,11 @@ msgstr "невірний pack.indexVersion=%<PRIu32>"
#, c-format
msgid "Cannot open existing pack file '%s'"
-msgstr "Ðеможливо відкрити Ñ–Ñнуючий файл пакунка '%s"
+msgstr "Ðеможливо відкрити Ñ–Ñнуючий файл пакунка \"%s\""
#, c-format
msgid "Cannot open existing pack idx file for '%s'"
-msgstr "Ðеможливо відкрити Ñ–Ñнуючий індекÑний файл пакунка Ð´Ð»Ñ '%s"
+msgstr "Ðеможливо відкрити Ñ–Ñнуючий індекÑний файл пакунка Ð´Ð»Ñ \"%s\""
#, c-format
msgid "non delta: %d object"
@@ -7461,6 +7530,20 @@ msgstr[0] "довжина ланцюжка = %d: %lu об’єкт"
msgstr[1] "довжина ланцюжка = %d: %lu об’єкти"
msgstr[2] "довжина ланцюжка = %d: %lu об’єктів"
+msgid "could not start pack-objects to repack local links"
+msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð¾Ñ‡Ð°Ñ‚Ð¸ pack-objects Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¿Ð°ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… поÑилань"
+
+msgid "failed to feed local object to pack-objects"
+msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‚Ð¸ локальний обʼєкт до pack-objects"
+
+msgid "index-pack: Expecting full hex object ID lines only from pack-objects."
+msgstr ""
+"index-pack: очікуютьÑÑ Ð¿Ð¾Ð²Ð½Ñ– Ñ€Ñдки шіÑтнадцÑткових ідентифікаторів обʼєктів "
+"тільки від pack-objects."
+
+msgid "could not finish pack-objects to repack local links"
+msgstr "не вдалоÑÑ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚Ð¸ pack-objects Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¿Ð°ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… поÑилань"
+
msgid "Cannot come back to cwd"
msgstr "Ðеможливо повернутиÑÑ Ð´Ð¾ поточної робочої директорії"
@@ -7470,7 +7553,10 @@ msgstr "невірний %s"
#, c-format
msgid "unknown hash algorithm '%s'"
-msgstr "невідомий хеш-алгоритм '%s'"
+msgstr "невідомий хеш-алгоритм \"%s\""
+
+msgid "--promisor cannot be used with a pack name"
+msgstr "--promisor не можна викориÑтовувати з назвою пакунка"
msgid "--stdin requires a git repository"
msgstr "--stdin потребує наÑвноÑті git Ñховища"
@@ -7656,9 +7742,6 @@ msgstr "-L<діапазон>:<файл> не можна викориÑтовув
msgid "Final output: %d %s\n"
msgstr "Кінцевий результат: %d %s\n"
-msgid "unable to create temporary object directory"
-msgstr "не вдалоÑÑ Ñтворити тимчаÑову директорію об’єкта"
-
#, c-format
msgid "git show %s: bad file"
msgstr "git show %s: невірний файл"
@@ -8231,15 +8314,6 @@ msgstr "викориÑтовувати Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð½Ð° оÑнові diff3"
msgid "use a zealous diff3 based merge"
msgstr "викориÑтовувати ретельне Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð½Ð° оÑнові diff3"
-msgid "for conflicts, use our version"
-msgstr "у разі конфліктів викориÑтовувати нашу верÑÑ–ÑŽ"
-
-msgid "for conflicts, use their version"
-msgstr "у разі конфліктів викориÑтовувати їхню верÑÑ–ÑŽ"
-
-msgid "for conflicts, use a union version"
-msgstr "у разі конфліктів викориÑтовувати об’єднану верÑÑ–ÑŽ"
-
msgid "<algorithm>"
msgstr "<алгоритм>"
@@ -8709,6 +8783,9 @@ msgstr ""
msgid "write multi-pack bitmap"
msgstr "запиÑати multi-pack bitmap"
+msgid "write a new incremental MIDX"
+msgstr "запиÑати новий інкрементний MIDX"
+
msgid "write multi-pack index containing only given indexes"
msgstr "запиÑати multi-pack індекÑ, що міÑтить лише задані індекÑи"
@@ -8843,11 +8920,11 @@ msgstr "git notes [--ref <поÑиланнÑ-нотатки>] [list [<об’єÐ
msgid ""
"git notes [--ref <notes-ref>] add [-f] [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
msgstr ""
"git notes [--ref <поÑиланнÑ-нотатки>] add [-f] [--allow-empty] [--"
"[no-]separator|--separator=<розділювач-абзаців>] [--[no-]stripspace] [-m "
-"<допиÑ> | -F <файл> | (-c | -C) <обʼєкт>] [<обʼєкт>]"
+"<допиÑ> | -F <файл> | (-c | -C) <обʼєкт>] [<обʼєкт>] [-e]"
msgid "git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>"
msgstr ""
@@ -8856,11 +8933,11 @@ msgstr ""
msgid ""
"git notes [--ref <notes-ref>] append [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
msgstr ""
"git notes [--ref <поÑиланнÑ-нотатки>] append [--allow-empty] [--"
"[no-]separator|--separator=<розділювач-абзаців>] [--[no-]stripspace] [-m "
-"<допиÑ> | -F <файл> | (-c | -C) <обʼєкт>] [<обʼєкт>]"
+"<допиÑ> | -F <файл> | (-c | -C) <обʼєкт>] [<обʼєкт>] [-e]"
msgid "git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]"
msgstr "git notes [--ref <поÑиланнÑ-нотатки>] edit [--allow-empty] [<об’єкт>]"
@@ -8979,6 +9056,9 @@ msgstr "вміÑÑ‚ нотатки у файлі"
msgid "reuse and edit specified note object"
msgstr "повторно викориÑтати та редагувати вказаний обʼєкт нотатки"
+msgid "edit note message in editor"
+msgstr "редагувати Ð´Ð¾Ð¿Ð¸Ñ Ð½Ð¾Ñ‚Ð°Ñ‚ÐºÐ¸ в редакторі"
+
msgid "reuse specified note object"
msgstr "повторно викориÑтати вказаний обʼєкт нотатки"
@@ -9195,8 +9275,8 @@ msgstr "очікувавÑÑ Ð¾Ð±Ê¼Ñ”ÐºÑ‚ на зміщенні %<PRIuMAX> паÐ
msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
msgstr ""
-"Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð½Ñ bitmap запиÑу, пакунки розбиваютьÑÑ Ð½Ð° чаÑтини через pack."
-"packSizeLimit"
+"Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð½Ñ bitmap запиÑу, пакунки розбиваютьÑÑ Ð½Ð° чаÑтини через "
+"pack.packSizeLimit"
msgid "Writing objects"
msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð¾Ð±Ê¼Ñ”ÐºÑ‚Ñ–Ð²"
@@ -9478,6 +9558,9 @@ msgstr "обробка Ð´Ð»Ñ Ð²Ñ–Ð´Ñутніх обʼєктів"
msgid "do not pack objects in promisor packfiles"
msgstr "не пакувати обʼєкти у promisor пакунки"
+msgid "implies --missing=allow-any"
+msgstr "маєтьÑÑ Ð½Ð° увазі --missing=allow-any"
+
msgid "respect islands during delta compression"
msgstr "поважати оÑтрови під Ñ‡Ð°Ñ Ð´ÐµÐ»ÑŒÑ‚Ð° компреÑÑ–Ñ—"
@@ -9974,7 +10057,7 @@ msgstr "ÐадÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð¾ %s\n"
#, c-format
msgid "failed to push some refs to '%s'"
-msgstr "не вдалоÑÑ Ð½Ð°Ð´Ñ–Ñлати деÑкі поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð¾ '%s'"
+msgstr "не вдалоÑÑ Ð½Ð°Ð´Ñ–Ñлати деÑкі поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð¾ \"%s\""
msgid ""
"recursing into submodule with push.recurseSubmodules=only; using on-demand "
@@ -9985,7 +10068,7 @@ msgstr ""
#, c-format
msgid "invalid value for '%s'"
-msgstr "неприпуÑтиме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ '%s'"
+msgstr "неприпуÑтиме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ \"%s\""
msgid "repository"
msgstr "Ñховище"
@@ -10746,6 +10829,9 @@ msgstr "неприпуÑтимий формат поÑиланнÑ: %s"
msgid "git refs migrate --ref-format=<format> [--dry-run]"
msgstr "git refs migrate --ref-format=<формат> [--dry-run]"
+msgid "git refs verify [--strict] [--verbose]"
+msgstr "git refs verify [--strict] [--verbose]"
+
msgid "specify the reference format to convert to"
msgstr "вкажіть формат поÑиланнÑ, в Ñкий потрібно конвертувати"
@@ -10759,6 +10845,12 @@ msgstr "відÑутній --ref-format=<формат>"
msgid "repository already uses '%s' format"
msgstr "Ñховище вже викориÑтовує формат \"%s\""
+msgid "enable strict checking"
+msgstr "увімкнути Ñувору перевірку"
+
+msgid "'git refs verify' takes no arguments"
+msgstr "\"git refs verify\" не потребує аргументів"
+
msgid ""
"git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--"
"mirror=<fetch|push>] <name> <url>"
@@ -11100,6 +11192,30 @@ msgstr[0] " Локальне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²Ð°Ð½Ð¾ Ð´Ð»Ñ \
msgstr[1] " Локальних поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²Ð°Ð½Ð¾ Ð´Ð»Ñ \"git push\"%s:"
msgstr[2] " Локальних поÑилань налаштовано Ð´Ð»Ñ \"git push\"%s:"
+#, c-format
+msgid "'%s/HEAD' is unchanged and points to '%s'\n"
+msgstr "\"%s/HEAD\" не змінивÑÑ Ñ– вказує на \"%s\"\n"
+
+#, c-format
+msgid "'%s/HEAD' has changed from '%s' and now points to '%s'\n"
+msgstr "\"%s/HEAD\" змінивÑÑ Ð· \"%s\" Ñ– тепер вказує на \"%s\"\n"
+
+#, c-format
+msgid "'%s/HEAD' is now created and points to '%s'\n"
+msgstr "Створено \"%s/HEAD\", Ñкий вказує на \"%s\"\n"
+
+#, c-format
+msgid "'%s/HEAD' was detached at '%s' and now points to '%s'\n"
+msgstr "\"%s/HEAD\" був відʼєднаний на \"%s\" і тепер вказує на \"%s\"\n"
+
+#, c-format
+msgid ""
+"'%s/HEAD' used to point to '%s' (which is not a remote branch), but now "
+"points to '%s'\n"
+msgstr ""
+"\"%s/HEAD\" раніше вказував на \"%s\" (Ñкий не Ñ” віддаленою гілкою), але "
+"тепер вказує на \"%s\"\n"
+
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr ""
"вÑтановити refs/remotes/<назва>/HEAD відповідно до віддаленого призначеннÑ"
@@ -11124,7 +11240,7 @@ msgid "Not a valid ref: %s"
msgstr "Ðе Ñ” припуÑтимим поÑиланнÑм: %s"
#, c-format
-msgid "Could not setup %s"
+msgid "Could not set up %s"
msgstr "Ðе вдалоÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸ %s"
#, c-format
@@ -11696,11 +11812,11 @@ msgstr "запиÑати лише той факт, що вилучені шлÑÑ
#, c-format
msgid "Failed to resolve '%s' as a valid revision."
-msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ñ‚Ð¸ '%s' Ñк припуÑтиму ревізію."
+msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ñ‚Ð¸ \"%s\" Ñк припуÑтиму ревізію."
#, c-format
msgid "Failed to resolve '%s' as a valid tree."
-msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ñ‚Ð¸ '%s' Ñк припуÑтиме дерево."
+msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ñ‚Ð¸ \"%s\" Ñк припуÑтиме дерево."
msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
msgstr ""
@@ -11729,7 +11845,7 @@ msgstr ""
#, c-format
msgid "Could not reset index file to revision '%s'."
-msgstr "Ðе вдалоÑÑ Ñкинути індекÑний файл до ревізії '%s'."
+msgstr "Ðе вдалоÑÑ Ñкинути індекÑний файл до ревізії \"%s\"."
msgid "Could not write new index file."
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати новий індекÑний файл."
@@ -12211,11 +12327,11 @@ msgstr "поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ðµ Ñ–Ñнує"
msgid "failed to look up reference"
msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ поÑиланнÑ"
-msgid "only show tags (can be combined with branches)"
-msgstr "показати тільки теги (можна комбінувати з гілками)"
+msgid "only show tags (can be combined with --branches)"
+msgstr "показувати тільки теги (можна комбінувати з --branches)"
-msgid "only show branches (can be combined with tags)"
-msgstr "показати тільки гілки (можна комбінувати з тегами)"
+msgid "only show branches (can be combined with --tags)"
+msgstr "показувати тільки гілки (можна комбінувати з --tags)"
msgid "check for reference existence without resolving"
msgstr "перевірÑти наÑвніÑть поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð±ÐµÐ· розвʼÑзаннÑ"
@@ -12268,6 +12384,10 @@ msgstr "не вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ директорію \"%s\""
msgid "failed to create directory for sparse-checkout file"
msgstr "не вдалоÑÑ Ñтворити директорію Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñƒ розрідженого переходу"
+#, c-format
+msgid "unable to fdopen %s"
+msgstr "не вдалоÑÑ fdopen %s"
+
msgid "failed to initialize worktree config"
msgstr "не вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ конфігурацію робочого дерева"
@@ -12726,8 +12846,8 @@ msgid "couldn't hash object from '%s'"
msgstr "не вдалоÑÑ Ñ…ÐµÑˆÑƒÐ²Ð°Ñ‚Ð¸ обʼєкт з \"%s\""
#, c-format
-msgid "unexpected mode %o\n"
-msgstr "неочікуваний режим %o\n"
+msgid "unexpected mode %o"
+msgstr "неочікуваний режим %o"
msgid "use the commit stored in the index instead of the submodule HEAD"
msgstr "викориÑтати коміт, збережений в індекÑÑ–, заміÑть Ð¿Ñ–Ð´Ð¼Ð¾Ð´ÑƒÐ»Ñ HEAD"
@@ -12771,8 +12891,8 @@ msgid ""
"Submodule work tree '%s' contains a .git directory. This will be replaced "
"with a .git file by using absorbgitdirs."
msgstr ""
-"Робоче дерево Ð¿Ñ–Ð´Ð¼Ð¾Ð´ÑƒÐ»Ñ \"%s\" міÑтить директорію .git. Її буде замінено на ."
-"git файл за допомогою absorbgitdirs."
+"Робоче дерево Ð¿Ñ–Ð´Ð¼Ð¾Ð´ÑƒÐ»Ñ \"%s\" міÑтить директорію .git. Її буде замінено "
+"на .git файл за допомогою absorbgitdirs."
#, c-format
msgid ""
@@ -13871,6 +13991,9 @@ msgid "try to match the new branch name with a remote-tracking branch"
msgstr ""
"Ñпробуйте ÑпівÑтавити нову назву гілки з назвою віддалено відÑтежуваної гілки"
+msgid "use relative paths for worktrees"
+msgstr "викориÑтовувати відноÑні шлÑхи Ð´Ð»Ñ Ñ€Ð¾Ð±Ð¾Ñ‡Ð¸Ñ… дерев"
+
#, c-format
msgid "options '%s', '%s', and '%s' cannot be used together"
msgstr "опції \"%s\", \"%s\" та \"%s\" не можна викориÑтовувати разом"
@@ -14149,6 +14272,25 @@ msgstr "неможливо Ñтворити \"%s\""
msgid "index-pack died"
msgstr "index-pack завершивÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾"
+#, c-format
+msgid "directory '%s' is present in index, but not sparse"
+msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ñ–Ñ \"%s\" приÑÑƒÑ‚Ð½Ñ Ð² індекÑÑ–, але не Ñ” розрідженою"
+
+msgid "corrupted cache-tree has entries not present in index"
+msgstr "пошкоджене cache-tree має запиÑи, Ñких немає в індекÑÑ–"
+
+#, c-format
+msgid "%s with flags 0x%x should not be in cache-tree"
+msgstr "%s з прапорцÑми 0x%x не Ñлід бути в cache-tree"
+
+#, c-format
+msgid "bad subtree '%.*s'"
+msgstr "невірне піддерево \"%.*s\""
+
+#, c-format
+msgid "cache-tree for path %.*s does not match. Expected %s got %s"
+msgstr "cache-tree Ð´Ð»Ñ ÑˆÐ»Ñху %.*s не Ñпівпадає. ОчікувалоÑÑŒ %s отримано %s"
+
msgid "terminating chunk id appears earlier than expected"
msgstr "ідентифікатор Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ð° зʼÑвивÑÑ Ñ€Ð°Ð½Ñ–ÑˆÐµ, ніж очікувалоÑÑŒ"
@@ -15007,16 +15149,16 @@ msgid ""
"to convert the grafts into replace refs.\n"
"\n"
"Turn this message off by running\n"
-"\"git config advice.graftFileDeprecated false\""
+"\"git config set advice.graftFileDeprecated false\""
msgstr ""
"Підтримка <GIT_DIR>/info/grafts заÑтаріла\n"
-"Ñ– буде вилучена в одній з наÑтупних верÑій Git.\n"
+"Ñ– буде вилучена у наÑтупній верÑÑ–Ñ— Git'у.\n"
"\n"
-"Будь лаÑка, ÑкориÑтайтеÑÑŒ \"git replace --convert-graft-file\"\n"
-"щоб перетворити щепи на заміни поÑилань.\n"
+"Будь лаÑка, викориÑтовуйте \"git replace --convert-graft-file\"\n"
+"щоб перетворити прищепи на замінювані поÑиланнÑ.\n"
"\n"
"Щоб вимкнути це повідомленнÑ, виконайте\n"
-"\"git config advice.graftFileDeprecated false\""
+"\"git config set advice.graftFileDeprecated false\""
#, c-format
msgid "commit %s exists in commit-graph but not in the object database"
@@ -15834,6 +15976,19 @@ msgstr "url не має Ñхеми: %s"
msgid "credential url cannot be parsed: %s"
msgstr "неможливо розібрати url облікових даних: %s"
+#, c-format
+msgid "invalid timeout '%s', expecting a non-negative integer"
+msgstr "неприпуÑтимий таймаут \"%s\", очікуєтьÑÑ Ð½ÐµÐ²Ñ–Ð´Ê¼Ñ”Ð¼Ð½Ðµ ціле чиÑло"
+
+#, c-format
+msgid "invalid init-timeout '%s', expecting a non-negative integer"
+msgstr ""
+"неприпуÑтимий початковий таймаут \"%s\", очікуєтьÑÑ Ð½ÐµÐ²Ñ–Ð´Ê¼Ñ”Ð¼Ð½Ðµ ціле чиÑло"
+
+#, c-format
+msgid "invalid max-connections '%s', expecting an integer"
+msgstr "неприпуÑтимі макÑимальні з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ \"%s\", очікуєтьÑÑ Ñ‡Ð¸Ñло"
+
msgid "in the future"
msgstr "у майбутньому"
@@ -16552,6 +16707,21 @@ msgstr "невірний шлÑÑ… до проÑтору імен git \"%s\""
msgid "too many args to run %s"
msgstr "забагато аргументів Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку %s"
+#, c-format
+msgid ""
+"You are attempting to fetch %s, which is in the commit graph file but not in "
+"the object database.\n"
+"This is probably due to repo corruption.\n"
+"If you are attempting to repair this repo corruption by refetching the "
+"missing object, use 'git fetch --refetch' with the missing object."
+msgstr ""
+"Ви намагаєтеÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ %s, Ñкий знаходитьÑÑ Ñƒ файлі коміт-графа, але не в "
+"базі даних обʼєктів.\n"
+"Ймовірно, це повʼÑзано з пошкодженнÑм репозиторію.\n"
+"Якщо ви намагаєтеÑÑ Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð¸Ñ‚Ð¸ це Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð½Ñ Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ñ–ÑŽ повторним "
+"отриманнÑм відÑутнього обʼєкта, ÑкориÑтайтеÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾ÑŽ \"git fetch --"
+"refetch\" з відÑутнім обʼєктом."
+
msgid "git fetch-pack: expected shallow list"
msgstr "git fetch-pack: очікувавÑÑ Ð½ÐµÐ³Ð»Ð¸Ð±Ð¾ÐºÐ¸Ð¹ ÑпиÑок"
@@ -17140,11 +17310,12 @@ msgstr[2] ""
#, 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`."
+"You can disable this warning with `git config set advice.ignoredHook false`."
msgstr ""
-"Гачок \"%s\" було проігноровано, оÑкільки він не визначений Ñк виконуваний.\n"
-"Ви можете вимкнути це Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð·Ð° допомогою \"git config advice."
-"ignoredHook false\"."
+"Гачок \"%s\" було проігноровано, оÑкільки він не визначений Ñк придатний Ð´Ð»Ñ "
+"виконаннÑ.\n"
+"Ви можете вимкнути це Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð·Ð° допомогою \"git config set "
+"advice.ignoredHook false\"."
msgid "not a git repository"
msgstr "не Ñ” git Ñховищем"
@@ -17161,15 +17332,9 @@ msgstr ""
msgid "Delegation control is not supported with cURL < 7.22.0"
msgstr "Контроль Ð´ÐµÐ»ÐµÐ³ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ підтримуєтьÑÑ Ð· cURL < 7.22.0"
-msgid "Public key pinning not supported with cURL < 7.39.0"
-msgstr "Ð—Ð°ÐºÑ€Ñ–Ð¿Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸Ñ… ключів не підтримуєтьÑÑ Ð· cURL < 7.39.0"
-
msgid "Unknown value for http.proactiveauth"
msgstr "Ðевідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ http.proactiveauth"
-msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
-msgstr "CURLSSLOPT_NO_REVOKE не підтримуєтьÑÑ Ð· cURL < 7.44.0"
-
#, c-format
msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
msgstr "Ðепідтримуваний SSL обробник \"%s\". Підтримувані SSL обробники:"
@@ -17330,13 +17495,16 @@ msgstr ""
msgid "Unable to create '%s.lock': %s"
msgstr "Ðе вдалоÑÑ Ñтворити \"%s.lock\": %s"
+msgid "unable to create temporary object directory"
+msgstr "не вдалоÑÑ Ñтворити тимчаÑову директорію обʼєкта"
+
#, c-format
msgid "could not write loose object index %s"
msgstr "не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати Ñ–Ð½Ð´ÐµÐºÑ Ð²Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ обʼєкта %s"
#, c-format
-msgid "failed to write loose object index %s\n"
-msgstr "не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати Ñ–Ð½Ð´ÐµÐºÑ Ð²Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ обʼєкта %s\n"
+msgid "failed to write loose object index %s"
+msgstr "не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати Ñ–Ð½Ð´ÐµÐºÑ Ð²Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ обʼєкта %s"
#, c-format
msgid "unexpected line: '%s'"
@@ -17353,6 +17521,10 @@ msgid "unable to format message: %s"
msgstr "не вдалоÑÑ Ð²Ñ–Ð´Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ допиÑ: %s"
#, c-format
+msgid "invalid marker-size '%s', expecting an integer"
+msgstr "неправильний розмір маркера \"%s\", очікуєтьÑÑ Ñ‡Ð¸Ñло"
+
+#, c-format
msgid "Failed to merge submodule %s (not checked out)"
msgstr "Ðе вдалоÑÑ Ð¾Ð±Ê¼Ñ”Ð´Ð½Ð°Ñ‚Ð¸ підмодуль %s (не активне)"
@@ -17887,6 +18059,17 @@ msgstr "не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ пакунок"
msgid "could not open index for %s"
msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ Ð´Ð»Ñ %s"
+#, c-format
+msgid "unable to link '%s' to '%s'"
+msgstr "не вдалоÑÑ Ð·Ð²Ê¼Ñзати \"%s\" з \"%s\""
+
+#, c-format
+msgid "failed to clear multi-pack-index at %s"
+msgstr "не вдалоÑÑ Ð¾Ñ‡Ð¸Ñтити multi-pack-index при %s"
+
+msgid "cannot write incremental MIDX with bitmap"
+msgstr "неможливо запиÑати інкрементний MIDX з bitmap"
+
msgid "ignoring existing multi-pack-index; checksum mismatch"
msgstr ""
"Ñ–Ð³Ð½Ð¾Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ñнуючого multi-pack-index; невідповідніÑть контрольних Ñум"
@@ -17916,18 +18099,33 @@ msgstr "немає файлів пакунків Ð´Ð»Ñ Ñ–Ð½Ð´ÐµÐºÑації."
msgid "refusing to write multi-pack .bitmap without any objects"
msgstr "відмовлено в запиÑÑ– мультіпакункового .bitmap без обʼєктів"
+msgid "unable to create temporary MIDX layer"
+msgstr "не вдалоÑÑ Ñтворити тимчаÑовий шар MIDX"
+
msgid "could not write multi-pack bitmap"
msgstr "не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати мультіпакунковий bitmap"
+msgid "unable to open multi-pack-index chain file"
+msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ ланцюжковий файл multi-pack-index"
+
+msgid "unable to rename new multi-pack-index layer"
+msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ñ‚Ð¸ новий multi-pack-index шар"
+
msgid "could not write multi-pack-index"
msgstr "не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати multi-pack-index"
+msgid "cannot expire packs from an incremental multi-pack-index"
+msgstr "неможливо видалити пакунки з інкрементним multi-pack-index"
+
msgid "Counting referenced objects"
msgstr "Підрахунок обʼєктів, на Ñкі Ñ” поÑиланнÑ"
msgid "Finding and deleting unreferenced packfiles"
msgstr "Пошук Ñ– Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² пакунків без поÑилань"
+msgid "cannot repack an incremental multi-pack-index"
+msgstr "неможливо перепакувати інкрементний multi-pack-index"
+
msgid "could not start pack-objects"
msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð¾Ñ‡Ð°Ñ‚Ð¸ pack-objects"
@@ -17990,6 +18188,27 @@ msgstr ""
"multi-pack-index назви пакунків знаходÑтьÑÑ Ñƒ невірній поÑлідовноÑті: \"%s\" "
"перед \"%s\""
+msgid "multi-pack-index chain file too small"
+msgstr "ланцюжковий файл multi-pack-index занадто малий"
+
+#, c-format
+msgid "pack count in base MIDX too high: %<PRIuMAX>"
+msgstr "кількіÑть пакунків у базовому MIDX занадто велика: %<PRIuMAX>"
+
+#, c-format
+msgid "object count in base MIDX too high: %<PRIuMAX>"
+msgstr "кількіÑть обʼєктів у базовому MIDX занадто велика: %<PRIuMAX>"
+
+#, c-format
+msgid "invalid multi-pack-index chain: line '%s' not a hash"
+msgstr "неприпуÑтимий multi-pack-index ланцюжок: Ñ€Ñдок \"%s\" не Ñ” хешем"
+
+msgid "unable to find all multi-pack index files"
+msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ вÑÑ– файли multi-pack-index"
+
+msgid "invalid MIDX object position, MIDX is likely corrupt"
+msgstr "неприпуÑтима Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ MIDX обʼєкта, ймовірно, MIDX пошкоджено"
+
#, c-format
msgid "bad pack-int-id: %u (%u total packs)"
msgstr "невірний pack-int-id: %u (%u вÑього пакунків)"
@@ -18008,10 +18227,6 @@ msgstr ""
msgid "multi-pack-index large offset out of bounds"
msgstr "large offset multi-pack-index виходить за межі"
-#, c-format
-msgid "failed to clear multi-pack-index at %s"
-msgstr "не вдалоÑÑ Ð¾Ñ‡Ð¸Ñтити multi-pack-index при %s"
-
msgid "multi-pack-index file exists, but failed to parse"
msgstr "multi-pack-index файл Ñ–Ñнує, але його не вдалоÑÑ Ñ€Ð¾Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸"
@@ -18221,6 +18436,14 @@ msgid "missing mapping of %s to %s"
msgstr "відÑутнє зіÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ %s до %s"
#, c-format
+msgid "unable to open %s"
+msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %s"
+
+#, c-format
+msgid "files '%s' and '%s' differ in contents"
+msgstr "файли \"%s\" та \"%s\" відрізнÑютьÑÑ Ð·Ð° вміÑтом"
+
+#, c-format
msgid "unable to write file %s"
msgstr "не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати файл %s"
@@ -18305,10 +18528,6 @@ msgid "%s is not a valid '%s' object"
msgstr "%s не Ñ” допуÑтимим \"%s\" обʼєктом"
#, c-format
-msgid "unable to open %s"
-msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %s"
-
-#, c-format
msgid "hash mismatch for %s (expected %s)"
msgstr "невідповідніÑть хешу Ð´Ð»Ñ %s (очікувалоÑÑŒ %s)"
@@ -18409,7 +18628,7 @@ msgid ""
"\n"
"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
+"running \"git config set advice.objectNameWarning false\""
msgstr ""
"Зазвичай Git ніколи не Ñтворює поÑиланнÑ, Ñке закінчуєтьÑÑ 40-hex "
"Ñимволами,\n"
@@ -18584,13 +18803,6 @@ msgstr "у мультіпакунковому bitmap відÑутній необ
msgid "could not open pack %s"
msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ пакунок %s"
-msgid "could not determine MIDX preferred pack"
-msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ бажаний пакунок MIDX"
-
-#, c-format
-msgid "preferred pack (%s) is invalid"
-msgstr "бажаний пакунок (%s) Ñ” неприпуÑтимим"
-
msgid "corrupt bitmap lookup table: triplet position out of index"
msgstr "пошкоджена bitmap Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ: триплетна Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ Ð¿Ð¾Ð·Ð° індекÑом"
@@ -19223,7 +19435,7 @@ msgstr "багатоÑтупеневі запиÑи Ð´Ð»Ñ Ð·Ð»Ð¸Ñ‚Ð¾Ð³Ð¾ фай
#, c-format
msgid "unordered stage entries for '%s'"
-msgstr "невпорÑдковані запиÑи індекÑу Ð´Ð»Ñ '%s'"
+msgstr "невпорÑдковані запиÑи індекÑу Ð´Ð»Ñ \"%s\""
#, c-format
msgid "unable to create load_cache_entries thread: %s"
@@ -19537,6 +19749,10 @@ msgid "expected format: %%(ahead-behind:<committish>)"
msgstr "очікуваний формат: %%(ahead-behind:<комітоподібне>)"
#, c-format
+msgid "expected format: %%(is-base:<committish>)"
+msgstr "очікуваний формат: %%(is-base:<комітоподібне>)"
+
+#, c-format
msgid "malformed field name: %.*s"
msgstr "невірно Ñформована назва полÑ: %.*s"
@@ -19711,18 +19927,26 @@ msgstr "лог Ð´Ð»Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ %s неÑподівано завершÐ
msgid "log for %s is empty"
msgstr "лог Ð´Ð»Ñ %s порожній"
-msgid "refusing to force and skip creation of reflog"
-msgstr "відмовлено в примуÑовому пропуÑку ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€ÐµÑ„Ð»Ð¾Ð³Ñƒ"
-
#, c-format
-msgid "refusing to update ref with bad name '%s'"
-msgstr "відмовлено в оновленні поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð· невірною назвою \"%s\""
+msgid "refusing to update reflog for pseudoref '%s'"
+msgstr "відмовлено в оновленні пÑевдопоÑÐ¸Ð»Ð°Ð½Ð½Ñ \"%s\""
#, c-format
msgid "refusing to update pseudoref '%s'"
msgstr "відмовлено в оновленні пÑевдопоÑÐ¸Ð»Ð°Ð½Ð½Ñ \"%s\""
#, c-format
+msgid "refusing to update reflog with bad name '%s'"
+msgstr "відмовлено в оновленні reflog з невірною назвою \"%s\""
+
+#, c-format
+msgid "refusing to update ref with bad name '%s'"
+msgstr "відмовлено в оновленні поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð· невірною назвою \"%s\""
+
+msgid "refusing to force and skip creation of reflog"
+msgstr "відмовлено в примуÑовому пропуÑку ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€ÐµÑ„Ð»Ð¾Ð³Ñƒ"
+
+#, c-format
msgid "update_ref failed for ref '%s': %s"
msgstr "update_ref завершивÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾ Ð´Ð»Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ \"%s\": %s"
@@ -19772,6 +19996,17 @@ msgstr ""
"призначеннÑм \"%s\", але це звичайне поÑиланнÑ"
#, c-format
+msgid "cannot read ref file '%s'"
+msgstr "неможливо прочитати файл поÑÐ¸Ð»Ð°Ð½Ð½Ñ \"%s\""
+
+#, c-format
+msgid "cannot open directory %s"
+msgstr "неможливо відкрити директорію %s"
+
+msgid "Checking references consistency"
+msgstr "Перевірка ÑÐ¿Ñ–Ð²Ð¿Ð°Ð´Ñ–Ð½Ð½Ñ Ð¿Ð¾Ñилань"
+
+#, c-format
msgid "refname is dangerous: %s"
msgstr "refname є небезпечним: %s"
@@ -19897,8 +20132,8 @@ msgstr "віддалений Ñервер надіÑлав неочікуванÐ
msgid "unable to rewind rpc post data - try increasing http.postBuffer"
msgstr ""
-"не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¼Ð¾Ñ‚Ð°Ñ‚Ð¸ вперед rpc post дані - Ñпробуйте збільшити http."
-"postBuffer"
+"не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¼Ð¾Ñ‚Ð°Ñ‚Ð¸ вперед rpc post дані - Ñпробуйте збільшити "
+"http.postBuffer"
#, c-format
msgid "remote-curl: bad line length character: %.4s"
@@ -19973,7 +20208,7 @@ msgstr "remote-curl: невідома команда \"%s\" з git"
#, c-format
msgid "config remote shorthand cannot begin with '/': %s"
-msgstr "ÑÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¾Ñ— конфігураціі не може починатиÑÑ Ð· '/': %s"
+msgstr "ÑÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¾Ñ— конфігураціі не може починатиÑÑ Ð· \"/\": %s"
msgid "more than one receivepack given, using the first"
msgstr "надано більше одного пакунка Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ, викориÑтано перший"
@@ -19982,8 +20217,12 @@ msgid "more than one uploadpack given, using the first"
msgstr "надано більше одного пакунка Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ, викориÑтано перший"
#, c-format
+msgid "unrecognized followRemoteHEAD value '%s' ignored"
+msgstr "нерозпізнане followRemoteHEAD Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ \"%s\" було проігноровано"
+
+#, c-format
msgid "unrecognized value transfer.credentialsInUrl: '%s'"
-msgstr "нерозпізнане Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ transfer.credentialsInUrl: '%s'"
+msgstr "нерозпізнане Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ transfer.credentialsInUrl: \"%s\""
#, c-format
msgid "URL '%s' uses plaintext credentials"
@@ -20003,11 +20242,11 @@ msgstr "%s відÑтежує Ñк %s, так Ñ– %s"
#, c-format
msgid "key '%s' of pattern had no '*'"
-msgstr "ключ '%s' шаблону не міÑтив '*'"
+msgstr "ключ \"%s\" шаблону не міÑтив '*'"
#, c-format
msgid "value '%s' of pattern has no '*'"
-msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ '%s' шаблону не міÑтить '*'"
+msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ \"%s\" шаблону не міÑтить '*'"
#, c-format
msgid "src refspec %s does not match any"
@@ -20106,11 +20345,11 @@ msgstr "HEAD не вказує на гілку"
#, c-format
msgid "no such branch: '%s'"
-msgstr "немає такої гілки: '%s'"
+msgstr "немає такої гілки: \"%s\""
#, c-format
msgid "no upstream configured for branch '%s'"
-msgstr "першоджерельне Ñховище не налаштовано Ð´Ð»Ñ Ð³Ñ–Ð»ÐºÐ¸ '%s'"
+msgstr "першоджерельне Ñховище не налаштовано Ð´Ð»Ñ Ð³Ñ–Ð»ÐºÐ¸ \"%s\""
#, c-format
msgid "upstream branch '%s' not stored as a remote-tracking branch"
@@ -20131,7 +20370,7 @@ msgid "push refspecs for '%s' do not include '%s'"
msgstr "надіÑлані визначники поÑилань Ð´Ð»Ñ \"%s\" не включають \"%s\""
msgid "push has no destination (push.default is 'nothing')"
-msgstr "надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ðµ має Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ (push.default дорівнює 'nothing')"
+msgstr "надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ðµ має Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ (push.default дорівнює \"nothing\")"
msgid "cannot resolve 'simple' push to a single destination"
msgstr ""
@@ -20184,7 +20423,7 @@ msgstr[0] ""
msgstr[1] ""
"Ваша гілка відÑтає від \"%s\" на %d коміти, Ñ– Ñ—Ñ— можна перемотати вперед.\n"
msgstr[2] ""
-"Ваша гілка відÑтає від гілки '%s' на %d комітів, Ñ– Ñ—Ñ— можна перемотати "
+"Ваша гілка відÑтає від гілки \"%s\" на %d комітів, Ñ– Ñ—Ñ— можна перемотати "
"вперед.\n"
msgid " (use \"git pull\" to update your local branch)\n"
@@ -20219,7 +20458,7 @@ msgstr "неможливо розібрати очікувану назву об
#, c-format
msgid "cannot strip one component off url '%s'"
-msgstr "неможливо вилучити один компонент з url '%s'"
+msgstr "неможливо вилучити один компонент з url \"%s\""
#, c-format
msgid "bad replace ref name: %s"
@@ -20429,12 +20668,15 @@ msgstr ""
msgid "create repository within 'src' directory"
msgstr "Ñтворити Ñховище в директорії \"src\""
+msgid "specify if tags should be fetched during clone"
+msgstr "вказати, чи потрібно отримувати теги під Ñ‡Ð°Ñ ÐºÐ»Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ"
+
msgid ""
"scalar clone [--single-branch] [--branch <main-branch>] [--full-clone]\n"
-"\t[--[no-]src] <url> [<enlistment>]"
+"\t[--[no-]src] [--[no-]tags] <url> [<enlistment>]"
msgstr ""
"scalar clone [--single-branch] [--branch <головна-гілка>] [--full-clone]\n"
-"\t[--[no-]src] <URL-адреÑа> [<коренева-директоріÑ>]"
+"\t[--[no-]src] [--[no-]tags] <URL-адреÑа> [<коренева-директоріÑ-проекту>]"
#, c-format
msgid "cannot deduce worktree name from '%s'"
@@ -20453,6 +20695,10 @@ msgid "could not configure remote in '%s'"
msgstr "не вдалоÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸ віддалене Ñховище в \"%s\""
#, c-format
+msgid "could not disable tags in '%s'"
+msgstr "не вдалоÑÑ Ð²Ð¸Ð¼ÐºÐ½ÑƒÑ‚Ð¸ теги в \"%s\""
+
+#, c-format
msgid "could not configure '%s'"
msgstr "не вдалоÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸ \"%s\""
@@ -20983,7 +21229,7 @@ msgid ""
msgstr ""
"\"reword\" не приймає коміти злиттÑ. Якщо ви хочете\n"
"відтворити Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ñ‚Ð° змінити текÑÑ‚ допиÑу, викориÑтовуйте\n"
-"\"merge -c\" Ð´Ð»Ñ ÐºÐ¾Ð¼Ñ–Ñ‚Ð°."
+"\"merge -c\" Ð´Ð»Ñ ÐºÐ¾Ð¼Ñ–Ñ‚Ð°"
#. TRANSLATORS: 'edit', 'merge -C' and 'break' should
#. not be translated.
@@ -21526,6 +21772,10 @@ msgid "failed to stat '%*s%s%s'"
msgstr "не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати \"%*s%s%s\""
#, c-format
+msgid "safe.directory '%s' not absolute"
+msgstr "safe.directory \"%s\" не Ñ” абÑолютною"
+
+#, c-format
msgid ""
"detected dubious ownership in repository at '%s'\n"
"%sTo add an exception for this directory, call:\n"
@@ -21863,7 +22113,7 @@ msgstr "Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ підмодуль \"%s\"."
#, c-format
msgid "submodule git dir '%s' is inside git dir '%.*s'"
-msgstr "підмодуль git dir \"%s\" знаходитьÑÑ Ð²Ñередині git директорії \"%*s\""
+msgstr "підмодуль git dir \"%s\" знаходитьÑÑ Ð²Ñередині git директорії \"%.*s\""
#, c-format
msgid "expected '%.*s' in submodule path '%s' not to be a symbolic link"
@@ -21936,6 +22186,9 @@ msgstr "коміт %s не позначений Ñк доÑÑжний"
msgid "too many commits marked reachable"
msgstr "забагато комітів позначено Ñк доÑÑжні"
+msgid "could not determine MIDX preferred pack"
+msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ бажаний пакунок MIDX"
+
msgid "test-tool serve-v2 [<options>]"
msgstr "test-tool serve-v2 [<опції>]"
@@ -22001,6 +22254,24 @@ msgstr "токен"
msgid "command token to send to the server"
msgstr "токен команди Ð´Ð»Ñ Ð²Ñ–Ð´Ð¿Ñ€Ð°Ð²ÐºÐ¸ на Ñервер"
+msgid "unit-test [<options>]"
+msgstr "unit-test [<опції>]"
+
+msgid "immediately exit upon the first failed test"
+msgstr "вихід відразу піÑÐ»Ñ Ð¿ÐµÑ€ÑˆÐ¾Ð³Ð¾ невдалого теÑту"
+
+msgid "suite[::test]"
+msgstr "suite[::test]"
+
+msgid "run only test suite or individual test <suite[::test]>"
+msgstr "запуÑтити тільки набір теÑтів або окремий теÑÑ‚ <suite[::test]>"
+
+msgid "suite"
+msgstr "набір"
+
+msgid "exclude test suite <suite>"
+msgstr "виключити набір теÑтів <suite>"
+
#, c-format
msgid "running trailer command '%s' failed"
msgstr "не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ команду трейлера \"%s\""
@@ -22580,6 +22851,9 @@ msgstr ".git файл пошкоджено"
msgid ".git file incorrect"
msgstr ".git файл не є коректним"
+msgid ".git file absolute/relative path mismatch"
+msgstr "неÑÐ¿Ñ–Ð²Ð¿Ð°Ð´Ñ–Ð½Ð½Ñ Ð°Ð±Ñолютного/відноÑного шлÑху до .git файлу"
+
msgid "not a valid path"
msgstr "неприпуÑтимий шлÑÑ…"
@@ -22595,6 +22869,9 @@ msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñховище; файл .git пошкÐ
msgid "gitdir unreadable"
msgstr "нечитабельна git директоріÑ"
+msgid "gitdir absolute/relative path mismatch"
+msgstr "неÑÐ¿Ñ–Ð²Ð¿Ð°Ð´Ñ–Ð½Ð½Ñ Ð°Ð±Ñолютного/відноÑного шлÑху git директорії"
+
msgid "gitdir incorrect"
msgstr "невірна git директоріÑ"
@@ -22630,6 +22907,13 @@ msgstr "не вдалоÑÑ Ñкинути %s в \"%s\""
msgid "failed to set extensions.worktreeConfig setting"
msgstr "не вдалоÑÑ Ð²Ñтановити extensions.worktreeConfig параметр"
+msgid "unable to upgrade repository format to support relative worktrees"
+msgstr ""
+"не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ формат Ñховища Ð´Ð»Ñ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ відноÑних робочих дерев"
+
+msgid "unable to set extensions.relativeWorktrees setting"
+msgstr "не вдалоÑÑ Ð²Ñтановити параметр extensions.relativeWorktrees"
+
#, c-format
msgid "could not setenv '%s'"
msgstr "не вдалоÑÑ Ð²Ñтановити змінну Ð¾Ñ‚Ð¾Ñ‡ÐµÐ½Ð½Ñ \"%s\""
@@ -22965,7 +23249,7 @@ msgstr ""
#, c-format
msgid "You are currently bisecting, started from branch '%s'."
-msgstr "Ðаразі ви робите біÑекцію, починаючи з гілки '%s'."
+msgstr "Ðаразі ви робите біÑекцію, починаючи з гілки \"%s\"."
msgid "You are currently bisecting."
msgstr "Ðаразі ви робите біÑекцію."
@@ -23198,6 +23482,9 @@ msgstr "\"%s.final\" міÑтить Ñтворений лиÑÑ‚.\n"
msgid "--dump-aliases incompatible with other options\n"
msgstr "--dump-aliases неÑуміÑна з іншими опціÑми\n"
+msgid "--dump-aliases and --translate-aliases are mutually exclusive\n"
+msgstr "--dump-aliases і --translate-aliases є взаємовиключними\n"
+
msgid ""
"fatal: found configuration options for 'sendmail'\n"
"git-send-email is configured with the sendemail.* options - note the 'e'.\n"
@@ -23370,8 +23657,8 @@ msgstr ""
" Ðаведений вище ÑпиÑок копій було розширено додатковими\n"
" адреÑами, знайденими у допиÑÑ– до коміту латки. Зазвичай\n"
" send-email запитує перед надÑиланнÑм, коли це траплÑєтьÑÑ.\n"
-" Цю поведінку можна контролювати за допомогою параметра sendemail."
-"confirm\n"
+" Цю поведінку можна контролювати за допомогою параметра "
+"sendemail.confirm\n"
" Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ—.\n"
"\n"
" Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ñ— інформації виконайте команду \"git send-email --"
diff --git a/po/vi.po b/po/vi.po
index 00008b50f5..80a5f191a8 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -4,11 +4,11 @@
# https://raw.githubusercontent.com/git-l10n/git-po/pot/main/po/git.pot
# ---
# Copyright (C) 2012-2022, Translation Project, Vietnamese Team <http://translationproject.org/team/vi.html>
-# Copyright (C) 2024, Vũ Tiến Hưng <newcomerminecraft@gmail.com>
+# Copyright (C) 2024-2025, Vũ Tiến Hưng <newcomerminecraft@gmail.com>
# Nguyá»…n Thái Ngá»c Duy <pclouds@gmail.com>, 2012.
# Äoàn Trần Công Danh <congdanhqx@gmail.com>, 2020.
# Trần Ngá»c Quân <vnwildman@gmail.com>, 2012-2022.
-# Vũ Tiến Hưng <newcomerminecraft@gmail.com>, 2024.
+# Vũ Tiến Hưng <newcomerminecraft@gmail.com>, 2024-2025.
# ---
# BẢNG THUẬT NGỮ / TERMINOLOGY
# Updated: 2024-07-26, git 2.46
@@ -64,10 +64,10 @@
# +------------------------------------------------------------------+
msgid ""
msgstr ""
-"Project-Id-Version: git 2.47\n"
+"Project-Id-Version: git 2.48\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2024-10-05 01:20+0000\n"
-"PO-Revision-Date: 2024-10-05 16:48+0700\n"
+"POT-Creation-Date: 2024-12-23 18:57+0000\n"
+"PO-Revision-Date: 2025-01-05 01:20+0700\n"
"Last-Translator: Vũ Tiến Hưng <newcomerminecraft@gmail.com>\n"
"Language-Team: Vietnamese <https://github.com/Nekosha/git-po>\n"
"Language: vi\n"
@@ -686,10 +686,10 @@ msgstr "Chỉ có các tập tin nhị phân thay đổi."
#, c-format
msgid ""
"\n"
-"Disable this message with \"git config advice.%s false\""
+"Disable this message with \"git config set advice.%s false\""
msgstr ""
"\n"
-"Tắt lá»i nhắn này bằng \"git config advice.%s false\""
+"Tắt lá»i nhắn này bằng \"git config set advice.%s false\""
#, c-format
msgid "%shint:%s%.*s%s\n"
@@ -1904,7 +1904,7 @@ msgid "update tracked files"
msgstr "cập nhật các tập tin được theo dõi"
msgid "renormalize EOL of tracked files (implies -u)"
-msgstr "thưá»ng hóa lại EOL cá»§a các tập tin được theo dõi (ngụ ý -u)"
+msgstr "thưá»ng hóa lại EOL cá»§a các tập tin được theo dõi (ngầm chỉ định -u)"
msgid "record only the fact that the path will be added later"
msgstr "chỉ ghi lại sá»± việc mà đưá»ng dẫn sẽ được thêm vào sau"
@@ -2017,7 +2017,7 @@ msgstr "không hiểu cú pháp %s"
#, c-format
msgid "'%s' was deleted by the applypatch-msg hook"
-msgstr "'%s' bị xóa bởi móc applypatch-msg"
+msgstr "'%s' bị xóa bởi hook applypatch-msg"
#, c-format
msgid "Malformed input line: '%s'."
@@ -3040,11 +3040,11 @@ msgid "HEAD not found below refs/heads!"
msgstr "Không tìm thấy HEAD ở dưới refs/heads!"
msgid ""
-"branch with --recurse-submodules can only be used if submodule."
-"propagateBranches is enabled"
+"branch with --recurse-submodules can only be used if "
+"submodule.propagateBranches is enabled"
msgstr ""
-"nhánh với --recurse-submodules chỉ có thể được sử dụng nếu submodule."
-"propagateBranches được kích hoạt"
+"nhánh với --recurse-submodules chỉ có thể được sử dụng nếu "
+"submodule.propagateBranches được kích hoạt"
msgid "--recurse-submodules can only be used to create branches"
msgstr "--recurse-submodules chỉ có thể được sử dụng để tạo ra các nhánh"
@@ -3125,7 +3125,7 @@ msgid "libc info: "
msgstr "thông tin libc: "
msgid "not run from a git repository - no hooks to show\n"
-msgstr "không chạy từ một kho git - nên chẳng có móc nào để hiển thị cả\n"
+msgstr "không chạy từ một kho git - nên chẳng có hook nào để hiển thị cả\n"
msgid ""
"git bugreport [(-o | --output-directory) <path>]\n"
@@ -3200,7 +3200,7 @@ msgid "System Info"
msgstr "Thông tin hệ thống"
msgid "Enabled Hooks"
-msgstr "Các Móc đã được bật"
+msgstr "Các hook đã được bật"
#, c-format
msgid "unable to write to %s"
@@ -3880,8 +3880,8 @@ msgstr "nhánh chưa sinh mới"
msgid "update ignored files (default)"
msgstr "cập nhật các tập tin bị bỠqua (mặc định)"
-msgid "do not check if another worktree is holding the given ref"
-msgstr "không kiểm tra nếu cây làm việc khác đang giữ tham chiếu đã cho"
+msgid "do not check if another worktree is using this branch"
+msgstr "không kiểm tra nếu cây làm việc khác đang sử dụng nhánh này"
msgid "checkout our version for unmerged files"
msgstr "checkout phiên bản của ta cho các tập tin chưa được hòa trộn"
@@ -4129,7 +4129,7 @@ msgid "create a bare repository"
msgstr "tạo kho bare"
msgid "create a mirror repository (implies --bare)"
-msgstr "tạo kho bản sao (ngụ ý --bare)"
+msgstr "tạo kho bản sao (ngầm chỉ định --bare)"
msgid "to clone from a local repository"
msgstr "để nhân bản từ kho nội bộ"
@@ -4182,11 +4182,11 @@ msgstr "tạo bản sao không đầy đủ cho mức sâu đã cho"
msgid "create a shallow clone since a specific time"
msgstr "tạo bản sao không đầy đủ từ thá»i Ä‘iểm đã cho"
-msgid "revision"
-msgstr "điểm xét duyệt"
+msgid "ref"
+msgstr "ref"
-msgid "deepen history of shallow clone, excluding rev"
-msgstr "làm sâu hơn lịch sử của bản sao shallow, bằng điểm xét duyệt loại trừ"
+msgid "deepen history of shallow clone, excluding ref"
+msgstr "làm sâu hơn lịch sử của bản sao shallow, loại trừ tham chiếu"
msgid "clone only one branch, HEAD or --branch"
msgstr "chỉ nhân bản một nhánh, HEAD hoặc --branch"
@@ -5068,7 +5068,7 @@ msgid "commit only specified files"
msgstr "chỉ chuyển giao các tập tin đã chỉ ra"
msgid "bypass pre-commit and commit-msg hooks"
-msgstr "vòng qua móc (hook) pre-commit và commit-msg"
+msgstr "bỠqua hook pre-commit và commit-msg"
msgid "show what would be committed"
msgstr "hiển thị xem cái gì có thể được chuyển giao"
@@ -5077,7 +5077,7 @@ msgid "amend previous commit"
msgstr "'tu bổ' (amend) lần commit trước"
msgid "bypass post-rewrite hook"
-msgstr "vòng qua móc (hook) post-rewrite"
+msgstr "bá» qua hook post-rewrite"
msgid "ok to record an empty change"
msgstr "ok để ghi lại một thay đổi trống rỗng"
@@ -5143,10 +5143,10 @@ msgstr ""
msgid ""
"git config unset [<file-option>] [--all] [--value=<value>] [--fixed-value] "
-"<name> <value>"
+"<name>"
msgstr ""
"git config unset [<tuỳ-chá»n>] [--all] [--value=<giá-trị>] [--fixed-value] "
-"<khoá> <giá-trị>"
+"<khoá>"
msgid "git config rename-section [<file-option>] <old-name> <new-name>"
msgstr "git config rename-section [<tuỳ-chá»n>] <tên-cÅ©> <tên-má»›i>"
@@ -5579,12 +5579,8 @@ msgid "traversed %lu commits\n"
msgstr "đã xuyên %lu qua lần chuyển giao\n"
#, c-format
-msgid ""
-"more than %i tags found; listed %i most recent\n"
-"gave up search at %s\n"
-msgstr ""
-"tìm thấy nhiá»u hÆ¡n %i thẻ; đã liệt kê %i cái gần\n"
-"đây nhất bỠđi tìm kiếm tại %s\n"
+msgid "found %i tags; gave up search at %s\n"
+msgstr "tìm thấy %i thẻ; từ bỠtìm kiếm tại %s\n"
#, c-format
msgid "describe %s\n"
@@ -6020,6 +6016,19 @@ msgstr "%s không phải là một đối tượng hợp lệ"
msgid "the object %s does not exist"
msgstr "đối tượng '%s' không tồn tại"
+#, c-format
+msgid ""
+"Run 'git remote set-head %s %s' to follow the change, or set\n"
+"'remote.%s.followRemoteHEAD' configuration option to a different value\n"
+"if you do not want to see this message. Specifically running\n"
+"'git config set remote.%s.followRemoteHEAD %s' will disable the warning\n"
+"until the remote changes HEAD to something else."
+msgstr ""
+"Chạy 'git remote set-head %s %s' để làm theo thay đổi, hoặc đặt tuỳ chá»n\n"
+"'remote.%s.followRemoteHEAD' sang giá trị khác nếu bạn không muốn thấy\n"
+"thông báo này. Cụ thể, 'git config set remote.%s.followRemoteHEAD %s'\n"
+"sẽ vô hiệu cảnh báo này tới khi máy chủ đổi HEAD vỠchỗ khác."
+
msgid "multiple branches detected, incompatible with --set-upstream"
msgstr "phát hiện nhiá»u nhánh, không tương thích vá»›i --set-upstream"
@@ -6157,6 +6166,9 @@ msgstr "refmap"
msgid "specify fetch refmap"
msgstr "chỉ ra refmap cần lấy vá»"
+msgid "revision"
+msgstr "điểm xét duyệt"
+
msgid "report that we have only objects reachable from this object"
msgstr "báo rằng ta chỉ có các đối tượng tiếp cận được từ đối tượng này"
@@ -6209,11 +6221,11 @@ msgid "protocol does not support --negotiate-only, exiting"
msgstr "giao thức không hỗ trợ --negotiate-only, nên thoát"
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 chỉ có thể được dùng với máy chủ được cấu hình bằng extensions."
-"partialclone"
+"--filter chỉ có thể được dùng với máy chủ được cấu hình bằng "
+"extensions.partialclone"
msgid "--atomic can only be used when fetching from one remote"
msgstr "--atomic chỉ có thể dùng khi lấy vỠtừ một máy chủ"
@@ -6882,8 +6894,24 @@ msgstr "hoặc là bộ lập lịch systemd hoặc là crontab không sẵn có
msgid "%s scheduler is not available"
msgstr "bộ lên lịch %s không sẵn có"
-msgid "another process is scheduling background maintenance"
-msgstr "má»™t tiến trình khác được lập kế hoạch chạy ná»n để bảo trì"
+#, c-format
+msgid ""
+"unable to create '%s.lock': %s.\n"
+"\n"
+"Another scheduled git-maintenance(1) process seems to be running in this\n"
+"repository. Please make sure no other maintenance processes are running and\n"
+"then try again. If it still fails, a git-maintenance(1) process may have\n"
+"crashed in this repository earlier: remove the file manually to continue."
+msgstr ""
+"Không thể tạo '%s.lock': %s.\n"
+"\n"
+"Tiến trình git-maintenance(1) khác có lẽ đang chạy ở kho này. Vui lòng\n"
+"chắc chắn rằng má»i tiến trình đã kết thúc và sau đó thá»­ lại. Nếu vẫn lá»—i,\n"
+"một tiến trình git-maintenance(1) có lẽ đã crash ở kho này trước đó:\n"
+"gõ bỠtập tin thủ công để tiếp tục."
+
+msgid "cannot acquire lock for scheduled background maintenance"
+msgstr "không thể lấy được lock để bảo trì ná»n theo kế hoạch"
msgid "git maintenance start [--scheduler=<scheduler>]"
msgstr "git maintenance start [--scheduler=<bộ lên lịch>]"
@@ -7250,8 +7278,8 @@ msgid ""
"git hook run [--ignore-missing] [--to-stdin=<path>] <hook-name> [-- <hook-"
"args>]"
msgstr ""
-"git hook run [--ignore-missing] [--to-stdin=</đưá»ng/dẫn/>] <tên-móc> [-- "
-"<các tham số cho móc>]"
+"git hook run [--ignore-missing] [--to-stdin=</đưá»ng/dẫn/>] <tên-hook> [-- "
+"<các tham số cho hook>]"
msgid "silently ignore missing requested <hook-name>"
msgstr "âm thầm bỠqua các <hook-name> đã yêu cầu còn thiếu"
@@ -7445,6 +7473,20 @@ msgid "chain length = %d: %lu object"
msgid_plural "chain length = %d: %lu objects"
msgstr[0] "chiá»u dài chuá»—i = %d: %lu đối tượng"
+msgid "could not start pack-objects to repack local links"
+msgstr "không thể bắt đầu pack-objects để đóng gói lại các link cục bộ"
+
+msgid "failed to feed local object to pack-objects"
+msgstr "gặp lỗi khi đưa local object cho pack-objects"
+
+msgid "index-pack: Expecting full hex object ID lines only from pack-objects."
+msgstr ""
+"index-pack: Äang chỉ cần các dòng ID đối tượng dạng hexa đầy đủ từ pack-"
+"objects."
+
+msgid "could not finish pack-objects to repack local links"
+msgstr "không thể hoàn tất pack-objects để đóng gói các link cục bộ"
+
msgid "Cannot come back to cwd"
msgstr "Không thể quay lại thư mục hiện hành"
@@ -7456,6 +7498,9 @@ msgstr "%s sai"
msgid "unknown hash algorithm '%s'"
msgstr "không hiểu thuật toán băm dữ liệu '%s'"
+msgid "--promisor cannot be used with a pack name"
+msgstr "không được dùng --promisor với tên pack"
+
msgid "--stdin requires a git repository"
msgstr "--stdin cần một kho git"
@@ -8101,7 +8146,8 @@ msgid "use full path names"
msgstr "dùng tên đưá»ng dẫn đầy đủ"
msgid "list entire tree; not just current directory (implies --full-name)"
-msgstr "liệt kê cây mục tin; không chỉ thư mục hiện hành (ngụ ý --full-name)"
+msgstr ""
+"liệt kê cây mục tin; không chỉ thư mục hiện hành (ngầm chỉ định --full-name)"
msgid "--format can't be combined with other format-altering options"
msgstr ""
@@ -8390,10 +8436,10 @@ msgid "continue the current in-progress merge"
msgstr "tiếp tục quá trình hòa trộn hiện tại đang thực hiện"
msgid "bypass pre-merge-commit and commit-msg hooks"
-msgstr "vòng qua móc (hook) pre-merge-commit và commit-msg"
+msgstr "bỠqua hook pre-merge-commit và commit-msg"
msgid "could not run stash."
-msgstr "không thể chạy stash."
+msgstr "không thể chạy tạm cất."
msgid "stash failed"
msgstr "lệnh tạm cất gặp lỗi"
@@ -8815,11 +8861,11 @@ msgstr "git notes [--ref <notes-ref>] [list [<đối-tượng>]]"
msgid ""
"git notes [--ref <notes-ref>] add [-f] [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
msgstr ""
"git notes [--ref <notes-ref>] add [-f] [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <lá»i-nhắn> | -F <tập-"
-"tin> | (-c | -C) <đối-tượng>] [<đối-tượng>]"
+"tin> | (-c | -C) <đối-tượng>] [<đối-tượng>] [-e]"
msgid "git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>"
msgstr "git notes [--ref <notes-ref>] copy [-f] <từ-đối-tượng> <đến-đối-tượng>"
@@ -8827,11 +8873,11 @@ msgstr "git notes [--ref <notes-ref>] copy [-f] <từ-đối-tượng> <đến-Ä
msgid ""
"git notes [--ref <notes-ref>] append [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
msgstr ""
"git notes [--ref <notes-ref>] append [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <lá»i-nhắn> | -F <tập-"
-"tin> | (-c | -C) <đối-tượng>] [<đối-tượng>]"
+"tin> | (-c | -C) <đối-tượng>] [<đối-tượng>] [-e]"
msgid "git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]"
msgstr "git notes [--ref <notes-ref>] edit [--allow-empty] [<đối-tượng>]"
@@ -8950,6 +8996,9 @@ msgstr "nội dung ghi chú (note) nằm trong một tập tin"
msgid "reuse and edit specified note object"
msgstr "dùng lại nhưng có sửa chữa đối tượng note đã chỉ ra"
+msgid "edit note message in editor"
+msgstr "sửa lại chú thích trong trình soạn thảo"
+
msgid "reuse specified note object"
msgstr "dùng lại đối tượng ghi chú (note) đã chỉ ra"
@@ -8988,7 +9037,7 @@ msgid "read objects from stdin"
msgstr "Ä‘á»c các đối tượng từ stdin"
msgid "load rewriting config for <command> (implies --stdin)"
-msgstr "tải cấu hình chép lại cho <lệnh> (ngụ ý --stdin)"
+msgstr "tải cấu hình chép lại cho <lệnh> (ngầm chỉ định --stdin)"
msgid "too few arguments"
msgstr "quá ít đối số"
@@ -9355,7 +9404,7 @@ msgid "limit pack window by memory in addition to object limit"
msgstr "giới hạn cửa sổ đóng gói theo bộ nhớ cộng thêm với giới hạn đối tượng"
msgid "maximum length of delta chain allowed in the resulting pack"
-msgstr "độ dài tối đa của chuỗi móc xích 'delta' được phép trong gói kết quả"
+msgstr "độ dài tối đa của chuỗi delta được phép trong gói kết quả"
msgid "reuse existing deltas"
msgstr "dùng lại các delta sẵn có"
@@ -9448,8 +9497,11 @@ msgstr "xử lý cho thiếu đối tượng"
msgid "do not pack objects in promisor packfiles"
msgstr "không thể đóng gói các đối tượng trong các tập tin gói promisor"
+msgid "implies --missing=allow-any"
+msgstr "ngầm chỉ định --missing=allow-any"
+
msgid "respect islands during delta compression"
-msgstr "tôn trá»ng island trong suốt quá trình nén 'delta'"
+msgstr "tôn trá»ng island trong suốt quá trình nén delta"
msgid "protocol"
msgstr "giao thức"
@@ -9584,7 +9636,7 @@ msgid "allow fast-forward"
msgstr "cho phép chuyển-tiếp-nhanh"
msgid "control use of pre-merge-commit and commit-msg hooks"
-msgstr "Ä‘iá»u khiển cách dùng các móc (hook) pre-merge-commit và commit-msg"
+msgstr "Ä‘iá»u khiển cách dùng các hook pre-merge-commit và commit-msg"
msgid "automatically stash/stash pop before and after"
msgstr "tự động stash/stash pop trước và sau"
@@ -9785,8 +9837,8 @@ msgid ""
msgstr ""
"\n"
"Äể tránh tá»± động cấu hình nhánh thượng nguồn khi tên cá»§a chúng\n"
-"không khá»›p vá»›i nhánh ná»™i bá»™, xem tùy chá»n 'simple' cá»§a branch."
-"autoSetupMerge\n"
+"không khá»›p vá»›i nhánh ná»™i bá»™, xem tùy chá»n 'simple' cá»§a "
+"branch.autoSetupMerge\n"
"trong 'git help config'.\n"
#, c-format
@@ -9994,7 +10046,7 @@ msgid "prune locally removed refs"
msgstr "xén tỉa những tham chiếu bị gỡ bá»"
msgid "bypass pre-push hook"
-msgstr "vòng qua móc tiá»n-đẩy (pre-push)"
+msgstr "bá» qua hook tiá»n-đẩy (pre-push)"
msgid "push missing but relevant tags"
msgstr "push phần bị thiếu nhưng các thẻ lại thích hợp"
@@ -10289,10 +10341,10 @@ msgid "use the merge-base of upstream and branch as the current base"
msgstr "sử dụng gốc hòa trộn của thượng nguồn và nhánh làm gốc hiện tại"
msgid "allow pre-rebase hook to run"
-msgstr "cho phép móc (hook) pre-rebase được chạy"
+msgstr "cho phép hook pre-rebase được chạy"
msgid "be quiet. implies --no-stat"
-msgstr "im lặng. ngụ ý --no-stat"
+msgstr "im lặng. ngầm chỉ định --no-stat"
msgid "display a diffstat of what changed upstream"
msgstr "hiển thị diffstat của những thay đổi thượng nguồn"
@@ -10526,14 +10578,14 @@ msgid "Current branch %s is up to date.\n"
msgstr "Nhánh hiện tại %s đã được cập nhật rồi.\n"
msgid "HEAD is up to date, rebase forced."
-msgstr "HEAD hiện đã được cập nhật rồi, bị ép buộc rebase."
+msgstr "HEAD hiện đã được cập nhật rồi, ép buộc rebase."
#, c-format
msgid "Current branch %s is up to date, rebase forced.\n"
-msgstr "Nhánh hiện tại %s đã được cập nhật rồi, lệnh rebase ép buộc.\n"
+msgstr "Nhánh hiện tại %s đã được cập nhật rồi, ép buộc rebase.\n"
msgid "The pre-rebase hook refused to rebase."
-msgstr "Móc (hook) pre-rebase từ chối rebase."
+msgstr "Hook pre-rebase từ chối rebase."
#, c-format
msgid "Changes to %s:\n"
@@ -10546,7 +10598,7 @@ msgstr "Thay đổi từ %s thành %s:\n"
#, c-format
msgid "First, rewinding head to replay your work on top of it...\n"
msgstr ""
-"Trước tiên, di chuyển head để xem lại các công việc trên đỉnh của nó...\n"
+"Trước tiên, di chuyển lại head để thực hiện lại các thay đổi trên nó...\n"
msgid "Could not detach HEAD"
msgstr "Không thể tách rá»i HEAD"
@@ -11048,6 +11100,29 @@ msgid " Local ref configured for 'git push'%s:"
msgid_plural " Local refs configured for 'git push'%s:"
msgstr[0] " Những tham chiếu nội bộ được cấu hình cho lệnh 'git push'%s:"
+#, c-format
+msgid "'%s/HEAD' is unchanged and points to '%s'\n"
+msgstr "'%s/HEAD' không đổi và trỠđến '%s'\n"
+
+#, c-format
+msgid "'%s/HEAD' has changed from '%s' and now points to '%s'\n"
+msgstr "'%s/HEAD' đã đổi từ '%s' để trỠđến '%s'\n"
+
+#, c-format
+msgid "'%s/HEAD' is now created and points to '%s'\n"
+msgstr "'%s/HEAD' đã tạo và trỠđến '%s'\n"
+
+#, c-format
+msgid "'%s/HEAD' was detached at '%s' and now points to '%s'\n"
+msgstr "'%s/HEAD' đã tách ra ở '%s' và trỠđến '%s'\n"
+
+#, c-format
+msgid ""
+"'%s/HEAD' used to point to '%s' (which is not a remote branch), but now "
+"points to '%s'\n"
+msgstr ""
+"'%s/HEAD' từng trỠđến '%s' (không phải nhánh máy chủ) và giỠtrỠđến '%s'\n"
+
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr "đặt refs/remotes/<tên>/HEAD cho phù hợp với máy chủ"
@@ -11069,7 +11144,7 @@ msgid "Not a valid ref: %s"
msgstr "Không phải là tham chiếu hợp lệ: %s"
#, c-format
-msgid "Could not setup %s"
+msgid "Could not set up %s"
msgstr "Không thể cài đặt %s"
#, c-format
@@ -12955,7 +13030,7 @@ msgid "don't print cloning progress"
msgstr "đừng in tiến trình nhân bản"
msgid "disallow cloning into non-empty directory, implies --init"
-msgstr "không cho phép nhân bản vào thư mục trống, ngụ ý --init"
+msgstr "không cho phép nhân bản vào thư mục trống, ngầm chỉ định --init"
msgid ""
"git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] "
@@ -13778,6 +13853,9 @@ msgstr "cài đặt chế độ theo dõi (xem git-branch(1))"
msgid "try to match the new branch name with a remote-tracking branch"
msgstr "có khớp tên tên nhánh mới với một nhánh theo dõi máy chủ"
+msgid "use relative paths for worktrees"
+msgstr "dùng đưá»ng dẫn tương đối cho thư mục làm việc"
+
#, c-format
msgid "options '%s', '%s', and '%s' cannot be used together"
msgstr "tùy chá»n '%s', '%s' và '%s' không thể dùng cùng nhau"
@@ -14049,6 +14127,25 @@ msgstr "không thể tạo '%s'"
msgid "index-pack died"
msgstr "index-pack đã chết"
+#, c-format
+msgid "directory '%s' is present in index, but not sparse"
+msgstr "Thư mục '%s' có ở trong chỉ mục, mà không phải dạng sparse?"
+
+msgid "corrupted cache-tree has entries not present in index"
+msgstr "cache-tree bị há»ng, chứa mục không có trong chỉ mục"
+
+#, c-format
+msgid "%s with flags 0x%x should not be in cache-tree"
+msgstr "%s với cỠ0x%x không nên có trong cache-tree"
+
+#, c-format
+msgid "bad subtree '%.*s'"
+msgstr "subtree sai '%.*s'"
+
+#, c-format
+msgid "cache-tree for path %.*s does not match. Expected %s got %s"
+msgstr "cache-tree cho đưá»ng dẫn %.*s không khá»›p. Cần %s nhưng có %s"
+
msgid "terminating chunk id appears earlier than expected"
msgstr "id chunk kết thúc sá»›m hÆ¡n bình thưá»ng"
@@ -14264,7 +14361,7 @@ msgid "Display help information about Git"
msgstr "Hiển thị thông tin trợ giúp vỠGit"
msgid "Run git hooks"
-msgstr "Chạy các móc git"
+msgstr "Chạy các hook git"
msgid "Server side implementation of Git over HTTP"
msgstr "Hỗ trợ phía máy chủ của Git qua HTTP"
@@ -14930,7 +15027,7 @@ msgid ""
"to convert the grafts into replace refs.\n"
"\n"
"Turn this message off by running\n"
-"\"git config advice.graftFileDeprecated false\""
+"\"git config set advice.graftFileDeprecated false\""
msgstr ""
"Hỗ trợ cho <GIT_DIR>/info/grafts đã không còn\n"
"và sẽ bị xóa bỠở phiên bản Git tương lai.\n"
@@ -14939,7 +15036,7 @@ msgstr ""
"để chuyển đổi các graft thành các tham chiếu thay thế.\n"
"\n"
"Tắt lá»i nhắn này bằng cách chạy\n"
-"\"git config advice.graftFileDeprecated false\""
+"\"git config set advice.graftFileDeprecated false\""
#, c-format
msgid "commit %s exists in commit-graph but not in the object database"
@@ -15750,6 +15847,18 @@ msgstr "url không có lược đồ: %s"
msgid "credential url cannot be parsed: %s"
msgstr "không hiểu cú pháp giấy chứng thực url: %s"
+#, c-format
+msgid "invalid timeout '%s', expecting a non-negative integer"
+msgstr "timeout không hợp lệ '%s', cần số nguyên không âm"
+
+#, c-format
+msgid "invalid init-timeout '%s', expecting a non-negative integer"
+msgstr "init-timeout không hợp lệ '%s', cần số nguyên không âm"
+
+#, c-format
+msgid "invalid max-connections '%s', expecting an integer"
+msgstr "max-connections không hợp lệ '%s', cần số nguyên"
+
msgid "in the future"
msgstr "ở tương lai"
@@ -16445,6 +16554,20 @@ msgstr "đưá»ng dẫn không gian tên git \"%s\" sai"
msgid "too many args to run %s"
msgstr "quá nhiá»u tham số để chạy %s"
+#, c-format
+msgid ""
+"You are attempting to fetch %s, which is in the commit graph file but not in "
+"the object database.\n"
+"This is probably due to repo corruption.\n"
+"If you are attempting to repair this repo corruption by refetching the "
+"missing object, use 'git fetch --refetch' with the missing object."
+msgstr ""
+"Bạn đang muốn lấy vỠ%s, nằm trong tập tin đồ-thị-chuyển-giao nhưng nằm "
+"ngoài cơ sở dữ liệu đối tượng.\n"
+"Nhiá»u khả năng kho chứa đã bị há»ng.\n"
+"Nếu bạn đang cần sửa chữa lại kho chứa bằng cách lấy vỠđối tượng còn thiếu, "
+"dùng 'git fetch --refetch' với đối tượng đó."
+
msgid "git fetch-pack: expected shallow list"
msgstr "git fetch-pack: cần danh sách shallow"
@@ -16878,8 +17001,8 @@ msgid ""
"given pattern contains NULL byte (via -f <file>). This is only supported "
"with -P under PCRE v2"
msgstr ""
-"mẫu đã cho có chứa NULL byte (qua -f <file>). Äiá»u này chỉ được há»— trợ vá»›i -"
-"P dưới PCRE v2"
+"mẫu đã cho có chứa NULL byte (qua -f <file>). Äiá»u này chỉ được há»— trợ vá»›i "
+"-P dưới PCRE v2"
#, c-format
msgid "'%s': unable to read %s"
@@ -17023,10 +17146,10 @@ msgstr[0] ""
#, 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`."
+"You can disable this warning with `git config set advice.ignoredHook false`."
msgstr ""
-"Móc '%s' bị bỠqua bởi vì nó không có cỠthực thi được.\n"
-"Bạn có thể tắt cảnh báo này bằng 'git config advice.ignoredHook false'."
+"Hook '%s' bị bỠqua bởi vì nó không có cỠthực thi được.\n"
+"Bạn có thể tắt cảnh báo này bằng 'git config set advice.ignoredHook false'."
msgid "not a git repository"
msgstr "không phải là kho git"
@@ -17042,15 +17165,9 @@ msgstr "giá trị âm cho http.postBuffer; đặt thành mặc định là %d"
msgid "Delegation control is not supported with cURL < 7.22.0"
msgstr "Äiá»u khiển giao quyá»n không được há»— trợ vá»›i cURL < 7.22.0"
-msgid "Public key pinning not supported with cURL < 7.39.0"
-msgstr "Chốt khóa công không được hỗ trợ với cURL < 7.39.0"
-
msgid "Unknown value for http.proactiveauth"
msgstr "không hiểu giá trị cho http.proactiveauth"
-msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
-msgstr "CURLSSLOPT_NO_REVOKE không được hỗ trợ với cURL < 7.44.0"
-
#, c-format
msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
msgstr ""
@@ -17204,7 +17321,7 @@ msgstr ""
"Tiến trình git khác có lẽ đang chạy ở kho này, ví dụ\n"
"một trình soạn thảo được mở bởi 'git commit'. Vui lòng chắc chắn\n"
"rằng má»i tiến trình đã kết thúc và sau đó thá»­ lại. Nếu vẫn lá»—i,\n"
-"một tiến trình git có lẽ đã crash khi thực hiện ở kho này trước đó:\n"
+"một tiến trình git có lẽ đã crash ở kho này trước đó:\n"
"gõ bỠtập tin một cách thủ công để tiếp tục."
#, c-format
@@ -17237,8 +17354,12 @@ msgid "unable to format message: %s"
msgstr "không thể định dạng thông điệp: %s"
#, c-format
+msgid "invalid marker-size '%s', expecting an integer"
+msgstr "marker-size không hợp lệ '%s', cần số nguyên"
+
+#, c-format
msgid "Failed to merge submodule %s (not checked out)"
-msgstr "Gặp lỗi khi hòa trộn mô-đun-con %s (không checkout được)"
+msgstr "Gặp lỗi khi hòa trộn mô-đun-con %s (không checkout)"
#, c-format
msgid "Failed to merge submodule %s (no merge base)"
@@ -18335,7 +18456,7 @@ msgid ""
"\n"
"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
+"running \"git config set advice.objectNameWarning false\""
msgstr ""
"Git thưá»ng không bao giá» tạo tham chiếu kết thúc vá»›i 40 ký tá»± hex\n"
"bởi vì nó sẽ bị bỠqua khi bạn chỉ định 40 ký tự hex. Những tham chiếu\n"
@@ -18344,8 +18465,8 @@ msgstr ""
" git switch -c $br $(git rev-parse ...)\n"
"\n"
"với \"$br\" không hiểu lý do vì sao rỗng và tạo ra tham chiếu 40-hex.\n"
-" Xin hãy kiểm tra những tham chiếu này và xóa chúng đi nếu cần. Tắt\n"
-"lá»i nhắn này bằng cách chạy lệnh \"git config advice.objectNameWarning "
+"Xin hãy kiểm tra những tham chiếu này và xóa chúng đi nếu cần. Tắt\n"
+"lá»i nhắn này bằng cách chạy lệnh \"git config set advice.objectNameWarning "
"false\""
#, c-format
@@ -18502,13 +18623,6 @@ msgstr "bitmap multi-pack thiếu chỉ mục để dành cần thiết"
msgid "could not open pack %s"
msgstr "không thể mở gói '%s'"
-msgid "could not determine MIDX preferred pack"
-msgstr "không thể xác định gói MIDX ưa dùng"
-
-#, c-format
-msgid "preferred pack (%s) is invalid"
-msgstr "preferred pack (%s) không hợp lệ"
-
msgid "corrupt bitmap lookup table: triplet position out of index"
msgstr "bảng tìm kiếm bitmap bị há»ng: vị trí bá»™ ba nằm ngoài chỉ mục"
@@ -19619,18 +19733,26 @@ msgstr "nhật ký cho tham chiếu %s kết thúc bất ngỠtrên %s"
msgid "log for %s is empty"
msgstr "nhật ký cho %s trống rỗng"
-msgid "refusing to force and skip creation of reflog"
-msgstr "từ chối bỠqua việc tạo log tham chiếu"
-
#, c-format
-msgid "refusing to update ref with bad name '%s'"
-msgstr "từ chối cập nhật tham chiếu với tên sai '%s'"
+msgid "refusing to update reflog for pseudoref '%s'"
+msgstr "từ chối cập nhật reflog cho tham chiếu ảo '%s'"
#, c-format
msgid "refusing to update pseudoref '%s'"
msgstr "từ chối cập nhật tham chiếu ảo '%s'"
#, c-format
+msgid "refusing to update reflog with bad name '%s'"
+msgstr "từ chối cập nhật reflog với tên sai '%s'"
+
+#, c-format
+msgid "refusing to update ref with bad name '%s'"
+msgstr "từ chối cập nhật tham chiếu với tên sai '%s'"
+
+msgid "refusing to force and skip creation of reflog"
+msgstr "từ chối bỠqua việc tạo log tham chiếu"
+
+#, c-format
msgid "update_ref failed for ref '%s': %s"
msgstr "update_ref bị lỗi cho ref '%s': %s"
@@ -19642,7 +19764,7 @@ msgid "ref updates forbidden inside quarantine environment"
msgstr "cập nhật tham chiếu bị cấm trong môi trưá»ng kiểm tra"
msgid "ref updates aborted by hook"
-msgstr "các cập nhật tham chiếu bị huỷ bỠbởi móc"
+msgstr "các cập nhật tham chiếu bị huỷ bỠbởi hook"
#, c-format
msgid "'%s' exists; cannot create '%s'"
@@ -19680,6 +19802,10 @@ msgstr ""
"tham chiếu thưá»ng"
#, c-format
+msgid "cannot read ref file '%s'"
+msgstr "không thể Ä‘á»c tập tin ref '%s'"
+
+#, c-format
msgid "cannot open directory %s"
msgstr "không thể mở thư mục %s"
@@ -19887,6 +20013,10 @@ msgid "more than one uploadpack given, using the first"
msgstr "đã đưa ra nhiá»u hÆ¡n má»™t gói tải lên, Ä‘ang sá»­ dụng cái đầu tiên"
#, c-format
+msgid "unrecognized followRemoteHEAD value '%s' ignored"
+msgstr "bỠqua giá trị không chấp nhận cho followRemoteHEAD '%s'"
+
+#, c-format
msgid "unrecognized value transfer.credentialsInUrl: '%s'"
msgstr "không chấp nhận giá trị transfer.credentialsInUrl: '%s'"
@@ -20650,7 +20780,7 @@ msgstr ""
" git rebase --continue\n"
msgid "'prepare-commit-msg' hook failed"
-msgstr "móc 'prepare-commit-msg' bị lỗi"
+msgstr "hook 'prepare-commit-msg' bị lỗi"
msgid ""
"Your name and email address were configured automatically based\n"
@@ -21812,6 +21942,9 @@ msgstr "lần chuyển giao %s chưa được đánh dấu là tiếp cận đư
msgid "too many commits marked reachable"
msgstr "có quá nhiá»u lần chuyển giao được đánh dấu là tiếp cận được"
+msgid "could not determine MIDX preferred pack"
+msgstr "không thể xác định gói MIDX ưa dùng"
+
msgid "test-tool serve-v2 [<options>]"
msgstr "test-tool serve-v2 [<các tùy chá»n>]"
@@ -22478,6 +22611,9 @@ msgstr "tập tin .git bị há»ng"
msgid ".git file incorrect"
msgstr "tập tin .git không chính xác"
+msgid ".git file absolute/relative path mismatch"
+msgstr "đưá»ng dẫn tương đối/tuyệt đối đến file .git không khá»›p"
+
msgid "not a valid path"
msgstr "không phải là má»™t đưá»ng dẫn hợp lệ"
@@ -22493,6 +22629,9 @@ msgstr "không thể định vị kho chứa; tập tin .git bị há»ng"
msgid "gitdir unreadable"
msgstr "gitdir không thể Ä‘á»c được"
+msgid "gitdir absolute/relative path mismatch"
+msgstr "đưá»ng dẫn tương đối/tuyệt đối đến gitdir không khá»›p"
+
msgid "gitdir incorrect"
msgstr "gitdir không chính xác"
@@ -22527,6 +22666,13 @@ msgstr "không thể bỠđặt %s trong '%s'"
msgid "failed to set extensions.worktreeConfig setting"
msgstr "gặp lỗi khi đặt cài đặt extensions.worktreeConfig"
+msgid "unable to upgrade repository format to support relative worktrees"
+msgstr ""
+"không thể nâng cấp định định dạng kho chứa để hỗ trợ cây làm việc tương đối"
+
+msgid "unable to set extensions.relativeWorktrees setting"
+msgstr "gặp lỗi khi đặt cài đặt extensions.relativeWorktrees"
+
#, c-format
msgid "could not setenv '%s'"
msgstr "không thể setenv '%s'"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 55d2aee627..12a0fb510b 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -154,8 +154,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2024-10-05 03:31+0800\n"
-"PO-Revision-Date: 2024-10-05 03:32+0800\n"
+"POT-Creation-Date: 2025-01-02 20:43+0800\n"
+"PO-Revision-Date: 2025-01-05 19:01+0800\n"
"Last-Translator: Teng Long <dyroneteng@gmail.com>\n"
"Language-Team: GitHub <https://github.com/dyrone/git/>\n"
"Language: zh_CN\n"
@@ -886,10 +886,10 @@ msgstr "åªæœ‰äºŒè¿›åˆ¶æ–‡ä»¶è¢«ä¿®æ”¹ã€‚"
#, c-format
msgid ""
"\n"
-"Disable this message with \"git config advice.%s false\""
+"Disable this message with \"git config set advice.%s false\""
msgstr ""
"\n"
-"使用 \"git config advice.%s false\" æ¥å…³é—­æ­¤æ¶ˆæ¯"
+"使用 \"git config set advice.%s false\" æ¥å…³é—­æ­¤æ¶ˆæ¯"
#: advice.c
#, c-format
@@ -1778,9 +1778,10 @@ msgstr "䏿˜¯ä¸€ä¸ªæœ‰æ•ˆçš„对象å:%s"
msgid "not a tree object: %s"
msgstr "䏿˜¯ä¸€ä¸ªæ ‘对象:%s"
-#: archive.c builtin/clone.c
-msgid "unable to checkout working tree"
-msgstr "ä¸èƒ½æ£€å‡ºå·¥ä½œåŒº"
+#: archive.c
+#, c-format
+msgid "failed to unpack tree object %s"
+msgstr "无法解包树对象 %s"
#: archive.c
#, c-format
@@ -1957,7 +1958,7 @@ msgstr "忽略过大的 gitattributes æ•°æ®å¯¹è±¡ '%s'"
#: attr.c
msgid "cannot use --attr-source or GIT_ATTR_SOURCE without repo"
-msgstr "无法在没有存储库的情况下使用 --attr-source 或 GIT_ATTR_SOURCE"
+msgstr "无法在没有仓库的情况下使用 --attr-source 或 GIT_ATTR_SOURCE"
#: attr.c
msgid "bad --attr-source or GIT_ATTR_SOURCE"
@@ -4813,7 +4814,7 @@ msgstr "未知的冲çªé£Žæ ¼ '%s'"
msgid "perform a 3-way merge with the new branch"
msgstr "和新的分支执行三方åˆå¹¶"
-#: builtin/checkout.c builtin/log.c parse-options.h
+#: builtin/checkout.c builtin/log.c builtin/range-diff.c parse-options.h
msgid "style"
msgstr "风格"
@@ -4842,8 +4843,8 @@ msgid "update ignored files (default)"
msgstr "更新忽略的文件(默认)"
#: builtin/checkout.c
-msgid "do not check if another worktree is holding the given ref"
-msgstr "䏿£€æŸ¥æŒ‡å®šçš„引用是å¦è¢«å…¶ä»–工作区所å ç”¨"
+msgid "do not check if another worktree is using this branch"
+msgstr "䏿£€æŸ¥å…¶ä»–å·¥ä½œåŒºæ˜¯å¦æ­£åœ¨ä½¿ç”¨è¯¥åˆ†æ”¯"
#: builtin/checkout.c
msgid "checkout our version for unmerged files"
@@ -5222,14 +5223,13 @@ msgstr "创建一个指定深度的浅克隆"
msgid "create a shallow clone since a specific time"
msgstr "从一个特定时间创建一个浅克隆"
-#: builtin/clone.c builtin/fetch.c builtin/pull.c builtin/rebase.c
-#: builtin/replay.c
-msgid "revision"
-msgstr "版本"
+#: builtin/clone.c builtin/fetch.c builtin/pull.c
+msgid "ref"
+msgstr "引用"
#: builtin/clone.c builtin/fetch.c builtin/pull.c
-msgid "deepen history of shallow clone, excluding rev"
-msgstr "深化浅克隆的历å²ï¼Œé™¤äº†ç‰¹å®šç‰ˆæœ¬"
+msgid "deepen history of shallow clone, excluding ref"
+msgstr "深化浅克隆的历å²ï¼Œé™¤äº†ç»™å®šçš„引用"
#: builtin/clone.c builtin/submodule--helper.c
msgid "clone only one branch, HEAD or --branch"
@@ -5391,6 +5391,10 @@ msgid "remote HEAD refers to nonexistent ref, unable to checkout"
msgstr "远程 HEAD 指å‘一个ä¸å­˜åœ¨çš„引用,无法检出"
#: builtin/clone.c
+msgid "unable to checkout working tree"
+msgstr "ä¸èƒ½æ£€å‡ºå·¥ä½œåŒº"
+
+#: builtin/clone.c
msgid "unable to write parameters to config file"
msgstr "æ— æ³•å°†å‚æ•°å†™å…¥é…置文件"
@@ -6368,10 +6372,9 @@ msgstr ""
#: builtin/config.c
msgid ""
"git config unset [<file-option>] [--all] [--value=<value>] [--fixed-value] "
-"<name> <value>"
+"<name>"
msgstr ""
-"git config unset [<文件选项>] [--all] [--value=<值>] [--fixed-value] <åç§°> <"
-"值>"
+"git config unset [<文件选项>] [--all] [--value=<值>] [--fixed-value] <åç§°>"
#: builtin/config.c
msgid "git config rename-section [<file-option>] <old-name> <new-name>"
@@ -6915,12 +6918,8 @@ msgstr "å·²é历 %lu 个æäº¤\n"
#: builtin/describe.c
#, c-format
-msgid ""
-"more than %i tags found; listed %i most recent\n"
-"gave up search at %s\n"
-msgstr ""
-"å‘现多于 %i 个标签,列出最近的 %i 个\n"
-"在 %s 放弃æœç´¢\n"
+msgid "found %i tags; gave up search at %s\n"
+msgstr "找到 %i 个标签;在 %s 处放弃æœç´¢\n"
#: builtin/describe.c
#, c-format
@@ -7469,6 +7468,21 @@ msgid "the object %s does not exist"
msgstr "对象 '%s' ä¸å­˜åœ¨"
#: builtin/fetch.c
+#, c-format
+msgid ""
+"Run 'git remote set-head %s %s' to follow the change, or set\n"
+"'remote.%s.followRemoteHEAD' configuration option to a different value\n"
+"if you do not want to see this message. Specifically running\n"
+"'git config set remote.%s.followRemoteHEAD %s' will disable the warning\n"
+"until the remote changes HEAD to something else."
+msgstr ""
+"è¿è¡Œ 'git remote set-head %s %s' ä»¥è·Ÿéšæ›´æ”¹ï¼Œæˆ–者\n"
+"å¦‚æžœæ‚¨ä¸æƒ³çœ‹åˆ°æ­¤æ¶ˆæ¯ï¼Œåˆ™å°†'remote.%s.followRemoteHEAD' é…置选项设置为ä¸åŒçš„"
+"值。\n"
+"特别地,è¿è¡Œ 'git config set remote.%s.followRemoteHEAD %s' å°†ç¦ç”¨è­¦å‘Šï¼Œç›´åˆ°"
+"远程将 HEAD 更改为其他内容。\""
+
+#: builtin/fetch.c
msgid "multiple branches detected, incompatible with --set-upstream"
msgstr "检测到多分支,和 --set-upstream ä¸å…¼å®¹"
@@ -7635,6 +7649,10 @@ msgstr "引用映射"
msgid "specify fetch refmap"
msgstr "æŒ‡å®šèŽ·å–æ“作的引用映射"
+#: builtin/fetch.c builtin/pull.c builtin/rebase.c builtin/replay.c
+msgid "revision"
+msgstr "版本"
+
#: builtin/fetch.c builtin/pull.c
msgid "report that we have only objects reachable from this object"
msgstr "æŠ¥å‘Šæˆ‘ä»¬åªæ‹¥æœ‰ä»Žè¯¥å¯¹è±¡å¼€å§‹å¯è¾¾çš„对象"
@@ -7830,7 +7848,7 @@ msgstr "存储ç€ä»“库路径列表的é…置项键å"
#: builtin/for-each-repo.c
msgid "keep going even if command fails in a repository"
-msgstr "å³ä½¿å­˜å‚¨åº“中的命令失败,ä»ç»§ç»­æ‰§è¡Œ"
+msgstr "å³ä½¿ä»“库中的命令失败,ä»ç»§ç»­æ‰§è¡Œ"
#: builtin/for-each-repo.c
msgid "missing --config=<config>"
@@ -8546,8 +8564,24 @@ msgid "%s scheduler is not available"
msgstr "%s 调度器ä¸å¯ç”¨"
#: builtin/gc.c
-msgid "another process is scheduling background maintenance"
-msgstr "å¦å¤–一个进程正è¿è¡ŒäºŽåŽå°ç»´æŠ¤"
+#, c-format
+msgid ""
+"unable to create '%s.lock': %s.\n"
+"\n"
+"Another scheduled git-maintenance(1) process seems to be running in this\n"
+"repository. Please make sure no other maintenance processes are running and\n"
+"then try again. If it still fails, a git-maintenance(1) process may have\n"
+"crashed in this repository earlier: remove the file manually to continue."
+msgstr ""
+"无法创建 '%s.lock':%s。\n"
+"\n"
+"å¦ä¸€ä¸ªå·²è®¡åˆ’çš„ git-maintenance(1) 进程似乎正在该仓库中è¿è¡Œã€‚\n"
+"è¯·ç¡®ä¿æ²¡æœ‰å…¶ä»–维护进程正在è¿è¡Œï¼Œç„¶åŽé‡è¯•。如果ä»ç„¶è¿è¡Œå¤±è´¥ï¼Œåˆ™\n"
+"git-maintenance(1) 进程å¯èƒ½ä¹‹å‰å·²åœ¨æ­¤ä»“库中崩溃:请手动删除该文件以继续。"
+
+#: builtin/gc.c
+msgid "cannot acquire lock for scheduled background maintenance"
+msgstr "无法获å–计划的åŽå°ç»´æŠ¤é”"
#: builtin/gc.c
msgid "git maintenance start [--scheduler=<scheduler>]"
@@ -9273,6 +9307,23 @@ msgstr[0] "链长 = %d: %lu 对象"
msgstr[1] "链长 = %d: %lu 对象"
#: builtin/index-pack.c
+msgid "could not start pack-objects to repack local links"
+msgstr "无法å¯åЍ pack-objects æ¥é‡æ–°æ‰“包本地链接"
+
+#: builtin/index-pack.c
+msgid "failed to feed local object to pack-objects"
+msgstr "无法将本地对象æä¾›ç»™ pack-objects"
+
+#: builtin/index-pack.c
+msgid "index-pack: Expecting full hex object ID lines only from pack-objects."
+msgstr ""
+"index-pack:期望仅从 pack-objects 的输出行中获得完整的å六进制对象 ID。"
+
+#: builtin/index-pack.c
+msgid "could not finish pack-objects to repack local links"
+msgstr "æ— æ³•å®Œæˆ pack-objects æ¥é‡æ–°æ‰“包本地链接"
+
+#: builtin/index-pack.c
msgid "Cannot come back to cwd"
msgstr "无法返回当å‰å·¥ä½œç›®å½•"
@@ -9287,6 +9338,10 @@ msgid "unknown hash algorithm '%s'"
msgstr "未知的哈希算法 '%s'"
#: builtin/index-pack.c
+msgid "--promisor cannot be used with a pack name"
+msgstr "--promisor 无法与包å称一起使用"
+
+#: builtin/index-pack.c
msgid "--stdin requires a git repository"
msgstr "--stdin éœ€è¦ git 仓库"
@@ -11002,11 +11057,11 @@ msgstr "git notes [--ref <注解引用>] [list [<对象>]]"
msgid ""
"git notes [--ref <notes-ref>] add [-f] [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
msgstr ""
"git notes [--ref <注解引用>] add [-f] [--allow-empty] [--[no-]separator|--"
"separator=<分段符>] [--[no-]stripspace] [-m <说明> | -F <文件> | (-c | -C) <"
-"对象>] [<对象>]"
+"对象>] [<对象>] [-e]"
#: builtin/notes.c
msgid "git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>"
@@ -11016,11 +11071,11 @@ msgstr "git notes [--ref <注解引用>] copy [-f] <æºå¯¹è±¡> <目标对象>"
msgid ""
"git notes [--ref <notes-ref>] append [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
msgstr ""
"git notes [--ref <注解引用>] append [--allow-empty] [--[no-]separator|--"
"separator=<分段符>] [--[no-]stripspace] [-m <说明> | -F <文件> | (-c | -C) <"
-"对象>] [<对象>]"
+"对象>] [<对象>] [-e]"
#: builtin/notes.c
msgid "git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]"
@@ -11172,6 +11227,10 @@ msgid "reuse and edit specified note object"
msgstr "é‡ç”¨å’Œç¼–辑指定的注解对象"
#: builtin/notes.c
+msgid "edit note message in editor"
+msgstr "在编辑器中编辑注释说明"
+
+#: builtin/notes.c
msgid "reuse specified note object"
msgstr "é‡ç”¨æŒ‡å®šçš„æ³¨è§£å¯¹è±¡"
@@ -11785,6 +11844,10 @@ msgid "do not pack objects in promisor packfiles"
msgstr "ä¸è¦æ‰“包 promisor 包文件中的对象"
#: builtin/pack-objects.c
+msgid "implies --missing=allow-any"
+msgstr "æš—å« --missing=allow-any"
+
+#: builtin/pack-objects.c
msgid "respect islands during delta compression"
msgstr "在增é‡åŽ‹ç¼©æ—¶å‚考数æ®å²›"
@@ -13669,6 +13732,33 @@ msgstr[0] " 为 'git push' é…置的本地引用%s:"
msgstr[1] " 为 'git push' é…置的本地引用%s:"
#: builtin/remote.c
+#, c-format
+msgid "'%s/HEAD' is unchanged and points to '%s'\n"
+msgstr "'%s/HEAD' 未改å˜å¹¶æŒ‡å‘ '%s'\n"
+
+#: builtin/remote.c
+#, c-format
+msgid "'%s/HEAD' has changed from '%s' and now points to '%s'\n"
+msgstr "'%s/HEAD' 已从 '%s' æ›´æ”¹ï¼ŒçŽ°åœ¨æŒ‡å‘ '%s'\n"
+
+#: builtin/remote.c
+#, c-format
+msgid "'%s/HEAD' is now created and points to '%s'\n"
+msgstr "'%s/HEAD' çŽ°å·²åˆ›å»ºå¹¶æŒ‡å‘ '%s'\n"
+
+#: builtin/remote.c
+#, c-format
+msgid "'%s/HEAD' was detached at '%s' and now points to '%s'\n"
+msgstr "'%s/HEAD' 在 '%s' å¤„åˆ†ç¦»å¹¶ä¸”çŽ°åœ¨æŒ‡å‘ '%s'\n"
+
+#: builtin/remote.c
+#, c-format
+msgid ""
+"'%s/HEAD' used to point to '%s' (which is not a remote branch), but now "
+"points to '%s'\n"
+msgstr "'%s/HEAD' æ›¾æŒ‡å‘ '%s'ï¼ˆä¸æ˜¯è¿œç¨‹åˆ†æ”¯ï¼‰ï¼Œä½†çŽ°åœ¨æŒ‡å‘ '%s'\n"
+
+#: builtin/remote.c
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr "æ ¹æ®è¿œç¨‹è®¾ç½® refs/remotes/<åç§°>/HEAD"
@@ -13696,7 +13786,7 @@ msgstr "䏿˜¯ä¸€ä¸ªæœ‰æ•ˆå¼•用:%s"
#: builtin/remote.c
#, c-format
-msgid "Could not setup %s"
+msgid "Could not set up %s"
msgstr "ä¸èƒ½è®¾ç½® %s"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
@@ -17034,6 +17124,10 @@ msgstr "设置跟踪模å¼ï¼ˆå‚è§ git-branch(1))"
msgid "try to match the new branch name with a remote-tracking branch"
msgstr "å°è¯•为新分支å匹é…一个远程跟踪分支"
+#: builtin/worktree.c
+msgid "use relative paths for worktrees"
+msgstr "对工作区使用相对路径"
+
#: builtin/worktree.c diff.c parse-options.c
#, c-format
msgid "options '%s', '%s', and '%s' cannot be used together"
@@ -17370,6 +17464,30 @@ msgstr "ä¸èƒ½åˆ›å»º '%s'"
msgid "index-pack died"
msgstr "index-pack 终止"
+#: cache-tree.c
+#, c-format
+msgid "directory '%s' is present in index, but not sparse"
+msgstr "目录 '%s' å­˜åœ¨äºŽç´¢å¼•ä¸­ï¼Œä½†ä¸æ˜¯ç¨€ç–çš„"
+
+#: cache-tree.c unpack-trees.c
+msgid "corrupted cache-tree has entries not present in index"
+msgstr "æŸå的缓存树包å«ç´¢å¼•中ä¸å­˜åœ¨çš„æ¡ç›®"
+
+#: cache-tree.c
+#, c-format
+msgid "%s with flags 0x%x should not be in cache-tree"
+msgstr "标志ä½ä¸º 0x%2$x çš„ %1$s ä¸åº”ä½äºŽç¼“存树中"
+
+#: cache-tree.c
+#, c-format
+msgid "bad subtree '%.*s'"
+msgstr "æŸåçš„å­æ ‘ '%.*s'"
+
+#: cache-tree.c
+#, c-format
+msgid "cache-tree for path %.*s does not match. Expected %s got %s"
+msgstr "路径 %.*s 的缓存树ä¸åŒ¹é…。预期为 %s,实际为 %s"
+
#: chunk-format.c
msgid "terminating chunk id appears earlier than expected"
msgstr "ç»ˆæ­¢å— ID 比预期更早出现"
@@ -18477,15 +18595,15 @@ msgid ""
"to convert the grafts into replace refs.\n"
"\n"
"Turn this message off by running\n"
-"\"git config advice.graftFileDeprecated false\""
+"\"git config set advice.graftFileDeprecated false\""
msgstr ""
"对 <GIT_DIR>/info/grafts 的支æŒå·²è¿‡æ—¶ï¼Œå¹¶å°†åœ¨\n"
"未æ¥çš„Git版本中被移除。\n"
"\n"
"请使用 \"git replace --convert-graft-file\" 将\n"
-"grafts 转æ¢ä¸ºæ›¿æ¢å¼•用。\n"
+"(æäº¤ï¼‰ç§»æ¤è½¬æ¢ä¸ºæ›¿æ¢å¼•用。\n"
"\n"
-"设置 \"git config advice.graftFileDeprecated false\"\n"
+"è¿è¡Œ \"git config set advice.graftFileDeprecated false\"\n"
"å¯å…³é—­æœ¬æ¶ˆæ¯"
#: commit.c
@@ -19485,6 +19603,21 @@ msgstr "URL 没有 scheme:%s"
msgid "credential url cannot be parsed: %s"
msgstr "ä¸èƒ½è§£æžå‡­æ® URL:%s"
+#: daemon.c
+#, c-format
+msgid "invalid timeout '%s', expecting a non-negative integer"
+msgstr "无效的超时值 '%s',应为éžè´Ÿæ•´æ•°"
+
+#: daemon.c
+#, c-format
+msgid "invalid init-timeout '%s', expecting a non-negative integer"
+msgstr "无效的åˆå§‹è¶…时值 '%s',应为éžè´Ÿæ•´æ•°"
+
+#: daemon.c
+#, c-format
+msgid "invalid max-connections '%s', expecting an integer"
+msgstr "无效的最大连接数 '%s',应为一个整数"
+
#: date.c
msgid "in the future"
msgstr "在将æ¥"
@@ -20352,6 +20485,20 @@ msgid "too many args to run %s"
msgstr "执行 %s çš„å‚æ•°å¤ªå¤š"
#: fetch-pack.c
+#, c-format
+msgid ""
+"You are attempting to fetch %s, which is in the commit graph file but not in "
+"the object database.\n"
+"This is probably due to repo corruption.\n"
+"If you are attempting to repair this repo corruption by refetching the "
+"missing object, use 'git fetch --refetch' with the missing object."
+msgstr ""
+"您正在å°è¯•èŽ·å– %s,它ä½äºŽæäº¤å›¾æ–‡ä»¶ä¸­ï¼Œä½†ä¸åœ¨å¯¹è±¡æ•°æ®åº“中。\n"
+"è¿™å¯èƒ½æ˜¯ç”±äºŽä»“库æŸå造æˆçš„。\n"
+"如果您å°è¯•é€šè¿‡é‡æ–°èŽ·å–丢失的对象æ¥ä¿®å¤æ­¤ä»“库æŸå,请对丢失的对象使用 'git "
+"fetch --refetch'。"
+
+#: fetch-pack.c
msgid "git fetch-pack: expected shallow list"
msgstr "git fetch-pack:应为 shallow 列表"
@@ -21062,10 +21209,10 @@ msgstr[1] ""
#, 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`."
+"You can disable this warning with `git config set advice.ignoredHook false`."
msgstr ""
"å› ä¸ºæ²¡æœ‰å°†é’©å­ '%s' è®¾ç½®ä¸ºå¯æ‰§è¡Œï¼Œé’©å­è¢«å¿½ç•¥ã€‚您å¯ä»¥é€šè¿‡\n"
-"é…ç½® `git config advice.ignoredHook false` æ¥å…³é—­è¿™æ¡è­¦å‘Šã€‚"
+"é…ç½® `git config set advice.ignoredHook false` æ¥å…³é—­è¿™æ¡è­¦å‘Šã€‚"
#: http-fetch.c
msgid "not a git repository"
@@ -21086,18 +21233,10 @@ msgid "Delegation control is not supported with cURL < 7.22.0"
msgstr "䏿”¯æŒå§”托控制,因为 cURL < 7.22.0"
#: http.c
-msgid "Public key pinning not supported with cURL < 7.39.0"
-msgstr "䏿”¯æŒå…¬é’¥æ–‡ä»¶é”定,因为 cURL < 7.39.0"
-
-#: http.c
msgid "Unknown value for http.proactiveauth"
msgstr "http.proactiveauth 为未知å–值"
#: http.c
-msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
-msgstr "䏿”¯æŒ CURLSSLOPT_NO_REVOKE,因为 cURL < 7.44.0"
-
-#: http.c
#, c-format
msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
msgstr "䏿”¯æŒçš„ SSL åŽç«¯ '%s'。支æŒçš„ SSL åŽç«¯ï¼š"
@@ -21316,6 +21455,11 @@ msgstr "检测到被引用的 CRLF"
msgid "unable to format message: %s"
msgstr "无法格å¼åŒ–消æ¯ï¼š%s"
+#: merge-ll.c
+#, c-format
+msgid "invalid marker-size '%s', expecting an integer"
+msgstr "æ— æ•ˆçš„æ ‡è®°å¤§å° '%s',应为一个整数"
+
#: merge-ort.c merge-recursive.c
#, c-format
msgid "Failed to merge submodule %s (not checked out)"
@@ -22623,7 +22767,7 @@ msgid ""
"\n"
"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
+"running \"git config set advice.objectNameWarning false\""
msgstr ""
"Git 通常ä¸ä¼šåˆ›å»ºä¸€ä¸ªä»¥40个åå…­è¿›åˆ¶å­—ç¬¦ç»“å°¾çš„å¼•ç”¨ï¼Œå› ä¸ºå½“æ‚¨åªæä¾›40\n"
"个å六进制字符时将被忽略。这些引用å¯èƒ½è¢«é”™è¯¯åœ°åˆ›å»ºã€‚例如:\n"
@@ -22631,7 +22775,7 @@ msgstr ""
" git switch -c $br $(git rev-parse ...)\n"
"\n"
"当 \"$br\" æŸç§åŽŸå› ç©ºç™½æ—¶ï¼Œä¸€ä¸ª40ä½å六进制的引用将被创建。请检查这些\n"
-"引用,å¯èƒ½éœ€è¦åˆ é™¤å®ƒä»¬ã€‚è¿è¡Œ \"git config advice.objectNameWarning\n"
+"引用,å¯èƒ½éœ€è¦åˆ é™¤å®ƒä»¬ã€‚è¿è¡Œ \"git config set advice.objectNameWarning\n"
"false\" 命令关闭本消æ¯é€šçŸ¥ã€‚"
#: object-name.c
@@ -22826,15 +22970,6 @@ msgstr "多包ä½å›¾ç¼ºå°‘必需的åå‘索引"
msgid "could not open pack %s"
msgstr "ä¸èƒ½æ‰“开包 %s"
-#: pack-bitmap.c t/helper/test-read-midx.c
-msgid "could not determine MIDX preferred pack"
-msgstr "ä¸èƒ½ç¡®å®šå¤šåŒ…索引的首选包"
-
-#: pack-bitmap.c
-#, c-format
-msgid "preferred pack (%s) is invalid"
-msgstr "首选包 (%s) 无效"
-
#: pack-bitmap.c
msgid "corrupt bitmap lookup table: triplet position out of index"
msgstr "æŸåçš„ä½å›¾æŸ¥è¯¢è¡¨ï¼šä¸‰å…ƒç»„ä½ç½®è¶…出索引"
@@ -24170,8 +24305,19 @@ msgid "log for %s is empty"
msgstr "%s 的日志为空"
#: refs.c
-msgid "refusing to force and skip creation of reflog"
-msgstr "æ‹’ç»æ—¢å¼ºåˆ¶åˆè·³è¿‡åˆ›å»ºå¼•用日志"
+#, c-format
+msgid "refusing to update reflog for pseudoref '%s'"
+msgstr "æ‹’ç»ä¸ºä¼ªå¼•用 '%s' 更新引用日志"
+
+#: refs.c
+#, c-format
+msgid "refusing to update pseudoref '%s'"
+msgstr "æ‹’ç»æ›´æ–°ä¼ªå¼•用 '%s'"
+
+#: refs.c
+#, c-format
+msgid "refusing to update reflog with bad name '%s'"
+msgstr "æ‹’ç»ä½¿ç”¨é”™è¯¯åç§° '%s' 更新引用日志"
#: refs.c
#, c-format
@@ -24179,9 +24325,8 @@ msgid "refusing to update ref with bad name '%s'"
msgstr "æ‹’ç»æ›´æ–°æœ‰é”™è¯¯åç§° '%s' 的引用"
#: refs.c
-#, c-format
-msgid "refusing to update pseudoref '%s'"
-msgstr "æ‹’ç»æ›´æ–°ä¼ªå¼•用 '%s'"
+msgid "refusing to force and skip creation of reflog"
+msgstr "æ‹’ç»å¼ºåˆ¶è·³è¿‡åˆ›å»ºå¼•用日志"
#: refs.c
#, c-format
@@ -24244,6 +24389,11 @@ msgstr "无法é”定引用 '%s':预期目标为 '%s' 的符å·å¼•用:但是æ
#: refs/files-backend.c
#, c-format
+msgid "cannot read ref file '%s'"
+msgstr "无法读å–引用文件 '%s'"
+
+#: refs/files-backend.c
+#, c-format
msgid "cannot open directory %s"
msgstr "无法打开目录 %s"
@@ -24500,6 +24650,11 @@ msgstr "æä¾›äº†ä¸€ä¸ªä»¥ä¸Šçš„ uploadpack,使用第一个"
#: remote.c
#, c-format
+msgid "unrecognized followRemoteHEAD value '%s' ignored"
+msgstr "已忽略无法识别的 followRemoteHEAD 值 '%s'"
+
+#: remote.c
+#, c-format
msgid "unrecognized value transfer.credentialsInUrl: '%s'"
msgstr "无法识别的 transfer.credentialsInUrl 值:'%s'"
@@ -26810,6 +26965,10 @@ msgstr "æäº¤ %s 没有标记为å¯è¾¾"
msgid "too many commits marked reachable"
msgstr "太多æäº¤æ ‡è®°ä¸ºå¯è¾¾"
+#: t/helper/test-read-midx.c
+msgid "could not determine MIDX preferred pack"
+msgstr "ä¸èƒ½ç¡®å®šå¤šåŒ…索引的首选包"
+
#: t/helper/test-serve-v2.c
msgid "test-tool serve-v2 [<options>]"
msgstr "test-tool serve-v2 [<选项>]"
@@ -27585,6 +27744,10 @@ msgid ".git file incorrect"
msgstr ".git æ–‡ä»¶ä¸æ­£ç¡®"
#: worktree.c
+msgid ".git file absolute/relative path mismatch"
+msgstr ".git 文件ç»å¯¹/相对路径ä¸åŒ¹é…"
+
+#: worktree.c
msgid "not a valid path"
msgstr "䏿˜¯ä¸€ä¸ªæœ‰æ•ˆçš„路径"
@@ -27605,6 +27768,10 @@ msgid "gitdir unreadable"
msgstr "gitdir ä¸å¯è¯»"
#: worktree.c
+msgid "gitdir absolute/relative path mismatch"
+msgstr "gitdir ç»å¯¹/相对路径ä¸åŒ¹é…"
+
+#: worktree.c
msgid "gitdir incorrect"
msgstr "gitdir 䏿­£ç¡®"
@@ -27648,6 +27815,14 @@ msgstr "无法在 '%2$s' 䏭喿¶ˆè®¾ç½® %1$s"
msgid "failed to set extensions.worktreeConfig setting"
msgstr "无法设置 extensions.worktreeConfig"
+#: worktree.c
+msgid "unable to upgrade repository format to support relative worktrees"
+msgstr "无法å‡çº§ä»“库格å¼ä»¥æ”¯æŒç›¸å¯¹å·¥ä½œåŒº"
+
+#: worktree.c
+msgid "unable to set extensions.relativeWorktrees setting"
+msgstr "无法设定 extensions.relativeWorktrees 的设置"
+
#: wrapper.c
#, c-format
msgid "could not setenv '%s'"
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 5e6818f453..a61f544304 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -30,8 +30,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2024-10-05 01:20+0000\n"
-"PO-Revision-Date: 2024-10-05 15:45+0800\n"
+"POT-Creation-Date: 2024-12-28 13:16+0800\n"
+"PO-Revision-Date: 2024-12-28 13:23+0800\n"
"Last-Translator: Yi-Jyun Pan <pan93412@gmail.com>\n"
"Language-Team: Chinese (Traditional) <http://weblate.slat.org/projects/git-"
"po/git-cli/zh_Hant/>\n"
@@ -764,10 +764,10 @@ msgstr "åªæœ‰äºŒé€²ä½æª”案更動了。"
#, c-format
msgid ""
"\n"
-"Disable this message with \"git config advice.%s false\""
+"Disable this message with \"git config set advice.%s false\""
msgstr ""
"\n"
-"請使用「git config advice.%s falseã€åœç”¨æ­¤è¨Šæ¯"
+"請使用「git config set advice.%s falseã€åœç”¨æ­¤è¨Šæ¯"
#: advice.c
#, c-format
@@ -941,12 +941,12 @@ msgstr "引數éŽå¤š"
#: apply.c
#, c-format
msgid "unrecognized whitespace option '%s'"
-msgstr "空白字元é¸é …「%sã€ç„¡æ³•識別"
+msgstr "空白字元é¸é …「%sã€ä¸èªè­˜"
#: apply.c
#, c-format
msgid "unrecognized whitespace ignore option '%s'"
-msgstr "空白字元忽略é¸é …「%sã€ç„¡æ³•識別"
+msgstr "空白字元忽略é¸é …「%sã€ä¸èªè­˜"
#: apply.c archive.c builtin/add.c builtin/branch.c builtin/checkout-index.c
#: builtin/checkout.c builtin/clean.c builtin/clone.c builtin/commit.c
@@ -1081,7 +1081,7 @@ msgstr "二進ä½ä¿®è£œæª”在第 %d 列æå£žï¼š%.*s"
#: apply.c
#, c-format
msgid "unrecognized binary patch at line %d"
-msgstr "第 %d 列的二進ä½ä¿®è£œæª”無法識別"
+msgstr "第 %d 列的二進ä½ä¿®è£œæª”ä¸èªè­˜"
#: apply.c
#, c-format
@@ -2620,7 +2620,7 @@ msgstr ""
#: builtin/am.c builtin/reset.c
#, c-format
msgid "Could not parse object '%s'."
-msgstr "無法解æžã€Œ%sã€ç‰©ä»¶ã€‚"
+msgstr "無法解æžç‰©ä»¶ã€Œ%sã€ã€‚"
#: builtin/am.c
msgid "failed to clean index"
@@ -2917,7 +2917,7 @@ msgstr "「%sã€ä¸æ˜¯æœ‰æ•ˆçš„æäº¤"
#, c-format
msgid ""
"could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
-msgstr "ä¸èƒ½ç°½å‡ºåŽŸå§‹ HEAD「%sã€ã€‚請嘗試「git bisect reset <commit>ã€ã€‚"
+msgstr "無法簽出原始 HEAD「%sã€ã€‚請嘗試「git bisect reset <commit>ã€ã€‚"
#: builtin/bisect.c
#, c-format
@@ -3021,7 +3021,7 @@ msgstr "「 ã€ä¸æ˜¯æœ‰æ•ˆè¡“語"
#: builtin/bisect.c
#, c-format
msgid "unrecognized option: '%s'"
-msgstr "無法識別é¸é …:「%sã€"
+msgstr "ä¸èªè­˜é¸é …:「%sã€"
#: builtin/bisect.c
#, c-format
@@ -3460,7 +3460,7 @@ msgstr "ç„¡æ³•è§£æžæ ¼å¼åŒ–字串"
#: builtin/branch.c
msgid "could not resolve HEAD"
-msgstr "ç„¡æ³•è§£æž HEAD 指標"
+msgstr "ç„¡æ³•è§£æž HEAD"
#: builtin/branch.c
#, c-format
@@ -4689,7 +4689,7 @@ msgstr "未知的è¡çªè¼¸å‡ºé¢¨æ ¼ã€Œ%sã€"
msgid "perform a 3-way merge with the new branch"
msgstr "和新分支進行三方åˆä½µ"
-#: builtin/checkout.c builtin/log.c parse-options.h
+#: builtin/checkout.c builtin/log.c builtin/range-diff.c parse-options.h
msgid "style"
msgstr "style"
@@ -4718,8 +4718,8 @@ msgid "update ignored files (default)"
msgstr "更新忽略的檔案(é è¨­å€¼ï¼‰"
#: builtin/checkout.c
-msgid "do not check if another worktree is holding the given ref"
-msgstr "䏿ª¢æŸ¥å…¶ä»–å·¥ä½œå€æ˜¯å¦æ­£åœ¨ä½”用指定的引用"
+msgid "do not check if another worktree is using this branch"
+msgstr "䏿ª¢æŸ¥å…¶ä»–å·¥ä½œå€æ˜¯å¦æ­£åœ¨ä½¿ç”¨æ­¤åˆ†æ”¯"
#: builtin/checkout.c
msgid "checkout our version for unmerged files"
@@ -4875,7 +4875,7 @@ msgstr "無法移除 %s"
#: builtin/clean.c
#, c-format
msgid "could not lstat %s\n"
-msgstr "ä¸èƒ½å° %s 進行 lstat\n"
+msgstr "ç„¡æ³•å° %s 進行 lstat\n"
#: builtin/clean.c
msgid "Refusing to remove current working directory\n"
@@ -5099,14 +5099,13 @@ msgstr "建立指定深度的淺層複製"
msgid "create a shallow clone since a specific time"
msgstr "建立從指定時間到ç¾åœ¨çš„æ·ºå±¤è¤‡è£½"
-#: builtin/clone.c builtin/fetch.c builtin/pull.c builtin/rebase.c
-#: builtin/replay.c
-msgid "revision"
-msgstr "revision"
+#: builtin/clone.c builtin/fetch.c builtin/pull.c
+msgid "ref"
+msgstr "ref"
#: builtin/clone.c builtin/fetch.c builtin/pull.c
-msgid "deepen history of shallow clone, excluding rev"
-msgstr "å–得更多淺層複製的éŽåŽ»æ­·å²è¨˜éŒ„,除了特定修訂版"
+msgid "deepen history of shallow clone, excluding ref"
+msgstr "å–得更多淺層複製的éŽå¾€æ­·å²è¨˜éŒ„,除了特定修訂版"
#: builtin/clone.c builtin/submodule--helper.c
msgid "clone only one branch, HEAD or --branch"
@@ -5325,12 +5324,12 @@ msgstr "å·¥ä½œå€ '%s' 已經存在。"
#: builtin/clone.c builtin/difftool.c builtin/log.c builtin/worktree.c
#, c-format
msgid "could not create leading directories of '%s'"
-msgstr "ä¸èƒ½ç‚º '%s' 建立先導目錄"
+msgstr "無法為「%sã€å»ºç«‹å‰å°Žç›®éŒ„"
#: builtin/clone.c
#, c-format
msgid "could not create work tree dir '%s'"
-msgstr "ä¸èƒ½å»ºç«‹å·¥ä½œå€ç›®éŒ„ '%s'"
+msgstr "無法建立工作å€ç›®éŒ„「%sã€"
#: builtin/clone.c
#, c-format
@@ -5495,7 +5494,7 @@ msgstr "無法開啟æäº¤åœ–éˆã€Œ%sã€"
#: builtin/commit-graph.c
#, c-format
msgid "unrecognized --split argument, %s"
-msgstr "無法識別的 --split åƒæ•¸ï¼Œ%s"
+msgstr "ä¸èªè­˜çš„ --split åƒæ•¸ï¼Œ%s"
#: builtin/commit-graph.c
#, c-format
@@ -5789,12 +5788,12 @@ msgstr "ï¼ˆæ­£å¾žæ¨™æº–è¼¸å…¥ä¸­è®€å–æ—¥èªŒè¨Šæ¯ï¼‰\n"
#: builtin/commit.c
msgid "could not read log from standard input"
-msgstr "ä¸èƒ½å¾žæ¨™æº–è¼¸å…¥ä¸­è®€å–æ—¥èªŒè¨Šæ¯"
+msgstr "無法從標準輸入中讀å–記錄"
#: builtin/commit.c
#, c-format
msgid "could not read log file '%s'"
-msgstr "ä¸èƒ½è®€å–日誌檔案 '%s'"
+msgstr "ç„¡æ³•è®€å–æ—¥èªŒæª”案「%sã€"
#: builtin/commit.c
#, c-format
@@ -5803,11 +5802,11 @@ msgstr "「%sã€å’Œã€Œ%s:%sã€é¸é …ä¸å¾—åŒæ™‚使用"
#: builtin/commit.c
msgid "could not read SQUASH_MSG"
-msgstr "ä¸èƒ½è®€å– SQUASH_MSG"
+msgstr "ç„¡æ³•è®€å– SQUASH_MSG"
#: builtin/commit.c
msgid "could not read MERGE_MSG"
-msgstr "ä¸èƒ½è®€å– MERGE_MSG"
+msgstr "ç„¡æ³•è®€å– MERGE_MSG"
#: builtin/commit.c bundle.c rerere.c sequencer.c
#, c-format
@@ -5816,7 +5815,7 @@ msgstr "無法開啟「%sã€"
#: builtin/commit.c
msgid "could not write commit template"
-msgstr "ä¸èƒ½å¯«æäº¤ç¯„本"
+msgstr "無法寫入æäº¤æ¨¡æ¿"
#: builtin/commit.c
#, c-format
@@ -6192,7 +6191,7 @@ msgstr "å…許空的æäº¤èªªæ˜Ž"
#: builtin/commit.c sequencer.c
msgid "could not parse HEAD commit"
-msgstr "ä¸èƒ½è§£æž HEAD æäº¤"
+msgstr "ç„¡æ³•è§£æž HEAD æäº¤"
#: builtin/commit.c
#, c-format
@@ -6201,12 +6200,12 @@ msgstr "æå£žçš„ MERGE_HEAD 檔案(%s)"
#: builtin/commit.c
msgid "could not read MERGE_MODE"
-msgstr "ä¸èƒ½è®€å– MERGE_MODE"
+msgstr "ç„¡æ³•è®€å– MERGE_MODE"
#: builtin/commit.c
#, c-format
msgid "could not read commit message: %s"
-msgstr "ä¸èƒ½è®€å–æäº¤èªªæ˜Žï¼š%s"
+msgstr "ç„¡æ³•è®€å–æäº¤èªªæ˜Žï¼š%s"
#: builtin/commit.c
#, c-format
@@ -6255,10 +6254,10 @@ msgstr ""
#: builtin/config.c
msgid ""
"git config unset [<file-option>] [--all] [--value=<value>] [--fixed-value] "
-"<name> <value>"
+"<name>"
msgstr ""
-"git config unset [<檔案é¸é …>] [--all] [--value=<值>] [--fixed-value] <å稱> <"
-"值>"
+"git config unset [<file-option>] [--all] [--value=<value>] [--fixed-value] "
+"<name>"
#: builtin/config.c
msgid "git config rename-section [<file-option>] <old-name> <new-name>"
@@ -6390,7 +6389,7 @@ msgstr "除了顯示組態值,é¡å¤–顯示其éµå"
#: builtin/config.c
#, c-format
msgid "unrecognized --type argument, %s"
-msgstr "無法識別的 --type åƒæ•¸ï¼Œ%s"
+msgstr "ä¸èªè­˜çš„ --type åƒæ•¸ï¼Œ%s"
#: builtin/config.c
msgid "only one type at a time"
@@ -6804,12 +6803,8 @@ msgstr "已鿭· %lu 個æäº¤\n"
#: builtin/describe.c
#, c-format
-msgid ""
-"more than %i tags found; listed %i most recent\n"
-"gave up search at %s\n"
-msgstr ""
-"發ç¾å¤šæ–¼ %i 個標籤,列出最近的 %i 個\n"
-"在 %s 放棄æœå°‹\n"
+msgid "found %i tags; gave up search at %s\n"
+msgstr "找到 %i 個標籤;在 %s 放棄æœå°‹\n"
#: builtin/describe.c
#, c-format
@@ -6997,7 +6992,7 @@ msgstr "å·¥ä½œå€æª”案被留了下來。"
#: builtin/difftool.c sequencer.c
#, c-format
msgid "could not copy '%s' to '%s'"
-msgstr "ä¸èƒ½è¤‡è£½ '%s' 至 '%s'"
+msgstr "無法將「%sã€è¤‡è£½åˆ°ã€Œ%sã€"
#: builtin/difftool.c
#, c-format
@@ -7358,6 +7353,21 @@ msgid "the object %s does not exist"
msgstr "%s 物件ä¸å­˜åœ¨"
#: builtin/fetch.c
+#, c-format
+msgid ""
+"Run 'git remote set-head %s %s' to follow the change, or set\n"
+"'remote.%s.followRemoteHEAD' configuration option to a different value\n"
+"if you do not want to see this message. Specifically running\n"
+"'git config set remote.%s.followRemoteHEAD %s' will disable the warning\n"
+"until the remote changes HEAD to something else."
+msgstr ""
+"執行「git remote set-head %s %sã€ä»¥è¿½è¹¤é€™å€‹è®Šæ›´ï¼Œæˆ–者\n"
+"å¦‚æžœæ‚¨ä¸æƒ³çœ‹åˆ°é€™å‰‡è¨Šæ¯ï¼Œè«‹å°‡ã€Œremote.%s.followRemoteHEADã€\n"
+"組態é¸é …設定æˆä¸åŒçš„值。更具體些來說,執行\n"
+"「git config set remote.%s.followRemoteHEAD %sã€æœƒåœç”¨é€™å€‹è­¦å‘Šï¼Œ\n"
+"直到é ç«¯å°‡ HEAD 變更為其他內容。"
+
+#: builtin/fetch.c
msgid "multiple branches detected, incompatible with --set-upstream"
msgstr "檢測到多分支,和 --set-upstream ä¸ç›¸å®¹"
@@ -7397,12 +7407,12 @@ msgstr "正在å–å¾— %s\n"
#: builtin/fetch.c
#, c-format
msgid "could not fetch %s"
-msgstr "ä¸èƒ½å–å¾— %s"
+msgstr "無法å–å¾— %s"
#: builtin/fetch.c
#, c-format
msgid "could not fetch '%s' (exit code: %d)\n"
-msgstr "無法å–å¾— '%s'(離開碼:%d)\n"
+msgstr "無法å–得「%sã€ï¼ˆé›¢é–‹ç¢¼ï¼š%d)\n"
#: builtin/fetch.c
msgid ""
@@ -7527,6 +7537,10 @@ msgstr "引用映射"
msgid "specify fetch refmap"
msgstr "指定å–得動作的引用映射"
+#: builtin/fetch.c builtin/pull.c builtin/rebase.c builtin/replay.c
+msgid "revision"
+msgstr "revision"
+
#: builtin/fetch.c builtin/pull.c
msgid "report that we have only objects reachable from this object"
msgstr "å ±å‘Šæˆ‘å€‘åªæ“有從該物件開始å¯ä»¥å–得的物件"
@@ -7788,18 +7802,18 @@ msgstr "懸空 %s %s"
#: builtin/fsck.c
msgid "could not create lost-found"
-msgstr "ä¸èƒ½å»ºç«‹ lost-found"
+msgstr "無法建立 lost-found"
#: builtin/fsck.c builtin/gc.c builtin/rebase.c rebase-interactive.c rerere.c
#: sequencer.c
#, c-format
msgid "could not write '%s'"
-msgstr "ä¸èƒ½å¯«å…¥ '%s'"
+msgstr "無法寫入「%sã€"
#: builtin/fsck.c
#, c-format
msgid "could not finish '%s'"
-msgstr "ä¸èƒ½å®Œæˆ '%s'"
+msgstr "無法完æˆã€Œ%sã€"
#: builtin/fsck.c
#, c-format
@@ -8069,7 +8083,7 @@ msgstr "無法啟動 fsmonitor 監è½åŸ·è¡Œç·’"
#: builtin/fsmonitor--daemon.c
msgid "could not start fsmonitor health thread"
-msgstr "無法啟動 fsmonitor å¥åº·ç›£è½åŸ·è¡Œç·’"
+msgstr "無法啟動 fsmonitor å¥åº·æª¢æŸ¥åŸ·è¡Œç·’"
#: builtin/fsmonitor--daemon.c
msgid "could not initialize listener thread"
@@ -8077,7 +8091,7 @@ msgstr "無法åˆå§‹åŒ–監è½åŸ·è¡Œç·’"
#: builtin/fsmonitor--daemon.c
msgid "could not initialize health thread"
-msgstr "無法åˆå§‹åŒ–å¥åº·ç›£è½åŸ·è¡Œç·’"
+msgstr "無法åˆå§‹åŒ–å¥åº·æª¢æŸ¥åŸ·è¡Œç·’"
#: builtin/fsmonitor--daemon.c
#, c-format
@@ -8251,7 +8265,7 @@ msgstr "ä¸å…許 --no-schedule"
#: builtin/gc.c
#, c-format
msgid "unrecognized --schedule argument '%s'"
-msgstr "無法識別的 --schedule 引數 '%s'"
+msgstr "ä¸èªè­˜çš„ --schedule 引數 '%s'"
#: builtin/gc.c
msgid "failed to write commit-graph"
@@ -8425,7 +8439,7 @@ msgstr "無法執行 systemctl"
#: builtin/gc.c
#, c-format
msgid "unrecognized --scheduler argument '%s'"
-msgstr "無法識別的 --scheduler 引數 '%s'"
+msgstr "ä¸èªè­˜çš„ --scheduler 引數 '%s'"
#: builtin/gc.c
msgid "neither systemd timers nor crontab are available"
@@ -8437,8 +8451,26 @@ msgid "%s scheduler is not available"
msgstr "無法使用 %s 排程器"
#: builtin/gc.c
-msgid "another process is scheduling background maintenance"
-msgstr "其他處ç†ç¨‹åºæ­£åœ¨æŽ’定背景維護工作"
+#, c-format
+msgid ""
+"unable to create '%s.lock': %s.\n"
+"\n"
+"Another scheduled git-maintenance(1) process seems to be running in this\n"
+"repository. Please make sure no other maintenance processes are running and\n"
+"then try again. If it still fails, a git-maintenance(1) process may have\n"
+"crashed in this repository earlier: remove the file manually to continue."
+msgstr ""
+"無法建立「%s.lockã€ï¼š%s。\n"
+"\n"
+"似乎有å¦ä¸€å€‹æŽ’定的 git-maintenance(1) ç¨‹åºæ­£åœ¨æ­¤\n"
+"ç‰ˆæœ¬åº«ä¸­åŸ·è¡Œã€‚è«‹ç¢ºä¿æ²’æœ‰å…¶ä»–ç¶­è­·ç¨‹åºæ­£åœ¨åŸ·è¡Œï¼Œ\n"
+"然後å†è©¦ä¸€æ¬¡ã€‚如果ä»ç„¶å¤±æ•—,å¯èƒ½æ˜¯å…ˆå‰çš„\n"
+"git-maintenance(1) 程åºåœ¨é€™å€‹ç‰ˆæœ¬åº«ä¸­æ„外中斷:\n"
+"請手動移除檔案以繼續。"
+
+#: builtin/gc.c
+msgid "cannot acquire lock for scheduled background maintenance"
+msgstr "無法å–得用來進行排定背景維護的鎖"
#: builtin/gc.c
msgid "git maintenance start [--scheduler=<scheduler>]"
@@ -8727,7 +8759,7 @@ msgstr "--open-files-in-pager 僅用於工作å€"
#: builtin/grep.c
msgid "--[no-]exclude-standard cannot be used for tracked contents"
-msgstr "--[no-]exclude-standard ä¸èƒ½ç”¨æ–¼å·²è¿½è¹¤å…§å®¹"
+msgstr "--[no-]exclude-standard 無法用於已追蹤內容"
#: builtin/grep.c
msgid "both --cached and trees are given"
@@ -8825,7 +8857,7 @@ msgstr "git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]"
#: builtin/help.c
#, c-format
msgid "unrecognized help format '%s'"
-msgstr "無法識別的å”åŠ©æ ¼å¼ '%s'"
+msgstr "ä¸èªè­˜çš„å”åŠ©æ ¼å¼ '%s'"
#: builtin/help.c
msgid "Failed to start emacsclient."
@@ -9158,6 +9190,22 @@ msgid_plural "chain length = %d: %lu objects"
msgstr[0] "éˆé•· = %d: %lu 物件"
#: builtin/index-pack.c
+msgid "could not start pack-objects to repack local links"
+msgstr "無法啟動 pack-objects 來釿–°æ‰“包本機連çµ"
+
+#: builtin/index-pack.c
+msgid "failed to feed local object to pack-objects"
+msgstr "無法將本機物件喂給 pack-objects"
+
+#: builtin/index-pack.c
+msgid "index-pack: Expecting full hex object ID lines only from pack-objects."
+msgstr "index-pack:åªé æœŸæŽ¥å—來自 pack-objects 的完整å六進ä½ç‰©ä»¶ ID。"
+
+#: builtin/index-pack.c
+msgid "could not finish pack-objects to repack local links"
+msgstr "ç„¡æ³•çµæŸ pack-objects 來釿–°å°åŒ…"
+
+#: builtin/index-pack.c
msgid "Cannot come back to cwd"
msgstr "無法返回目å‰å·¥ä½œç›®éŒ„"
@@ -9172,6 +9220,10 @@ msgid "unknown hash algorithm '%s'"
msgstr "未知的「%sã€é›œæ¹Šç®—法"
#: builtin/index-pack.c
+msgid "--promisor cannot be used with a pack name"
+msgstr "--promisor ä¸èƒ½èˆ‡å°åŒ…å稱一起使用"
+
+#: builtin/index-pack.c
msgid "--stdin requires a git repository"
msgstr "--stdin 需è¦ä¸€å€‹ git 版本庫"
@@ -9256,7 +9308,7 @@ msgstr ""
#: builtin/interpret-trailers.c wrapper.c
#, c-format
msgid "could not stat %s"
-msgstr "ä¸èƒ½å° %s å‘¼å« stat"
+msgstr "無法 stat %s"
#: builtin/interpret-trailers.c
#, c-format
@@ -9270,21 +9322,21 @@ msgstr "檔案 %s 使用者ä¸å¯å¯«"
#: builtin/interpret-trailers.c
msgid "could not open temporary file"
-msgstr "ä¸èƒ½é–‹å•Ÿæš«å­˜æª”"
+msgstr "無法開啟暫存檔"
#: builtin/interpret-trailers.c
#, c-format
msgid "could not read input file '%s'"
-msgstr "ä¸èƒ½è®€å–輸入檔案 '%s'"
+msgstr "無法讀å–輸入檔案「%sã€"
#: builtin/interpret-trailers.c builtin/mktag.c imap-send.c
msgid "could not read from stdin"
-msgstr "ä¸èƒ½è‡ªæ¨™æº–輸入讀å–"
+msgstr "無法從標準輸入讀å–"
#: builtin/interpret-trailers.c
#, c-format
msgid "could not rename temporary file to %s"
-msgstr "ä¸èƒ½é‡æ–°å‘½å暫存檔為 %s"
+msgstr "ç„¡æ³•å°‡æš«å­˜æª”é‡æ–°å‘½å為 %s"
#: builtin/interpret-trailers.c
msgid "edit files in place"
@@ -9388,7 +9440,7 @@ msgstr "追蹤 <é–‹å§‹>,<çµæŸ> 範åœä¸­æ©«åˆ—或 <檔案> 中> :<函數å稱
#: builtin/log.c builtin/replay.c builtin/shortlog.c bundle.c
#, c-format
msgid "unrecognized argument: %s"
-msgstr "無法識別的引數:%s"
+msgstr "ä¸èªè­˜çš„引數:%s"
#: builtin/log.c
msgid "-L<range>:<file> cannot be used with pathspec"
@@ -9407,7 +9459,7 @@ msgstr "git show %s: æå£žçš„æª”案"
#: builtin/log.c
#, c-format
msgid "could not read object %s"
-msgstr "ä¸èƒ½è®€å–物件 %s"
+msgstr "無法讀å–物件 %s"
#: builtin/log.c
#, c-format
@@ -9474,7 +9526,7 @@ msgstr "無法將 '%s' è§£æžç‚ºä¸€å€‹æœ‰æ•ˆå¼•用"
#: builtin/log.c
msgid "could not find exact merge base"
-msgstr "ä¸èƒ½æ‰¾åˆ°æº–確的åˆä½µåŸºç¤Ž"
+msgstr "找ä¸åˆ°æº–確的åˆä½µåŸºç¤Ž"
#: builtin/log.c
msgid ""
@@ -9727,7 +9779,7 @@ msgstr "--remerge-diff ç„¡æ„義"
#: builtin/log.c builtin/submodule--helper.c rerere.c submodule.c
#, c-format
msgid "could not create directory '%s'"
-msgstr "ä¸èƒ½å»ºç«‹ç›®éŒ„ '%s'"
+msgstr "無法建立「%sã€ç›®éŒ„"
#: builtin/log.c
msgid "--interdiff requires --cover-letter or single patch"
@@ -9776,7 +9828,7 @@ msgstr "git cherry [-v] [<上游> [<é ­> [<é™åˆ¶>]]]"
#, c-format
msgid ""
"Could not find a tracked remote branch, please specify <upstream> manually.\n"
-msgstr "ä¸èƒ½æ‰¾åˆ°è¿½è¹¤çš„é ç«¯åˆ†æ”¯ï¼Œè«‹æ‰‹å‹•指定 <上游>。\n"
+msgstr "無法找到追蹤的é ç«¯åˆ†æ”¯ï¼Œè«‹æ‰‹å‹•指定 <上游>。\n"
#: builtin/ls-files.c builtin/ls-tree.c
#, c-format
@@ -9900,7 +9952,7 @@ msgid ""
"--format cannot be used with -s, -o, -k, -t, --resolve-undo, --deduplicate, "
"--eol"
msgstr ""
-"--format ä¸èƒ½å’Œ -sã€-oã€-kã€-tã€--resolve-undoã€--deduplicateã€--eol 一起使用"
+"--format 無法和 -sã€-oã€-kã€-tã€--resolve-undoã€--deduplicateã€--eol 一起使用"
#: builtin/ls-remote.c
msgid ""
@@ -10162,7 +10214,7 @@ msgstr "未知é¸é … %s"
#: builtin/merge-recursive.c
#, c-format
msgid "could not parse object '%s'"
-msgstr "ä¸èƒ½è§£æžç‰©ä»¶ '%s'"
+msgstr "無法解æžç‰©ä»¶ã€Œ%sã€"
#: builtin/merge-recursive.c
#, c-format
@@ -10177,7 +10229,7 @@ msgstr "ä¸èƒ½è™•ç†å…©å€‹é ­åˆä½µä¹‹å¤–的任何動作。"
#: builtin/merge-recursive.c
#, c-format
msgid "could not resolve ref '%s'"
-msgstr "無法解æžå¼•用 '%s'"
+msgstr "無法解æžå¼•用「%sã€"
#: builtin/merge-recursive.c
#, c-format
@@ -10280,7 +10332,7 @@ msgstr "é¸é … `%s' 需è¦ä¸€å€‹å€¼"
#: builtin/merge.c
#, c-format
msgid "Could not find merge strategy '%s'.\n"
-msgstr "ä¸èƒ½æ‰¾åˆ°åˆä½µç­–ç•¥ '%s'。\n"
+msgstr "找ä¸åˆ°åˆä½µç­–略「%sã€ã€‚\n"
#: builtin/merge.c
#, c-format
@@ -10368,7 +10420,7 @@ msgstr "ç¹žéŽ pre-merge-commit å’Œ commit-msg 掛鉤"
#: builtin/merge.c
msgid "could not run stash."
-msgstr "ä¸èƒ½åŸ·è¡Œè²¯å­˜ã€‚"
+msgstr "無法執行貯存。"
#: builtin/merge.c
msgid "stash failed"
@@ -10428,7 +10480,7 @@ msgstr "ä¸èƒ½å¯« %s"
#: builtin/merge.c
#, c-format
msgid "Could not read from '%s'"
-msgstr "ä¸èƒ½å¾ž '%s' 讀å–"
+msgstr "無法從「%sã€é€²è¡Œè®€å–"
#: builtin/merge.c
#, c-format
@@ -10495,7 +10547,7 @@ msgstr "環境 '%2$s' 中存在壞的å–值 '%1$s'"
#: builtin/merge.c editor.c read-cache.c wrapper.c
#, c-format
msgid "could not close '%s'"
-msgstr "ä¸èƒ½é—œé–‰ '%s'"
+msgstr "無法關閉「%sã€"
#: builtin/merge.c
#, c-format
@@ -10885,11 +10937,11 @@ msgstr "git notes [--ref <註解引用>] [list [<物件>]]"
msgid ""
"git notes [--ref <notes-ref>] add [-f] [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
msgstr ""
"git notes [--ref <notes-ref>] add [-f] [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
#: builtin/notes.c
msgid "git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>"
@@ -10899,11 +10951,11 @@ msgstr "git notes [--ref <註解引用>] copy [-f] <來æºç‰©ä»¶> <目標物件>
msgid ""
"git notes [--ref <notes-ref>] append [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
msgstr ""
"git notes [--ref <notes-ref>] append [--allow-empty] [--[no-]separator|--"
"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c "
-"| -C) <object>] [<object>]"
+"| -C) <object>] [<object>] [-e]"
#: builtin/notes.c
msgid "git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]"
@@ -10984,7 +11036,7 @@ msgstr "為下é¢çš„物件寫/編輯說明:"
#: builtin/notes.c
msgid "could not read 'show' output"
-msgstr "ä¸èƒ½è®€å– 'show' 的輸出"
+msgstr "無法讀å–「showã€çš„輸出"
#: builtin/notes.c
#, c-format
@@ -11007,7 +11059,7 @@ msgstr "註解內容被留在 %s 中"
#: builtin/notes.c builtin/tag.c
#, c-format
msgid "could not open or read '%s'"
-msgstr "ä¸èƒ½é–‹å•Ÿæˆ–è®€å– '%s'"
+msgstr "無法開啟或讀å–「%sã€"
#: builtin/notes.c
#, c-format
@@ -11055,6 +11107,10 @@ msgid "reuse and edit specified note object"
msgstr "é‡ç”¨å’Œç·¨è¼¯æŒ‡å®šçš„註解物件"
#: builtin/notes.c
+msgid "edit note message in editor"
+msgstr "在編輯器中編輯備註訊æ¯"
+
+#: builtin/notes.c
msgid "reuse specified note object"
msgstr "é‡ç”¨æŒ‡å®šçš„註解物件"
@@ -11352,7 +11408,7 @@ msgstr "%s çš„ delta 基準ä½ç§»è¶Šç•Œ"
#: builtin/pack-objects.c
msgid "Counting objects"
-msgstr "物件計數中"
+msgstr "正在計算物件數é‡"
#: builtin/pack-objects.c pack-bitmap.c
#, c-format
@@ -11668,6 +11724,10 @@ msgid "do not pack objects in promisor packfiles"
msgstr "ä¸è¦æ‰“包 promisor packfile 中的物件"
#: builtin/pack-objects.c
+msgid "implies --missing=allow-any"
+msgstr "éš±å« --missing=allow-any"
+
+#: builtin/pack-objects.c
msgid "respect islands during delta compression"
msgstr "在差異壓縮時尊é‡è³‡æ–™å³¶"
@@ -11696,7 +11756,7 @@ msgstr "錯誤的打包壓縮級別 %d"
#: builtin/pack-objects.c
msgid "--max-pack-size cannot be used to build a pack for transfer"
-msgstr "ä¸èƒ½ä½¿ç”¨ --max-pack-size 來組建傳輸用的包檔案"
+msgstr "ä¸èƒ½ä½¿ç”¨ --max-pack-size 來建構傳輸用的包檔案"
#: builtin/pack-objects.c
msgid "minimum pack size limit is 1 MiB"
@@ -12330,7 +12390,7 @@ msgstr ""
#: builtin/push.c
msgid "--all can't be combined with refspecs"
-msgstr "--all ä¸èƒ½å’Œå¼•ç”¨è¦æ ¼åŒæ™‚使用"
+msgstr "--all ç„¡æ³•å’Œå¼•ç”¨è¦æ ¼åŒæ™‚使用"
#: builtin/push.c
msgid "--mirror can't be combined with refspecs"
@@ -12492,12 +12552,12 @@ msgstr ""
#: builtin/rebase.c sequencer.c
#, c-format
msgid "could not read '%s'."
-msgstr "ä¸èƒ½è®€å– '%s'。"
+msgstr "無法讀å–「%sã€ã€‚"
#: builtin/rebase.c
#, c-format
msgid "could not create temporary %s"
-msgstr "無法建立暫時的 %s"
+msgstr "無法建立暫存用的 %s"
#: builtin/rebase.c
msgid "could not mark as interactive"
@@ -12505,7 +12565,7 @@ msgstr "無法標記為互動å¼"
#: builtin/rebase.c
msgid "could not generate todo list"
-msgstr "無法生æˆå¾…辦列表"
+msgstr "無法產生待辦列表"
#: builtin/rebase.c
msgid "a base commit must be provided with --upstream or --onto"
@@ -12534,7 +12594,7 @@ msgstr "忽略無效的 allow_rerere_autoupdate:'%s'"
#: builtin/rebase.c builtin/rm.c sequencer.c
#, c-format
msgid "could not remove '%s'"
-msgstr "無法刪除 '%s'"
+msgstr "無法刪除「%sã€"
#: builtin/rebase.c
#, c-format
@@ -12577,7 +12637,7 @@ msgstr "--empty=ask 已棄用。請改用「--empty=stopã€ã€‚"
msgid ""
"unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and "
"\"stop\"."
-msgstr "無法識別空類型「%sã€ï¼›æœ‰æ•ˆçš„æ•¸å€¼æœ‰ã€Œdropã€ã€ã€Œkeepã€è·Ÿã€Œstopã€ã€‚"
+msgstr "ä¸èªè­˜ç©ºé¡žåž‹ã€Œ%sã€ï¼›æœ‰æ•ˆçš„æ•¸å€¼æœ‰ã€Œdropã€ã€ã€Œkeepã€è·Ÿã€Œstopã€ã€‚"
#: builtin/rebase.c
msgid ""
@@ -12879,7 +12939,7 @@ msgstr "無效的上游 '%s'"
#: builtin/rebase.c
msgid "Could not create new root commit"
-msgstr "ä¸èƒ½å»ºç«‹æ–°çš„æ ¹æäº¤"
+msgstr "無法建立新的根æäº¤"
#: builtin/rebase.c
#, c-format
@@ -13235,7 +13295,7 @@ msgstr "更新 %s 中"
#: builtin/remote.c
#, c-format
msgid "Could not fetch %s"
-msgstr "ä¸èƒ½å–å¾— %s"
+msgstr "無法å–å¾— %s"
#: builtin/remote.c
msgid ""
@@ -13290,7 +13350,7 @@ msgstr "é ç«¯ %s 已經存在。"
#: builtin/remote.c
#, c-format
msgid "Could not setup master '%s'"
-msgstr "無法設定 master '%s'"
+msgstr "無法é…ç½® master「%sã€"
#: builtin/remote.c trailer.c
#, c-format
@@ -13305,7 +13365,7 @@ msgstr "branch.%s.rebase=%s 未處ç†ã€‚å‡è¨­æˆ 'true'"
#: builtin/remote.c
#, c-format
msgid "Could not get fetch map for refspec %s"
-msgstr "ç„¡æ³•å¾—åˆ°å¼•ç”¨è¦æ ¼ %s çš„å–得列表"
+msgstr "無法å–å¾—å¼•ç”¨è¦æ ¼ %s çš„ fetch 映射"
#: builtin/remote.c
msgid "(matching)"
@@ -13318,12 +13378,12 @@ msgstr "(刪除)"
#: builtin/remote.c
#, c-format
msgid "could not set '%s'"
-msgstr "無法設定 '%s'"
+msgstr "無法設定「%sã€"
#: builtin/remote.c config.c
#, c-format
msgid "could not unset '%s'"
-msgstr "ä¸èƒ½å–消設定 '%s'"
+msgstr "ç„¡æ³•å–æ¶ˆè¨­å®šã€Œ%sã€"
#: builtin/remote.c
#, c-format
@@ -13344,7 +13404,7 @@ msgstr "沒有此é ç«¯ç‰ˆæœ¬åº«ï¼š'%s'"
#: builtin/remote.c
#, c-format
msgid "Could not rename config section '%s' to '%s'"
-msgstr "ä¸èƒ½é‡æ–°å‘½å設定å°ç¯€ '%s' 到 '%s'"
+msgstr "無法將組態的「%sã€å€æ®µé‡æ–°å‘½å為「%sã€"
#: builtin/remote.c
#, c-format
@@ -13383,7 +13443,7 @@ msgstr[0] "注æ„:refs/remotes/ 層級之外的一個分支未被移除。è¦å
#: builtin/remote.c
#, c-format
msgid "Could not remove config section '%s'"
-msgstr "ä¸èƒ½ç§»é™¤è¨­å®šå°ç¯€ '%s'"
+msgstr "無法移除組態的「%sã€å€æ®µ"
#: builtin/remote.c
#, c-format
@@ -13555,6 +13615,33 @@ msgid_plural " Local refs configured for 'git push'%s:"
msgstr[0] " 為 'git push' 設定的本機引用%s:"
#: builtin/remote.c
+#, c-format
+msgid "'%s/HEAD' is unchanged and points to '%s'\n"
+msgstr "「%s/HEADã€æ²’有變更,指å‘「%sã€\n"
+
+#: builtin/remote.c
+#, c-format
+msgid "'%s/HEAD' has changed from '%s' and now points to '%s'\n"
+msgstr "「%s/HEADã€å·²ç¶“從「%sã€è®Šæ›´ï¼Œç¾åœ¨æŒ‡å‘「%sã€\n"
+
+#: builtin/remote.c
+#, c-format
+msgid "'%s/HEAD' is now created and points to '%s'\n"
+msgstr "「%s/HEADã€ç¾åœ¨å·²ç¶“建立並指å‘「%sã€\n"
+
+#: builtin/remote.c
+#, c-format
+msgid "'%s/HEAD' was detached at '%s' and now points to '%s'\n"
+msgstr "「%s/HEADã€å·²ç¶“在「%sã€è™•分離,ç¾åœ¨æŒ‡å‘「%sã€\n"
+
+#: builtin/remote.c
+#, c-format
+msgid ""
+"'%s/HEAD' used to point to '%s' (which is not a remote branch), but now "
+"points to '%s'\n"
+msgstr "「%s/HEADã€åŽŸæœ¬æŒ‡å‘「%sã€ï¼ˆä¸æ˜¯é ç«¯åˆ†æ”¯ï¼‰ï¼Œä½†ç¾åœ¨æŒ‡å‘「%sã€\n"
+
+#: builtin/remote.c
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr "根據é ç«¯è¨­å®š refs/remotes/<å稱>/HEAD"
@@ -13582,8 +13669,8 @@ msgstr "䏿˜¯ä¸€å€‹æœ‰æ•ˆå¼•用:%s"
#: builtin/remote.c
#, c-format
-msgid "Could not setup %s"
-msgstr "ä¸èƒ½è¨­å®š %s"
+msgid "Could not set up %s"
+msgstr "無法é…ç½® %s"
# 譯者:請維æŒå‰å°Žç©ºæ ¼
#: builtin/remote.c
@@ -13702,7 +13789,7 @@ msgstr "repack:期望來自 pack-objects 的完整å六進ä½ç‰©ä»¶ ID。"
#: builtin/repack.c
msgid "could not finish pack-objects to repack promisor objects"
-msgstr "ç„¡æ³•å®Œæˆ pack-objects 來釿–°æ‰“包 promisor 物件"
+msgstr "ç„¡æ³•çµæŸ pack-objects 來釿–°æ‰“包 promisor 物件"
#: builtin/repack.c
#, c-format
@@ -13722,7 +13809,7 @@ msgstr "%s 包太大,以致ä¸èƒ½ç¸®åˆ"
#: builtin/repack.c
#, c-format
msgid "could not open tempfile %s for writing"
-msgstr "無法開啟 '%s' 暫存檔進行寫入"
+msgstr "無法開啟暫存檔 %s 進行寫入"
#: builtin/repack.c
msgid "could not close refs snapshot tempfile"
@@ -13986,7 +14073,7 @@ msgstr "新物件和舊物件相åŒï¼š'%s'"
#: builtin/replace.c
#, c-format
msgid "could not parse %s as a commit"
-msgstr "無法將 %s è§£æžç‚ºä¸€å€‹æäº¤"
+msgstr "無法將 %s è§£æžç‚ºæäº¤"
#: builtin/replace.c
#, c-format
@@ -14017,7 +14104,7 @@ msgstr "在å–代的æäº¤ä¸­ç°½å將被移除ï¼"
#: builtin/replace.c
#, c-format
msgid "could not write replacement commit for: '%s'"
-msgstr "ä¸èƒ½ç‚º '%s' 寫å–代æäº¤"
+msgstr "無法寫入下列項目的替代æäº¤ï¼šã€Œ%sã€"
#: builtin/replace.c
#, c-format
@@ -14035,7 +14122,7 @@ msgid ""
"could not convert the following graft(s):\n"
"%s"
msgstr ""
-"ä¸èƒ½è½‰æ›ä¸‹åˆ—ç§»æ¤ï¼š\n"
+"無法轉æ›ä¸‹åˆ—ç§»æ¤ï¼š\n"
"%s"
#: builtin/replace.c
@@ -14072,7 +14159,7 @@ msgstr "使用此格å¼"
#: builtin/replace.c
msgid "--format cannot be used when not listing"
-msgstr "ä¸åˆ—出時ä¸èƒ½ä½¿ç”¨ --format"
+msgstr "éžåˆ—出æ“作ä¸èƒ½ä½¿ç”¨ --format"
#: builtin/replace.c
msgid "-f only makes sense when writing a replacement"
@@ -14338,11 +14425,11 @@ msgstr ""
#: builtin/reset.c
#, c-format
msgid "Could not reset index file to revision '%s'."
-msgstr "ä¸èƒ½é‡è¨­ç´¢å¼•檔案至版本 '%s'。"
+msgstr "無法將索引檔案é‡è¨­åˆ°ä¿®è¨‚版「%sã€ã€‚"
#: builtin/reset.c
msgid "Could not write new index file."
-msgstr "ä¸èƒ½å¯«å…¥æ–°çš„索引檔案。"
+msgstr "無法寫入新的索引檔案。"
#: builtin/rev-list.c
#, c-format
@@ -15231,7 +15318,7 @@ msgstr "無法在åˆä½µéŽç¨‹å¥—用貯存"
#: builtin/stash.c
#, c-format
msgid "could not generate diff %s^!."
-msgstr "無法生æˆå·®ç•° %s^!."
+msgstr "無法產生差異 %s^!."
#: builtin/stash.c
msgid "conflicts in index. Try without --index."
@@ -15239,7 +15326,7 @@ msgstr "索引中有è¡çªã€‚請試試看ä¸ç”¨ --index。"
#: builtin/stash.c
msgid "could not save index tree"
-msgstr "ä¸èƒ½å„²å­˜ç´¢å¼•樹"
+msgstr "無法儲存索引樹"
#: builtin/stash.c
#, c-format
@@ -15415,14 +15502,14 @@ msgstr "期望一個完整的引用å稱,å»å¾—到 %s"
#: builtin/submodule--helper.c
#, c-format
msgid "could not get a repository handle for submodule '%s'"
-msgstr "無法ç²å¾—å­æ¨¡çµ„ '%s' çš„ç‰ˆæœ¬åº«å¥æŸ„"
+msgstr "無法å–å¾—å­æ¨¡çµ„「%sã€çš„版本庫控制代碼"
#: builtin/submodule--helper.c
#, c-format
msgid ""
"could not look up configuration '%s'. Assuming this repository is its own "
"authoritative upstream."
-msgstr "無法找到設定 '%s'。å‡å®šé€™å€‹ç‰ˆæœ¬åº«æ˜¯å…¶è‡ªèº«çš„官方上游。"
+msgstr "找ä¸åˆ°ã€Œ%sã€çµ„態設定。å‡å®šé€™å€‹ç‰ˆæœ¬åº«æ˜¯å…¶è‡ªèº«çš„官方上游。"
#: builtin/submodule--helper.c
#, c-format
@@ -15501,7 +15588,7 @@ msgstr "在 .gitmodules 中沒有發ç¾è·¯å¾‘ '%s' çš„å­æ¨¡çµ„映射"
#: builtin/submodule--helper.c
#, c-format
msgid "could not resolve HEAD ref inside the submodule '%s'"
-msgstr "無法解æžå­æ¨¡çµ„ '%s' çš„ HEAD 引用"
+msgstr "無法解æžå­æ¨¡çµ„「%sã€çš„ HEAD 引用"
#: builtin/submodule--helper.c
#, c-format
@@ -15540,7 +15627,7 @@ msgstr "%s"
#: builtin/submodule--helper.c
#, c-format
msgid "couldn't hash object from '%s'"
-msgstr "無法雜湊來自 '%s' 的物件"
+msgstr "無法雜湊來自「%sã€çš„物件"
#: builtin/submodule--helper.c
#, c-format
@@ -15569,7 +15656,7 @@ msgstr "git submodule summary [<options>] [<commit>] [--] [<path>]"
#: builtin/submodule--helper.c
msgid "could not fetch a revision for HEAD"
-msgstr "無法å–å¾— HEAD 的版本"
+msgstr "無法å–å¾— HEAD 的修訂版"
#: builtin/submodule--helper.c
#, c-format
@@ -15617,12 +15704,12 @@ msgstr "已清除目錄 '%s'\n"
#: builtin/submodule--helper.c
#, c-format
msgid "Could not remove submodule work tree '%s'\n"
-msgstr "ç„¡æ³•ç§»é™¤å­æ¨¡çµ„å·¥ä½œå€ '%s'\n"
+msgstr "ç„¡æ³•ç§»é™¤å­æ¨¡çµ„工作å€ã€Œ%sã€\n"
#: builtin/submodule--helper.c
#, c-format
msgid "could not create empty submodule directory %s"
-msgstr "ä¸èƒ½å»ºç«‹ç©ºçš„å­æ¨¡çµ„目錄 %s"
+msgstr "ç„¡æ³•å»ºç«‹ç©ºçš„å­æ¨¡çµ„目錄 %s"
#: builtin/submodule--helper.c
#, c-format
@@ -15662,7 +15749,7 @@ msgstr ""
#: builtin/submodule--helper.c
#, c-format
msgid "could not get a repository handle for gitdir '%s'"
-msgstr "無法å–å¾— gitdir「%sã€çš„版本庫控點"
+msgstr "無法å–å¾— gitdir「%sã€çš„版本庫控制代碼"
#: builtin/submodule--helper.c
#, c-format
@@ -15697,7 +15784,7 @@ msgstr "無法複製 '%s' åˆ°å­æ¨¡çµ„路徑 '%s'"
#: builtin/submodule--helper.c
#, c-format
msgid "could not get submodule directory for '%s'"
-msgstr "無法得到 '%s' çš„å­æ¨¡çµ„目錄"
+msgstr "無法å–得「%sã€çš„å­æ¨¡çµ„目錄"
#: builtin/submodule--helper.c
msgid "alternative anchor for relative paths"
@@ -16826,7 +16913,7 @@ msgstr "ç„¡æ³•å–æ¶ˆã€Œ%2$sã€ä¸­ã€Œ%1$sã€çš„設定"
#: builtin/worktree.c
#, c-format
msgid "could not create directory of '%s'"
-msgstr "ä¸èƒ½å»ºç«‹ç›®éŒ„ '%s'"
+msgstr "無法建立「%sã€çš„目錄"
#: builtin/worktree.c
msgid "initializing"
@@ -16917,6 +17004,10 @@ msgstr "設定追蹤模å¼ï¼ˆåƒè¦‹ git-branch(1))"
msgid "try to match the new branch name with a remote-tracking branch"
msgstr "嘗試為新分支å符åˆä¸€å€‹é ç«¯è¿½è¹¤åˆ†æ”¯"
+#: builtin/worktree.c
+msgid "use relative paths for worktrees"
+msgstr "å°å·¥ä½œå€ä½¿ç”¨ç›¸å°è·¯å¾‘"
+
#: builtin/worktree.c diff.c parse-options.c
#, c-format
msgid "options '%s', '%s', and '%s' cannot be used together"
@@ -16987,7 +17078,7 @@ msgstr "'%s' 是一個主工作å€"
#: builtin/worktree.c
#, c-format
msgid "could not figure out destination name from '%s'"
-msgstr "無法從 '%s' 算出目的地å稱"
+msgstr "無法從「%sã€å¾—出目的地å稱"
#: builtin/worktree.c
#, c-format
@@ -17117,7 +17208,7 @@ msgstr "無法儲存最大的建立權æ–"
#: bundle-uri.c
#, c-format
msgid "unrecognized bundle mode from URI '%s'"
-msgstr "無法識別從 URI「%sã€å–回的套件包模å¼"
+msgstr "ä¸èªè­˜å¾ž URI「%sã€å–回的套件包模å¼"
#: bundle-uri.c
#, c-format
@@ -17158,7 +17249,7 @@ msgstr "bundle-uri: åˆ—æœ‰ç©ºéµæˆ–空值"
#: bundle.c
#, c-format
msgid "unrecognized bundle hash algorithm: %s"
-msgstr "無法識別的套件包雜湊演算法:%s"
+msgstr "ä¸èªè­˜çš„套件包雜湊演算法:%s"
#: bundle.c
#, c-format
@@ -17173,7 +17264,7 @@ msgstr "「%sã€ä¸åƒæ˜¯ä¸€å€‹ v2 或 v3 版本的套件包檔案"
#: bundle.c
#, c-format
msgid "unrecognized header: %s%s (%d)"
-msgstr "無法識別的標頭:%s%s (%d)"
+msgstr "ä¸èªè­˜çš„æ¨™é ­ï¼š%s%s (%d)"
#: bundle.c
msgid "Repository lacks these prerequisite commits:"
@@ -17251,6 +17342,30 @@ msgstr "無法建立「%sã€"
msgid "index-pack died"
msgstr "index-pack 終止"
+#: cache-tree.c
+#, c-format
+msgid "directory '%s' is present in index, but not sparse"
+msgstr "「%sã€ç›®éŒ„已經在索引裡é¢ï¼Œä½†ä¸åœ¨ç¨€ç–簽出當中。"
+
+#: cache-tree.c unpack-trees.c
+msgid "corrupted cache-tree has entries not present in index"
+msgstr "æå£žçš„å¿«å–æ¨¹æœ‰ä¸åœ¨ç´¢å¼•中的項目"
+
+#: cache-tree.c
+#, c-format
+msgid "%s with flags 0x%x should not be in cache-tree"
+msgstr "有 0x%2$x 標記的 %1$s 䏿‡‰è©²åœ¨å¿«å–樹當中"
+
+#: cache-tree.c
+#, c-format
+msgid "bad subtree '%.*s'"
+msgstr "「%.*sã€å­æ¨¹æå£ž"
+
+#: cache-tree.c
+#, c-format
+msgid "cache-tree for path %.*s does not match. Expected %s got %s"
+msgstr "%.*s è·¯å¾‘çš„å¿«å–æ¨¹ä¸ç¬¦ã€‚é æœŸæ˜¯ %s,å»å¾—到 %s"
+
#: chunk-format.c
msgid "terminating chunk id appears earlier than expected"
msgstr "終止å€å¡Š ID æ¯”é æœŸé‚„早出ç¾"
@@ -18339,7 +18454,7 @@ msgstr "正在驗證æäº¤åœ–中的æäº¤"
#: commit-reach.c sequencer.c
#, c-format
msgid "could not parse commit %s"
-msgstr "ä¸èƒ½è§£æžæäº¤ %s"
+msgstr "ç„¡æ³•è§£æžæäº¤ %s"
#: commit.c
#, c-format
@@ -18355,7 +18470,7 @@ msgid ""
"to convert the grafts into replace refs.\n"
"\n"
"Turn this message off by running\n"
-"\"git config advice.graftFileDeprecated false\""
+"\"git config set advice.graftFileDeprecated false\""
msgstr ""
"å° <GIT_DIR>/info/grafts 的支æ´å·²æ£„用,並將在\n"
"未來的 Git 版本中被移除。\n"
@@ -18363,8 +18478,8 @@ msgstr ""
"請使用「git replace --convert-graft-fileã€å°‡\n"
"grafts 轉æ›ç‚ºå–代引用。\n"
"\n"
-"設定「git config advice.graftFileDeprecated falseã€\n"
-"å¯ä»¥å°‡æœ¬è¨Šæ¯é—œé–‰"
+"設定「git config set advice.graftFileDeprecated falseã€\n"
+"å¯ä»¥é—œé–‰æ­¤è¨Šæ¯"
#: commit.c
#, c-format
@@ -18672,7 +18787,7 @@ msgstr ""
#: config.c
#, c-format
msgid "could not expand include path '%s'"
-msgstr "無法展開包å«è·¯å¾‘ '%s'"
+msgstr "無法展開包å«è·¯å¾‘「%sã€"
#: config.c
msgid "relative config includes must come from files"
@@ -18971,7 +19086,7 @@ msgstr "ä¸å…許多列備註:「%sã€"
#: config.c
#, c-format
msgid "could not lock config file %s"
-msgstr "ä¸èƒ½éŽ–å®šè¨­å®šæª”æ¡ˆ %s"
+msgstr "無法鎖定組態檔案 %s"
#: config.c
#, c-format
@@ -19001,12 +19116,12 @@ msgstr "å° %s å‘¼å« chmod 失敗"
#: config.c
#, c-format
msgid "could not write config file %s"
-msgstr "ä¸èƒ½å¯«å…¥è¨­å®šæª”案 %s"
+msgstr "無法寫入組態檔案 %s"
#: config.c
#, c-format
msgid "could not set '%s' to '%s'"
-msgstr "ä¸èƒ½è¨­å®š '%s' 為 '%s'"
+msgstr "無法將「%sã€è¨­ç‚ºã€Œ%sã€"
#: config.c
#, c-format
@@ -19205,7 +19320,7 @@ msgstr "無法 fork"
#: connected.c
msgid "Could not run 'git rev-list'"
-msgstr "ä¸èƒ½åŸ·è¡Œ 'git rev-list'"
+msgstr "無法執行「git rev-listã€"
#: connected.c
msgid "failed write to rev-list"
@@ -19362,6 +19477,21 @@ msgstr "URL 沒有 Scheme:%s"
msgid "credential url cannot be parsed: %s"
msgstr "ç„¡æ³•è§£æžæ†‘è­‰ URL:%s"
+#: daemon.c
+#, c-format
+msgid "invalid timeout '%s', expecting a non-negative integer"
+msgstr "無效的 timeout「%sã€ï¼Œé æœŸç‚ºéžè² æ•´æ•¸"
+
+#: daemon.c
+#, c-format
+msgid "invalid init-timeout '%s', expecting a non-negative integer"
+msgstr "無效的 init-timeout「%sã€ï¼Œæ‡‰ç‚ºéžè² æ•´æ•¸"
+
+#: daemon.c
+#, c-format
+msgid "invalid max-connections '%s', expecting an integer"
+msgstr "無效的 max-connections「%sã€ï¼Œæ‡‰ç‚ºæ•´æ•¸"
+
#: date.c
msgid "in the future"
msgstr "在將來"
@@ -19458,7 +19588,7 @@ msgstr "無法å°å­˜ä¸å­˜åœ¨çš„路徑「%sã€"
#: diagnose.c dir.c
#, c-format
msgid "could not open directory '%s'"
-msgstr "ä¸èƒ½é–‹å•Ÿç›®éŒ„ '%s'"
+msgstr "無法開啟目錄「%sã€"
#: diagnose.c
#, c-format
@@ -20133,12 +20263,12 @@ msgstr "è·¯å¾‘è¦æ ¼ '%s' 未符åˆä»»ä½• git 已知檔案"
#: dir.c
#, c-format
msgid "unrecognized pattern: '%s'"
-msgstr "無法識別樣å¼ï¼šã€Œ%sã€"
+msgstr "ä¸èªè­˜æ¨£å¼ï¼šã€Œ%sã€"
#: dir.c
#, c-format
msgid "unrecognized negative pattern: '%s'"
-msgstr "無法識別å呿¨¡å¼ï¼šã€Œ%sã€"
+msgstr "ä¸èªè­˜å呿¨¡å¼ï¼šã€Œ%sã€"
#: dir.c
#, c-format
@@ -20178,12 +20308,12 @@ msgstr "版本庫 %s 中的索引檔案æå£ž"
#: dir.c
#, c-format
msgid "could not create directories for %s"
-msgstr "ä¸èƒ½ç‚º %s 建立目錄"
+msgstr "無法建立 %s 的目錄"
#: dir.c
#, c-format
msgid "could not migrate git directory from '%s' to '%s'"
-msgstr "ä¸èƒ½å¾ž '%s' é·ç§» git 目錄到 '%s'"
+msgstr "無法從「%sã€é·ç§» git 目錄到「%sã€"
#: editor.c
#, c-format
@@ -20193,12 +20323,12 @@ msgstr "æç¤ºï¼šç­‰å¾…您的編輯器關閉檔案...%c"
#: editor.c sequencer.c wrapper.c
#, c-format
msgid "could not write to '%s'"
-msgstr "ä¸èƒ½å¯«å…¥ '%s'"
+msgstr "無法寫入「%sã€"
#: editor.c
#, c-format
msgid "could not edit '%s'"
-msgstr "無法編輯 '%s'"
+msgstr "無法編輯「%sã€"
#: entry.c
msgid "Filtering content"
@@ -20207,7 +20337,7 @@ msgstr "éŽæ¿¾å…§å®¹"
#: entry.c
#, c-format
msgid "could not stat file '%s'"
-msgstr "ä¸èƒ½å°æª”案 '%s' å‘¼å« stat"
+msgstr "無法 stat 檔案「%sã€"
#: environment.c
#, c-format
@@ -20220,6 +20350,23 @@ msgid "too many args to run %s"
msgstr "執行 %s çš„åƒæ•¸å¤ªå¤š"
#: fetch-pack.c
+#, c-format
+msgid ""
+"You are attempting to fetch %s, which is in the commit graph file but not in "
+"the object database.\n"
+"This is probably due to repo corruption.\n"
+"If you are attempting to repair this repo corruption by refetching the "
+"missing object, use 'git fetch --refetch' with the missing object."
+msgstr ""
+"你正在嘗試å–å¾— %s。這個物件在æäº¤åœ–檔案中,\n"
+"但ä¸åœ¨ç‰©ä»¶è³‡æ–™åº«ä¸­ã€‚\n"
+"\n"
+"這å¯èƒ½æ˜¯ç”±æ–¼å„²å­˜åº«æå£žæ‰€è‡´ã€‚\n"
+"\n"
+"如果你想é€éŽé‡æ–°æ“·å–éºå¤±çš„物件來修復儲存庫æå£žï¼Œ\n"
+"請使用「git fetch --refetchã€ä¸¦æŒ‡å®šéºå¤±çš„物件。"
+
+#: fetch-pack.c
msgid "git fetch-pack: expected shallow list"
msgstr "git fetch-pack:應為 shallow 列表"
@@ -20647,7 +20794,7 @@ msgstr "執行指令 '%s' 失敗:%s\n"
#: gpg-interface.c
msgid "could not create temporary file"
-msgstr "ä¸èƒ½å»ºç«‹æš«å­˜æª”"
+msgstr "無法建立暫存檔"
#: gpg-interface.c
#, c-format
@@ -20925,10 +21072,10 @@ msgstr[0] ""
#, 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`."
+"You can disable this warning with `git config set advice.ignoredHook false`."
msgstr ""
-"因為沒有將掛鉤 '%s' 設定為å¯åŸ·è¡Œï¼ŒæŽ›é‰¤è¢«å¿½ç•¥ã€‚您å¯ä»¥é€éŽ\n"
-"設定 `git config advice.ignoredHook false` 來關閉這æ¢è­¦å‘Šã€‚"
+"因為沒有將掛鉤「%sã€è¨­å®šç‚ºå¯åŸ·è¡Œï¼Œå› æ­¤å¿½ç•¥é€™å€‹æŽ›é‰¤ã€‚\n"
+"您å¯ä»¥é€éŽè¨­å®šã€Œgit config set advice.ignoredHook falseã€ä¾†é—œé–‰é€™å‰‡è­¦å‘Šã€‚"
#: http-fetch.c
msgid "not a git repository"
@@ -20949,18 +21096,10 @@ msgid "Delegation control is not supported with cURL < 7.22.0"
msgstr "䏿”¯æ´å§”託控制,因為 cURL < 7.22.0"
#: http.c
-msgid "Public key pinning not supported with cURL < 7.39.0"
-msgstr "䏿”¯æ´å…¬é‘°æª”案鎖定,因為 cURL < 7.39.0"
-
-#: http.c
msgid "Unknown value for http.proactiveauth"
msgstr "http.proactiveauth 的值未知"
#: http.c
-msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
-msgstr "䏿”¯æ´ CURLSSLOPT_NO_REVOKE,因為 cURL < 7.44.0"
-
-#: http.c
#, c-format
msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
msgstr "䏿”¯æ´çš„ SSL 後端 '%s'。支æ´çš„ SSL 後端:"
@@ -20968,12 +21107,12 @@ msgstr "䏿”¯æ´çš„ SSL 後端 '%s'。支æ´çš„ SSL 後端:"
#: http.c
#, c-format
msgid "Could not set SSL backend to '%s': cURL was built without SSL backends"
-msgstr "無法將 SSL 後端設定為 '%s':組建 cURL 時未加入 SSL 後端"
+msgstr "無法將 SSL 後端設定為「%sã€ï¼šçµ„建 cURL 時未加入 SSL 後端"
#: http.c
#, c-format
msgid "Could not set SSL backend to '%s': already set"
-msgstr "無法將 SSL 後端設定為 '%s':已經設定"
+msgstr "無法將 SSL 後端設定為「%sã€ï¼šå·²ç¶“設定"
#: http.c
msgid "refusing to read cookies from http.cookiefile '-'"
@@ -21089,7 +21228,7 @@ msgstr "ä¸èƒ½æ··ç”¨å¤šç¨®éŽæ¿¾è¦æ ¼"
#: list-objects-filter-options.c
msgid "unable to upgrade repository format to support partial clone"
-msgstr "無法å‡ç´šç‰ˆæœ¬åº«æ ¼å¼ï¼Œä»¥è‡´ä¸æ”¯æ´éƒ¨åˆ†è¤‡è£½"
+msgstr "無法å‡ç´šç‰ˆæœ¬åº«æ ¼å¼ï¼Œä»¥æ”¯æ´éƒ¨åˆ†è¤‡è£½"
#: list-objects-filter-options.h
msgid "args"
@@ -21180,6 +21319,11 @@ msgstr "嵿¸¬åˆ°ç”±å¯åˆ—å°å­—å…ƒ (quoted) 所組æˆçš„ CRLF"
msgid "unable to format message: %s"
msgstr "無法格å¼åŒ–訊æ¯ï¼š%s"
+#: merge-ll.c
+#, c-format
+msgid "invalid marker-size '%s', expecting an integer"
+msgstr "無效的 marker-size「%sã€ï¼Œæ‡‰ç‚ºæ•´æ•¸"
+
#: merge-ort.c merge-recursive.c
#, c-format
msgid "Failed to merge submodule %s (not checked out)"
@@ -21751,7 +21895,7 @@ msgstr "åˆä½µæœªè¿”回æäº¤"
#: merge-recursive.c
#, c-format
msgid "Could not parse object '%s'"
-msgstr "ä¸èƒ½è§£æžç‰©ä»¶ '%s'"
+msgstr "無法解æžç‰©ä»¶ã€Œ%sã€"
#: merge.c
msgid "failed to read the cache"
@@ -21871,7 +22015,7 @@ msgstr "無法將一個增é‡å¤šå°è£ç´¢å¼•çš„å¥—ä»¶è¨­ç‚ºéŽæœŸ"
#: midx-write.c
msgid "Counting referenced objects"
-msgstr "正在計算引用物件"
+msgstr "正在計算引用物件數é‡"
#: midx-write.c
msgid "Finding and deleting unreferenced packfiles"
@@ -21883,11 +22027,11 @@ msgstr "ç„¡æ³•é‡æ–°å°è£å¢žé‡çš„多å°è£ç´¢å¼•"
#: midx-write.c
msgid "could not start pack-objects"
-msgstr "ä¸èƒ½é–‹å§‹ pack-objects"
+msgstr "無法啟動 pack-objects"
#: midx-write.c
msgid "could not finish pack-objects"
-msgstr "ä¸èƒ½çµæŸ pack-objects"
+msgstr "ç„¡æ³•çµæŸ pack-objects"
#: midx.c
msgid "multi-pack-index OID fanout is of the wrong size"
@@ -22489,17 +22633,17 @@ msgid ""
"\n"
"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
+"running \"git config set advice.objectNameWarning false\""
msgstr ""
-"Git é€šå¸¸ä¸æœƒå»ºç«‹ä»¥ 40 個å六進ä½å­—å…ƒçµå°¾çš„引用,\n"
-"å› ç‚ºç•¶æ‚¨åªæä¾› 40 個å六進ä½å­—元時,其將被忽略。\n"
-"這些引用å¯èƒ½è¢«æ„外建立。例如:\n"
+"Git é€šå¸¸ä¸æœƒå»ºç«‹ä»¥ 40 個å六進ä½å­—å…ƒçµå°¾çš„åƒç…§ï¼Œ\n"
+"因為在指定 40 個å六進ä½å­—元時會被忽略。\n"
+"這些åƒç…§å¯èƒ½æ˜¯æ„外建立的。例如,\n"
"\n"
" git switch -c $br $(git rev-parse ...)\n"
"\n"
-"當「$brã€å› ç‚ºæŸäº›åŽŸå› ç©ºç™½æ™‚ï¼Œæœƒå»ºç«‹å‡º 40 ä½å六進ä½çš„引用。\n"
-"請檢查這些引用,並視需è¦åˆªé™¤ã€‚執行\n"
-"「git config advice.objectNameWarning falseã€å‘½ä»¤ä»¥é—œé–‰æœ¬è¨Šæ¯é€šçŸ¥"
+"其中「$brã€ä¸çŸ¥ä½•故為空白,導致建立了一個 40 個\n"
+"å六進ä½å­—元的åƒç…§ã€‚請檢查這些åƒç…§ï¼Œå¿…è¦æ™‚刪除它們。\n"
+"è‹¥è¦é—œé–‰æ­¤è¨Šæ¯ï¼Œè«‹åŸ·è¡Œã€Œgit config set advice.objectNameWarning falseã€"
#: object-name.c
#, c-format
@@ -22693,15 +22837,6 @@ msgstr "多包ä½åœ–缺少需è¦çš„åå‘索引"
msgid "could not open pack %s"
msgstr "無法開啟å°åŒ… %s"
-#: pack-bitmap.c t/helper/test-read-midx.c
-msgid "could not determine MIDX preferred pack"
-msgstr "無法確定 MIDX å好的å°è£"
-
-#: pack-bitmap.c
-#, c-format
-msgid "preferred pack (%s) is invalid"
-msgstr "å好的å°åŒ… (%s) 無效"
-
#: pack-bitmap.c
msgid "corrupt bitmap lookup table: triplet position out of index"
msgstr "ä½åœ–查詢表æå£žï¼šä¸‰å…ƒçµ„ä½ç½®è¶…出索引"
@@ -22774,7 +22909,7 @@ msgstr "å½åˆä½µç´¢å¼•超出範åœï¼ˆ%<PRIu32> >= %<PRIuMAX>)"
#: pack-bitmap.c
#, c-format
msgid "could not find '%s' in pack '%s' at offset %<PRIuMAX>"
-msgstr "在「%2$sã€å°åŒ…,ä½ç§» %3$<PRIuMAX> 的地方找ä¸åˆ°ã€Œ%1$sã€"
+msgstr "無法在「%2$sã€å°åŒ…,ä½ç§» %3$<PRIuMAX> 的地方找到「%1$sã€"
#: pack-bitmap.c
#, c-format
@@ -23071,7 +23206,7 @@ msgstr "è§£æž %s 失敗"
#: path.c
#, c-format
msgid "Could not make %s writable by group"
-msgstr "ä¸èƒ½è¨­å®š %s 為組å¯å¯«"
+msgstr "無法設定 %s 為群組å¯å¯«"
#: pathspec.c
msgid "Escape character '\\' not allowed as last character in attr value"
@@ -23325,16 +23460,16 @@ msgstr "ç„¡æ³•è®€å–æäº¤ %s 的延伸å½åˆä½µè¡¨"
#: range-diff.c
msgid "could not start `log`"
-msgstr "ä¸èƒ½å•Ÿå‹• `log`"
+msgstr "無法啟動「logã€"
#: range-diff.c
msgid "could not read `log` output"
-msgstr "ä¸èƒ½è®€å– `log` 的輸出"
+msgstr "無法讀å–「logã€çš„輸出"
#: range-diff.c sequencer.c
#, c-format
msgid "could not parse commit '%s'"
-msgstr "ä¸èƒ½è§£æžæäº¤ '%s'"
+msgstr "ç„¡æ³•è§£æžæäº¤ã€Œ%sã€"
#: range-diff.c
#, c-format
@@ -23346,7 +23481,7 @@ msgstr "無法解æžç¬¬ä¸€è¡Œã€Œlogã€è¼¸å‡ºï¼šé–‹é ­ä¸æ˜¯ã€Œcommitã€ï¼šã€Œ%sã
#: range-diff.c
#, c-format
msgid "could not parse git header '%.*s'"
-msgstr "ç„¡æ³•è§£æž git é ­ '%.*s'"
+msgstr "ç„¡æ³•è§£æž git 標頭「%.*sã€"
#: range-diff.c
msgid "failed to generate diff"
@@ -23355,7 +23490,7 @@ msgstr "ç”Ÿæˆ diff 失敗"
#: range-diff.c
#, c-format
msgid "could not parse log for '%s'"
-msgstr "ä¸èƒ½è§£æž '%s' 的日誌"
+msgstr "無法解æžã€Œ%sã€çš„æ—¥èªŒ"
#: reachable.c
#, c-format
@@ -23509,7 +23644,7 @@ msgstr "無法加入 load_index_extensions 執行緒:%s"
#: read-cache.c
#, c-format
msgid "could not freshen shared index '%s'"
-msgstr "ç„¡æ³•é‡æ–°æ•´ç†å…±äº«ç´¢å¼• '%s'"
+msgstr "無法更新共享索引「%sã€"
#: read-cache.c
#, c-format
@@ -23567,7 +23702,7 @@ msgstr ""
#, c-format
msgid ""
"unrecognized setting %s for option rebase.missingCommitsCheck. Ignoring."
-msgstr "é¸é … rebase.missingCommitsCheck 的值 %s 無法識別。已忽略。"
+msgstr "é¸é … rebase.missingCommitsCheck 的值 %s ä¸èªè­˜ã€‚已忽略。"
#: rebase-interactive.c
msgid ""
@@ -23669,7 +23804,7 @@ msgstr ""
#: rebase-interactive.c
#, c-format
msgid "could not write '%s'."
-msgstr "ä¸èƒ½å¯«å…¥ '%s'。"
+msgstr "無法寫入「%sã€ã€‚"
#: rebase-interactive.c
#, c-format
@@ -23728,7 +23863,7 @@ msgstr "%%(%.*s) ä¸å–引數"
#: ref-filter.c
#, c-format
msgid "unrecognized %%(%.*s) argument: %s"
-msgstr "無法識別的 %%(%.*s) 引數:%s"
+msgstr "ä¸èªè­˜çš„ %%(%.*s) 引數:%s"
#: ref-filter.c
#, c-format
@@ -23738,7 +23873,7 @@ msgstr "期望的格å¼ï¼š%%(color:<é¡è‰²>)"
#: ref-filter.c
#, c-format
msgid "unrecognized color: %%(color:%s)"
-msgstr "無法識別的é¡è‰²ï¼š%%(color:%s)"
+msgstr "ä¸èªè­˜çš„é¡è‰²ï¼š%%(color:%s)"
#: ref-filter.c
#, c-format
@@ -23798,17 +23933,17 @@ msgstr "期望的格å¼ï¼š%%(align:<寬度>,<ä½ç½®>)"
#: ref-filter.c
#, c-format
msgid "unrecognized position:%s"
-msgstr "無法識別的ä½ç½®ï¼š%s"
+msgstr "ä¸èªè­˜çš„ä½ç½®ï¼š%s"
#: ref-filter.c
#, c-format
msgid "unrecognized width:%s"
-msgstr "無法識別的寬度:%s"
+msgstr "ä¸èªè­˜çš„寬度:%s"
#: ref-filter.c
#, c-format
msgid "unrecognized %%(%s) argument: %s"
-msgstr "無法識別的 %%(%s) åƒæ•¸ï¼š%s"
+msgstr "ä¸èªè­˜çš„ %%(%s) åƒæ•¸ï¼š%s"
#: ref-filter.c
#, c-format
@@ -23879,7 +24014,7 @@ msgstr "本命令拒絕 atom %%(%.*s)"
#: ref-filter.c
#, c-format
msgid "--format=%.*s cannot be used with --python, --shell, --tcl"
-msgstr "--format=%.*s ä¸èƒ½å’Œ --pythonã€--shellã€--tcl 一起使用"
+msgstr "--format=%.*s 無法和 --pythonã€--shellã€--tcl 一起使用"
#: ref-filter.c
msgid "failed to run 'describe'"
@@ -24037,8 +24172,19 @@ msgid "log for %s is empty"
msgstr "%s 的日誌為空"
#: refs.c
-msgid "refusing to force and skip creation of reflog"
-msgstr "拒絕強制並略éŽå»ºç«‹å¼•用日誌"
+#, c-format
+msgid "refusing to update reflog for pseudoref '%s'"
+msgstr "拒絕更新å½å¼•用「%s〠的 reflog"
+
+#: refs.c
+#, c-format
+msgid "refusing to update pseudoref '%s'"
+msgstr "拒絕更新å½å¼•用「%sã€"
+
+#: refs.c
+#, c-format
+msgid "refusing to update reflog with bad name '%s'"
+msgstr "拒絕更新有錯誤å稱「%sã€çš„ reflog"
#: refs.c
#, c-format
@@ -24046,9 +24192,8 @@ msgid "refusing to update ref with bad name '%s'"
msgstr "拒絕更新有錯誤å稱 '%s' 的引用"
#: refs.c
-#, c-format
-msgid "refusing to update pseudoref '%s'"
-msgstr "拒絕更新å½å¼•用「%sã€"
+msgid "refusing to force and skip creation of reflog"
+msgstr "拒絕強制並略éŽå»ºç«‹å¼•用日誌"
#: refs.c
#, c-format
@@ -24111,6 +24256,11 @@ msgstr "無法鎖定引用「%sã€ï¼šé æœŸæ˜¯æŒ‡å‘「%sã€çš„符號引用,ä½
#: refs/files-backend.c
#, c-format
+msgid "cannot read ref file '%s'"
+msgstr "無法寫入åƒç…§æª”案「%sã€"
+
+#: refs/files-backend.c
+#, c-format
msgid "cannot open directory %s"
msgstr "無法開啟 %s 目錄"
@@ -24367,8 +24517,13 @@ msgstr "æä¾›äº†ä¸€å€‹ä»¥ä¸Šçš„ uploadpack,使用第一個"
#: remote.c
#, c-format
+msgid "unrecognized followRemoteHEAD value '%s' ignored"
+msgstr "已經忽略ä¸èªè­˜çš„「%sã€æ•¸å€¼"
+
+#: remote.c
+#, c-format
msgid "unrecognized value transfer.credentialsInUrl: '%s'"
-msgstr "數值 transfer.credentialsInUrl 無法識別:「%sã€"
+msgstr "數值 transfer.credentialsInUrl ä¸èªè­˜ï¼šã€Œ%sã€"
#: remote.c
#, c-format
@@ -24657,7 +24812,7 @@ msgstr "寫入 '%s' (%s) 時發生錯誤"
#: rerere.c
#, c-format
msgid "could not parse conflict hunks in '%s'"
-msgstr "ä¸èƒ½è§£æž '%s' 中的è¡çªå€å¡Š"
+msgstr "無法解æžã€Œ%sã€ä¸­çš„è¡çªå€å¡Š"
#: rerere.c
#, c-format
@@ -24724,7 +24879,7 @@ msgstr "如果å¯èƒ½ï¼Œé‡ç”¨è¡çªè§£æ±ºæ›´æ–°ç´¢å¼•"
#: reset.c
msgid "could not determine HEAD revision"
-msgstr "ä¸èƒ½ç¢ºå®š HEAD 版本"
+msgstr "無法確定 HEAD 修訂版"
#: reset.c sequencer.c
#, c-format
@@ -25110,7 +25265,7 @@ msgstr "無效的æäº¤èªªæ˜Žæ¸…ç†æ¨¡å¼ '%s'"
#: sequencer.c
#, c-format
msgid "could not delete '%s'"
-msgstr "無法刪除 '%s'"
+msgstr "無法刪除「%sã€"
#: sequencer.c
msgid "revert"
@@ -25185,12 +25340,12 @@ msgstr ""
#: sequencer.c
#, c-format
msgid "could not lock '%s'"
-msgstr "ä¸èƒ½éŽ–å®š '%s'"
+msgstr "無法鎖定「%sã€"
#: sequencer.c
#, c-format
msgid "could not write eol to '%s'"
-msgstr "ä¸èƒ½å°‡æ›è¡Œç¬¦è™Ÿå¯«å…¥ '%s'"
+msgstr "無法將æ›è¡Œç¬¦è™Ÿå¯«å…¥ã€Œ%sã€"
#: sequencer.c
#, c-format
@@ -25220,7 +25375,7 @@ msgstr "ä¸èƒ½æ›´æ–°å¿«å–樹"
#: sequencer.c
msgid "could not resolve HEAD commit"
-msgstr "ä¸èƒ½è§£æž HEAD æäº¤"
+msgstr "ç„¡æ³•è§£æž HEAD æäº¤"
#: sequencer.c
#, c-format
@@ -25347,7 +25502,7 @@ msgstr "無法找到新建立的æäº¤"
#: sequencer.c
msgid "could not parse newly created commit"
-msgstr "ä¸èƒ½è§£æžæ–°å»ºç«‹çš„æäº¤"
+msgstr "ç„¡æ³•è§£æžæ–°å»ºç«‹çš„æäº¤"
#: sequencer.c
msgid "unable to resolve HEAD after creating commit"
@@ -25364,7 +25519,7 @@ msgstr " (æ ¹æäº¤)"
#: sequencer.c
msgid "could not parse HEAD"
-msgstr "ä¸èƒ½è§£æž HEAD"
+msgstr "ç„¡æ³•è§£æž HEAD"
#: sequencer.c
#, c-format
@@ -25392,12 +25547,12 @@ msgstr "作者資訊æå£žï¼šç¼ºå°‘日期資訊"
#: sequencer.c
#, c-format
msgid "could not update %s"
-msgstr "ä¸èƒ½æ›´æ–° %s"
+msgstr "無法更新 %s"
#: sequencer.c
#, c-format
msgid "could not parse parent commit %s"
-msgstr "ä¸èƒ½è§£æžçˆ¶æäº¤ %s"
+msgstr "無法解æžçˆ¶æäº¤ %s"
#: sequencer.c
#, c-format
@@ -25438,16 +25593,16 @@ msgstr "需è¦ä¸€å€‹ HEAD 來修復"
#: sequencer.c
msgid "could not read HEAD"
-msgstr "ä¸èƒ½è®€å– HEAD"
+msgstr "ç„¡æ³•è®€å– HEAD"
#: sequencer.c
msgid "could not read HEAD's commit message"
-msgstr "ä¸èƒ½è®€å– HEAD çš„æäº¤èªªæ˜Ž"
+msgstr "ç„¡æ³•è®€å– HEAD çš„æäº¤èªªæ˜Ž"
#: sequencer.c
#, c-format
msgid "could not read commit message of %s"
-msgstr "ä¸èƒ½è®€å– %s çš„æäº¤èªªæ˜Ž"
+msgstr "ç„¡æ³•è®€å– %s çš„æäº¤èªªæ˜Ž"
#: sequencer.c
msgid "your index file is unmerged."
@@ -25482,12 +25637,12 @@ msgstr "%s:ä¸èƒ½è§£æžçˆ¶æäº¤ %s"
#: sequencer.c
#, c-format
msgid "could not revert %s... %s"
-msgstr "ä¸èƒ½é‚„原 %s... %s"
+msgstr "無法還原 %s... %s"
#: sequencer.c
#, c-format
msgid "could not apply %s... %s"
-msgstr "ä¸èƒ½å¥—用 %s... %s"
+msgstr "無法套用 %s... %s"
#: sequencer.c
#, c-format
@@ -25580,7 +25735,7 @@ msgstr "缺少 %s çš„åƒæ•¸"
#: sequencer.c
#, c-format
msgid "could not parse '%s'"
-msgstr "ç„¡æ³•è§£æž '%s'"
+msgstr "無法解æžã€Œ%sã€"
#: sequencer.c
#, c-format
@@ -25655,7 +25810,7 @@ msgstr "嘗試 \"git cherry-pick (--continue | %s--abort | --quit)\""
#: sequencer.c
#, c-format
msgid "could not create sequencer directory '%s'"
-msgstr "ä¸èƒ½å»ºç«‹åºåˆ—目錄 '%s'"
+msgstr "無法建立åºåˆ—目錄「%sã€"
#: sequencer.c
msgid "no cherry-pick or revert in progress"
@@ -25742,12 +25897,12 @@ msgstr ""
#: sequencer.c
#, c-format
msgid "Could not apply %s... %.*s"
-msgstr "ä¸èƒ½å¥—用 %s... %.*s"
+msgstr "無法套用 %s... %.*s"
#: sequencer.c
#, c-format
msgid "Could not merge %.*s"
-msgstr "ä¸èƒ½åˆä½µ %.*s"
+msgstr "無法åˆä½µ %.*s"
#: sequencer.c
#, c-format
@@ -25799,7 +25954,7 @@ msgstr "éžæ³•的標籤å稱:'%.*s'"
#: sequencer.c
#, c-format
msgid "could not resolve '%s'"
-msgstr "ç„¡æ³•è§£æž '%s'"
+msgstr "無法解æžã€Œ%sã€"
#: sequencer.c
msgid "writing fake root commit"
@@ -25830,12 +25985,12 @@ msgstr "ç« é­šåˆä¸¦ä¸èƒ½åœ¨ä¸€å€‹æ–°çš„æ ¹æäº¤ä¸ŠåŸ·è¡Œ"
#: sequencer.c
#, c-format
msgid "could not get commit message of '%s'"
-msgstr "ä¸èƒ½å–å¾— '%s' çš„æäº¤èªªæ˜Ž"
+msgstr "無法å–得「%sã€çš„æäº¤èªªæ˜Ž"
#: sequencer.c
#, c-format
msgid "could not even attempt to merge '%.*s'"
-msgstr "甚至ä¸èƒ½å˜—試åˆä½µ '%.*s'"
+msgstr "甚至無法嘗試åˆä½µã€Œ%.*sã€"
#: sequencer.c
msgid "merge: Unable to write new index file"
@@ -25877,7 +26032,7 @@ msgstr "æ„外的 stash 回應:'%s'"
#: sequencer.c
#, c-format
msgid "Could not create directory for '%s'"
-msgstr "ä¸èƒ½ç‚º '%s' 建立目錄"
+msgstr "無法建立「%sã€çš„目錄"
#: sequencer.c
#, c-format
@@ -25923,7 +26078,7 @@ msgstr "autostash 引用是符號引用"
#: sequencer.c
msgid "could not detach HEAD"
-msgstr "ä¸èƒ½åˆ†é›¢é–‹é ­æŒ‡æ¨™"
+msgstr "無法分離開頭指標"
#: sequencer.c
#, c-format
@@ -25950,7 +26105,7 @@ msgstr ""
"無法執行待辦指令\n"
"\n"
" %.*s\n"
-"å·²è¢«é‡æ–°å®‰æŽ’,在繼續之å‰ç·¨è¼¯æŒ‡ä»¤ï¼Œè«‹å…ˆç·¨è¼¯å¾…辦列表:\n"
+"å·²ç¶“é‡æ–°å®‰æŽ’。若è¦åœ¨ç¹¼çºŒä¹‹å‰ç·¨è¼¯æŒ‡ä»¤ï¼Œè«‹å…ˆç·¨è¼¯å¾…辦列表:\n"
"\n"
" git rebase --edit-todo\n"
" git rebase --continue\n"
@@ -25972,16 +26127,16 @@ msgstr "未知指令 %d"
#: sequencer.c
msgid "could not read orig-head"
-msgstr "ä¸èƒ½è®€å– orig-head"
+msgstr "ç„¡æ³•è®€å– orig-head"
#: sequencer.c
msgid "could not read 'onto'"
-msgstr "ä¸èƒ½è®€å– 'onto'"
+msgstr "無法讀å–「ontoã€"
#: sequencer.c
#, c-format
msgid "could not update HEAD to %s"
-msgstr "ä¸èƒ½æ›´æ–° HEAD 為 %s"
+msgstr "無法將 HEAD 更新到 %s"
#: sequencer.c
#, c-format
@@ -26018,15 +26173,15 @@ msgstr ""
#: sequencer.c
#, c-format
msgid "could not write file: '%s'"
-msgstr "ä¸èƒ½å¯«å…¥æª”案:'%s'"
+msgstr "無法寫入檔案:「%sã€"
#: sequencer.c
msgid "could not remove CHERRY_PICK_HEAD"
-msgstr "ä¸èƒ½åˆªé™¤ CHERRY_PICK_HEAD"
+msgstr "無法刪除 CHERRY_PICK_HEAD"
#: sequencer.c
msgid "could not commit staged changes."
-msgstr "ä¸èƒ½æäº¤æš«å­˜çš„修改。"
+msgstr "無法æäº¤æš«å­˜çš„修改。"
#: sequencer.c
#, c-format
@@ -26446,7 +26601,7 @@ msgstr "忽略å¯èƒ½è¢«è§£æžç‚ºå‘½ä»¤åˆ—é¸é …çš„ '%s':%s"
#: submodule-config.c
#, c-format
msgid "Could not update .gitmodules entry %s"
-msgstr "ä¸èƒ½æ›´æ–° .gitmodules æ¢ç›® %s"
+msgstr "無法更新 .gitmodules æ¢ç›® %s"
#: submodule.c
msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
@@ -26498,7 +26653,7 @@ msgstr "å­æ¨¡çµ„æ¢ç›® '%s'(%s)是一個 %sï¼Œä¸æ˜¯ä¸€å€‹æäº¤"
msgid ""
"Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
"submodule %s"
-msgstr "無法在 %s å­æ¨¡çµ„執行 'git rev-list <æäº¤> --not --remotes -n 1' 命令"
+msgstr "無法在 %s å­æ¨¡çµ„執行「git rev-list <æäº¤> --not --remotes -n 1ã€å‘½ä»¤"
#: submodule.c
#, c-format
@@ -26552,7 +26707,7 @@ msgstr "無法將 '%s' 識別為一個 git 版本庫"
#: submodule.c
#, c-format
msgid "Could not run 'git status --porcelain=2' in submodule %s"
-msgstr "無法在 %s å­æ¨¡çµ„執行 'git status --porcelain=2'"
+msgstr "無法在 %s å­æ¨¡çµ„執行「git status --porcelain=2ã€"
#: submodule.c
#, c-format
@@ -26562,17 +26717,17 @@ msgstr "%s å­æ¨¡çµ„執行 'git status --porcelain=2' 失敗"
#: submodule.c
#, c-format
msgid "could not start 'git status' in submodule '%s'"
-msgstr "ç„¡æ³•åœ¨å­æ¨¡çµ„ '%s' 中啟動 'git status'"
+msgstr "ç„¡æ³•åœ¨å­æ¨¡çµ„「%sã€ä¸­å•Ÿå‹•「git statusã€"
#: submodule.c
#, c-format
msgid "could not run 'git status' in submodule '%s'"
-msgstr "ç„¡æ³•åœ¨å­æ¨¡çµ„ '%s' 中執行 'git status'"
+msgstr "ç„¡æ³•åœ¨å­æ¨¡çµ„「%sã€ä¸­åŸ·è¡Œã€Œgit statusã€"
#: submodule.c
#, c-format
msgid "Could not unset core.worktree setting in submodule '%s'"
-msgstr "ç„¡æ³•åœ¨å­æ¨¡çµ„ '%s' 䏭喿¶ˆ core.worktree 的設定"
+msgstr "ç„¡æ³•åœ¨å­æ¨¡çµ„「%sã€ä¸­å–消 core.worktree 的設定"
#: submodule.c
#, c-format
@@ -26617,7 +26772,7 @@ msgstr "䏿”¯æ´å°æœ‰å¤šå€‹å·¥ä½œå€çš„å­æ¨¡çµ„ '%s' 執行 relocate_gitdir"
#: submodule.c
#, c-format
msgid "could not lookup name for submodule '%s'"
-msgstr "ä¸èƒ½æŸ¥è©¢å­æ¨¡çµ„ '%s' çš„å稱"
+msgstr "ç„¡æ³•æŸ¥è©¢å­æ¨¡çµ„「%sã€çš„å稱"
#: submodule.c
#, c-format
@@ -26678,6 +26833,10 @@ msgstr "æäº¤ %s 沒有標記為å¯ä»¥å–å¾—"
msgid "too many commits marked reachable"
msgstr "太多æäº¤æ¨™è¨˜ç‚ºå¯ä»¥å–å¾—"
+#: t/helper/test-read-midx.c
+msgid "could not determine MIDX preferred pack"
+msgstr "無法確定 MIDX å好的å°è£"
+
#: t/helper/test-serve-v2.c
msgid "test-tool serve-v2 [<options>]"
msgstr "test-tool serve-v2 [<é¸é …>]"
@@ -26833,7 +26992,7 @@ msgstr "%s 也鎖定了 %s"
#: transport-helper.c
msgid "couldn't run fast-import"
-msgstr "ä¸èƒ½åŸ·è¡Œ fast-import"
+msgstr "無法執行 fast-import"
#: transport-helper.c
msgid "error while running fast-import"
@@ -27014,7 +27173,7 @@ msgstr "伺æœå™¨ä¸æ”¯æ´ã€Œç­‰å¾…完æˆã€(wait-for-done) 功能"
#: transport.c
msgid "could not parse transport.color.* config"
-msgstr "ä¸èƒ½è§£æž transport.color.* 設定"
+msgstr "ç„¡æ³•è§£æž transport.color.* 組態"
#: transport.c
msgid "support for protocol v2 not implemented yet"
@@ -27453,6 +27612,10 @@ msgid ".git file incorrect"
msgstr ".git æª”æ¡ˆä¸æ­£ç¢º"
#: worktree.c
+msgid ".git file absolute/relative path mismatch"
+msgstr ".git æª”æ¡ˆçš„çµ•å°æˆ–相å°è·¯å¾‘ä¸ä¸€è‡´"
+
+#: worktree.c
msgid "not a valid path"
msgstr "éžæœ‰æ•ˆè·¯å¾‘"
@@ -27473,6 +27636,10 @@ msgid "gitdir unreadable"
msgstr "ç„¡æ³•è®€å– gitdir"
#: worktree.c
+msgid "gitdir absolute/relative path mismatch"
+msgstr "gitdir çš„çµ•å°æˆ–相å°è·¯å¾‘ä¸ä¸€è‡´"
+
+#: worktree.c
msgid "gitdir incorrect"
msgstr "䏿­£ç¢ºçš„ gitdir"
@@ -27516,10 +27683,18 @@ msgstr "ç„¡æ³•å–æ¶ˆåœ¨ã€Œ%2$sã€è¨­å®šçš„ %1$s"
msgid "failed to set extensions.worktreeConfig setting"
msgstr "無法設定 extensions.worktreeConfig 設定"
+#: worktree.c
+msgid "unable to upgrade repository format to support relative worktrees"
+msgstr "無法å‡ç´šç‰ˆæœ¬åº«æ ¼å¼ï¼Œä»¥æ”¯æ´ç›¸å°è·¯å¾‘工作å€"
+
+#: worktree.c
+msgid "unable to set extensions.relativeWorktrees setting"
+msgstr "無法設定 extensions.relativeWorktrees 設定"
+
#: wrapper.c
#, c-format
msgid "could not setenv '%s'"
-msgstr "無法 setenv '%s'"
+msgstr "無法 setenv「%sã€"
#: wrapper.c
#, c-format
@@ -27529,7 +27704,7 @@ msgstr "ä¸èƒ½å»ºç«‹ '%s'"
#: wrapper.c
#, c-format
msgid "could not open '%s' for reading and writing"
-msgstr "無法開啟 '%s' 進行讀寫"
+msgstr "無法開啟「%sã€é€²è¡Œè®€å¯«"
#: wrapper.c
#, c-format
@@ -28582,6 +28757,24 @@ msgstr "ç•¥éŽ %s å«å‚™ä»½å¾Œç¶´ '%s'。\n"
msgid "Do you really want to send %s? [y|N]: "
msgstr "您真的è¦å‚³é€ %s?[y|N]: "
+#, c-format
+#~ msgid "preferred pack (%s) is invalid"
+#~ msgstr "å好的å°åŒ… (%s) 無效"
+
+#, c-format
+#~ msgid ""
+#~ "more than %i tags found; listed %i most recent\n"
+#~ "gave up search at %s\n"
+#~ msgstr ""
+#~ "發ç¾å¤šæ–¼ %i 個標籤,列出最近的 %i 個\n"
+#~ "在 %s 放棄æœå°‹\n"
+
+#~ msgid "Public key pinning not supported with cURL < 7.39.0"
+#~ msgstr "䏿”¯æ´å…¬é‘°æª”案鎖定,因為 cURL < 7.39.0"
+
+#~ msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
+#~ msgstr "䏿”¯æ´ CURLSSLOPT_NO_REVOKE,因為 cURL < 7.44.0"
+
#~ msgid "revision walk setup failed\n"
#~ msgstr "ä¿®è¨‚ç‰ˆéæ­·è¨­å®šå¤±æ•—\n"
diff --git a/preload-index.c b/preload-index.c
index ab94d6f399..40ab2abafb 100644
--- a/preload-index.c
+++ b/preload-index.c
@@ -132,7 +132,9 @@ void preload_index(struct index_state *index,
memset(&pd, 0, sizeof(pd));
if (refresh_flags & REFRESH_PROGRESS && isatty(2)) {
- pd.progress = start_delayed_progress(_("Refreshing index"), index->cache_nr);
+ pd.progress = start_delayed_progress(the_repository,
+ _("Refreshing index"),
+ index->cache_nr);
pthread_mutex_init(&pd.mutex, NULL);
}
diff --git a/prio-queue.h b/prio-queue.h
index 36f370625f..38d032636d 100644
--- a/prio-queue.h
+++ b/prio-queue.h
@@ -22,13 +22,13 @@
typedef int (*prio_queue_compare_fn)(const void *one, const void *two, void *cb_data);
struct prio_queue_entry {
- unsigned ctr;
+ size_t ctr;
void *data;
};
struct prio_queue {
prio_queue_compare_fn compare;
- unsigned insertion_ctr;
+ size_t insertion_ctr;
void *cb_data;
size_t alloc, nr;
struct prio_queue_entry *array;
diff --git a/progress.c b/progress.c
index a8fdfceb5c..8d5ae70f3a 100644
--- a/progress.c
+++ b/progress.c
@@ -9,7 +9,6 @@
*/
#define GIT_TEST_PROGRESS_ONLY
-#define USE_THE_REPOSITORY_VARIABLE
#define DISABLE_SIGN_COMPARE_WARNINGS
#include "git-compat-util.h"
@@ -37,6 +36,7 @@ struct throughput {
};
struct progress {
+ struct repository *repo;
const char *title;
uint64_t last_value;
uint64_t total;
@@ -254,10 +254,12 @@ void display_progress(struct progress *progress, uint64_t n)
display(progress, n, NULL);
}
-static struct progress *start_progress_delay(const char *title, uint64_t total,
+static struct progress *start_progress_delay(struct repository *r,
+ const char *title, uint64_t total,
unsigned delay, unsigned sparse)
{
struct progress *progress = xmalloc(sizeof(*progress));
+ progress->repo = r;
progress->title = title;
progress->total = total;
progress->last_value = -1;
@@ -270,7 +272,7 @@ static struct progress *start_progress_delay(const char *title, uint64_t total,
progress->title_len = utf8_strwidth(title);
progress->split = 0;
set_progress_signal();
- trace2_region_enter("progress", title, the_repository);
+ trace2_region_enter("progress", title, r);
return progress;
}
@@ -284,14 +286,16 @@ static int get_default_delay(void)
return delay_in_secs;
}
-struct progress *start_delayed_progress(const char *title, uint64_t total)
+struct progress *start_delayed_progress(struct repository *r,
+ const char *title, uint64_t total)
{
- return start_progress_delay(title, total, get_default_delay(), 0);
+ return start_progress_delay(r, title, total, get_default_delay(), 0);
}
-struct progress *start_progress(const char *title, uint64_t total)
+struct progress *start_progress(struct repository *r,
+ const char *title, uint64_t total)
{
- return start_progress_delay(title, total, 0, 0);
+ return start_progress_delay(r, title, total, 0, 0);
}
/*
@@ -303,15 +307,17 @@ struct progress *start_progress(const char *title, uint64_t total)
* When "sparse" is set, stop_progress() will automatically force the done
* message to show 100%.
*/
-struct progress *start_sparse_progress(const char *title, uint64_t total)
+struct progress *start_sparse_progress(struct repository *r,
+ const char *title, uint64_t total)
{
- return start_progress_delay(title, total, 0, 1);
+ return start_progress_delay(r, title, total, 0, 1);
}
-struct progress *start_delayed_sparse_progress(const char *title,
+struct progress *start_delayed_sparse_progress(struct repository *r,
+ const char *title,
uint64_t total)
{
- return start_progress_delay(title, total, get_default_delay(), 1);
+ return start_progress_delay(r, title, total, get_default_delay(), 1);
}
static void finish_if_sparse(struct progress *progress)
@@ -341,14 +347,14 @@ static void force_last_update(struct progress *progress, const char *msg)
static void log_trace2(struct progress *progress)
{
- trace2_data_intmax("progress", the_repository, "total_objects",
+ trace2_data_intmax("progress", progress->repo, "total_objects",
progress->total);
if (progress->throughput)
- trace2_data_intmax("progress", the_repository, "total_bytes",
+ trace2_data_intmax("progress", progress->repo, "total_bytes",
progress->throughput->curr_total);
- trace2_region_leave("progress", progress->title, the_repository);
+ trace2_region_leave("progress", progress->title, progress->repo);
}
void stop_progress_msg(struct progress **p_progress, const char *msg)
diff --git a/progress.h b/progress.h
index 3a945637c8..ed068c7bab 100644
--- a/progress.h
+++ b/progress.h
@@ -3,6 +3,7 @@
#include "gettext.h"
struct progress;
+struct repository;
#ifdef GIT_TEST_PROGRESS_ONLY
@@ -14,10 +15,14 @@ void progress_test_force_update(void);
void display_throughput(struct progress *progress, uint64_t total);
void display_progress(struct progress *progress, uint64_t n);
-struct progress *start_progress(const char *title, uint64_t total);
-struct progress *start_sparse_progress(const char *title, uint64_t total);
-struct progress *start_delayed_progress(const char *title, uint64_t total);
-struct progress *start_delayed_sparse_progress(const char *title,
+struct progress *start_progress(struct repository *r,
+ const char *title, uint64_t total);
+struct progress *start_sparse_progress(struct repository *r,
+ const char *title, uint64_t total);
+struct progress *start_delayed_progress(struct repository *r,
+ const char *title, uint64_t total);
+struct progress *start_delayed_sparse_progress(struct repository *r,
+ const char *title,
uint64_t total);
void stop_progress_msg(struct progress **p_progress, const char *msg);
static inline void stop_progress(struct progress **p_progress)
diff --git a/prune-packed.c b/prune-packed.c
index d1c65ab10e..7dad2fc0c1 100644
--- a/prune-packed.c
+++ b/prune-packed.c
@@ -37,7 +37,8 @@ static int prune_object(const struct object_id *oid, const char *path,
void prune_packed_objects(int opts)
{
if (opts & PRUNE_PACKED_VERBOSE)
- progress = start_delayed_progress(_("Removing duplicate objects"), 256);
+ progress = start_delayed_progress(the_repository,
+ _("Removing duplicate objects"), 256);
for_each_loose_file_in_objdir(repo_get_object_directory(the_repository),
prune_object, NULL, prune_subdir, &opts);
diff --git a/pseudo-merge.c b/pseudo-merge.c
index 971f54cfe1..893b763fe4 100644
--- a/pseudo-merge.c
+++ b/pseudo-merge.c
@@ -459,7 +459,8 @@ void select_pseudo_merges(struct bitmap_writer *writer)
return;
if (writer->show_progress)
- progress = start_progress("Selecting pseudo-merge commits",
+ progress = start_progress(the_repository,
+ "Selecting pseudo-merge commits",
writer->pseudo_merge_groups.nr);
refs_for_each_ref(get_main_ref_store(the_repository),
diff --git a/read-cache.c b/read-cache.c
index 15d79839c2..d54be2c172 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -1523,7 +1523,8 @@ int refresh_index(struct index_state *istate, unsigned int flags,
int t2_sum_scan = 0;
if (flags & REFRESH_PROGRESS && isatty(2))
- progress = start_delayed_progress(_("Refresh index"),
+ progress = start_delayed_progress(the_repository,
+ _("Refresh index"),
istate->cache_nr);
trace_performance_enter();
@@ -1753,7 +1754,7 @@ static int read_index_extension(struct index_state *istate,
istate->cache_tree = cache_tree_read(data, sz);
break;
case CACHE_EXT_RESOLVE_UNDO:
- istate->resolve_undo = resolve_undo_read(data, sz);
+ istate->resolve_undo = resolve_undo_read(data, sz, the_hash_algo);
break;
case CACHE_EXT_LINK:
if (read_link_extension(istate, data, sz))
@@ -3032,7 +3033,7 @@ static int do_write_index(struct index_state *istate, struct tempfile *tempfile,
istate->resolve_undo) {
strbuf_reset(&sb);
- resolve_undo_write(&sb, istate->resolve_undo);
+ resolve_undo_write(&sb, istate->resolve_undo, the_hash_algo);
err = write_index_ext_header(f, eoie_c, CACHE_EXT_RESOLVE_UNDO,
sb.len) < 0;
hashwrite(f, sb.buf, sb.len);
diff --git a/ref-filter.c b/ref-filter.c
index 23054694c2..6da8d4c03b 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -235,6 +235,10 @@ static struct used_atom {
enum { S_BARE, S_GRADE, S_SIGNER, S_KEY,
S_FINGERPRINT, S_PRI_KEY_FP, S_TRUST_LEVEL } option;
} signature;
+ struct {
+ char *name;
+ struct commit *commit;
+ } base;
struct strvec describe_args;
struct refname_atom refname;
char *head;
@@ -891,35 +895,30 @@ static int rest_atom_parser(struct ref_format *format UNUSED,
return 0;
}
-static int ahead_behind_atom_parser(struct ref_format *format,
- struct used_atom *atom UNUSED,
+static int ahead_behind_atom_parser(struct ref_format *format UNUSED,
+ struct used_atom *atom,
const char *arg, struct strbuf *err)
{
- struct string_list_item *item;
-
if (!arg)
return strbuf_addf_ret(err, -1, _("expected format: %%(ahead-behind:<committish>)"));
- item = string_list_append(&format->bases, arg);
- item->util = lookup_commit_reference_by_name(arg);
- if (!item->util)
+ atom->u.base.commit = lookup_commit_reference_by_name(arg);
+ if (!atom->u.base.commit)
die("failed to find '%s'", arg);
return 0;
}
-static int is_base_atom_parser(struct ref_format *format,
- struct used_atom *atom UNUSED,
+static int is_base_atom_parser(struct ref_format *format UNUSED,
+ struct used_atom *atom,
const char *arg, struct strbuf *err)
{
- struct string_list_item *item;
-
if (!arg)
return strbuf_addf_ret(err, -1, _("expected format: %%(is-base:<committish>)"));
- item = string_list_append(&format->is_base_tips, arg);
- item->util = lookup_commit_reference_by_name(arg);
- if (!item->util)
+ atom->u.base.name = xstrdup(arg);
+ atom->u.base.commit = lookup_commit_reference_by_name(arg);
+ if (!atom->u.base.commit)
die("failed to find '%s'", arg);
return 0;
@@ -3009,6 +3008,8 @@ void ref_array_clear(struct ref_array *array)
free(atom->u.head);
else if (atom->atom_type == ATOM_DESCRIBE)
strvec_clear(&atom->u.describe_args);
+ else if (atom->atom_type == ATOM_ISBASE)
+ free(atom->u.base.name);
else if (atom->atom_type == ATOM_TRAILERS ||
(atom->atom_type == ATOM_CONTENTS &&
atom->u.contents.option == C_TRAILERS)) {
@@ -3041,7 +3042,7 @@ static void reach_filter(struct ref_array *array,
struct commit_list **check_reachable,
int include_reached)
{
- int i, old_nr;
+ size_t i, old_nr;
struct commit **to_clear;
if (!*check_reachable)
@@ -3084,22 +3085,30 @@ static void reach_filter(struct ref_array *array,
}
void filter_ahead_behind(struct repository *r,
- struct ref_format *format,
struct ref_array *array)
{
struct commit **commits;
- size_t commits_nr = format->bases.nr + array->nr;
+ size_t bases_nr, commits_nr;
+
+ if (!array->nr)
+ return;
- if (!format->bases.nr || !array->nr)
+ for (size_t i = bases_nr = 0; i < used_atom_cnt; i++) {
+ if (used_atom[i].atom_type == ATOM_AHEADBEHIND)
+ bases_nr++;
+ }
+ if (!bases_nr)
return;
- ALLOC_ARRAY(commits, commits_nr);
- for (size_t i = 0; i < format->bases.nr; i++)
- commits[i] = format->bases.items[i].util;
+ ALLOC_ARRAY(commits, st_add(bases_nr, array->nr));
+ for (size_t i = 0, j = 0; i < used_atom_cnt; i++) {
+ if (used_atom[i].atom_type == ATOM_AHEADBEHIND)
+ commits[j++] = used_atom[i].u.base.commit;
+ }
- ALLOC_ARRAY(array->counts, st_mult(format->bases.nr, array->nr));
+ ALLOC_ARRAY(array->counts, st_mult(bases_nr, array->nr));
- commits_nr = format->bases.nr;
+ commits_nr = bases_nr;
array->counts_nr = 0;
for (size_t i = 0; i < array->nr; i++) {
const char *name = array->items[i]->refname;
@@ -3108,8 +3117,8 @@ void filter_ahead_behind(struct repository *r,
if (!commits[commits_nr])
continue;
- CALLOC_ARRAY(array->items[i]->counts, format->bases.nr);
- for (size_t j = 0; j < format->bases.nr; j++) {
+ CALLOC_ARRAY(array->items[i]->counts, bases_nr);
+ for (size_t j = 0; j < bases_nr; j++) {
struct ahead_behind_count *count;
count = &array->counts[array->counts_nr++];
count->tip_index = commits_nr;
@@ -3125,14 +3134,20 @@ void filter_ahead_behind(struct repository *r,
}
void filter_is_base(struct repository *r,
- struct ref_format *format,
struct ref_array *array)
{
struct commit **bases;
- size_t bases_nr = 0;
+ size_t bases_nr = 0, is_base_nr;
struct ref_array_item **back_index;
- if (!format->is_base_tips.nr || !array->nr)
+ if (!array->nr)
+ return;
+
+ for (size_t i = is_base_nr = 0; i < used_atom_cnt; i++) {
+ if (used_atom[i].atom_type == ATOM_ISBASE)
+ is_base_nr++;
+ }
+ if (!is_base_nr)
return;
CALLOC_ARRAY(back_index, array->nr);
@@ -3142,7 +3157,7 @@ void filter_is_base(struct repository *r,
const char *name = array->items[i]->refname;
struct commit *c = lookup_commit_reference_by_name_gently(name, 1);
- CALLOC_ARRAY(array->items[i]->is_base, format->is_base_tips.nr);
+ CALLOC_ARRAY(array->items[i]->is_base, is_base_nr);
if (!c)
continue;
@@ -3152,15 +3167,20 @@ void filter_is_base(struct repository *r,
bases_nr++;
}
- for (size_t i = 0; i < format->is_base_tips.nr; i++) {
- struct commit *tip = format->is_base_tips.items[i].util;
- int base_index = get_branch_base_for_tip(r, tip, bases, bases_nr);
+ for (size_t i = 0, j = 0; i < used_atom_cnt; i++) {
+ struct commit *tip;
+ int base_index;
+
+ if (used_atom[i].atom_type != ATOM_ISBASE)
+ continue;
+ tip = used_atom[i].u.base.commit;
+ base_index = get_branch_base_for_tip(r, tip, bases, bases_nr);
if (base_index < 0)
continue;
/* Store the string for use in output later. */
- back_index[base_index]->is_base[i] = xstrdup(format->is_base_tips.items[i].string);
+ back_index[base_index]->is_base[j++] = xstrdup(used_atom[i].u.base.name);
}
free(back_index);
@@ -3252,8 +3272,7 @@ struct ref_sorting {
};
static inline int can_do_iterative_format(struct ref_filter *filter,
- struct ref_sorting *sorting,
- struct ref_format *format)
+ struct ref_sorting *sorting)
{
/*
* Reference backends sort patterns lexicographically by refname, so if
@@ -3277,17 +3296,20 @@ static inline int can_do_iterative_format(struct ref_filter *filter,
* - filtering on reachability
* - including ahead-behind information in the formatted output
*/
- return !(filter->reachable_from ||
- filter->unreachable_from ||
- format->bases.nr ||
- format->is_base_tips.nr);
+ for (size_t i = 0; i < used_atom_cnt; i++) {
+ if (used_atom[i].atom_type == ATOM_AHEADBEHIND)
+ return 0;
+ if (used_atom[i].atom_type == ATOM_ISBASE)
+ return 0;
+ }
+ return !(filter->reachable_from || filter->unreachable_from);
}
void filter_and_format_refs(struct ref_filter *filter, unsigned int type,
struct ref_sorting *sorting,
struct ref_format *format)
{
- if (can_do_iterative_format(filter, sorting, format)) {
+ if (can_do_iterative_format(filter, sorting)) {
int save_commit_buffer_orig;
struct ref_filter_and_format_cbdata ref_cbdata = {
.filter = filter,
@@ -3303,8 +3325,8 @@ void filter_and_format_refs(struct ref_filter *filter, unsigned int type,
} else {
struct ref_array array = { 0 };
filter_refs(&array, filter, type);
- filter_ahead_behind(the_repository, format, &array);
- filter_is_base(the_repository, format, &array);
+ filter_ahead_behind(the_repository, &array);
+ filter_is_base(the_repository, &array);
ref_array_sort(sorting, &array);
print_formatted_ref_array(&array, format);
ref_array_clear(&array);
@@ -3638,16 +3660,3 @@ void ref_filter_clear(struct ref_filter *filter)
free_commit_list(filter->unreachable_from);
ref_filter_init(filter);
}
-
-void ref_format_init(struct ref_format *format)
-{
- struct ref_format blank = REF_FORMAT_INIT;
- memcpy(format, &blank, sizeof(blank));
-}
-
-void ref_format_clear(struct ref_format *format)
-{
- string_list_clear(&format->bases, 0);
- string_list_clear(&format->is_base_tips, 0);
- ref_format_init(format);
-}
diff --git a/ref-filter.h b/ref-filter.h
index 754038ab07..013d4cfa64 100644
--- a/ref-filter.h
+++ b/ref-filter.h
@@ -99,12 +99,6 @@ struct ref_format {
/* Internal state to ref-filter */
int need_color_reset_at_eol;
- /* List of bases for ahead-behind counts. */
- struct string_list bases;
-
- /* List of bases for is-base indicators. */
- struct string_list is_base_tips;
-
struct {
int max_count;
int omit_empty;
@@ -117,8 +111,6 @@ struct ref_format {
}
#define REF_FORMAT_INIT { \
.use_color = -1, \
- .bases = STRING_LIST_INIT_DUP, \
- .is_base_tips = STRING_LIST_INIT_DUP, \
}
/* Macros for checking --merged and --no-merged options */
@@ -205,7 +197,6 @@ struct ref_array_item *ref_array_push(struct ref_array *array,
* If this is not called, then any ahead-behind atoms will be blank.
*/
void filter_ahead_behind(struct repository *r,
- struct ref_format *format,
struct ref_array *array);
/*
@@ -215,13 +206,9 @@ void filter_ahead_behind(struct repository *r,
* If this is not called, then any is-base atoms will be blank.
*/
void filter_is_base(struct repository *r,
- struct ref_format *format,
struct ref_array *array);
void ref_filter_init(struct ref_filter *filter);
void ref_filter_clear(struct ref_filter *filter);
-void ref_format_init(struct ref_format *format);
-void ref_format_clear(struct ref_format *format);
-
#endif /* REF_FILTER_H */
diff --git a/refs.c b/refs.c
index 0f41b2fd4a..37b8cfb90c 100644
--- a/refs.c
+++ b/refs.c
@@ -1330,7 +1330,7 @@ int ref_transaction_update_reflog(struct ref_transaction *transaction,
assert(err);
- flags |= REF_LOG_ONLY | REF_NO_DEREF;
+ flags |= REF_LOG_ONLY | REF_FORCE_CREATE_REFLOG | REF_NO_DEREF;
if (!transaction_refname_valid(refname, new_oid, flags, err))
return -1;
diff --git a/refs/files-backend.c b/refs/files-backend.c
index 5cfb8b7ca8..29f08dced4 100644
--- a/refs/files-backend.c
+++ b/refs/files-backend.c
@@ -2615,9 +2615,6 @@ static int lock_ref_for_update(struct files_ref_store *refs,
update->backend_data = lock;
- if (update->flags & REF_LOG_ONLY)
- goto out;
-
if (update->type & REF_ISSYMREF) {
if (update->flags & REF_NO_DEREF) {
/*
diff --git a/reftable/basics.c b/reftable/basics.c
index fe2b83ff83..3b5ea27bbd 100644
--- a/reftable/basics.c
+++ b/reftable/basics.c
@@ -263,18 +263,16 @@ int names_equal(const char **a, const char **b)
return a[i] == b[i];
}
-int common_prefix_size(struct reftable_buf *a, struct reftable_buf *b)
+size_t common_prefix_size(struct reftable_buf *a, struct reftable_buf *b)
{
- int p = 0;
- for (; p < a->len && p < b->len; p++) {
+ size_t p = 0;
+ for (; p < a->len && p < b->len; p++)
if (a->buf[p] != b->buf[p])
break;
- }
-
return p;
}
-int hash_size(enum reftable_hash id)
+uint32_t hash_size(enum reftable_hash id)
{
if (!id)
return REFTABLE_HASH_SIZE_SHA1;
diff --git a/reftable/basics.h b/reftable/basics.h
index 4bf71b0954..a2a010a0e1 100644
--- a/reftable/basics.h
+++ b/reftable/basics.h
@@ -169,9 +169,9 @@ static inline void *reftable_alloc_grow(void *p, size_t nelem, size_t elsize,
#endif
/* Find the longest shared prefix size of `a` and `b` */
-int common_prefix_size(struct reftable_buf *a, struct reftable_buf *b);
+size_t common_prefix_size(struct reftable_buf *a, struct reftable_buf *b);
-int hash_size(enum reftable_hash id);
+uint32_t hash_size(enum reftable_hash id);
/*
* Format IDs that identify the hash function used by a reftable. Note that
diff --git a/reftable/block.c b/reftable/block.c
index 9858bbc7c5..8ac865ce78 100644
--- a/reftable/block.c
+++ b/reftable/block.c
@@ -15,7 +15,7 @@ https://developers.google.com/open-source/licenses/bsd
#include "system.h"
#include <zlib.h>
-int header_size(int version)
+size_t header_size(int version)
{
switch (version) {
case 1:
@@ -26,7 +26,7 @@ int header_size(int version)
abort();
}
-int footer_size(int version)
+size_t footer_size(int version)
{
switch (version) {
case 1:
@@ -40,16 +40,15 @@ int footer_size(int version)
static int block_writer_register_restart(struct block_writer *w, int n,
int is_restart, struct reftable_buf *key)
{
- int rlen, err;
+ uint32_t rlen;
+ int err;
rlen = w->restart_len;
- if (rlen >= MAX_RESTARTS) {
+ if (rlen >= MAX_RESTARTS)
is_restart = 0;
- }
- if (is_restart) {
+ if (is_restart)
rlen++;
- }
if (2 + 3 * rlen + n > w->block_size - w->next)
return -1;
if (is_restart) {
@@ -72,7 +71,7 @@ static int block_writer_register_restart(struct block_writer *w, int n,
}
int block_writer_init(struct block_writer *bw, uint8_t typ, uint8_t *block,
- uint32_t block_size, uint32_t header_off, int hash_size)
+ uint32_t block_size, uint32_t header_off, uint32_t hash_size)
{
bw->block = block;
bw->hash_size = hash_size;
@@ -148,8 +147,7 @@ done:
int block_writer_finish(struct block_writer *w)
{
- int i;
- for (i = 0; i < w->restart_len; i++) {
+ for (uint32_t i = 0; i < w->restart_len; i++) {
put_be24(w->block + w->next, w->restarts[i]);
w->next += 3;
}
@@ -214,7 +212,7 @@ int block_writer_finish(struct block_writer *w)
int block_reader_init(struct block_reader *br, struct reftable_block *block,
uint32_t header_off, uint32_t table_block_size,
- int hash_size)
+ uint32_t hash_size)
{
uint32_t full_block_size = table_block_size;
uint8_t typ = block->data[header_off];
diff --git a/reftable/block.h b/reftable/block.h
index 0431e8591f..bef2b8a4c5 100644
--- a/reftable/block.h
+++ b/reftable/block.h
@@ -30,7 +30,7 @@ struct block_writer {
/* How often to restart keys. */
uint16_t restart_interval;
- int hash_size;
+ uint32_t hash_size;
/* Offset of next uint8_t to write. */
uint32_t next;
@@ -48,7 +48,7 @@ struct block_writer {
* initializes the blockwriter to write `typ` entries, using `block` as temporary
* storage. `block` is not owned by the block_writer. */
int block_writer_init(struct block_writer *bw, uint8_t typ, uint8_t *block,
- uint32_t block_size, uint32_t header_off, int hash_size);
+ uint32_t block_size, uint32_t header_off, uint32_t hash_size);
/* returns the block type (eg. 'r' for ref records. */
uint8_t block_writer_type(struct block_writer *bw);
@@ -72,7 +72,7 @@ struct block_reader {
/* the memory block */
struct reftable_block block;
- int hash_size;
+ uint32_t hash_size;
/* Uncompressed data for log entries. */
z_stream *zstream;
@@ -92,7 +92,7 @@ struct block_reader {
/* initializes a block reader. */
int block_reader_init(struct block_reader *br, struct reftable_block *bl,
uint32_t header_off, uint32_t table_block_size,
- int hash_size);
+ uint32_t hash_size);
void block_reader_release(struct block_reader *br);
@@ -108,7 +108,7 @@ struct block_iter {
uint32_t next_off;
const unsigned char *block;
size_t block_len;
- int hash_size;
+ uint32_t hash_size;
/* key for last entry we read. */
struct reftable_buf last_key;
@@ -137,10 +137,10 @@ void block_iter_reset(struct block_iter *it);
void block_iter_close(struct block_iter *it);
/* size of file header, depending on format version */
-int header_size(int version);
+size_t header_size(int version);
/* size of file footer, depending on format version */
-int footer_size(int version);
+size_t footer_size(int version);
/* returns a block to its source. */
void reftable_block_done(struct reftable_block *ret);
diff --git a/reftable/blocksource.c b/reftable/blocksource.c
index 52e0915a67..bba4a45b98 100644
--- a/reftable/blocksource.c
+++ b/reftable/blocksource.c
@@ -24,8 +24,8 @@ static void reftable_buf_close(void *b UNUSED)
{
}
-static int reftable_buf_read_block(void *v, struct reftable_block *dest,
- uint64_t off, uint32_t size)
+static ssize_t reftable_buf_read_block(void *v, struct reftable_block *dest,
+ uint64_t off, uint32_t size)
{
struct reftable_buf *b = v;
assert(off + size <= b->len);
@@ -78,8 +78,8 @@ static void file_close(void *v)
reftable_free(b);
}
-static int file_read_block(void *v, struct reftable_block *dest, uint64_t off,
- uint32_t size)
+static ssize_t file_read_block(void *v, struct reftable_block *dest, uint64_t off,
+ uint32_t size)
{
struct file_block_source *b = v;
assert(off + size <= b->size);
diff --git a/reftable/reader.c b/reftable/reader.c
index ea82955c9b..3f2e4b2800 100644
--- a/reftable/reader.c
+++ b/reftable/reader.c
@@ -20,11 +20,11 @@ uint64_t block_source_size(struct reftable_block_source *source)
return source->ops->size(source->arg);
}
-int block_source_read_block(struct reftable_block_source *source,
- struct reftable_block *dest, uint64_t off,
- uint32_t size)
+ssize_t block_source_read_block(struct reftable_block_source *source,
+ struct reftable_block *dest, uint64_t off,
+ uint32_t size)
{
- int result = source->ops->read_block(source->arg, dest, off, size);
+ ssize_t result = source->ops->read_block(source->arg, dest, off, size);
dest->source = *source;
return result;
}
@@ -57,14 +57,17 @@ static int reader_get_block(struct reftable_reader *r,
struct reftable_block *dest, uint64_t off,
uint32_t sz)
{
+ ssize_t bytes_read;
if (off >= r->size)
return 0;
-
- if (off + sz > r->size) {
+ if (off + sz > r->size)
sz = r->size - off;
- }
- return block_source_read_block(&r->source, dest, off, sz);
+ bytes_read = block_source_read_block(&r->source, dest, off, sz);
+ if (bytes_read < 0)
+ return (int)bytes_read;
+
+ return 0;
}
enum reftable_hash reftable_reader_hash_id(struct reftable_reader *r)
@@ -601,6 +604,7 @@ int reftable_reader_new(struct reftable_reader **out,
struct reftable_reader *r;
uint64_t file_size = block_source_size(source);
uint32_t read_size;
+ ssize_t bytes_read;
int err;
REFTABLE_CALLOC_ARRAY(r, 1);
@@ -619,8 +623,8 @@ int reftable_reader_new(struct reftable_reader **out,
goto done;
}
- err = block_source_read_block(source, &header, 0, read_size);
- if (err != read_size) {
+ bytes_read = block_source_read_block(source, &header, 0, read_size);
+ if (bytes_read < 0 || (size_t)bytes_read != read_size) {
err = REFTABLE_IO_ERROR;
goto done;
}
@@ -645,9 +649,9 @@ int reftable_reader_new(struct reftable_reader **out,
r->hash_id = 0;
r->refcount = 1;
- err = block_source_read_block(source, &footer, r->size,
- footer_size(r->version));
- if (err != footer_size(r->version)) {
+ bytes_read = block_source_read_block(source, &footer, r->size,
+ footer_size(r->version));
+ if (bytes_read < 0 || (size_t)bytes_read != footer_size(r->version)) {
err = REFTABLE_IO_ERROR;
goto done;
}
@@ -750,7 +754,7 @@ static int reftable_reader_refs_for_unindexed(struct reftable_reader *r,
struct table_iter *ti;
struct filtering_ref_iterator *filter = NULL;
struct filtering_ref_iterator empty = FILTERING_REF_ITERATOR_INIT;
- int oid_len = hash_size(r->hash_id);
+ uint32_t oid_len = hash_size(r->hash_id);
int err;
REFTABLE_ALLOC_ARRAY(ti, 1);
diff --git a/reftable/reader.h b/reftable/reader.h
index d2b48a4849..bb72108a6f 100644
--- a/reftable/reader.h
+++ b/reftable/reader.h
@@ -16,9 +16,9 @@ https://developers.google.com/open-source/licenses/bsd
uint64_t block_source_size(struct reftable_block_source *source);
-int block_source_read_block(struct reftable_block_source *source,
- struct reftable_block *dest, uint64_t off,
- uint32_t size);
+ssize_t block_source_read_block(struct reftable_block_source *source,
+ struct reftable_block *dest, uint64_t off,
+ uint32_t size);
void block_source_close(struct reftable_block_source *source);
/* metadata for a block type */
diff --git a/reftable/record.c b/reftable/record.c
index 04429d23fe..8919df8a4d 100644
--- a/reftable/record.c
+++ b/reftable/record.c
@@ -21,47 +21,49 @@ static void *reftable_record_data(struct reftable_record *rec);
int get_var_int(uint64_t *dest, struct string_view *in)
{
- int ptr = 0;
+ const unsigned char *buf = in->buf;
+ unsigned char c;
uint64_t val;
- if (in->len == 0)
+ if (!in->len)
return -1;
- val = in->buf[ptr] & 0x7f;
-
- while (in->buf[ptr] & 0x80) {
- ptr++;
- if (ptr > in->len) {
+ c = *buf++;
+ val = c & 0x7f;
+
+ while (c & 0x80) {
+ /*
+ * We use a micro-optimization here: whenever we see that the
+ * 0x80 bit is set, we know that the remainder of the value
+ * cannot be 0. The zero-values thus doesn't need to be encoded
+ * at all, which is why we subtract 1 when encoding and add 1
+ * when decoding.
+ *
+ * This allows us to save a byte in some edge cases.
+ */
+ val += 1;
+ if (!val || (val & (uint64_t)(~0ULL << (64 - 7))))
+ return -1; /* overflow */
+ if (buf >= in->buf + in->len)
return -1;
- }
- val = (val + 1) << 7 | (uint64_t)(in->buf[ptr] & 0x7f);
+ c = *buf++;
+ val = (val << 7) + (c & 0x7f);
}
*dest = val;
- return ptr + 1;
+ return buf - in->buf;
}
-int put_var_int(struct string_view *dest, uint64_t val)
+int put_var_int(struct string_view *dest, uint64_t value)
{
- uint8_t buf[10] = { 0 };
- int i = 9;
- int n = 0;
- buf[i] = (uint8_t)(val & 0x7f);
- i--;
- while (1) {
- val >>= 7;
- if (!val) {
- break;
- }
- val--;
- buf[i] = 0x80 | (uint8_t)(val & 0x7f);
- i--;
- }
-
- n = sizeof(buf) - i - 1;
- if (dest->len < n)
+ unsigned char varint[10];
+ unsigned pos = sizeof(varint) - 1;
+ varint[pos] = value & 0x7f;
+ while (value >>= 7)
+ varint[--pos] = 0x80 | (--value & 0x7f);
+ if (dest->len < sizeof(varint) - pos)
return -1;
- memcpy(dest->buf, &buf[i + 1], n);
- return n;
+ memcpy(dest->buf, varint + pos, sizeof(varint) - pos);
+ return sizeof(varint) - pos;
}
int reftable_is_block_type(uint8_t typ)
@@ -124,7 +126,7 @@ static int decode_string(struct reftable_buf *dest, struct string_view in)
static int encode_string(const char *str, struct string_view s)
{
struct string_view start = s;
- int l = strlen(str);
+ size_t l = strlen(str);
int n = put_var_int(&s, l);
if (n < 0)
return -1;
@@ -142,9 +144,9 @@ int reftable_encode_key(int *restart, struct string_view dest,
uint8_t extra)
{
struct string_view start = dest;
- int prefix_len = common_prefix_size(&prev_key, &key);
+ size_t prefix_len = common_prefix_size(&prev_key, &key);
uint64_t suffix_len = key.len - prefix_len;
- int n = put_var_int(&dest, (uint64_t)prefix_len);
+ int n = put_var_int(&dest, prefix_len);
if (n < 0)
return -1;
string_view_consume(&dest, n);
@@ -227,7 +229,7 @@ static int reftable_ref_record_key(const void *r, struct reftable_buf *dest)
}
static int reftable_ref_record_copy_from(void *rec, const void *src_rec,
- int hash_size)
+ uint32_t hash_size)
{
struct reftable_ref_record *ref = rec;
const struct reftable_ref_record *src = src_rec;
@@ -235,8 +237,6 @@ static int reftable_ref_record_copy_from(void *rec, const void *src_rec,
size_t refname_cap = 0;
int err;
- assert(hash_size > 0);
-
SWAP(refname, ref->refname);
SWAP(refname_cap, ref->refname_cap);
reftable_ref_record_release(ref);
@@ -317,13 +317,12 @@ static uint8_t reftable_ref_record_val_type(const void *rec)
}
static int reftable_ref_record_encode(const void *rec, struct string_view s,
- int hash_size)
+ uint32_t hash_size)
{
const struct reftable_ref_record *r =
(const struct reftable_ref_record *)rec;
struct string_view start = s;
int n = put_var_int(&s, r->update_index);
- assert(hash_size > 0);
if (n < 0)
return -1;
string_view_consume(&s, n);
@@ -363,7 +362,7 @@ static int reftable_ref_record_encode(const void *rec, struct string_view s,
static int reftable_ref_record_decode(void *rec, struct reftable_buf key,
uint8_t val_type, struct string_view in,
- int hash_size, struct reftable_buf *scratch)
+ uint32_t hash_size, struct reftable_buf *scratch)
{
struct reftable_ref_record *r = rec;
struct string_view start = in;
@@ -372,8 +371,6 @@ static int reftable_ref_record_decode(void *rec, struct reftable_buf key,
size_t refname_cap = 0;
int n, err;
- assert(hash_size > 0);
-
n = get_var_int(&update_index, &in);
if (n < 0)
return n;
@@ -449,7 +446,7 @@ static int reftable_ref_record_is_deletion_void(const void *p)
}
static int reftable_ref_record_equal_void(const void *a,
- const void *b, int hash_size)
+ const void *b, uint32_t hash_size)
{
struct reftable_ref_record *ra = (struct reftable_ref_record *) a;
struct reftable_ref_record *rb = (struct reftable_ref_record *) b;
@@ -493,7 +490,7 @@ static void reftable_obj_record_release(void *rec)
}
static int reftable_obj_record_copy_from(void *rec, const void *src_rec,
- int hash_size UNUSED)
+ uint32_t hash_size UNUSED)
{
struct reftable_obj_record *obj = rec;
const struct reftable_obj_record *src = src_rec;
@@ -525,7 +522,7 @@ static uint8_t reftable_obj_record_val_type(const void *rec)
}
static int reftable_obj_record_encode(const void *rec, struct string_view s,
- int hash_size UNUSED)
+ uint32_t hash_size UNUSED)
{
const struct reftable_obj_record *r = rec;
struct string_view start = s;
@@ -560,7 +557,7 @@ static int reftable_obj_record_encode(const void *rec, struct string_view s,
static int reftable_obj_record_decode(void *rec, struct reftable_buf key,
uint8_t val_type, struct string_view in,
- int hash_size UNUSED,
+ uint32_t hash_size UNUSED,
struct reftable_buf *scratch UNUSED)
{
struct string_view start = in;
@@ -568,7 +565,6 @@ static int reftable_obj_record_decode(void *rec, struct reftable_buf key,
uint64_t count = val_type;
int n = 0;
uint64_t last;
- int j;
reftable_obj_record_release(r);
@@ -603,8 +599,7 @@ static int reftable_obj_record_decode(void *rec, struct reftable_buf key,
string_view_consume(&in, n);
last = r->offsets[0];
- j = 1;
- while (j < count) {
+ for (uint64_t j = 1; j < count; j++) {
uint64_t delta = 0;
int n = get_var_int(&delta, &in);
if (n < 0) {
@@ -613,7 +608,6 @@ static int reftable_obj_record_decode(void *rec, struct reftable_buf key,
string_view_consume(&in, n);
last = r->offsets[j] = (delta + last);
- j++;
}
return start.len - in.len;
}
@@ -624,7 +618,7 @@ static int not_a_deletion(const void *p UNUSED)
}
static int reftable_obj_record_equal_void(const void *a, const void *b,
- int hash_size UNUSED)
+ uint32_t hash_size UNUSED)
{
struct reftable_obj_record *ra = (struct reftable_obj_record *) a;
struct reftable_obj_record *rb = (struct reftable_obj_record *) b;
@@ -699,7 +693,7 @@ static int reftable_log_record_key(const void *r, struct reftable_buf *dest)
}
static int reftable_log_record_copy_from(void *rec, const void *src_rec,
- int hash_size)
+ uint32_t hash_size)
{
struct reftable_log_record *dst = rec;
const struct reftable_log_record *src =
@@ -780,7 +774,7 @@ static uint8_t reftable_log_record_val_type(const void *rec)
}
static int reftable_log_record_encode(const void *rec, struct string_view s,
- int hash_size)
+ uint32_t hash_size)
{
const struct reftable_log_record *r = rec;
struct string_view start = s;
@@ -828,7 +822,7 @@ static int reftable_log_record_encode(const void *rec, struct string_view s,
static int reftable_log_record_decode(void *rec, struct reftable_buf key,
uint8_t val_type, struct string_view in,
- int hash_size, struct reftable_buf *scratch)
+ uint32_t hash_size, struct reftable_buf *scratch)
{
struct string_view start = in;
struct reftable_log_record *r = rec;
@@ -976,7 +970,7 @@ static int null_streq(const char *a, const char *b)
}
static int reftable_log_record_equal_void(const void *a,
- const void *b, int hash_size)
+ const void *b, uint32_t hash_size)
{
return reftable_log_record_equal((struct reftable_log_record *) a,
(struct reftable_log_record *) b,
@@ -1000,7 +994,7 @@ static int reftable_log_record_cmp_void(const void *_a, const void *_b)
}
int reftable_log_record_equal(const struct reftable_log_record *a,
- const struct reftable_log_record *b, int hash_size)
+ const struct reftable_log_record *b, uint32_t hash_size)
{
if (!(null_streq(a->refname, b->refname) &&
a->update_index == b->update_index &&
@@ -1054,7 +1048,7 @@ static int reftable_index_record_key(const void *r, struct reftable_buf *dest)
}
static int reftable_index_record_copy_from(void *rec, const void *src_rec,
- int hash_size UNUSED)
+ uint32_t hash_size UNUSED)
{
struct reftable_index_record *dst = rec;
const struct reftable_index_record *src = src_rec;
@@ -1081,7 +1075,7 @@ static uint8_t reftable_index_record_val_type(const void *rec UNUSED)
}
static int reftable_index_record_encode(const void *rec, struct string_view out,
- int hash_size UNUSED)
+ uint32_t hash_size UNUSED)
{
const struct reftable_index_record *r =
(const struct reftable_index_record *)rec;
@@ -1099,7 +1093,7 @@ static int reftable_index_record_encode(const void *rec, struct string_view out,
static int reftable_index_record_decode(void *rec, struct reftable_buf key,
uint8_t val_type UNUSED,
struct string_view in,
- int hash_size UNUSED,
+ uint32_t hash_size UNUSED,
struct reftable_buf *scratch UNUSED)
{
struct string_view start = in;
@@ -1120,7 +1114,7 @@ static int reftable_index_record_decode(void *rec, struct reftable_buf key,
}
static int reftable_index_record_equal(const void *a, const void *b,
- int hash_size UNUSED)
+ uint32_t hash_size UNUSED)
{
struct reftable_index_record *ia = (struct reftable_index_record *) a;
struct reftable_index_record *ib = (struct reftable_index_record *) b;
@@ -1154,14 +1148,14 @@ int reftable_record_key(struct reftable_record *rec, struct reftable_buf *dest)
}
int reftable_record_encode(struct reftable_record *rec, struct string_view dest,
- int hash_size)
+ uint32_t hash_size)
{
return reftable_record_vtable(rec)->encode(reftable_record_data(rec),
dest, hash_size);
}
int reftable_record_copy_from(struct reftable_record *rec,
- struct reftable_record *src, int hash_size)
+ struct reftable_record *src, uint32_t hash_size)
{
assert(src->type == rec->type);
@@ -1176,7 +1170,7 @@ uint8_t reftable_record_val_type(struct reftable_record *rec)
}
int reftable_record_decode(struct reftable_record *rec, struct reftable_buf key,
- uint8_t extra, struct string_view src, int hash_size,
+ uint8_t extra, struct string_view src, uint32_t hash_size,
struct reftable_buf *scratch)
{
return reftable_record_vtable(rec)->decode(reftable_record_data(rec),
@@ -1203,7 +1197,7 @@ int reftable_record_cmp(struct reftable_record *a, struct reftable_record *b)
reftable_record_data(a), reftable_record_data(b));
}
-int reftable_record_equal(struct reftable_record *a, struct reftable_record *b, int hash_size)
+int reftable_record_equal(struct reftable_record *a, struct reftable_record *b, uint32_t hash_size)
{
if (a->type != b->type)
return 0;
@@ -1211,7 +1205,7 @@ int reftable_record_equal(struct reftable_record *a, struct reftable_record *b,
reftable_record_data(a), reftable_record_data(b), hash_size);
}
-static int hash_equal(const unsigned char *a, const unsigned char *b, int hash_size)
+static int hash_equal(const unsigned char *a, const unsigned char *b, uint32_t hash_size)
{
if (a && b)
return !memcmp(a, b, hash_size);
@@ -1220,9 +1214,8 @@ static int hash_equal(const unsigned char *a, const unsigned char *b, int hash_s
}
int reftable_ref_record_equal(const struct reftable_ref_record *a,
- const struct reftable_ref_record *b, int hash_size)
+ const struct reftable_ref_record *b, uint32_t hash_size)
{
- assert(hash_size > 0);
if (!null_streq(a->refname, b->refname))
return 0;
diff --git a/reftable/record.h b/reftable/record.h
index 25aa908c85..c7755a4d75 100644
--- a/reftable/record.h
+++ b/reftable/record.h
@@ -32,8 +32,10 @@ static inline void string_view_consume(struct string_view *s, int n)
s->len -= n;
}
-/* utilities for de/encoding varints */
-
+/*
+ * Decode and encode a varint. Returns the number of bytes read/written, or a
+ * negative value in case encoding/decoding the varint has failed.
+ */
int get_var_int(uint64_t *dest, struct string_view *in);
int put_var_int(struct string_view *dest, uint64_t val);
@@ -45,18 +47,18 @@ struct reftable_record_vtable {
/* The record type of ('r' for ref). */
uint8_t type;
- int (*copy_from)(void *dest, const void *src, int hash_size);
+ int (*copy_from)(void *dest, const void *src, uint32_t hash_size);
/* a value of [0..7], indicating record subvariants (eg. ref vs. symref
* vs ref deletion) */
uint8_t (*val_type)(const void *rec);
/* encodes rec into dest, returning how much space was used. */
- int (*encode)(const void *rec, struct string_view dest, int hash_size);
+ int (*encode)(const void *rec, struct string_view dest, uint32_t hash_size);
/* decode data from `src` into the record. */
int (*decode)(void *rec, struct reftable_buf key, uint8_t extra,
- struct string_view src, int hash_size,
+ struct string_view src, uint32_t hash_size,
struct reftable_buf *scratch);
/* deallocate and null the record. */
@@ -66,16 +68,13 @@ struct reftable_record_vtable {
int (*is_deletion)(const void *rec);
/* Are two records equal? This assumes they have the same type. Returns 0 for non-equal. */
- int (*equal)(const void *a, const void *b, int hash_size);
+ int (*equal)(const void *a, const void *b, uint32_t hash_size);
/*
* Compare keys of two records with each other. The records must have
* the same type.
*/
int (*cmp)(const void *a, const void *b);
-
- /* Print on stdout, for debugging. */
- void (*print)(const void *rec, int hash_size);
};
/* returns true for recognized block types. Block start with the block type. */
@@ -136,16 +135,16 @@ void reftable_record_init(struct reftable_record *rec, uint8_t typ);
/* see struct record_vtable */
int reftable_record_cmp(struct reftable_record *a, struct reftable_record *b);
-int reftable_record_equal(struct reftable_record *a, struct reftable_record *b, int hash_size);
+int reftable_record_equal(struct reftable_record *a, struct reftable_record *b, uint32_t hash_size);
int reftable_record_key(struct reftable_record *rec, struct reftable_buf *dest);
int reftable_record_copy_from(struct reftable_record *rec,
- struct reftable_record *src, int hash_size);
+ struct reftable_record *src, uint32_t hash_size);
uint8_t reftable_record_val_type(struct reftable_record *rec);
int reftable_record_encode(struct reftable_record *rec, struct string_view dest,
- int hash_size);
+ uint32_t hash_size);
int reftable_record_decode(struct reftable_record *rec, struct reftable_buf key,
uint8_t extra, struct string_view src,
- int hash_size, struct reftable_buf *scratch);
+ uint32_t hash_size, struct reftable_buf *scratch);
int reftable_record_is_deletion(struct reftable_record *rec);
static inline uint8_t reftable_record_type(struct reftable_record *rec)
diff --git a/reftable/reftable-blocksource.h b/reftable/reftable-blocksource.h
index 5aa3990a57..6b326aa5ea 100644
--- a/reftable/reftable-blocksource.h
+++ b/reftable/reftable-blocksource.h
@@ -22,7 +22,7 @@ struct reftable_block_source {
* so it can return itself into the pool. */
struct reftable_block {
uint8_t *data;
- int len;
+ size_t len;
struct reftable_block_source source;
};
@@ -31,10 +31,13 @@ struct reftable_block_source_vtable {
/* returns the size of a block source */
uint64_t (*size)(void *source);
- /* reads a segment from the block source. It is an error to read
- beyond the end of the block */
- int (*read_block)(void *source, struct reftable_block *dest,
- uint64_t off, uint32_t size);
+ /*
+ * Reads a segment from the block source. It is an error to read beyond
+ * the end of the block.
+ */
+ ssize_t (*read_block)(void *source, struct reftable_block *dest,
+ uint64_t off, uint32_t size);
+
/* mark the block as read; may return the data back to malloc */
void (*return_block)(void *source, struct reftable_block *blockp);
diff --git a/reftable/reftable-record.h b/reftable/reftable-record.h
index ddd48eb579..931e594744 100644
--- a/reftable/reftable-record.h
+++ b/reftable/reftable-record.h
@@ -65,7 +65,7 @@ void reftable_ref_record_release(struct reftable_ref_record *ref);
/* returns whether two reftable_ref_records are the same. Useful for testing. */
int reftable_ref_record_equal(const struct reftable_ref_record *a,
- const struct reftable_ref_record *b, int hash_size);
+ const struct reftable_ref_record *b, uint32_t hash_size);
/* reftable_log_record holds a reflog entry */
struct reftable_log_record {
@@ -105,6 +105,6 @@ void reftable_log_record_release(struct reftable_log_record *log);
/* returns whether two records are equal. Useful for testing. */
int reftable_log_record_equal(const struct reftable_log_record *a,
- const struct reftable_log_record *b, int hash_size);
+ const struct reftable_log_record *b, uint32_t hash_size);
#endif
diff --git a/reftable/reftable-writer.h b/reftable/reftable-writer.h
index 5f9afa620b..bfef3b1721 100644
--- a/reftable/reftable-writer.h
+++ b/reftable/reftable-writer.h
@@ -84,7 +84,7 @@ struct reftable_block_stats {
/* total number of entries written */
int entries;
/* total number of key restarts */
- int restarts;
+ uint32_t restarts;
/* total number of blocks */
int blocks;
/* total number of index blocks */
diff --git a/reftable/stack.c b/reftable/stack.c
index 531660a49f..f7c1845e15 100644
--- a/reftable/stack.c
+++ b/reftable/stack.c
@@ -220,9 +220,9 @@ void reftable_stack_destroy(struct reftable_stack *st)
}
if (st->readers) {
- int i = 0;
struct reftable_buf filename = REFTABLE_BUF_INIT;
- for (i = 0; i < st->readers_len; i++) {
+
+ for (size_t i = 0; i < st->readers_len; i++) {
const char *name = reader_name(st->readers[i]);
int try_unlinking = 1;
@@ -238,6 +238,7 @@ void reftable_stack_destroy(struct reftable_stack *st)
unlink(filename.buf);
}
}
+
reftable_buf_release(&filename);
st->readers_len = 0;
REFTABLE_FREE_AND_NULL(st->readers);
@@ -493,7 +494,7 @@ static int reftable_stack_reload_maybe_reuse(struct reftable_stack *st,
close(fd);
fd = -1;
- delay = delay + (delay * rand()) / RAND_MAX + 1;
+ delay = delay + (delay * git_rand(CSPRNG_BYTES_INSECURE)) / UINT32_MAX + 1;
sleep_millisec(delay);
}
@@ -568,7 +569,6 @@ static int stack_uptodate(struct reftable_stack *st)
{
char **names = NULL;
int err;
- int i = 0;
/*
* When we have cached stat information available then we use it to
@@ -608,7 +608,7 @@ static int stack_uptodate(struct reftable_stack *st)
if (err < 0)
return err;
- for (i = 0; i < st->readers_len; i++) {
+ for (size_t i = 0; i < st->readers_len; i++) {
if (!names[i]) {
err = 1;
goto done;
@@ -659,7 +659,7 @@ int reftable_stack_add(struct reftable_stack *st,
static int format_name(struct reftable_buf *dest, uint64_t min, uint64_t max)
{
char buf[100];
- uint32_t rnd = (uint32_t)git_rand();
+ uint32_t rnd = git_rand(CSPRNG_BYTES_INSECURE);
snprintf(buf, sizeof(buf), "0x%012" PRIx64 "-0x%012" PRIx64 "-%08x",
min, max, rnd);
reftable_buf_reset(dest);
@@ -1767,14 +1767,12 @@ static int reftable_stack_clean_locked(struct reftable_stack *st)
}
while ((d = readdir(dir))) {
- int i = 0;
int found = 0;
if (!is_table_name(d->d_name))
continue;
- for (i = 0; !found && i < st->readers_len; i++) {
+ for (size_t i = 0; !found && i < st->readers_len; i++)
found = !strcmp(reader_name(st->readers[i]), d->d_name);
- }
if (found)
continue;
diff --git a/reftable/system.h b/reftable/system.h
index 5274eca1d0..7d5f803eeb 100644
--- a/reftable/system.h
+++ b/reftable/system.h
@@ -11,8 +11,6 @@ https://developers.google.com/open-source/licenses/bsd
/* This header glues the reftable library to the rest of Git */
-#define DISABLE_SIGN_COMPARE_WARNINGS
-
#include "git-compat-util.h"
/*
diff --git a/reftable/writer.c b/reftable/writer.c
index 740c98038e..91d6629486 100644
--- a/reftable/writer.c
+++ b/reftable/writer.c
@@ -577,7 +577,7 @@ static int writer_finish_section(struct reftable_writer *w)
struct common_prefix_arg {
struct reftable_buf *last;
- int max;
+ size_t max;
};
static void update_common(void *void_arg, void *key)
@@ -585,10 +585,9 @@ static void update_common(void *void_arg, void *key)
struct common_prefix_arg *arg = void_arg;
struct obj_index_tree_node *entry = key;
if (arg->last) {
- int n = common_prefix_size(&entry->hash, arg->last);
- if (n > arg->max) {
+ size_t n = common_prefix_size(&entry->hash, arg->last);
+ if (n > arg->max)
arg->max = n;
- }
}
arg->last = &entry->hash;
}
diff --git a/remote-curl.c b/remote-curl.c
index a24e3a8b9a..1273507a96 100644
--- a/remote-curl.c
+++ b/remote-curl.c
@@ -942,7 +942,7 @@ static int post_rpc(struct rpc_state *rpc, int stateless_connect, int flush_rece
do {
err = probe_rpc(rpc, &results);
if (err == HTTP_REAUTH)
- credential_fill(&http_auth, 0);
+ credential_fill(the_repository, &http_auth, 0);
} while (err == HTTP_REAUTH);
if (err != HTTP_OK)
return -1;
@@ -1064,7 +1064,7 @@ retry:
rpc->any_written = 0;
err = run_slot(slot, NULL);
if (err == HTTP_REAUTH && !large_request) {
- credential_fill(&http_auth, 0);
+ credential_fill(the_repository, &http_auth, 0);
curl_slist_free_all(headers);
goto retry;
}
diff --git a/remote.c b/remote.c
index 18e5ccf391..0f6fba8562 100644
--- a/remote.c
+++ b/remote.c
@@ -1535,7 +1535,7 @@ static struct ref **tail_ref(struct ref **head)
struct tips {
struct commit **tip;
- int nr, alloc;
+ size_t nr, alloc;
};
static void add_to_tips(struct tips *tips, const struct object_id *oid)
@@ -1602,7 +1602,7 @@ static void add_missing_tags(struct ref *src, struct ref **dst, struct ref ***ds
const int reachable_flag = 1;
struct commit_list *found_commits;
struct commit **src_commits;
- int nr_src_commits = 0, alloc_src_commits = 16;
+ size_t nr_src_commits = 0, alloc_src_commits = 16;
ALLOC_ARRAY(src_commits, alloc_src_commits);
for_each_string_list_item(item, &src_tag) {
diff --git a/resolve-undo.c b/resolve-undo.c
index b5a9dfb4ac..52c45e5a49 100644
--- a/resolve-undo.c
+++ b/resolve-undo.c
@@ -1,4 +1,3 @@
-#define USE_THE_REPOSITORY_VARIABLE
#define DISABLE_SIGN_COMPARE_WARNINGS
#include "git-compat-util.h"
@@ -34,7 +33,8 @@ void record_resolve_undo(struct index_state *istate, struct cache_entry *ce)
ui->mode[stage - 1] = ce->ce_mode;
}
-void resolve_undo_write(struct strbuf *sb, struct string_list *resolve_undo)
+void resolve_undo_write(struct strbuf *sb, struct string_list *resolve_undo,
+ const struct git_hash_algo *algop)
{
struct string_list_item *item;
for_each_string_list_item(item, resolve_undo) {
@@ -50,18 +50,19 @@ void resolve_undo_write(struct strbuf *sb, struct string_list *resolve_undo)
for (i = 0; i < 3; i++) {
if (!ui->mode[i])
continue;
- strbuf_add(sb, ui->oid[i].hash, the_hash_algo->rawsz);
+ strbuf_add(sb, ui->oid[i].hash, algop->rawsz);
}
}
}
-struct string_list *resolve_undo_read(const char *data, unsigned long size)
+struct string_list *resolve_undo_read(const char *data, unsigned long size,
+ const struct git_hash_algo *algop)
{
struct string_list *resolve_undo;
size_t len;
char *endptr;
int i;
- const unsigned rawsz = the_hash_algo->rawsz;
+ const unsigned rawsz = algop->rawsz;
CALLOC_ARRAY(resolve_undo, 1);
resolve_undo->strdup_strings = 1;
@@ -96,8 +97,7 @@ struct string_list *resolve_undo_read(const char *data, unsigned long size)
continue;
if (size < rawsz)
goto error;
- oidread(&ui->oid[i], (const unsigned char *)data,
- the_repository->hash_algo);
+ oidread(&ui->oid[i], (const unsigned char *)data, algop);
size -= rawsz;
data += rawsz;
}
diff --git a/resolve-undo.h b/resolve-undo.h
index 89a3227262..7ed11a1c59 100644
--- a/resolve-undo.h
+++ b/resolve-undo.h
@@ -14,8 +14,10 @@ struct resolve_undo_info {
};
void record_resolve_undo(struct index_state *, struct cache_entry *);
-void resolve_undo_write(struct strbuf *, struct string_list *);
-struct string_list *resolve_undo_read(const char *, unsigned long);
+void resolve_undo_write(struct strbuf *, struct string_list *,
+ const struct git_hash_algo *algop);
+struct string_list *resolve_undo_read(const char *, unsigned long,
+ const struct git_hash_algo *algop);
void resolve_undo_clear_index(struct index_state *);
int unmerge_index_entry(struct index_state *, const char *, struct resolve_undo_info *, unsigned);
void unmerge_index(struct index_state *, const struct pathspec *, unsigned);
diff --git a/send-pack.c b/send-pack.c
index 7e83213683..772c7683a0 100644
--- a/send-pack.c
+++ b/send-pack.c
@@ -1,5 +1,3 @@
-#define USE_THE_REPOSITORY_VARIABLE
-
#include "git-compat-util.h"
#include "config.h"
#include "commit.h"
@@ -44,10 +42,11 @@ int option_parse_push_signed(const struct option *opt,
die("bad %s argument: %s", opt->long_name, arg);
}
-static void feed_object(const struct object_id *oid, FILE *fh, int negative)
+static void feed_object(struct repository *r,
+ const struct object_id *oid, FILE *fh, int negative)
{
if (negative &&
- !repo_has_object_file_with_flags(the_repository, oid,
+ !repo_has_object_file_with_flags(r, oid,
OBJECT_INFO_SKIP_FETCH_OBJECT |
OBJECT_INFO_QUICK))
return;
@@ -61,7 +60,8 @@ static void feed_object(const struct object_id *oid, FILE *fh, int negative)
/*
* Make a pack stream and spit it out into file descriptor fd
*/
-static int pack_objects(int fd, struct ref *refs, struct oid_array *advertised,
+static int pack_objects(struct repository *r,
+ int fd, struct ref *refs, struct oid_array *advertised,
struct oid_array *negotiated,
struct send_pack_args *args)
{
@@ -74,7 +74,7 @@ static int pack_objects(int fd, struct ref *refs, struct oid_array *advertised,
FILE *po_in;
int rc;
- trace2_region_enter("send_pack", "pack_objects", the_repository);
+ trace2_region_enter("send_pack", "pack_objects", r);
strvec_push(&po.args, "pack-objects");
strvec_push(&po.args, "--all-progress-implied");
strvec_push(&po.args, "--revs");
@@ -87,7 +87,7 @@ static int pack_objects(int fd, struct ref *refs, struct oid_array *advertised,
strvec_push(&po.args, "-q");
if (args->progress)
strvec_push(&po.args, "--progress");
- if (is_repository_shallow(the_repository))
+ if (is_repository_shallow(r))
strvec_push(&po.args, "--shallow");
if (args->disable_bitmaps)
strvec_push(&po.args, "--no-use-bitmap-index");
@@ -104,15 +104,15 @@ static int pack_objects(int fd, struct ref *refs, struct oid_array *advertised,
*/
po_in = xfdopen(po.in, "w");
for (size_t i = 0; i < advertised->nr; i++)
- feed_object(&advertised->oid[i], po_in, 1);
+ feed_object(r, &advertised->oid[i], po_in, 1);
for (size_t i = 0; i < negotiated->nr; i++)
- feed_object(&negotiated->oid[i], po_in, 1);
+ feed_object(r, &negotiated->oid[i], po_in, 1);
while (refs) {
if (!is_null_oid(&refs->old_oid))
- feed_object(&refs->old_oid, po_in, 1);
+ feed_object(r, &refs->old_oid, po_in, 1);
if (!is_null_oid(&refs->new_oid))
- feed_object(&refs->new_oid, po_in, 0);
+ feed_object(r, &refs->new_oid, po_in, 0);
refs = refs->next;
}
@@ -146,10 +146,10 @@ static int pack_objects(int fd, struct ref *refs, struct oid_array *advertised,
*/
if (rc > 128 && rc != 141)
error("pack-objects died of signal %d", rc - 128);
- trace2_region_leave("send_pack", "pack_objects", the_repository);
+ trace2_region_leave("send_pack", "pack_objects", r);
return -1;
}
- trace2_region_leave("send_pack", "pack_objects", the_repository);
+ trace2_region_leave("send_pack", "pack_objects", r);
return 0;
}
@@ -164,7 +164,8 @@ static int receive_unpack_status(struct packet_reader *reader)
return 0;
}
-static int receive_status(struct packet_reader *reader, struct ref *refs)
+static int receive_status(struct repository *r,
+ struct packet_reader *reader, struct ref *refs)
{
struct ref *hint;
int ret;
@@ -172,7 +173,7 @@ static int receive_status(struct packet_reader *reader, struct ref *refs)
int new_report = 0;
int once = 0;
- trace2_region_enter("send_pack", "receive_status", the_repository);
+ trace2_region_enter("send_pack", "receive_status", r);
hint = NULL;
ret = receive_unpack_status(reader);
while (1) {
@@ -221,10 +222,10 @@ static int receive_status(struct packet_reader *reader, struct ref *refs)
if (!strcmp(key, "refname"))
report->ref_name = xstrdup_or_null(val);
else if (!strcmp(key, "old-oid") && val &&
- !parse_oid_hex(val, &old_oid, &val))
+ !parse_oid_hex_algop(val, &old_oid, &val, r->hash_algo))
report->old_oid = oiddup(&old_oid);
else if (!strcmp(key, "new-oid") && val &&
- !parse_oid_hex(val, &new_oid, &val))
+ !parse_oid_hex_algop(val, &new_oid, &val, r->hash_algo))
report->new_oid = oiddup(&new_oid);
else if (!strcmp(key, "forced-update"))
report->forced_update = 1;
@@ -271,7 +272,7 @@ static int receive_status(struct packet_reader *reader, struct ref *refs)
new_report = 1;
}
}
- trace2_region_leave("send_pack", "receive_status", the_repository);
+ trace2_region_leave("send_pack", "receive_status", r);
return ret;
}
@@ -293,9 +294,9 @@ static int advertise_shallow_grafts_cb(const struct commit_graft *graft, void *c
return 0;
}
-static void advertise_shallow_grafts_buf(struct strbuf *sb)
+static void advertise_shallow_grafts_buf(struct repository *r, struct strbuf *sb)
{
- if (!is_repository_shallow(the_repository))
+ if (!is_repository_shallow(r))
return;
for_each_commit_graft(advertise_shallow_grafts_cb, sb);
}
@@ -426,13 +427,14 @@ static void reject_invalid_nonce(const char *nonce, int len)
}
}
-static void get_commons_through_negotiation(const char *url,
+static void get_commons_through_negotiation(struct repository *r,
+ const char *url,
const struct ref *remote_refs,
struct oid_array *commons)
{
struct child_process child = CHILD_PROCESS_INIT;
const struct ref *ref;
- int len = the_hash_algo->hexsz + 1; /* hash + NL */
+ int len = r->hash_algo->hexsz + 1; /* hash + NL */
int nr_negotiation_tip = 0;
child.git_cmd = 1;
@@ -466,7 +468,7 @@ static void get_commons_through_negotiation(const char *url,
break;
if (read_len != len)
die("invalid length read %d", read_len);
- if (parse_oid_hex(hex_hash, &oid, &end) || *end != '\n')
+ if (parse_oid_hex_algop(hex_hash, &oid, &end, r->hash_algo) || *end != '\n')
die("invalid hash");
oid_array_append(commons, &oid);
} while (1);
@@ -480,7 +482,8 @@ static void get_commons_through_negotiation(const char *url,
}
}
-int send_pack(struct send_pack_args *args,
+int send_pack(struct repository *r,
+ struct send_pack_args *args,
int fd[], struct child_process *conn,
struct ref *remote_refs,
struct oid_array *extra_have)
@@ -518,17 +521,17 @@ int send_pack(struct send_pack_args *args,
goto out;
}
- git_config_get_bool("push.negotiate", &push_negotiate);
+ repo_config_get_bool(r, "push.negotiate", &push_negotiate);
if (push_negotiate) {
- trace2_region_enter("send_pack", "push_negotiate", the_repository);
- get_commons_through_negotiation(args->url, remote_refs, &commons);
- trace2_region_leave("send_pack", "push_negotiate", the_repository);
+ trace2_region_enter("send_pack", "push_negotiate", r);
+ get_commons_through_negotiation(r, args->url, remote_refs, &commons);
+ trace2_region_leave("send_pack", "push_negotiate", r);
}
- if (!git_config_get_bool("push.usebitmaps", &use_bitmaps))
+ if (!repo_config_get_bool(r, "push.usebitmaps", &use_bitmaps))
args->disable_bitmaps = !use_bitmaps;
- git_config_get_bool("transfer.advertisesid", &advertise_sid);
+ repo_config_get_bool(r, "transfer.advertisesid", &advertise_sid);
/* Does the other end support the reporting? */
if (server_supports("report-status-v2"))
@@ -554,7 +557,7 @@ int send_pack(struct send_pack_args *args,
if (server_supports("push-options"))
push_options_supported = 1;
- if (!server_supports_hash(the_hash_algo->name, &object_format_supported))
+ if (!server_supports_hash(r->hash_algo->name, &object_format_supported))
die(_("the receiving end does not support this repository's hash algorithm"));
if (args->push_cert != SEND_PACK_PUSH_CERT_NEVER) {
@@ -596,7 +599,7 @@ int send_pack(struct send_pack_args *args,
if (use_push_options)
strbuf_addstr(&cap_buf, " push-options");
if (object_format_supported)
- strbuf_addf(&cap_buf, " object-format=%s", the_hash_algo->name);
+ strbuf_addf(&cap_buf, " object-format=%s", r->hash_algo->name);
if (agent_supported)
strbuf_addf(&cap_buf, " agent=%s", git_user_agent_sanitized());
if (advertise_sid)
@@ -646,7 +649,7 @@ int send_pack(struct send_pack_args *args,
}
if (!args->dry_run)
- advertise_shallow_grafts_buf(&req_buf);
+ advertise_shallow_grafts_buf(r, &req_buf);
/*
* Finally, tell the other end!
@@ -686,7 +689,7 @@ int send_pack(struct send_pack_args *args,
}
if (args->stateless_rpc) {
- if (!args->dry_run && (cmds_sent || is_repository_shallow(the_repository))) {
+ if (!args->dry_run && (cmds_sent || is_repository_shallow(r))) {
packet_buf_flush(&req_buf);
send_sideband(out, -1, req_buf.buf, req_buf.len, LARGE_PACKET_MAX);
}
@@ -711,7 +714,7 @@ int send_pack(struct send_pack_args *args,
PACKET_READ_DIE_ON_ERR_PACKET);
if (need_pack_data && cmds_sent) {
- if (pack_objects(out, remote_refs, extra_have, &commons, args) < 0) {
+ if (pack_objects(r, out, remote_refs, extra_have, &commons, args) < 0) {
if (args->stateless_rpc)
close(out);
if (git_connection_is_socket(conn))
@@ -724,7 +727,7 @@ int send_pack(struct send_pack_args *args,
* we get one).
*/
if (status_report)
- receive_status(&reader, remote_refs);
+ receive_status(r, &reader, remote_refs);
if (use_sideband) {
close(demux.out);
@@ -743,7 +746,7 @@ int send_pack(struct send_pack_args *args,
packet_flush(out);
if (status_report && cmds_sent)
- ret = receive_status(&reader, remote_refs);
+ ret = receive_status(r, &reader, remote_refs);
else
ret = 0;
if (args->stateless_rpc)
diff --git a/send-pack.h b/send-pack.h
index 7edb80596c..d256715681 100644
--- a/send-pack.h
+++ b/send-pack.h
@@ -6,6 +6,7 @@
struct child_process;
struct oid_array;
struct ref;
+struct repository;
/* Possible values for push_cert field in send_pack_args. */
#define SEND_PACK_PUSH_CERT_NEVER 0
@@ -35,7 +36,7 @@ struct option;
int option_parse_push_signed(const struct option *opt,
const char *arg, int unset);
-int send_pack(struct send_pack_args *args,
+int send_pack(struct repository *r, struct send_pack_args *args,
int fd[], struct child_process *conn,
struct ref *remote_refs, struct oid_array *extra_have);
diff --git a/serve.c b/serve.c
index c8694e3751..f6dfe34a2b 100644
--- a/serve.c
+++ b/serve.c
@@ -1,5 +1,3 @@
-#define USE_THE_REPOSITORY_VARIABLE
-
#include "git-compat-util.h"
#include "repository.h"
#include "config.h"
@@ -159,7 +157,7 @@ static struct protocol_capability capabilities[] = {
},
};
-void protocol_v2_advertise_capabilities(void)
+void protocol_v2_advertise_capabilities(struct repository *r)
{
struct strbuf capability = STRBUF_INIT;
struct strbuf value = STRBUF_INIT;
@@ -170,7 +168,7 @@ void protocol_v2_advertise_capabilities(void)
for (size_t i = 0; i < ARRAY_SIZE(capabilities); i++) {
struct protocol_capability *c = &capabilities[i];
- if (c->advertise(the_repository, &value)) {
+ if (c->advertise(r, &value)) {
strbuf_addstr(&capability, c->name);
if (value.len) {
@@ -214,20 +212,20 @@ static struct protocol_capability *get_capability(const char *key, const char **
return NULL;
}
-static int receive_client_capability(const char *key)
+static int receive_client_capability(struct repository *r, const char *key)
{
const char *value;
const struct protocol_capability *c = get_capability(key, &value);
- if (!c || c->command || !c->advertise(the_repository, NULL))
+ if (!c || c->command || !c->advertise(r, NULL))
return 0;
if (c->receive)
- c->receive(the_repository, value);
+ c->receive(r, value);
return 1;
}
-static int parse_command(const char *key, struct protocol_capability **command)
+static int parse_command(struct repository *r, const char *key, struct protocol_capability **command)
{
const char *out;
@@ -238,7 +236,7 @@ static int parse_command(const char *key, struct protocol_capability **command)
if (*command)
die("command '%s' requested after already requesting command '%s'",
out, (*command)->name);
- if (!cmd || !cmd->advertise(the_repository, NULL) || !cmd->command || value)
+ if (!cmd || !cmd->advertise(r, NULL) || !cmd->command || value)
die("invalid command '%s'", out);
*command = cmd;
@@ -253,7 +251,7 @@ enum request_state {
PROCESS_REQUEST_DONE,
};
-static int process_request(void)
+static int process_request(struct repository *r)
{
enum request_state state = PROCESS_REQUEST_KEYS;
struct packet_reader reader;
@@ -278,8 +276,8 @@ static int process_request(void)
case PACKET_READ_EOF:
BUG("Should have already died when seeing EOF");
case PACKET_READ_NORMAL:
- if (parse_command(reader.line, &command) ||
- receive_client_capability(reader.line))
+ if (parse_command(r, reader.line, &command) ||
+ receive_client_capability(r, reader.line))
seen_capability_or_command = 1;
else
die("unknown capability '%s'", reader.line);
@@ -319,30 +317,30 @@ static int process_request(void)
if (!command)
die("no command requested");
- if (client_hash_algo != hash_algo_by_ptr(the_repository->hash_algo))
+ if (client_hash_algo != hash_algo_by_ptr(r->hash_algo))
die("mismatched object format: server %s; client %s",
- the_repository->hash_algo->name,
+ r->hash_algo->name,
hash_algos[client_hash_algo].name);
- command->command(the_repository, &reader);
+ command->command(r, &reader);
return 0;
}
-void protocol_v2_serve_loop(int stateless_rpc)
+void protocol_v2_serve_loop(struct repository *r, int stateless_rpc)
{
if (!stateless_rpc)
- protocol_v2_advertise_capabilities();
+ protocol_v2_advertise_capabilities(r);
/*
* If stateless-rpc was requested then exit after
* a single request/response exchange
*/
if (stateless_rpc) {
- process_request();
+ process_request(r);
} else {
for (;;)
- if (process_request())
+ if (process_request(r))
break;
}
}
diff --git a/serve.h b/serve.h
index f946cf904a..85bf73cfe5 100644
--- a/serve.h
+++ b/serve.h
@@ -1,7 +1,9 @@
#ifndef SERVE_H
#define SERVE_H
-void protocol_v2_advertise_capabilities(void);
-void protocol_v2_serve_loop(int stateless_rpc);
+struct repository;
+
+void protocol_v2_advertise_capabilities(struct repository *r);
+void protocol_v2_serve_loop(struct repository *r, int stateless_rpc);
#endif /* SERVE_H */
diff --git a/server-info.c b/server-info.c
index ef2f3f4b5c..31c3fdc118 100644
--- a/server-info.c
+++ b/server-info.c
@@ -1,4 +1,3 @@
-#define USE_THE_REPOSITORY_VARIABLE
#define DISABLE_SIGN_COMPARE_WARNINGS
#include "git-compat-util.h"
@@ -18,6 +17,7 @@
#include "tempfile.h"
struct update_info_ctx {
+ struct repository *repo;
FILE *cur_fp;
FILE *old_fp; /* becomes NULL if it differs from cur_fp */
struct strbuf cur_sb;
@@ -73,7 +73,7 @@ static int uic_printf(struct update_info_ctx *uic, const char *fmt, ...)
* it into place. The contents of the file come from "generate", which
* should return non-zero if it encounters an error.
*/
-static int update_info_file(char *path,
+static int update_info_file(struct repository *r, char *path,
int (*generate)(struct update_info_ctx *),
int force)
{
@@ -81,6 +81,7 @@ static int update_info_file(char *path,
struct tempfile *f = NULL;
int ret = -1;
struct update_info_ctx uic = {
+ .repo = r,
.cur_fp = NULL,
.old_fp = NULL,
.cur_sb = STRBUF_INIT,
@@ -152,7 +153,7 @@ static int add_info_ref(const char *path, const char *referent UNUSED, const str
void *cb_data)
{
struct update_info_ctx *uic = cb_data;
- struct object *o = parse_object(the_repository, oid);
+ struct object *o = parse_object(uic->repo, oid);
if (!o)
return -1;
@@ -160,7 +161,7 @@ static int add_info_ref(const char *path, const char *referent UNUSED, const str
return -1;
if (o->type == OBJ_TAG) {
- o = deref_tag(the_repository, o, path, 0);
+ o = deref_tag(uic->repo, o, path, 0);
if (o)
if (uic_printf(uic, "%s %s^{}\n",
oid_to_hex(&o->oid), path) < 0)
@@ -171,14 +172,14 @@ static int add_info_ref(const char *path, const char *referent UNUSED, const str
static int generate_info_refs(struct update_info_ctx *uic)
{
- return refs_for_each_ref(get_main_ref_store(the_repository),
+ return refs_for_each_ref(get_main_ref_store(uic->repo),
add_info_ref, uic);
}
-static int update_info_refs(int force)
+static int update_info_refs(struct repository *r, int force)
{
- char *path = git_pathdup("info/refs");
- int ret = update_info_file(path, generate_info_refs, force);
+ char *path = repo_git_path(r, "info/refs");
+ int ret = update_info_file(r, path, generate_info_refs, force);
free(path);
return ret;
}
@@ -284,14 +285,14 @@ static int compare_info(const void *a_, const void *b_)
return 1;
}
-static void init_pack_info(const char *infofile, int force)
+static void init_pack_info(struct repository *r, const char *infofile, int force)
{
struct packed_git *p;
int stale;
int i;
size_t alloc = 0;
- for (p = get_all_packs(the_repository); p; p = p->next) {
+ for (p = get_all_packs(r); p; p = p->next) {
/* we ignore things on alternate path since they are
* not available to the pullers in general.
*/
@@ -340,33 +341,36 @@ static int write_pack_info_file(struct update_info_ctx *uic)
return 0;
}
-static int update_info_packs(int force)
+static int update_info_packs(struct repository *r, int force)
{
char *infofile = mkpathdup("%s/info/packs",
- repo_get_object_directory(the_repository));
+ repo_get_object_directory(r));
int ret;
- init_pack_info(infofile, force);
- ret = update_info_file(infofile, write_pack_info_file, force);
+ init_pack_info(r, infofile, force);
+ ret = update_info_file(r, infofile, write_pack_info_file, force);
free_pack_info();
free(infofile);
return ret;
}
/* public */
-int update_server_info(int force)
+int update_server_info(struct repository *r, int force)
{
/* We would add more dumb-server support files later,
* including index of available pack files and their
* intended audiences.
*/
int errs = 0;
+ char *path;
- errs = errs | update_info_refs(force);
- errs = errs | update_info_packs(force);
+ errs = errs | update_info_refs(r, force);
+ errs = errs | update_info_packs(r, force);
/* remove leftover rev-cache file if there is any */
- unlink_or_warn(git_path("info/rev-cache"));
+ path = repo_git_path(r, "info/rev-cache");
+ unlink_or_warn(path);
+ free(path);
return errs;
}
diff --git a/server-info.h b/server-info.h
index 13bbde2c55..e634d1722b 100644
--- a/server-info.h
+++ b/server-info.h
@@ -1,7 +1,9 @@
#ifndef SERVER_INFO_H
#define SERVER_INFO_H
+struct repository;
+
/* Dumb servers support */
-int update_server_info(int);
+int update_server_info(struct repository *r, int force);
#endif /* SERVER_INFO_H */
diff --git a/shallow.c b/shallow.c
index 82a8da3d73..b54244ffa9 100644
--- a/shallow.c
+++ b/shallow.c
@@ -1,5 +1,4 @@
#define USE_THE_REPOSITORY_VARIABLE
-#define DISABLE_SIGN_COMPARE_WARNINGS
#include "git-compat-util.h"
#include "hex.h"
@@ -134,7 +133,8 @@ static void free_depth_in_slab(int **ptr)
struct commit_list *get_shallow_commits(struct object_array *heads, int depth,
int shallow_flag, int not_shallow_flag)
{
- int i = 0, cur_depth = 0;
+ size_t i = 0;
+ int cur_depth = 0;
struct commit_list *result = NULL;
struct object_array stack = OBJECT_ARRAY_INIT;
struct commit *commit = NULL;
@@ -335,16 +335,16 @@ static int write_shallow_commits_1(struct strbuf *out, int use_pack_protocol,
const struct oid_array *extra,
unsigned flags)
{
- struct write_shallow_data data;
- int i;
- data.out = out;
- data.use_pack_protocol = use_pack_protocol;
- data.count = 0;
- data.flags = flags;
+ struct write_shallow_data data = {
+ .out = out,
+ .use_pack_protocol = use_pack_protocol,
+ .flags = flags,
+ };
+
for_each_commit_graft(write_one_shallow, &data);
if (!extra)
return data.count;
- for (i = 0; i < extra->nr; i++) {
+ for (size_t i = 0; i < extra->nr; i++) {
strbuf_addstr(out, oid_to_hex(extra->oid + i));
strbuf_addch(out, '\n');
data.count++;
@@ -466,7 +466,6 @@ struct trace_key trace_shallow = TRACE_KEY_INIT(SHALLOW);
*/
void prepare_shallow_info(struct shallow_info *info, struct oid_array *sa)
{
- int i;
trace_printf_key(&trace_shallow, "shallow: prepare_shallow_info\n");
memset(info, 0, sizeof(*info));
info->shallow = sa;
@@ -474,7 +473,7 @@ void prepare_shallow_info(struct shallow_info *info, struct oid_array *sa)
return;
ALLOC_ARRAY(info->ours, sa->nr);
ALLOC_ARRAY(info->theirs, sa->nr);
- for (i = 0; i < sa->nr; i++) {
+ for (size_t i = 0; i < sa->nr; i++) {
if (repo_has_object_file(the_repository, sa->oid + i)) {
struct commit_graft *graft;
graft = lookup_commit_graft(the_repository,
@@ -507,7 +506,7 @@ void clear_shallow_info(struct shallow_info *info)
void remove_nonexistent_theirs_shallow(struct shallow_info *info)
{
struct object_id *oid = info->shallow->oid;
- int i, dst;
+ size_t i, dst;
trace_printf_key(&trace_shallow, "shallow: remove_nonexistent_theirs_shallow\n");
for (i = dst = 0; i < info->nr_theirs; i++) {
if (i != dst)
@@ -535,7 +534,7 @@ static uint32_t *paint_alloc(struct paint_info *info)
unsigned nr = DIV_ROUND_UP(info->nr_bits, 32);
unsigned size = nr * sizeof(uint32_t);
void *p;
- if (!info->pool_count || size > info->end - info->free) {
+ if (!info->pool_count || info->end < info->free + size) {
if (size > POOL_SIZE)
BUG("pool size too small for %d in paint_alloc()",
size);
@@ -560,7 +559,7 @@ static void paint_down(struct paint_info *info, const struct object_id *oid,
{
unsigned int i, nr;
struct commit_list *head = NULL;
- int bitmap_nr = DIV_ROUND_UP(info->nr_bits, 32);
+ size_t bitmap_nr = DIV_ROUND_UP(info->nr_bits, 32);
size_t bitmap_size = st_mult(sizeof(uint32_t), bitmap_nr);
struct commit *c = lookup_commit_reference_gently(the_repository, oid,
1);
@@ -660,7 +659,7 @@ void assign_shallow_commits_to_refs(struct shallow_info *info,
struct object_id *oid = info->shallow->oid;
struct oid_array *ref = info->ref;
unsigned int i, nr;
- int *shallow, nr_shallow = 0;
+ size_t *shallow, nr_shallow = 0;
struct paint_info pi;
trace_printf_key(&trace_shallow, "shallow: assign_shallow_commits_to_refs\n");
@@ -735,7 +734,7 @@ void assign_shallow_commits_to_refs(struct shallow_info *info,
struct commit_array {
struct commit **commits;
- int nr, alloc;
+ size_t nr, alloc;
};
static int add_ref(const char *refname UNUSED,
@@ -753,12 +752,11 @@ static int add_ref(const char *refname UNUSED,
return 0;
}
-static void update_refstatus(int *ref_status, int nr, uint32_t *bitmap)
+static void update_refstatus(int *ref_status, size_t nr, uint32_t *bitmap)
{
- unsigned int i;
if (!ref_status)
return;
- for (i = 0; i < nr; i++)
+ for (size_t i = 0; i < nr; i++)
if (bitmap[i / 32] & (1U << (i % 32)))
ref_status[i]++;
}
@@ -773,8 +771,8 @@ static void post_assign_shallow(struct shallow_info *info,
struct object_id *oid = info->shallow->oid;
struct commit *c;
uint32_t **bitmap;
- int dst, i, j;
- int bitmap_nr = DIV_ROUND_UP(info->ref->nr, 32);
+ size_t dst, i, j;
+ size_t bitmap_nr = DIV_ROUND_UP(info->ref->nr, 32);
struct commit_array ca;
trace_printf_key(&trace_shallow, "shallow: post_assign_shallow\n");
diff --git a/shallow.h b/shallow.h
index e9ca7e4bc8..9bfeade93e 100644
--- a/shallow.h
+++ b/shallow.h
@@ -59,8 +59,8 @@ void prune_shallow(unsigned options);
*/
struct shallow_info {
struct oid_array *shallow;
- int *ours, nr_ours;
- int *theirs, nr_theirs;
+ size_t *ours, nr_ours;
+ size_t *theirs, nr_theirs;
struct oid_array *ref;
/* for receive-pack */
@@ -69,7 +69,7 @@ struct shallow_info {
int *reachable;
int *shallow_ref;
struct commit **commits;
- int nr_commits;
+ size_t nr_commits;
};
void prepare_shallow_info(struct shallow_info *, struct oid_array *);
diff --git a/strbuf.c b/strbuf.c
index 8ddd4b06c5..f30fdc6984 100644
--- a/strbuf.c
+++ b/strbuf.c
@@ -497,7 +497,9 @@ void strbuf_add_percentencode(struct strbuf *dst, const char *src, int flags)
unsigned char ch = src[i];
if (ch <= 0x1F || ch >= 0x7F ||
(ch == '/' && (flags & STRBUF_ENCODE_SLASH)) ||
- strchr(URL_UNSAFE_CHARS, ch))
+ ((flags & STRBUF_ENCODE_HOST_AND_PORT) ?
+ !isalnum(ch) && !strchr("-.:[]", ch) :
+ !!strchr(URL_UNSAFE_CHARS, ch)))
strbuf_addf(dst, "%%%02X", (unsigned char)ch);
else
strbuf_addch(dst, ch);
diff --git a/strbuf.h b/strbuf.h
index 4dc05b4ba7..6362777c0a 100644
--- a/strbuf.h
+++ b/strbuf.h
@@ -356,6 +356,7 @@ void strbuf_expand_bad_format(const char *format, const char *command);
void strbuf_addbuf_percentquote(struct strbuf *dst, const struct strbuf *src);
#define STRBUF_ENCODE_SLASH 1
+#define STRBUF_ENCODE_HOST_AND_PORT 2
/**
* Append the contents of a string to a strbuf, percent-encoding any characters
diff --git a/t/helper/meson.build b/t/helper/meson.build
index 5e83884246..f502d1aaa3 100644
--- a/t/helper/meson.build
+++ b/t/helper/meson.build
@@ -40,6 +40,7 @@ test_tool_sources = [
'test-parse-pathspec-file.c',
'test-partial-clone.c',
'test-path-utils.c',
+ 'test-path-walk.c',
'test-pcre2-config.c',
'test-pkt-line.c',
'test-proc-receive.c',
diff --git a/t/helper/test-csprng.c b/t/helper/test-csprng.c
index a4a0aca617..c86dcc4870 100644
--- a/t/helper/test-csprng.c
+++ b/t/helper/test-csprng.c
@@ -15,7 +15,7 @@ int cmd__csprng(int argc, const char **argv)
while (count) {
unsigned long chunk = count < sizeof(buf) ? count : sizeof(buf);
- if (csprng_bytes(buf, chunk) < 0) {
+ if (csprng_bytes(buf, chunk, 0) < 0) {
perror("failed to read");
return 5;
}
diff --git a/t/helper/test-path-walk.c b/t/helper/test-path-walk.c
new file mode 100644
index 0000000000..7f2d409c5b
--- /dev/null
+++ b/t/helper/test-path-walk.c
@@ -0,0 +1,112 @@
+#define USE_THE_REPOSITORY_VARIABLE
+
+#include "test-tool.h"
+#include "environment.h"
+#include "hex.h"
+#include "object-name.h"
+#include "object.h"
+#include "pretty.h"
+#include "revision.h"
+#include "setup.h"
+#include "parse-options.h"
+#include "path-walk.h"
+#include "oid-array.h"
+
+static const char * const path_walk_usage[] = {
+ N_("test-tool path-walk <options> -- <revision-options>"),
+ NULL
+};
+
+struct path_walk_test_data {
+ uintmax_t batch_nr;
+
+ uintmax_t commit_nr;
+ uintmax_t tree_nr;
+ uintmax_t blob_nr;
+ uintmax_t tag_nr;
+};
+
+static int emit_block(const char *path, struct oid_array *oids,
+ enum object_type type, void *data)
+{
+ struct path_walk_test_data *tdata = data;
+ const char *typestr;
+
+ if (type == OBJ_TREE)
+ tdata->tree_nr += oids->nr;
+ else if (type == OBJ_BLOB)
+ tdata->blob_nr += oids->nr;
+ else if (type == OBJ_COMMIT)
+ tdata->commit_nr += oids->nr;
+ else if (type == OBJ_TAG)
+ tdata->tag_nr += oids->nr;
+ else
+ BUG("we do not understand this type");
+
+ typestr = type_name(type);
+
+ /* This should never be output during tests. */
+ if (!oids->nr)
+ printf("%"PRIuMAX":%s:%s:EMPTY\n",
+ tdata->batch_nr, typestr, path);
+
+ for (size_t i = 0; i < oids->nr; i++) {
+ struct object *o = lookup_unknown_object(the_repository,
+ &oids->oid[i]);
+ printf("%"PRIuMAX":%s:%s:%s%s\n",
+ tdata->batch_nr, typestr, path,
+ oid_to_hex(&oids->oid[i]),
+ o->flags & UNINTERESTING ? ":UNINTERESTING" : "");
+ }
+
+ tdata->batch_nr++;
+ return 0;
+}
+
+int cmd__path_walk(int argc, const char **argv)
+{
+ int res;
+ struct rev_info revs = REV_INFO_INIT;
+ struct path_walk_info info = PATH_WALK_INFO_INIT;
+ struct path_walk_test_data data = { 0 };
+ struct option options[] = {
+ OPT_BOOL(0, "blobs", &info.blobs,
+ N_("toggle inclusion of blob objects")),
+ OPT_BOOL(0, "commits", &info.commits,
+ N_("toggle inclusion of commit objects")),
+ OPT_BOOL(0, "tags", &info.tags,
+ N_("toggle inclusion of tag objects")),
+ OPT_BOOL(0, "trees", &info.trees,
+ N_("toggle inclusion of tree objects")),
+ OPT_BOOL(0, "prune", &info.prune_all_uninteresting,
+ N_("toggle pruning of uninteresting paths")),
+ OPT_END(),
+ };
+
+ setup_git_directory();
+ revs.repo = the_repository;
+
+ argc = parse_options(argc, argv, NULL,
+ options, path_walk_usage,
+ PARSE_OPT_KEEP_UNKNOWN_OPT | PARSE_OPT_KEEP_ARGV0);
+
+ if (argc > 1)
+ setup_revisions(argc, argv, &revs, NULL);
+ else
+ usage(path_walk_usage[0]);
+
+ info.revs = &revs;
+ info.path_fn = emit_block;
+ info.path_fn_data = &data;
+
+ res = walk_objects_by_path(&info);
+
+ printf("commits:%" PRIuMAX "\n"
+ "trees:%" PRIuMAX "\n"
+ "blobs:%" PRIuMAX "\n"
+ "tags:%" PRIuMAX "\n",
+ data.commit_nr, data.tree_nr, data.blob_nr, data.tag_nr);
+
+ release_revisions(&revs);
+ return res;
+}
diff --git a/t/helper/test-progress.c b/t/helper/test-progress.c
index 44be2645e9..1f75b7bd19 100644
--- a/t/helper/test-progress.c
+++ b/t/helper/test-progress.c
@@ -17,10 +17,14 @@
*
* See 't0500-progress-display.sh' for examples.
*/
+
+#define USE_THE_REPOSITORY_VARIABLE
#define GIT_TEST_PROGRESS_ONLY
+
#include "test-tool.h"
#include "parse-options.h"
#include "progress.h"
+#include "repository.h"
#include "strbuf.h"
#include "string-list.h"
@@ -64,7 +68,7 @@ int cmd__progress(int argc, const char **argv)
else
die("invalid input: '%s'", line.buf);
- progress = start_progress(title, total);
+ progress = start_progress(the_repository, title, total);
} else if (skip_prefix(line.buf, "progress ", (const char **) &end)) {
uint64_t item_count = strtoull(end, &end, 10);
if (*end != '\0')
diff --git a/t/helper/test-reach.c b/t/helper/test-reach.c
index 01cf77ae65..028ec00306 100644
--- a/t/helper/test-reach.c
+++ b/t/helper/test-reach.c
@@ -35,7 +35,7 @@ int cmd__reach(int ac, const char **av)
struct commit_list *X, *Y;
struct object_array X_obj = OBJECT_ARRAY_INIT;
struct commit **X_array, **Y_array;
- int X_nr, X_alloc, Y_nr, Y_alloc;
+ size_t X_nr, X_alloc, Y_nr, Y_alloc;
struct strbuf buf = STRBUF_INIT;
struct repository *r = the_repository;
@@ -157,7 +157,7 @@ int cmd__reach(int ac, const char **av)
clear_contains_cache(&cache);
} else if (!strcmp(av[1], "get_reachable_subset")) {
const int reachable_flag = 1;
- int i, count = 0;
+ int count = 0;
struct commit_list *current;
struct commit_list *list = get_reachable_subset(X_array, X_nr,
Y_array, Y_nr,
@@ -169,7 +169,7 @@ int cmd__reach(int ac, const char **av)
oid_to_hex(&list->item->object.oid));
count++;
}
- for (i = 0; i < Y_nr; i++) {
+ for (size_t i = 0; i < Y_nr; i++) {
if (Y_array[i]->object.flags & reachable_flag)
count--;
}
diff --git a/t/helper/test-serve-v2.c b/t/helper/test-serve-v2.c
index 054cbcf5d8..63a200b8d4 100644
--- a/t/helper/test-serve-v2.c
+++ b/t/helper/test-serve-v2.c
@@ -1,6 +1,9 @@
+#define USE_THE_REPOSITORY_VARIABLE
+
#include "test-tool.h"
#include "gettext.h"
#include "parse-options.h"
+#include "repository.h"
#include "serve.h"
#include "setup.h"
@@ -28,9 +31,9 @@ int cmd__serve_v2(int argc, const char **argv)
PARSE_OPT_KEEP_UNKNOWN_OPT);
if (advertise_capabilities)
- protocol_v2_advertise_capabilities();
+ protocol_v2_advertise_capabilities(the_repository);
else
- protocol_v2_serve_loop(stateless_rpc);
+ protocol_v2_serve_loop(the_repository, stateless_rpc);
return 0;
}
diff --git a/t/helper/test-simple-ipc.c b/t/helper/test-simple-ipc.c
index fb5927775d..03cc5eea2c 100644
--- a/t/helper/test-simple-ipc.c
+++ b/t/helper/test-simple-ipc.c
@@ -612,8 +612,8 @@ int cmd__simple_ipc(int argc, const char **argv)
if (argc < 2)
usage_with_options(simple_ipc_usage, options);
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage_with_options(simple_ipc_usage, options);
+ show_usage_with_options_if_asked(argc, argv,
+ simple_ipc_usage, options);
if (argc == 2 && !strcmp(argv[1], "SUPPORTS_SIMPLE_IPC"))
return 0;
diff --git a/t/helper/test-tool.c b/t/helper/test-tool.c
index 4a7aa993ba..69a9ffa1eb 100644
--- a/t/helper/test-tool.c
+++ b/t/helper/test-tool.c
@@ -52,6 +52,7 @@ static struct test_cmd cmds[] = {
{ "parse-subcommand", cmd__parse_subcommand },
{ "partial-clone", cmd__partial_clone },
{ "path-utils", cmd__path_utils },
+ { "path-walk", cmd__path_walk },
{ "pcre2-config", cmd__pcre2_config },
{ "pkt-line", cmd__pkt_line },
{ "proc-receive", cmd__proc_receive },
diff --git a/t/helper/test-tool.h b/t/helper/test-tool.h
index 21802ac27d..9cfc5da6e5 100644
--- a/t/helper/test-tool.h
+++ b/t/helper/test-tool.h
@@ -45,6 +45,7 @@ int cmd__parse_pathspec_file(int argc, const char** argv);
int cmd__parse_subcommand(int argc, const char **argv);
int cmd__partial_clone(int argc, const char **argv);
int cmd__path_utils(int argc, const char **argv);
+int cmd__path_walk(int argc, const char **argv);
int cmd__pcre2_config(int argc, const char **argv);
int cmd__pkt_line(int argc, const char **argv);
int cmd__proc_receive(int argc, const char **argv);
diff --git a/t/lib-credential.sh b/t/lib-credential.sh
index 58b9c74060..cc6bf9aa5f 100644
--- a/t/lib-credential.sh
+++ b/t/lib-credential.sh
@@ -566,6 +566,21 @@ helper_test_authtype() {
EOF
'
+ test_expect_success "helper ($HELPER) gets authtype and credential only if request has authtype capability" '
+ check fill $HELPER <<-\EOF
+ protocol=https
+ host=git.example.com
+ --
+ protocol=https
+ host=git.example.com
+ username=askpass-username
+ password=askpass-password
+ --
+ askpass: Username for '\''https://git.example.com'\'':
+ askpass: Password for '\''https://askpass-username@git.example.com'\'':
+ EOF
+ '
+
test_expect_success "helper ($HELPER) stores authtype and credential with username" '
check approve $HELPER <<-\EOF
capability[]=authtype
diff --git a/t/meson.build b/t/meson.build
index 602ebfe6a2..35f25ca4a1 100644
--- a/t/meson.build
+++ b/t/meson.build
@@ -1,5 +1,9 @@
clar_test_suites = [
'unit-tests/u-ctype.c',
+ 'unit-tests/u-hash.c',
+ 'unit-tests/u-mem-pool.c',
+ 'unit-tests/u-prio-queue.c',
+ 'unit-tests/u-reftable-tree.c',
'unit-tests/u-strvec.c',
]
@@ -41,13 +45,10 @@ test('unit-tests', clar_unit_tests)
unit_test_programs = [
'unit-tests/t-example-decorate.c',
- 'unit-tests/t-hash.c',
'unit-tests/t-hashmap.c',
- 'unit-tests/t-mem-pool.c',
'unit-tests/t-oid-array.c',
'unit-tests/t-oidmap.c',
'unit-tests/t-oidtree.c',
- 'unit-tests/t-prio-queue.c',
'unit-tests/t-reftable-basics.c',
'unit-tests/t-reftable-block.c',
'unit-tests/t-reftable-merged.c',
@@ -56,7 +57,6 @@ unit_test_programs = [
'unit-tests/t-reftable-readwrite.c',
'unit-tests/t-reftable-record.c',
'unit-tests/t-reftable-stack.c',
- 'unit-tests/t-reftable-tree.c',
'unit-tests/t-strbuf.c',
'unit-tests/t-strcmp-offset.c',
'unit-tests/t-trailer.c',
@@ -829,6 +829,7 @@ integration_tests = [
't6500-gc.sh',
't6501-freshen-objects.sh',
't6600-test-reach.sh',
+ 't6601-path-walk.sh',
't6700-tree-depth.sh',
't7001-mv.sh',
't7002-mv-sparse-checkout.sh',
diff --git a/t/t0012-help.sh b/t/t0012-help.sh
index 1d273d91c2..d3a0967e9d 100755
--- a/t/t0012-help.sh
+++ b/t/t0012-help.sh
@@ -255,8 +255,9 @@ do
(
GIT_CEILING_DIRECTORIES=$(pwd) &&
export GIT_CEILING_DIRECTORIES &&
- test_expect_code 129 git -C sub $builtin -h >output 2>&1
+ test_expect_code 129 git -C sub $builtin -h >output 2>err
) &&
+ test_must_be_empty err &&
test_grep usage output
'
done <builtins
diff --git a/t/t0210-trace2-normal.sh b/t/t0210-trace2-normal.sh
index eff9a59dbd..4287ed3fbb 100755
--- a/t/t0210-trace2-normal.sh
+++ b/t/t0210-trace2-normal.sh
@@ -243,6 +243,15 @@ test_expect_success 'bug messages followed by BUG() are written to trace2' '
test_cmp expect actual
'
+test_expect_success 'a valueless true configuration variable is handled' '
+ test_when_finished "rm -f trace2.normal actual expect" &&
+ echo >expect &&
+ GIT_TRACE2="$(pwd)/trace2.normal" \
+ GIT_TRACE2_CONFIG_PARAMS=foo.true \
+ git -c foo.true config foo.true >actual &&
+ test_cmp expect actual
+'
+
sane_unset GIT_TRACE2_BRIEF
# Now test without environment variables and get all Trace2 settings
diff --git a/t/t0300-credentials.sh b/t/t0300-credentials.sh
index 17952e52d6..cb3a85c7ff 100755
--- a/t/t0300-credentials.sh
+++ b/t/t0300-credentials.sh
@@ -76,6 +76,10 @@ test_expect_success 'setup helper scripts' '
test -z "$pexpiry" || echo password_expiry_utc=$pexpiry
EOF
+ write_script git-credential-cntrl-in-username <<-\EOF &&
+ printf "username=\\007latrix Lestrange\\n"
+ EOF
+
PATH="$PWD:$PATH"
'
@@ -696,6 +700,19 @@ test_expect_success 'match percent-encoded values in username' '
EOF
'
+test_expect_success 'match percent-encoded values in hostname' '
+ test_config "credential.https://a%20b%20c/.helper" "$HELPER" &&
+ check fill <<-\EOF
+ url=https://a b c/
+ --
+ protocol=https
+ host=a b c
+ username=foo
+ password=bar
+ --
+ EOF
+'
+
test_expect_success 'fetch with multiple path components' '
test_unconfig credential.helper &&
test_config credential.https://example.com/foo/repo.git.helper "verbatim foo bar" &&
@@ -885,6 +902,22 @@ test_expect_success 'url parser rejects embedded newlines' '
test_cmp expect stderr
'
+test_expect_success 'url parser rejects embedded carriage returns' '
+ test_config credential.helper "!true" &&
+ test_must_fail git credential fill 2>stderr <<-\EOF &&
+ url=https://example%0d.com/
+ EOF
+ cat >expect <<-\EOF &&
+ fatal: credential value for host contains carriage return
+ If this is intended, set `credential.protectProtocol=false`
+ EOF
+ test_cmp expect stderr &&
+ GIT_ASKPASS=true \
+ git -c credential.protectProtocol=false credential fill <<-\EOF
+ url=https://example%0d.com/
+ EOF
+'
+
test_expect_success 'host-less URLs are parsed as empty host' '
check fill "verbatim foo bar" <<-\EOF
url=cert:///path/to/cert.pem
@@ -994,4 +1027,20 @@ test_expect_success 'credential config with partial URLs' '
test_grep "skipping credential lookup for key" stderr
'
+BEL="$(printf '\007')"
+
+test_expect_success 'interactive prompt is sanitized' '
+ check fill cntrl-in-username <<-EOF
+ protocol=https
+ host=example.org
+ --
+ protocol=https
+ host=example.org
+ username=${BEL}latrix Lestrange
+ password=askpass-password
+ --
+ askpass: Password for ${SQ}https://%07latrix%20Lestrange@example.org${SQ}:
+ EOF
+'
+
test_done
diff --git a/t/t1006-cat-file.sh b/t/t1006-cat-file.sh
index ff9bf213aa..398865d6eb 100755
--- a/t/t1006-cat-file.sh
+++ b/t/t1006-cat-file.sh
@@ -240,7 +240,8 @@ test_expect_success "setup" '
git config extensions.objectformat $test_hash_algo &&
git config extensions.compatobjectformat $test_compat_hash_algo &&
echo_without_newline "$hello_content" > hello &&
- git update-index --add hello
+ git update-index --add hello &&
+ git commit -m "add hello file"
'
run_blob_tests () {
@@ -602,6 +603,34 @@ test_expect_success FUNNYNAMES '--batch-check, -Z with newline in input' '
test_cmp expect actual
'
+test_expect_success 'setup with curly braches in input' '
+ git branch "foo{bar" HEAD &&
+ git branch "foo@" HEAD
+'
+
+test_expect_success 'object reference with curly brace' '
+ git cat-file -p "foo{bar:hello" >actual &&
+ git cat-file -p HEAD:hello >expect &&
+ test_cmp expect actual
+'
+
+test_expect_success 'object reference with at-sign' '
+ git cat-file -p "foo@@{0}:hello" >actual &&
+ git cat-file -p HEAD:hello >expect &&
+ test_cmp expect actual
+'
+
+test_expect_success 'setup with commit with colon' '
+ git commit-tree -m "testing: just a bunch of junk" HEAD^{tree} >out &&
+ git branch other $(cat out)
+'
+
+test_expect_success 'object reference via commit text search' '
+ git cat-file -p "other^{/testing:}:hello" >actual &&
+ git cat-file -p HEAD:hello >expect &&
+ test_cmp expect actual
+'
+
test_expect_success 'setup blobs which are likely to delta' '
test-tool genrandom foo 10240 >foo &&
{ cat foo && echo plus; } >foo-plus &&
diff --git a/t/t1400-update-ref.sh b/t/t1400-update-ref.sh
index e2316f1dd4..29045aad43 100755
--- a/t/t1400-update-ref.sh
+++ b/t/t1400-update-ref.sh
@@ -2068,4 +2068,13 @@ do
done
+test_expect_success 'update-ref should also create reflog for HEAD' '
+ test_commit to-rewind &&
+ git rev-parse HEAD >expect &&
+ head=$(git symbolic-ref HEAD) &&
+ git update-ref --create-reflog "$head" HEAD~ &&
+ git rev-parse HEAD@{1} >actual &&
+ test_cmp expect actual
+'
+
test_done
diff --git a/t/t1460-refs-migrate.sh b/t/t1460-refs-migrate.sh
index f59bc4860f..ceb0c4977d 100755
--- a/t/t1460-refs-migrate.sh
+++ b/t/t1460-refs-migrate.sh
@@ -224,6 +224,23 @@ do
test_commit --date "100003000 +0700" --no-tag -C repo second &&
test_migration repo "$to_format"
'
+
+ test_expect_success "$from_format -> $to_format: stash is retained" '
+ test_when_finished "rm -rf repo" &&
+ git init --ref-format=$from_format repo &&
+ (
+ cd repo &&
+ test_commit initial A &&
+ echo foo >A &&
+ git stash push &&
+ echo bar >A &&
+ git stash push &&
+ git stash list >expect.reflog &&
+ test_migration . "$to_format" &&
+ git stash list >actual.reflog &&
+ test_cmp expect.reflog actual.reflog
+ )
+ '
done
done
diff --git a/t/t3203-branch-output.sh b/t/t3203-branch-output.sh
index 500c9d0e72..a6bd88a58d 100755
--- a/t/t3203-branch-output.sh
+++ b/t/t3203-branch-output.sh
@@ -368,6 +368,34 @@ test_expect_success 'git branch --format with ahead-behind' '
test_cmp expect actual
'
+test_expect_success 'git branch `--sort=[-]ahead-behind` option' '
+ cat >expect <<-\EOF &&
+ (HEAD detached from fromtag) 0 0
+ refs/heads/ambiguous 0 0
+ refs/heads/branch-two 0 0
+ refs/heads/branch-one 1 0
+ refs/heads/main 1 0
+ refs/heads/ref-to-branch 1 0
+ refs/heads/ref-to-remote 1 0
+ EOF
+ git branch --format="%(refname) %(ahead-behind:HEAD)" \
+ --sort=refname --sort=ahead-behind:HEAD >actual &&
+ test_cmp expect actual &&
+
+ cat >expect <<-\EOF &&
+ (HEAD detached from fromtag) 0 0
+ refs/heads/branch-one 1 0
+ refs/heads/main 1 0
+ refs/heads/ref-to-branch 1 0
+ refs/heads/ref-to-remote 1 0
+ refs/heads/ambiguous 0 0
+ refs/heads/branch-two 0 0
+ EOF
+ git branch --format="%(refname) %(ahead-behind:HEAD)" \
+ --sort=refname --sort=-ahead-behind:HEAD >actual &&
+ test_cmp expect actual
+'
+
test_expect_success 'git branch with --format=%(rest) must fail' '
test_must_fail git branch --format="%(rest)" >actual
'
diff --git a/t/t5504-fetch-receive-strict.sh b/t/t5504-fetch-receive-strict.sh
index 8212a70be8..e273ab29c7 100755
--- a/t/t5504-fetch-receive-strict.sh
+++ b/t/t5504-fetch-receive-strict.sh
@@ -167,6 +167,8 @@ test_expect_success 'fsck with unsorted skipList' '
test_expect_success 'fsck with invalid or bogus skipList input' '
git -c fsck.skipList=/dev/null -c fsck.missingEmail=ignore fsck &&
+ test_must_fail git -c fsck.skipList -c fsck.missingEmail=ignore fsck 2>err &&
+ test_grep "unable to parse '\'fsck.skiplist\'' from command-line config" err &&
test_must_fail git -c fsck.skipList=does-not-exist -c fsck.missingEmail=ignore fsck 2>err &&
test_grep "could not open.*: does-not-exist" err &&
test_must_fail git -c fsck.skipList=.git/config -c fsck.missingEmail=ignore fsck 2>err &&
@@ -213,6 +215,11 @@ test_expect_success 'fsck with exhaustive accepted skipList input (various types
test_must_be_empty err
'
+test_expect_success 'receive-pack with missing receive.fsck.skipList path' '
+ test_must_fail git -c receive.fsck.skipList receive-pack dst 2>err &&
+ test_grep "unable to parse '\'receive.fsck.skiplist\'' from command-line config" err
+'
+
test_expect_success 'push with receive.fsck.skipList' '
git push . $commit:refs/heads/bogus &&
rm -rf dst &&
@@ -255,6 +262,9 @@ test_expect_success 'fetch with fetch.fsck.skipList' '
test_must_fail git --git-dir=dst/.git fetch "file://$(pwd)" $refspec &&
# Invalid and/or bogus skipList input
+ test_must_fail git --git-dir=dst/.git -c fetch.fsck.skipList fetch \
+ "file://$(pwd)" $refspec 2>err &&
+ test_grep "unable to parse '\'fetch.fsck.skiplist\'' from command-line config" err &&
git --git-dir=dst/.git config fetch.fsck.skipList /dev/null &&
test_must_fail git --git-dir=dst/.git fetch "file://$(pwd)" $refspec &&
git --git-dir=dst/.git config fetch.fsck.skipList does-not-exist &&
diff --git a/t/t5541-http-push-smart.sh b/t/t5541-http-push-smart.sh
index 71428f3d5c..538b603f03 100755
--- a/t/t5541-http-push-smart.sh
+++ b/t/t5541-http-push-smart.sh
@@ -343,7 +343,7 @@ test_expect_success 'push over smart http with auth' '
git push "$HTTPD_URL"/auth/smart/test_repo.git &&
git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/test_repo.git" \
log -1 --format=%s >actual &&
- expect_askpass both user@host &&
+ expect_askpass both user%40host &&
test_cmp expect actual
'
@@ -355,7 +355,7 @@ test_expect_success 'push to auth-only-for-push repo' '
git push "$HTTPD_URL"/auth-push/smart/test_repo.git &&
git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/test_repo.git" \
log -1 --format=%s >actual &&
- expect_askpass both user@host &&
+ expect_askpass both user%40host &&
test_cmp expect actual
'
@@ -385,7 +385,7 @@ test_expect_success 'push into half-auth-complete requires password' '
git push "$HTTPD_URL/half-auth-complete/smart/half-auth.git" &&
git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/half-auth.git" \
log -1 --format=%s >actual &&
- expect_askpass both user@host &&
+ expect_askpass both user%40host &&
test_cmp expect actual
'
diff --git a/t/t5550-http-fetch-dumb.sh b/t/t5550-http-fetch-dumb.sh
index 21795a19bf..ed0ad66fad 100755
--- a/t/t5550-http-fetch-dumb.sh
+++ b/t/t5550-http-fetch-dumb.sh
@@ -111,13 +111,13 @@ test_expect_success 'http auth can use user/pass in URL' '
test_expect_success 'http auth can use just user in URL' '
set_askpass wrong pass@host &&
git clone "$HTTPD_URL_USER/auth/dumb/repo.git" clone-auth-pass &&
- expect_askpass pass user@host
+ expect_askpass pass user%40host
'
test_expect_success 'http auth can request both user and pass' '
set_askpass user@host pass@host &&
git clone "$HTTPD_URL/auth/dumb/repo.git" clone-auth-both &&
- expect_askpass both user@host
+ expect_askpass both user%40host
'
test_expect_success 'http auth respects credential helper config' '
@@ -135,14 +135,14 @@ test_expect_success 'http auth can get username from config' '
test_config_global "credential.$HTTPD_URL.username" user@host &&
set_askpass wrong pass@host &&
git clone "$HTTPD_URL/auth/dumb/repo.git" clone-auth-user &&
- expect_askpass pass user@host
+ expect_askpass pass user%40host
'
test_expect_success 'configured username does not override URL' '
test_config_global "credential.$HTTPD_URL.username" wrong &&
set_askpass wrong pass@host &&
git clone "$HTTPD_URL_USER/auth/dumb/repo.git" clone-auth-user2 &&
- expect_askpass pass user@host
+ expect_askpass pass user%40host
'
test_expect_success 'set up repo with http submodules' '
@@ -163,7 +163,7 @@ test_expect_success 'cmdline credential config passes to submodule via clone' '
set_askpass wrong pass@host &&
git -c "credential.$HTTPD_URL.username=user@host" \
clone --recursive super super-clone &&
- expect_askpass pass user@host
+ expect_askpass pass user%40host
'
test_expect_success 'cmdline credential config passes submodule via fetch' '
@@ -174,7 +174,7 @@ test_expect_success 'cmdline credential config passes submodule via fetch' '
git -C super-clone \
-c "credential.$HTTPD_URL.username=user@host" \
fetch --recurse-submodules &&
- expect_askpass pass user@host
+ expect_askpass pass user%40host
'
test_expect_success 'cmdline credential config passes submodule update' '
@@ -191,7 +191,7 @@ test_expect_success 'cmdline credential config passes submodule update' '
git -C super-clone \
-c "credential.$HTTPD_URL.username=user@host" \
submodule update &&
- expect_askpass pass user@host
+ expect_askpass pass user%40host
'
test_expect_success 'fetch changes via http' '
diff --git a/t/t5551-http-fetch-smart.sh b/t/t5551-http-fetch-smart.sh
index ceb3336a5c..761fdfcfe6 100755
--- a/t/t5551-http-fetch-smart.sh
+++ b/t/t5551-http-fetch-smart.sh
@@ -181,7 +181,7 @@ test_expect_success 'clone from password-protected repository' '
echo two >expect &&
set_askpass user@host pass@host &&
git clone --bare "$HTTPD_URL/auth/smart/repo.git" smart-auth &&
- expect_askpass both user@host &&
+ expect_askpass both user%40host &&
git --git-dir=smart-auth log -1 --format=%s >actual &&
test_cmp expect actual
'
@@ -221,7 +221,7 @@ test_expect_success 'clone from auth-only-for-objects repository' '
echo two >expect &&
set_askpass user@host pass@host &&
git clone --bare "$HTTPD_URL/auth-fetch/smart/repo.git" half-auth &&
- expect_askpass both user@host &&
+ expect_askpass both user%40host &&
git --git-dir=half-auth log -1 --format=%s >actual &&
test_cmp expect actual
'
@@ -246,14 +246,14 @@ test_expect_success 'redirects send auth to new location' '
set_askpass user@host pass@host &&
git -c credential.useHttpPath=true \
clone $HTTPD_URL/smart-redir-auth/repo.git repo-redir-auth &&
- expect_askpass both user@host auth/smart/repo.git
+ expect_askpass both user%40host auth/smart/repo.git
'
test_expect_success 'GIT_TRACE_CURL redacts auth details' '
rm -rf redact-auth trace &&
set_askpass user@host pass@host &&
GIT_TRACE_CURL="$(pwd)/trace" git clone --bare "$HTTPD_URL/auth/smart/repo.git" redact-auth &&
- expect_askpass both user@host &&
+ expect_askpass both user%40host &&
# Ensure that there is no "Basic" followed by a base64 string, but that
# the auth details are redacted
@@ -265,7 +265,7 @@ test_expect_success 'GIT_CURL_VERBOSE redacts auth details' '
rm -rf redact-auth trace &&
set_askpass user@host pass@host &&
GIT_CURL_VERBOSE=1 git clone --bare "$HTTPD_URL/auth/smart/repo.git" redact-auth 2>trace &&
- expect_askpass both user@host &&
+ expect_askpass both user%40host &&
# Ensure that there is no "Basic" followed by a base64 string, but that
# the auth details are redacted
@@ -278,7 +278,7 @@ test_expect_success 'GIT_TRACE_CURL does not redact auth details if GIT_TRACE_RE
set_askpass user@host pass@host &&
GIT_TRACE_REDACT=0 GIT_TRACE_CURL="$(pwd)/trace" \
git clone --bare "$HTTPD_URL/auth/smart/repo.git" redact-auth &&
- expect_askpass both user@host &&
+ expect_askpass both user%40host &&
grep -i "Authorization: Basic [0-9a-zA-Z+/]" trace
'
@@ -592,7 +592,7 @@ test_expect_success 'http auth remembers successful credentials' '
# the first request prompts the user...
set_askpass user@host pass@host &&
git ls-remote "$HTTPD_URL/auth/smart/repo.git" >/dev/null &&
- expect_askpass both user@host &&
+ expect_askpass both user%40host &&
# ...and the second one uses the stored value rather than
# prompting the user.
@@ -623,7 +623,7 @@ test_expect_success 'http auth forgets bogus credentials' '
# us to prompt the user again.
set_askpass user@host pass@host &&
git ls-remote "$HTTPD_URL/auth/smart/repo.git" >/dev/null &&
- expect_askpass both user@host
+ expect_askpass both user%40host
'
test_expect_success 'client falls back from v2 to v0 to match server' '
diff --git a/t/t6120-describe.sh b/t/t6120-describe.sh
index 3f6160d702..76843a6169 100755
--- a/t/t6120-describe.sh
+++ b/t/t6120-describe.sh
@@ -82,11 +82,13 @@ check_describe R-2-gHASH HEAD^^
check_describe A-3-gHASH HEAD^^2
check_describe B HEAD^^2^
check_describe R-1-gHASH HEAD^^^
+check_describe R-1-gHASH R-1-g$(git rev-parse --short HEAD^^)~1
check_describe c-7-gHASH --tags HEAD
check_describe c-6-gHASH --tags HEAD^
check_describe e-1-gHASH --tags HEAD^^
check_describe c-2-gHASH --tags HEAD^^2
+check_describe c-2-gHASH --tags c-2-g$(git rev-parse --short HEAD^^2)^0
check_describe B --tags HEAD^^2^
check_describe e --tags HEAD^^^
check_describe e --tags --exact-match HEAD^^^
@@ -725,4 +727,26 @@ test_expect_success '--exact-match does not show --always fallback' '
test_must_fail git describe --exact-match --always
'
+test_expect_success 'avoid being fooled by describe-like filename' '
+ test_when_finished rm out &&
+
+ git rev-parse --short HEAD >out &&
+ FILENAME=filename-g$(cat out) &&
+ touch $FILENAME &&
+ git add $FILENAME &&
+ git commit -m "Add $FILENAME" &&
+
+ git cat-file -t HEAD:$FILENAME >actual &&
+
+ echo blob >expect &&
+ test_cmp expect actual
+'
+
+test_expect_success 'do not be fooled by invalid describe format ' '
+ test_when_finished rm out &&
+
+ git rev-parse --short HEAD >out &&
+ test_must_fail git cat-file -t "refs/tags/super-invalid/./../...../ ~^:/?*[////\\\\\\&}/busted.lock-42-g"$(cat out)
+'
+
test_done
diff --git a/t/t6600-test-reach.sh b/t/t6600-test-reach.sh
index 2591f8b8b3..6638d1aa1d 100755
--- a/t/t6600-test-reach.sh
+++ b/t/t6600-test-reach.sh
@@ -733,4 +733,33 @@ test_expect_success 'for-each-ref is-base:multiple' '
--format="%(refname)[%(is-base:commit-2-3)-%(is-base:commit-6-5)]" --stdin
'
+test_expect_success 'for-each-ref is-base: --sort' '
+ cat >input <<-\EOF &&
+ refs/heads/commit-1-1
+ refs/heads/commit-4-2
+ refs/heads/commit-4-4
+ refs/heads/commit-8-4
+ EOF
+
+ cat >expect <<-\EOF &&
+ refs/heads/commit-1-1
+ refs/heads/commit-4-4
+ refs/heads/commit-8-4
+ refs/heads/commit-4-2
+ EOF
+ run_all_modes git for-each-ref \
+ --format="%(refname)" --stdin \
+ --sort=refname --sort=is-base:commit-2-3 &&
+
+ cat >expect <<-\EOF &&
+ refs/heads/commit-4-2
+ refs/heads/commit-1-1
+ refs/heads/commit-4-4
+ refs/heads/commit-8-4
+ EOF
+ run_all_modes git for-each-ref \
+ --format="%(refname)" --stdin \
+ --sort=refname --sort=-is-base:commit-2-3
+'
+
test_done
diff --git a/t/t6601-path-walk.sh b/t/t6601-path-walk.sh
new file mode 100755
index 0000000000..5f04acb8a2
--- /dev/null
+++ b/t/t6601-path-walk.sh
@@ -0,0 +1,368 @@
+#!/bin/sh
+
+TEST_PASSES_SANITIZE_LEAK=true
+
+test_description='direct path-walk API tests'
+
+. ./test-lib.sh
+
+test_expect_success 'setup test repository' '
+ git checkout -b base &&
+
+ # Make some objects that will only be reachable
+ # via non-commit tags.
+ mkdir child &&
+ echo file >child/file &&
+ git add child &&
+ git commit -m "will abandon" &&
+ git tag -a -m "tree" tree-tag HEAD^{tree} &&
+ echo file2 >file2 &&
+ git add file2 &&
+ git commit --amend -m "will abandon" &&
+ git tag tree-tag2 HEAD^{tree} &&
+
+ echo blob >file &&
+ blob_oid=$(git hash-object -t blob -w --stdin <file) &&
+ git tag -a -m "blob" blob-tag "$blob_oid" &&
+ echo blob2 >file2 &&
+ blob2_oid=$(git hash-object -t blob -w --stdin <file2) &&
+ git tag blob-tag2 "$blob2_oid" &&
+
+ rm -fr child file file2 &&
+
+ mkdir left &&
+ mkdir right &&
+ echo a >a &&
+ echo b >left/b &&
+ echo c >right/c &&
+ git add . &&
+ git commit --amend -m "first" &&
+ git tag -m "first" first HEAD &&
+
+ echo d >right/d &&
+ git add right &&
+ git commit -m "second" &&
+ git tag -a -m "second (under)" second.1 HEAD &&
+ git tag -a -m "second (top)" second.2 second.1 &&
+
+ # Set up file/dir collision in history.
+ rm a &&
+ mkdir a &&
+ echo a >a/a &&
+ echo bb >left/b &&
+ git add a left &&
+ git commit -m "third" &&
+ git tag -a -m "third" third &&
+
+ git checkout -b topic HEAD~1 &&
+ echo cc >right/c &&
+ git commit -a -m "topic" &&
+ git tag -a -m "fourth" fourth
+'
+
+test_expect_success 'all' '
+ test-tool path-walk -- --all >out &&
+
+ cat >expect <<-EOF &&
+ 0:commit::$(git rev-parse topic)
+ 0:commit::$(git rev-parse base)
+ 0:commit::$(git rev-parse base~1)
+ 0:commit::$(git rev-parse base~2)
+ 1:tag:/tags:$(git rev-parse refs/tags/first)
+ 1:tag:/tags:$(git rev-parse refs/tags/second.1)
+ 1:tag:/tags:$(git rev-parse refs/tags/second.2)
+ 1:tag:/tags:$(git rev-parse refs/tags/third)
+ 1:tag:/tags:$(git rev-parse refs/tags/fourth)
+ 1:tag:/tags:$(git rev-parse refs/tags/tree-tag)
+ 1:tag:/tags:$(git rev-parse refs/tags/blob-tag)
+ 2:blob:/tagged-blobs:$(git rev-parse refs/tags/blob-tag^{})
+ 2:blob:/tagged-blobs:$(git rev-parse refs/tags/blob-tag2^{})
+ 3:tree::$(git rev-parse topic^{tree})
+ 3:tree::$(git rev-parse base^{tree})
+ 3:tree::$(git rev-parse base~1^{tree})
+ 3:tree::$(git rev-parse base~2^{tree})
+ 3:tree::$(git rev-parse refs/tags/tree-tag^{})
+ 3:tree::$(git rev-parse refs/tags/tree-tag2^{})
+ 4:blob:a:$(git rev-parse base~2:a)
+ 5:blob:file2:$(git rev-parse refs/tags/tree-tag2^{}:file2)
+ 6:tree:a/:$(git rev-parse base:a)
+ 7:tree:child/:$(git rev-parse refs/tags/tree-tag:child)
+ 8:blob:child/file:$(git rev-parse refs/tags/tree-tag:child/file)
+ 9:tree:left/:$(git rev-parse base:left)
+ 9:tree:left/:$(git rev-parse base~2:left)
+ 10:blob:left/b:$(git rev-parse base~2:left/b)
+ 10:blob:left/b:$(git rev-parse base:left/b)
+ 11:tree:right/:$(git rev-parse topic:right)
+ 11:tree:right/:$(git rev-parse base~1:right)
+ 11:tree:right/:$(git rev-parse base~2:right)
+ 12:blob:right/c:$(git rev-parse base~2:right/c)
+ 12:blob:right/c:$(git rev-parse topic:right/c)
+ 13:blob:right/d:$(git rev-parse base~1:right/d)
+ blobs:10
+ commits:4
+ tags:7
+ trees:13
+ EOF
+
+ test_cmp_sorted expect out
+'
+
+test_expect_success 'indexed objects' '
+ test_when_finished git reset --hard &&
+
+ # stage change into index, adding a blob but
+ # also invalidating the cache-tree for the root
+ # and the "left" directory.
+ echo bogus >left/c &&
+ git add left &&
+
+ test-tool path-walk -- --indexed-objects >out &&
+
+ cat >expect <<-EOF &&
+ 0:blob:a:$(git rev-parse HEAD:a)
+ 1:blob:left/b:$(git rev-parse HEAD:left/b)
+ 2:blob:left/c:$(git rev-parse :left/c)
+ 3:blob:right/c:$(git rev-parse HEAD:right/c)
+ 4:blob:right/d:$(git rev-parse HEAD:right/d)
+ 5:tree:right/:$(git rev-parse topic:right)
+ blobs:5
+ commits:0
+ tags:0
+ trees:1
+ EOF
+
+ test_cmp_sorted expect out
+'
+
+test_expect_success 'branches and indexed objects mix well' '
+ test_when_finished git reset --hard &&
+
+ # stage change into index, adding a blob but
+ # also invalidating the cache-tree for the root
+ # and the "right" directory.
+ echo fake >right/d &&
+ git add right &&
+
+ test-tool path-walk -- --indexed-objects --branches >out &&
+
+ cat >expect <<-EOF &&
+ 0:commit::$(git rev-parse topic)
+ 0:commit::$(git rev-parse base)
+ 0:commit::$(git rev-parse base~1)
+ 0:commit::$(git rev-parse base~2)
+ 1:tree::$(git rev-parse topic^{tree})
+ 1:tree::$(git rev-parse base^{tree})
+ 1:tree::$(git rev-parse base~1^{tree})
+ 1:tree::$(git rev-parse base~2^{tree})
+ 2:tree:a/:$(git rev-parse refs/tags/third:a)
+ 3:tree:left/:$(git rev-parse base:left)
+ 3:tree:left/:$(git rev-parse base~2:left)
+ 4:blob:left/b:$(git rev-parse base:left/b)
+ 4:blob:left/b:$(git rev-parse base~2:left/b)
+ 5:tree:right/:$(git rev-parse topic:right)
+ 5:tree:right/:$(git rev-parse base~1:right)
+ 5:tree:right/:$(git rev-parse base~2:right)
+ 6:blob:right/c:$(git rev-parse base~2:right/c)
+ 6:blob:right/c:$(git rev-parse topic:right/c)
+ 7:blob:right/d:$(git rev-parse base~1:right/d)
+ 7:blob:right/d:$(git rev-parse :right/d)
+ 8:blob:a:$(git rev-parse base~2:a)
+ blobs:7
+ commits:4
+ tags:0
+ trees:10
+ EOF
+
+ test_cmp_sorted expect out
+'
+
+test_expect_success 'topic only' '
+ test-tool path-walk -- topic >out &&
+
+ cat >expect <<-EOF &&
+ 0:commit::$(git rev-parse topic)
+ 0:commit::$(git rev-parse base~1)
+ 0:commit::$(git rev-parse base~2)
+ 1:tree::$(git rev-parse topic^{tree})
+ 1:tree::$(git rev-parse base~1^{tree})
+ 1:tree::$(git rev-parse base~2^{tree})
+ 2:blob:a:$(git rev-parse base~2:a)
+ 3:tree:left/:$(git rev-parse base~2:left)
+ 4:blob:left/b:$(git rev-parse base~2:left/b)
+ 5:tree:right/:$(git rev-parse topic:right)
+ 5:tree:right/:$(git rev-parse base~1:right)
+ 5:tree:right/:$(git rev-parse base~2:right)
+ 6:blob:right/c:$(git rev-parse base~2:right/c)
+ 6:blob:right/c:$(git rev-parse topic:right/c)
+ 7:blob:right/d:$(git rev-parse base~1:right/d)
+ blobs:5
+ commits:3
+ tags:0
+ trees:7
+ EOF
+
+ test_cmp_sorted expect out
+'
+
+test_expect_success 'topic, not base' '
+ test-tool path-walk -- topic --not base >out &&
+
+ cat >expect <<-EOF &&
+ 0:commit::$(git rev-parse topic)
+ 1:tree::$(git rev-parse topic^{tree})
+ 2:blob:a:$(git rev-parse topic:a):UNINTERESTING
+ 3:tree:left/:$(git rev-parse topic:left):UNINTERESTING
+ 4:blob:left/b:$(git rev-parse topic:left/b):UNINTERESTING
+ 5:tree:right/:$(git rev-parse topic:right)
+ 6:blob:right/c:$(git rev-parse topic:right/c)
+ 7:blob:right/d:$(git rev-parse topic:right/d):UNINTERESTING
+ blobs:4
+ commits:1
+ tags:0
+ trees:3
+ EOF
+
+ test_cmp_sorted expect out
+'
+
+test_expect_success 'fourth, blob-tag2, not base' '
+ test-tool path-walk -- fourth blob-tag2 --not base >out &&
+
+ cat >expect <<-EOF &&
+ 0:commit::$(git rev-parse topic)
+ 1:tag:/tags:$(git rev-parse fourth)
+ 2:blob:/tagged-blobs:$(git rev-parse refs/tags/blob-tag2^{})
+ 3:tree::$(git rev-parse topic^{tree})
+ 4:blob:a:$(git rev-parse base~1:a):UNINTERESTING
+ 5:tree:left/:$(git rev-parse base~1:left):UNINTERESTING
+ 6:blob:left/b:$(git rev-parse base~1:left/b):UNINTERESTING
+ 7:tree:right/:$(git rev-parse topic:right)
+ 8:blob:right/c:$(git rev-parse topic:right/c)
+ 9:blob:right/d:$(git rev-parse base~1:right/d):UNINTERESTING
+ blobs:5
+ commits:1
+ tags:1
+ trees:3
+ EOF
+
+ test_cmp_sorted expect out
+'
+
+test_expect_success 'topic, not base, only blobs' '
+ test-tool path-walk --no-trees --no-commits \
+ -- topic --not base >out &&
+
+ cat >expect <<-EOF &&
+ 0:blob:a:$(git rev-parse topic:a):UNINTERESTING
+ 1:blob:left/b:$(git rev-parse topic:left/b):UNINTERESTING
+ 2:blob:right/c:$(git rev-parse topic:right/c)
+ 3:blob:right/d:$(git rev-parse topic:right/d):UNINTERESTING
+ blobs:4
+ commits:0
+ tags:0
+ trees:0
+ EOF
+
+ test_cmp_sorted expect out
+'
+
+# No, this doesn't make a lot of sense for the path-walk API,
+# but it is possible to do.
+test_expect_success 'topic, not base, only commits' '
+ test-tool path-walk --no-blobs --no-trees \
+ -- topic --not base >out &&
+
+ cat >expect <<-EOF &&
+ 0:commit::$(git rev-parse topic)
+ commits:1
+ blobs:0
+ tags:0
+ trees:0
+ EOF
+
+ test_cmp_sorted expect out
+'
+
+test_expect_success 'topic, not base, only trees' '
+ test-tool path-walk --no-blobs --no-commits \
+ -- topic --not base >out &&
+
+ cat >expect <<-EOF &&
+ 0:tree::$(git rev-parse topic^{tree})
+ 1:tree:left/:$(git rev-parse topic:left):UNINTERESTING
+ 2:tree:right/:$(git rev-parse topic:right)
+ commits:0
+ blobs:0
+ tags:0
+ trees:3
+ EOF
+
+ test_cmp_sorted expect out
+'
+
+test_expect_success 'topic, not base, boundary' '
+ test-tool path-walk -- --boundary topic --not base >out &&
+
+ cat >expect <<-EOF &&
+ 0:commit::$(git rev-parse topic)
+ 0:commit::$(git rev-parse base~1):UNINTERESTING
+ 1:tree::$(git rev-parse topic^{tree})
+ 1:tree::$(git rev-parse base~1^{tree}):UNINTERESTING
+ 2:blob:a:$(git rev-parse base~1:a):UNINTERESTING
+ 3:tree:left/:$(git rev-parse base~1:left):UNINTERESTING
+ 4:blob:left/b:$(git rev-parse base~1:left/b):UNINTERESTING
+ 5:tree:right/:$(git rev-parse topic:right)
+ 5:tree:right/:$(git rev-parse base~1:right):UNINTERESTING
+ 6:blob:right/c:$(git rev-parse base~1:right/c):UNINTERESTING
+ 6:blob:right/c:$(git rev-parse topic:right/c)
+ 7:blob:right/d:$(git rev-parse base~1:right/d):UNINTERESTING
+ blobs:5
+ commits:2
+ tags:0
+ trees:5
+ EOF
+
+ test_cmp_sorted expect out
+'
+
+test_expect_success 'topic, not base, boundary with pruning' '
+ test-tool path-walk --prune -- --boundary topic --not base >out &&
+
+ cat >expect <<-EOF &&
+ 0:commit::$(git rev-parse topic)
+ 0:commit::$(git rev-parse base~1):UNINTERESTING
+ 1:tree::$(git rev-parse topic^{tree})
+ 1:tree::$(git rev-parse base~1^{tree}):UNINTERESTING
+ 2:tree:right/:$(git rev-parse topic:right)
+ 2:tree:right/:$(git rev-parse base~1:right):UNINTERESTING
+ 3:blob:right/c:$(git rev-parse base~1:right/c):UNINTERESTING
+ 3:blob:right/c:$(git rev-parse topic:right/c)
+ blobs:2
+ commits:2
+ tags:0
+ trees:4
+ EOF
+
+ test_cmp_sorted expect out
+'
+
+test_expect_success 'trees are reported exactly once' '
+ test_when_finished "rm -rf unique-trees" &&
+ test_create_repo unique-trees &&
+ (
+ cd unique-trees &&
+ mkdir initial &&
+ test_commit initial/file &&
+ git switch -c move-to-top &&
+ git mv initial/file.t ./ &&
+ test_tick &&
+ git commit -m moved &&
+ git update-ref refs/heads/other HEAD
+ ) &&
+ test-tool -C unique-trees path-walk -- --all >out &&
+ tree=$(git -C unique-trees rev-parse HEAD:) &&
+ grep "$tree" out >out-filtered &&
+ test_line_count = 1 out-filtered
+'
+
+test_done
diff --git a/t/t7110-reset-merge.sh b/t/t7110-reset-merge.sh
index 61669a2d21..9a335071af 100755
--- a/t/t7110-reset-merge.sh
+++ b/t/t7110-reset-merge.sh
@@ -270,13 +270,13 @@ test_expect_success '--merge is ok with added/deleted merge' '
git reset --hard third &&
rm -f file2 &&
test_must_fail git merge branch3 &&
- ! test -f file2 &&
- test -f file3 &&
+ test_path_is_missing file2 &&
+ test_path_is_file file3 &&
git diff --exit-code file3 &&
git diff --exit-code branch3 file3 &&
git reset --merge HEAD &&
- ! test -f file3 &&
- ! test -f file2 &&
+ test_path_is_missing file3 &&
+ test_path_is_missing file2 &&
git diff --exit-code --cached
'
@@ -284,8 +284,8 @@ test_expect_success '--keep fails with added/deleted merge' '
git reset --hard third &&
rm -f file2 &&
test_must_fail git merge branch3 &&
- ! test -f file2 &&
- test -f file3 &&
+ test_path_is_missing file2 &&
+ test_path_is_file file3 &&
git diff --exit-code file3 &&
git diff --exit-code branch3 file3 &&
test_must_fail git reset --keep HEAD 2>err.log &&
diff --git a/t/t7407-submodule-foreach.sh b/t/t7407-submodule-foreach.sh
index 8d7b234beb..77b6d0040e 100755
--- a/t/t7407-submodule-foreach.sh
+++ b/t/t7407-submodule-foreach.sh
@@ -426,14 +426,14 @@ test_expect_success 'option-like arguments passed to foreach commands are not lo
git submodule foreach "echo be --quiet" > ../expected &&
git submodule foreach echo be --quiet > ../actual
) &&
- grep -sq -e "--quiet" expected &&
+ test_grep -e "--quiet" expected &&
test_cmp expected actual
'
test_expect_success 'option-like arguments passed to foreach recurse correctly' '
git -C clone2 submodule foreach --recursive "echo be --an-option" >expect &&
git -C clone2 submodule foreach --recursive echo be --an-option >actual &&
- grep -e "--an-option" expect &&
+ test_grep -e "--an-option" expect &&
test_cmp expect actual
'
diff --git a/t/t7600-merge.sh b/t/t7600-merge.sh
index ef54cff4fa..2a8df29219 100755
--- a/t/t7600-merge.sh
+++ b/t/t7600-merge.sh
@@ -173,7 +173,7 @@ test_expect_success 'merge -h with invalid index' '
cd broken &&
git init &&
>.git/index &&
- test_expect_code 129 git merge -h 2>usage
+ test_expect_code 129 git merge -h >usage
) &&
test_grep "[Uu]sage: git merge" broken/usage
'
diff --git a/t/t8002-blame.sh b/t/t8002-blame.sh
index 0147de304b..e98993276a 100755
--- a/t/t8002-blame.sh
+++ b/t/t8002-blame.sh
@@ -126,6 +126,32 @@ test_expect_success '--no-abbrev works like --abbrev with full length' '
check_abbrev $hexsz --no-abbrev
'
+test_expect_success 'blame --abbrev gets truncated' '
+ check_abbrev $hexsz --abbrev=9000 HEAD
+'
+
+test_expect_success 'blame --abbrev gets truncated with boundary commit' '
+ check_abbrev $hexsz --abbrev=9000 ^HEAD
+'
+
+test_expect_success 'blame --abbrev -b truncates the blank boundary' '
+ # Note that `--abbrev=` always gets incremented by 1, which is why we
+ # expect 11 leading spaces and not 10.
+ cat >expect <<-EOF &&
+ $(printf "%11s" "") (<author@example.com> 2005-04-07 15:45:13 -0700 1) abbrev
+ EOF
+ git blame -b --abbrev=10 ^HEAD -- abbrev.t >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'blame with excessive --abbrev and -b culls to hash length' '
+ cat >expect <<-EOF &&
+ $(printf "%${hexsz}s" "") (<author@example.com> 2005-04-07 15:45:13 -0700 1) abbrev
+ EOF
+ git blame -b --abbrev=9000 ^HEAD -- abbrev.t >actual &&
+ test_cmp expect actual
+'
+
test_expect_success '--exclude-promisor-objects does not BUG-crash' '
test_must_fail git blame --exclude-promisor-objects one
'
diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
index 78e054ab50..14d511f509 100644
--- a/t/test-lib-functions.sh
+++ b/t/test-lib-functions.sh
@@ -927,7 +927,7 @@ test_expect_success () {
test -n "$test_skip_test_preamble" ||
say >&3 "expecting success of $TEST_NUMBER.$test_count '$1': $test_body"
if test_run_ "$test_body" &&
- check_test_results_san_file_empty_
+ ! check_test_results_san_file_has_entries_
then
test_ok_ "$1"
else
@@ -1268,6 +1268,16 @@ test_cmp () {
eval "$GIT_TEST_CMP" '"$@"'
}
+# test_cmp_sorted runs test_cmp on sorted versions of the two
+# input files. Uses "$1.sorted" and "$2.sorted" as temp files.
+
+test_cmp_sorted () {
+ sort <"$1" >"$1.sorted" &&
+ sort <"$2" >"$2.sorted" &&
+ test_cmp "$1.sorted" "$2.sorted" &&
+ rm "$1.sorted" "$2.sorted"
+}
+
# Check that the given config key has the expected value.
#
# test_cmp_config [-C <dir>] <expected-value>
diff --git a/t/test-lib.sh b/t/test-lib.sh
index d1f62adbf8..9f27a49995 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -1169,20 +1169,20 @@ test_atexit_handler () {
teardown_malloc_check
}
-check_test_results_san_file_empty_ () {
- test -z "$TEST_RESULTS_SAN_FILE" && return 0
-
- # stderr piped to /dev/null because the directory may have
- # been "rmdir"'d already.
- ! find "$TEST_RESULTS_SAN_DIR" \
- -type f \
- -name "$TEST_RESULTS_SAN_FILE_PFX.*" 2>/dev/null |
- xargs grep ^DEDUP_TOKEN |
+check_test_results_san_file_has_entries_ () {
+ test -z "$TEST_RESULTS_SAN_FILE" && return 1
+
+ # Lines marked with DEDUP_TOKEN show unique leaks. We only care that we
+ # found at least one.
+ #
+ # But also suppress any false positives caused by bugs or races in the
+ # sanitizer itself.
+ grep -s ^DEDUP_TOKEN "$TEST_RESULTS_SAN_FILE".* |
grep -qv sanitizer::GetThreadStackTopAndBottom
}
check_test_results_san_file_ () {
- if check_test_results_san_file_empty_
+ if ! check_test_results_san_file_has_entries_
then
return
fi &&
diff --git a/t/unit-tests/generate-clar-decls.sh b/t/unit-tests/generate-clar-decls.sh
index 3b315c64b3..abf6a2ea2a 100755
--- a/t/unit-tests/generate-clar-decls.sh
+++ b/t/unit-tests/generate-clar-decls.sh
@@ -14,6 +14,7 @@ do
suite_name=$(basename "$suite")
suite_name=${suite_name%.c}
suite_name=${suite_name#u-}
+ suite_name=$(echo "$suite_name" | tr '-' '_')
sed -ne "s/^\(void test_${suite_name}__[a-zA-Z_0-9][a-zA-Z_0-9]*(void)\)$/extern \1;/p" "$suite" ||
exit 1
done >"$OUTPUT"
diff --git a/t/unit-tests/t-mem-pool.c b/t/unit-tests/t-mem-pool.c
deleted file mode 100644
index fe500c704b..0000000000
--- a/t/unit-tests/t-mem-pool.c
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "test-lib.h"
-#include "mem-pool.h"
-
-static void setup_static(void (*f)(struct mem_pool *), size_t block_alloc)
-{
- struct mem_pool pool = { .block_alloc = block_alloc };
- f(&pool);
- mem_pool_discard(&pool, 0);
-}
-
-static void t_calloc_100(struct mem_pool *pool)
-{
- size_t size = 100;
- char *buffer = mem_pool_calloc(pool, 1, size);
- for (size_t i = 0; i < size; i++)
- check_int(buffer[i], ==, 0);
- if (!check(pool->mp_block != NULL))
- return;
- check(pool->mp_block->next_free != NULL);
- check(pool->mp_block->end != NULL);
-}
-
-int cmd_main(int argc UNUSED, const char **argv UNUSED)
-{
- TEST(setup_static(t_calloc_100, 1024 * 1024),
- "mem_pool_calloc returns 100 zeroed bytes with big block");
- TEST(setup_static(t_calloc_100, 1),
- "mem_pool_calloc returns 100 zeroed bytes with tiny block");
-
- return test_done();
-}
diff --git a/t/unit-tests/t-prio-queue.c b/t/unit-tests/t-prio-queue.c
deleted file mode 100644
index a053635000..0000000000
--- a/t/unit-tests/t-prio-queue.c
+++ /dev/null
@@ -1,91 +0,0 @@
-#include "test-lib.h"
-#include "prio-queue.h"
-
-static int intcmp(const void *va, const void *vb, void *data UNUSED)
-{
- const int *a = va, *b = vb;
- return *a - *b;
-}
-
-
-#define MISSING -1
-#define DUMP -2
-#define STACK -3
-#define GET -4
-#define REVERSE -5
-
-static int show(int *v)
-{
- return v ? *v : MISSING;
-}
-
-static void test_prio_queue(int *input, size_t input_size,
- int *result, size_t result_size)
-{
- struct prio_queue pq = { intcmp };
- int j = 0;
-
- for (size_t i = 0; i < input_size; i++) {
- void *peek, *get;
- switch(input[i]) {
- case GET:
- peek = prio_queue_peek(&pq);
- get = prio_queue_get(&pq);
- if (!check(peek == get))
- return;
- if (!check_uint(j, <, result_size))
- break;
- if (!check_int(result[j], ==, show(get)))
- test_msg(" j: %d", j);
- j++;
- break;
- case DUMP:
- while ((peek = prio_queue_peek(&pq))) {
- get = prio_queue_get(&pq);
- if (!check(peek == get))
- return;
- if (!check_uint(j, <, result_size))
- break;
- if (!check_int(result[j], ==, show(get)))
- test_msg(" j: %d", j);
- j++;
- }
- break;
- case STACK:
- pq.compare = NULL;
- break;
- case REVERSE:
- prio_queue_reverse(&pq);
- break;
- default:
- prio_queue_put(&pq, &input[i]);
- break;
- }
- }
- check_uint(j, ==, result_size);
- clear_prio_queue(&pq);
-}
-
-#define TEST_INPUT(input, result) \
- test_prio_queue(input, ARRAY_SIZE(input), result, ARRAY_SIZE(result))
-
-int cmd_main(int argc UNUSED, const char **argv UNUSED)
-{
- TEST(TEST_INPUT(((int []){ 2, 6, 3, 10, 9, 5, 7, 4, 5, 8, 1, DUMP }),
- ((int []){ 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10 })),
- "prio-queue works for basic input");
- TEST(TEST_INPUT(((int []){ 6, 2, 4, GET, 5, 3, GET, GET, 1, DUMP }),
- ((int []){ 2, 3, 4, 1, 5, 6 })),
- "prio-queue works for mixed put & get commands");
- TEST(TEST_INPUT(((int []){ 1, 2, GET, GET, GET, 1, 2, GET, GET, GET }),
- ((int []){ 1, 2, MISSING, 1, 2, MISSING })),
- "prio-queue works when queue is empty");
- TEST(TEST_INPUT(((int []){ STACK, 8, 1, 5, 4, 6, 2, 3, DUMP }),
- ((int []){ 3, 2, 6, 4, 5, 1, 8 })),
- "prio-queue works when used as a LIFO stack");
- TEST(TEST_INPUT(((int []){ STACK, 1, 2, 3, 4, 5, 6, REVERSE, DUMP }),
- ((int []){ 1, 2, 3, 4, 5, 6 })),
- "prio-queue works when LIFO stack is reversed");
-
- return test_done();
-}
diff --git a/t/unit-tests/t-reftable-basics.c b/t/unit-tests/t-reftable-basics.c
index 990dc1a244..9ba7eb05ad 100644
--- a/t/unit-tests/t-reftable-basics.c
+++ b/t/unit-tests/t-reftable-basics.c
@@ -120,7 +120,7 @@ int cmd_main(int argc UNUSED, const char *argv[] UNUSED)
for (size_t i = 0; i < ARRAY_SIZE(cases); i++) {
check(!reftable_buf_addstr(&a, cases[i].a));
check(!reftable_buf_addstr(&b, cases[i].b));
- check_int(common_prefix_size(&a, &b), ==, cases[i].want);
+ check_uint(common_prefix_size(&a, &b), ==, cases[i].want);
reftable_buf_reset(&a);
reftable_buf_reset(&b);
}
@@ -157,13 +157,13 @@ int cmd_main(int argc UNUSED, const char *argv[] UNUSED)
old_alloc = alloc;
old_arr = arr;
- reftable_set_alloc(malloc, realloc_stub, free);
+ reftable_set_alloc(NULL, realloc_stub, NULL);
check(REFTABLE_ALLOC_GROW(arr, old_alloc + 1, alloc));
check(arr == old_arr);
check_uint(alloc, ==, old_alloc);
old_alloc = alloc;
- reftable_set_alloc(malloc, realloc, free);
+ reftable_set_alloc(NULL, NULL, NULL);
check(!REFTABLE_ALLOC_GROW(arr, old_alloc + 1, alloc));
check(arr != NULL);
check_uint(alloc, >, old_alloc);
@@ -188,11 +188,11 @@ int cmd_main(int argc UNUSED, const char *argv[] UNUSED)
arr[alloc - 1] = 42;
old_alloc = alloc;
- reftable_set_alloc(malloc, realloc_stub, free);
+ reftable_set_alloc(NULL, realloc_stub, NULL);
REFTABLE_ALLOC_GROW_OR_NULL(arr, old_alloc + 1, alloc);
check(arr == NULL);
check_uint(alloc, ==, 0);
- reftable_set_alloc(malloc, realloc, free);
+ reftable_set_alloc(NULL, NULL, NULL);
reftable_free(arr);
}
diff --git a/t/unit-tests/t-reftable-readwrite.c b/t/unit-tests/t-reftable-readwrite.c
index 6b75a419b9..c9626831da 100644
--- a/t/unit-tests/t-reftable-readwrite.c
+++ b/t/unit-tests/t-reftable-readwrite.c
@@ -108,8 +108,8 @@ static void t_log_buffer_size(void)
hash, to ensure that the compressed part is larger than the original.
*/
for (i = 0; i < REFTABLE_HASH_SIZE_SHA1; i++) {
- log.value.update.old_hash[i] = (uint8_t)(git_rand() % 256);
- log.value.update.new_hash[i] = (uint8_t)(git_rand() % 256);
+ log.value.update.old_hash[i] = (uint8_t)(git_rand(0) % 256);
+ log.value.update.new_hash[i] = (uint8_t)(git_rand(0) % 256);
}
reftable_writer_set_limits(w, update_index, update_index);
err = reftable_writer_add_log(w, &log);
@@ -325,7 +325,7 @@ static void t_log_zlib_corruption(void)
};
for (i = 0; i < sizeof(message) - 1; i++)
- message[i] = (uint8_t)(git_rand() % 64 + ' ');
+ message[i] = (uint8_t)(git_rand(0) % 64 + ' ');
reftable_writer_set_limits(w, 1, 1);
@@ -643,7 +643,7 @@ static void t_write_empty_table(void)
check_int(err, ==, REFTABLE_EMPTY_TABLE_ERROR);
reftable_writer_free(w);
- check_int(buf.len, ==, header_size(1) + footer_size(1));
+ check_uint(buf.len, ==, header_size(1) + footer_size(1));
block_source_from_buf(&source, &buf);
diff --git a/t/unit-tests/t-reftable-record.c b/t/unit-tests/t-reftable-record.c
index 42bc64cec8..d49d2a2729 100644
--- a/t/unit-tests/t-reftable-record.c
+++ b/t/unit-tests/t-reftable-record.c
@@ -58,9 +58,25 @@ static void t_varint_roundtrip(void)
}
}
+static void t_varint_overflow(void)
+{
+ unsigned char buf[] = {
+ 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0x00,
+ };
+ struct string_view view = {
+ .buf = buf,
+ .len = sizeof(buf),
+ };
+ uint64_t value;
+ int err = get_var_int(&value, &view);
+ check_int(err, ==, -1);
+}
+
static void set_hash(uint8_t *h, int j)
{
- for (int i = 0; i < hash_size(REFTABLE_HASH_SHA1); i++)
+ for (size_t i = 0; i < hash_size(REFTABLE_HASH_SHA1); i++)
h[i] = (j >> i) & 0xff;
}
@@ -544,6 +560,7 @@ int cmd_main(int argc UNUSED, const char *argv[] UNUSED)
TEST(t_reftable_log_record_roundtrip(), "record operations work on log record");
TEST(t_reftable_ref_record_roundtrip(), "record operations work on ref record");
TEST(t_varint_roundtrip(), "put_var_int and get_var_int work");
+ TEST(t_varint_overflow(), "get_var_int notices an integer overflow");
TEST(t_key_roundtrip(), "reftable_encode_key and reftable_decode_key work");
TEST(t_reftable_obj_record_roundtrip(), "record operations work on obj record");
TEST(t_reftable_index_record_roundtrip(), "record operations work on index record");
diff --git a/t/unit-tests/t-hash.c b/t/unit-tests/u-hash.c
index e62647019b..a0320efe4b 100644
--- a/t/unit-tests/t-hash.c
+++ b/t/unit-tests/u-hash.c
@@ -1,14 +1,11 @@
-#include "test-lib.h"
+#include "unit-test.h"
#include "hex.h"
#include "strbuf.h"
static void check_hash_data(const void *data, size_t data_length,
const char *expected_hashes[])
{
- if (!check(data != NULL)) {
- test_msg("BUG: NULL data pointer provided");
- return;
- }
+ cl_assert(data != NULL);
for (size_t i = 1; i < ARRAY_SIZE(hash_algos); i++) {
git_hash_ctx ctx;
@@ -19,66 +16,94 @@ static void check_hash_data(const void *data, size_t data_length,
algop->update_fn(&ctx, data, data_length);
algop->final_fn(hash, &ctx);
- if (!check_str(hash_to_hex_algop(hash, algop), expected_hashes[i - 1]))
- test_msg("result does not match with the expected for %s\n", hash_algos[i].name);
+ cl_assert_equal_s(hash_to_hex_algop(hash,algop), expected_hashes[i - 1]);
}
}
/* Works with a NUL terminated string. Doesn't work if it should contain a NUL character. */
#define TEST_HASH_STR(data, expected_sha1, expected_sha256) do { \
const char *expected_hashes[] = { expected_sha1, expected_sha256 }; \
- TEST(check_hash_data(data, strlen(data), expected_hashes), \
- "SHA1 and SHA256 (%s) works", #data); \
+ check_hash_data(data, strlen(data), expected_hashes); \
} while (0)
/* Only works with a literal string, useful when it contains a NUL character. */
#define TEST_HASH_LITERAL(literal, expected_sha1, expected_sha256) do { \
const char *expected_hashes[] = { expected_sha1, expected_sha256 }; \
- TEST(check_hash_data(literal, (sizeof(literal) - 1), expected_hashes), \
- "SHA1 and SHA256 (%s) works", #literal); \
+ check_hash_data(literal, (sizeof(literal) - 1), expected_hashes); \
} while (0)
-int cmd_main(int argc UNUSED, const char **argv UNUSED)
+void test_hash__empty_string(void)
{
- struct strbuf aaaaaaaaaa_100000 = STRBUF_INIT;
- struct strbuf alphabet_100000 = STRBUF_INIT;
-
- strbuf_addstrings(&aaaaaaaaaa_100000, "aaaaaaaaaa", 100000);
- strbuf_addstrings(&alphabet_100000, "abcdefghijklmnopqrstuvwxyz", 100000);
-
TEST_HASH_STR("",
"da39a3ee5e6b4b0d3255bfef95601890afd80709",
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
+}
+
+void test_hash__single_character(void)
+{
TEST_HASH_STR("a",
"86f7e437faa5a7fce15d1ddcb9eaeaea377667b8",
"ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb");
+}
+
+void test_hash__multi_character(void)
+{
TEST_HASH_STR("abc",
"a9993e364706816aba3e25717850c26c9cd0d89d",
"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad");
+}
+
+void test_hash__message_digest(void)
+{
TEST_HASH_STR("message digest",
"c12252ceda8be8994d5fa0290a47231c1d16aae3",
"f7846f55cf23e14eebeab5b4e1550cad5b509e3348fbc4efa3a1413d393cb650");
+}
+
+void test_hash__alphabet(void)
+{
TEST_HASH_STR("abcdefghijklmnopqrstuvwxyz",
"32d10c7b8cf96570ca04ce37f2a19d84240d3a89",
"71c480df93d6ae2f1efad1447c66c9525e316218cf51fc8d9ed832f2daf18b73");
+}
+
+void test_hash__aaaaaaaaaa_100000(void)
+{
+ struct strbuf aaaaaaaaaa_100000 = STRBUF_INIT;
+ strbuf_addstrings(&aaaaaaaaaa_100000, "aaaaaaaaaa", 100000);
TEST_HASH_STR(aaaaaaaaaa_100000.buf,
"34aa973cd4c4daa4f61eeb2bdbad27316534016f",
"cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0");
+ strbuf_release(&aaaaaaaaaa_100000);
+}
+
+void test_hash__alphabet_100000(void)
+{
+ struct strbuf alphabet_100000 = STRBUF_INIT;
+ strbuf_addstrings(&alphabet_100000, "abcdefghijklmnopqrstuvwxyz", 100000);
TEST_HASH_STR(alphabet_100000.buf,
"e7da7c55b3484fdf52aebec9cbe7b85a98f02fd4",
"e406ba321ca712ad35a698bf0af8d61fc4dc40eca6bdcea4697962724ccbde35");
+ strbuf_release(&alphabet_100000);
+}
+
+void test_hash__zero_blob_literal(void)
+{
TEST_HASH_LITERAL("blob 0\0",
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
"473a0f4c3be8a93681a267e3b1e9a7dcda1185436fe141f7749120a303721813");
+}
+
+void test_hash__three_blob_literal(void)
+{
TEST_HASH_LITERAL("blob 3\0abc",
"f2ba8f84ab5c1bce84a7b441cb1959cfc7093b7f",
"c1cf6e465077930e88dc5136641d402f72a229ddd996f627d60e9639eaba35a6");
+}
+
+void test_hash__zero_tree_literal(void)
+{
TEST_HASH_LITERAL("tree 0\0",
"4b825dc642cb6eb9a060e54bf8d69288fbee4904",
"6ef19b41225c5369f1c104d45d8d85efa9b057b53b14b4b9b939dd74decc5321");
-
- strbuf_release(&aaaaaaaaaa_100000);
- strbuf_release(&alphabet_100000);
-
- return test_done();
}
diff --git a/t/unit-tests/u-mem-pool.c b/t/unit-tests/u-mem-pool.c
new file mode 100644
index 0000000000..2bc2493b7e
--- /dev/null
+++ b/t/unit-tests/u-mem-pool.c
@@ -0,0 +1,25 @@
+#include "unit-test.h"
+#include "mem-pool.h"
+
+static void test_many_pool_allocations(size_t block_alloc)
+{
+ struct mem_pool pool = { .block_alloc = block_alloc };
+ size_t size = 100;
+ char *buffer = mem_pool_calloc(&pool, 1, size);
+ for (size_t i = 0; i < size; i++)
+ cl_assert_equal_i(0, buffer[i]);
+ cl_assert(pool.mp_block != NULL);
+ cl_assert(pool.mp_block->next_free != NULL);
+ cl_assert(pool.mp_block->end != NULL);
+ mem_pool_discard(&pool, 0);
+}
+
+void test_mem_pool__big_block(void)
+{
+ test_many_pool_allocations(1024 * 1024);
+}
+
+void test_mem_pool__tiny_block(void)
+{
+ test_many_pool_allocations(1);
+}
diff --git a/t/unit-tests/u-prio-queue.c b/t/unit-tests/u-prio-queue.c
new file mode 100644
index 0000000000..145e689c9c
--- /dev/null
+++ b/t/unit-tests/u-prio-queue.c
@@ -0,0 +1,94 @@
+#include "unit-test.h"
+#include "prio-queue.h"
+
+static int intcmp(const void *va, const void *vb, void *data UNUSED)
+{
+ const int *a = va, *b = vb;
+ return *a - *b;
+}
+
+
+#define MISSING -1
+#define DUMP -2
+#define STACK -3
+#define GET -4
+#define REVERSE -5
+
+static int show(int *v)
+{
+ return v ? *v : MISSING;
+}
+
+static void test_prio_queue(int *input, size_t input_size,
+ int *result, size_t result_size)
+{
+ struct prio_queue pq = { intcmp };
+ size_t j = 0;
+
+ for (size_t i = 0; i < input_size; i++) {
+ void *peek, *get;
+ switch(input[i]) {
+ case GET:
+ peek = prio_queue_peek(&pq);
+ get = prio_queue_get(&pq);
+ cl_assert(peek == get);
+ cl_assert(j < result_size);
+ cl_assert_equal_i(result[j], show(get));
+ j++;
+ break;
+ case DUMP:
+ while ((peek = prio_queue_peek(&pq))) {
+ get = prio_queue_get(&pq);
+ cl_assert(peek == get);
+ cl_assert(j < result_size);
+ cl_assert_equal_i(result[j], show(get));
+ j++;
+ }
+ break;
+ case STACK:
+ pq.compare = NULL;
+ break;
+ case REVERSE:
+ prio_queue_reverse(&pq);
+ break;
+ default:
+ prio_queue_put(&pq, &input[i]);
+ break;
+ }
+ }
+ cl_assert_equal_i(j, result_size);
+ clear_prio_queue(&pq);
+}
+
+#define TEST_INPUT(input, result) \
+ test_prio_queue(input, ARRAY_SIZE(input), result, ARRAY_SIZE(result))
+
+void test_prio_queue__basic(void)
+{
+ TEST_INPUT(((int []){ 2, 6, 3, 10, 9, 5, 7, 4, 5, 8, 1, DUMP }),
+ ((int []){ 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10 }));
+}
+
+void test_prio_queue__mixed(void)
+{
+ TEST_INPUT(((int []){ 6, 2, 4, GET, 5, 3, GET, GET, 1, DUMP }),
+ ((int []){ 2, 3, 4, 1, 5, 6 }));
+}
+
+void test_prio_queue__empty(void)
+{
+ TEST_INPUT(((int []){ 1, 2, GET, GET, GET, 1, 2, GET, GET, GET }),
+ ((int []){ 1, 2, MISSING, 1, 2, MISSING }));
+}
+
+void test_prio_queue__stack(void)
+{
+ TEST_INPUT(((int []){ STACK, 8, 1, 5, 4, 6, 2, 3, DUMP }),
+ ((int []){ 3, 2, 6, 4, 5, 1, 8 }));
+}
+
+void test_prio_queue__reverse_stack(void)
+{
+ TEST_INPUT(((int []){ STACK, 1, 2, 3, 4, 5, 6, REVERSE, DUMP }),
+ ((int []){ 1, 2, 3, 4, 5, 6 }));
+}
diff --git a/t/unit-tests/t-reftable-tree.c b/t/unit-tests/u-reftable-tree.c
index 79b175a45a..bcf9061071 100644
--- a/t/unit-tests/t-reftable-tree.c
+++ b/t/unit-tests/u-reftable-tree.c
@@ -6,7 +6,7 @@ license that can be found in the LICENSE file or at
https://developers.google.com/open-source/licenses/bsd
*/
-#include "test-lib.h"
+#include "unit-test.h"
#include "reftable/tree.h"
static int t_compare(const void *a, const void *b)
@@ -25,7 +25,7 @@ static void store(void *arg, void *key)
c->arr[c->len++] = key;
}
-static void t_tree_search(void)
+void test_reftable_tree__tree_search(void)
{
struct tree_node *root = NULL;
void *values[11] = { 0 };
@@ -38,20 +38,20 @@ static void t_tree_search(void)
*/
do {
nodes[i] = tree_insert(&root, &values[i], &t_compare);
- check(nodes[i] != NULL);
+ cl_assert(nodes[i] != NULL);
i = (i * 7) % 11;
} while (i != 1);
for (i = 1; i < ARRAY_SIZE(nodes); i++) {
- check_pointer_eq(&values[i], nodes[i]->key);
- check_pointer_eq(nodes[i], tree_search(root, &values[i], &t_compare));
+ cl_assert_equal_p(&values[i], nodes[i]->key);
+ cl_assert_equal_p(nodes[i], tree_search(root, &values[i], &t_compare));
}
- check(!tree_search(root, values, t_compare));
+ cl_assert(tree_search(root, values, t_compare) == NULL);
tree_free(root);
}
-static void t_infix_walk(void)
+void test_reftable_tree__infix_walk(void)
{
struct tree_node *root = NULL;
void *values[11] = { 0 };
@@ -64,23 +64,15 @@ static void t_infix_walk(void)
do {
struct tree_node *node = tree_insert(&root, &values[i], t_compare);
- check(node != NULL);
+ cl_assert(node != NULL);
i = (i * 7) % 11;
count++;
} while (i != 1);
infix_walk(root, &store, &c);
for (i = 1; i < ARRAY_SIZE(values); i++)
- check_pointer_eq(&values[i], out[i - 1]);
- check(!out[i - 1]);
- check_int(c.len, ==, count);
+ cl_assert_equal_p(&values[i], out[i - 1]);
+ cl_assert(out[i - 1] == NULL);
+ cl_assert_equal_i(c.len, count);
tree_free(root);
}
-
-int cmd_main(int argc UNUSED, const char *argv[] UNUSED)
-{
- TEST(t_tree_search(), "tree_search works");
- TEST(t_infix_walk(), "infix_walk works");
-
- return test_done();
-}
diff --git a/tmp-objdir.c b/tmp-objdir.c
index 659fcdcc29..0ea078a5c5 100644
--- a/tmp-objdir.c
+++ b/tmp-objdir.c
@@ -1,5 +1,3 @@
-#define USE_THE_REPOSITORY_VARIABLE
-
#include "git-compat-util.h"
#include "tmp-objdir.h"
#include "abspath.h"
@@ -16,6 +14,7 @@
#include "repository.h"
struct tmp_objdir {
+ struct repository *repo;
struct strbuf path;
struct strvec env;
struct object_directory *prev_odb;
@@ -116,7 +115,8 @@ static int setup_tmp_objdir(const char *root)
return ret;
}
-struct tmp_objdir *tmp_objdir_create(const char *prefix)
+struct tmp_objdir *tmp_objdir_create(struct repository *r,
+ const char *prefix)
{
static int installed_handlers;
struct tmp_objdir *t;
@@ -125,6 +125,7 @@ struct tmp_objdir *tmp_objdir_create(const char *prefix)
BUG("only one tmp_objdir can be used at a time");
t = xcalloc(1, sizeof(*t));
+ t->repo = r;
strbuf_init(&t->path, 0);
strvec_init(&t->env);
@@ -134,7 +135,7 @@ struct tmp_objdir *tmp_objdir_create(const char *prefix)
* them.
*/
strbuf_addf(&t->path, "%s/tmp_objdir-%s-XXXXXX",
- repo_get_object_directory(the_repository), prefix);
+ repo_get_object_directory(r), prefix);
if (!mkdtemp(t->path.buf)) {
/* free, not destroy, as we never touched the filesystem */
@@ -154,7 +155,7 @@ struct tmp_objdir *tmp_objdir_create(const char *prefix)
}
env_append(&t->env, ALTERNATE_DB_ENVIRONMENT,
- absolute_path(repo_get_object_directory(the_repository)));
+ absolute_path(repo_get_object_directory(r)));
env_replace(&t->env, DB_ENVIRONMENT, absolute_path(t->path.buf));
env_replace(&t->env, GIT_QUARANTINE_ENVIRONMENT,
absolute_path(t->path.buf));
@@ -273,14 +274,14 @@ int tmp_objdir_migrate(struct tmp_objdir *t)
return 0;
if (t->prev_odb) {
- if (the_repository->objects->odb->will_destroy)
+ if (t->repo->objects->odb->will_destroy)
BUG("migrating an ODB that was marked for destruction");
restore_primary_odb(t->prev_odb, t->path.buf);
t->prev_odb = NULL;
}
strbuf_addbuf(&src, &t->path);
- strbuf_addstr(&dst, repo_get_object_directory(the_repository));
+ strbuf_addstr(&dst, repo_get_object_directory(t->repo));
ret = migrate_paths(&src, &dst, 0);
diff --git a/tmp-objdir.h b/tmp-objdir.h
index 237d96b660..fceda14979 100644
--- a/tmp-objdir.h
+++ b/tmp-objdir.h
@@ -11,7 +11,7 @@
* Example:
*
* struct child_process child = CHILD_PROCESS_INIT;
- * struct tmp_objdir *t = tmp_objdir_create("incoming");
+ * struct tmp_objdir *t = tmp_objdir_create(repo, "incoming");
* strvec_push(&child.args, cmd);
* strvec_pushv(&child.env, tmp_objdir_env(t));
* if (!run_command(&child)) && !tmp_objdir_migrate(t))
@@ -21,13 +21,14 @@
*
*/
+struct repository;
struct tmp_objdir;
/*
* Create a new temporary object directory with the specified prefix;
* returns NULL on failure.
*/
-struct tmp_objdir *tmp_objdir_create(const char *prefix);
+struct tmp_objdir *tmp_objdir_create(struct repository *r, const char *prefix);
/*
* Return a list of environment strings, suitable for use with
diff --git a/trace.c b/trace.c
index 2cfd25942e..9b99460db8 100644
--- a/trace.c
+++ b/trace.c
@@ -21,7 +21,6 @@
* along with this program; if not, see <https://www.gnu.org/licenses/>.
*/
-#define USE_THE_REPOSITORY_VARIABLE
#define DISABLE_SIGN_COMPARE_WARNINGS
#include "git-compat-util.h"
@@ -298,7 +297,7 @@ static const char *quote_crnl(const char *path)
return new_path.buf;
}
-void trace_repo_setup(void)
+void trace_repo_setup(struct repository *r)
{
const char *git_work_tree, *prefix = startup_info->prefix;
char *cwd;
@@ -308,14 +307,14 @@ void trace_repo_setup(void)
cwd = xgetcwd();
- if (!(git_work_tree = repo_get_work_tree(the_repository)))
+ if (!(git_work_tree = repo_get_work_tree(r)))
git_work_tree = "(null)";
if (!startup_info->prefix)
prefix = "(null)";
- trace_printf_key(&trace_setup_key, "setup: git_dir: %s\n", quote_crnl(repo_get_git_dir(the_repository)));
- trace_printf_key(&trace_setup_key, "setup: git_common_dir: %s\n", quote_crnl(repo_get_common_dir(the_repository)));
+ trace_printf_key(&trace_setup_key, "setup: git_dir: %s\n", quote_crnl(repo_get_git_dir(r)));
+ trace_printf_key(&trace_setup_key, "setup: git_common_dir: %s\n", quote_crnl(repo_get_common_dir(r)));
trace_printf_key(&trace_setup_key, "setup: worktree: %s\n", quote_crnl(git_work_tree));
trace_printf_key(&trace_setup_key, "setup: cwd: %s\n", quote_crnl(cwd));
trace_printf_key(&trace_setup_key, "setup: prefix: %s\n", quote_crnl(prefix));
diff --git a/trace.h b/trace.h
index d304d55aa1..9152fe9b3e 100644
--- a/trace.h
+++ b/trace.h
@@ -92,7 +92,9 @@ extern struct trace_key trace_default_key;
extern struct trace_key trace_perf_key;
extern struct trace_key trace_setup_key;
-void trace_repo_setup(void);
+struct repository;
+
+void trace_repo_setup(struct repository *r);
/**
* Checks whether the trace key is enabled. Used to prevent expensive
diff --git a/trace2.c b/trace2.c
index 82d16e2783..c23c0a227b 100644
--- a/trace2.c
+++ b/trace2.c
@@ -764,7 +764,7 @@ void trace2_def_param_fl(const char *file, int line, const char *param,
if (!trace2_enabled)
return;
- redacted = redact_arg(value);
+ redacted = value ? redact_arg(value) : NULL;
for_each_wanted_builtin (j, tgt_j)
if (tgt_j->pfn_param_fl)
diff --git a/trace2/tr2_tgt_event.c b/trace2/tr2_tgt_event.c
index 69ee40449f..5a0381791f 100644
--- a/trace2/tr2_tgt_event.c
+++ b/trace2/tr2_tgt_event.c
@@ -493,7 +493,8 @@ static void fn_param_fl(const char *file, int line, const char *param,
event_fmt_prepare(event_name, file, line, NULL, &jw);
jw_object_string(&jw, "scope", scope_name);
jw_object_string(&jw, "param", param);
- jw_object_string(&jw, "value", value);
+ if (value)
+ jw_object_string(&jw, "value", value);
jw_end(&jw);
tr2_dst_write_line(&tr2dst_event, &jw.json);
diff --git a/trace2/tr2_tgt_normal.c b/trace2/tr2_tgt_normal.c
index baef48aa69..924736ab36 100644
--- a/trace2/tr2_tgt_normal.c
+++ b/trace2/tr2_tgt_normal.c
@@ -307,8 +307,9 @@ static void fn_param_fl(const char *file, int line, const char *param,
enum config_scope scope = kvi->scope;
const char *scope_name = config_scope_name(scope);
- strbuf_addf(&buf_payload, "def_param scope:%s %s=%s", scope_name, param,
- value);
+ strbuf_addf(&buf_payload, "def_param scope:%s %s", scope_name, param);
+ if (value)
+ strbuf_addf(&buf_payload, "=%s", value);
normal_io_write_fl(file, line, &buf_payload);
strbuf_release(&buf_payload);
}
diff --git a/trace2/tr2_tgt_perf.c b/trace2/tr2_tgt_perf.c
index 298ae27f9d..4eb9289f95 100644
--- a/trace2/tr2_tgt_perf.c
+++ b/trace2/tr2_tgt_perf.c
@@ -448,8 +448,9 @@ static void fn_param_fl(const char *file, int line, const char *param,
struct strbuf scope_payload = STRBUF_INIT;
enum config_scope scope = kvi->scope;
const char *scope_name = config_scope_name(scope);
-
- strbuf_addf(&buf_payload, "%s:%s", param, value);
+ strbuf_addstr(&buf_payload, param);
+ if (value)
+ strbuf_addf(&buf_payload, ":%s", value);
strbuf_addf(&scope_payload, "%s:%s", "scope", scope_name);
perf_io_write_fl(file, line, event_name, NULL, NULL, NULL,
diff --git a/transport.c b/transport.c
index 10d820c333..81ae8243b9 100644
--- a/transport.c
+++ b/transport.c
@@ -932,7 +932,7 @@ static int git_transport_push(struct transport *transport, struct ref *remote_re
break;
case protocol_v1:
case protocol_v0:
- ret = send_pack(&args, data->fd, data->conn, remote_refs,
+ ret = send_pack(the_repository, &args, data->fd, data->conn, remote_refs,
&data->extra_have);
break;
case protocol_unknown_version:
diff --git a/unpack-trees.c b/unpack-trees.c
index b3be5d542f..334cb84f65 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c
@@ -372,7 +372,8 @@ static struct progress *get_progress(struct unpack_trees_options *o,
total++;
}
- return start_delayed_progress(_("Updating files"), total);
+ return start_delayed_progress(the_repository,
+ _("Updating files"), total);
}
static void setup_collided_checkout_detection(struct checkout *state,
@@ -1773,6 +1774,7 @@ static int clear_ce_flags(struct index_state *istate,
strbuf_reset(&prefix);
if (show_progress)
istate->progress = start_delayed_progress(
+ the_repository,
_("Updating index flags"),
istate->cache_nr);
diff --git a/usage.c b/usage.c
index 47709006c1..38b46bbbfe 100644
--- a/usage.c
+++ b/usage.c
@@ -8,7 +8,7 @@
#include "gettext.h"
#include "trace2.h"
-static void vreportf(const char *prefix, const char *err, va_list params)
+static void vfreportf(FILE *f, const char *prefix, const char *err, va_list params)
{
char msg[4096];
char *p, *pend = msg + sizeof(msg);
@@ -32,8 +32,13 @@ static void vreportf(const char *prefix, const char *err, va_list params)
}
*(p++) = '\n'; /* we no longer need a NUL */
- fflush(stderr);
- write_in_full(2, msg, p - msg);
+ fflush(f);
+ write_in_full(fileno(f), msg, p - msg);
+}
+
+static void vreportf(const char *prefix, const char *err, va_list params)
+{
+ vfreportf(stderr, prefix, err, params);
}
static NORETURN void usage_builtin(const char *err, va_list params)
@@ -173,6 +178,22 @@ void NORETURN usage(const char *err)
usagef("%s", err);
}
+static void show_usage_if_asked_helper(const char *err, ...)
+{
+ va_list params;
+
+ va_start(params, err);
+ vfreportf(stdout, _("usage: "), err, params);
+ va_end(params);
+ exit(129);
+}
+
+void show_usage_if_asked(int ac, const char **av, const char *err)
+{
+ if (ac == 2 && !strcmp(av[1], "-h"))
+ show_usage_if_asked_helper(err);
+}
+
void NORETURN die(const char *err, ...)
{
va_list params;
diff --git a/version.c b/version.c
index 4d763ab48d..4786c4e0a5 100644
--- a/version.c
+++ b/version.c
@@ -1,8 +1,13 @@
#include "git-compat-util.h"
#include "version.h"
-#include "version-def.h"
#include "strbuf.h"
+#ifndef GIT_VERSION_H
+# include "version-def.h"
+#else
+# include GIT_VERSION_H
+#endif
+
const char git_version_string[] = GIT_VERSION;
const char git_built_from_commit_string[] = GIT_BUILT_FROM_COMMIT;
diff --git a/walker.c b/walker.c
index 7cc9dbea46..1cf3da0219 100644
--- a/walker.c
+++ b/walker.c
@@ -172,7 +172,8 @@ static int loop(struct walker *walker)
uint64_t nr = 0;
if (walker->get_progress)
- progress = start_delayed_progress(_("Fetching objects"), 0);
+ progress = start_delayed_progress(the_repository,
+ _("Fetching objects"), 0);
while (process_queue) {
struct object *obj = process_queue->item;
diff --git a/wrapper.c b/wrapper.c
index fa79fd6ec9..8b98593149 100644
--- a/wrapper.c
+++ b/wrapper.c
@@ -479,7 +479,7 @@ int git_mkstemps_mode(char *pattern, int suffix_len, int mode)
for (count = 0; count < TMP_MAX; ++count) {
int i;
uint64_t v;
- if (csprng_bytes(&v, sizeof(v)) < 0)
+ if (csprng_bytes(&v, sizeof(v), 0) < 0)
return error_errno("unable to get random bytes for temporary file");
/* Fill in the random bits. */
@@ -750,7 +750,7 @@ int open_nofollow(const char *path, int flags)
#endif
}
-int csprng_bytes(void *buf, size_t len)
+int csprng_bytes(void *buf, size_t len, MAYBE_UNUSED unsigned flags)
{
#if defined(HAVE_ARC4RANDOM) || defined(HAVE_ARC4RANDOM_LIBBSD)
/* This function never returns an error. */
@@ -785,14 +785,18 @@ int csprng_bytes(void *buf, size_t len)
return -1;
return 0;
#elif defined(HAVE_OPENSSL_CSPRNG)
- int res = RAND_bytes(buf, len);
- if (res == 1)
+ switch (RAND_pseudo_bytes(buf, len)) {
+ case 1:
return 0;
- if (res == -1)
- errno = ENOTSUP;
- else
+ case 0:
+ if (flags & CSPRNG_BYTES_INSECURE)
+ return 0;
errno = EIO;
- return -1;
+ return -1;
+ default:
+ errno = ENOTSUP;
+ return -1;
+ }
#else
ssize_t res;
char *p = buf;
@@ -816,11 +820,11 @@ int csprng_bytes(void *buf, size_t len)
#endif
}
-uint32_t git_rand(void)
+uint32_t git_rand(unsigned flags)
{
uint32_t result;
- if (csprng_bytes(&result, sizeof(result)) < 0)
+ if (csprng_bytes(&result, sizeof(result), flags) < 0)
die(_("unable to get random bytes"));
return result;
diff --git a/wrapper.h b/wrapper.h
index a6b3e1f09e..7df824e34a 100644
--- a/wrapper.h
+++ b/wrapper.h
@@ -127,18 +127,26 @@ int open_nofollow(const char *path, int flags);
void sleep_millisec(int millisec);
+enum {
+ /*
+ * Accept insecure bytes, which some CSPRNG implementations may return
+ * in case the entropy pool has been exhausted.
+ */
+ CSPRNG_BYTES_INSECURE = (1 << 0),
+};
+
/*
* Generate len bytes from the system cryptographically secure PRNG.
* Returns 0 on success and -1 on error, setting errno. The inability to
- * satisfy the full request is an error.
+ * satisfy the full request is an error. Accepts CSPRNG flags.
*/
-int csprng_bytes(void *buf, size_t len);
+int csprng_bytes(void *buf, size_t len, unsigned flags);
/*
* Returns a random uint32_t, uniformly distributed across all possible
- * values.
+ * values. Accepts CSPRNG flags.
*/
-uint32_t git_rand(void);
+uint32_t git_rand(unsigned flags);
/* Provide log2 of the given `size_t`. */
static inline unsigned log2u(uintmax_t sz)